From 785febe3dfbae470be4057ef4a4d6442626314c1 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:19:36 +1000 Subject: [PATCH 01/98] Rejig library config for AM3 --- CMakeLists.txt | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55d432a5c..cef0539cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,19 +132,6 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/params/cable_phys_constants_mod.F90 - src/params/grid_constants_cbl.F90 - src/params/cable_photo_constants_mod.F90 - src/params/cable_other_constants_mod.F90 - src/params/cable_maths_constants_mod.F90 - src/util/cable_runtime_opts_mod.F90 - src/util/cable_common.F90 - src/coupled/shared/cable_canopy_type_mod.F90 - src/coupled/shared/cable_soilsnow_type_mod.F90 - src/coupled/shared/cable_soil_type_mod.F90 - src/coupled/shared/cable_veg_type_mod.F90 - src/util/cable_climate_type_mod.F90 - src/util/masks_cbl.F90 ) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") @@ -156,6 +143,19 @@ if(CABLE_LIBRARY) src/coupled/esm/cable_pft_params_mod.F90 src/coupled/esm/casa_landuse.F90 src/coupled/esm/LAI_canopy_height_cbl.F90 + src/params/cable_phys_constants_mod.F90 + src/params/grid_constants_cbl.F90 + src/params/cable_photo_constants_mod.F90 + src/params/cable_other_constants_mod.F90 + src/params/cable_maths_constants_mod.F90 + src/util/cable_runtime_opts_mod.F90 + src/util/cable_common.F90 + src/coupled/shared/cable_canopy_type_mod.F90 + src/coupled/shared/cable_soilsnow_type_mod.F90 + src/coupled/shared/cable_soil_type_mod.F90 + src/coupled/shared/cable_veg_type_mod.F90 + src/util/cable_climate_type_mod.F90 + src/util/masks_cbl.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) @@ -165,6 +165,14 @@ if(CABLE_LIBRARY) message(STATUS "Cannot compile library with unknown compiler") endif() + elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") + if (CMAKE_Fortran_COMPILER_ID MATHCES "Intel") + add_compile_options(-r8 -i8) + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + add_compile_options(-fdefault-real-8 -fdefault-integer-8 -fdefault-double-8) + else() + message(STATUS "Cannot compile library with unknown compiler") + endif() else() message(STATUS "Specified library application does not exist") endif() From 5e0bd5a1ee77fb03571ba50d9f12d7659f25b9f1 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:39:18 +1000 Subject: [PATCH 02/98] Add library manifests to CI --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d4f9d92ae..3e1e9c130 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,6 +12,8 @@ jobs: spack-manifest-path: - .github/build-ci/manifests/gcc.spack.yaml.j2 - .github/build-ci/manifests/intel.spack.yaml.j2 + - .github/build-ci/manifests/library-gcc.spack.yaml.j2 + - .github/build-ci/manifests/library-intel.spack.yaml.j2 uses: access-nri/build-ci/.github/workflows/ci.yml@v3 with: # For defaults for args not specified here (eg. spack/packages/config refs), see https://github.com/ACCESS-NRI/build-ci/blob/v3/.github/workflows/README.md From 5ea70cd3ab9bc7099a56c8df991b9740ebddab5d Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:43:59 +1000 Subject: [PATCH 03/98] Add library manifests to CI --- .../manifests/library-gcc.spack.yaml.j2 | 17 +++++++++++++++++ .../manifests/library-intel.spack.yaml.j2 | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/build-ci/manifests/library-gcc.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/library-intel.spack.yaml.j2 diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 new file mode 100644 index 000000000..272eeb171 --- /dev/null +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + # package is defined in the workflows inputs.spack-manifest-data-pairs + # gcc_compiler_ver is defined in the standard_definitions.json data file + - '{{ package }} +mpi library=access3' + - '{{ package }} ~mpi library=access3' + packages: + gcc: + require: + - '{{ gcc_compiler_ver }}' + all: + require: + - '%access_gcc' + - 'target={{ target }}' + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 new file mode 100644 index 000000000..dd2565bae --- /dev/null +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + # package is defined in the workflows inputs.spack-manifest-data-pairs + # intel_compiler_ver is defined in the standard_definitions.json data file + - '{{ package }} +mpi library=access3' + - '{{ package }} ~mpi library=access3' + packages: + intel-oneapi-compilers-classic: + require: + - '{{ intel_compiler_ver }}' + all: + require: + - '%access_intel' + - 'target={{ target }}' + concretizer: + unify: false + view: false From 1bdd9237172837b7a2561bb500b4af29bcb6b284 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:46:35 +1000 Subject: [PATCH 04/98] Set ref for spack-packages --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e1e9c130..ab013d2de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: spack-manifest-path: ${{ matrix.spack-manifest-path }} # We need to install the compilers manually here because the upstream image is too large to run on GitHub-hosted runners spack-compiler-manifest-path: .github/build-ci/compilers/spack.yaml + access-spack-packages-ref: 1d9acf45c39229ff4e90a9aa49922b1169305476 allow-ssh-into-spack-install: false spack-oci-buildcache-url: oci://ghcr.io/CABLE-LSM/build-ci-buildcache # https://github.com/orgs/CABLE-LSM/packages/container/package/build-ci-buildcache # Since CABLE-LSM can't access ACCESS-NRI's self-hosted runners, we use a GitHub-hosted version From 3cb40571e93abc82951919641c51d1bbdadc816d Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 15:37:31 +1000 Subject: [PATCH 05/98] Remove templates taken from spack-packages --- .github/build-ci/manifests/library-gcc.spack.yaml.j2 | 8 ++++---- .github/build-ci/manifests/library-intel.spack.yaml.j2 | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 index 272eeb171..9195ff0ea 100644 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -2,16 +2,16 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # gcc_compiler_ver is defined in the standard_definitions.json data file - - '{{ package }} +mpi library=access3' - - '{{ package }} ~mpi library=access3' + - 'cable@git.{{ ref }} +mpi library=access3' + - 'cable@git.{{ ref }} ~mpi library=access3' packages: gcc: require: - - '{{ gcc_compiler_ver }}' + - '@13.2.0' all: require: - '%access_gcc' - - 'target={{ target }}' + - 'target=x86_64 concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 index dd2565bae..050fee6fa 100644 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -2,16 +2,16 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # intel_compiler_ver is defined in the standard_definitions.json data file - - '{{ package }} +mpi library=access3' - - '{{ package }} ~mpi library=access3' + - 'cable@git.{{ ref }} +mpi library=access3' + - 'cable@git.{{ ref }} ~mpi library=access3' packages: intel-oneapi-compilers-classic: require: - - '{{ intel_compiler_ver }}' + - '@2021.10.0' all: require: - '%access_intel' - - 'target={{ target }}' + - 'target=x86_64' concretizer: unify: false view: false From 329c3022682a5b8e7299f9898e2116d6fee062c7 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 15:56:17 +1000 Subject: [PATCH 06/98] Fix quotes --- .github/build-ci/manifests/library-gcc.spack.yaml.j2 | 6 +++--- .github/build-ci/manifests/library-intel.spack.yaml.j2 | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 index 9195ff0ea..a6cda21ee 100644 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -2,8 +2,8 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # gcc_compiler_ver is defined in the standard_definitions.json data file - - 'cable@git.{{ ref }} +mpi library=access3' - - 'cable@git.{{ ref }} ~mpi library=access3' + - cable@git.{{ ref }} +mpi library=access3 + - cable@git.{{ ref }} ~mpi library=access3 packages: gcc: require: @@ -11,7 +11,7 @@ spack: all: require: - '%access_gcc' - - 'target=x86_64 + - target=x86_64 concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 index 050fee6fa..b9c351dca 100644 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -2,8 +2,8 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # intel_compiler_ver is defined in the standard_definitions.json data file - - 'cable@git.{{ ref }} +mpi library=access3' - - 'cable@git.{{ ref }} ~mpi library=access3' + - cable@git.{{ ref }} +mpi library=access3 + - cable@git.{{ ref }} ~mpi library=access3 packages: intel-oneapi-compilers-classic: require: @@ -11,7 +11,7 @@ spack: all: require: - '%access_intel' - - 'target=x86_64' + - target=x86_64 concretizer: unify: false view: false From 4a692ca75d04742a2957d3cf8cf5ddae96292a68 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:04:32 +1000 Subject: [PATCH 07/98] Misspelled matches --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cef0539cd..b25ce8c25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,7 +166,7 @@ if(CABLE_LIBRARY) endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") - if (CMAKE_Fortran_COMPILER_ID MATHCES "Intel") + if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") add_compile_options(-fdefault-real-8 -fdefault-integer-8 -fdefault-double-8) From 395b1fafa67227d67a1054735688883bbba7a07d Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:26:26 +1000 Subject: [PATCH 08/98] Move some files to common library --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b25ce8c25..1a34c7d6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,6 +132,15 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 + src/params/cable_phys_constants_mod.F90 + src/params/grid_constants_cbl.F90 + src/params/cable_photo_constants_mod.F90 + src/params/cable_other_constants_mod.F90 + src/params/cable_maths_constants_mod.F90 + src/util/cable_runtime_opts_mod.F90 + src/util/cable_common.F90 + src/util/cable_climate_type_mod.F90 + src/util/masks_cbl.F90 ) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") @@ -143,19 +152,10 @@ if(CABLE_LIBRARY) src/coupled/esm/cable_pft_params_mod.F90 src/coupled/esm/casa_landuse.F90 src/coupled/esm/LAI_canopy_height_cbl.F90 - src/params/cable_phys_constants_mod.F90 - src/params/grid_constants_cbl.F90 - src/params/cable_photo_constants_mod.F90 - src/params/cable_other_constants_mod.F90 - src/params/cable_maths_constants_mod.F90 - src/util/cable_runtime_opts_mod.F90 - src/util/cable_common.F90 src/coupled/shared/cable_canopy_type_mod.F90 src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 - src/util/cable_climate_type_mod.F90 - src/util/masks_cbl.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From d03381096fea49c406d4dbac2f2f6c6e65ca122f Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:43:21 +1000 Subject: [PATCH 09/98] Add type files to library --- CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a34c7d6b..14bf3c78d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,23 @@ if(CABLE_LIBRARY) endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") + list(APPEND SOURCES + src/coupled/AM3/control/CM3/air_type.F90 + src/coupled/AM3/control/CM3/balances_type.F90 + src/coupled/AM3/control/CM3/bgc_pool_type.F90 + src/coupled/AM3/control/CM3/cable_define_types.F90 + src/coupled/AM3/control/CM3/cbl_canopy_type.F90 + src/coupled/AM3/control/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/CM3/climate_type.F90 + src/coupled/AM3/control/CM3/met_type_cbl.F90 + src/coupled/AM3/control/CM3/radiation_type.F90 + src/coupled/AM3/control/CM3/read_cable_namelists_mod.F90 + src/coupled/AM3/control/CM3/roughness_type.F90 + src/coupled/AM3/control/CM3/soil_type_cbl.F90 + src/coupled/AM3/control/CM3/ssnow_type.F90 + src/coupled/AM3/control/CM3/sum_flux_type.F90 + src/coupled/AM3/control/CM3/veg_type.F90 + ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") From f84c396e511133422f00e44f4338c44a1370bab3 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:22:34 +1000 Subject: [PATCH 10/98] Fix some file names --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14bf3c78d..f57dc78be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,21 +167,21 @@ if(CABLE_LIBRARY) elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") list(APPEND SOURCES - src/coupled/AM3/control/CM3/air_type.F90 - src/coupled/AM3/control/CM3/balances_type.F90 - src/coupled/AM3/control/CM3/bgc_pool_type.F90 - src/coupled/AM3/control/CM3/cable_define_types.F90 - src/coupled/AM3/control/CM3/cbl_canopy_type.F90 - src/coupled/AM3/control/CM3/cable_cbm_mod.F90 - src/coupled/AM3/control/CM3/climate_type.F90 - src/coupled/AM3/control/CM3/met_type_cbl.F90 - src/coupled/AM3/control/CM3/radiation_type.F90 - src/coupled/AM3/control/CM3/read_cable_namelists_mod.F90 - src/coupled/AM3/control/CM3/roughness_type.F90 - src/coupled/AM3/control/CM3/soil_type_cbl.F90 - src/coupled/AM3/control/CM3/ssnow_type.F90 - src/coupled/AM3/control/CM3/sum_flux_type.F90 - src/coupled/AM3/control/CM3/veg_type.F90 + src/coupled/AM3/control/cable/CM3/air_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/balances_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 + src/coupled/AM3/control/cable/CM3/cable_define_types.F90 + src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 + src/coupled/AM3/control/cable/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/cable/CM3/climate_type.F90 + src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/radiation_type.F90 + src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 + src/coupled/AM3/control/cable/CM3/roughness_type.F90 + src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/ssnow_type.F90 + src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 + src/coupled/AM3/control/cable/CM3/veg_type.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From fea2e45c6806a5d4b1758977cf4c7bd5b72adfd0 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:33:44 +1000 Subject: [PATCH 11/98] Fix more file names --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f57dc78be..90163e48e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,7 +172,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 src/coupled/AM3/control/cable/CM3/cable_define_types.F90 src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 - src/coupled/AM3/control/cable/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 src/coupled/AM3/control/cable/CM3/climate_type.F90 src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 src/coupled/AM3/control/cable/CM3/radiation_type.F90 From b5e9b4d8439b4b540149229bdb81701aa4761d4b Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:54:08 +1000 Subject: [PATCH 12/98] Drop coupled namelists mod --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 90163e48e..0aebf7e61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -176,7 +176,6 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/climate_type.F90 src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 src/coupled/AM3/control/cable/CM3/radiation_type.F90 - src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 src/coupled/AM3/control/cable/CM3/roughness_type.F90 src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 src/coupled/AM3/control/cable/CM3/ssnow_type.F90 From 367ba2f4add75b56f5269dd484dd488b0c8687e1 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 10:08:40 +1000 Subject: [PATCH 13/98] Add surface types mod --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0aebf7e61..49b34674b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 + src/coupled/AM3/control/shared/cable_surface_types_mod.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 878632de0a1a4dc19051ba3477640b97d247046b Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 10:18:19 +1000 Subject: [PATCH 14/98] Fix name --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49b34674b..da30aae30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,7 +181,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 - src/coupled/AM3/control/shared/cable_surface_types_mod.F90 + src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 114cf54033f03e2ca78121b5adf6b3de66e7aca0 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:33:44 +1000 Subject: [PATCH 15/98] use new cable_surface_types_mod.F90 --- .../cable/shared/cable_surface_types_mod.F90 | 402 ++---------------- 1 file changed, 35 insertions(+), 367 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1c1f808c0..02e9fb0bf 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -1,377 +1,45 @@ -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* - MODULE cable_surface_types_mod -!----------------------------------------------------------------------------- -! Description: -! Contains CABLE surface type information and a namelist for setting them -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -USE max_dimensions, ONLY: & - elev_tile_max, & - ntype_max - -USE missing_data_mod, ONLY: imdi - -!----------------------------------------------------------------------------- -! Module variables. -!----------------------------------------------------------------------------- -USE jules_surface_types_mod, ONLY: & - nnpft, & - ncpft, & - npft, & - nnvg, & - ntype, & - urban, & - lake, & - soil, & - ice - -IMPLICIT NONE - -! Index of the various surface types used by CABLE" -INTEGER :: & - evergreen_needleleaf = imdi, & - evergreen_broadleaf = imdi, & - deciduous_needleleaf = imdi, & - deciduous_broadleaf = imdi, & - shrub_cable = imdi, & - c3_grassland = imdi, & - c4_grassland = imdi, & - tundra = imdi, & - c3_cropland = imdi, & - c4_cropland = imdi, & - wetland = imdi, & - empty1 = imdi, & - empty2 = imdi, & - barren_cable = imdi, & - urban_cable = imdi, & - lakes_cable = imdi, & - ice_cable = imdi - -!----------------------------------------------------------------------------- -! Single namelist definition for UM and standalone -!----------------------------------------------------------------------------- -NAMELIST / cable_surface_types/ & - npft, nnvg, & - evergreen_needleleaf, evergreen_broadleaf, deciduous_needleleaf, & - deciduous_broadleaf, shrub_cable, c3_grassland, c4_grassland, & - tundra, c3_cropland, c4_cropland, wetland, empty1, empty2, & - barren_cable, urban_cable, lakes_cable, ice_cable - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='CABLE_SURFACE_TYPES_MOD' + IMPLICIT NONE + + PUBLIC + + ! cable_surface_type (nml) Index + INTEGER, PARAMETER :: evergreen_needleleaf = 1 + INTEGER, PARAMETER :: evergreen_broadleaf = 2 + INTEGER, PARAMETER :: deciduous_needleleaf = 3 + INTEGER, PARAMETER :: deciduous_broadleaf = 4 + INTEGER, PARAMETER :: shrub_cable = 5 + INTEGER, PARAMETER :: c3_grassland = 6 + INTEGER, PARAMETER :: c4_grassland = 7 + INTEGER, PARAMETER :: tundra = 8 + INTEGER, PARAMETER :: c3_cropland = 9 + INTEGER, PARAMETER :: c4_cropland = 10 + INTEGER, PARAMETER :: wetland = 11 + INTEGER, PARAMETER :: aust_mesic = 12 + INTEGER, PARAMETER :: aust_xeric = 13 + INTEGER, PARAMETER :: barren_cable = 14 + INTEGER, PARAMETER :: urban_cable = 15 + INTEGER, PARAMETER :: lakes_cable = 16 + INTEGER, PARAMETER :: ice_cable = 17 CONTAINS -SUBROUTINE check_surface_type_value ( surface_type, surface_type_name, & - min_value, max_value, RoutineName, errorstatus, nchecks ) - -USE jules_print_mgr, ONLY: jules_print - -IMPLICIT NONE - -INTEGER :: surface_type, min_value, max_value, errorstatus, nchecks -CHARACTER(LEN=*) :: surface_type_name, RoutineName - -IF ( surface_type > 0 ) THEN - nchecks = nchecks + 1 - IF ( surface_type < min_value .OR. surface_type > max_value ) THEN - errorstatus = 101 - CALL jules_print(RoutineName, & - TRIM(surface_type_name) // " tile is given but is out of range") - END IF -END IF - -END SUBROUTINE check_surface_type_value - -SUBROUTINE print_nlist_cable_surface_types() - -USE jules_print_mgr, ONLY: jules_print - -IMPLICIT NONE - -INTEGER :: i, n ! Loop counter - -CHARACTER(LEN=50000) :: lineBuffer - - -!----------------------------------------------------------------------------- -! This needs to be implemented corresponding to cable_surface_types -CALL jules_print('cable_surface_types', & - 'Contents of namelist cable_surface_types') - -!WRITE(lineBuffer, *) ' npft = ', npft -!CALL jules_print('cable_surface_types', lineBuffer) - -!IF ( brd_leaf > 0 ) THEN -! WRITE(lineBuffer, *) ' brd_leaf = ', brd_leaf -! CALL jules_print('cable_surface_types', lineBuffer) -!END IF - -!WRITE(lineBuffer, *) ' = ', -!CALL jules_print('cable_surface_types', lineBuffer) - -!IF ( > 0 ) THEN -! WRITE(lineBuffer, *) ' = ', -! CALL jules_print('cable_surface_types', lineBuffer) -!END IF - -CALL jules_print('cable_surface_types', & - '- - - - - - end of namelist - - - - - -') - -END SUBROUTINE print_nlist_cable_surface_types - - - -SUBROUTINE set_derived_variables_cable_surface_types() - -USE jules_print_mgr, ONLY: jules_print, jules_message - -IMPLICIT NONE - -!----------------------------------------------------------------------------- -! Derive ntype and nnpft from the namelist values -!----------------------------------------------------------------------------- -ntype = npft + nnvg -nnpft = npft - ncpft - -CALL jules_print('set_derived_variables_cable_surface_types', & - 'Derived variables from cable_surface_types') - -!WRITE(jules_message, *) ' ntype = ', ntype -!CALL jules_print('set_derived_variables_cable_surface_types', jules_message) -! -!WRITE(jules_message, *) ' nnpft = ', nnpft -!CALL jules_print('set_derived_variables_cable_surface_types', jules_message) - -CALL jules_print('set_derived_variables_cable_surface_types', & - '- - - - - - end of derived variables - - - - - -') - -RETURN - -END SUBROUTINE set_derived_variables_cable_surface_types - - - -SUBROUTINE check_cable_surface_types() - -USE max_dimensions, ONLY: npft_max, ncpft_max, nnvg_max - -USE ereport_mod, ONLY: ereport -USE jules_print_mgr, ONLY: jules_print, jules_message - -!----------------------------------------------------------------------------- -! Description: -! Checks cable_surface_types namelist for consistency -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE - -INTEGER :: i, nchecks ! Loop counter - -INTEGER :: errorstatus - -CHARACTER(LEN=*), PARAMETER :: & - RoutineName = 'CHECK_CABLE_SURFACE_TYPES' -!----------------------------------------------------------------------------- -! Check that the given values are less than the fixed values for IO -!----------------------------------------------------------------------------- -IF ( npft > npft_max ) THEN - errorstatus = 101 - CALL ereport(RoutineName, errorstatus, & - "npft > npft_max - increase npft_max and recompile") -END IF - -IF ( nnvg > nnvg_max ) THEN - errorstatus = 101 - CALL ereport(RoutineName, errorstatus, & - "nnvg > nnvg_max - increase nnvg_max and recompile") -END IF - -!----------------------------------------------------------------------------- -! Check values for the specific surface types are sensible -!----------------------------------------------------------------------------- -! PFTs -errorstatus = 0 -nchecks = 0 - -!!CALL check_surface_type_value ( brd_leaf, "brd_leaf", 1, npft, & -!! RoutineName, errorstatus, nchecks ) -!!CALL check_surface_type_value ( , "", 1, npft, & -!! RoutineName, errorstatus, nchecks ) -! -!! PFT surface types must come before non-veg types, so if urban, lake, soil, -!! ice, urban_canyon or urban_roof are given (i.e. > 0) then they must be > npft -!! A soil type is required -!!CALL check_surface_type_value ( urban, "urban", npft+1, ntype, & -!! RoutineName, errorstatus, nchecks ) -!!CALL check_surface_type_value ( , "", npft+1, ntype, & -!! RoutineName, errorstatus, nchecks ) - -!jhan:this will need to be properly implemented -nchecks = 17 -! Check that all present surface types have been checked for range compliance -! This check should also ensure that a check is added for each new surface type -IF ( nchecks /= ntype ) THEN - errorstatus = 101 - CALL jules_print(RoutineName, & - "At least one surface type in namelist does not have a range check.") - WRITE(jules_message,'(A,I0,A,I0)') & - "These should be the same; ntype = ", ntype, ", nchecks = ", nchecks - CALL jules_print(RoutineName, jules_message) -END IF - -! Now that all surface types have been checked issue abort if required -IF ( errorstatus > 0 ) THEN - CALL ereport(RoutineName, errorstatus, & - "Error(s) found. Please see job.out for information ") -END IF - -END SUBROUTINE check_cable_surface_types - -SUBROUTINE read_nml_cable_surface_types (unitnumber) - -! Description: -! Read the CABLE_SURFACE_TYPES namelist - -USE setup_namelist, ONLY: setup_nml_type -USE check_iostat_mod, ONLY: check_iostat -USE UM_parcore, ONLY: mype -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE errormessagelength_mod, ONLY: errormessagelength - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: unitnumber -INTEGER :: my_comm -INTEGER :: mpl_nml_type -INTEGER :: ErrorStatus -INTEGER :: icode -CHARACTER(LEN=errormessagelength) :: iomessage -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_CABLE_SURFACE_TYPES' -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 - -! set number of each type of variable in my_namelist type -INTEGER, PARAMETER :: no_of_types = 1 -INTEGER, PARAMETER :: n_int = 19 !+ ntype_max - -TYPE my_namelist - !!SEQUENCE - INTEGER :: npft - INTEGER :: nnvg - INTEGER :: evergreen_needleleaf - INTEGER :: evergreen_broadleaf - INTEGER :: deciduous_needleleaf - INTEGER :: deciduous_broadleaf - INTEGER :: shrub_cable - INTEGER :: c3_grassland - INTEGER :: c4_grassland - INTEGER :: tundra - INTEGER :: c3_cropland - INTEGER :: c4_cropland - INTEGER :: wetland - INTEGER :: empty1 - INTEGER :: empty2 - INTEGER :: barren_cable - INTEGER :: urban_cable - INTEGER :: lakes_cable - INTEGER :: ice_cable - !INTEGER :: tile_map_ids(ntype_max) -END TYPE my_namelist - -TYPE (my_namelist) :: my_nml - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL gc_get_communicator(my_comm, icode) - -CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int) - -IF (mype == 0) THEN - - READ (UNIT = unitnumber, NML = cable_surface_types, IOSTAT = errorstatus, & - IOMSG = iomessage) - CALL check_iostat(errorstatus, "namelist cable_surface_types",iomessage) - - my_nml % npft = npft - my_nml % nnvg = nnvg - my_nml % evergreen_needleleaf = evergreen_needleleaf - my_nml % evergreen_broadleaf = evergreen_broadleaf - my_nml % deciduous_needleleaf = deciduous_needleleaf - my_nml % deciduous_broadleaf = deciduous_broadleaf - my_nml % shrub_cable = shrub_cable - my_nml % c3_grassland = c3_grassland - my_nml % c4_grassland = c4_grassland - my_nml % tundra = tundra - my_nml % c3_cropland = c3_cropland - my_nml % c4_cropland = c4_cropland - my_nml % wetland = wetland - my_nml % empty1 = empty1 - my_nml % empty2 = empty2 - my_nml % barren_cable = barren_cable - my_nml % urban_cable = urban_cable - my_nml % lakes_cable = lakes_cable - my_nml % ice_cable = ice_cable - -END IF - -CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) - -IF (mype /= 0) THEN - - npft = my_nml % npft - nnvg = my_nml % nnvg - evergreen_needleleaf = my_nml % evergreen_needleleaf - evergreen_broadleaf = my_nml % evergreen_broadleaf - deciduous_needleleaf = my_nml % deciduous_needleleaf - deciduous_broadleaf = my_nml % deciduous_broadleaf - shrub_cable = my_nml % shrub_cable - c3_grassland = my_nml % c3_grassland - c4_grassland = my_nml % c4_grassland - tundra = my_nml % tundra - c3_cropland = my_nml % c3_cropland - c4_cropland = my_nml % c4_cropland - wetland = my_nml % wetland - empty1 = my_nml % empty1 - empty2 = my_nml % empty2 - barren_cable = my_nml %barren_cable - urban_cable = my_nml % urban_cable - lakes_cable = my_nml % lakes_cable - ice_cable = my_nml % ice_cable + SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& + soil, ice) + INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& + soil, ice -END IF + npft = 13 + nnvg = 4 + urban = urban_cable + lake = lake_cable + soil = barren_cable + ice = ice_cable -CALL mpl_type_free(mpl_nml_type,icode) + ntype = npft - nnvg + nnpft = npft - ncpft -soil = barren_cable -ice = ice_cable -lake = lakes_cable -urban = urban_cable - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE read_nml_cable_surface_types + END SUBROUTINE set_JULES_PFT_info END MODULE cable_surface_types_mod From cb6ac5c075ffb88466131e8b3e74bb258aada7ec Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:51:03 +1000 Subject: [PATCH 16/98] Wrong end subroutine name --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 02e9fb0bf..605274351 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -40,6 +40,6 @@ SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& ntype = npft - nnvg nnpft = npft - ncpft - END SUBROUTINE set_JULES_PFT_info + END SUBROUTINE set_JULES_surface_types END MODULE cable_surface_types_mod From 26c5d595b58dd31c658d0496b6d679d09e56911c Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:54:37 +1000 Subject: [PATCH 17/98] Add stash mapping --- .../cable/shared/cable_surface_types_mod.F90 | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 605274351..47bce4379 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -6,14 +6,14 @@ MODULE cable_surface_types_mod ! cable_surface_type (nml) Index INTEGER, PARAMETER :: evergreen_needleleaf = 1 - INTEGER, PARAMETER :: evergreen_broadleaf = 2 + INTEGER, PARAMETER :: evergreen_broadleaf = 2 INTEGER, PARAMETER :: deciduous_needleleaf = 3 - INTEGER, PARAMETER :: deciduous_broadleaf = 4 + INTEGER, PARAMETER :: deciduous_broadleaf = 4 INTEGER, PARAMETER :: shrub_cable = 5 - INTEGER, PARAMETER :: c3_grassland = 6 - INTEGER, PARAMETER :: c4_grassland = 7 + INTEGER, PARAMETER :: c3_grassland = 6 + INTEGER, PARAMETER :: c4_grassland = 7 INTEGER, PARAMETER :: tundra = 8 - INTEGER, PARAMETER :: c3_cropland = 9 + INTEGER, PARAMETER :: c3_cropland = 9 INTEGER, PARAMETER :: c4_cropland = 10 INTEGER, PARAMETER :: wetland = 11 INTEGER, PARAMETER :: aust_mesic = 12 @@ -25,11 +25,30 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& - soil, ice) + SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& + ntype, urban, lake, soil, ice) + INTEGER, INTENT(INOUT) :: surface_type_ids INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& soil, ice + surface_type_ids(evergreen_needleleaf) = 1 + surface_type_ids(evergreen_broadleaf ) = 2 + surface_type_ids(deciduous_needleleaf) = 3 + surface_type_ids(deciduous_broadleaf ) = 4 + surface_type_ids(shrub_cable ) = 5 + surface_type_ids(c3_grassland ) = 6 + surface_type_ids(c4_grassland ) = 7 + surface_type_ids(tundra ) = 8 + surface_type_ids(c3_cropland ) = 9 + surface_type_ids(c4_cropland ) = 10 + surface_type_ids(wetland ) = 11 + surface_type_ids(aust_mesic ) = 12 + surface_type_ids(aust_xeric ) = 13 + surface_type_ids(barren_cable ) = 14 + surface_type_ids(urban_cable ) = 15 + surface_type_ids(lakes_cable ) = 16 + surface_type_ids(ice_cable ) = 17 + npft = 13 nnvg = 4 urban = urban_cable From 8b94bfbf5c14360a49ff3d0aace9d3855d49cb98 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:07:40 +1000 Subject: [PATCH 18/98] Add ncpft back --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 47bce4379..8a7ec6a54 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -25,10 +25,10 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& - ntype, urban, lake, soil, ice) + SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& + nnvg, ntype, urban, lake, soil, ice) INTEGER, INTENT(INOUT) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& + INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& soil, ice surface_type_ids(evergreen_needleleaf) = 1 @@ -52,7 +52,7 @@ SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& npft = 13 nnvg = 4 urban = urban_cable - lake = lake_cable + lake = lakes_cable soil = barren_cable ice = ice_cable From 6f9b9b02a66090527ff27ffa630c4076cf1c954b Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:26:24 +1000 Subject: [PATCH 19/98] Add dimension declaration --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 8a7ec6a54..181468adc 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -27,7 +27,7 @@ MODULE cable_surface_types_mod SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& nnvg, ntype, urban, lake, soil, ice) - INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& soil, ice From 0bd7975ba732cac0cfa803496c6f6a445d05caae Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:50:35 +1000 Subject: [PATCH 20/98] Remove CASA IO from library --- CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da30aae30..fe0f784c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,15 +90,12 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_cnp.F90 src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 - src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 src/science/casa-cnp/casa_phenology.F90 src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 src/science/casa-cnp/casa_variable.F90 - src/science/landuse/landuse3.F90 - src/science/landuse/landuse_constant.F90 src/science/misc/cable_air.F90 src/science/misc/cable_carbon.F90 src/science/misc/cable_climate.F90 @@ -156,6 +153,8 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 + src/science/landuse/landuse3.F90 + src/science/landuse/landuse_constant.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From de283d469189035b03a88fd522f3bd9d21055cee Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 09:16:00 +1000 Subject: [PATCH 21/98] Readd landuse --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe0f784c2..2d54742f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,8 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 + src/science/landuse/landuse.F90 + src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 src/params/cable_photo_constants_mod.F90 From 921abd5fbde3c6b641d11007ab7aed10a72f1c21 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 09:56:16 +1000 Subject: [PATCH 22/98] Fix file name --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d54742f6..ba2f0622e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,8 +129,8 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/science/landuse/landuse.F90 - src/science/landuse/landuse_constant.F90 + src/science/landuse/landuse3.F90 + src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 src/params/cable_photo_constants_mod.F90 From feb632be0118280ab59ac174f9a81246a5cbd4d5 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 10:19:29 +1000 Subject: [PATCH 23/98] Add cable_iovars.F90 to the build with slight adjustment --- CMakeLists.txt | 5 ++--- src/offline/cable_iovars.F90 | 6 +++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba2f0622e..3540e2558 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,8 +155,6 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 - src/science/landuse/landuse3.F90 - src/science/landuse/landuse_constant.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) @@ -182,7 +180,8 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 - src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) diff --git a/src/offline/cable_iovars.F90 b/src/offline/cable_iovars.F90 index 80d87cf3a..096ef0300 100644 --- a/src/offline/cable_iovars.F90 +++ b/src/offline/cable_iovars.F90 @@ -106,7 +106,7 @@ MODULE cable_IO_vars_module max_vegpatches, & ! The maximum # of patches in any grid cell nmetpatches ! size of patch dimension in met file, if exists - INTEGER :: land_decomp_start + INTEGER :: land_decomp_start = 1 !! Starting land point index of this MPI rank in global land array INTEGER :: land_decomp_end !! Ending land point index of this MPI rank in global land array @@ -579,7 +579,11 @@ FUNCTION to_land_index_global(land_index_local) RESULT(land_index_global) !! Translate local land index on current MPI rank to global land index INTEGER, INTENT(IN) :: land_index_local INTEGER :: land_index_global +#ifdef UM_CBL + land_index_global = land_index_local +#else land_index_global = land_decomp_start + land_index_local - 1 +#endif END FUNCTION to_land_index_global END MODULE cable_IO_vars_module From dc432f74e01ad05c2a51798a1319384398e6e3b8 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 10:56:18 +1000 Subject: [PATCH 24/98] Readd casa_inout --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3540e2558..1589bdc23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,6 +90,7 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_cnp.F90 src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 + src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 src/science/casa-cnp/casa_phenology.F90 src/science/casa-cnp/casa_readbiome.F90 From 4813a19ceb90ad0192389b8c81fe13568454232e Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 27 May 2026 11:46:22 +1000 Subject: [PATCH 25/98] Library now builds --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 3 ++- src/science/soilsnow/cbl_GW.F90 | 1 + src/science/soilsnow/cbl_Oldconductivity.F90 | 2 ++ src/science/soilsnow/cbl_conductivity.F90 | 1 + src/science/soilsnow/cbl_hyd_redistrib.F90 | 1 + src/science/soilsnow/cbl_remove_trans.F90 | 1 + src/science/soilsnow/cbl_smoisturev.F90 | 1 + src/science/soilsnow/cbl_snowAccum.F90 | 1 + src/science/soilsnow/cbl_snowCheck.F90 | 1 + src/science/soilsnow/cbl_snowDensity.F90 | 1 + src/science/soilsnow/cbl_snowMelt.F90 | 1 + src/science/soilsnow/cbl_snowl_adjust.F90 | 1 + src/science/soilsnow/cbl_soilfreeze.F90 | 1 + src/science/soilsnow/cbl_soilsnow_data.F90 | 3 --- src/science/soilsnow/cbl_soilsnow_init_special.F90 | 1 + src/science/soilsnow/cbl_soilsnow_main.F90 | 1 + src/science/soilsnow/cbl_stempv.F90 | 1 + src/science/soilsnow/cbl_surfbv.F90 | 1 + src/science/soilsnow/cbl_thermal.F90 | 1 + src/science/soilsnow/cbl_trimb.F90 | 3 ++- 20 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 181468adc..48fb78dca 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -28,8 +28,9 @@ MODULE cable_surface_types_mod SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& nnvg, ntype, urban, lake, soil, ice) INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake,& soil, ice + INTEGER, INTENT(IN) :: ncpft surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 diff --git a/src/science/soilsnow/cbl_GW.F90 b/src/science/soilsnow/cbl_GW.F90 index 6511b3017..51d81e0a6 100644 --- a/src/science/soilsnow/cbl_GW.F90 +++ b/src/science/soilsnow/cbl_GW.F90 @@ -1,6 +1,7 @@ MODULE GWstempv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC GWstempv diff --git a/src/science/soilsnow/cbl_Oldconductivity.F90 b/src/science/soilsnow/cbl_Oldconductivity.F90 index 972132e66..25f65b1b2 100644 --- a/src/science/soilsnow/cbl_Oldconductivity.F90 +++ b/src/science/soilsnow/cbl_Oldconductivity.F90 @@ -1,6 +1,8 @@ MODULE old_soil_conductivity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod + CONTAINS diff --git a/src/science/soilsnow/cbl_conductivity.F90 b/src/science/soilsnow/cbl_conductivity.F90 index 545ba46f5..9d96c8494 100644 --- a/src/science/soilsnow/cbl_conductivity.F90 +++ b/src/science/soilsnow/cbl_conductivity.F90 @@ -2,6 +2,7 @@ MODULE total_soil_conductivity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC total_soil_conductivity diff --git a/src/science/soilsnow/cbl_hyd_redistrib.F90 b/src/science/soilsnow/cbl_hyd_redistrib.F90 index f63700a4d..918be58fb 100644 --- a/src/science/soilsnow/cbl_hyd_redistrib.F90 +++ b/src/science/soilsnow/cbl_hyd_redistrib.F90 @@ -1,6 +1,7 @@ MODULE hydraulic_redistribution_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC hydraulic_redistribution diff --git a/src/science/soilsnow/cbl_remove_trans.F90 b/src/science/soilsnow/cbl_remove_trans.F90 index d7ce9f6a7..ae50e5b89 100644 --- a/src/science/soilsnow/cbl_remove_trans.F90 +++ b/src/science/soilsnow/cbl_remove_trans.F90 @@ -1,6 +1,7 @@ MODULE remove_trans_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC remove_trans diff --git a/src/science/soilsnow/cbl_smoisturev.F90 b/src/science/soilsnow/cbl_smoisturev.F90 index 635e4f06b..0d6dd167e 100644 --- a/src/science/soilsnow/cbl_smoisturev.F90 +++ b/src/science/soilsnow/cbl_smoisturev.F90 @@ -1,6 +1,7 @@ MODULE smoisturev_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC smoisturev diff --git a/src/science/soilsnow/cbl_snowAccum.F90 b/src/science/soilsnow/cbl_snowAccum.F90 index a6e7f711e..3dcaff7f0 100644 --- a/src/science/soilsnow/cbl_snowAccum.F90 +++ b/src/science/soilsnow/cbl_snowAccum.F90 @@ -1,6 +1,7 @@ MODULE snow_accum_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_accum diff --git a/src/science/soilsnow/cbl_snowCheck.F90 b/src/science/soilsnow/cbl_snowCheck.F90 index 2b4d64800..84c27331c 100644 --- a/src/science/soilsnow/cbl_snowCheck.F90 +++ b/src/science/soilsnow/cbl_snowCheck.F90 @@ -1,6 +1,7 @@ MODULE snowcheck_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowcheck diff --git a/src/science/soilsnow/cbl_snowDensity.F90 b/src/science/soilsnow/cbl_snowDensity.F90 index e7674c68c..ba4e2cd53 100644 --- a/src/science/soilsnow/cbl_snowDensity.F90 +++ b/src/science/soilsnow/cbl_snowDensity.F90 @@ -1,6 +1,7 @@ MODULE snowdensity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowdensity diff --git a/src/science/soilsnow/cbl_snowMelt.F90 b/src/science/soilsnow/cbl_snowMelt.F90 index 12ac79caa..4cefb68e4 100644 --- a/src/science/soilsnow/cbl_snowMelt.F90 +++ b/src/science/soilsnow/cbl_snowMelt.F90 @@ -1,6 +1,7 @@ MODULE snow_melting_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_melting diff --git a/src/science/soilsnow/cbl_snowl_adjust.F90 b/src/science/soilsnow/cbl_snowl_adjust.F90 index 023f2f50c..201399109 100644 --- a/src/science/soilsnow/cbl_snowl_adjust.F90 +++ b/src/science/soilsnow/cbl_snowl_adjust.F90 @@ -1,6 +1,7 @@ MODULE snowl_adjust_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowl_adjust diff --git a/src/science/soilsnow/cbl_soilfreeze.F90 b/src/science/soilsnow/cbl_soilfreeze.F90 index a1b1a3cde..9d5df0f0f 100644 --- a/src/science/soilsnow/cbl_soilfreeze.F90 +++ b/src/science/soilsnow/cbl_soilfreeze.F90 @@ -1,6 +1,7 @@ MODULE soilfreeze_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC soilfreeze diff --git a/src/science/soilsnow/cbl_soilsnow_data.F90 b/src/science/soilsnow/cbl_soilsnow_data.F90 index 738432c4b..cd92b2f0e 100644 --- a/src/science/soilsnow/cbl_soilsnow_data.F90 +++ b/src/science/soilsnow/cbl_soilsnow_data.F90 @@ -1,8 +1,5 @@ MODULE cbl_ssnow_data_mod -USE cable_def_types_mod, ONLY : soil_snow_type, soil_parameter_type, & - veg_parameter_type, canopy_type, met_type, & - balances_type, r_2, ms, mp !distribute these per sbr USE cable_phys_constants_mod, ONLY : CTFRZ => TFRZ USE cable_phys_constants_mod, ONLY : CHL => HL diff --git a/src/science/soilsnow/cbl_soilsnow_init_special.F90 b/src/science/soilsnow/cbl_soilsnow_init_special.F90 index 31a85da82..69a99faad 100644 --- a/src/science/soilsnow/cbl_soilsnow_init_special.F90 +++ b/src/science/soilsnow/cbl_soilsnow_init_special.F90 @@ -1,6 +1,7 @@ MODULE cbl_soil_snow_init_special_module USE cbl_ssnow_data_mod +USE cable_def_types_mod IMPLICIT NONE diff --git a/src/science/soilsnow/cbl_soilsnow_main.F90 b/src/science/soilsnow/cbl_soilsnow_main.F90 index 2cc4c19c9..5c11ae0fb 100644 --- a/src/science/soilsnow/cbl_soilsnow_main.F90 +++ b/src/science/soilsnow/cbl_soilsnow_main.F90 @@ -27,6 +27,7 @@ MODULE cbl_soil_snow_main_module ! ssnow SUBROUTINE soil_snow(dels, soil, ssnow, canopy, met, bal, veg) USE cable_common_module +USE cable_def_types_mod USE cbl_ssnow_data_mod !called subrs USE hydraulic_redistribution_mod, ONLY: hydraulic_redistribution diff --git a/src/science/soilsnow/cbl_stempv.F90 b/src/science/soilsnow/cbl_stempv.F90 index cd5a280b2..d92190ab5 100644 --- a/src/science/soilsnow/cbl_stempv.F90 +++ b/src/science/soilsnow/cbl_stempv.F90 @@ -1,6 +1,7 @@ MODULE stempv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC stempv diff --git a/src/science/soilsnow/cbl_surfbv.F90 b/src/science/soilsnow/cbl_surfbv.F90 index b6117bb70..eab5cf232 100644 --- a/src/science/soilsnow/cbl_surfbv.F90 +++ b/src/science/soilsnow/cbl_surfbv.F90 @@ -1,6 +1,7 @@ MODULE surfbv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC surfbv diff --git a/src/science/soilsnow/cbl_thermal.F90 b/src/science/soilsnow/cbl_thermal.F90 index cb682df1f..3742ef79e 100644 --- a/src/science/soilsnow/cbl_thermal.F90 +++ b/src/science/soilsnow/cbl_thermal.F90 @@ -1,6 +1,7 @@ MODULE snow_processes_soil_thermal_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_processes_soil_thermal diff --git a/src/science/soilsnow/cbl_trimb.F90 b/src/science/soilsnow/cbl_trimb.F90 index 9ab95a80b..181b89d17 100644 --- a/src/science/soilsnow/cbl_trimb.F90 +++ b/src/science/soilsnow/cbl_trimb.F90 @@ -1,6 +1,7 @@ MODULE trimb_mod -USE cbl_ssnow_data_mod, ONLY : r_2 +USE cbl_ssnow_data_mod +USE cable_def_types_mod, ONLY : r_2 PUBLIC trimb From 911c2b39fe4a7128ec42c001bc54600379229bff Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 28 May 2026 14:31:04 +1000 Subject: [PATCH 26/98] Remove casa_variable.F90 from library --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1589bdc23..1bc9d200f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,7 +96,6 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 - src/science/casa-cnp/casa_variable.F90 src/science/misc/cable_air.F90 src/science/misc/cable_carbon.F90 src/science/misc/cable_climate.F90 From f5662be320dbea21372971734103f1d172524eff Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 28 May 2026 15:04:05 +1000 Subject: [PATCH 27/98] Add all the CASA types --- CMakeLists.txt | 14 + .../control/casa/types/casa_balance_type.F90 | 293 + .../control/casa/types/casa_biome_type.F90 | 231 + .../AM3/control/casa/types/casa_dimension.F90 | 59 + .../control/casa/types/casa_files_type.F90 | 26 + .../AM3/control/casa/types/casa_flux_type.F90 | 418 + .../AM3/control/casa/types/casa_inout.F90 | 7732 +++++++++++++++++ .../AM3/control/casa/types/casa_met_type.F90 | 234 + .../casa/types/casa_phenology_type.F90 | 110 + .../AM3/control/casa/types/casa_pool_type.F90 | 288 + .../AM3/control/casa/types/casa_readbiome.F90 | 2445 ++++++ .../AM3/control/casa/types/casa_variable.F90 | 157 + .../AM3/control/casa/types/phen_variable.F90 | 6 + .../control/casa/types/sum_casa_flux_type.F90 | 466 + .../control/casa/types/sum_casa_pool_type.F90 | 313 + 15 files changed, 12792 insertions(+) create mode 100644 src/coupled/AM3/control/casa/types/casa_balance_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_biome_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_dimension.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_files_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_flux_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_inout.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_met_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_phenology_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_pool_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_readbiome.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_variable.F90 create mode 100644 src/coupled/AM3/control/casa/types/phen_variable.F90 create mode 100644 src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 1bc9d200f..c87e5e615 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,6 +180,20 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 + src/coupled/AM3/control/casa/types/casa_balance_type.F90 + src/coupled/AM3/control/casa/types/casa_biome_type.F90 + src/coupled/AM3/control/casa/types/casa_files_type.F90 + src/coupled/AM3/control/casa/types/casa_flux_type.F90 + src/coupled/AM3/control/casa/types/casa_met_type.F90 + src/coupled/AM3/control/casa/types/casa_phenology_type.F90 + src/coupled/AM3/control/casa/types/casa_pool_type.F90 + src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 + src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 + src/coupled/AM3/control/casa/types/casa_variable.F90 + src/coupled/AM3/control/casa/types/phen_variable.F90 + src/coupled/AM3/control/casa/types/casa_dimension.F90 + src/coupled/AM3/control/casa/types/casa_inout.F90 + src/coupled/AM3/control/casa/types/casa_readbiome.F90 src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 src/offline/cable_iovars.F90 ) diff --git a/src/coupled/AM3/control/casa/types/casa_balance_type.F90 b/src/coupled/AM3/control/casa/types/casa_balance_type.F90 new file mode 100644 index 000000000..79e132db6 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_balance_type.F90 @@ -0,0 +1,293 @@ +MODULE casa_balance_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_bal_data_type +PUBLIC :: casa_bal_type +PUBLIC :: alloc_casa_bal_data_type +PUBLIC :: zero_casa_bal_data_type +PUBLIC :: assoc_casa_bal_type + +TYPE casa_bal_data_type + + REAL(r_2), ALLOCATABLE :: FCgppyear (:) + REAL(r_2), ALLOCATABLE :: FCnppyear (:) + REAL(r_2), ALLOCATABLE :: FCrmleafyear (:) + REAL(r_2), ALLOCATABLE :: FCrmwoodyear (:) + REAL(r_2), ALLOCATABLE :: FCrmrootyear (:) + REAL(r_2), ALLOCATABLE :: FCrgrowyear (:) + REAL(r_2), ALLOCATABLE :: FCrpyear (:) + REAL(r_2), ALLOCATABLE :: FCrsyear (:) + REAL(r_2), ALLOCATABLE :: FCneeyear (:) + REAL(r_2), ALLOCATABLE :: dCdtyear (:) + REAL(r_2), ALLOCATABLE :: LAImax (:) + REAL(r_2), ALLOCATABLE :: Cleafmean (:) + REAL(r_2), ALLOCATABLE :: Crootmean (:) + REAL(r_2), ALLOCATABLE :: FNdepyear (:) + REAL(r_2), ALLOCATABLE :: FNfixyear (:) + REAL(r_2), ALLOCATABLE :: FNsnetyear (:) + REAL(r_2), ALLOCATABLE :: FNupyear (:) + REAL(r_2), ALLOCATABLE :: FNleachyear (:) + REAL(r_2), ALLOCATABLE :: FNlossyear (:) + REAL(r_2), ALLOCATABLE :: FPweayear (:) + REAL(r_2), ALLOCATABLE :: FPdustyear (:) + REAL(r_2), ALLOCATABLE :: FPsnetyear (:) + REAL(r_2), ALLOCATABLE :: FPupyear (:) + REAL(r_2), ALLOCATABLE :: FPleachyear (:) + REAL(r_2), ALLOCATABLE :: FPlossyear (:) + REAL(r_2), ALLOCATABLE :: nsoilminlast (:) + REAL(r_2), ALLOCATABLE :: psoillablast (:) + REAL(r_2), ALLOCATABLE :: psoilsorblast (:) + REAL(r_2), ALLOCATABLE :: psoilocclast (:) + REAL(r_2), ALLOCATABLE :: cbalance (:) + REAL(r_2), ALLOCATABLE :: nbalance (:) + REAL(r_2), ALLOCATABLE :: pbalance (:) + REAL(r_2), ALLOCATABLE :: sumcbal (:) + REAL(r_2), ALLOCATABLE :: sumnbal (:) + REAL(r_2), ALLOCATABLE :: sumpbal (:) + REAL(r_2), ALLOCATABLE :: clabilelast (:) + REAL(r_2), ALLOCATABLE :: glaimon (:,:) + REAL(r_2), ALLOCATABLE :: glaimonx (:,:) + REAL(r_2), ALLOCATABLE :: cplantlast (:,:) + REAL(r_2), ALLOCATABLE :: nplantlast (:,:) + REAL(r_2), ALLOCATABLE :: pplantlast (:,:) + REAL(r_2), ALLOCATABLE :: clitterlast (:,:) + REAL(r_2), ALLOCATABLE :: nlitterlast (:,:) + REAL(r_2), ALLOCATABLE :: plitterlast (:,:) + REAL(r_2), ALLOCATABLE :: csoillast (:,:) + REAL(r_2), ALLOCATABLE :: nsoillast (:,:) + REAL(r_2), ALLOCATABLE :: psoillast (:,:) + +END TYPE casa_bal_data_type + +TYPE casa_bal_type + + REAL(r_2), POINTER, PUBLIC :: FCgppyear (:) + REAL(r_2), POINTER, PUBLIC :: FCnppyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmleafyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmwoodyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmrootyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrgrowyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrpyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrsyear (:) + REAL(r_2), POINTER, PUBLIC :: FCneeyear (:) + REAL(r_2), POINTER, PUBLIC :: dCdtyear (:) + REAL(r_2), POINTER, PUBLIC :: LAImax (:) + REAL(r_2), POINTER, PUBLIC :: Cleafmean (:) + REAL(r_2), POINTER, PUBLIC :: Crootmean (:) + REAL(r_2), POINTER, PUBLIC :: FNdepyear (:) + REAL(r_2), POINTER, PUBLIC :: FNfixyear (:) + REAL(r_2), POINTER, PUBLIC :: FNsnetyear (:) + REAL(r_2), POINTER, PUBLIC :: FNupyear (:) + REAL(r_2), POINTER, PUBLIC :: FNleachyear (:) + REAL(r_2), POINTER, PUBLIC :: FNlossyear (:) + REAL(r_2), POINTER, PUBLIC :: FPweayear (:) + REAL(r_2), POINTER, PUBLIC :: FPdustyear (:) + REAL(r_2), POINTER, PUBLIC :: FPsnetyear (:) + REAL(r_2), POINTER, PUBLIC :: FPupyear (:) + REAL(r_2), POINTER, PUBLIC :: FPleachyear (:) + REAL(r_2), POINTER, PUBLIC :: FPlossyear (:) + REAL(r_2), POINTER, PUBLIC :: nsoilminlast (:) + REAL(r_2), POINTER, PUBLIC :: psoillablast (:) + REAL(r_2), POINTER, PUBLIC :: psoilsorblast (:) + REAL(r_2), POINTER, PUBLIC :: psoilocclast (:) + REAL(r_2), POINTER, PUBLIC :: cbalance (:) + REAL(r_2), POINTER, PUBLIC :: nbalance (:) + REAL(r_2), POINTER, PUBLIC :: pbalance (:) + REAL(r_2), POINTER, PUBLIC :: sumcbal (:) + REAL(r_2), POINTER, PUBLIC :: sumnbal (:) + REAL(r_2), POINTER, PUBLIC :: sumpbal (:) + REAL(r_2), POINTER, PUBLIC :: clabilelast (:) + REAL(r_2), POINTER, PUBLIC :: glaimon (:,:) + REAL(r_2), POINTER, PUBLIC :: glaimonx (:,:) + REAL(r_2), POINTER, PUBLIC :: cplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: nplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: pplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: clitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: nlitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: plitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: csoillast (:,:) + REAL(r_2), POINTER, PUBLIC :: nsoillast (:,:) + REAL(r_2), POINTER, PUBLIC :: psoillast (:,:) + +END TYPE casa_bal_type + +CONTAINS + +SUBROUTINE alloc_casa_bal_data_type( casabal_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil + +IMPLICIT NONE + +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casabal_data % FCgppyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCnppyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmleafyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmwoodyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmrootyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrgrowyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrpyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrsyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCneeyear ( arraysize ) ) +ALLOCATE ( casabal_data % dCdtyear ( arraysize ) ) +ALLOCATE ( casabal_data % LAImax ( arraysize ) ) +ALLOCATE ( casabal_data % Cleafmean ( arraysize ) ) +ALLOCATE ( casabal_data % Crootmean ( arraysize ) ) +ALLOCATE ( casabal_data % FNdepyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNfixyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNsnetyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNupyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNleachyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNlossyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPweayear ( arraysize ) ) +ALLOCATE ( casabal_data % FPdustyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPsnetyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPupyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPleachyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPlossyear ( arraysize ) ) +ALLOCATE ( casabal_data % nsoilminlast ( arraysize ) ) +ALLOCATE ( casabal_data % psoillablast ( arraysize ) ) +ALLOCATE ( casabal_data % psoilsorblast ( arraysize ) ) +ALLOCATE ( casabal_data % psoilocclast ( arraysize ) ) +ALLOCATE ( casabal_data % cbalance ( arraysize ) ) +ALLOCATE ( casabal_data % nbalance ( arraysize ) ) +ALLOCATE ( casabal_data % pbalance ( arraysize ) ) +ALLOCATE ( casabal_data % sumcbal ( arraysize ) ) +ALLOCATE ( casabal_data % sumnbal ( arraysize ) ) +ALLOCATE ( casabal_data % sumpbal ( arraysize ) ) +ALLOCATE ( casabal_data % clabilelast ( arraysize ) ) +ALLOCATE ( casabal_data % glaimon ( arraysize, 12 ) ) ! 12 months +ALLOCATE ( casabal_data % glaimonx ( arraysize, 12 ) ) ! 12 months +ALLOCATE ( casabal_data % cplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % nplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % pplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % clitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % nlitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % plitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % csoillast ( arraysize, msoil ) ) +ALLOCATE ( casabal_data % nsoillast ( arraysize, msoil ) ) +ALLOCATE ( casabal_data % psoillast ( arraysize, msoil ) ) + +END SUBROUTINE alloc_casa_bal_data_type + +SUBROUTINE zero_casa_bal_data_type( casabal_data ) + +IMPLICIT NONE + +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data + +casabal_data % FCgppyear (:) = 0.0 +casabal_data % FCnppyear (:) = 0.0 +casabal_data % FCrmleafyear (:) = 0.0 +casabal_data % FCrmwoodyear (:) = 0.0 +casabal_data % FCrmrootyear (:) = 0.0 +casabal_data % FCrgrowyear (:) = 0.0 +casabal_data % FCrpyear (:) = 0.0 +casabal_data % FCrsyear (:) = 0.0 +casabal_data % FCneeyear (:) = 0.0 +casabal_data % dCdtyear (:) = 0.0 +casabal_data % LAImax (:) = 0.0 +casabal_data % Cleafmean (:) = 0.0 +casabal_data % Crootmean (:) = 0.0 +casabal_data % FNdepyear (:) = 0.0 +casabal_data % FNfixyear (:) = 0.0 +casabal_data % FNsnetyear (:) = 0.0 +casabal_data % FNupyear (:) = 0.0 +casabal_data % FNleachyear (:) = 0.0 +casabal_data % FNlossyear (:) = 0.0 +casabal_data % FPweayear (:) = 0.0 +casabal_data % FPdustyear (:) = 0.0 +casabal_data % FPsnetyear (:) = 0.0 +casabal_data % FPupyear (:) = 0.0 +casabal_data % FPleachyear (:) = 0.0 +casabal_data % FPlossyear (:) = 0.0 +casabal_data % nsoilminlast (:) = 0.0 +casabal_data % psoillablast (:) = 0.0 +casabal_data % psoilsorblast (:) = 0.0 +casabal_data % psoilocclast (:) = 0.0 +casabal_data % cbalance (:) = 0.0 +casabal_data % nbalance (:) = 0.0 +casabal_data % pbalance (:) = 0.0 +casabal_data % sumcbal (:) = 0.0 +casabal_data % sumnbal (:) = 0.0 +casabal_data % sumpbal (:) = 0.0 +casabal_data % clabilelast (:) = 0.0 +casabal_data % glaimon (:,:) = 0.0 +casabal_data % glaimonx (:,:) = 0.0 +casabal_data % cplantlast (:,:) = 0.0 +casabal_data % nplantlast (:,:) = 0.0 +casabal_data % pplantlast (:,:) = 0.0 +casabal_data % clitterlast (:,:) = 0.0 +casabal_data % nlitterlast (:,:) = 0.0 +casabal_data % plitterlast (:,:) = 0.0 +casabal_data % csoillast (:,:) = 0.0 +casabal_data % nsoillast (:,:) = 0.0 +casabal_data % psoillast (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_bal_data_type + +SUBROUTINE assoc_casa_bal_type( casabal, casabal_data ) + +IMPLICIT NONE + +TYPE (casa_bal_type), INTENT(INOUT) :: casabal +TYPE (casa_bal_data_type), INTENT(INOUT), TARGET :: casabal_data + +casabal % FCgppyear => casabal_data % FCgppyear +casabal % FCnppyear => casabal_data % FCnppyear +casabal % FCrmleafyear => casabal_data % FCrmleafyear +casabal % FCrmwoodyear => casabal_data % FCrmwoodyear +casabal % FCrmrootyear => casabal_data % FCrmrootyear +casabal % FCrgrowyear => casabal_data % FCrgrowyear +casabal % FCrpyear => casabal_data % FCrpyear +casabal % FCrsyear => casabal_data % FCrsyear +casabal % FCneeyear => casabal_data % FCneeyear +casabal % dCdtyear => casabal_data % dCdtyear +casabal % LAImax => casabal_data % LAImax +casabal % Cleafmean => casabal_data % Cleafmean +casabal % Crootmean => casabal_data % Crootmean +casabal % FNdepyear => casabal_data % FNdepyear +casabal % FNfixyear => casabal_data % FNfixyear +casabal % FNsnetyear => casabal_data % FNsnetyear +casabal % FNupyear => casabal_data % FNupyear +casabal % FNleachyear => casabal_data % FNleachyear +casabal % FNlossyear => casabal_data % FNlossyear +casabal % FPweayear => casabal_data % FPweayear +casabal % FPdustyear => casabal_data % FPdustyear +casabal % FPsnetyear => casabal_data % FPsnetyear +casabal % FPupyear => casabal_data % FPupyear +casabal % FPleachyear => casabal_data % FPleachyear +casabal % FPlossyear => casabal_data % FPlossyear +casabal % nsoilminlast => casabal_data % nsoilminlast +casabal % psoillablast => casabal_data % psoillablast +casabal % psoilsorblast => casabal_data % psoilsorblast +casabal % psoilocclast => casabal_data % psoilocclast +casabal % cbalance => casabal_data % cbalance +casabal % nbalance => casabal_data % nbalance +casabal % pbalance => casabal_data % pbalance +casabal % sumcbal => casabal_data % sumcbal +casabal % sumnbal => casabal_data % sumnbal +casabal % sumpbal => casabal_data % sumpbal +casabal % clabilelast => casabal_data % clabilelast +casabal % glaimon => casabal_data % glaimon +casabal % glaimonx => casabal_data % glaimonx +casabal % cplantlast => casabal_data % cplantlast +casabal % nplantlast => casabal_data % nplantlast +casabal % pplantlast => casabal_data % pplantlast +casabal % clitterlast => casabal_data % clitterlast +casabal % nlitterlast => casabal_data % nlitterlast +casabal % plitterlast => casabal_data % plitterlast +casabal % csoillast => casabal_data % csoillast +casabal % nsoillast => casabal_data % nsoillast +casabal % psoillast => casabal_data % psoillast + +RETURN +END SUBROUTINE assoc_casa_bal_type + +END MODULE casa_balance_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_biome_type.F90 b/src/coupled/AM3/control/casa/types/casa_biome_type.F90 new file mode 100644 index 000000000..d86c1b25c --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_biome_type.F90 @@ -0,0 +1,231 @@ +MODULE casa_biome_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision +USE grid_constants_mod_cbl, ONLY: ntype_max ! # veg types [13],non-veg=4, + ! ntype_max=17 +USE casadimension, ONLY: mplant, mlitter, mso, msoil + +IMPLICIT NONE + +PUBLIC :: casa_biome_data_type +PUBLIC :: casa_biome_type +PUBLIC :: zero_casa_biome_data_type +PUBLIC :: assoc_casa_biome_type + +TYPE casa_biome_data_type + + INTEGER :: ivt2 ( ntype_max ) + REAL(r_2) :: xkleafcoldmax ( ntype_max ) + REAL(r_2) :: xkleafcoldexp ( ntype_max ) + REAL(r_2) :: xkleafdrymax ( ntype_max ) + REAL(r_2) :: xkleafdryexp ( ntype_max ) + REAL(r_2) :: glaimax ( ntype_max ) + REAL(r_2) :: glaimin ( ntype_max ) + REAL(r_2) :: sla ( ntype_max ) + REAL(r_2) :: ratiofrootleaf ( ntype_max ) + REAL(r_2) :: kroot ( ntype_max ) + REAL(r_2) :: krootlen ( ntype_max ) + REAL(r_2) :: rootdepth ( ntype_max ) + REAL(r_2) :: kuptake ( ntype_max ) + REAL(r_2) :: kminN ( ntype_max ) + REAL(r_2) :: kuplabP ( ntype_max ) + REAL(r_2) :: kclabrate ( ntype_max ) + REAL(r_2) :: xnpmax ( ntype_max ) + REAL(r_2) :: q10soil ( ntype_max ) + REAL(r_2) :: xkoptlitter ( ntype_max ) + REAL(r_2) :: xkoptsoil ( ntype_max ) + REAL(r_2) :: xkplab ( mso ) + REAL(r_2) :: xkpsorb ( mso ) + REAL(r_2) :: xkpocc ( mso ) + REAL(r_2) :: prodptase ( ntype_max ) + REAL(r_2) :: costnpup ( ntype_max ) + REAL(r_2) :: maxfinelitter ( ntype_max ) + REAL(r_2) :: maxcwd ( ntype_max ) + REAL(r_2) :: nintercept ( ntype_max ) + REAL(r_2) :: nslope ( ntype_max ) + REAL(r_2) :: plantrate ( ntype_max, mplant ) + REAL(r_2) :: rmplant ( ntype_max, mplant ) + REAL(r_2) :: fracnpptoP ( ntype_max, mplant ) + REAL(r_2) :: fraclignin ( ntype_max, mplant ) + REAL(r_2) :: fraclabile ( ntype_max, mplant ) + REAL(r_2) :: ratioNCplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioNCplantmax ( ntype_max, mplant ) + REAL(r_2) :: ratioNPplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioNPplantmax ( ntype_max, mplant ) + REAL(r_2) :: fracLigninplant ( ntype_max, mplant ) + REAL(r_2) :: ftransNPtoL ( ntype_max, mplant ) + REAL(r_2) :: ftransPPtoL ( ntype_max, mplant ) + REAL(r_2) :: litterrate ( ntype_max, mlitter) + REAL(r_2) :: ratioPcplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioPcplantmax ( ntype_max, mplant ) + REAL(r_2) :: soilrate ( ntype_max, msoil ) + +END TYPE casa_biome_data_type + +TYPE casa_biome_type + + INTEGER, POINTER, PUBLIC :: ivt2 (:) + REAL(r_2), POINTER, PUBLIC :: xkleafcoldmax (:) + REAL(r_2), POINTER, PUBLIC :: xkleafcoldexp (:) + REAL(r_2), POINTER, PUBLIC :: xkleafdrymax (:) + REAL(r_2), POINTER, PUBLIC :: xkleafdryexp (:) + REAL(r_2), POINTER, PUBLIC :: glaimax (:) + REAL(r_2), POINTER, PUBLIC :: glaimin (:) + REAL(r_2), POINTER, PUBLIC :: sla (:) + REAL(r_2), POINTER, PUBLIC :: ratiofrootleaf (:) + REAL(r_2), POINTER, PUBLIC :: kroot (:) + REAL(r_2), POINTER, PUBLIC :: krootlen (:) + REAL(r_2), POINTER, PUBLIC :: rootdepth (:) + REAL(r_2), POINTER, PUBLIC :: kuptake (:) + REAL(r_2), POINTER, PUBLIC :: kminN (:) + REAL(r_2), POINTER, PUBLIC :: kuplabP (:) + REAL(r_2), POINTER, PUBLIC :: kclabrate (:) + REAL(r_2), POINTER, PUBLIC :: xnpmax (:) + REAL(r_2), POINTER, PUBLIC :: q10soil (:) + REAL(r_2), POINTER, PUBLIC :: xkoptlitter (:) + REAL(r_2), POINTER, PUBLIC :: xkoptsoil (:) + REAL(r_2), POINTER, PUBLIC :: xkplab (:) + REAL(r_2), POINTER, PUBLIC :: xkpsorb (:) + REAL(r_2), POINTER, PUBLIC :: xkpocc (:) + REAL(r_2), POINTER, PUBLIC :: prodptase (:) + REAL(r_2), POINTER, PUBLIC :: costnpup (:) + REAL(r_2), POINTER, PUBLIC :: maxfinelitter (:) + REAL(r_2), POINTER, PUBLIC :: maxcwd (:) + REAL(r_2), POINTER, PUBLIC :: nintercept (:) + REAL(r_2), POINTER, PUBLIC :: nslope (:) + REAL(r_2), POINTER, PUBLIC :: plantrate (:,:) + REAL(r_2), POINTER, PUBLIC :: rmplant (:,:) + REAL(r_2), POINTER, PUBLIC :: fracnpptoP (:,:) + REAL(r_2), POINTER, PUBLIC :: fraclignin (:,:) + REAL(r_2), POINTER, PUBLIC :: fraclabile (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplantmax (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplantmax (:,:) + REAL(r_2), POINTER, PUBLIC :: fracLigninplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ftransNPtoL (:,:) + REAL(r_2), POINTER, PUBLIC :: ftransPPtoL (:,:) + REAL(r_2), POINTER, PUBLIC :: litterrate (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplantmax (:,:) + + REAL(r_2), POINTER, PUBLIC :: soilrate (:,:) + +END TYPE casa_biome_type + +CONTAINS + +SUBROUTINE zero_casa_biome_data_type( casabiome_data ) + +IMPLICIT NONE + +TYPE (casa_biome_data_type), INTENT(INOUT) :: casabiome_data + +casabiome_data % ivt2 (:) = 0 +casabiome_data % xkleafcoldmax (:) = 0.0 +casabiome_data % xkleafcoldexp (:) = 0.0 +casabiome_data % xkleafdrymax (:) = 0.0 +casabiome_data % xkleafdryexp (:) = 0.0 +casabiome_data % glaimax (:) = 0.0 +casabiome_data % glaimin (:) = 0.0 +casabiome_data % sla (:) = 0.0 +casabiome_data % ratiofrootleaf (:) = 0.0 +casabiome_data % kroot (:) = 0.0 +casabiome_data % krootlen (:) = 0.0 +casabiome_data % rootdepth (:) = 0.0 +casabiome_data % kuptake (:) = 0.0 +casabiome_data % kminN (:) = 0.0 +casabiome_data % kuplabP (:) = 0.0 +casabiome_data % kclabrate (:) = 0.0 +casabiome_data % xnpmax (:) = 0.0 +casabiome_data % q10soil (:) = 0.0 +casabiome_data % xkoptlitter (:) = 0.0 +casabiome_data % xkoptsoil (:) = 0.0 +casabiome_data % xkplab (:) = 0.0 +casabiome_data % xkpsorb (:) = 0.0 +casabiome_data % xkpocc (:) = 0.0 +casabiome_data % prodptase (:) = 0.0 +casabiome_data % costnpup (:) = 0.0 +casabiome_data % maxfinelitter (:) = 0.0 +casabiome_data % maxcwd (:) = 0.0 +casabiome_data % nintercept (:) = 0.0 +casabiome_data % nslope (:) = 0.0 +casabiome_data % plantrate (:,:) = 0.0 +casabiome_data % rmplant (:,:) = 0.0 +casabiome_data % fracnpptoP (:,:) = 0.0 +casabiome_data % fraclignin (:,:) = 0.0 +casabiome_data % fraclabile (:,:) = 0.0 +casabiome_data % ratioNCplantmin (:,:) = 0.0 +casabiome_data % ratioNCplantmax (:,:) = 0.0 +casabiome_data % ratioNPplantmin (:,:) = 0.0 +casabiome_data % ratioNPplantmax (:,:) = 0.0 +casabiome_data % fracLigninplant (:,:) = 0.0 +casabiome_data % ftransNPtoL (:,:) = 0.0 +casabiome_data % ftransPPtoL (:,:) = 0.0 +casabiome_data % litterrate (:,:) = 0.0 +casabiome_data % ratioPcplantmin (:,:) = 0.0 +casabiome_data % ratioPcplantmax (:,:) = 0.0 +casabiome_data % soilrate (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_biome_data_type + + +SUBROUTINE assoc_casa_biome_type( casabiome, casabiome_data ) + +IMPLICIT NONE + +TYPE (casa_biome_type), INTENT(INOUT) :: casabiome +TYPE (casa_biome_data_type), INTENT(INOUT), TARGET :: casabiome_data + +casabiome % ivt2 => casabiome_data % ivt2 +casabiome % xkleafcoldmax => casabiome_data % xkleafcoldmax +casabiome % xkleafcoldexp => casabiome_data % xkleafcoldexp +casabiome % xkleafdrymax => casabiome_data % xkleafdrymax +casabiome % xkleafdryexp => casabiome_data % xkleafdryexp +casabiome % glaimax => casabiome_data % glaimax +casabiome % glaimin => casabiome_data % glaimin +casabiome % sla => casabiome_data % sla +casabiome % ratiofrootleaf => casabiome_data % ratiofrootleaf +casabiome % kroot => casabiome_data % kroot +casabiome % krootlen => casabiome_data % krootlen +casabiome % rootdepth => casabiome_data % rootdepth +casabiome % kuptake => casabiome_data % kuptake +casabiome % kminN => casabiome_data % kminN +casabiome % kuplabP => casabiome_data % kuplabP +casabiome % kclabrate => casabiome_data % kclabrate +casabiome % xnpmax => casabiome_data % xnpmax +casabiome % q10soil => casabiome_data % q10soil +casabiome % xkoptlitter => casabiome_data % xkoptlitter +casabiome % xkoptsoil => casabiome_data % xkoptsoil +casabiome % xkplab => casabiome_data % xkplab +casabiome % xkpsorb => casabiome_data % xkpsorb +casabiome % xkpocc => casabiome_data % xkpocc +casabiome % prodptase => casabiome_data % prodptase +casabiome % costnpup => casabiome_data % costnpup +casabiome % maxfinelitter => casabiome_data % maxfinelitter +casabiome % maxcwd => casabiome_data % maxcwd +casabiome % nintercept => casabiome_data % nintercept +casabiome % nslope => casabiome_data % nslope +casabiome % plantrate => casabiome_data % plantrate +casabiome % rmplant => casabiome_data % rmplant +casabiome % fracnpptoP => casabiome_data % fracnpptoP +casabiome % fraclignin => casabiome_data % fraclignin +casabiome % fraclabile => casabiome_data % fraclabile +casabiome % ratioNCplantmin => casabiome_data % ratioNCplantmin +casabiome % ratioNCplantmax => casabiome_data % ratioNCplantmax +casabiome % ratioNPplantmin => casabiome_data % ratioNPplantmin +casabiome % ratioNPplantmax => casabiome_data % ratioNPplantmax +casabiome % fracLigninplant => casabiome_data % fracLigninplant +casabiome % ftransNPtoL => casabiome_data % ftransNPtoL +casabiome % ftransPPtoL => casabiome_data % ftransPPtoL +casabiome % litterrate => casabiome_data % litterrate +casabiome % ratioPcplantmin => casabiome_data % ratioPcplantmin +casabiome % ratioPcplantmax => casabiome_data % ratioPcplantmax +casabiome % soilrate => casabiome_data % soilrate + +RETURN +END SUBROUTINE assoc_casa_biome_type + + +END MODULE casa_biome_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_dimension.F90 b/src/coupled/AM3/control/casa/types/casa_dimension.F90 new file mode 100644 index 000000000..4a6707031 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_dimension.F90 @@ -0,0 +1,59 @@ +!============================================================================== +! This source code is part of the +! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. +! This work is licensed under the CSIRO Open Source Software License +! Agreement (variation of the BSD / MIT License). +! +! You may not use this file except in compliance with this License. +! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) is located +! in each directory containing CABLE code. +! +! ============================================================================== +! Purpose: defines/allocates variables for CASA-CNP +! +! Contact: Yingping.Wang@csiro.au +! +! History: Developed for offline CASA-CNP, code revision likely to better +! suit ACCESS and to merge more consistently with CABLE code +! +! +! ============================================================================== +! casa_variable.f90 +! +! the following modules are used when "casacnp" is coupled to "cable" +! casadimension +! casaparm +! casavariable with subroutine alloc_casavariable +! phenvariable with subroutine alloc_phenvariable + +MODULE casadimension + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision +USE cable_def_types_mod, ONLY: mvtype, ms + + IMPLICIT NONE + + + + INTEGER, PARAMETER :: mdyear=365 ! days per year + INTEGER, PARAMETER :: mdmonth=30 ! days per month + INTEGER, PARAMETER :: mdweek=7 ! days per week + INTEGER, PARAMETER :: mmyear=12 ! month per year + INTEGER, PARAMETER :: mt=36500 ! integration time step + INTEGER, PARAMETER :: mplant = 3 ! plant pools + INTEGER, PARAMETER :: mlitter= 3 ! litter pools + INTEGER, PARAMETER :: msoil = 3 ! soil pools + INTEGER, PARAMETER :: mso = 12 ! soil order number + INTEGER, PARAMETER :: mhwp = 1 ! harvested wood pools + INTEGER, PARAMETER :: mwood = 3 ! wood product pools + INTEGER, PARAMETER :: mclear = 1 ! forest clearing pools + ! BP put icycle into namelist file + INTEGER :: icycle + ! INTEGER, PARAMETER :: icycle=3 ! =1 for C, =2 for C+N; =3 for C+N+P + INTEGER, PARAMETER :: mstart=1 ! starting time step + INTEGER, PARAMETER :: mphase=4 ! phen. phases + INTEGER, PARAMETER :: mlogmax=4 ! max.woody PFT. ESM1.5:land use + REAL(r_2), PARAMETER :: deltcasa=1.0/365.0 ! year + REAL(r_2), PARAMETER :: deltpool=1.0 ! pool delt(1day) + +END MODULE casadimension diff --git a/src/coupled/AM3/control/casa/types/casa_files_type.F90 b/src/coupled/AM3/control/casa/types/casa_files_type.F90 new file mode 100644 index 000000000..e932dd9aa --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_files_type.F90 @@ -0,0 +1,26 @@ +MODULE casa_files_type_mod + +IMPLICIT NONE + +TYPE casa_files_type + + CHARACTER(LEN=99) :: cnpbiome = '' ! biome-specific BGC parameters + CHARACTER(LEN=99) :: cnppoint = '' ! file for point-specific BGC inputs + CHARACTER(LEN=99) :: cnpepool = '' ! file for end-of-run pool sizes + CHARACTER(LEN=99) :: cnpipool = '' ! file for inital pool sizes + CHARACTER(LEN=99) :: cnpmetin = '' ! met file for spin up + CHARACTER(LEN=99) :: cnpmetout = '' ! met file for spin up + CHARACTER(LEN=99) :: cnpspin = '' ! input file for spin up + CHARACTER(LEN=99) :: dump_cnpspin = '' ! dump file for spinning casa-cnp + CHARACTER(LEN=99) :: phen = '' ! leaf phenology datafile + CHARACTER(LEN=99) :: cnpflux = '' ! modelled mean yearly CNP fluxes + CHARACTER(LEN=99) :: c2cdumppath = '' ! cable2casa dump for casa spinup + LOGICAL :: l_ndep = .FALSE. + CHARACTER(LEN=99) :: ndep = '' ! N deposition input file + +END TYPE casa_files_type + +TYPE(casa_files_type) :: casafile + +END MODULE casa_files_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 new file mode 100644 index 000000000..8f7777962 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 @@ -0,0 +1,418 @@ +MODULE casa_flux_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_flux_data_type +PUBLIC :: casa_flux_type +PUBLIC :: alloc_casa_flux_data_type +PUBLIC :: assoc_casa_flux_type + +TYPE casa_flux_data_type + + REAL(r_2), ALLOCATABLE :: Cgpp (:) + REAL(r_2), ALLOCATABLE :: Cnpp (:) + REAL(r_2), ALLOCATABLE :: Crp (:) + REAL(r_2), ALLOCATABLE :: Crgplant (:) + REAL(r_2), ALLOCATABLE :: Nminfix (:) + REAL(r_2), ALLOCATABLE :: Nminuptake (:) + REAL(r_2), ALLOCATABLE :: Plabuptake (:) + REAL(r_2), ALLOCATABLE :: Clabloss (:) + REAL(r_2), ALLOCATABLE :: fracClabile (:) + REAL(r_2), ALLOCATABLE :: stemnpp (:) + REAL(r_2), ALLOCATABLE :: frac_sapwood (:) + REAL(r_2), ALLOCATABLE :: sapwood_area (:) + REAL(r_2), ALLOCATABLE :: Crsoil (:) + REAL(r_2), ALLOCATABLE :: Nmindep (:) + REAL(r_2), ALLOCATABLE :: Nminloss (:) + REAL(r_2), ALLOCATABLE :: Nminleach (:) + REAL(r_2), ALLOCATABLE :: Nupland (:) + REAL(r_2), ALLOCATABLE :: Nlittermin (:) + REAL(r_2), ALLOCATABLE :: Nsmin (:) + REAL(r_2), ALLOCATABLE :: Nsimm (:) + REAL(r_2), ALLOCATABLE :: Nsnet (:) + REAL(r_2), ALLOCATABLE :: fNminloss (:) + REAL(r_2), ALLOCATABLE :: fNminleach (:) + REAL(r_2), ALLOCATABLE :: Pdep (:) + REAL(r_2), ALLOCATABLE :: Pwea (:) + REAL(r_2), ALLOCATABLE :: Pleach (:) + REAL(r_2), ALLOCATABLE :: Ploss (:) + REAL(r_2), ALLOCATABLE :: Pupland (:) + REAL(r_2), ALLOCATABLE :: Plittermin (:) + REAL(r_2), ALLOCATABLE :: Psmin (:) + REAL(r_2), ALLOCATABLE :: Psimm (:) + REAL(r_2), ALLOCATABLE :: Psnet (:) + REAL(r_2), ALLOCATABLE :: fPleach (:) + REAL(r_2), ALLOCATABLE :: kplab (:) + REAL(r_2), ALLOCATABLE :: kpsorb (:) + REAL(r_2), ALLOCATABLE :: kpocc (:) + REAL(r_2), ALLOCATABLE :: kmlabp (:) + REAL(r_2), ALLOCATABLE :: Psorbmax (:) + REAL(r_2), ALLOCATABLE :: Cnep (:) + REAL(r_2), ALLOCATABLE :: FluxCtoCO2 (:) + REAL(r_2), ALLOCATABLE :: FluxCtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxNtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxPtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxCtoclear (:) + REAL(r_2), ALLOCATABLE :: FluxNtoclear (:) + REAL(r_2), ALLOCATABLE :: FluxPtoclear (:) + REAL(r_2), ALLOCATABLE :: CtransferLUC (:) + REAL(r_2), ALLOCATABLE :: meangpp (:) + REAL(r_2), ALLOCATABLE :: meanrleaf (:) + REAL(r_2), ALLOCATABLE :: fracCalloc (:,:) + REAL(r_2), ALLOCATABLE :: fracNalloc (:,:) + REAL(r_2), ALLOCATABLE :: fracPalloc (:,:) + REAL(r_2), ALLOCATABLE :: Crmplant (:,:) + REAL(r_2), ALLOCATABLE :: kplant (:,:) + REAL(r_2), ALLOCATABLE :: klitter (:,:) + REAL(r_2), ALLOCATABLE :: ksoil (:,:) + REAL(r_2), ALLOCATABLE :: fromLtoCO2 (:,:) + REAL(r_2), ALLOCATABLE :: fromStoCO2 (:,:) + REAL(r_2), ALLOCATABLE :: FluxCtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxNtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxPtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxCtosoil (:,:) + REAL(r_2), ALLOCATABLE :: FluxNtosoil (:,:) + REAL(r_2), ALLOCATABLE :: FluxPtosoil (:,:) + REAL(r_2), ALLOCATABLE :: fromPtoL (:,:,:) + REAL(r_2), ALLOCATABLE :: fromLtoS (:,:,:) + REAL(r_2), ALLOCATABLE :: fromStoS (:,:,:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover (:,:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_disturbance (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_crowding (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_resource_limitation (:) + +END TYPE casa_flux_data_type + +TYPE casa_flux_type + + REAL(r_2), POINTER, PUBLIC :: Cgpp (:) + REAL(r_2), POINTER, PUBLIC :: Cnpp (:) + REAL(r_2), POINTER, PUBLIC :: Crp (:) + REAL(r_2), POINTER, PUBLIC :: Crgplant (:) + REAL(r_2), POINTER, PUBLIC :: Nminfix (:) + REAL(r_2), POINTER, PUBLIC :: Nminuptake (:) + REAL(r_2), POINTER, PUBLIC :: Plabuptake (:) + REAL(r_2), POINTER, PUBLIC :: Clabloss (:) + REAL(r_2), POINTER, PUBLIC :: fracClabile (:) + REAL(r_2), POINTER, PUBLIC :: stemnpp (:) + REAL(r_2), POINTER, PUBLIC :: frac_sapwood (:) + REAL(r_2), POINTER, PUBLIC :: sapwood_area (:) + REAL(r_2), POINTER, PUBLIC :: Crsoil (:) + REAL(r_2), POINTER, PUBLIC :: Nmindep (:) + REAL(r_2), POINTER, PUBLIC :: Nminloss (:) + REAL(r_2), POINTER, PUBLIC :: Nminleach (:) + REAL(r_2), POINTER, PUBLIC :: Nupland (:) + REAL(r_2), POINTER, PUBLIC :: Nlittermin (:) + REAL(r_2), POINTER, PUBLIC :: Nsmin (:) + REAL(r_2), POINTER, PUBLIC :: Nsimm (:) + REAL(r_2), POINTER, PUBLIC :: Nsnet (:) + REAL(r_2), POINTER, PUBLIC :: fNminloss (:) + REAL(r_2), POINTER, PUBLIC :: fNminleach (:) + REAL(r_2), POINTER, PUBLIC :: Pdep (:) + REAL(r_2), POINTER, PUBLIC :: Pwea (:) + REAL(r_2), POINTER, PUBLIC :: Pleach (:) + REAL(r_2), POINTER, PUBLIC :: Ploss (:) + REAL(r_2), POINTER, PUBLIC :: Pupland (:) + REAL(r_2), POINTER, PUBLIC :: Plittermin (:) + REAL(r_2), POINTER, PUBLIC :: Psmin (:) + REAL(r_2), POINTER, PUBLIC :: Psimm (:) + REAL(r_2), POINTER, PUBLIC :: Psnet (:) + REAL(r_2), POINTER, PUBLIC :: fPleach (:) + REAL(r_2), POINTER, PUBLIC :: kplab (:) + REAL(r_2), POINTER, PUBLIC :: kpsorb (:) + REAL(r_2), POINTER, PUBLIC :: kpocc (:) + REAL(r_2), POINTER, PUBLIC :: kmlabp (:) + REAL(r_2), POINTER, PUBLIC :: Psorbmax (:) + REAL(r_2), POINTER, PUBLIC :: Cnep (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtoCO2 (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxNtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxPtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtoclear (:) + REAL(r_2), POINTER, PUBLIC :: FluxNtoclear (:) + REAL(r_2), POINTER, PUBLIC :: FluxPtoclear (:) + REAL(r_2), POINTER, PUBLIC :: CtransferLUC (:) + REAL(r_2), POINTER, PUBLIC :: meangpp (:) + REAL(r_2), POINTER, PUBLIC :: meanrleaf (:) + REAL(r_2), POINTER, PUBLIC :: fracCalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: fracNalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: fracPalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: Crmplant (:,:) + REAL(r_2), POINTER, PUBLIC :: kplant (:,:) + REAL(r_2), POINTER, PUBLIC :: klitter (:,:) + REAL(r_2), POINTER, PUBLIC :: ksoil (:,:) + REAL(r_2), POINTER, PUBLIC :: fromLtoCO2 (:,:) + REAL(r_2), POINTER, PUBLIC :: fromStoCO2 (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxCtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxNtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxPtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxCtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxNtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxPtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: fromPtoL (:,:,:) + REAL(r_2), POINTER, PUBLIC :: fromLtoS (:,:,:) + REAL(r_2), POINTER, PUBLIC :: fromStoS (:,:,:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover (:,:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_disturbance (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_crowding (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_resource_limitation (:) + +END TYPE casa_flux_type + +CONTAINS + +SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casaflux_data % Cgpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Crp ( arraysize ) ) +ALLOCATE ( casaflux_data % Crgplant ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminfix ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminuptake ( arraysize ) ) +ALLOCATE ( casaflux_data % Plabuptake ( arraysize ) ) +ALLOCATE ( casaflux_data % Clabloss ( arraysize ) ) +ALLOCATE ( casaflux_data % fracClabile ( arraysize ) ) +ALLOCATE ( casaflux_data % stemnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( casaflux_data % sapwood_area ( arraysize ) ) +ALLOCATE ( casaflux_data % Crsoil ( arraysize ) ) +ALLOCATE ( casaflux_data % Nmindep ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminloss ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Nupland ( arraysize ) ) +ALLOCATE ( casaflux_data % Nlittermin ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsmin ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsimm ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsnet ( arraysize ) ) +ALLOCATE ( casaflux_data % fNminloss ( arraysize ) ) +ALLOCATE ( casaflux_data % fNminleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Pdep ( arraysize ) ) +ALLOCATE ( casaflux_data % Pwea ( arraysize ) ) +ALLOCATE ( casaflux_data % Pleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Ploss ( arraysize ) ) +ALLOCATE ( casaflux_data % Pupland ( arraysize ) ) +ALLOCATE ( casaflux_data % Plittermin ( arraysize ) ) +ALLOCATE ( casaflux_data % Psmin ( arraysize ) ) +ALLOCATE ( casaflux_data % Psimm ( arraysize ) ) +ALLOCATE ( casaflux_data % Psnet ( arraysize ) ) +ALLOCATE ( casaflux_data % fPleach ( arraysize ) ) +ALLOCATE ( casaflux_data % kplab ( arraysize ) ) +ALLOCATE ( casaflux_data % kpsorb ( arraysize ) ) +ALLOCATE ( casaflux_data % kpocc ( arraysize ) ) +ALLOCATE ( casaflux_data % kmlabp ( arraysize ) ) +ALLOCATE ( casaflux_data % Psorbmax ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnep ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtoCO2 ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxNtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxPtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxNtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxPtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % CtransferLUC ( arraysize ) ) +ALLOCATE ( casaflux_data % meangpp ( arraysize ) ) +ALLOCATE ( casaflux_data % meanrleaf ( arraysize ) ) + +ALLOCATE ( casaflux_data % fracCalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % fracNalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % fracPalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % Crmplant ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % kplant ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % klitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % ksoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % fromLtoCO2 ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % fromStoCO2 ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxCtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxNtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxPtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxCtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxNtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxPtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % fromPtoL ( arraysize, mlitter, mplant ) ) +ALLOCATE ( casaflux_data % fromLtoS ( arraysize, msoil, mlitter ) ) +ALLOCATE ( casaflux_data % fromStoS ( arraysize, msoil, msoil ) ) + +ALLOCATE ( casaflux_data % Cplant_turnover ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_disturbance ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_crowding ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_resource_limitation( arraysize ) ) + +END SUBROUTINE alloc_casa_flux_data_type + +SUBROUTINE zero_casa_flux_data_type( casaflux_data ) + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data + +casaflux_data % Cgpp (:) = 0.0 +casaflux_data % Cnpp (:) = 0.0 +casaflux_data % Crp (:) = 0.0 +casaflux_data % Crgplant (:) = 0.0 +casaflux_data % Nminfix (:) = 0.0 +casaflux_data % Nminuptake (:) = 0.0 +casaflux_data % Plabuptake (:) = 0.0 +casaflux_data % Clabloss (:) = 0.0 +casaflux_data % fracClabile (:) = 0.0 +casaflux_data % stemnpp (:) = 0.0 +casaflux_data % frac_sapwood (:) = 0.0 +casaflux_data % sapwood_area (:) = 0.0 +casaflux_data % Crsoil (:) = 0.0 +casaflux_data % Nmindep (:) = 0.0 +casaflux_data % Nminloss (:) = 0.0 +casaflux_data % Nminleach (:) = 0.0 +casaflux_data % Nupland (:) = 0.0 +casaflux_data % Nlittermin (:) = 0.0 +casaflux_data % Nsmin (:) = 0.0 +casaflux_data % Nsimm (:) = 0.0 +casaflux_data % Nsnet (:) = 0.0 +casaflux_data % fNminloss (:) = 0.0 +casaflux_data % fNminleach (:) = 0.0 +casaflux_data % Pdep (:) = 0.0 +casaflux_data % Pwea (:) = 0.0 +casaflux_data % Pleach (:) = 0.0 +casaflux_data % Ploss (:) = 0.0 +casaflux_data % Pupland (:) = 0.0 +casaflux_data % Plittermin (:) = 0.0 +casaflux_data % Psmin (:) = 0.0 +casaflux_data % Psimm (:) = 0.0 +casaflux_data % Psnet (:) = 0.0 +casaflux_data % fPleach (:) = 0.0 +casaflux_data % kplab (:) = 0.0 +casaflux_data % kpsorb (:) = 0.0 +casaflux_data % kpocc (:) = 0.0 +casaflux_data % kmlabp (:) = 0.0 +casaflux_data % Psorbmax (:) = 0.0 +casaflux_data % Cnep (:) = 0.0 +casaflux_data % FluxCtoCO2 (:) = 0.0 +casaflux_data % FluxCtohwp (:) = 0.0 +casaflux_data % FluxNtohwp (:) = 0.0 +casaflux_data % FluxPtohwp (:) = 0.0 +casaflux_data % FluxCtoclear (:) = 0.0 +casaflux_data % FluxNtoclear (:) = 0.0 +casaflux_data % FluxPtoclear (:) = 0.0 +casaflux_data % CtransferLUC (:) = 0.0 +casaflux_data % meangpp (:) = 0.0 +casaflux_data % meanrleaf (:) = 0.0 +casaflux_data % fracCalloc (:,:) = 0.0 +casaflux_data % fracNalloc (:,:) = 0.0 +casaflux_data % fracPalloc (:,:) = 0.0 +casaflux_data % Crmplant (:,:) = 0.0 +casaflux_data % kplant (:,:) = 0.0 +casaflux_data % klitter (:,:) = 0.0 +casaflux_data % ksoil (:,:) = 0.0 +casaflux_data % fromLtoCO2 (:,:) = 0.0 +casaflux_data % fromStoCO2 (:,:) = 0.0 +casaflux_data % FluxCtolitter (:,:) = 0.0 +casaflux_data % FluxNtolitter (:,:) = 0.0 +casaflux_data % FluxPtolitter (:,:) = 0.0 +casaflux_data % FluxCtosoil (:,:) = 0.0 +casaflux_data % FluxNtosoil (:,:) = 0.0 +casaflux_data % FluxPtosoil (:,:) = 0.0 +casaflux_data % fromPtoL (:,:,:) = 0.0 +casaflux_data % fromLtoS (:,:,:) = 0.0 +casaflux_data % fromStoS (:,:,:) = 0.0 +casaflux_data % Cplant_turnover (:,:) = 0.0 +casaflux_data % Cplant_turnover_disturbance (:) = 0.0 +casaflux_data % Cplant_turnover_crowding (:) = 0.0 +casaflux_data % Cplant_turnover_resource_limitation (:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_flux_data_type + +SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) + +IMPLICIT NONE + +TYPE (casa_flux_type), INTENT(INOUT) :: casaflux +TYPE (casa_flux_data_type), INTENT(INOUT), TARGET :: casaflux_data + +casaflux % Cgpp => casaflux_data % Cgpp +casaflux % Cnpp => casaflux_data % Cnpp +casaflux % Crp => casaflux_data % Crp +casaflux % Crgplant => casaflux_data % Crgplant +casaflux % Nminfix => casaflux_data % Nminfix +casaflux % Nminuptake => casaflux_data % Nminuptake +casaflux % Plabuptake => casaflux_data % Plabuptake +casaflux % Clabloss => casaflux_data % Clabloss +casaflux % fracClabile => casaflux_data % fracClabile +casaflux % stemnpp => casaflux_data % stemnpp +casaflux % frac_sapwood => casaflux_data % frac_sapwood +casaflux % sapwood_area => casaflux_data % sapwood_area +casaflux % Crsoil => casaflux_data % Crsoil +casaflux % Nmindep => casaflux_data % Nmindep +casaflux % Nminloss => casaflux_data % Nminloss +casaflux % Nminleach => casaflux_data % Nminleach +casaflux % Nupland => casaflux_data % Nupland +casaflux % Nlittermin => casaflux_data % Nlittermin +casaflux % Nsmin => casaflux_data % Nsmin +casaflux % Nsimm => casaflux_data % Nsimm +casaflux % Nsnet => casaflux_data % Nsnet +casaflux % fNminloss => casaflux_data % fNminloss +casaflux % fNminleach => casaflux_data % fNminleach +casaflux % Pdep => casaflux_data % Pdep +casaflux % Pwea => casaflux_data % Pwea +casaflux % Pleach => casaflux_data % Pleach +casaflux % Ploss => casaflux_data % Ploss +casaflux % Pupland => casaflux_data % Pupland +casaflux % Plittermin => casaflux_data % Plittermin +casaflux % Psmin => casaflux_data % Psmin +casaflux % Psimm => casaflux_data % Psimm +casaflux % Psnet => casaflux_data % Psnet +casaflux % fPleach => casaflux_data % fPleach +casaflux % kplab => casaflux_data % kplab +casaflux % kpsorb => casaflux_data % kpsorb +casaflux % kpocc => casaflux_data % kpocc +casaflux % kmlabp => casaflux_data % kmlabp +casaflux % Psorbmax => casaflux_data % Psorbmax +casaflux % Cnep => casaflux_data % Cnep +casaflux % FluxCtoCO2 => casaflux_data % FluxCtoCO2 +casaflux % FluxCtohwp => casaflux_data % FluxCtohwp +casaflux % FluxNtohwp => casaflux_data % FluxNtohwp +casaflux % FluxPtohwp => casaflux_data % FluxPtohwp +casaflux % FluxCtoclear => casaflux_data % FluxCtoclear +casaflux % FluxNtoclear => casaflux_data % FluxNtoclear +casaflux % FluxPtoclear => casaflux_data % FluxPtoclear +casaflux % CtransferLUC => casaflux_data % CtransferLUC +casaflux % meangpp => casaflux_data % meangpp +casaflux % meanrleaf => casaflux_data % meanrleaf + +casaflux % fracCalloc => casaflux_data % fracCalloc +casaflux % fracNalloc => casaflux_data % fracNalloc +casaflux % fracPalloc => casaflux_data % fracPalloc +casaflux % Crmplant => casaflux_data % Crmplant +casaflux % kplant => casaflux_data % kplant +casaflux % klitter => casaflux_data % klitter +casaflux % ksoil => casaflux_data % ksoil +casaflux % fromLtoCO2 => casaflux_data % fromLtoCO2 +casaflux % fromStoCO2 => casaflux_data % fromStoCO2 +casaflux % FluxCtolitter => casaflux_data % FluxCtolitter +casaflux % FluxNtolitter => casaflux_data % FluxNtolitter +casaflux % FluxPtolitter => casaflux_data % FluxPtolitter +casaflux % FluxCtosoil => casaflux_data % FluxCtosoil +casaflux % FluxNtosoil => casaflux_data % FluxNtosoil +casaflux % FluxPtosoil => casaflux_data % FluxPtosoil +casaflux % fromPtoL => casaflux_data % fromPtoL +casaflux % fromLtoS => casaflux_data % fromLtoS +casaflux % fromStoS => casaflux_data % fromStoS + +casaflux % Cplant_turnover => casaflux_data % Cplant_turnover +casaflux % Cplant_turnover_disturbance & + => casaflux_data % Cplant_turnover_disturbance +casaflux % Cplant_turnover_crowding & + => casaflux_data % Cplant_turnover_crowding +casaflux % Cplant_turnover_resource_limitation & + => casaflux_data % Cplant_turnover_resource_limitation + +END SUBROUTINE assoc_casa_flux_type + +END MODULE casa_flux_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_inout.F90 b/src/coupled/AM3/control/casa/types/casa_inout.F90 new file mode 100644 index 000000000..411904a0f --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_inout.F90 @@ -0,0 +1,7732 @@ +#define UM_CBL YES +!============================================================================== +! This source code is part of the +! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. +! This work is licensed under the CSIRO Open Source Software License +! Agreement (variation of the BSD / MIT License). +! +! You may not use this file except in compliance with this License. +! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) is located +! in each directory containing CABLE code. +! +! ============================================================================== +! Purpose: Input and output code for CASA-CNP when run offline +! ACCESS version may use some of this code but split into different files? +! +! Contact: Yingping.Wang@csiro.au and Bernard.Pak@csiro.au +! +! History: Developed for offline code. Expect to re-write for MPI and ACCESS +! versions +! +! +! ============================================================================== +! casa_inout.f90 +! +! the following routines are used when "casacnp" is coupled to "cable" +! casa_readbiome +! casa_readphen +! casa_readpoint (removed, now done in parameter_module) +! casa_init +! casa_poolout +! casa_cnpflux (zeros casabal quantites on doy 1 and updates casabal at end of biogeochem) +! biogeochem + +MODULE casa_inout_module + +USE casa_files_type_mod, ONLY: casafile ! TYPE instance + +CONTAINS + + SUBROUTINE casa_readphen(veg,casamet,phen) + !SUBROUTINE casa_readphen(mvt,veg,casamet,phen) + ! read in the tabulated modis-derived leaf phenology data + ! for latitude bands of 79.75 to -55.25 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable +USE phenology_type_mod, ONLY: phenology_type + +IMPLICIT NONE + + TYPE (veg_parameter_type), INTENT(IN) :: veg ! vegetation parameters + TYPE (casa_met), INTENT(IN) :: casamet +TYPE (phenology_type), INTENT(INOUT) :: phen + + ! local variables + INTEGER, PARAMETER :: nphen=8! was 10(IGBP). changed by Q.Zhang @01/12/2011 + INTEGER np,nx,ilat + INTEGER, DIMENSION(271,mvtype) :: greenup, fall, phendoy1 + INTEGER, DIMENSION(nphen) :: greenupx,fallx,xphendoy1 + INTEGER, DIMENSION(271,nphen) :: greenupxy,fallxy,xyphendoy1 + INTEGER, DIMENSION(nphen) :: ivtx + REAL(r_2), DIMENSION(271) :: xlat + + ! initilize for evergreen PFTs + greenup(:,:) = -50 + fall(:,:) = 367 + phendoy1(:,:)= 2 + + !jh!OPEN(101,file=casafile%phen) + !jh!READ(101,*) + !jh!READ(101,*) (ivtx(nx),nx=1,nphen) ! fixed at 10, as only 10 of 17 IGBP PFT + !jh!! have seasonal leaf phenology + !jh!DO ilat=271,1,-1 + !jh! READ(101,*) xlat(ilat),(greenupx(nx),nx=1,nphen), & + !jh! (fallx(nx),nx=1,nphen),(xphendoy1(nx),nx=1,nphen) + !jh! DO nx=1,nphen + !jh! greenup(ilat,ivtx(nx)) = greenupx(nx) + !jh! fall(ilat,ivtx(nx)) = fallx(nx) + !jh! phendoy1(ilat,ivtx(nx))= xphendoy1(nx) + !jh! ENDDO + !jh!ENDDO + + ! xlat 79.7500000000000 +greenupxy ( 271, 1 ) = 167 +greenupxy ( 271, 2 ) = 156 +greenupxy ( 271, 3 ) = 184 +greenupxy ( 271, 4 ) = 184 +greenupxy ( 271, 5 ) = 184 +greenupxy ( 271, 6 ) = 184 +greenupxy ( 271, 7 ) = 145 +greenupxy ( 271, 8 ) = 145 +fallxy ( 271, 1 ) = 231 +fallxy ( 271, 2 ) = 231 +fallxy ( 271, 3 ) = 229 +fallxy ( 271, 4 ) = 229 +fallxy ( 271, 5 ) = 229 +fallxy ( 271, 6 ) = 229 +fallxy ( 271, 7 ) = 230 +fallxy ( 271, 8 ) = 230 +xyphendoy1 ( 271, 1 ) = 0 +xyphendoy1 ( 271, 2 ) = 0 +xyphendoy1 ( 271, 3 ) = 0 +xyphendoy1 ( 271, 4 ) = 0 +xyphendoy1 ( 271, 5 ) = 0 +xyphendoy1 ( 271, 6 ) = 0 +xyphendoy1 ( 271, 7 ) = 0 +xyphendoy1 ( 271, 8 ) = 0 + + ! xlat 79.2500000000000 +greenupxy ( 270, 1 ) = 167 +greenupxy ( 270, 2 ) = 156 +greenupxy ( 270, 3 ) = 184 +greenupxy ( 270, 4 ) = 184 +greenupxy ( 270, 5 ) = 184 +greenupxy ( 270, 6 ) = 184 +greenupxy ( 270, 7 ) = 145 +greenupxy ( 270, 8 ) = 145 +fallxy ( 270, 1 ) = 231 +fallxy ( 270, 2 ) = 231 +fallxy ( 270, 3 ) = 229 +fallxy ( 270, 4 ) = 229 +fallxy ( 270, 5 ) = 229 +fallxy ( 270, 6 ) = 229 +fallxy ( 270, 7 ) = 230 +fallxy ( 270, 8 ) = 230 +xyphendoy1 ( 270, 1 ) = 0 +xyphendoy1 ( 270, 2 ) = 0 +xyphendoy1 ( 270, 3 ) = 0 +xyphendoy1 ( 270, 4 ) = 0 +xyphendoy1 ( 270, 5 ) = 0 +xyphendoy1 ( 270, 6 ) = 0 +xyphendoy1 ( 270, 7 ) = 0 +xyphendoy1 ( 270, 8 ) = 0 + + ! xlat 78.7500000000000 +greenupxy ( 269, 1 ) = 167 +greenupxy ( 269, 2 ) = 156 +greenupxy ( 269, 3 ) = 184 +greenupxy ( 269, 4 ) = 184 +greenupxy ( 269, 5 ) = 184 +greenupxy ( 269, 6 ) = 184 +greenupxy ( 269, 7 ) = 145 +greenupxy ( 269, 8 ) = 145 +fallxy ( 269, 1 ) = 231 +fallxy ( 269, 2 ) = 231 +fallxy ( 269, 3 ) = 229 +fallxy ( 269, 4 ) = 229 +fallxy ( 269, 5 ) = 229 +fallxy ( 269, 6 ) = 229 +fallxy ( 269, 7 ) = 230 +fallxy ( 269, 8 ) = 230 +xyphendoy1 ( 269, 1 ) = 0 +xyphendoy1 ( 269, 2 ) = 0 +xyphendoy1 ( 269, 3 ) = 0 +xyphendoy1 ( 269, 4 ) = 0 +xyphendoy1 ( 269, 5 ) = 0 +xyphendoy1 ( 269, 6 ) = 0 +xyphendoy1 ( 269, 7 ) = 0 +xyphendoy1 ( 269, 8 ) = 0 + + ! xlat 78.2500000000000 +greenupxy ( 268, 1 ) = 167 +greenupxy ( 268, 2 ) = 156 +greenupxy ( 268, 3 ) = 184 +greenupxy ( 268, 4 ) = 184 +greenupxy ( 268, 5 ) = 184 +greenupxy ( 268, 6 ) = 184 +greenupxy ( 268, 7 ) = 145 +greenupxy ( 268, 8 ) = 145 +fallxy ( 268, 1 ) = 231 +fallxy ( 268, 2 ) = 231 +fallxy ( 268, 3 ) = 229 +fallxy ( 268, 4 ) = 229 +fallxy ( 268, 5 ) = 229 +fallxy ( 268, 6 ) = 229 +fallxy ( 268, 7 ) = 230 +fallxy ( 268, 8 ) = 230 +xyphendoy1 ( 268, 1 ) = 0 +xyphendoy1 ( 268, 2 ) = 0 +xyphendoy1 ( 268, 3 ) = 0 +xyphendoy1 ( 268, 4 ) = 0 +xyphendoy1 ( 268, 5 ) = 0 +xyphendoy1 ( 268, 6 ) = 0 +xyphendoy1 ( 268, 7 ) = 0 +xyphendoy1 ( 268, 8 ) = 0 + + ! xlat 77.7500000000000 +greenupxy ( 267, 1 ) = 167 +greenupxy ( 267, 2 ) = 156 +greenupxy ( 267, 3 ) = 184 +greenupxy ( 267, 4 ) = 184 +greenupxy ( 267, 5 ) = 184 +greenupxy ( 267, 6 ) = 184 +greenupxy ( 267, 7 ) = 145 +greenupxy ( 267, 8 ) = 145 +fallxy ( 267, 1 ) = 231 +fallxy ( 267, 2 ) = 231 +fallxy ( 267, 3 ) = 229 +fallxy ( 267, 4 ) = 229 +fallxy ( 267, 5 ) = 229 +fallxy ( 267, 6 ) = 229 +fallxy ( 267, 7 ) = 230 +fallxy ( 267, 8 ) = 230 +xyphendoy1 ( 267, 1 ) = 0 +xyphendoy1 ( 267, 2 ) = 0 +xyphendoy1 ( 267, 3 ) = 0 +xyphendoy1 ( 267, 4 ) = 0 +xyphendoy1 ( 267, 5 ) = 0 +xyphendoy1 ( 267, 6 ) = 0 +xyphendoy1 ( 267, 7 ) = 0 +xyphendoy1 ( 267, 8 ) = 0 + + ! xlat 77.2500000000000 +greenupxy ( 266, 1 ) = 167 +greenupxy ( 266, 2 ) = 156 +greenupxy ( 266, 3 ) = 184 +greenupxy ( 266, 4 ) = 184 +greenupxy ( 266, 5 ) = 184 +greenupxy ( 266, 6 ) = 184 +greenupxy ( 266, 7 ) = 145 +greenupxy ( 266, 8 ) = 145 +fallxy ( 266, 1 ) = 231 +fallxy ( 266, 2 ) = 231 +fallxy ( 266, 3 ) = 229 +fallxy ( 266, 4 ) = 229 +fallxy ( 266, 5 ) = 229 +fallxy ( 266, 6 ) = 229 +fallxy ( 266, 7 ) = 230 +fallxy ( 266, 8 ) = 230 +xyphendoy1 ( 266, 1 ) = 0 +xyphendoy1 ( 266, 2 ) = 0 +xyphendoy1 ( 266, 3 ) = 0 +xyphendoy1 ( 266, 4 ) = 0 +xyphendoy1 ( 266, 5 ) = 0 +xyphendoy1 ( 266, 6 ) = 0 +xyphendoy1 ( 266, 7 ) = 0 +xyphendoy1 ( 266, 8 ) = 0 + + ! xlat 76.7500000000000 +greenupxy ( 265, 1 ) = 167 +greenupxy ( 265, 2 ) = 156 +greenupxy ( 265, 3 ) = 184 +greenupxy ( 265, 4 ) = 184 +greenupxy ( 265, 5 ) = 184 +greenupxy ( 265, 6 ) = 184 +greenupxy ( 265, 7 ) = 145 +greenupxy ( 265, 8 ) = 145 +fallxy ( 265, 1 ) = 231 +fallxy ( 265, 2 ) = 231 +fallxy ( 265, 3 ) = 229 +fallxy ( 265, 4 ) = 230 +fallxy ( 265, 5 ) = 230 +fallxy ( 265, 6 ) = 230 +fallxy ( 265, 7 ) = 230 +fallxy ( 265, 8 ) = 230 +xyphendoy1 ( 265, 1 ) = 0 +xyphendoy1 ( 265, 2 ) = 0 +xyphendoy1 ( 265, 3 ) = 0 +xyphendoy1 ( 265, 4 ) = 0 +xyphendoy1 ( 265, 5 ) = 0 +xyphendoy1 ( 265, 6 ) = 0 +xyphendoy1 ( 265, 7 ) = 0 +xyphendoy1 ( 265, 8 ) = 0 + + ! xlat 76.2500000000000 +greenupxy ( 264, 1 ) = 167 +greenupxy ( 264, 2 ) = 156 +greenupxy ( 264, 3 ) = 184 +greenupxy ( 264, 4 ) = 184 +greenupxy ( 264, 5 ) = 184 +greenupxy ( 264, 6 ) = 184 +greenupxy ( 264, 7 ) = 145 +greenupxy ( 264, 8 ) = 145 +fallxy ( 264, 1 ) = 231 +fallxy ( 264, 2 ) = 231 +fallxy ( 264, 3 ) = 230 +fallxy ( 264, 4 ) = 230 +fallxy ( 264, 5 ) = 230 +fallxy ( 264, 6 ) = 230 +fallxy ( 264, 7 ) = 230 +fallxy ( 264, 8 ) = 230 +xyphendoy1 ( 264, 1 ) = 0 +xyphendoy1 ( 264, 2 ) = 0 +xyphendoy1 ( 264, 3 ) = 0 +xyphendoy1 ( 264, 4 ) = 0 +xyphendoy1 ( 264, 5 ) = 0 +xyphendoy1 ( 264, 6 ) = 0 +xyphendoy1 ( 264, 7 ) = 0 +xyphendoy1 ( 264, 8 ) = 0 + + ! xlat 75.7500000000000 +greenupxy ( 263, 1 ) = 167 +greenupxy ( 263, 2 ) = 156 +greenupxy ( 263, 3 ) = 184 +greenupxy ( 263, 4 ) = 184 +greenupxy ( 263, 5 ) = 184 +greenupxy ( 263, 6 ) = 184 +greenupxy ( 263, 7 ) = 145 +greenupxy ( 263, 8 ) = 145 +fallxy ( 263, 1 ) = 231 +fallxy ( 263, 2 ) = 231 +fallxy ( 263, 3 ) = 230 +fallxy ( 263, 4 ) = 231 +fallxy ( 263, 5 ) = 231 +fallxy ( 263, 6 ) = 231 +fallxy ( 263, 7 ) = 230 +fallxy ( 263, 8 ) = 230 +xyphendoy1 ( 263, 1 ) = 0 +xyphendoy1 ( 263, 2 ) = 0 +xyphendoy1 ( 263, 3 ) = 0 +xyphendoy1 ( 263, 4 ) = 0 +xyphendoy1 ( 263, 5 ) = 0 +xyphendoy1 ( 263, 6 ) = 0 +xyphendoy1 ( 263, 7 ) = 0 +xyphendoy1 ( 263, 8 ) = 0 + + ! xlat 75.2500000000000 +greenupxy ( 262, 1 ) = 167 +greenupxy ( 262, 2 ) = 156 +greenupxy ( 262, 3 ) = 185 +greenupxy ( 262, 4 ) = 185 +greenupxy ( 262, 5 ) = 185 +greenupxy ( 262, 6 ) = 185 +greenupxy ( 262, 7 ) = 145 +greenupxy ( 262, 8 ) = 145 +fallxy ( 262, 1 ) = 231 +fallxy ( 262, 2 ) = 231 +fallxy ( 262, 3 ) = 231 +fallxy ( 262, 4 ) = 232 +fallxy ( 262, 5 ) = 232 +fallxy ( 262, 6 ) = 232 +fallxy ( 262, 7 ) = 230 +fallxy ( 262, 8 ) = 230 +xyphendoy1 ( 262, 1 ) = 0 +xyphendoy1 ( 262, 2 ) = 0 +xyphendoy1 ( 262, 3 ) = 0 +xyphendoy1 ( 262, 4 ) = 0 +xyphendoy1 ( 262, 5 ) = 0 +xyphendoy1 ( 262, 6 ) = 0 +xyphendoy1 ( 262, 7 ) = 0 +xyphendoy1 ( 262, 8 ) = 0 + + ! xlat 74.7500000000000 +greenupxy ( 261, 1 ) = 167 +greenupxy ( 261, 2 ) = 156 +greenupxy ( 261, 3 ) = 185 +greenupxy ( 261, 4 ) = 185 +greenupxy ( 261, 5 ) = 185 +greenupxy ( 261, 6 ) = 185 +greenupxy ( 261, 7 ) = 145 +greenupxy ( 261, 8 ) = 145 +fallxy ( 261, 1 ) = 231 +fallxy ( 261, 2 ) = 231 +fallxy ( 261, 3 ) = 231 +fallxy ( 261, 4 ) = 232 +fallxy ( 261, 5 ) = 232 +fallxy ( 261, 6 ) = 232 +fallxy ( 261, 7 ) = 230 +fallxy ( 261, 8 ) = 230 +xyphendoy1 ( 261, 1 ) = 0 +xyphendoy1 ( 261, 2 ) = 0 +xyphendoy1 ( 261, 3 ) = 0 +xyphendoy1 ( 261, 4 ) = 0 +xyphendoy1 ( 261, 5 ) = 0 +xyphendoy1 ( 261, 6 ) = 0 +xyphendoy1 ( 261, 7 ) = 0 +xyphendoy1 ( 261, 8 ) = 0 + + ! xlat 74.2500000000000 +greenupxy ( 260, 1 ) = 167 +greenupxy ( 260, 2 ) = 156 +greenupxy ( 260, 3 ) = 185 +greenupxy ( 260, 4 ) = 184 +greenupxy ( 260, 5 ) = 184 +greenupxy ( 260, 6 ) = 184 +greenupxy ( 260, 7 ) = 145 +greenupxy ( 260, 8 ) = 145 +fallxy ( 260, 1 ) = 231 +fallxy ( 260, 2 ) = 231 +fallxy ( 260, 3 ) = 232 +fallxy ( 260, 4 ) = 232 +fallxy ( 260, 5 ) = 232 +fallxy ( 260, 6 ) = 232 +fallxy ( 260, 7 ) = 230 +fallxy ( 260, 8 ) = 230 +xyphendoy1 ( 260, 1 ) = 0 +xyphendoy1 ( 260, 2 ) = 0 +xyphendoy1 ( 260, 3 ) = 0 +xyphendoy1 ( 260, 4 ) = 0 +xyphendoy1 ( 260, 5 ) = 0 +xyphendoy1 ( 260, 6 ) = 0 +xyphendoy1 ( 260, 7 ) = 0 +xyphendoy1 ( 260, 8 ) = 0 + + ! xlat 73.7500000000000 +greenupxy ( 259, 1 ) = 167 +greenupxy ( 259, 2 ) = 156 +greenupxy ( 259, 3 ) = 185 +greenupxy ( 259, 4 ) = 184 +greenupxy ( 259, 5 ) = 184 +greenupxy ( 259, 6 ) = 184 +greenupxy ( 259, 7 ) = 145 +greenupxy ( 259, 8 ) = 145 +fallxy ( 259, 1 ) = 231 +fallxy ( 259, 2 ) = 231 +fallxy ( 259, 3 ) = 233 +fallxy ( 259, 4 ) = 233 +fallxy ( 259, 5 ) = 233 +fallxy ( 259, 6 ) = 233 +fallxy ( 259, 7 ) = 230 +fallxy ( 259, 8 ) = 230 +xyphendoy1 ( 259, 1 ) = 0 +xyphendoy1 ( 259, 2 ) = 0 +xyphendoy1 ( 259, 3 ) = 0 +xyphendoy1 ( 259, 4 ) = 0 +xyphendoy1 ( 259, 5 ) = 0 +xyphendoy1 ( 259, 6 ) = 0 +xyphendoy1 ( 259, 7 ) = 0 +xyphendoy1 ( 259, 8 ) = 0 + + ! xlat 73.2500000000000 +greenupxy ( 258, 1 ) = 167 +greenupxy ( 258, 2 ) = 156 +greenupxy ( 258, 3 ) = 186 +greenupxy ( 258, 4 ) = 183 +greenupxy ( 258, 5 ) = 183 +greenupxy ( 258, 6 ) = 183 +greenupxy ( 258, 7 ) = 145 +greenupxy ( 258, 8 ) = 145 +fallxy ( 258, 1 ) = 231 +fallxy ( 258, 2 ) = 231 +fallxy ( 258, 3 ) = 232 +fallxy ( 258, 4 ) = 233 +fallxy ( 258, 5 ) = 233 +fallxy ( 258, 6 ) = 233 +fallxy ( 258, 7 ) = 230 +fallxy ( 258, 8 ) = 230 +xyphendoy1 ( 258, 1 ) = 0 +xyphendoy1 ( 258, 2 ) = 0 +xyphendoy1 ( 258, 3 ) = 0 +xyphendoy1 ( 258, 4 ) = 0 +xyphendoy1 ( 258, 5 ) = 0 +xyphendoy1 ( 258, 6 ) = 0 +xyphendoy1 ( 258, 7 ) = 0 +xyphendoy1 ( 258, 8 ) = 0 + + ! xlat 72.7500000000000 +greenupxy ( 257, 1 ) = 167 +greenupxy ( 257, 2 ) = 156 +greenupxy ( 257, 3 ) = 186 +greenupxy ( 257, 4 ) = 184 +greenupxy ( 257, 5 ) = 184 +greenupxy ( 257, 6 ) = 184 +greenupxy ( 257, 7 ) = 145 +greenupxy ( 257, 8 ) = 145 +fallxy ( 257, 1 ) = 231 +fallxy ( 257, 2 ) = 231 +fallxy ( 257, 3 ) = 233 +fallxy ( 257, 4 ) = 234 +fallxy ( 257, 5 ) = 234 +fallxy ( 257, 6 ) = 234 +fallxy ( 257, 7 ) = 230 +fallxy ( 257, 8 ) = 230 +xyphendoy1 ( 257, 1 ) = 0 +xyphendoy1 ( 257, 2 ) = 0 +xyphendoy1 ( 257, 3 ) = 0 +xyphendoy1 ( 257, 4 ) = 0 +xyphendoy1 ( 257, 5 ) = 0 +xyphendoy1 ( 257, 6 ) = 0 +xyphendoy1 ( 257, 7 ) = 0 +xyphendoy1 ( 257, 8 ) = 0 + + ! xlat 72.2500000000000 +greenupxy ( 256, 1 ) = 167 +greenupxy ( 256, 2 ) = 156 +greenupxy ( 256, 3 ) = 186 +greenupxy ( 256, 4 ) = 183 +greenupxy ( 256, 5 ) = 183 +greenupxy ( 256, 6 ) = 183 +greenupxy ( 256, 7 ) = 145 +greenupxy ( 256, 8 ) = 145 +fallxy ( 256, 1 ) = 231 +fallxy ( 256, 2 ) = 231 +fallxy ( 256, 3 ) = 234 +fallxy ( 256, 4 ) = 234 +fallxy ( 256, 5 ) = 234 +fallxy ( 256, 6 ) = 234 +fallxy ( 256, 7 ) = 230 +fallxy ( 256, 8 ) = 230 +xyphendoy1 ( 256, 1 ) = 0 +xyphendoy1 ( 256, 2 ) = 0 +xyphendoy1 ( 256, 3 ) = 0 +xyphendoy1 ( 256, 4 ) = 0 +xyphendoy1 ( 256, 5 ) = 0 +xyphendoy1 ( 256, 6 ) = 0 +xyphendoy1 ( 256, 7 ) = 0 +xyphendoy1 ( 256, 8 ) = 0 + + ! xlat 71.7500000000000 +greenupxy ( 255, 1 ) = 167 +greenupxy ( 255, 2 ) = 156 +greenupxy ( 255, 3 ) = 185 +greenupxy ( 255, 4 ) = 183 +greenupxy ( 255, 5 ) = 183 +greenupxy ( 255, 6 ) = 183 +greenupxy ( 255, 7 ) = 145 +greenupxy ( 255, 8 ) = 145 +fallxy ( 255, 1 ) = 231 +fallxy ( 255, 2 ) = 231 +fallxy ( 255, 3 ) = 234 +fallxy ( 255, 4 ) = 234 +fallxy ( 255, 5 ) = 234 +fallxy ( 255, 6 ) = 234 +fallxy ( 255, 7 ) = 230 +fallxy ( 255, 8 ) = 230 +xyphendoy1 ( 255, 1 ) = 0 +xyphendoy1 ( 255, 2 ) = 0 +xyphendoy1 ( 255, 3 ) = 0 +xyphendoy1 ( 255, 4 ) = 0 +xyphendoy1 ( 255, 5 ) = 0 +xyphendoy1 ( 255, 6 ) = 0 +xyphendoy1 ( 255, 7 ) = 0 +xyphendoy1 ( 255, 8 ) = 0 + + ! xlat 71.2500000000000 +greenupxy ( 254, 1 ) = 167 +greenupxy ( 254, 2 ) = 156 +greenupxy ( 254, 3 ) = 184 +greenupxy ( 254, 4 ) = 182 +greenupxy ( 254, 5 ) = 182 +greenupxy ( 254, 6 ) = 182 +greenupxy ( 254, 7 ) = 145 +greenupxy ( 254, 8 ) = 145 +fallxy ( 254, 1 ) = 231 +fallxy ( 254, 2 ) = 231 +fallxy ( 254, 3 ) = 234 +fallxy ( 254, 4 ) = 234 +fallxy ( 254, 5 ) = 234 +fallxy ( 254, 6 ) = 234 +fallxy ( 254, 7 ) = 230 +fallxy ( 254, 8 ) = 230 +xyphendoy1 ( 254, 1 ) = 0 +xyphendoy1 ( 254, 2 ) = 0 +xyphendoy1 ( 254, 3 ) = 0 +xyphendoy1 ( 254, 4 ) = 0 +xyphendoy1 ( 254, 5 ) = 0 +xyphendoy1 ( 254, 6 ) = 0 +xyphendoy1 ( 254, 7 ) = 0 +xyphendoy1 ( 254, 8 ) = 0 + + ! xlat 70.7500000000000 +greenupxy ( 253, 1 ) = 167 +greenupxy ( 253, 2 ) = 156 +greenupxy ( 253, 3 ) = 183 +greenupxy ( 253, 4 ) = 181 +greenupxy ( 253, 5 ) = 181 +greenupxy ( 253, 6 ) = 181 +greenupxy ( 253, 7 ) = 145 +greenupxy ( 253, 8 ) = 145 +fallxy ( 253, 1 ) = 231 +fallxy ( 253, 2 ) = 231 +fallxy ( 253, 3 ) = 234 +fallxy ( 253, 4 ) = 233 +fallxy ( 253, 5 ) = 233 +fallxy ( 253, 6 ) = 233 +fallxy ( 253, 7 ) = 230 +fallxy ( 253, 8 ) = 230 +xyphendoy1 ( 253, 1 ) = 0 +xyphendoy1 ( 253, 2 ) = 0 +xyphendoy1 ( 253, 3 ) = 0 +xyphendoy1 ( 253, 4 ) = 0 +xyphendoy1 ( 253, 5 ) = 0 +xyphendoy1 ( 253, 6 ) = 0 +xyphendoy1 ( 253, 7 ) = 0 +xyphendoy1 ( 253, 8 ) = 0 + + ! xlat 70.2500000000000 +greenupxy ( 252, 1 ) = 167 +greenupxy ( 252, 2 ) = 156 +greenupxy ( 252, 3 ) = 182 +greenupxy ( 252, 4 ) = 180 +greenupxy ( 252, 5 ) = 180 +greenupxy ( 252, 6 ) = 180 +greenupxy ( 252, 7 ) = 145 +greenupxy ( 252, 8 ) = 145 +fallxy ( 252, 1 ) = 231 +fallxy ( 252, 2 ) = 231 +fallxy ( 252, 3 ) = 234 +fallxy ( 252, 4 ) = 234 +fallxy ( 252, 5 ) = 234 +fallxy ( 252, 6 ) = 234 +fallxy ( 252, 7 ) = 230 +fallxy ( 252, 8 ) = 230 +xyphendoy1 ( 252, 1 ) = 0 +xyphendoy1 ( 252, 2 ) = 0 +xyphendoy1 ( 252, 3 ) = 0 +xyphendoy1 ( 252, 4 ) = 0 +xyphendoy1 ( 252, 5 ) = 0 +xyphendoy1 ( 252, 6 ) = 0 +xyphendoy1 ( 252, 7 ) = 0 +xyphendoy1 ( 252, 8 ) = 0 + + ! xlat 69.7500000000000 +greenupxy ( 251, 1 ) = 167 +greenupxy ( 251, 2 ) = 156 +greenupxy ( 251, 3 ) = 181 +greenupxy ( 251, 4 ) = 178 +greenupxy ( 251, 5 ) = 178 +greenupxy ( 251, 6 ) = 178 +greenupxy ( 251, 7 ) = 145 +greenupxy ( 251, 8 ) = 145 +fallxy ( 251, 1 ) = 231 +fallxy ( 251, 2 ) = 231 +fallxy ( 251, 3 ) = 234 +fallxy ( 251, 4 ) = 234 +fallxy ( 251, 5 ) = 234 +fallxy ( 251, 6 ) = 234 +fallxy ( 251, 7 ) = 230 +fallxy ( 251, 8 ) = 230 +xyphendoy1 ( 251, 1 ) = 0 +xyphendoy1 ( 251, 2 ) = 0 +xyphendoy1 ( 251, 3 ) = 0 +xyphendoy1 ( 251, 4 ) = 0 +xyphendoy1 ( 251, 5 ) = 0 +xyphendoy1 ( 251, 6 ) = 0 +xyphendoy1 ( 251, 7 ) = 0 +xyphendoy1 ( 251, 8 ) = 0 + + ! xlat 69.2500000000000 +greenupxy ( 250, 1 ) = 167 +greenupxy ( 250, 2 ) = 156 +greenupxy ( 250, 3 ) = 179 +greenupxy ( 250, 4 ) = 177 +greenupxy ( 250, 5 ) = 177 +greenupxy ( 250, 6 ) = 177 +greenupxy ( 250, 7 ) = 145 +greenupxy ( 250, 8 ) = 145 +fallxy ( 250, 1 ) = 231 +fallxy ( 250, 2 ) = 231 +fallxy ( 250, 3 ) = 234 +fallxy ( 250, 4 ) = 234 +fallxy ( 250, 5 ) = 234 +fallxy ( 250, 6 ) = 234 +fallxy ( 250, 7 ) = 230 +fallxy ( 250, 8 ) = 230 +xyphendoy1 ( 250, 1 ) = 0 +xyphendoy1 ( 250, 2 ) = 0 +xyphendoy1 ( 250, 3 ) = 0 +xyphendoy1 ( 250, 4 ) = 0 +xyphendoy1 ( 250, 5 ) = 0 +xyphendoy1 ( 250, 6 ) = 0 +xyphendoy1 ( 250, 7 ) = 0 +xyphendoy1 ( 250, 8 ) = 0 + + ! xlat 68.7500000000000 +greenupxy ( 249, 1 ) = 167 +greenupxy ( 249, 2 ) = 156 +greenupxy ( 249, 3 ) = 177 +greenupxy ( 249, 4 ) = 176 +greenupxy ( 249, 5 ) = 176 +greenupxy ( 249, 6 ) = 176 +greenupxy ( 249, 7 ) = 145 +greenupxy ( 249, 8 ) = 145 +fallxy ( 249, 1 ) = 231 +fallxy ( 249, 2 ) = 231 +fallxy ( 249, 3 ) = 234 +fallxy ( 249, 4 ) = 233 +fallxy ( 249, 5 ) = 233 +fallxy ( 249, 6 ) = 233 +fallxy ( 249, 7 ) = 230 +fallxy ( 249, 8 ) = 230 +xyphendoy1 ( 249, 1 ) = 0 +xyphendoy1 ( 249, 2 ) = 0 +xyphendoy1 ( 249, 3 ) = 0 +xyphendoy1 ( 249, 4 ) = 0 +xyphendoy1 ( 249, 5 ) = 0 +xyphendoy1 ( 249, 6 ) = 0 +xyphendoy1 ( 249, 7 ) = 0 +xyphendoy1 ( 249, 8 ) = 0 + + ! xlat 68.2500000000000 +greenupxy ( 248, 1 ) = 167 +greenupxy ( 248, 2 ) = 156 +greenupxy ( 248, 3 ) = 176 +greenupxy ( 248, 4 ) = 174 +greenupxy ( 248, 5 ) = 174 +greenupxy ( 248, 6 ) = 174 +greenupxy ( 248, 7 ) = 145 +greenupxy ( 248, 8 ) = 145 +fallxy ( 248, 1 ) = 231 +fallxy ( 248, 2 ) = 231 +fallxy ( 248, 3 ) = 233 +fallxy ( 248, 4 ) = 233 +fallxy ( 248, 5 ) = 233 +fallxy ( 248, 6 ) = 233 +fallxy ( 248, 7 ) = 230 +fallxy ( 248, 8 ) = 230 +xyphendoy1 ( 248, 1 ) = 0 +xyphendoy1 ( 248, 2 ) = 0 +xyphendoy1 ( 248, 3 ) = 0 +xyphendoy1 ( 248, 4 ) = 0 +xyphendoy1 ( 248, 5 ) = 0 +xyphendoy1 ( 248, 6 ) = 0 +xyphendoy1 ( 248, 7 ) = 0 +xyphendoy1 ( 248, 8 ) = 0 + + ! xlat 67.7500000000000 +greenupxy ( 247, 1 ) = 167 +greenupxy ( 247, 2 ) = 156 +greenupxy ( 247, 3 ) = 175 +greenupxy ( 247, 4 ) = 173 +greenupxy ( 247, 5 ) = 173 +greenupxy ( 247, 6 ) = 173 +greenupxy ( 247, 7 ) = 145 +greenupxy ( 247, 8 ) = 145 +fallxy ( 247, 1 ) = 231 +fallxy ( 247, 2 ) = 231 +fallxy ( 247, 3 ) = 233 +fallxy ( 247, 4 ) = 233 +fallxy ( 247, 5 ) = 233 +fallxy ( 247, 6 ) = 233 +fallxy ( 247, 7 ) = 230 +fallxy ( 247, 8 ) = 230 +xyphendoy1 ( 247, 1 ) = 0 +xyphendoy1 ( 247, 2 ) = 0 +xyphendoy1 ( 247, 3 ) = 0 +xyphendoy1 ( 247, 4 ) = 0 +xyphendoy1 ( 247, 5 ) = 0 +xyphendoy1 ( 247, 6 ) = 0 +xyphendoy1 ( 247, 7 ) = 0 +xyphendoy1 ( 247, 8 ) = 0 + + ! xlat 67.2500000000000 +greenupxy ( 246, 1 ) = 167 +greenupxy ( 246, 2 ) = 156 +greenupxy ( 246, 3 ) = 173 +greenupxy ( 246, 4 ) = 171 +greenupxy ( 246, 5 ) = 171 +greenupxy ( 246, 6 ) = 171 +greenupxy ( 246, 7 ) = 145 +greenupxy ( 246, 8 ) = 145 +fallxy ( 246, 1 ) = 231 +fallxy ( 246, 2 ) = 231 +fallxy ( 246, 3 ) = 233 +fallxy ( 246, 4 ) = 233 +fallxy ( 246, 5 ) = 233 +fallxy ( 246, 6 ) = 233 +fallxy ( 246, 7 ) = 230 +fallxy ( 246, 8 ) = 230 +xyphendoy1 ( 246, 1 ) = 0 +xyphendoy1 ( 246, 2 ) = 0 +xyphendoy1 ( 246, 3 ) = 0 +xyphendoy1 ( 246, 4 ) = 0 +xyphendoy1 ( 246, 5 ) = 0 +xyphendoy1 ( 246, 6 ) = 0 +xyphendoy1 ( 246, 7 ) = 0 +xyphendoy1 ( 246, 8 ) = 0 + + ! xlat 66.7500000000000 +greenupxy ( 245, 1 ) = 166 +greenupxy ( 245, 2 ) = 156 +greenupxy ( 245, 3 ) = 172 +greenupxy ( 245, 4 ) = 170 +greenupxy ( 245, 5 ) = 170 +greenupxy ( 245, 6 ) = 170 +greenupxy ( 245, 7 ) = 145 +greenupxy ( 245, 8 ) = 145 +fallxy ( 245, 1 ) = 231 +fallxy ( 245, 2 ) = 230 +fallxy ( 245, 3 ) = 233 +fallxy ( 245, 4 ) = 233 +fallxy ( 245, 5 ) = 233 +fallxy ( 245, 6 ) = 233 +fallxy ( 245, 7 ) = 230 +fallxy ( 245, 8 ) = 230 +xyphendoy1 ( 245, 1 ) = 0 +xyphendoy1 ( 245, 2 ) = 0 +xyphendoy1 ( 245, 3 ) = 0 +xyphendoy1 ( 245, 4 ) = 0 +xyphendoy1 ( 245, 5 ) = 0 +xyphendoy1 ( 245, 6 ) = 0 +xyphendoy1 ( 245, 7 ) = 0 +xyphendoy1 ( 245, 8 ) = 0 + + ! xlat 66.2500000000000 +greenupxy ( 244, 1 ) = 166 +greenupxy ( 244, 2 ) = 155 +greenupxy ( 244, 3 ) = 171 +greenupxy ( 244, 4 ) = 168 +greenupxy ( 244, 5 ) = 168 +greenupxy ( 244, 6 ) = 168 +greenupxy ( 244, 7 ) = 145 +greenupxy ( 244, 8 ) = 145 +fallxy ( 244, 1 ) = 231 +fallxy ( 244, 2 ) = 230 +fallxy ( 244, 3 ) = 233 +fallxy ( 244, 4 ) = 233 +fallxy ( 244, 5 ) = 233 +fallxy ( 244, 6 ) = 233 +fallxy ( 244, 7 ) = 230 +fallxy ( 244, 8 ) = 230 +xyphendoy1 ( 244, 1 ) = 0 +xyphendoy1 ( 244, 2 ) = 0 +xyphendoy1 ( 244, 3 ) = 0 +xyphendoy1 ( 244, 4 ) = 0 +xyphendoy1 ( 244, 5 ) = 0 +xyphendoy1 ( 244, 6 ) = 0 +xyphendoy1 ( 244, 7 ) = 0 +xyphendoy1 ( 244, 8 ) = 0 + + ! xlat 65.7500000000000 +greenupxy ( 243, 1 ) = 164 +greenupxy ( 243, 2 ) = 154 +greenupxy ( 243, 3 ) = 170 +greenupxy ( 243, 4 ) = 167 +greenupxy ( 243, 5 ) = 167 +greenupxy ( 243, 6 ) = 167 +greenupxy ( 243, 7 ) = 145 +greenupxy ( 243, 8 ) = 145 +fallxy ( 243, 1 ) = 231 +fallxy ( 243, 2 ) = 230 +fallxy ( 243, 3 ) = 233 +fallxy ( 243, 4 ) = 233 +fallxy ( 243, 5 ) = 233 +fallxy ( 243, 6 ) = 233 +fallxy ( 243, 7 ) = 230 +fallxy ( 243, 8 ) = 230 +xyphendoy1 ( 243, 1 ) = 0 +xyphendoy1 ( 243, 2 ) = 0 +xyphendoy1 ( 243, 3 ) = 0 +xyphendoy1 ( 243, 4 ) = 0 +xyphendoy1 ( 243, 5 ) = 0 +xyphendoy1 ( 243, 6 ) = 0 +xyphendoy1 ( 243, 7 ) = 0 +xyphendoy1 ( 243, 8 ) = 0 + + ! xlat 65.2500000000000 +greenupxy ( 242, 1 ) = 163 +greenupxy ( 242, 2 ) = 153 +greenupxy ( 242, 3 ) = 169 +greenupxy ( 242, 4 ) = 166 +greenupxy ( 242, 5 ) = 166 +greenupxy ( 242, 6 ) = 166 +greenupxy ( 242, 7 ) = 145 +greenupxy ( 242, 8 ) = 145 +fallxy ( 242, 1 ) = 231 +fallxy ( 242, 2 ) = 230 +fallxy ( 242, 3 ) = 233 +fallxy ( 242, 4 ) = 233 +fallxy ( 242, 5 ) = 233 +fallxy ( 242, 6 ) = 233 +fallxy ( 242, 7 ) = 230 +fallxy ( 242, 8 ) = 230 +xyphendoy1 ( 242, 1 ) = 0 +xyphendoy1 ( 242, 2 ) = 0 +xyphendoy1 ( 242, 3 ) = 0 +xyphendoy1 ( 242, 4 ) = 0 +xyphendoy1 ( 242, 5 ) = 0 +xyphendoy1 ( 242, 6 ) = 0 +xyphendoy1 ( 242, 7 ) = 0 +xyphendoy1 ( 242, 8 ) = 0 + + ! xlat 64.7500000000000 +greenupxy ( 241, 1 ) = 161 +greenupxy ( 241, 2 ) = 153 +greenupxy ( 241, 3 ) = 168 +greenupxy ( 241, 4 ) = 165 +greenupxy ( 241, 5 ) = 165 +greenupxy ( 241, 6 ) = 165 +greenupxy ( 241, 7 ) = 145 +greenupxy ( 241, 8 ) = 145 +fallxy ( 241, 1 ) = 231 +fallxy ( 241, 2 ) = 230 +fallxy ( 241, 3 ) = 233 +fallxy ( 241, 4 ) = 232 +fallxy ( 241, 5 ) = 232 +fallxy ( 241, 6 ) = 232 +fallxy ( 241, 7 ) = 230 +fallxy ( 241, 8 ) = 230 +xyphendoy1 ( 241, 1 ) = 0 +xyphendoy1 ( 241, 2 ) = 0 +xyphendoy1 ( 241, 3 ) = 0 +xyphendoy1 ( 241, 4 ) = 0 +xyphendoy1 ( 241, 5 ) = 0 +xyphendoy1 ( 241, 6 ) = 0 +xyphendoy1 ( 241, 7 ) = 0 +xyphendoy1 ( 241, 8 ) = 0 + + ! xlat 64.2500000000000 +greenupxy ( 240, 1 ) = 160 +greenupxy ( 240, 2 ) = 152 +greenupxy ( 240, 3 ) = 167 +greenupxy ( 240, 4 ) = 164 +greenupxy ( 240, 5 ) = 164 +greenupxy ( 240, 6 ) = 164 +greenupxy ( 240, 7 ) = 145 +greenupxy ( 240, 8 ) = 145 +fallxy ( 240, 1 ) = 231 +fallxy ( 240, 2 ) = 230 +fallxy ( 240, 3 ) = 233 +fallxy ( 240, 4 ) = 233 +fallxy ( 240, 5 ) = 233 +fallxy ( 240, 6 ) = 233 +fallxy ( 240, 7 ) = 230 +fallxy ( 240, 8 ) = 230 +xyphendoy1 ( 240, 1 ) = 0 +xyphendoy1 ( 240, 2 ) = 0 +xyphendoy1 ( 240, 3 ) = 0 +xyphendoy1 ( 240, 4 ) = 0 +xyphendoy1 ( 240, 5 ) = 0 +xyphendoy1 ( 240, 6 ) = 0 +xyphendoy1 ( 240, 7 ) = 0 +xyphendoy1 ( 240, 8 ) = 0 + + ! xlat 63.7500000000000 +greenupxy ( 239, 1 ) = 159 +greenupxy ( 239, 2 ) = 151 +greenupxy ( 239, 3 ) = 167 +greenupxy ( 239, 4 ) = 163 +greenupxy ( 239, 5 ) = 163 +greenupxy ( 239, 6 ) = 163 +greenupxy ( 239, 7 ) = 144 +greenupxy ( 239, 8 ) = 144 +fallxy ( 239, 1 ) = 231 +fallxy ( 239, 2 ) = 229 +fallxy ( 239, 3 ) = 233 +fallxy ( 239, 4 ) = 233 +fallxy ( 239, 5 ) = 233 +fallxy ( 239, 6 ) = 233 +fallxy ( 239, 7 ) = 229 +fallxy ( 239, 8 ) = 229 +xyphendoy1 ( 239, 1 ) = 0 +xyphendoy1 ( 239, 2 ) = 0 +xyphendoy1 ( 239, 3 ) = 0 +xyphendoy1 ( 239, 4 ) = 0 +xyphendoy1 ( 239, 5 ) = 0 +xyphendoy1 ( 239, 6 ) = 0 +xyphendoy1 ( 239, 7 ) = 0 +xyphendoy1 ( 239, 8 ) = 0 + + ! xlat 63.2500000000000 +greenupxy ( 238, 1 ) = 158 +greenupxy ( 238, 2 ) = 150 +greenupxy ( 238, 3 ) = 166 +greenupxy ( 238, 4 ) = 163 +greenupxy ( 238, 5 ) = 163 +greenupxy ( 238, 6 ) = 163 +greenupxy ( 238, 7 ) = 144 +greenupxy ( 238, 8 ) = 144 +fallxy ( 238, 1 ) = 232 +fallxy ( 238, 2 ) = 229 +fallxy ( 238, 3 ) = 233 +fallxy ( 238, 4 ) = 233 +fallxy ( 238, 5 ) = 233 +fallxy ( 238, 6 ) = 233 +fallxy ( 238, 7 ) = 227 +fallxy ( 238, 8 ) = 227 +xyphendoy1 ( 238, 1 ) = 0 +xyphendoy1 ( 238, 2 ) = 0 +xyphendoy1 ( 238, 3 ) = 0 +xyphendoy1 ( 238, 4 ) = 0 +xyphendoy1 ( 238, 5 ) = 0 +xyphendoy1 ( 238, 6 ) = 0 +xyphendoy1 ( 238, 7 ) = 0 +xyphendoy1 ( 238, 8 ) = 0 + + ! xlat 62.7500000000000 +greenupxy ( 237, 1 ) = 157 +greenupxy ( 237, 2 ) = 148 +greenupxy ( 237, 3 ) = 166 +greenupxy ( 237, 4 ) = 162 +greenupxy ( 237, 5 ) = 162 +greenupxy ( 237, 6 ) = 162 +greenupxy ( 237, 7 ) = 144 +greenupxy ( 237, 8 ) = 144 +fallxy ( 237, 1 ) = 232 +fallxy ( 237, 2 ) = 229 +fallxy ( 237, 3 ) = 233 +fallxy ( 237, 4 ) = 233 +fallxy ( 237, 5 ) = 233 +fallxy ( 237, 6 ) = 233 +fallxy ( 237, 7 ) = 227 +fallxy ( 237, 8 ) = 227 +xyphendoy1 ( 237, 1 ) = 0 +xyphendoy1 ( 237, 2 ) = 0 +xyphendoy1 ( 237, 3 ) = 0 +xyphendoy1 ( 237, 4 ) = 0 +xyphendoy1 ( 237, 5 ) = 0 +xyphendoy1 ( 237, 6 ) = 0 +xyphendoy1 ( 237, 7 ) = 0 +xyphendoy1 ( 237, 8 ) = 0 + + ! xlat 62.2500000000000 +greenupxy ( 236, 1 ) = 156 +greenupxy ( 236, 2 ) = 147 +greenupxy ( 236, 3 ) = 165 +greenupxy ( 236, 4 ) = 161 +greenupxy ( 236, 5 ) = 161 +greenupxy ( 236, 6 ) = 161 +greenupxy ( 236, 7 ) = 143 +greenupxy ( 236, 8 ) = 143 +fallxy ( 236, 1 ) = 232 +fallxy ( 236, 2 ) = 229 +fallxy ( 236, 3 ) = 234 +fallxy ( 236, 4 ) = 233 +fallxy ( 236, 5 ) = 233 +fallxy ( 236, 6 ) = 233 +fallxy ( 236, 7 ) = 226 +fallxy ( 236, 8 ) = 226 +xyphendoy1 ( 236, 1 ) = 0 +xyphendoy1 ( 236, 2 ) = 0 +xyphendoy1 ( 236, 3 ) = 0 +xyphendoy1 ( 236, 4 ) = 0 +xyphendoy1 ( 236, 5 ) = 0 +xyphendoy1 ( 236, 6 ) = 0 +xyphendoy1 ( 236, 7 ) = 0 +xyphendoy1 ( 236, 8 ) = 0 + + ! xlat 61.7500000000000 +greenupxy ( 235, 1 ) = 155 +greenupxy ( 235, 2 ) = 146 +greenupxy ( 235, 3 ) = 165 +greenupxy ( 235, 4 ) = 161 +greenupxy ( 235, 5 ) = 161 +greenupxy ( 235, 6 ) = 161 +greenupxy ( 235, 7 ) = 142 +greenupxy ( 235, 8 ) = 142 +fallxy ( 235, 1 ) = 232 +fallxy ( 235, 2 ) = 228 +fallxy ( 235, 3 ) = 234 +fallxy ( 235, 4 ) = 233 +fallxy ( 235, 5 ) = 233 +fallxy ( 235, 6 ) = 233 +fallxy ( 235, 7 ) = 224 +fallxy ( 235, 8 ) = 224 +xyphendoy1 ( 235, 1 ) = 0 +xyphendoy1 ( 235, 2 ) = 0 +xyphendoy1 ( 235, 3 ) = 0 +xyphendoy1 ( 235, 4 ) = 0 +xyphendoy1 ( 235, 5 ) = 0 +xyphendoy1 ( 235, 6 ) = 0 +xyphendoy1 ( 235, 7 ) = 0 +xyphendoy1 ( 235, 8 ) = 0 + + ! xlat 61.2500000000000 +greenupxy ( 234, 1 ) = 155 +greenupxy ( 234, 2 ) = 145 +greenupxy ( 234, 3 ) = 165 +greenupxy ( 234, 4 ) = 160 +greenupxy ( 234, 5 ) = 160 +greenupxy ( 234, 6 ) = 160 +greenupxy ( 234, 7 ) = 141 +greenupxy ( 234, 8 ) = 141 +fallxy ( 234, 1 ) = 232 +fallxy ( 234, 2 ) = 228 +fallxy ( 234, 3 ) = 234 +fallxy ( 234, 4 ) = 233 +fallxy ( 234, 5 ) = 233 +fallxy ( 234, 6 ) = 233 +fallxy ( 234, 7 ) = 222 +fallxy ( 234, 8 ) = 222 +xyphendoy1 ( 234, 1 ) = 0 +xyphendoy1 ( 234, 2 ) = 0 +xyphendoy1 ( 234, 3 ) = 0 +xyphendoy1 ( 234, 4 ) = 0 +xyphendoy1 ( 234, 5 ) = 0 +xyphendoy1 ( 234, 6 ) = 0 +xyphendoy1 ( 234, 7 ) = 0 +xyphendoy1 ( 234, 8 ) = 0 + + ! xlat 60.7500000000000 +greenupxy ( 233, 1 ) = 154 +greenupxy ( 233, 2 ) = 144 +greenupxy ( 233, 3 ) = 165 +greenupxy ( 233, 4 ) = 159 +greenupxy ( 233, 5 ) = 159 +greenupxy ( 233, 6 ) = 159 +greenupxy ( 233, 7 ) = 140 +greenupxy ( 233, 8 ) = 140 +fallxy ( 233, 1 ) = 232 +fallxy ( 233, 2 ) = 227 +fallxy ( 233, 3 ) = 234 +fallxy ( 233, 4 ) = 232 +fallxy ( 233, 5 ) = 232 +fallxy ( 233, 6 ) = 232 +fallxy ( 233, 7 ) = 220 +fallxy ( 233, 8 ) = 220 +xyphendoy1 ( 233, 1 ) = 0 +xyphendoy1 ( 233, 2 ) = 0 +xyphendoy1 ( 233, 3 ) = 0 +xyphendoy1 ( 233, 4 ) = 0 +xyphendoy1 ( 233, 5 ) = 0 +xyphendoy1 ( 233, 6 ) = 0 +xyphendoy1 ( 233, 7 ) = 0 +xyphendoy1 ( 233, 8 ) = 0 + + ! xlat 60.2500000000000 +greenupxy ( 232, 1 ) = 153 +greenupxy ( 232, 2 ) = 144 +greenupxy ( 232, 3 ) = 165 +greenupxy ( 232, 4 ) = 159 +greenupxy ( 232, 5 ) = 159 +greenupxy ( 232, 6 ) = 159 +greenupxy ( 232, 7 ) = 139 +greenupxy ( 232, 8 ) = 139 +fallxy ( 232, 1 ) = 232 +fallxy ( 232, 2 ) = 226 +fallxy ( 232, 3 ) = 235 +fallxy ( 232, 4 ) = 232 +fallxy ( 232, 5 ) = 232 +fallxy ( 232, 6 ) = 232 +fallxy ( 232, 7 ) = 220 +fallxy ( 232, 8 ) = 220 +xyphendoy1 ( 232, 1 ) = 0 +xyphendoy1 ( 232, 2 ) = 0 +xyphendoy1 ( 232, 3 ) = 0 +xyphendoy1 ( 232, 4 ) = 0 +xyphendoy1 ( 232, 5 ) = 0 +xyphendoy1 ( 232, 6 ) = 0 +xyphendoy1 ( 232, 7 ) = 0 +xyphendoy1 ( 232, 8 ) = 0 + + ! xlat 59.7500000000000 +greenupxy ( 231, 1 ) = 153 +greenupxy ( 231, 2 ) = 143 +greenupxy ( 231, 3 ) = 165 +greenupxy ( 231, 4 ) = 158 +greenupxy ( 231, 5 ) = 158 +greenupxy ( 231, 6 ) = 158 +greenupxy ( 231, 7 ) = 138 +greenupxy ( 231, 8 ) = 138 +fallxy ( 231, 1 ) = 232 +fallxy ( 231, 2 ) = 226 +fallxy ( 231, 3 ) = 235 +fallxy ( 231, 4 ) = 232 +fallxy ( 231, 5 ) = 232 +fallxy ( 231, 6 ) = 232 +fallxy ( 231, 7 ) = 218 +fallxy ( 231, 8 ) = 218 +xyphendoy1 ( 231, 1 ) = 0 +xyphendoy1 ( 231, 2 ) = 0 +xyphendoy1 ( 231, 3 ) = 0 +xyphendoy1 ( 231, 4 ) = 0 +xyphendoy1 ( 231, 5 ) = 0 +xyphendoy1 ( 231, 6 ) = 0 +xyphendoy1 ( 231, 7 ) = 0 +xyphendoy1 ( 231, 8 ) = 0 + + ! xlat 59.2500000000000 +greenupxy ( 230, 1 ) = 152 +greenupxy ( 230, 2 ) = 143 +greenupxy ( 230, 3 ) = 165 +greenupxy ( 230, 4 ) = 157 +greenupxy ( 230, 5 ) = 157 +greenupxy ( 230, 6 ) = 157 +greenupxy ( 230, 7 ) = 138 +greenupxy ( 230, 8 ) = 138 +fallxy ( 230, 1 ) = 233 +fallxy ( 230, 2 ) = 226 +fallxy ( 230, 3 ) = 235 +fallxy ( 230, 4 ) = 232 +fallxy ( 230, 5 ) = 232 +fallxy ( 230, 6 ) = 232 +fallxy ( 230, 7 ) = 217 +fallxy ( 230, 8 ) = 217 +xyphendoy1 ( 230, 1 ) = 0 +xyphendoy1 ( 230, 2 ) = 0 +xyphendoy1 ( 230, 3 ) = 0 +xyphendoy1 ( 230, 4 ) = 0 +xyphendoy1 ( 230, 5 ) = 0 +xyphendoy1 ( 230, 6 ) = 0 +xyphendoy1 ( 230, 7 ) = 0 +xyphendoy1 ( 230, 8 ) = 0 + + ! xlat 58.7500000000000 +greenupxy ( 229, 1 ) = 151 +greenupxy ( 229, 2 ) = 143 +greenupxy ( 229, 3 ) = 165 +greenupxy ( 229, 4 ) = 156 +greenupxy ( 229, 5 ) = 156 +greenupxy ( 229, 6 ) = 156 +greenupxy ( 229, 7 ) = 138 +greenupxy ( 229, 8 ) = 138 +fallxy ( 229, 1 ) = 233 +fallxy ( 229, 2 ) = 226 +fallxy ( 229, 3 ) = 235 +fallxy ( 229, 4 ) = 232 +fallxy ( 229, 5 ) = 232 +fallxy ( 229, 6 ) = 232 +fallxy ( 229, 7 ) = 217 +fallxy ( 229, 8 ) = 217 +xyphendoy1 ( 229, 1 ) = 0 +xyphendoy1 ( 229, 2 ) = 0 +xyphendoy1 ( 229, 3 ) = 0 +xyphendoy1 ( 229, 4 ) = 0 +xyphendoy1 ( 229, 5 ) = 0 +xyphendoy1 ( 229, 6 ) = 0 +xyphendoy1 ( 229, 7 ) = 0 +xyphendoy1 ( 229, 8 ) = 0 + + ! xlat 58.2500000000000 +greenupxy ( 228, 1 ) = 151 +greenupxy ( 228, 2 ) = 142 +greenupxy ( 228, 3 ) = 164 +greenupxy ( 228, 4 ) = 156 +greenupxy ( 228, 5 ) = 156 +greenupxy ( 228, 6 ) = 156 +greenupxy ( 228, 7 ) = 137 +greenupxy ( 228, 8 ) = 137 +fallxy ( 228, 1 ) = 233 +fallxy ( 228, 2 ) = 225 +fallxy ( 228, 3 ) = 235 +fallxy ( 228, 4 ) = 232 +fallxy ( 228, 5 ) = 232 +fallxy ( 228, 6 ) = 232 +fallxy ( 228, 7 ) = 217 +fallxy ( 228, 8 ) = 217 +xyphendoy1 ( 228, 1 ) = 0 +xyphendoy1 ( 228, 2 ) = 0 +xyphendoy1 ( 228, 3 ) = 0 +xyphendoy1 ( 228, 4 ) = 0 +xyphendoy1 ( 228, 5 ) = 0 +xyphendoy1 ( 228, 6 ) = 0 +xyphendoy1 ( 228, 7 ) = 0 +xyphendoy1 ( 228, 8 ) = 0 + + ! xlat 57.7500000000000 +greenupxy ( 227, 1 ) = 150 +greenupxy ( 227, 2 ) = 141 +greenupxy ( 227, 3 ) = 164 +greenupxy ( 227, 4 ) = 155 +greenupxy ( 227, 5 ) = 155 +greenupxy ( 227, 6 ) = 155 +greenupxy ( 227, 7 ) = 136 +greenupxy ( 227, 8 ) = 136 +fallxy ( 227, 1 ) = 233 +fallxy ( 227, 2 ) = 225 +fallxy ( 227, 3 ) = 236 +fallxy ( 227, 4 ) = 231 +fallxy ( 227, 5 ) = 231 +fallxy ( 227, 6 ) = 231 +fallxy ( 227, 7 ) = 216 +fallxy ( 227, 8 ) = 216 +xyphendoy1 ( 227, 1 ) = 0 +xyphendoy1 ( 227, 2 ) = 0 +xyphendoy1 ( 227, 3 ) = 0 +xyphendoy1 ( 227, 4 ) = 0 +xyphendoy1 ( 227, 5 ) = 0 +xyphendoy1 ( 227, 6 ) = 0 +xyphendoy1 ( 227, 7 ) = 0 +xyphendoy1 ( 227, 8 ) = 0 + + ! xlat 57.2500000000000 +greenupxy ( 226, 1 ) = 149 +greenupxy ( 226, 2 ) = 140 +greenupxy ( 226, 3 ) = 164 +greenupxy ( 226, 4 ) = 154 +greenupxy ( 226, 5 ) = 154 +greenupxy ( 226, 6 ) = 154 +greenupxy ( 226, 7 ) = 135 +greenupxy ( 226, 8 ) = 135 +fallxy ( 226, 1 ) = 233 +fallxy ( 226, 2 ) = 225 +fallxy ( 226, 3 ) = 236 +fallxy ( 226, 4 ) = 231 +fallxy ( 226, 5 ) = 231 +fallxy ( 226, 6 ) = 231 +fallxy ( 226, 7 ) = 216 +fallxy ( 226, 8 ) = 216 +xyphendoy1 ( 226, 1 ) = 0 +xyphendoy1 ( 226, 2 ) = 0 +xyphendoy1 ( 226, 3 ) = 0 +xyphendoy1 ( 226, 4 ) = 0 +xyphendoy1 ( 226, 5 ) = 0 +xyphendoy1 ( 226, 6 ) = 0 +xyphendoy1 ( 226, 7 ) = 0 +xyphendoy1 ( 226, 8 ) = 0 + + ! xlat 56.7500000000000 +greenupxy ( 225, 1 ) = 149 +greenupxy ( 225, 2 ) = 139 +greenupxy ( 225, 3 ) = 164 +greenupxy ( 225, 4 ) = 153 +greenupxy ( 225, 5 ) = 153 +greenupxy ( 225, 6 ) = 153 +greenupxy ( 225, 7 ) = 134 +greenupxy ( 225, 8 ) = 134 +fallxy ( 225, 1 ) = 233 +fallxy ( 225, 2 ) = 225 +fallxy ( 225, 3 ) = 236 +fallxy ( 225, 4 ) = 231 +fallxy ( 225, 5 ) = 231 +fallxy ( 225, 6 ) = 231 +fallxy ( 225, 7 ) = 215 +fallxy ( 225, 8 ) = 215 +xyphendoy1 ( 225, 1 ) = 0 +xyphendoy1 ( 225, 2 ) = 0 +xyphendoy1 ( 225, 3 ) = 0 +xyphendoy1 ( 225, 4 ) = 0 +xyphendoy1 ( 225, 5 ) = 0 +xyphendoy1 ( 225, 6 ) = 0 +xyphendoy1 ( 225, 7 ) = 0 +xyphendoy1 ( 225, 8 ) = 0 + + ! xlat 56.2500000000000 +greenupxy ( 224, 1 ) = 148 +greenupxy ( 224, 2 ) = 137 +greenupxy ( 224, 3 ) = 163 +greenupxy ( 224, 4 ) = 152 +greenupxy ( 224, 5 ) = 152 +greenupxy ( 224, 6 ) = 152 +greenupxy ( 224, 7 ) = 133 +greenupxy ( 224, 8 ) = 133 +fallxy ( 224, 1 ) = 234 +fallxy ( 224, 2 ) = 225 +fallxy ( 224, 3 ) = 236 +fallxy ( 224, 4 ) = 230 +fallxy ( 224, 5 ) = 230 +fallxy ( 224, 6 ) = 230 +fallxy ( 224, 7 ) = 215 +fallxy ( 224, 8 ) = 215 +xyphendoy1 ( 224, 1 ) = 0 +xyphendoy1 ( 224, 2 ) = 0 +xyphendoy1 ( 224, 3 ) = 0 +xyphendoy1 ( 224, 4 ) = 0 +xyphendoy1 ( 224, 5 ) = 0 +xyphendoy1 ( 224, 6 ) = 0 +xyphendoy1 ( 224, 7 ) = 0 +xyphendoy1 ( 224, 8 ) = 0 + + ! xlat 55.7500000000000 +greenupxy ( 223, 1 ) = 147 +greenupxy ( 223, 2 ) = 136 +greenupxy ( 223, 3 ) = 163 +greenupxy ( 223, 4 ) = 150 +greenupxy ( 223, 5 ) = 150 +greenupxy ( 223, 6 ) = 150 +greenupxy ( 223, 7 ) = 132 +greenupxy ( 223, 8 ) = 132 +fallxy ( 223, 1 ) = 234 +fallxy ( 223, 2 ) = 224 +fallxy ( 223, 3 ) = 236 +fallxy ( 223, 4 ) = 229 +fallxy ( 223, 5 ) = 229 +fallxy ( 223, 6 ) = 229 +fallxy ( 223, 7 ) = 214 +fallxy ( 223, 8 ) = 214 +xyphendoy1 ( 223, 1 ) = 0 +xyphendoy1 ( 223, 2 ) = 0 +xyphendoy1 ( 223, 3 ) = 0 +xyphendoy1 ( 223, 4 ) = 0 +xyphendoy1 ( 223, 5 ) = 0 +xyphendoy1 ( 223, 6 ) = 0 +xyphendoy1 ( 223, 7 ) = 0 +xyphendoy1 ( 223, 8 ) = 0 + + ! xlat 55.2500000000000 +greenupxy ( 222, 1 ) = 147 +greenupxy ( 222, 2 ) = 134 +greenupxy ( 222, 3 ) = 162 +greenupxy ( 222, 4 ) = 149 +greenupxy ( 222, 5 ) = 149 +greenupxy ( 222, 6 ) = 149 +greenupxy ( 222, 7 ) = 132 +greenupxy ( 222, 8 ) = 132 +fallxy ( 222, 1 ) = 234 +fallxy ( 222, 2 ) = 224 +fallxy ( 222, 3 ) = 236 +fallxy ( 222, 4 ) = 228 +fallxy ( 222, 5 ) = 228 +fallxy ( 222, 6 ) = 228 +fallxy ( 222, 7 ) = 214 +fallxy ( 222, 8 ) = 214 +xyphendoy1 ( 222, 1 ) = 0 +xyphendoy1 ( 222, 2 ) = 0 +xyphendoy1 ( 222, 3 ) = 0 +xyphendoy1 ( 222, 4 ) = 0 +xyphendoy1 ( 222, 5 ) = 0 +xyphendoy1 ( 222, 6 ) = 0 +xyphendoy1 ( 222, 7 ) = 0 +xyphendoy1 ( 222, 8 ) = 0 + + ! xlat 54.7500000000000 +greenupxy ( 221, 1 ) = 146 +greenupxy ( 221, 2 ) = 133 +greenupxy ( 221, 3 ) = 161 +greenupxy ( 221, 4 ) = 147 +greenupxy ( 221, 5 ) = 147 +greenupxy ( 221, 6 ) = 147 +greenupxy ( 221, 7 ) = 131 +greenupxy ( 221, 8 ) = 131 +fallxy ( 221, 1 ) = 234 +fallxy ( 221, 2 ) = 223 +fallxy ( 221, 3 ) = 235 +fallxy ( 221, 4 ) = 227 +fallxy ( 221, 5 ) = 227 +fallxy ( 221, 6 ) = 227 +fallxy ( 221, 7 ) = 214 +fallxy ( 221, 8 ) = 214 +xyphendoy1 ( 221, 1 ) = 0 +xyphendoy1 ( 221, 2 ) = 0 +xyphendoy1 ( 221, 3 ) = 0 +xyphendoy1 ( 221, 4 ) = 0 +xyphendoy1 ( 221, 5 ) = 0 +xyphendoy1 ( 221, 6 ) = 0 +xyphendoy1 ( 221, 7 ) = 0 +xyphendoy1 ( 221, 8 ) = 0 + + ! xlat 54.2500000000000 +greenupxy ( 220, 1 ) = 146 +greenupxy ( 220, 2 ) = 132 +greenupxy ( 220, 3 ) = 161 +greenupxy ( 220, 4 ) = 145 +greenupxy ( 220, 5 ) = 145 +greenupxy ( 220, 6 ) = 145 +greenupxy ( 220, 7 ) = 130 +greenupxy ( 220, 8 ) = 130 +fallxy ( 220, 1 ) = 234 +fallxy ( 220, 2 ) = 223 +fallxy ( 220, 3 ) = 235 +fallxy ( 220, 4 ) = 225 +fallxy ( 220, 5 ) = 225 +fallxy ( 220, 6 ) = 225 +fallxy ( 220, 7 ) = 214 +fallxy ( 220, 8 ) = 214 +xyphendoy1 ( 220, 1 ) = 0 +xyphendoy1 ( 220, 2 ) = 0 +xyphendoy1 ( 220, 3 ) = 0 +xyphendoy1 ( 220, 4 ) = 0 +xyphendoy1 ( 220, 5 ) = 0 +xyphendoy1 ( 220, 6 ) = 0 +xyphendoy1 ( 220, 7 ) = 0 +xyphendoy1 ( 220, 8 ) = 0 + + ! xlat 53.7500000000000 +greenupxy ( 219, 1 ) = 145 +greenupxy ( 219, 2 ) = 130 +greenupxy ( 219, 3 ) = 160 +greenupxy ( 219, 4 ) = 143 +greenupxy ( 219, 5 ) = 143 +greenupxy ( 219, 6 ) = 143 +greenupxy ( 219, 7 ) = 129 +greenupxy ( 219, 8 ) = 129 +fallxy ( 219, 1 ) = 234 +fallxy ( 219, 2 ) = 222 +fallxy ( 219, 3 ) = 235 +fallxy ( 219, 4 ) = 224 +fallxy ( 219, 5 ) = 224 +fallxy ( 219, 6 ) = 224 +fallxy ( 219, 7 ) = 214 +fallxy ( 219, 8 ) = 214 +xyphendoy1 ( 219, 1 ) = 0 +xyphendoy1 ( 219, 2 ) = 0 +xyphendoy1 ( 219, 3 ) = 0 +xyphendoy1 ( 219, 4 ) = 0 +xyphendoy1 ( 219, 5 ) = 0 +xyphendoy1 ( 219, 6 ) = 0 +xyphendoy1 ( 219, 7 ) = 0 +xyphendoy1 ( 219, 8 ) = 0 + + ! xlat 53.2500000000000 +greenupxy ( 218, 1 ) = 144 +greenupxy ( 218, 2 ) = 129 +greenupxy ( 218, 3 ) = 158 +greenupxy ( 218, 4 ) = 141 +greenupxy ( 218, 5 ) = 141 +greenupxy ( 218, 6 ) = 141 +greenupxy ( 218, 7 ) = 128 +greenupxy ( 218, 8 ) = 128 +fallxy ( 218, 1 ) = 234 +fallxy ( 218, 2 ) = 222 +fallxy ( 218, 3 ) = 234 +fallxy ( 218, 4 ) = 222 +fallxy ( 218, 5 ) = 222 +fallxy ( 218, 6 ) = 222 +fallxy ( 218, 7 ) = 214 +fallxy ( 218, 8 ) = 214 +xyphendoy1 ( 218, 1 ) = 0 +xyphendoy1 ( 218, 2 ) = 0 +xyphendoy1 ( 218, 3 ) = 0 +xyphendoy1 ( 218, 4 ) = 0 +xyphendoy1 ( 218, 5 ) = 0 +xyphendoy1 ( 218, 6 ) = 0 +xyphendoy1 ( 218, 7 ) = 0 +xyphendoy1 ( 218, 8 ) = 0 + + ! xlat 52.7500000000000 +greenupxy ( 217, 1 ) = 144 +greenupxy ( 217, 2 ) = 127 +greenupxy ( 217, 3 ) = 157 +greenupxy ( 217, 4 ) = 139 +greenupxy ( 217, 5 ) = 139 +greenupxy ( 217, 6 ) = 139 +greenupxy ( 217, 7 ) = 127 +greenupxy ( 217, 8 ) = 127 +fallxy ( 217, 1 ) = 234 +fallxy ( 217, 2 ) = 221 +fallxy ( 217, 3 ) = 234 +fallxy ( 217, 4 ) = 221 +fallxy ( 217, 5 ) = 221 +fallxy ( 217, 6 ) = 221 +fallxy ( 217, 7 ) = 214 +fallxy ( 217, 8 ) = 214 +xyphendoy1 ( 217, 1 ) = 0 +xyphendoy1 ( 217, 2 ) = 0 +xyphendoy1 ( 217, 3 ) = 0 +xyphendoy1 ( 217, 4 ) = 0 +xyphendoy1 ( 217, 5 ) = 0 +xyphendoy1 ( 217, 6 ) = 0 +xyphendoy1 ( 217, 7 ) = 0 +xyphendoy1 ( 217, 8 ) = 0 + + ! xlat 52.2500000000000 +greenupxy ( 216, 1 ) = 143 +greenupxy ( 216, 2 ) = 126 +greenupxy ( 216, 3 ) = 155 +greenupxy ( 216, 4 ) = 137 +greenupxy ( 216, 5 ) = 137 +greenupxy ( 216, 6 ) = 137 +greenupxy ( 216, 7 ) = 126 +greenupxy ( 216, 8 ) = 126 +fallxy ( 216, 1 ) = 234 +fallxy ( 216, 2 ) = 221 +fallxy ( 216, 3 ) = 233 +fallxy ( 216, 4 ) = 219 +fallxy ( 216, 5 ) = 219 +fallxy ( 216, 6 ) = 219 +fallxy ( 216, 7 ) = 214 +fallxy ( 216, 8 ) = 214 +xyphendoy1 ( 216, 1 ) = 0 +xyphendoy1 ( 216, 2 ) = 0 +xyphendoy1 ( 216, 3 ) = 0 +xyphendoy1 ( 216, 4 ) = 0 +xyphendoy1 ( 216, 5 ) = 0 +xyphendoy1 ( 216, 6 ) = 0 +xyphendoy1 ( 216, 7 ) = 0 +xyphendoy1 ( 216, 8 ) = 0 + + ! xlat 51.7500000000000 +greenupxy ( 215, 1 ) = 142 +greenupxy ( 215, 2 ) = 124 +greenupxy ( 215, 3 ) = 153 +greenupxy ( 215, 4 ) = 135 +greenupxy ( 215, 5 ) = 135 +greenupxy ( 215, 6 ) = 135 +greenupxy ( 215, 7 ) = 125 +greenupxy ( 215, 8 ) = 125 +fallxy ( 215, 1 ) = 234 +fallxy ( 215, 2 ) = 221 +fallxy ( 215, 3 ) = 233 +fallxy ( 215, 4 ) = 218 +fallxy ( 215, 5 ) = 218 +fallxy ( 215, 6 ) = 218 +fallxy ( 215, 7 ) = 214 +fallxy ( 215, 8 ) = 214 +xyphendoy1 ( 215, 1 ) = 0 +xyphendoy1 ( 215, 2 ) = 0 +xyphendoy1 ( 215, 3 ) = 0 +xyphendoy1 ( 215, 4 ) = 0 +xyphendoy1 ( 215, 5 ) = 0 +xyphendoy1 ( 215, 6 ) = 0 +xyphendoy1 ( 215, 7 ) = 0 +xyphendoy1 ( 215, 8 ) = 0 + + ! xlat 51.2500000000000 +greenupxy ( 214, 1 ) = 142 +greenupxy ( 214, 2 ) = 123 +greenupxy ( 214, 3 ) = 151 +greenupxy ( 214, 4 ) = 133 +greenupxy ( 214, 5 ) = 133 +greenupxy ( 214, 6 ) = 133 +greenupxy ( 214, 7 ) = 124 +greenupxy ( 214, 8 ) = 124 +fallxy ( 214, 1 ) = 234 +fallxy ( 214, 2 ) = 221 +fallxy ( 214, 3 ) = 232 +fallxy ( 214, 4 ) = 217 +fallxy ( 214, 5 ) = 217 +fallxy ( 214, 6 ) = 217 +fallxy ( 214, 7 ) = 215 +fallxy ( 214, 8 ) = 215 +xyphendoy1 ( 214, 1 ) = 0 +xyphendoy1 ( 214, 2 ) = 0 +xyphendoy1 ( 214, 3 ) = 0 +xyphendoy1 ( 214, 4 ) = 0 +xyphendoy1 ( 214, 5 ) = 0 +xyphendoy1 ( 214, 6 ) = 0 +xyphendoy1 ( 214, 7 ) = 0 +xyphendoy1 ( 214, 8 ) = 0 + + ! xlat 50.7500000000000 +greenupxy ( 213, 1 ) = 142 +greenupxy ( 213, 2 ) = 122 +greenupxy ( 213, 3 ) = 149 +greenupxy ( 213, 4 ) = 131 +greenupxy ( 213, 5 ) = 131 +greenupxy ( 213, 6 ) = 131 +greenupxy ( 213, 7 ) = 123 +greenupxy ( 213, 8 ) = 123 +fallxy ( 213, 1 ) = 234 +fallxy ( 213, 2 ) = 221 +fallxy ( 213, 3 ) = 230 +fallxy ( 213, 4 ) = 215 +fallxy ( 213, 5 ) = 215 +fallxy ( 213, 6 ) = 215 +fallxy ( 213, 7 ) = 215 +fallxy ( 213, 8 ) = 215 +xyphendoy1 ( 213, 1 ) = 0 +xyphendoy1 ( 213, 2 ) = 0 +xyphendoy1 ( 213, 3 ) = 0 +xyphendoy1 ( 213, 4 ) = 0 +xyphendoy1 ( 213, 5 ) = 0 +xyphendoy1 ( 213, 6 ) = 0 +xyphendoy1 ( 213, 7 ) = 0 +xyphendoy1 ( 213, 8 ) = 0 + + ! xlat 50.2500000000000 +greenupxy ( 212, 1 ) = 141 +greenupxy ( 212, 2 ) = 121 +greenupxy ( 212, 3 ) = 146 +greenupxy ( 212, 4 ) = 129 +greenupxy ( 212, 5 ) = 129 +greenupxy ( 212, 6 ) = 129 +greenupxy ( 212, 7 ) = 121 +greenupxy ( 212, 8 ) = 121 +fallxy ( 212, 1 ) = 234 +fallxy ( 212, 2 ) = 222 +fallxy ( 212, 3 ) = 228 +fallxy ( 212, 4 ) = 213 +fallxy ( 212, 5 ) = 213 +fallxy ( 212, 6 ) = 213 +fallxy ( 212, 7 ) = 216 +fallxy ( 212, 8 ) = 216 +xyphendoy1 ( 212, 1 ) = 0 +xyphendoy1 ( 212, 2 ) = 0 +xyphendoy1 ( 212, 3 ) = 0 +xyphendoy1 ( 212, 4 ) = 0 +xyphendoy1 ( 212, 5 ) = 0 +xyphendoy1 ( 212, 6 ) = 0 +xyphendoy1 ( 212, 7 ) = 0 +xyphendoy1 ( 212, 8 ) = 0 + + ! xlat 49.7500000000000 +greenupxy ( 211, 1 ) = 141 +greenupxy ( 211, 2 ) = 120 +greenupxy ( 211, 3 ) = 143 +greenupxy ( 211, 4 ) = 127 +greenupxy ( 211, 5 ) = 127 +greenupxy ( 211, 6 ) = 127 +greenupxy ( 211, 7 ) = 120 +greenupxy ( 211, 8 ) = 120 +fallxy ( 211, 1 ) = 233 +fallxy ( 211, 2 ) = 222 +fallxy ( 211, 3 ) = 226 +fallxy ( 211, 4 ) = 212 +fallxy ( 211, 5 ) = 212 +fallxy ( 211, 6 ) = 212 +fallxy ( 211, 7 ) = 217 +fallxy ( 211, 8 ) = 217 +xyphendoy1 ( 211, 1 ) = 0 +xyphendoy1 ( 211, 2 ) = 0 +xyphendoy1 ( 211, 3 ) = 0 +xyphendoy1 ( 211, 4 ) = 0 +xyphendoy1 ( 211, 5 ) = 0 +xyphendoy1 ( 211, 6 ) = 0 +xyphendoy1 ( 211, 7 ) = 0 +xyphendoy1 ( 211, 8 ) = 0 + + ! xlat 49.2500000000000 +greenupxy ( 210, 1 ) = 140 +greenupxy ( 210, 2 ) = 119 +greenupxy ( 210, 3 ) = 141 +greenupxy ( 210, 4 ) = 125 +greenupxy ( 210, 5 ) = 125 +greenupxy ( 210, 6 ) = 125 +greenupxy ( 210, 7 ) = 119 +greenupxy ( 210, 8 ) = 119 +fallxy ( 210, 1 ) = 233 +fallxy ( 210, 2 ) = 222 +fallxy ( 210, 3 ) = 225 +fallxy ( 210, 4 ) = 211 +fallxy ( 210, 5 ) = 211 +fallxy ( 210, 6 ) = 211 +fallxy ( 210, 7 ) = 218 +fallxy ( 210, 8 ) = 218 +xyphendoy1 ( 210, 1 ) = 0 +xyphendoy1 ( 210, 2 ) = 0 +xyphendoy1 ( 210, 3 ) = 0 +xyphendoy1 ( 210, 4 ) = 0 +xyphendoy1 ( 210, 5 ) = 0 +xyphendoy1 ( 210, 6 ) = 0 +xyphendoy1 ( 210, 7 ) = 0 +xyphendoy1 ( 210, 8 ) = 0 + + ! xlat 48.7500000000000 +greenupxy ( 209, 1 ) = 139 +greenupxy ( 209, 2 ) = 119 +greenupxy ( 209, 3 ) = 138 +greenupxy ( 209, 4 ) = 124 +greenupxy ( 209, 5 ) = 124 +greenupxy ( 209, 6 ) = 124 +greenupxy ( 209, 7 ) = 119 +greenupxy ( 209, 8 ) = 119 +fallxy ( 209, 1 ) = 233 +fallxy ( 209, 2 ) = 222 +fallxy ( 209, 3 ) = 222 +fallxy ( 209, 4 ) = 209 +fallxy ( 209, 5 ) = 209 +fallxy ( 209, 6 ) = 209 +fallxy ( 209, 7 ) = 219 +fallxy ( 209, 8 ) = 219 +xyphendoy1 ( 209, 1 ) = 0 +xyphendoy1 ( 209, 2 ) = 0 +xyphendoy1 ( 209, 3 ) = 0 +xyphendoy1 ( 209, 4 ) = 0 +xyphendoy1 ( 209, 5 ) = 0 +xyphendoy1 ( 209, 6 ) = 0 +xyphendoy1 ( 209, 7 ) = 0 +xyphendoy1 ( 209, 8 ) = 0 + + ! xlat 48.2500000000000 +greenupxy ( 208, 1 ) = 139 +greenupxy ( 208, 2 ) = 119 +greenupxy ( 208, 3 ) = 135 +greenupxy ( 208, 4 ) = 122 +greenupxy ( 208, 5 ) = 122 +greenupxy ( 208, 6 ) = 122 +greenupxy ( 208, 7 ) = 118 +greenupxy ( 208, 8 ) = 118 +fallxy ( 208, 1 ) = 232 +fallxy ( 208, 2 ) = 222 +fallxy ( 208, 3 ) = 220 +fallxy ( 208, 4 ) = 208 +fallxy ( 208, 5 ) = 208 +fallxy ( 208, 6 ) = 208 +fallxy ( 208, 7 ) = 220 +fallxy ( 208, 8 ) = 220 +xyphendoy1 ( 208, 1 ) = 0 +xyphendoy1 ( 208, 2 ) = 0 +xyphendoy1 ( 208, 3 ) = 0 +xyphendoy1 ( 208, 4 ) = 0 +xyphendoy1 ( 208, 5 ) = 0 +xyphendoy1 ( 208, 6 ) = 0 +xyphendoy1 ( 208, 7 ) = 0 +xyphendoy1 ( 208, 8 ) = 0 + + ! xlat 47.7500000000000 +greenupxy ( 207, 1 ) = 138 +greenupxy ( 207, 2 ) = 119 +greenupxy ( 207, 3 ) = 132 +greenupxy ( 207, 4 ) = 120 +greenupxy ( 207, 5 ) = 120 +greenupxy ( 207, 6 ) = 120 +greenupxy ( 207, 7 ) = 118 +greenupxy ( 207, 8 ) = 118 +fallxy ( 207, 1 ) = 232 +fallxy ( 207, 2 ) = 223 +fallxy ( 207, 3 ) = 217 +fallxy ( 207, 4 ) = 207 +fallxy ( 207, 5 ) = 207 +fallxy ( 207, 6 ) = 207 +fallxy ( 207, 7 ) = 222 +fallxy ( 207, 8 ) = 222 +xyphendoy1 ( 207, 1 ) = 0 +xyphendoy1 ( 207, 2 ) = 0 +xyphendoy1 ( 207, 3 ) = 0 +xyphendoy1 ( 207, 4 ) = 0 +xyphendoy1 ( 207, 5 ) = 0 +xyphendoy1 ( 207, 6 ) = 0 +xyphendoy1 ( 207, 7 ) = 0 +xyphendoy1 ( 207, 8 ) = 0 + + ! xlat 47.2500000000000 +greenupxy ( 206, 1 ) = 138 +greenupxy ( 206, 2 ) = 119 +greenupxy ( 206, 3 ) = 129 +greenupxy ( 206, 4 ) = 118 +greenupxy ( 206, 5 ) = 118 +greenupxy ( 206, 6 ) = 118 +greenupxy ( 206, 7 ) = 118 +greenupxy ( 206, 8 ) = 118 +fallxy ( 206, 1 ) = 232 +fallxy ( 206, 2 ) = 223 +fallxy ( 206, 3 ) = 215 +fallxy ( 206, 4 ) = 205 +fallxy ( 206, 5 ) = 205 +fallxy ( 206, 6 ) = 205 +fallxy ( 206, 7 ) = 223 +fallxy ( 206, 8 ) = 223 +xyphendoy1 ( 206, 1 ) = 0 +xyphendoy1 ( 206, 2 ) = 0 +xyphendoy1 ( 206, 3 ) = 0 +xyphendoy1 ( 206, 4 ) = 0 +xyphendoy1 ( 206, 5 ) = 0 +xyphendoy1 ( 206, 6 ) = 0 +xyphendoy1 ( 206, 7 ) = 0 +xyphendoy1 ( 206, 8 ) = 0 + + ! xlat 46.7500000000000 +greenupxy ( 205, 1 ) = 138 +greenupxy ( 205, 2 ) = 119 +greenupxy ( 205, 3 ) = 127 +greenupxy ( 205, 4 ) = 118 +greenupxy ( 205, 5 ) = 118 +greenupxy ( 205, 6 ) = 118 +greenupxy ( 205, 7 ) = 118 +greenupxy ( 205, 8 ) = 118 +fallxy ( 205, 1 ) = 231 +fallxy ( 205, 2 ) = 224 +fallxy ( 205, 3 ) = 213 +fallxy ( 205, 4 ) = 205 +fallxy ( 205, 5 ) = 205 +fallxy ( 205, 6 ) = 205 +fallxy ( 205, 7 ) = 224 +fallxy ( 205, 8 ) = 224 +xyphendoy1 ( 205, 1 ) = 0 +xyphendoy1 ( 205, 2 ) = 0 +xyphendoy1 ( 205, 3 ) = 0 +xyphendoy1 ( 205, 4 ) = 0 +xyphendoy1 ( 205, 5 ) = 0 +xyphendoy1 ( 205, 6 ) = 0 +xyphendoy1 ( 205, 7 ) = 0 +xyphendoy1 ( 205, 8 ) = 0 + + ! xlat 46.2500000000000 +greenupxy ( 204, 1 ) = 137 +greenupxy ( 204, 2 ) = 119 +greenupxy ( 204, 3 ) = 124 +greenupxy ( 204, 4 ) = 117 +greenupxy ( 204, 5 ) = 117 +greenupxy ( 204, 6 ) = 117 +greenupxy ( 204, 7 ) = 118 +greenupxy ( 204, 8 ) = 118 +fallxy ( 204, 1 ) = 230 +fallxy ( 204, 2 ) = 224 +fallxy ( 204, 3 ) = 210 +fallxy ( 204, 4 ) = 205 +fallxy ( 204, 5 ) = 205 +fallxy ( 204, 6 ) = 205 +fallxy ( 204, 7 ) = 226 +fallxy ( 204, 8 ) = 226 +xyphendoy1 ( 204, 1 ) = 0 +xyphendoy1 ( 204, 2 ) = 0 +xyphendoy1 ( 204, 3 ) = 0 +xyphendoy1 ( 204, 4 ) = 0 +xyphendoy1 ( 204, 5 ) = 0 +xyphendoy1 ( 204, 6 ) = 0 +xyphendoy1 ( 204, 7 ) = 0 +xyphendoy1 ( 204, 8 ) = 0 + + ! xlat 45.7500000000000 +greenupxy ( 203, 1 ) = 136 +greenupxy ( 203, 2 ) = 119 +greenupxy ( 203, 3 ) = 121 +greenupxy ( 203, 4 ) = 116 +greenupxy ( 203, 5 ) = 116 +greenupxy ( 203, 6 ) = 116 +greenupxy ( 203, 7 ) = 118 +greenupxy ( 203, 8 ) = 118 +fallxy ( 203, 1 ) = 229 +fallxy ( 203, 2 ) = 226 +fallxy ( 203, 3 ) = 206 +fallxy ( 203, 4 ) = 205 +fallxy ( 203, 5 ) = 205 +fallxy ( 203, 6 ) = 205 +fallxy ( 203, 7 ) = 227 +fallxy ( 203, 8 ) = 227 +xyphendoy1 ( 203, 1 ) = 0 +xyphendoy1 ( 203, 2 ) = 0 +xyphendoy1 ( 203, 3 ) = 0 +xyphendoy1 ( 203, 4 ) = 0 +xyphendoy1 ( 203, 5 ) = 0 +xyphendoy1 ( 203, 6 ) = 0 +xyphendoy1 ( 203, 7 ) = 0 +xyphendoy1 ( 203, 8 ) = 0 + + ! xlat 45.2500000000000 +greenupxy ( 202, 1 ) = 136 +greenupxy ( 202, 2 ) = 120 +greenupxy ( 202, 3 ) = 117 +greenupxy ( 202, 4 ) = 116 +greenupxy ( 202, 5 ) = 116 +greenupxy ( 202, 6 ) = 116 +greenupxy ( 202, 7 ) = 117 +greenupxy ( 202, 8 ) = 117 +fallxy ( 202, 1 ) = 229 +fallxy ( 202, 2 ) = 227 +fallxy ( 202, 3 ) = 203 +fallxy ( 202, 4 ) = 205 +fallxy ( 202, 5 ) = 205 +fallxy ( 202, 6 ) = 205 +fallxy ( 202, 7 ) = 229 +fallxy ( 202, 8 ) = 229 +xyphendoy1 ( 202, 1 ) = 0 +xyphendoy1 ( 202, 2 ) = 0 +xyphendoy1 ( 202, 3 ) = 0 +xyphendoy1 ( 202, 4 ) = 0 +xyphendoy1 ( 202, 5 ) = 0 +xyphendoy1 ( 202, 6 ) = 0 +xyphendoy1 ( 202, 7 ) = 0 +xyphendoy1 ( 202, 8 ) = 0 + + ! xlat 44.7500000000000 +greenupxy ( 201, 1 ) = 136 +greenupxy ( 201, 2 ) = 120 +greenupxy ( 201, 3 ) = 115 +greenupxy ( 201, 4 ) = 116 +greenupxy ( 201, 5 ) = 116 +greenupxy ( 201, 6 ) = 116 +greenupxy ( 201, 7 ) = 117 +greenupxy ( 201, 8 ) = 117 +fallxy ( 201, 1 ) = 228 +fallxy ( 201, 2 ) = 227 +fallxy ( 201, 3 ) = 200 +fallxy ( 201, 4 ) = 206 +fallxy ( 201, 5 ) = 206 +fallxy ( 201, 6 ) = 206 +fallxy ( 201, 7 ) = 230 +fallxy ( 201, 8 ) = 230 +xyphendoy1 ( 201, 1 ) = 0 +xyphendoy1 ( 201, 2 ) = 0 +xyphendoy1 ( 201, 3 ) = 0 +xyphendoy1 ( 201, 4 ) = 0 +xyphendoy1 ( 201, 5 ) = 0 +xyphendoy1 ( 201, 6 ) = 0 +xyphendoy1 ( 201, 7 ) = 0 +xyphendoy1 ( 201, 8 ) = 0 + + ! xlat 44.2500000000000 +greenupxy ( 200, 1 ) = 135 +greenupxy ( 200, 2 ) = 119 +greenupxy ( 200, 3 ) = 112 +greenupxy ( 200, 4 ) = 115 +greenupxy ( 200, 5 ) = 115 +greenupxy ( 200, 6 ) = 115 +greenupxy ( 200, 7 ) = 117 +greenupxy ( 200, 8 ) = 117 +fallxy ( 200, 1 ) = 227 +fallxy ( 200, 2 ) = 228 +fallxy ( 200, 3 ) = 197 +fallxy ( 200, 4 ) = 206 +fallxy ( 200, 5 ) = 206 +fallxy ( 200, 6 ) = 206 +fallxy ( 200, 7 ) = 230 +fallxy ( 200, 8 ) = 230 +xyphendoy1 ( 200, 1 ) = 0 +xyphendoy1 ( 200, 2 ) = 0 +xyphendoy1 ( 200, 3 ) = 0 +xyphendoy1 ( 200, 4 ) = 0 +xyphendoy1 ( 200, 5 ) = 0 +xyphendoy1 ( 200, 6 ) = 0 +xyphendoy1 ( 200, 7 ) = 0 +xyphendoy1 ( 200, 8 ) = 0 + + ! xlat 43.7500000000000 +greenupxy ( 199, 1 ) = 135 +greenupxy ( 199, 2 ) = 119 +greenupxy ( 199, 3 ) = 109 +greenupxy ( 199, 4 ) = 115 +greenupxy ( 199, 5 ) = 115 +greenupxy ( 199, 6 ) = 115 +greenupxy ( 199, 7 ) = 116 +greenupxy ( 199, 8 ) = 116 +fallxy ( 199, 1 ) = 226 +fallxy ( 199, 2 ) = 228 +fallxy ( 199, 3 ) = 194 +fallxy ( 199, 4 ) = 206 +fallxy ( 199, 5 ) = 206 +fallxy ( 199, 6 ) = 206 +fallxy ( 199, 7 ) = 231 +fallxy ( 199, 8 ) = 231 +xyphendoy1 ( 199, 1 ) = 0 +xyphendoy1 ( 199, 2 ) = 0 +xyphendoy1 ( 199, 3 ) = 0 +xyphendoy1 ( 199, 4 ) = 0 +xyphendoy1 ( 199, 5 ) = 0 +xyphendoy1 ( 199, 6 ) = 0 +xyphendoy1 ( 199, 7 ) = 0 +xyphendoy1 ( 199, 8 ) = 0 + + ! xlat 43.2500000000000 +greenupxy ( 198, 1 ) = 134 +greenupxy ( 198, 2 ) = 119 +greenupxy ( 198, 3 ) = 107 +greenupxy ( 198, 4 ) = 115 +greenupxy ( 198, 5 ) = 115 +greenupxy ( 198, 6 ) = 115 +greenupxy ( 198, 7 ) = 116 +greenupxy ( 198, 8 ) = 116 +fallxy ( 198, 1 ) = 226 +fallxy ( 198, 2 ) = 228 +fallxy ( 198, 3 ) = 192 +fallxy ( 198, 4 ) = 206 +fallxy ( 198, 5 ) = 206 +fallxy ( 198, 6 ) = 206 +fallxy ( 198, 7 ) = 232 +fallxy ( 198, 8 ) = 232 +xyphendoy1 ( 198, 1 ) = 0 +xyphendoy1 ( 198, 2 ) = 0 +xyphendoy1 ( 198, 3 ) = 0 +xyphendoy1 ( 198, 4 ) = 0 +xyphendoy1 ( 198, 5 ) = 0 +xyphendoy1 ( 198, 6 ) = 0 +xyphendoy1 ( 198, 7 ) = 0 +xyphendoy1 ( 198, 8 ) = 0 + + ! xlat 42.7500000000000 +greenupxy ( 197, 1 ) = 133 +greenupxy ( 197, 2 ) = 118 +greenupxy ( 197, 3 ) = 106 +greenupxy ( 197, 4 ) = 114 +greenupxy ( 197, 5 ) = 114 +greenupxy ( 197, 6 ) = 114 +greenupxy ( 197, 7 ) = 115 +greenupxy ( 197, 8 ) = 115 +fallxy ( 197, 1 ) = 225 +fallxy ( 197, 2 ) = 228 +fallxy ( 197, 3 ) = 191 +fallxy ( 197, 4 ) = 207 +fallxy ( 197, 5 ) = 207 +fallxy ( 197, 6 ) = 207 +fallxy ( 197, 7 ) = 233 +fallxy ( 197, 8 ) = 233 +xyphendoy1 ( 197, 1 ) = 0 +xyphendoy1 ( 197, 2 ) = 0 +xyphendoy1 ( 197, 3 ) = 0 +xyphendoy1 ( 197, 4 ) = 0 +xyphendoy1 ( 197, 5 ) = 0 +xyphendoy1 ( 197, 6 ) = 0 +xyphendoy1 ( 197, 7 ) = 0 +xyphendoy1 ( 197, 8 ) = 0 + + ! xlat 42.2500000000000 +greenupxy ( 196, 1 ) = 133 +greenupxy ( 196, 2 ) = 117 +greenupxy ( 196, 3 ) = 104 +greenupxy ( 196, 4 ) = 114 +greenupxy ( 196, 5 ) = 114 +greenupxy ( 196, 6 ) = 114 +greenupxy ( 196, 7 ) = 114 +greenupxy ( 196, 8 ) = 114 +fallxy ( 196, 1 ) = 225 +fallxy ( 196, 2 ) = 228 +fallxy ( 196, 3 ) = 187 +fallxy ( 196, 4 ) = 207 +fallxy ( 196, 5 ) = 207 +fallxy ( 196, 6 ) = 207 +fallxy ( 196, 7 ) = 233 +fallxy ( 196, 8 ) = 233 +xyphendoy1 ( 196, 1 ) = 0 +xyphendoy1 ( 196, 2 ) = 0 +xyphendoy1 ( 196, 3 ) = 0 +xyphendoy1 ( 196, 4 ) = 0 +xyphendoy1 ( 196, 5 ) = 0 +xyphendoy1 ( 196, 6 ) = 0 +xyphendoy1 ( 196, 7 ) = 0 +xyphendoy1 ( 196, 8 ) = 0 + + ! xlat 41.7500000000000 +greenupxy ( 195, 1 ) = 132 +greenupxy ( 195, 2 ) = 116 +greenupxy ( 195, 3 ) = 102 +greenupxy ( 195, 4 ) = 113 +greenupxy ( 195, 5 ) = 113 +greenupxy ( 195, 6 ) = 113 +greenupxy ( 195, 7 ) = 112 +greenupxy ( 195, 8 ) = 112 +fallxy ( 195, 1 ) = 224 +fallxy ( 195, 2 ) = 227 +fallxy ( 195, 3 ) = 186 +fallxy ( 195, 4 ) = 208 +fallxy ( 195, 5 ) = 208 +fallxy ( 195, 6 ) = 208 +fallxy ( 195, 7 ) = 232 +fallxy ( 195, 8 ) = 232 +xyphendoy1 ( 195, 1 ) = 0 +xyphendoy1 ( 195, 2 ) = 0 +xyphendoy1 ( 195, 3 ) = 0 +xyphendoy1 ( 195, 4 ) = 0 +xyphendoy1 ( 195, 5 ) = 0 +xyphendoy1 ( 195, 6 ) = 0 +xyphendoy1 ( 195, 7 ) = 0 +xyphendoy1 ( 195, 8 ) = 0 + + ! xlat 41.2500000000000 +greenupxy ( 194, 1 ) = 132 +greenupxy ( 194, 2 ) = 115 +greenupxy ( 194, 3 ) = 101 +greenupxy ( 194, 4 ) = 113 +greenupxy ( 194, 5 ) = 113 +greenupxy ( 194, 6 ) = 113 +greenupxy ( 194, 7 ) = 111 +greenupxy ( 194, 8 ) = 111 +fallxy ( 194, 1 ) = 225 +fallxy ( 194, 2 ) = 227 +fallxy ( 194, 3 ) = 184 +fallxy ( 194, 4 ) = 209 +fallxy ( 194, 5 ) = 209 +fallxy ( 194, 6 ) = 209 +fallxy ( 194, 7 ) = 233 +fallxy ( 194, 8 ) = 233 +xyphendoy1 ( 194, 1 ) = 0 +xyphendoy1 ( 194, 2 ) = 0 +xyphendoy1 ( 194, 3 ) = 0 +xyphendoy1 ( 194, 4 ) = 0 +xyphendoy1 ( 194, 5 ) = 0 +xyphendoy1 ( 194, 6 ) = 0 +xyphendoy1 ( 194, 7 ) = 0 +xyphendoy1 ( 194, 8 ) = 0 + + ! xlat 40.7500000000000 +greenupxy ( 193, 1 ) = 131 +greenupxy ( 193, 2 ) = 113 +greenupxy ( 193, 3 ) = 100 +greenupxy ( 193, 4 ) = 112 +greenupxy ( 193, 5 ) = 112 +greenupxy ( 193, 6 ) = 112 +greenupxy ( 193, 7 ) = 109 +greenupxy ( 193, 8 ) = 109 +fallxy ( 193, 1 ) = 224 +fallxy ( 193, 2 ) = 226 +fallxy ( 193, 3 ) = 180 +fallxy ( 193, 4 ) = 210 +fallxy ( 193, 5 ) = 210 +fallxy ( 193, 6 ) = 210 +fallxy ( 193, 7 ) = 234 +fallxy ( 193, 8 ) = 234 +xyphendoy1 ( 193, 1 ) = 0 +xyphendoy1 ( 193, 2 ) = 0 +xyphendoy1 ( 193, 3 ) = 0 +xyphendoy1 ( 193, 4 ) = 0 +xyphendoy1 ( 193, 5 ) = 0 +xyphendoy1 ( 193, 6 ) = 0 +xyphendoy1 ( 193, 7 ) = 0 +xyphendoy1 ( 193, 8 ) = 0 + + ! xlat 40.2500000000000 +greenupxy ( 192, 1 ) = 131 +greenupxy ( 192, 2 ) = 112 +greenupxy ( 192, 3 ) = 98 +greenupxy ( 192, 4 ) = 111 +greenupxy ( 192, 5 ) = 111 +greenupxy ( 192, 6 ) = 111 +greenupxy ( 192, 7 ) = 108 +greenupxy ( 192, 8 ) = 108 +fallxy ( 192, 1 ) = 224 +fallxy ( 192, 2 ) = 226 +fallxy ( 192, 3 ) = 176 +fallxy ( 192, 4 ) = 210 +fallxy ( 192, 5 ) = 210 +fallxy ( 192, 6 ) = 210 +fallxy ( 192, 7 ) = 234 +fallxy ( 192, 8 ) = 234 +xyphendoy1 ( 192, 1 ) = 0 +xyphendoy1 ( 192, 2 ) = 0 +xyphendoy1 ( 192, 3 ) = 0 +xyphendoy1 ( 192, 4 ) = 0 +xyphendoy1 ( 192, 5 ) = 0 +xyphendoy1 ( 192, 6 ) = 0 +xyphendoy1 ( 192, 7 ) = 0 +xyphendoy1 ( 192, 8 ) = 0 + + ! xlat 39.7500000000000 +greenupxy ( 191, 1 ) = 131 +greenupxy ( 191, 2 ) = 111 +greenupxy ( 191, 3 ) = 95 +greenupxy ( 191, 4 ) = 110 +greenupxy ( 191, 5 ) = 110 +greenupxy ( 191, 6 ) = 110 +greenupxy ( 191, 7 ) = 107 +greenupxy ( 191, 8 ) = 107 +fallxy ( 191, 1 ) = 225 +fallxy ( 191, 2 ) = 226 +fallxy ( 191, 3 ) = 172 +fallxy ( 191, 4 ) = 211 +fallxy ( 191, 5 ) = 211 +fallxy ( 191, 6 ) = 211 +fallxy ( 191, 7 ) = 235 +fallxy ( 191, 8 ) = 235 +xyphendoy1 ( 191, 1 ) = 0 +xyphendoy1 ( 191, 2 ) = 0 +xyphendoy1 ( 191, 3 ) = 0 +xyphendoy1 ( 191, 4 ) = 0 +xyphendoy1 ( 191, 5 ) = 0 +xyphendoy1 ( 191, 6 ) = 0 +xyphendoy1 ( 191, 7 ) = 0 +xyphendoy1 ( 191, 8 ) = 0 + + ! xlat 39.2500000000000 +greenupxy ( 190, 1 ) = 131 +greenupxy ( 190, 2 ) = 109 +greenupxy ( 190, 3 ) = 92 +greenupxy ( 190, 4 ) = 110 +greenupxy ( 190, 5 ) = 110 +greenupxy ( 190, 6 ) = 110 +greenupxy ( 190, 7 ) = 105 +greenupxy ( 190, 8 ) = 105 +fallxy ( 190, 1 ) = 226 +fallxy ( 190, 2 ) = 225 +fallxy ( 190, 3 ) = 167 +fallxy ( 190, 4 ) = 213 +fallxy ( 190, 5 ) = 213 +fallxy ( 190, 6 ) = 213 +fallxy ( 190, 7 ) = 235 +fallxy ( 190, 8 ) = 235 +xyphendoy1 ( 190, 1 ) = 0 +xyphendoy1 ( 190, 2 ) = 0 +xyphendoy1 ( 190, 3 ) = 0 +xyphendoy1 ( 190, 4 ) = 0 +xyphendoy1 ( 190, 5 ) = 0 +xyphendoy1 ( 190, 6 ) = 0 +xyphendoy1 ( 190, 7 ) = 0 +xyphendoy1 ( 190, 8 ) = 0 + + ! xlat 38.7500000000000 +greenupxy ( 189, 1 ) = 131 +greenupxy ( 189, 2 ) = 107 +greenupxy ( 189, 3 ) = 89 +greenupxy ( 189, 4 ) = 110 +greenupxy ( 189, 5 ) = 110 +greenupxy ( 189, 6 ) = 110 +greenupxy ( 189, 7 ) = 103 +greenupxy ( 189, 8 ) = 103 +fallxy ( 189, 1 ) = 226 +fallxy ( 189, 2 ) = 225 +fallxy ( 189, 3 ) = 163 +fallxy ( 189, 4 ) = 215 +fallxy ( 189, 5 ) = 215 +fallxy ( 189, 6 ) = 215 +fallxy ( 189, 7 ) = 236 +fallxy ( 189, 8 ) = 236 +xyphendoy1 ( 189, 1 ) = 0 +xyphendoy1 ( 189, 2 ) = 0 +xyphendoy1 ( 189, 3 ) = 0 +xyphendoy1 ( 189, 4 ) = 0 +xyphendoy1 ( 189, 5 ) = 0 +xyphendoy1 ( 189, 6 ) = 0 +xyphendoy1 ( 189, 7 ) = 0 +xyphendoy1 ( 189, 8 ) = 0 + + ! xlat 38.2500000000000 +greenupxy ( 188, 1 ) = 131 +greenupxy ( 188, 2 ) = 106 +greenupxy ( 188, 3 ) = 86 +greenupxy ( 188, 4 ) = 111 +greenupxy ( 188, 5 ) = 111 +greenupxy ( 188, 6 ) = 111 +greenupxy ( 188, 7 ) = 101 +greenupxy ( 188, 8 ) = 101 +fallxy ( 188, 1 ) = 227 +fallxy ( 188, 2 ) = 224 +fallxy ( 188, 3 ) = 166 +fallxy ( 188, 4 ) = 216 +fallxy ( 188, 5 ) = 216 +fallxy ( 188, 6 ) = 216 +fallxy ( 188, 7 ) = 236 +fallxy ( 188, 8 ) = 236 +xyphendoy1 ( 188, 1 ) = 0 +xyphendoy1 ( 188, 2 ) = 0 +xyphendoy1 ( 188, 3 ) = 0 +xyphendoy1 ( 188, 4 ) = 0 +xyphendoy1 ( 188, 5 ) = 0 +xyphendoy1 ( 188, 6 ) = 0 +xyphendoy1 ( 188, 7 ) = 0 +xyphendoy1 ( 188, 8 ) = 0 + + ! xlat 37.7500000000000 +greenupxy ( 187, 1 ) = 130 +greenupxy ( 187, 2 ) = 104 +greenupxy ( 187, 3 ) = 88 +greenupxy ( 187, 4 ) = 111 +greenupxy ( 187, 5 ) = 111 +greenupxy ( 187, 6 ) = 111 +greenupxy ( 187, 7 ) = 99 +greenupxy ( 187, 8 ) = 99 +fallxy ( 187, 1 ) = 227 +fallxy ( 187, 2 ) = 223 +fallxy ( 187, 3 ) = 170 +fallxy ( 187, 4 ) = 217 +fallxy ( 187, 5 ) = 217 +fallxy ( 187, 6 ) = 217 +fallxy ( 187, 7 ) = 235 +fallxy ( 187, 8 ) = 235 +xyphendoy1 ( 187, 1 ) = 0 +xyphendoy1 ( 187, 2 ) = 0 +xyphendoy1 ( 187, 3 ) = 0 +xyphendoy1 ( 187, 4 ) = 0 +xyphendoy1 ( 187, 5 ) = 0 +xyphendoy1 ( 187, 6 ) = 0 +xyphendoy1 ( 187, 7 ) = 0 +xyphendoy1 ( 187, 8 ) = 0 + + ! xlat 37.2500000000000 +greenupxy ( 186, 1 ) = 130 +greenupxy ( 186, 2 ) = 102 +greenupxy ( 186, 3 ) = 89 +greenupxy ( 186, 4 ) = 111 +greenupxy ( 186, 5 ) = 111 +greenupxy ( 186, 6 ) = 111 +greenupxy ( 186, 7 ) = 96 +greenupxy ( 186, 8 ) = 96 +fallxy ( 186, 1 ) = 229 +fallxy ( 186, 2 ) = 222 +fallxy ( 186, 3 ) = 175 +fallxy ( 186, 4 ) = 219 +fallxy ( 186, 5 ) = 219 +fallxy ( 186, 6 ) = 219 +fallxy ( 186, 7 ) = 235 +fallxy ( 186, 8 ) = 235 +xyphendoy1 ( 186, 1 ) = 0 +xyphendoy1 ( 186, 2 ) = 0 +xyphendoy1 ( 186, 3 ) = 0 +xyphendoy1 ( 186, 4 ) = 0 +xyphendoy1 ( 186, 5 ) = 0 +xyphendoy1 ( 186, 6 ) = 0 +xyphendoy1 ( 186, 7 ) = 0 +xyphendoy1 ( 186, 8 ) = 0 + + ! xlat 36.7500000000000 +greenupxy ( 185, 1 ) = 130 +greenupxy ( 185, 2 ) = 100 +greenupxy ( 185, 3 ) = 93 +greenupxy ( 185, 4 ) = 111 +greenupxy ( 185, 5 ) = 111 +greenupxy ( 185, 6 ) = 111 +greenupxy ( 185, 7 ) = 94 +greenupxy ( 185, 8 ) = 94 +fallxy ( 185, 1 ) = 230 +fallxy ( 185, 2 ) = 221 +fallxy ( 185, 3 ) = 180 +fallxy ( 185, 4 ) = 220 +fallxy ( 185, 5 ) = 220 +fallxy ( 185, 6 ) = 220 +fallxy ( 185, 7 ) = 235 +fallxy ( 185, 8 ) = 235 +xyphendoy1 ( 185, 1 ) = 0 +xyphendoy1 ( 185, 2 ) = 0 +xyphendoy1 ( 185, 3 ) = 0 +xyphendoy1 ( 185, 4 ) = 0 +xyphendoy1 ( 185, 5 ) = 0 +xyphendoy1 ( 185, 6 ) = 0 +xyphendoy1 ( 185, 7 ) = 0 +xyphendoy1 ( 185, 8 ) = 0 + + ! xlat 36.2500000000000 +greenupxy ( 184, 1 ) = 129 +greenupxy ( 184, 2 ) = 98 +greenupxy ( 184, 3 ) = 97 +greenupxy ( 184, 4 ) = 110 +greenupxy ( 184, 5 ) = 110 +greenupxy ( 184, 6 ) = 110 +greenupxy ( 184, 7 ) = 92 +greenupxy ( 184, 8 ) = 92 +fallxy ( 184, 1 ) = 231 +fallxy ( 184, 2 ) = 221 +fallxy ( 184, 3 ) = 184 +fallxy ( 184, 4 ) = 222 +fallxy ( 184, 5 ) = 222 +fallxy ( 184, 6 ) = 222 +fallxy ( 184, 7 ) = 235 +fallxy ( 184, 8 ) = 235 +xyphendoy1 ( 184, 1 ) = 0 +xyphendoy1 ( 184, 2 ) = 0 +xyphendoy1 ( 184, 3 ) = 0 +xyphendoy1 ( 184, 4 ) = 0 +xyphendoy1 ( 184, 5 ) = 0 +xyphendoy1 ( 184, 6 ) = 0 +xyphendoy1 ( 184, 7 ) = 0 +xyphendoy1 ( 184, 8 ) = 0 + + ! xlat 35.7500000000000 +greenupxy ( 183, 1 ) = 128 +greenupxy ( 183, 2 ) = 96 +greenupxy ( 183, 3 ) = 100 +greenupxy ( 183, 4 ) = 110 +greenupxy ( 183, 5 ) = 110 +greenupxy ( 183, 6 ) = 110 +greenupxy ( 183, 7 ) = 91 +greenupxy ( 183, 8 ) = 91 +fallxy ( 183, 1 ) = 233 +fallxy ( 183, 2 ) = 220 +fallxy ( 183, 3 ) = 188 +fallxy ( 183, 4 ) = 224 +fallxy ( 183, 5 ) = 224 +fallxy ( 183, 6 ) = 224 +fallxy ( 183, 7 ) = 235 +fallxy ( 183, 8 ) = 235 +xyphendoy1 ( 183, 1 ) = 0 +xyphendoy1 ( 183, 2 ) = 0 +xyphendoy1 ( 183, 3 ) = 0 +xyphendoy1 ( 183, 4 ) = 0 +xyphendoy1 ( 183, 5 ) = 0 +xyphendoy1 ( 183, 6 ) = 0 +xyphendoy1 ( 183, 7 ) = 0 +xyphendoy1 ( 183, 8 ) = 0 + + ! xlat 35.2500000000000 +greenupxy ( 182, 1 ) = 127 +greenupxy ( 182, 2 ) = 94 +greenupxy ( 182, 3 ) = 104 +greenupxy ( 182, 4 ) = 110 +greenupxy ( 182, 5 ) = 110 +greenupxy ( 182, 6 ) = 110 +greenupxy ( 182, 7 ) = 90 +greenupxy ( 182, 8 ) = 90 +fallxy ( 182, 1 ) = 234 +fallxy ( 182, 2 ) = 220 +fallxy ( 182, 3 ) = 192 +fallxy ( 182, 4 ) = 226 +fallxy ( 182, 5 ) = 226 +fallxy ( 182, 6 ) = 226 +fallxy ( 182, 7 ) = 234 +fallxy ( 182, 8 ) = 234 +xyphendoy1 ( 182, 1 ) = 0 +xyphendoy1 ( 182, 2 ) = 0 +xyphendoy1 ( 182, 3 ) = 0 +xyphendoy1 ( 182, 4 ) = 0 +xyphendoy1 ( 182, 5 ) = 0 +xyphendoy1 ( 182, 6 ) = 0 +xyphendoy1 ( 182, 7 ) = 0 +xyphendoy1 ( 182, 8 ) = 0 + + ! xlat 34.7500000000000 +greenupxy ( 181, 1 ) = 126 +greenupxy ( 181, 2 ) = 93 +greenupxy ( 181, 3 ) = 107 +greenupxy ( 181, 4 ) = 110 +greenupxy ( 181, 5 ) = 110 +greenupxy ( 181, 6 ) = 110 +greenupxy ( 181, 7 ) = 88 +greenupxy ( 181, 8 ) = 88 +fallxy ( 181, 1 ) = 235 +fallxy ( 181, 2 ) = 220 +fallxy ( 181, 3 ) = 197 +fallxy ( 181, 4 ) = 228 +fallxy ( 181, 5 ) = 228 +fallxy ( 181, 6 ) = 228 +fallxy ( 181, 7 ) = 233 +fallxy ( 181, 8 ) = 233 +xyphendoy1 ( 181, 1 ) = 0 +xyphendoy1 ( 181, 2 ) = 0 +xyphendoy1 ( 181, 3 ) = 0 +xyphendoy1 ( 181, 4 ) = 0 +xyphendoy1 ( 181, 5 ) = 0 +xyphendoy1 ( 181, 6 ) = 0 +xyphendoy1 ( 181, 7 ) = 0 +xyphendoy1 ( 181, 8 ) = 0 + + ! xlat 34.2500000000000 +greenupxy ( 180, 1 ) = 125 +greenupxy ( 180, 2 ) = 91 +greenupxy ( 180, 3 ) = 109 +greenupxy ( 180, 4 ) = 111 +greenupxy ( 180, 5 ) = 111 +greenupxy ( 180, 6 ) = 111 +greenupxy ( 180, 7 ) = 87 +greenupxy ( 180, 8 ) = 87 +fallxy ( 180, 1 ) = 236 +fallxy ( 180, 2 ) = 221 +fallxy ( 180, 3 ) = 201 +fallxy ( 180, 4 ) = 231 +fallxy ( 180, 5 ) = 231 +fallxy ( 180, 6 ) = 231 +fallxy ( 180, 7 ) = 233 +fallxy ( 180, 8 ) = 233 +xyphendoy1 ( 180, 1 ) = 0 +xyphendoy1 ( 180, 2 ) = 0 +xyphendoy1 ( 180, 3 ) = 0 +xyphendoy1 ( 180, 4 ) = 0 +xyphendoy1 ( 180, 5 ) = 0 +xyphendoy1 ( 180, 6 ) = 0 +xyphendoy1 ( 180, 7 ) = 0 +xyphendoy1 ( 180, 8 ) = 0 + + ! xlat 33.7500000000000 +greenupxy ( 179, 1 ) = 123 +greenupxy ( 179, 2 ) = 90 +greenupxy ( 179, 3 ) = 113 +greenupxy ( 179, 4 ) = 114 +greenupxy ( 179, 5 ) = 114 +greenupxy ( 179, 6 ) = 114 +greenupxy ( 179, 7 ) = 86 +greenupxy ( 179, 8 ) = 86 +fallxy ( 179, 1 ) = 237 +fallxy ( 179, 2 ) = 222 +fallxy ( 179, 3 ) = 208 +fallxy ( 179, 4 ) = 233 +fallxy ( 179, 5 ) = 233 +fallxy ( 179, 6 ) = 233 +fallxy ( 179, 7 ) = 233 +fallxy ( 179, 8 ) = 233 +xyphendoy1 ( 179, 1 ) = 0 +xyphendoy1 ( 179, 2 ) = 0 +xyphendoy1 ( 179, 3 ) = 0 +xyphendoy1 ( 179, 4 ) = 0 +xyphendoy1 ( 179, 5 ) = 0 +xyphendoy1 ( 179, 6 ) = 0 +xyphendoy1 ( 179, 7 ) = 0 +xyphendoy1 ( 179, 8 ) = 0 + + ! xlat 33.2500000000000 +greenupxy ( 178, 1 ) = 120 +greenupxy ( 178, 2 ) = 89 +greenupxy ( 178, 3 ) = 118 +greenupxy ( 178, 4 ) = 115 +greenupxy ( 178, 5 ) = 115 +greenupxy ( 178, 6 ) = 115 +greenupxy ( 178, 7 ) = 85 +greenupxy ( 178, 8 ) = 85 +fallxy ( 178, 1 ) = 238 +fallxy ( 178, 2 ) = 223 +fallxy ( 178, 3 ) = 213 +fallxy ( 178, 4 ) = 235 +fallxy ( 178, 5 ) = 235 +fallxy ( 178, 6 ) = 235 +fallxy ( 178, 7 ) = 236 +fallxy ( 178, 8 ) = 236 +xyphendoy1 ( 178, 1 ) = 0 +xyphendoy1 ( 178, 2 ) = 0 +xyphendoy1 ( 178, 3 ) = 0 +xyphendoy1 ( 178, 4 ) = 0 +xyphendoy1 ( 178, 5 ) = 0 +xyphendoy1 ( 178, 6 ) = 0 +xyphendoy1 ( 178, 7 ) = 0 +xyphendoy1 ( 178, 8 ) = 0 + + ! xlat 32.7500000000000 +greenupxy ( 177, 1 ) = 118 +greenupxy ( 177, 2 ) = 88 +greenupxy ( 177, 3 ) = 122 +greenupxy ( 177, 4 ) = 117 +greenupxy ( 177, 5 ) = 117 +greenupxy ( 177, 6 ) = 117 +greenupxy ( 177, 7 ) = 84 +greenupxy ( 177, 8 ) = 84 +fallxy ( 177, 1 ) = 238 +fallxy ( 177, 2 ) = 225 +fallxy ( 177, 3 ) = 218 +fallxy ( 177, 4 ) = 238 +fallxy ( 177, 5 ) = 238 +fallxy ( 177, 6 ) = 238 +fallxy ( 177, 7 ) = 235 +fallxy ( 177, 8 ) = 235 +xyphendoy1 ( 177, 1 ) = 0 +xyphendoy1 ( 177, 2 ) = 0 +xyphendoy1 ( 177, 3 ) = 0 +xyphendoy1 ( 177, 4 ) = 0 +xyphendoy1 ( 177, 5 ) = 0 +xyphendoy1 ( 177, 6 ) = 0 +xyphendoy1 ( 177, 7 ) = 0 +xyphendoy1 ( 177, 8 ) = 0 + + ! xlat 32.2500000000000 +greenupxy ( 176, 1 ) = 114 +greenupxy ( 176, 2 ) = 88 +greenupxy ( 176, 3 ) = 126 +greenupxy ( 176, 4 ) = 120 +greenupxy ( 176, 5 ) = 120 +greenupxy ( 176, 6 ) = 120 +greenupxy ( 176, 7 ) = 85 +greenupxy ( 176, 8 ) = 85 +fallxy ( 176, 1 ) = 235 +fallxy ( 176, 2 ) = 226 +fallxy ( 176, 3 ) = 227 +fallxy ( 176, 4 ) = 241 +fallxy ( 176, 5 ) = 241 +fallxy ( 176, 6 ) = 241 +fallxy ( 176, 7 ) = 236 +fallxy ( 176, 8 ) = 236 +xyphendoy1 ( 176, 1 ) = 0 +xyphendoy1 ( 176, 2 ) = 0 +xyphendoy1 ( 176, 3 ) = 0 +xyphendoy1 ( 176, 4 ) = 0 +xyphendoy1 ( 176, 5 ) = 0 +xyphendoy1 ( 176, 6 ) = 0 +xyphendoy1 ( 176, 7 ) = 0 +xyphendoy1 ( 176, 8 ) = 0 + + ! xlat 31.7500000000000 +greenupxy ( 175, 1 ) = 113 +greenupxy ( 175, 2 ) = 88 +greenupxy ( 175, 3 ) = 133 +greenupxy ( 175, 4 ) = 122 +greenupxy ( 175, 5 ) = 122 +greenupxy ( 175, 6 ) = 122 +greenupxy ( 175, 7 ) = 85 +greenupxy ( 175, 8 ) = 85 +fallxy ( 175, 1 ) = 236 +fallxy ( 175, 2 ) = 228 +fallxy ( 175, 3 ) = 236 +fallxy ( 175, 4 ) = 244 +fallxy ( 175, 5 ) = 244 +fallxy ( 175, 6 ) = 244 +fallxy ( 175, 7 ) = 236 +fallxy ( 175, 8 ) = 236 +xyphendoy1 ( 175, 1 ) = 0 +xyphendoy1 ( 175, 2 ) = 0 +xyphendoy1 ( 175, 3 ) = 0 +xyphendoy1 ( 175, 4 ) = 0 +xyphendoy1 ( 175, 5 ) = 0 +xyphendoy1 ( 175, 6 ) = 0 +xyphendoy1 ( 175, 7 ) = 0 +xyphendoy1 ( 175, 8 ) = 0 + + ! xlat 31.2500000000000 +greenupxy ( 174, 1 ) = 110 +greenupxy ( 174, 2 ) = 89 +greenupxy ( 174, 3 ) = 140 +greenupxy ( 174, 4 ) = 124 +greenupxy ( 174, 5 ) = 124 +greenupxy ( 174, 6 ) = 124 +greenupxy ( 174, 7 ) = 85 +greenupxy ( 174, 8 ) = 85 +fallxy ( 174, 1 ) = 236 +fallxy ( 174, 2 ) = 230 +fallxy ( 174, 3 ) = 245 +fallxy ( 174, 4 ) = 247 +fallxy ( 174, 5 ) = 247 +fallxy ( 174, 6 ) = 247 +fallxy ( 174, 7 ) = 236 +fallxy ( 174, 8 ) = 236 +xyphendoy1 ( 174, 1 ) = 0 +xyphendoy1 ( 174, 2 ) = 0 +xyphendoy1 ( 174, 3 ) = 0 +xyphendoy1 ( 174, 4 ) = 0 +xyphendoy1 ( 174, 5 ) = 0 +xyphendoy1 ( 174, 6 ) = 0 +xyphendoy1 ( 174, 7 ) = 0 +xyphendoy1 ( 174, 8 ) = 0 + + ! xlat 30.7500000000000 +greenupxy ( 173, 1 ) = 108 +greenupxy ( 173, 2 ) = 90 +greenupxy ( 173, 3 ) = 148 +greenupxy ( 173, 4 ) = 126 +greenupxy ( 173, 5 ) = 126 +greenupxy ( 173, 6 ) = 126 +greenupxy ( 173, 7 ) = 86 +greenupxy ( 173, 8 ) = 86 +fallxy ( 173, 1 ) = 236 +fallxy ( 173, 2 ) = 232 +fallxy ( 173, 3 ) = 255 +fallxy ( 173, 4 ) = 251 +fallxy ( 173, 5 ) = 251 +fallxy ( 173, 6 ) = 251 +fallxy ( 173, 7 ) = 237 +fallxy ( 173, 8 ) = 237 +xyphendoy1 ( 173, 1 ) = 0 +xyphendoy1 ( 173, 2 ) = 0 +xyphendoy1 ( 173, 3 ) = 0 +xyphendoy1 ( 173, 4 ) = 0 +xyphendoy1 ( 173, 5 ) = 0 +xyphendoy1 ( 173, 6 ) = 0 +xyphendoy1 ( 173, 7 ) = 0 +xyphendoy1 ( 173, 8 ) = 0 + + ! xlat 30.2500000000000 +greenupxy ( 172, 1 ) = 107 +greenupxy ( 172, 2 ) = 93 +greenupxy ( 172, 3 ) = 156 +greenupxy ( 172, 4 ) = 128 +greenupxy ( 172, 5 ) = 128 +greenupxy ( 172, 6 ) = 128 +greenupxy ( 172, 7 ) = 88 +greenupxy ( 172, 8 ) = 88 +fallxy ( 172, 1 ) = 237 +fallxy ( 172, 2 ) = 234 +fallxy ( 172, 3 ) = 265 +fallxy ( 172, 4 ) = 253 +fallxy ( 172, 5 ) = 253 +fallxy ( 172, 6 ) = 253 +fallxy ( 172, 7 ) = 237 +fallxy ( 172, 8 ) = 237 +xyphendoy1 ( 172, 1 ) = 0 +xyphendoy1 ( 172, 2 ) = 0 +xyphendoy1 ( 172, 3 ) = 0 +xyphendoy1 ( 172, 4 ) = 0 +xyphendoy1 ( 172, 5 ) = 0 +xyphendoy1 ( 172, 6 ) = 0 +xyphendoy1 ( 172, 7 ) = 0 +xyphendoy1 ( 172, 8 ) = 0 + + ! xlat 29.7500000000000 +greenupxy ( 171, 1 ) = 108 +greenupxy ( 171, 2 ) = 95 +greenupxy ( 171, 3 ) = 163 +greenupxy ( 171, 4 ) = 129 +greenupxy ( 171, 5 ) = 129 +greenupxy ( 171, 6 ) = 129 +greenupxy ( 171, 7 ) = 90 +greenupxy ( 171, 8 ) = 90 +fallxy ( 171, 1 ) = 238 +fallxy ( 171, 2 ) = 236 +fallxy ( 171, 3 ) = 268 +fallxy ( 171, 4 ) = 256 +fallxy ( 171, 5 ) = 256 +fallxy ( 171, 6 ) = 256 +fallxy ( 171, 7 ) = 238 +fallxy ( 171, 8 ) = 238 +xyphendoy1 ( 171, 1 ) = 0 +xyphendoy1 ( 171, 2 ) = 0 +xyphendoy1 ( 171, 3 ) = 0 +xyphendoy1 ( 171, 4 ) = 0 +xyphendoy1 ( 171, 5 ) = 0 +xyphendoy1 ( 171, 6 ) = 0 +xyphendoy1 ( 171, 7 ) = 0 +xyphendoy1 ( 171, 8 ) = 0 + + ! xlat 29.2500000000000 +greenupxy ( 170, 1 ) = 110 +greenupxy ( 170, 2 ) = 100 +greenupxy ( 170, 3 ) = 167 +greenupxy ( 170, 4 ) = 132 +greenupxy ( 170, 5 ) = 132 +greenupxy ( 170, 6 ) = 132 +greenupxy ( 170, 7 ) = 93 +greenupxy ( 170, 8 ) = 93 +fallxy ( 170, 1 ) = 238 +fallxy ( 170, 2 ) = 238 +fallxy ( 170, 3 ) = 270 +fallxy ( 170, 4 ) = 259 +fallxy ( 170, 5 ) = 259 +fallxy ( 170, 6 ) = 259 +fallxy ( 170, 7 ) = 241 +fallxy ( 170, 8 ) = 241 +xyphendoy1 ( 170, 1 ) = 0 +xyphendoy1 ( 170, 2 ) = 0 +xyphendoy1 ( 170, 3 ) = 0 +xyphendoy1 ( 170, 4 ) = 0 +xyphendoy1 ( 170, 5 ) = 0 +xyphendoy1 ( 170, 6 ) = 0 +xyphendoy1 ( 170, 7 ) = 0 +xyphendoy1 ( 170, 8 ) = 0 + + ! xlat 28.7500000000000 +greenupxy ( 169, 1 ) = 109 +greenupxy ( 169, 2 ) = 105 +greenupxy ( 169, 3 ) = 170 +greenupxy ( 169, 4 ) = 134 +greenupxy ( 169, 5 ) = 134 +greenupxy ( 169, 6 ) = 134 +greenupxy ( 169, 7 ) = 97 +greenupxy ( 169, 8 ) = 97 +fallxy ( 169, 1 ) = 238 +fallxy ( 169, 2 ) = 241 +fallxy ( 169, 3 ) = 272 +fallxy ( 169, 4 ) = 262 +fallxy ( 169, 5 ) = 262 +fallxy ( 169, 6 ) = 262 +fallxy ( 169, 7 ) = 244 +fallxy ( 169, 8 ) = 244 +xyphendoy1 ( 169, 1 ) = 0 +xyphendoy1 ( 169, 2 ) = 0 +xyphendoy1 ( 169, 3 ) = 0 +xyphendoy1 ( 169, 4 ) = 0 +xyphendoy1 ( 169, 5 ) = 0 +xyphendoy1 ( 169, 6 ) = 0 +xyphendoy1 ( 169, 7 ) = 0 +xyphendoy1 ( 169, 8 ) = 0 + + ! xlat 28.2500000000000 +greenupxy ( 168, 1 ) = 112 +greenupxy ( 168, 2 ) = 109 +greenupxy ( 168, 3 ) = 170 +greenupxy ( 168, 4 ) = 136 +greenupxy ( 168, 5 ) = 136 +greenupxy ( 168, 6 ) = 136 +greenupxy ( 168, 7 ) = 99 +greenupxy ( 168, 8 ) = 99 +fallxy ( 168, 1 ) = 239 +fallxy ( 168, 2 ) = 243 +fallxy ( 168, 3 ) = 273 +fallxy ( 168, 4 ) = 264 +fallxy ( 168, 5 ) = 264 +fallxy ( 168, 6 ) = 264 +fallxy ( 168, 7 ) = 247 +fallxy ( 168, 8 ) = 247 +xyphendoy1 ( 168, 1 ) = 0 +xyphendoy1 ( 168, 2 ) = 0 +xyphendoy1 ( 168, 3 ) = 0 +xyphendoy1 ( 168, 4 ) = 0 +xyphendoy1 ( 168, 5 ) = 0 +xyphendoy1 ( 168, 6 ) = 0 +xyphendoy1 ( 168, 7 ) = 0 +xyphendoy1 ( 168, 8 ) = 0 + + ! xlat 27.7500000000000 +greenupxy ( 167, 1 ) = 111 +greenupxy ( 167, 2 ) = 114 +greenupxy ( 167, 3 ) = 170 +greenupxy ( 167, 4 ) = 138 +greenupxy ( 167, 5 ) = 138 +greenupxy ( 167, 6 ) = 138 +greenupxy ( 167, 7 ) = 101 +greenupxy ( 167, 8 ) = 101 +fallxy ( 167, 1 ) = 239 +fallxy ( 167, 2 ) = 246 +fallxy ( 167, 3 ) = 275 +fallxy ( 167, 4 ) = 266 +fallxy ( 167, 5 ) = 266 +fallxy ( 167, 6 ) = 266 +fallxy ( 167, 7 ) = 251 +fallxy ( 167, 8 ) = 251 +xyphendoy1 ( 167, 1 ) = 0 +xyphendoy1 ( 167, 2 ) = 0 +xyphendoy1 ( 167, 3 ) = 0 +xyphendoy1 ( 167, 4 ) = 0 +xyphendoy1 ( 167, 5 ) = 0 +xyphendoy1 ( 167, 6 ) = 0 +xyphendoy1 ( 167, 7 ) = 0 +xyphendoy1 ( 167, 8 ) = 0 + + ! xlat 27.2500000000000 +greenupxy ( 166, 1 ) = 116 +greenupxy ( 166, 2 ) = 119 +greenupxy ( 166, 3 ) = 169 +greenupxy ( 166, 4 ) = 140 +greenupxy ( 166, 5 ) = 140 +greenupxy ( 166, 6 ) = 140 +greenupxy ( 166, 7 ) = 104 +greenupxy ( 166, 8 ) = 104 +fallxy ( 166, 1 ) = 242 +fallxy ( 166, 2 ) = 249 +fallxy ( 166, 3 ) = 276 +fallxy ( 166, 4 ) = 268 +fallxy ( 166, 5 ) = 268 +fallxy ( 166, 6 ) = 268 +fallxy ( 166, 7 ) = 254 +fallxy ( 166, 8 ) = 254 +xyphendoy1 ( 166, 1 ) = 0 +xyphendoy1 ( 166, 2 ) = 0 +xyphendoy1 ( 166, 3 ) = 0 +xyphendoy1 ( 166, 4 ) = 0 +xyphendoy1 ( 166, 5 ) = 0 +xyphendoy1 ( 166, 6 ) = 0 +xyphendoy1 ( 166, 7 ) = 0 +xyphendoy1 ( 166, 8 ) = 0 + + ! xlat 26.7500000000000 +greenupxy ( 165, 1 ) = 115 +greenupxy ( 165, 2 ) = 123 +greenupxy ( 165, 3 ) = 169 +greenupxy ( 165, 4 ) = 141 +greenupxy ( 165, 5 ) = 141 +greenupxy ( 165, 6 ) = 141 +greenupxy ( 165, 7 ) = 106 +greenupxy ( 165, 8 ) = 106 +fallxy ( 165, 1 ) = 242 +fallxy ( 165, 2 ) = 251 +fallxy ( 165, 3 ) = 278 +fallxy ( 165, 4 ) = 270 +fallxy ( 165, 5 ) = 270 +fallxy ( 165, 6 ) = 270 +fallxy ( 165, 7 ) = 260 +fallxy ( 165, 8 ) = 260 +xyphendoy1 ( 165, 1 ) = 0 +xyphendoy1 ( 165, 2 ) = 0 +xyphendoy1 ( 165, 3 ) = 0 +xyphendoy1 ( 165, 4 ) = 0 +xyphendoy1 ( 165, 5 ) = 0 +xyphendoy1 ( 165, 6 ) = 0 +xyphendoy1 ( 165, 7 ) = 0 +xyphendoy1 ( 165, 8 ) = 0 + + ! xlat 26.2500000000000 +greenupxy ( 164, 1 ) = 115 +greenupxy ( 164, 2 ) = 127 +greenupxy ( 164, 3 ) = 168 +greenupxy ( 164, 4 ) = 144 +greenupxy ( 164, 5 ) = 144 +greenupxy ( 164, 6 ) = 144 +greenupxy ( 164, 7 ) = 109 +greenupxy ( 164, 8 ) = 109 +fallxy ( 164, 1 ) = 245 +fallxy ( 164, 2 ) = 254 +fallxy ( 164, 3 ) = 279 +fallxy ( 164, 4 ) = 272 +fallxy ( 164, 5 ) = 272 +fallxy ( 164, 6 ) = 272 +fallxy ( 164, 7 ) = 262 +fallxy ( 164, 8 ) = 262 +xyphendoy1 ( 164, 1 ) = 0 +xyphendoy1 ( 164, 2 ) = 0 +xyphendoy1 ( 164, 3 ) = 0 +xyphendoy1 ( 164, 4 ) = 0 +xyphendoy1 ( 164, 5 ) = 0 +xyphendoy1 ( 164, 6 ) = 0 +xyphendoy1 ( 164, 7 ) = 0 +xyphendoy1 ( 164, 8 ) = 0 + + ! xlat 25.7500000000000 +greenupxy ( 163, 1 ) = 115 +greenupxy ( 163, 2 ) = 131 +greenupxy ( 163, 3 ) = 169 +greenupxy ( 163, 4 ) = 145 +greenupxy ( 163, 5 ) = 145 +greenupxy ( 163, 6 ) = 145 +greenupxy ( 163, 7 ) = 112 +greenupxy ( 163, 8 ) = 112 +fallxy ( 163, 1 ) = 245 +fallxy ( 163, 2 ) = 256 +fallxy ( 163, 3 ) = 279 +fallxy ( 163, 4 ) = 273 +fallxy ( 163, 5 ) = 273 +fallxy ( 163, 6 ) = 273 +fallxy ( 163, 7 ) = 263 +fallxy ( 163, 8 ) = 263 +xyphendoy1 ( 163, 1 ) = 0 +xyphendoy1 ( 163, 2 ) = 0 +xyphendoy1 ( 163, 3 ) = 0 +xyphendoy1 ( 163, 4 ) = 0 +xyphendoy1 ( 163, 5 ) = 0 +xyphendoy1 ( 163, 6 ) = 0 +xyphendoy1 ( 163, 7 ) = 0 +xyphendoy1 ( 163, 8 ) = 0 + + ! xlat 25.2500000000000 +greenupxy ( 162, 1 ) = 116 +greenupxy ( 162, 2 ) = 134 +greenupxy ( 162, 3 ) = 168 +greenupxy ( 162, 4 ) = 145 +greenupxy ( 162, 5 ) = 145 +greenupxy ( 162, 6 ) = 145 +greenupxy ( 162, 7 ) = 115 +greenupxy ( 162, 8 ) = 115 +fallxy ( 162, 1 ) = 245 +fallxy ( 162, 2 ) = 257 +fallxy ( 162, 3 ) = 279 +fallxy ( 162, 4 ) = 273 +fallxy ( 162, 5 ) = 273 +fallxy ( 162, 6 ) = 273 +fallxy ( 162, 7 ) = 265 +fallxy ( 162, 8 ) = 265 +xyphendoy1 ( 162, 1 ) = 0 +xyphendoy1 ( 162, 2 ) = 0 +xyphendoy1 ( 162, 3 ) = 0 +xyphendoy1 ( 162, 4 ) = 0 +xyphendoy1 ( 162, 5 ) = 0 +xyphendoy1 ( 162, 6 ) = 0 +xyphendoy1 ( 162, 7 ) = 0 +xyphendoy1 ( 162, 8 ) = 0 + + ! xlat 24.7500000000000 +greenupxy ( 161, 1 ) = 118 +greenupxy ( 161, 2 ) = 137 +greenupxy ( 161, 3 ) = 167 +greenupxy ( 161, 4 ) = 146 +greenupxy ( 161, 5 ) = 146 +greenupxy ( 161, 6 ) = 146 +greenupxy ( 161, 7 ) = 118 +greenupxy ( 161, 8 ) = 118 +fallxy ( 161, 1 ) = 240 +fallxy ( 161, 2 ) = 258 +fallxy ( 161, 3 ) = 279 +fallxy ( 161, 4 ) = 274 +fallxy ( 161, 5 ) = 274 +fallxy ( 161, 6 ) = 274 +fallxy ( 161, 7 ) = 267 +fallxy ( 161, 8 ) = 267 +xyphendoy1 ( 161, 1 ) = 0 +xyphendoy1 ( 161, 2 ) = 0 +xyphendoy1 ( 161, 3 ) = 0 +xyphendoy1 ( 161, 4 ) = 0 +xyphendoy1 ( 161, 5 ) = 0 +xyphendoy1 ( 161, 6 ) = 0 +xyphendoy1 ( 161, 7 ) = 0 +xyphendoy1 ( 161, 8 ) = 0 + + ! xlat 24.2500000000000 +greenupxy ( 160, 1 ) = 121 +greenupxy ( 160, 2 ) = 140 +greenupxy ( 160, 3 ) = 165 +greenupxy ( 160, 4 ) = 146 +greenupxy ( 160, 5 ) = 146 +greenupxy ( 160, 6 ) = 146 +greenupxy ( 160, 7 ) = 120 +greenupxy ( 160, 8 ) = 120 +fallxy ( 160, 1 ) = 241 +fallxy ( 160, 2 ) = 259 +fallxy ( 160, 3 ) = 279 +fallxy ( 160, 4 ) = 274 +fallxy ( 160, 5 ) = 274 +fallxy ( 160, 6 ) = 274 +fallxy ( 160, 7 ) = 269 +fallxy ( 160, 8 ) = 269 +xyphendoy1 ( 160, 1 ) = 0 +xyphendoy1 ( 160, 2 ) = 0 +xyphendoy1 ( 160, 3 ) = 0 +xyphendoy1 ( 160, 4 ) = 0 +xyphendoy1 ( 160, 5 ) = 0 +xyphendoy1 ( 160, 6 ) = 0 +xyphendoy1 ( 160, 7 ) = 0 +xyphendoy1 ( 160, 8 ) = 0 + + ! xlat 23.7500000000000 +greenupxy ( 159, 1 ) = 127 +greenupxy ( 159, 2 ) = 142 +greenupxy ( 159, 3 ) = 164 +greenupxy ( 159, 4 ) = 146 +greenupxy ( 159, 5 ) = 146 +greenupxy ( 159, 6 ) = 146 +greenupxy ( 159, 7 ) = 121 +greenupxy ( 159, 8 ) = 121 +fallxy ( 159, 1 ) = 249 +fallxy ( 159, 2 ) = 260 +fallxy ( 159, 3 ) = 279 +fallxy ( 159, 4 ) = 274 +fallxy ( 159, 5 ) = 274 +fallxy ( 159, 6 ) = 274 +fallxy ( 159, 7 ) = 271 +fallxy ( 159, 8 ) = 271 +xyphendoy1 ( 159, 1 ) = 0 +xyphendoy1 ( 159, 2 ) = 0 +xyphendoy1 ( 159, 3 ) = 0 +xyphendoy1 ( 159, 4 ) = 0 +xyphendoy1 ( 159, 5 ) = 0 +xyphendoy1 ( 159, 6 ) = 0 +xyphendoy1 ( 159, 7 ) = 0 +xyphendoy1 ( 159, 8 ) = 0 + + ! xlat 23.2500000000000 +greenupxy ( 158, 1 ) = 131 +greenupxy ( 158, 2 ) = 145 +greenupxy ( 158, 3 ) = 162 +greenupxy ( 158, 4 ) = 145 +greenupxy ( 158, 5 ) = 145 +greenupxy ( 158, 6 ) = 145 +greenupxy ( 158, 7 ) = 122 +greenupxy ( 158, 8 ) = 122 +fallxy ( 158, 1 ) = 251 +fallxy ( 158, 2 ) = 262 +fallxy ( 158, 3 ) = 278 +fallxy ( 158, 4 ) = 274 +fallxy ( 158, 5 ) = 274 +fallxy ( 158, 6 ) = 274 +fallxy ( 158, 7 ) = 273 +fallxy ( 158, 8 ) = 273 +xyphendoy1 ( 158, 1 ) = 0 +xyphendoy1 ( 158, 2 ) = 0 +xyphendoy1 ( 158, 3 ) = 0 +xyphendoy1 ( 158, 4 ) = 0 +xyphendoy1 ( 158, 5 ) = 0 +xyphendoy1 ( 158, 6 ) = 0 +xyphendoy1 ( 158, 7 ) = 0 +xyphendoy1 ( 158, 8 ) = 0 + + ! xlat 22.7500000000000 +greenupxy ( 157, 1 ) = 134 +greenupxy ( 157, 2 ) = 147 +greenupxy ( 157, 3 ) = 159 +greenupxy ( 157, 4 ) = 144 +greenupxy ( 157, 5 ) = 144 +greenupxy ( 157, 6 ) = 144 +greenupxy ( 157, 7 ) = 121 +greenupxy ( 157, 8 ) = 121 +fallxy ( 157, 1 ) = 254 +fallxy ( 157, 2 ) = 262 +fallxy ( 157, 3 ) = 278 +fallxy ( 157, 4 ) = 274 +fallxy ( 157, 5 ) = 274 +fallxy ( 157, 6 ) = 274 +fallxy ( 157, 7 ) = 276 +fallxy ( 157, 8 ) = 276 +xyphendoy1 ( 157, 1 ) = 0 +xyphendoy1 ( 157, 2 ) = 0 +xyphendoy1 ( 157, 3 ) = 0 +xyphendoy1 ( 157, 4 ) = 0 +xyphendoy1 ( 157, 5 ) = 0 +xyphendoy1 ( 157, 6 ) = 0 +xyphendoy1 ( 157, 7 ) = 0 +xyphendoy1 ( 157, 8 ) = 0 + + ! xlat 22.2500000000000 +greenupxy ( 156, 1 ) = 137 +greenupxy ( 156, 2 ) = 148 +greenupxy ( 156, 3 ) = 157 +greenupxy ( 156, 4 ) = 144 +greenupxy ( 156, 5 ) = 144 +greenupxy ( 156, 6 ) = 144 +greenupxy ( 156, 7 ) = 122 +greenupxy ( 156, 8 ) = 122 +fallxy ( 156, 1 ) = 256 +fallxy ( 156, 2 ) = 263 +fallxy ( 156, 3 ) = 278 +fallxy ( 156, 4 ) = 274 +fallxy ( 156, 5 ) = 274 +fallxy ( 156, 6 ) = 274 +fallxy ( 156, 7 ) = 279 +fallxy ( 156, 8 ) = 279 +xyphendoy1 ( 156, 1 ) = 0 +xyphendoy1 ( 156, 2 ) = 0 +xyphendoy1 ( 156, 3 ) = 0 +xyphendoy1 ( 156, 4 ) = 0 +xyphendoy1 ( 156, 5 ) = 0 +xyphendoy1 ( 156, 6 ) = 0 +xyphendoy1 ( 156, 7 ) = 0 +xyphendoy1 ( 156, 8 ) = 0 + + ! xlat 21.7500000000000 +greenupxy ( 155, 1 ) = 140 +greenupxy ( 155, 2 ) = 148 +greenupxy ( 155, 3 ) = 159 +greenupxy ( 155, 4 ) = 143 +greenupxy ( 155, 5 ) = 143 +greenupxy ( 155, 6 ) = 143 +greenupxy ( 155, 7 ) = 123 +greenupxy ( 155, 8 ) = 123 +fallxy ( 155, 1 ) = 256 +fallxy ( 155, 2 ) = 264 +fallxy ( 155, 3 ) = 277 +fallxy ( 155, 4 ) = 274 +fallxy ( 155, 5 ) = 274 +fallxy ( 155, 6 ) = 274 +fallxy ( 155, 7 ) = 281 +fallxy ( 155, 8 ) = 281 +xyphendoy1 ( 155, 1 ) = 0 +xyphendoy1 ( 155, 2 ) = 0 +xyphendoy1 ( 155, 3 ) = 0 +xyphendoy1 ( 155, 4 ) = 0 +xyphendoy1 ( 155, 5 ) = 0 +xyphendoy1 ( 155, 6 ) = 0 +xyphendoy1 ( 155, 7 ) = 0 +xyphendoy1 ( 155, 8 ) = 0 + + ! xlat 21.2500000000000 +greenupxy ( 154, 1 ) = 141 +greenupxy ( 154, 2 ) = 148 +greenupxy ( 154, 3 ) = 160 +greenupxy ( 154, 4 ) = 142 +greenupxy ( 154, 5 ) = 142 +greenupxy ( 154, 6 ) = 142 +greenupxy ( 154, 7 ) = 124 +greenupxy ( 154, 8 ) = 124 +fallxy ( 154, 1 ) = 257 +fallxy ( 154, 2 ) = 265 +fallxy ( 154, 3 ) = 277 +fallxy ( 154, 4 ) = 274 +fallxy ( 154, 5 ) = 274 +fallxy ( 154, 6 ) = 274 +fallxy ( 154, 7 ) = 283 +fallxy ( 154, 8 ) = 283 +xyphendoy1 ( 154, 1 ) = 0 +xyphendoy1 ( 154, 2 ) = 0 +xyphendoy1 ( 154, 3 ) = 0 +xyphendoy1 ( 154, 4 ) = 0 +xyphendoy1 ( 154, 5 ) = 0 +xyphendoy1 ( 154, 6 ) = 0 +xyphendoy1 ( 154, 7 ) = 0 +xyphendoy1 ( 154, 8 ) = 0 + + ! xlat 20.7500000000000 +greenupxy ( 153, 1 ) = 141 +greenupxy ( 153, 2 ) = 146 +greenupxy ( 153, 3 ) = 161 +greenupxy ( 153, 4 ) = 146 +greenupxy ( 153, 5 ) = 146 +greenupxy ( 153, 6 ) = 146 +greenupxy ( 153, 7 ) = 124 +greenupxy ( 153, 8 ) = 124 +fallxy ( 153, 1 ) = 261 +fallxy ( 153, 2 ) = 265 +fallxy ( 153, 3 ) = 276 +fallxy ( 153, 4 ) = 274 +fallxy ( 153, 5 ) = 274 +fallxy ( 153, 6 ) = 274 +fallxy ( 153, 7 ) = 284 +fallxy ( 153, 8 ) = 284 +xyphendoy1 ( 153, 1 ) = 0 +xyphendoy1 ( 153, 2 ) = 0 +xyphendoy1 ( 153, 3 ) = 0 +xyphendoy1 ( 153, 4 ) = 0 +xyphendoy1 ( 153, 5 ) = 0 +xyphendoy1 ( 153, 6 ) = 0 +xyphendoy1 ( 153, 7 ) = 0 +xyphendoy1 ( 153, 8 ) = 0 + + ! xlat 20.2500000000000 +greenupxy ( 152, 1 ) = 141 +greenupxy ( 152, 2 ) = 144 +greenupxy ( 152, 3 ) = 163 +greenupxy ( 152, 4 ) = 149 +greenupxy ( 152, 5 ) = 149 +greenupxy ( 152, 6 ) = 149 +greenupxy ( 152, 7 ) = 125 +greenupxy ( 152, 8 ) = 125 +fallxy ( 152, 1 ) = 262 +fallxy ( 152, 2 ) = 266 +fallxy ( 152, 3 ) = 274 +fallxy ( 152, 4 ) = 273 +fallxy ( 152, 5 ) = 273 +fallxy ( 152, 6 ) = 273 +fallxy ( 152, 7 ) = 285 +fallxy ( 152, 8 ) = 285 +xyphendoy1 ( 152, 1 ) = 0 +xyphendoy1 ( 152, 2 ) = 0 +xyphendoy1 ( 152, 3 ) = 0 +xyphendoy1 ( 152, 4 ) = 0 +xyphendoy1 ( 152, 5 ) = 0 +xyphendoy1 ( 152, 6 ) = 0 +xyphendoy1 ( 152, 7 ) = 0 +xyphendoy1 ( 152, 8 ) = 0 + + ! xlat 19.7500000000000 +greenupxy ( 151, 1 ) = 130 +greenupxy ( 151, 2 ) = 142 +greenupxy ( 151, 3 ) = 166 +greenupxy ( 151, 4 ) = 152 +greenupxy ( 151, 5 ) = 152 +greenupxy ( 151, 6 ) = 152 +greenupxy ( 151, 7 ) = 124 +greenupxy ( 151, 8 ) = 124 +fallxy ( 151, 1 ) = 263 +fallxy ( 151, 2 ) = 267 +fallxy ( 151, 3 ) = 273 +fallxy ( 151, 4 ) = 272 +fallxy ( 151, 5 ) = 272 +fallxy ( 151, 6 ) = 272 +fallxy ( 151, 7 ) = 285 +fallxy ( 151, 8 ) = 285 +xyphendoy1 ( 151, 1 ) = 0 +xyphendoy1 ( 151, 2 ) = 0 +xyphendoy1 ( 151, 3 ) = 0 +xyphendoy1 ( 151, 4 ) = 0 +xyphendoy1 ( 151, 5 ) = 0 +xyphendoy1 ( 151, 6 ) = 0 +xyphendoy1 ( 151, 7 ) = 0 +xyphendoy1 ( 151, 8 ) = 0 + + ! xlat 19.2500000000000 +greenupxy ( 150, 1 ) = 130 +greenupxy ( 150, 2 ) = 140 +greenupxy ( 150, 3 ) = 169 +greenupxy ( 150, 4 ) = 155 +greenupxy ( 150, 5 ) = 155 +greenupxy ( 150, 6 ) = 155 +greenupxy ( 150, 7 ) = 125 +greenupxy ( 150, 8 ) = 125 +fallxy ( 150, 1 ) = 263 +fallxy ( 150, 2 ) = 268 +fallxy ( 150, 3 ) = 273 +fallxy ( 150, 4 ) = 271 +fallxy ( 150, 5 ) = 271 +fallxy ( 150, 6 ) = 271 +fallxy ( 150, 7 ) = 285 +fallxy ( 150, 8 ) = 285 +xyphendoy1 ( 150, 1 ) = 0 +xyphendoy1 ( 150, 2 ) = 0 +xyphendoy1 ( 150, 3 ) = 0 +xyphendoy1 ( 150, 4 ) = 0 +xyphendoy1 ( 150, 5 ) = 0 +xyphendoy1 ( 150, 6 ) = 0 +xyphendoy1 ( 150, 7 ) = 0 +xyphendoy1 ( 150, 8 ) = 0 + + ! xlat 18.7500000000000 +greenupxy ( 149, 1 ) = 123 +greenupxy ( 149, 2 ) = 138 +greenupxy ( 149, 3 ) = 172 +greenupxy ( 149, 4 ) = 158 +greenupxy ( 149, 5 ) = 158 +greenupxy ( 149, 6 ) = 158 +greenupxy ( 149, 7 ) = 128 +greenupxy ( 149, 8 ) = 128 +fallxy ( 149, 1 ) = 263 +fallxy ( 149, 2 ) = 269 +fallxy ( 149, 3 ) = 272 +fallxy ( 149, 4 ) = 270 +fallxy ( 149, 5 ) = 270 +fallxy ( 149, 6 ) = 270 +fallxy ( 149, 7 ) = 285 +fallxy ( 149, 8 ) = 285 +xyphendoy1 ( 149, 1 ) = 0 +xyphendoy1 ( 149, 2 ) = 0 +xyphendoy1 ( 149, 3 ) = 0 +xyphendoy1 ( 149, 4 ) = 0 +xyphendoy1 ( 149, 5 ) = 0 +xyphendoy1 ( 149, 6 ) = 0 +xyphendoy1 ( 149, 7 ) = 0 +xyphendoy1 ( 149, 8 ) = 0 + + ! xlat 18.2500000000000 +greenupxy ( 148, 1 ) = 123 +greenupxy ( 148, 2 ) = 137 +greenupxy ( 148, 3 ) = 175 +greenupxy ( 148, 4 ) = 160 +greenupxy ( 148, 5 ) = 160 +greenupxy ( 148, 6 ) = 160 +greenupxy ( 148, 7 ) = 131 +greenupxy ( 148, 8 ) = 131 +fallxy ( 148, 1 ) = 263 +fallxy ( 148, 2 ) = 269 +fallxy ( 148, 3 ) = 272 +fallxy ( 148, 4 ) = 270 +fallxy ( 148, 5 ) = 270 +fallxy ( 148, 6 ) = 270 +fallxy ( 148, 7 ) = 284 +fallxy ( 148, 8 ) = 284 +xyphendoy1 ( 148, 1 ) = 0 +xyphendoy1 ( 148, 2 ) = 0 +xyphendoy1 ( 148, 3 ) = 0 +xyphendoy1 ( 148, 4 ) = 0 +xyphendoy1 ( 148, 5 ) = 0 +xyphendoy1 ( 148, 6 ) = 0 +xyphendoy1 ( 148, 7 ) = 0 +xyphendoy1 ( 148, 8 ) = 0 + + ! xlat 17.7500000000000 +greenupxy ( 147, 1 ) = 126 +greenupxy ( 147, 2 ) = 138 +greenupxy ( 147, 3 ) = 178 +greenupxy ( 147, 4 ) = 163 +greenupxy ( 147, 5 ) = 163 +greenupxy ( 147, 6 ) = 163 +greenupxy ( 147, 7 ) = 134 +greenupxy ( 147, 8 ) = 134 +fallxy ( 147, 1 ) = 262 +fallxy ( 147, 2 ) = 270 +fallxy ( 147, 3 ) = 271 +fallxy ( 147, 4 ) = 269 +fallxy ( 147, 5 ) = 269 +fallxy ( 147, 6 ) = 269 +fallxy ( 147, 7 ) = 284 +fallxy ( 147, 8 ) = 284 +xyphendoy1 ( 147, 1 ) = 0 +xyphendoy1 ( 147, 2 ) = 0 +xyphendoy1 ( 147, 3 ) = 0 +xyphendoy1 ( 147, 4 ) = 0 +xyphendoy1 ( 147, 5 ) = 0 +xyphendoy1 ( 147, 6 ) = 0 +xyphendoy1 ( 147, 7 ) = 0 +xyphendoy1 ( 147, 8 ) = 0 + + ! xlat 17.2500000000000 +greenupxy ( 146, 1 ) = 126 +greenupxy ( 146, 2 ) = 138 +greenupxy ( 146, 3 ) = 180 +greenupxy ( 146, 4 ) = 165 +greenupxy ( 146, 5 ) = 165 +greenupxy ( 146, 6 ) = 165 +greenupxy ( 146, 7 ) = 135 +greenupxy ( 146, 8 ) = 135 +fallxy ( 146, 1 ) = 265 +fallxy ( 146, 2 ) = 271 +fallxy ( 146, 3 ) = 271 +fallxy ( 146, 4 ) = 269 +fallxy ( 146, 5 ) = 269 +fallxy ( 146, 6 ) = 269 +fallxy ( 146, 7 ) = 283 +fallxy ( 146, 8 ) = 283 +xyphendoy1 ( 146, 1 ) = 0 +xyphendoy1 ( 146, 2 ) = 0 +xyphendoy1 ( 146, 3 ) = 0 +xyphendoy1 ( 146, 4 ) = 0 +xyphendoy1 ( 146, 5 ) = 0 +xyphendoy1 ( 146, 6 ) = 0 +xyphendoy1 ( 146, 7 ) = 0 +xyphendoy1 ( 146, 8 ) = 0 + + ! xlat 16.7500000000000 +greenupxy ( 145, 1 ) = 131 +greenupxy ( 145, 2 ) = 139 +greenupxy ( 145, 3 ) = 183 +greenupxy ( 145, 4 ) = 167 +greenupxy ( 145, 5 ) = 167 +greenupxy ( 145, 6 ) = 167 +greenupxy ( 145, 7 ) = 138 +greenupxy ( 145, 8 ) = 138 +fallxy ( 145, 1 ) = 266 +fallxy ( 145, 2 ) = 271 +fallxy ( 145, 3 ) = 271 +fallxy ( 145, 4 ) = 269 +fallxy ( 145, 5 ) = 269 +fallxy ( 145, 6 ) = 269 +fallxy ( 145, 7 ) = 283 +fallxy ( 145, 8 ) = 283 +xyphendoy1 ( 145, 1 ) = 0 +xyphendoy1 ( 145, 2 ) = 0 +xyphendoy1 ( 145, 3 ) = 0 +xyphendoy1 ( 145, 4 ) = 0 +xyphendoy1 ( 145, 5 ) = 0 +xyphendoy1 ( 145, 6 ) = 0 +xyphendoy1 ( 145, 7 ) = 0 +xyphendoy1 ( 145, 8 ) = 0 + + ! xlat 16.2500000000000 +greenupxy ( 144, 1 ) = 135 +greenupxy ( 144, 2 ) = 140 +greenupxy ( 144, 3 ) = 185 +greenupxy ( 144, 4 ) = 168 +greenupxy ( 144, 5 ) = 168 +greenupxy ( 144, 6 ) = 168 +greenupxy ( 144, 7 ) = 141 +greenupxy ( 144, 8 ) = 141 +fallxy ( 144, 1 ) = 275 +fallxy ( 144, 2 ) = 271 +fallxy ( 144, 3 ) = 271 +fallxy ( 144, 4 ) = 269 +fallxy ( 144, 5 ) = 269 +fallxy ( 144, 6 ) = 269 +fallxy ( 144, 7 ) = 282 +fallxy ( 144, 8 ) = 282 +xyphendoy1 ( 144, 1 ) = 0 +xyphendoy1 ( 144, 2 ) = 0 +xyphendoy1 ( 144, 3 ) = 0 +xyphendoy1 ( 144, 4 ) = 0 +xyphendoy1 ( 144, 5 ) = 0 +xyphendoy1 ( 144, 6 ) = 0 +xyphendoy1 ( 144, 7 ) = 0 +xyphendoy1 ( 144, 8 ) = 0 + + ! xlat 15.7500000000000 +greenupxy ( 143, 1 ) = 137 +greenupxy ( 143, 2 ) = 139 +greenupxy ( 143, 3 ) = 186 +greenupxy ( 143, 4 ) = 169 +greenupxy ( 143, 5 ) = 169 +greenupxy ( 143, 6 ) = 169 +greenupxy ( 143, 7 ) = 144 +greenupxy ( 143, 8 ) = 144 +fallxy ( 143, 1 ) = 277 +fallxy ( 143, 2 ) = 272 +fallxy ( 143, 3 ) = 271 +fallxy ( 143, 4 ) = 269 +fallxy ( 143, 5 ) = 269 +fallxy ( 143, 6 ) = 269 +fallxy ( 143, 7 ) = 281 +fallxy ( 143, 8 ) = 281 +xyphendoy1 ( 143, 1 ) = 0 +xyphendoy1 ( 143, 2 ) = 0 +xyphendoy1 ( 143, 3 ) = 0 +xyphendoy1 ( 143, 4 ) = 0 +xyphendoy1 ( 143, 5 ) = 0 +xyphendoy1 ( 143, 6 ) = 0 +xyphendoy1 ( 143, 7 ) = 0 +xyphendoy1 ( 143, 8 ) = 0 + + ! xlat 15.2500000000000 +greenupxy ( 142, 1 ) = 137 +greenupxy ( 142, 2 ) = 139 +greenupxy ( 142, 3 ) = 187 +greenupxy ( 142, 4 ) = 170 +greenupxy ( 142, 5 ) = 170 +greenupxy ( 142, 6 ) = 170 +greenupxy ( 142, 7 ) = 147 +greenupxy ( 142, 8 ) = 147 +fallxy ( 142, 1 ) = 280 +fallxy ( 142, 2 ) = 272 +fallxy ( 142, 3 ) = 271 +fallxy ( 142, 4 ) = 270 +fallxy ( 142, 5 ) = 270 +fallxy ( 142, 6 ) = 270 +fallxy ( 142, 7 ) = 281 +fallxy ( 142, 8 ) = 281 +xyphendoy1 ( 142, 1 ) = 0 +xyphendoy1 ( 142, 2 ) = 0 +xyphendoy1 ( 142, 3 ) = 0 +xyphendoy1 ( 142, 4 ) = 0 +xyphendoy1 ( 142, 5 ) = 0 +xyphendoy1 ( 142, 6 ) = 0 +xyphendoy1 ( 142, 7 ) = 0 +xyphendoy1 ( 142, 8 ) = 0 + + ! xlat 14.7500000000000 +greenupxy ( 141, 1 ) = 137 +greenupxy ( 141, 2 ) = 139 +greenupxy ( 141, 3 ) = 188 +greenupxy ( 141, 4 ) = 172 +greenupxy ( 141, 5 ) = 172 +greenupxy ( 141, 6 ) = 172 +greenupxy ( 141, 7 ) = 150 +greenupxy ( 141, 8 ) = 150 +fallxy ( 141, 1 ) = 282 +fallxy ( 141, 2 ) = 272 +fallxy ( 141, 3 ) = 271 +fallxy ( 141, 4 ) = 270 +fallxy ( 141, 5 ) = 270 +fallxy ( 141, 6 ) = 270 +fallxy ( 141, 7 ) = 280 +fallxy ( 141, 8 ) = 280 +xyphendoy1 ( 141, 1 ) = 0 +xyphendoy1 ( 141, 2 ) = 0 +xyphendoy1 ( 141, 3 ) = 0 +xyphendoy1 ( 141, 4 ) = 0 +xyphendoy1 ( 141, 5 ) = 0 +xyphendoy1 ( 141, 6 ) = 0 +xyphendoy1 ( 141, 7 ) = 0 +xyphendoy1 ( 141, 8 ) = 0 + + ! xlat 14.2500000000000 +greenupxy ( 140, 1 ) = 135 +greenupxy ( 140, 2 ) = 138 +greenupxy ( 140, 3 ) = 189 +greenupxy ( 140, 4 ) = 173 +greenupxy ( 140, 5 ) = 173 +greenupxy ( 140, 6 ) = 173 +greenupxy ( 140, 7 ) = 154 +greenupxy ( 140, 8 ) = 154 +fallxy ( 140, 1 ) = 283 +fallxy ( 140, 2 ) = 272 +fallxy ( 140, 3 ) = 271 +fallxy ( 140, 4 ) = 269 +fallxy ( 140, 5 ) = 269 +fallxy ( 140, 6 ) = 269 +fallxy ( 140, 7 ) = 279 +fallxy ( 140, 8 ) = 279 +xyphendoy1 ( 140, 1 ) = 0 +xyphendoy1 ( 140, 2 ) = 0 +xyphendoy1 ( 140, 3 ) = 0 +xyphendoy1 ( 140, 4 ) = 0 +xyphendoy1 ( 140, 5 ) = 0 +xyphendoy1 ( 140, 6 ) = 0 +xyphendoy1 ( 140, 7 ) = 0 +xyphendoy1 ( 140, 8 ) = 0 + + ! xlat 13.7500000000000 +greenupxy ( 139, 1 ) = 136 +greenupxy ( 139, 2 ) = 138 +greenupxy ( 139, 3 ) = 189 +greenupxy ( 139, 4 ) = 174 +greenupxy ( 139, 5 ) = 174 +greenupxy ( 139, 6 ) = 174 +greenupxy ( 139, 7 ) = 157 +greenupxy ( 139, 8 ) = 157 +fallxy ( 139, 1 ) = 284 +fallxy ( 139, 2 ) = 272 +fallxy ( 139, 3 ) = 269 +fallxy ( 139, 4 ) = 269 +fallxy ( 139, 5 ) = 269 +fallxy ( 139, 6 ) = 269 +fallxy ( 139, 7 ) = 278 +fallxy ( 139, 8 ) = 278 +xyphendoy1 ( 139, 1 ) = 0 +xyphendoy1 ( 139, 2 ) = 0 +xyphendoy1 ( 139, 3 ) = 0 +xyphendoy1 ( 139, 4 ) = 0 +xyphendoy1 ( 139, 5 ) = 0 +xyphendoy1 ( 139, 6 ) = 0 +xyphendoy1 ( 139, 7 ) = 0 +xyphendoy1 ( 139, 8 ) = 0 + + ! xlat 13.2500000000000 +greenupxy ( 138, 1 ) = 134 +greenupxy ( 138, 2 ) = 138 +greenupxy ( 138, 3 ) = 185 +greenupxy ( 138, 4 ) = 174 +greenupxy ( 138, 5 ) = 174 +greenupxy ( 138, 6 ) = 174 +greenupxy ( 138, 7 ) = 159 +greenupxy ( 138, 8 ) = 159 +fallxy ( 138, 1 ) = 284 +fallxy ( 138, 2 ) = 273 +fallxy ( 138, 3 ) = 268 +fallxy ( 138, 4 ) = 269 +fallxy ( 138, 5 ) = 269 +fallxy ( 138, 6 ) = 269 +fallxy ( 138, 7 ) = 278 +fallxy ( 138, 8 ) = 278 +xyphendoy1 ( 138, 1 ) = 0 +xyphendoy1 ( 138, 2 ) = 0 +xyphendoy1 ( 138, 3 ) = 0 +xyphendoy1 ( 138, 4 ) = 0 +xyphendoy1 ( 138, 5 ) = 0 +xyphendoy1 ( 138, 6 ) = 0 +xyphendoy1 ( 138, 7 ) = 0 +xyphendoy1 ( 138, 8 ) = 0 + + ! xlat 12.7500000000000 +greenupxy ( 137, 1 ) = 134 +greenupxy ( 137, 2 ) = 138 +greenupxy ( 137, 3 ) = 178 +greenupxy ( 137, 4 ) = 173 +greenupxy ( 137, 5 ) = 173 +greenupxy ( 137, 6 ) = 173 +greenupxy ( 137, 7 ) = 163 +greenupxy ( 137, 8 ) = 163 +fallxy ( 137, 1 ) = 284 +fallxy ( 137, 2 ) = 273 +fallxy ( 137, 3 ) = 266 +fallxy ( 137, 4 ) = 269 +fallxy ( 137, 5 ) = 269 +fallxy ( 137, 6 ) = 269 +fallxy ( 137, 7 ) = 278 +fallxy ( 137, 8 ) = 278 +xyphendoy1 ( 137, 1 ) = 0 +xyphendoy1 ( 137, 2 ) = 0 +xyphendoy1 ( 137, 3 ) = 0 +xyphendoy1 ( 137, 4 ) = 0 +xyphendoy1 ( 137, 5 ) = 0 +xyphendoy1 ( 137, 6 ) = 0 +xyphendoy1 ( 137, 7 ) = 0 +xyphendoy1 ( 137, 8 ) = 0 + + ! xlat 12.2500000000000 +greenupxy ( 136, 1 ) = 131 +greenupxy ( 136, 2 ) = 137 +greenupxy ( 136, 3 ) = 176 +greenupxy ( 136, 4 ) = 167 +greenupxy ( 136, 5 ) = 167 +greenupxy ( 136, 6 ) = 167 +greenupxy ( 136, 7 ) = 166 +greenupxy ( 136, 8 ) = 166 +fallxy ( 136, 1 ) = 284 +fallxy ( 136, 2 ) = 273 +fallxy ( 136, 3 ) = 264 +fallxy ( 136, 4 ) = 268 +fallxy ( 136, 5 ) = 268 +fallxy ( 136, 6 ) = 268 +fallxy ( 136, 7 ) = 278 +fallxy ( 136, 8 ) = 278 +xyphendoy1 ( 136, 1 ) = 0 +xyphendoy1 ( 136, 2 ) = 0 +xyphendoy1 ( 136, 3 ) = 0 +xyphendoy1 ( 136, 4 ) = 0 +xyphendoy1 ( 136, 5 ) = 0 +xyphendoy1 ( 136, 6 ) = 0 +xyphendoy1 ( 136, 7 ) = 0 +xyphendoy1 ( 136, 8 ) = 0 + + ! xlat 11.7500000000000 +greenupxy ( 135, 1 ) = 130 +greenupxy ( 135, 2 ) = 136 +greenupxy ( 135, 3 ) = 176 +greenupxy ( 135, 4 ) = 161 +greenupxy ( 135, 5 ) = 161 +greenupxy ( 135, 6 ) = 161 +greenupxy ( 135, 7 ) = 169 +greenupxy ( 135, 8 ) = 169 +fallxy ( 135, 1 ) = 284 +fallxy ( 135, 2 ) = 274 +fallxy ( 135, 3 ) = 263 +fallxy ( 135, 4 ) = 267 +fallxy ( 135, 5 ) = 267 +fallxy ( 135, 6 ) = 267 +fallxy ( 135, 7 ) = 277 +fallxy ( 135, 8 ) = 277 +xyphendoy1 ( 135, 1 ) = 0 +xyphendoy1 ( 135, 2 ) = 0 +xyphendoy1 ( 135, 3 ) = 0 +xyphendoy1 ( 135, 4 ) = 0 +xyphendoy1 ( 135, 5 ) = 0 +xyphendoy1 ( 135, 6 ) = 0 +xyphendoy1 ( 135, 7 ) = 0 +xyphendoy1 ( 135, 8 ) = 0 + + ! xlat 11.2500000000000 +greenupxy ( 134, 1 ) = 138 +greenupxy ( 134, 2 ) = 134 +greenupxy ( 134, 3 ) = 174 +greenupxy ( 134, 4 ) = 154 +greenupxy ( 134, 5 ) = 154 +greenupxy ( 134, 6 ) = 154 +greenupxy ( 134, 7 ) = 171 +greenupxy ( 134, 8 ) = 171 +fallxy ( 134, 1 ) = 287 +fallxy ( 134, 2 ) = 274 +fallxy ( 134, 3 ) = 263 +fallxy ( 134, 4 ) = 268 +fallxy ( 134, 5 ) = 268 +fallxy ( 134, 6 ) = 268 +fallxy ( 134, 7 ) = 277 +fallxy ( 134, 8 ) = 277 +xyphendoy1 ( 134, 1 ) = 0 +xyphendoy1 ( 134, 2 ) = 0 +xyphendoy1 ( 134, 3 ) = 0 +xyphendoy1 ( 134, 4 ) = 0 +xyphendoy1 ( 134, 5 ) = 0 +xyphendoy1 ( 134, 6 ) = 0 +xyphendoy1 ( 134, 7 ) = 0 +xyphendoy1 ( 134, 8 ) = 0 + + ! xlat 10.7500000000000 +greenupxy ( 133, 1 ) = 135 +greenupxy ( 133, 2 ) = 132 +greenupxy ( 133, 3 ) = 172 +greenupxy ( 133, 4 ) = 147 +greenupxy ( 133, 5 ) = 147 +greenupxy ( 133, 6 ) = 147 +greenupxy ( 133, 7 ) = 169 +greenupxy ( 133, 8 ) = 169 +fallxy ( 133, 1 ) = 286 +fallxy ( 133, 2 ) = 273 +fallxy ( 133, 3 ) = 263 +fallxy ( 133, 4 ) = 268 +fallxy ( 133, 5 ) = 268 +fallxy ( 133, 6 ) = 268 +fallxy ( 133, 7 ) = 276 +fallxy ( 133, 8 ) = 276 +xyphendoy1 ( 133, 1 ) = 0 +xyphendoy1 ( 133, 2 ) = 0 +xyphendoy1 ( 133, 3 ) = 0 +xyphendoy1 ( 133, 4 ) = 0 +xyphendoy1 ( 133, 5 ) = 0 +xyphendoy1 ( 133, 6 ) = 0 +xyphendoy1 ( 133, 7 ) = 0 +xyphendoy1 ( 133, 8 ) = 0 + + ! xlat 10.2500000000000 +greenupxy ( 132, 1 ) = 137 +greenupxy ( 132, 2 ) = 128 +greenupxy ( 132, 3 ) = 158 +greenupxy ( 132, 4 ) = 139 +greenupxy ( 132, 5 ) = 139 +greenupxy ( 132, 6 ) = 139 +greenupxy ( 132, 7 ) = 165 +greenupxy ( 132, 8 ) = 165 +fallxy ( 132, 1 ) = 286 +fallxy ( 132, 2 ) = 273 +fallxy ( 132, 3 ) = 249 +fallxy ( 132, 4 ) = 268 +fallxy ( 132, 5 ) = 268 +fallxy ( 132, 6 ) = 268 +fallxy ( 132, 7 ) = 274 +fallxy ( 132, 8 ) = 274 +xyphendoy1 ( 132, 1 ) = 0 +xyphendoy1 ( 132, 2 ) = 0 +xyphendoy1 ( 132, 3 ) = 0 +xyphendoy1 ( 132, 4 ) = 0 +xyphendoy1 ( 132, 5 ) = 0 +xyphendoy1 ( 132, 6 ) = 0 +xyphendoy1 ( 132, 7 ) = 0 +xyphendoy1 ( 132, 8 ) = 0 + + ! xlat 9.75000000000000 +greenupxy ( 131, 1 ) = 129 +greenupxy ( 131, 2 ) = 123 +greenupxy ( 131, 3 ) = 145 +greenupxy ( 131, 4 ) = 133 +greenupxy ( 131, 5 ) = 133 +greenupxy ( 131, 6 ) = 133 +greenupxy ( 131, 7 ) = 158 +greenupxy ( 131, 8 ) = 158 +fallxy ( 131, 1 ) = 286 +fallxy ( 131, 2 ) = 272 +fallxy ( 131, 3 ) = 235 +fallxy ( 131, 4 ) = 268 +fallxy ( 131, 5 ) = 268 +fallxy ( 131, 6 ) = 268 +fallxy ( 131, 7 ) = 273 +fallxy ( 131, 8 ) = 273 +xyphendoy1 ( 131, 1 ) = 0 +xyphendoy1 ( 131, 2 ) = 0 +xyphendoy1 ( 131, 3 ) = 0 +xyphendoy1 ( 131, 4 ) = 0 +xyphendoy1 ( 131, 5 ) = 0 +xyphendoy1 ( 131, 6 ) = 0 +xyphendoy1 ( 131, 7 ) = 0 +xyphendoy1 ( 131, 8 ) = 0 + + ! xlat 9.25000000000000 +greenupxy ( 130, 1 ) = 122 +greenupxy ( 130, 2 ) = 118 +greenupxy ( 130, 3 ) = 132 +greenupxy ( 130, 4 ) = 126 +greenupxy ( 130, 5 ) = 126 +greenupxy ( 130, 6 ) = 126 +greenupxy ( 130, 7 ) = 152 +greenupxy ( 130, 8 ) = 152 +fallxy ( 130, 1 ) = 285 +fallxy ( 130, 2 ) = 272 +fallxy ( 130, 3 ) = 220 +fallxy ( 130, 4 ) = 268 +fallxy ( 130, 5 ) = 268 +fallxy ( 130, 6 ) = 268 +fallxy ( 130, 7 ) = 274 +fallxy ( 130, 8 ) = 274 +xyphendoy1 ( 130, 1 ) = 0 +xyphendoy1 ( 130, 2 ) = 0 +xyphendoy1 ( 130, 3 ) = 0 +xyphendoy1 ( 130, 4 ) = 0 +xyphendoy1 ( 130, 5 ) = 0 +xyphendoy1 ( 130, 6 ) = 0 +xyphendoy1 ( 130, 7 ) = 0 +xyphendoy1 ( 130, 8 ) = 0 + + ! xlat 8.75000000000000 +greenupxy ( 129, 1 ) = 122 +greenupxy ( 129, 2 ) = 112 +greenupxy ( 129, 3 ) = 127 +greenupxy ( 129, 4 ) = 119 +greenupxy ( 129, 5 ) = 119 +greenupxy ( 129, 6 ) = 119 +greenupxy ( 129, 7 ) = 145 +greenupxy ( 129, 8 ) = 145 +fallxy ( 129, 1 ) = 285 +fallxy ( 129, 2 ) = 272 +fallxy ( 129, 3 ) = 218 +fallxy ( 129, 4 ) = 268 +fallxy ( 129, 5 ) = 268 +fallxy ( 129, 6 ) = 268 +fallxy ( 129, 7 ) = 273 +fallxy ( 129, 8 ) = 273 +xyphendoy1 ( 129, 1 ) = 0 +xyphendoy1 ( 129, 2 ) = 0 +xyphendoy1 ( 129, 3 ) = 0 +xyphendoy1 ( 129, 4 ) = 0 +xyphendoy1 ( 129, 5 ) = 0 +xyphendoy1 ( 129, 6 ) = 0 +xyphendoy1 ( 129, 7 ) = 0 +xyphendoy1 ( 129, 8 ) = 0 + + ! xlat 8.25000000000000 +greenupxy ( 128, 1 ) = 116 +greenupxy ( 128, 2 ) = 108 +greenupxy ( 128, 3 ) = 114 +greenupxy ( 128, 4 ) = 111 +greenupxy ( 128, 5 ) = 111 +greenupxy ( 128, 6 ) = 111 +greenupxy ( 128, 7 ) = 134 +greenupxy ( 128, 8 ) = 134 +fallxy ( 128, 1 ) = 285 +fallxy ( 128, 2 ) = 271 +fallxy ( 128, 3 ) = 205 +fallxy ( 128, 4 ) = 268 +fallxy ( 128, 5 ) = 268 +fallxy ( 128, 6 ) = 268 +fallxy ( 128, 7 ) = 272 +fallxy ( 128, 8 ) = 272 +xyphendoy1 ( 128, 1 ) = 0 +xyphendoy1 ( 128, 2 ) = 0 +xyphendoy1 ( 128, 3 ) = 0 +xyphendoy1 ( 128, 4 ) = 0 +xyphendoy1 ( 128, 5 ) = 0 +xyphendoy1 ( 128, 6 ) = 0 +xyphendoy1 ( 128, 7 ) = 0 +xyphendoy1 ( 128, 8 ) = 0 + + ! xlat 7.75000000000000 +greenupxy ( 127, 1 ) = 114 +greenupxy ( 127, 2 ) = 103 +greenupxy ( 127, 3 ) = 102 +greenupxy ( 127, 4 ) = 102 +greenupxy ( 127, 5 ) = 102 +greenupxy ( 127, 6 ) = 102 +greenupxy ( 127, 7 ) = 129 +greenupxy ( 127, 8 ) = 129 +fallxy ( 127, 1 ) = 286 +fallxy ( 127, 2 ) = 271 +fallxy ( 127, 3 ) = 191 +fallxy ( 127, 4 ) = 267 +fallxy ( 127, 5 ) = 267 +fallxy ( 127, 6 ) = 267 +fallxy ( 127, 7 ) = 272 +fallxy ( 127, 8 ) = 272 +xyphendoy1 ( 127, 1 ) = 0 +xyphendoy1 ( 127, 2 ) = 0 +xyphendoy1 ( 127, 3 ) = 0 +xyphendoy1 ( 127, 4 ) = 0 +xyphendoy1 ( 127, 5 ) = 0 +xyphendoy1 ( 127, 6 ) = 0 +xyphendoy1 ( 127, 7 ) = 0 +xyphendoy1 ( 127, 8 ) = 0 + + ! xlat 7.25000000000000 +greenupxy ( 126, 1 ) = 110 +greenupxy ( 126, 2 ) = 100 +greenupxy ( 126, 3 ) = 90 +greenupxy ( 126, 4 ) = 93 +greenupxy ( 126, 5 ) = 93 +greenupxy ( 126, 6 ) = 93 +greenupxy ( 126, 7 ) = 124 +greenupxy ( 126, 8 ) = 124 +fallxy ( 126, 1 ) = 286 +fallxy ( 126, 2 ) = 271 +fallxy ( 126, 3 ) = 185 +fallxy ( 126, 4 ) = 267 +fallxy ( 126, 5 ) = 267 +fallxy ( 126, 6 ) = 267 +fallxy ( 126, 7 ) = 269 +fallxy ( 126, 8 ) = 269 +xyphendoy1 ( 126, 1 ) = 0 +xyphendoy1 ( 126, 2 ) = 0 +xyphendoy1 ( 126, 3 ) = 0 +xyphendoy1 ( 126, 4 ) = 0 +xyphendoy1 ( 126, 5 ) = 0 +xyphendoy1 ( 126, 6 ) = 0 +xyphendoy1 ( 126, 7 ) = 0 +xyphendoy1 ( 126, 8 ) = 0 + + ! xlat 6.75000000000000 +greenupxy ( 125, 1 ) = 107 +greenupxy ( 125, 2 ) = 96 +greenupxy ( 125, 3 ) = 79 +greenupxy ( 125, 4 ) = 85 +greenupxy ( 125, 5 ) = 85 +greenupxy ( 125, 6 ) = 85 +greenupxy ( 125, 7 ) = 119 +greenupxy ( 125, 8 ) = 119 +fallxy ( 125, 1 ) = 284 +fallxy ( 125, 2 ) = 271 +fallxy ( 125, 3 ) = 178 +fallxy ( 125, 4 ) = 267 +fallxy ( 125, 5 ) = 267 +fallxy ( 125, 6 ) = 267 +fallxy ( 125, 7 ) = 270 +fallxy ( 125, 8 ) = 270 +xyphendoy1 ( 125, 1 ) = 0 +xyphendoy1 ( 125, 2 ) = 0 +xyphendoy1 ( 125, 3 ) = 0 +xyphendoy1 ( 125, 4 ) = 0 +xyphendoy1 ( 125, 5 ) = 0 +xyphendoy1 ( 125, 6 ) = 0 +xyphendoy1 ( 125, 7 ) = 0 +xyphendoy1 ( 125, 8 ) = 0 + + ! xlat 6.25000000000000 +greenupxy ( 124, 1 ) = 103 +greenupxy ( 124, 2 ) = 93 +greenupxy ( 124, 3 ) = 70 +greenupxy ( 124, 4 ) = 80 +greenupxy ( 124, 5 ) = 80 +greenupxy ( 124, 6 ) = 80 +greenupxy ( 124, 7 ) = 115 +greenupxy ( 124, 8 ) = 115 +fallxy ( 124, 1 ) = 283 +fallxy ( 124, 2 ) = 272 +fallxy ( 124, 3 ) = 162 +fallxy ( 124, 4 ) = 266 +fallxy ( 124, 5 ) = 266 +fallxy ( 124, 6 ) = 266 +fallxy ( 124, 7 ) = 271 +fallxy ( 124, 8 ) = 271 +xyphendoy1 ( 124, 1 ) = 0 +xyphendoy1 ( 124, 2 ) = 0 +xyphendoy1 ( 124, 3 ) = 0 +xyphendoy1 ( 124, 4 ) = 0 +xyphendoy1 ( 124, 5 ) = 0 +xyphendoy1 ( 124, 6 ) = 0 +xyphendoy1 ( 124, 7 ) = 0 +xyphendoy1 ( 124, 8 ) = 0 + + ! xlat 5.75000000000000 +greenupxy ( 123, 1 ) = 102 +greenupxy ( 123, 2 ) = 91 +greenupxy ( 123, 3 ) = 62 +greenupxy ( 123, 4 ) = 75 +greenupxy ( 123, 5 ) = 75 +greenupxy ( 123, 6 ) = 75 +greenupxy ( 123, 7 ) = 110 +greenupxy ( 123, 8 ) = 110 +fallxy ( 123, 1 ) = 278 +fallxy ( 123, 2 ) = 272 +fallxy ( 123, 3 ) = 148 +fallxy ( 123, 4 ) = 266 +fallxy ( 123, 5 ) = 266 +fallxy ( 123, 6 ) = 266 +fallxy ( 123, 7 ) = 272 +fallxy ( 123, 8 ) = 272 +xyphendoy1 ( 123, 1 ) = 0 +xyphendoy1 ( 123, 2 ) = 0 +xyphendoy1 ( 123, 3 ) = 0 +xyphendoy1 ( 123, 4 ) = 0 +xyphendoy1 ( 123, 5 ) = 0 +xyphendoy1 ( 123, 6 ) = 0 +xyphendoy1 ( 123, 7 ) = 0 +xyphendoy1 ( 123, 8 ) = 0 + + ! xlat 5.25000000000000 +greenupxy ( 122, 1 ) = 96 +greenupxy ( 122, 2 ) = 88 +greenupxy ( 122, 3 ) = 52 +greenupxy ( 122, 4 ) = 69 +greenupxy ( 122, 5 ) = 69 +greenupxy ( 122, 6 ) = 69 +greenupxy ( 122, 7 ) = 105 +greenupxy ( 122, 8 ) = 105 +fallxy ( 122, 1 ) = 276 +fallxy ( 122, 2 ) = 269 +fallxy ( 122, 3 ) = 133 +fallxy ( 122, 4 ) = 265 +fallxy ( 122, 5 ) = 265 +fallxy ( 122, 6 ) = 265 +fallxy ( 122, 7 ) = 271 +fallxy ( 122, 8 ) = 271 +xyphendoy1 ( 122, 1 ) = 0 +xyphendoy1 ( 122, 2 ) = 0 +xyphendoy1 ( 122, 3 ) = 0 +xyphendoy1 ( 122, 4 ) = 0 +xyphendoy1 ( 122, 5 ) = 0 +xyphendoy1 ( 122, 6 ) = 0 +xyphendoy1 ( 122, 7 ) = 0 +xyphendoy1 ( 122, 8 ) = 0 + + ! xlat 4.75000000000000 +greenupxy ( 121, 1 ) = 93 +greenupxy ( 121, 2 ) = 84 +greenupxy ( 121, 3 ) = 41 +greenupxy ( 121, 4 ) = 61 +greenupxy ( 121, 5 ) = 61 +greenupxy ( 121, 6 ) = 61 +greenupxy ( 121, 7 ) = 96 +greenupxy ( 121, 8 ) = 96 +fallxy ( 121, 1 ) = 276 +fallxy ( 121, 2 ) = 267 +fallxy ( 121, 3 ) = 117 +fallxy ( 121, 4 ) = 265 +fallxy ( 121, 5 ) = 265 +fallxy ( 121, 6 ) = 265 +fallxy ( 121, 7 ) = 269 +fallxy ( 121, 8 ) = 269 +xyphendoy1 ( 121, 1 ) = 0 +xyphendoy1 ( 121, 2 ) = 0 +xyphendoy1 ( 121, 3 ) = 0 +xyphendoy1 ( 121, 4 ) = 0 +xyphendoy1 ( 121, 5 ) = 0 +xyphendoy1 ( 121, 6 ) = 0 +xyphendoy1 ( 121, 7 ) = 0 +xyphendoy1 ( 121, 8 ) = 0 + + ! xlat 4.25000000000000 +greenupxy ( 120, 1 ) = 93 +greenupxy ( 120, 2 ) = 71 +greenupxy ( 120, 3 ) = 34 +greenupxy ( 120, 4 ) = 55 +greenupxy ( 120, 5 ) = 55 +greenupxy ( 120, 6 ) = 55 +greenupxy ( 120, 7 ) = 85 +greenupxy ( 120, 8 ) = 85 +fallxy ( 120, 1 ) = 276 +fallxy ( 120, 2 ) = 266 +fallxy ( 120, 3 ) = 102 +fallxy ( 120, 4 ) = 264 +fallxy ( 120, 5 ) = 264 +fallxy ( 120, 6 ) = 264 +fallxy ( 120, 7 ) = 267 +fallxy ( 120, 8 ) = 267 +xyphendoy1 ( 120, 1 ) = 0 +xyphendoy1 ( 120, 2 ) = 0 +xyphendoy1 ( 120, 3 ) = 0 +xyphendoy1 ( 120, 4 ) = 0 +xyphendoy1 ( 120, 5 ) = 0 +xyphendoy1 ( 120, 6 ) = 0 +xyphendoy1 ( 120, 7 ) = 0 +xyphendoy1 ( 120, 8 ) = 0 + + ! xlat 3.75000000000000 +greenupxy ( 119, 1 ) = 90 +greenupxy ( 119, 2 ) = 58 +greenupxy ( 119, 3 ) = 32 +greenupxy ( 119, 4 ) = 48 +greenupxy ( 119, 5 ) = 48 +greenupxy ( 119, 6 ) = 48 +greenupxy ( 119, 7 ) = 79 +greenupxy ( 119, 8 ) = 79 +fallxy ( 119, 1 ) = 259 +fallxy ( 119, 2 ) = 266 +fallxy ( 119, 3 ) = 87 +fallxy ( 119, 4 ) = 265 +fallxy ( 119, 5 ) = 265 +fallxy ( 119, 6 ) = 265 +fallxy ( 119, 7 ) = 267 +fallxy ( 119, 8 ) = 267 +xyphendoy1 ( 119, 1 ) = 0 +xyphendoy1 ( 119, 2 ) = 0 +xyphendoy1 ( 119, 3 ) = 0 +xyphendoy1 ( 119, 4 ) = 0 +xyphendoy1 ( 119, 5 ) = 0 +xyphendoy1 ( 119, 6 ) = 0 +xyphendoy1 ( 119, 7 ) = 0 +xyphendoy1 ( 119, 8 ) = 0 + + ! xlat 3.25000000000000 +greenupxy ( 118, 1 ) = 90 +greenupxy ( 118, 2 ) = 51 +greenupxy ( 118, 3 ) = 13 +greenupxy ( 118, 4 ) = 38 +greenupxy ( 118, 5 ) = 38 +greenupxy ( 118, 6 ) = 38 +greenupxy ( 118, 7 ) = 67 +greenupxy ( 118, 8 ) = 67 +fallxy ( 118, 1 ) = 259 +fallxy ( 118, 2 ) = 264 +fallxy ( 118, 3 ) = 84 +fallxy ( 118, 4 ) = 265 +fallxy ( 118, 5 ) = 265 +fallxy ( 118, 6 ) = 265 +fallxy ( 118, 7 ) = 266 +fallxy ( 118, 8 ) = 266 +xyphendoy1 ( 118, 1 ) = 0 +xyphendoy1 ( 118, 2 ) = 0 +xyphendoy1 ( 118, 3 ) = 0 +xyphendoy1 ( 118, 4 ) = 0 +xyphendoy1 ( 118, 5 ) = 0 +xyphendoy1 ( 118, 6 ) = 0 +xyphendoy1 ( 118, 7 ) = 0 +xyphendoy1 ( 118, 8 ) = 0 + + ! xlat 2.75000000000000 +greenupxy ( 117, 1 ) = 81 +greenupxy ( 117, 2 ) = 42 +greenupxy ( 117, 3 ) = 8 +greenupxy ( 117, 4 ) = 34 +greenupxy ( 117, 5 ) = 34 +greenupxy ( 117, 6 ) = 34 +greenupxy ( 117, 7 ) = 57 +greenupxy ( 117, 8 ) = 57 +fallxy ( 117, 1 ) = 251 +fallxy ( 117, 2 ) = 253 +fallxy ( 117, 3 ) = 83 +fallxy ( 117, 4 ) = 241 +fallxy ( 117, 5 ) = 241 +fallxy ( 117, 6 ) = 241 +fallxy ( 117, 7 ) = 258 +fallxy ( 117, 8 ) = 258 +xyphendoy1 ( 117, 1 ) = 0 +xyphendoy1 ( 117, 2 ) = 0 +xyphendoy1 ( 117, 3 ) = 0 +xyphendoy1 ( 117, 4 ) = 0 +xyphendoy1 ( 117, 5 ) = 0 +xyphendoy1 ( 117, 6 ) = 0 +xyphendoy1 ( 117, 7 ) = 0 +xyphendoy1 ( 117, 8 ) = 0 + + ! xlat 2.25000000000000 +greenupxy ( 116, 1 ) = 67 +greenupxy ( 116, 2 ) = 35 +greenupxy ( 116, 3 ) = 3 +greenupxy ( 116, 4 ) = 26 +greenupxy ( 116, 5 ) = 26 +greenupxy ( 116, 6 ) = 26 +greenupxy ( 116, 7 ) = 48 +greenupxy ( 116, 8 ) = 48 +fallxy ( 116, 1 ) = 245 +fallxy ( 116, 2 ) = 240 +fallxy ( 116, 3 ) = 88 +fallxy ( 116, 4 ) = 226 +fallxy ( 116, 5 ) = 226 +fallxy ( 116, 6 ) = 226 +fallxy ( 116, 7 ) = 249 +fallxy ( 116, 8 ) = 249 +xyphendoy1 ( 116, 1 ) = 0 +xyphendoy1 ( 116, 2 ) = 0 +xyphendoy1 ( 116, 3 ) = 0 +xyphendoy1 ( 116, 4 ) = 0 +xyphendoy1 ( 116, 5 ) = 0 +xyphendoy1 ( 116, 6 ) = 0 +xyphendoy1 ( 116, 7 ) = 0 +xyphendoy1 ( 116, 8 ) = 0 + + ! xlat 1.75000000000000 +greenupxy ( 115, 1 ) = 51 +greenupxy ( 115, 2 ) = 24 +greenupxy ( 115, 3 ) = 363 +greenupxy ( 115, 4 ) = 19 +greenupxy ( 115, 5 ) = 19 +greenupxy ( 115, 6 ) = 19 +greenupxy ( 115, 7 ) = 38 +greenupxy ( 115, 8 ) = 38 +fallxy ( 115, 1 ) = 231 +fallxy ( 115, 2 ) = 226 +fallxy ( 115, 3 ) = 87 +fallxy ( 115, 4 ) = 210 +fallxy ( 115, 5 ) = 210 +fallxy ( 115, 6 ) = 210 +fallxy ( 115, 7 ) = 242 +fallxy ( 115, 8 ) = 242 +xyphendoy1 ( 115, 1 ) = 0 +xyphendoy1 ( 115, 2 ) = 0 +xyphendoy1 ( 115, 3 ) = 2 +xyphendoy1 ( 115, 4 ) = 0 +xyphendoy1 ( 115, 5 ) = 0 +xyphendoy1 ( 115, 6 ) = 0 +xyphendoy1 ( 115, 7 ) = 0 +xyphendoy1 ( 115, 8 ) = 0 + + ! xlat 1.25000000000000 +greenupxy ( 114, 1 ) = 58 +greenupxy ( 114, 2 ) = 15 +greenupxy ( 114, 3 ) = 360 +greenupxy ( 114, 4 ) = 10 +greenupxy ( 114, 5 ) = 10 +greenupxy ( 114, 6 ) = 10 +greenupxy ( 114, 7 ) = 30 +greenupxy ( 114, 8 ) = 30 +fallxy ( 114, 1 ) = 231 +fallxy ( 114, 2 ) = 211 +fallxy ( 114, 3 ) = 91 +fallxy ( 114, 4 ) = 194 +fallxy ( 114, 5 ) = 194 +fallxy ( 114, 6 ) = 194 +fallxy ( 114, 7 ) = 233 +fallxy ( 114, 8 ) = 233 +xyphendoy1 ( 114, 1 ) = 0 +xyphendoy1 ( 114, 2 ) = 0 +xyphendoy1 ( 114, 3 ) = 2 +xyphendoy1 ( 114, 4 ) = 0 +xyphendoy1 ( 114, 5 ) = 0 +xyphendoy1 ( 114, 6 ) = 0 +xyphendoy1 ( 114, 7 ) = 0 +xyphendoy1 ( 114, 8 ) = 0 + + ! xlat 0.750000000000000 +greenupxy ( 113, 1 ) = 67 +greenupxy ( 113, 2 ) = 5 +greenupxy ( 113, 3 ) = 358 +greenupxy ( 113, 4 ) = 4 +greenupxy ( 113, 5 ) = 4 +greenupxy ( 113, 6 ) = 4 +greenupxy ( 113, 7 ) = 21 +greenupxy ( 113, 8 ) = 21 +fallxy ( 113, 1 ) = 207 +fallxy ( 113, 2 ) = 196 +fallxy ( 113, 3 ) = 95 +fallxy ( 113, 4 ) = 176 +fallxy ( 113, 5 ) = 176 +fallxy ( 113, 6 ) = 176 +fallxy ( 113, 7 ) = 222 +fallxy ( 113, 8 ) = 222 +xyphendoy1 ( 113, 1 ) = 0 +xyphendoy1 ( 113, 2 ) = 0 +xyphendoy1 ( 113, 3 ) = 2 +xyphendoy1 ( 113, 4 ) = 0 +xyphendoy1 ( 113, 5 ) = 0 +xyphendoy1 ( 113, 6 ) = 0 +xyphendoy1 ( 113, 7 ) = 0 +xyphendoy1 ( 113, 8 ) = 0 + + ! xlat 0.250000000000000 +greenupxy ( 112, 1 ) = 67 +greenupxy ( 112, 2 ) = 365 +greenupxy ( 112, 3 ) = 357 +greenupxy ( 112, 4 ) = 364 +greenupxy ( 112, 5 ) = 364 +greenupxy ( 112, 6 ) = 364 +greenupxy ( 112, 7 ) = 15 +greenupxy ( 112, 8 ) = 15 +fallxy ( 112, 1 ) = 207 +fallxy ( 112, 2 ) = 179 +fallxy ( 112, 3 ) = 85 +fallxy ( 112, 4 ) = 157 +fallxy ( 112, 5 ) = 157 +fallxy ( 112, 6 ) = 157 +fallxy ( 112, 7 ) = 213 +fallxy ( 112, 8 ) = 213 +xyphendoy1 ( 112, 1 ) = 0 +xyphendoy1 ( 112, 2 ) = 2 +xyphendoy1 ( 112, 3 ) = 2 +xyphendoy1 ( 112, 4 ) = 2 +xyphendoy1 ( 112, 5 ) = 2 +xyphendoy1 ( 112, 6 ) = 2 +xyphendoy1 ( 112, 7 ) = 0 +xyphendoy1 ( 112, 8 ) = 0 + + ! xlat -0.250000000000000 +greenupxy ( 111, 1 ) = 67 +greenupxy ( 111, 2 ) = 359 +greenupxy ( 111, 3 ) = 355 +greenupxy ( 111, 4 ) = 360 +greenupxy ( 111, 5 ) = 360 +greenupxy ( 111, 6 ) = 360 +greenupxy ( 111, 7 ) = 13 +greenupxy ( 111, 8 ) = 13 +fallxy ( 111, 1 ) = 207 +fallxy ( 111, 2 ) = 164 +fallxy ( 111, 3 ) = 86 +fallxy ( 111, 4 ) = 140 +fallxy ( 111, 5 ) = 140 +fallxy ( 111, 6 ) = 140 +fallxy ( 111, 7 ) = 202 +fallxy ( 111, 8 ) = 202 +xyphendoy1 ( 111, 1 ) = 0 +xyphendoy1 ( 111, 2 ) = 2 +xyphendoy1 ( 111, 3 ) = 2 +xyphendoy1 ( 111, 4 ) = 2 +xyphendoy1 ( 111, 5 ) = 2 +xyphendoy1 ( 111, 6 ) = 2 +xyphendoy1 ( 111, 7 ) = 0 +xyphendoy1 ( 111, 8 ) = 0 + + ! xlat -0.750000000000000 +greenupxy ( 110, 1 ) = 67 +greenupxy ( 110, 2 ) = 345 +greenupxy ( 110, 3 ) = 353 +greenupxy ( 110, 4 ) = 358 +greenupxy ( 110, 5 ) = 358 +greenupxy ( 110, 6 ) = 358 +greenupxy ( 110, 7 ) = 5 +greenupxy ( 110, 8 ) = 5 +fallxy ( 110, 1 ) = 207 +fallxy ( 110, 2 ) = 148 +fallxy ( 110, 3 ) = 90 +fallxy ( 110, 4 ) = 124 +fallxy ( 110, 5 ) = 124 +fallxy ( 110, 6 ) = 124 +fallxy ( 110, 7 ) = 192 +fallxy ( 110, 8 ) = 192 +xyphendoy1 ( 110, 1 ) = 0 +xyphendoy1 ( 110, 2 ) = 2 +xyphendoy1 ( 110, 3 ) = 2 +xyphendoy1 ( 110, 4 ) = 2 +xyphendoy1 ( 110, 5 ) = 2 +xyphendoy1 ( 110, 6 ) = 2 +xyphendoy1 ( 110, 7 ) = 0 +xyphendoy1 ( 110, 8 ) = 0 + + ! xlat -1.25000000000000 +greenupxy ( 109, 1 ) = 67 +greenupxy ( 109, 2 ) = 329 +greenupxy ( 109, 3 ) = 353 +greenupxy ( 109, 4 ) = 356 +greenupxy ( 109, 5 ) = 356 +greenupxy ( 109, 6 ) = 356 +greenupxy ( 109, 7 ) = 363 +greenupxy ( 109, 8 ) = 363 +fallxy ( 109, 1 ) = 207 +fallxy ( 109, 2 ) = 143 +fallxy ( 109, 3 ) = 93 +fallxy ( 109, 4 ) = 124 +fallxy ( 109, 5 ) = 124 +fallxy ( 109, 6 ) = 124 +fallxy ( 109, 7 ) = 187 +fallxy ( 109, 8 ) = 187 +xyphendoy1 ( 109, 1 ) = 0 +xyphendoy1 ( 109, 2 ) = 2 +xyphendoy1 ( 109, 3 ) = 2 +xyphendoy1 ( 109, 4 ) = 2 +xyphendoy1 ( 109, 5 ) = 2 +xyphendoy1 ( 109, 6 ) = 2 +xyphendoy1 ( 109, 7 ) = 2 +xyphendoy1 ( 109, 8 ) = 2 + + ! xlat -1.75000000000000 +greenupxy ( 108, 1 ) = 48 +greenupxy ( 108, 2 ) = 314 +greenupxy ( 108, 3 ) = 353 +greenupxy ( 108, 4 ) = 355 +greenupxy ( 108, 5 ) = 355 +greenupxy ( 108, 6 ) = 355 +greenupxy ( 108, 7 ) = 354 +greenupxy ( 108, 8 ) = 354 +fallxy ( 108, 1 ) = 187 +fallxy ( 108, 2 ) = 139 +fallxy ( 108, 3 ) = 95 +fallxy ( 108, 4 ) = 124 +fallxy ( 108, 5 ) = 124 +fallxy ( 108, 6 ) = 124 +fallxy ( 108, 7 ) = 177 +fallxy ( 108, 8 ) = 177 +xyphendoy1 ( 108, 1 ) = 0 +xyphendoy1 ( 108, 2 ) = 2 +xyphendoy1 ( 108, 3 ) = 2 +xyphendoy1 ( 108, 4 ) = 2 +xyphendoy1 ( 108, 5 ) = 2 +xyphendoy1 ( 108, 6 ) = 2 +xyphendoy1 ( 108, 7 ) = 2 +xyphendoy1 ( 108, 8 ) = 2 + + ! xlat -2.25000000000000 +greenupxy ( 107, 1 ) = 48 +greenupxy ( 107, 2 ) = 297 +greenupxy ( 107, 3 ) = 351 +greenupxy ( 107, 4 ) = 355 +greenupxy ( 107, 5 ) = 355 +greenupxy ( 107, 6 ) = 355 +greenupxy ( 107, 7 ) = 345 +greenupxy ( 107, 8 ) = 345 +fallxy ( 107, 1 ) = 187 +fallxy ( 107, 2 ) = 135 +fallxy ( 107, 3 ) = 97 +fallxy ( 107, 4 ) = 124 +fallxy ( 107, 5 ) = 124 +fallxy ( 107, 6 ) = 124 +fallxy ( 107, 7 ) = 164 +fallxy ( 107, 8 ) = 164 +xyphendoy1 ( 107, 1 ) = 0 +xyphendoy1 ( 107, 2 ) = 2 +xyphendoy1 ( 107, 3 ) = 2 +xyphendoy1 ( 107, 4 ) = 2 +xyphendoy1 ( 107, 5 ) = 2 +xyphendoy1 ( 107, 6 ) = 2 +xyphendoy1 ( 107, 7 ) = 2 +xyphendoy1 ( 107, 8 ) = 2 + + ! xlat -2.75000000000000 +greenupxy ( 106, 1 ) = 33 +greenupxy ( 106, 2 ) = 293 +greenupxy ( 106, 3 ) = 349 +greenupxy ( 106, 4 ) = 351 +greenupxy ( 106, 5 ) = 351 +greenupxy ( 106, 6 ) = 351 +greenupxy ( 106, 7 ) = 336 +greenupxy ( 106, 8 ) = 336 +fallxy ( 106, 1 ) = 162 +fallxy ( 106, 2 ) = 131 +fallxy ( 106, 3 ) = 98 +fallxy ( 106, 4 ) = 123 +fallxy ( 106, 5 ) = 123 +fallxy ( 106, 6 ) = 123 +fallxy ( 106, 7 ) = 152 +fallxy ( 106, 8 ) = 152 +xyphendoy1 ( 106, 1 ) = 0 +xyphendoy1 ( 106, 2 ) = 2 +xyphendoy1 ( 106, 3 ) = 2 +xyphendoy1 ( 106, 4 ) = 2 +xyphendoy1 ( 106, 5 ) = 2 +xyphendoy1 ( 106, 6 ) = 2 +xyphendoy1 ( 106, 7 ) = 2 +xyphendoy1 ( 106, 8 ) = 2 + + ! xlat -3.25000000000000 +greenupxy ( 105, 1 ) = 26 +greenupxy ( 105, 2 ) = 289 +greenupxy ( 105, 3 ) = 347 +greenupxy ( 105, 4 ) = 347 +greenupxy ( 105, 5 ) = 347 +greenupxy ( 105, 6 ) = 347 +greenupxy ( 105, 7 ) = 327 +greenupxy ( 105, 8 ) = 327 +fallxy ( 105, 1 ) = 151 +fallxy ( 105, 2 ) = 119 +fallxy ( 105, 3 ) = 100 +fallxy ( 105, 4 ) = 122 +fallxy ( 105, 5 ) = 122 +fallxy ( 105, 6 ) = 122 +fallxy ( 105, 7 ) = 142 +fallxy ( 105, 8 ) = 142 +xyphendoy1 ( 105, 1 ) = 0 +xyphendoy1 ( 105, 2 ) = 2 +xyphendoy1 ( 105, 3 ) = 2 +xyphendoy1 ( 105, 4 ) = 2 +xyphendoy1 ( 105, 5 ) = 2 +xyphendoy1 ( 105, 6 ) = 2 +xyphendoy1 ( 105, 7 ) = 2 +xyphendoy1 ( 105, 8 ) = 2 + + ! xlat -3.75000000000000 +greenupxy ( 104, 1 ) = 26 +greenupxy ( 104, 2 ) = 285 +greenupxy ( 104, 3 ) = 347 +greenupxy ( 104, 4 ) = 345 +greenupxy ( 104, 5 ) = 345 +greenupxy ( 104, 6 ) = 345 +greenupxy ( 104, 7 ) = 323 +greenupxy ( 104, 8 ) = 323 +fallxy ( 104, 1 ) = 151 +fallxy ( 104, 2 ) = 108 +fallxy ( 104, 3 ) = 102 +fallxy ( 104, 4 ) = 121 +fallxy ( 104, 5 ) = 121 +fallxy ( 104, 6 ) = 121 +fallxy ( 104, 7 ) = 132 +fallxy ( 104, 8 ) = 132 +xyphendoy1 ( 104, 1 ) = 0 +xyphendoy1 ( 104, 2 ) = 2 +xyphendoy1 ( 104, 3 ) = 2 +xyphendoy1 ( 104, 4 ) = 2 +xyphendoy1 ( 104, 5 ) = 2 +xyphendoy1 ( 104, 6 ) = 2 +xyphendoy1 ( 104, 7 ) = 2 +xyphendoy1 ( 104, 8 ) = 2 + + ! xlat -4.25000000000000 +greenupxy ( 103, 1 ) = 26 +greenupxy ( 103, 2 ) = 281 +greenupxy ( 103, 3 ) = 345 +greenupxy ( 103, 4 ) = 343 +greenupxy ( 103, 5 ) = 343 +greenupxy ( 103, 6 ) = 343 +greenupxy ( 103, 7 ) = 320 +greenupxy ( 103, 8 ) = 320 +fallxy ( 103, 1 ) = 151 +fallxy ( 103, 2 ) = 106 +fallxy ( 103, 3 ) = 104 +fallxy ( 103, 4 ) = 120 +fallxy ( 103, 5 ) = 120 +fallxy ( 103, 6 ) = 120 +fallxy ( 103, 7 ) = 123 +fallxy ( 103, 8 ) = 123 +xyphendoy1 ( 103, 1 ) = 0 +xyphendoy1 ( 103, 2 ) = 2 +xyphendoy1 ( 103, 3 ) = 2 +xyphendoy1 ( 103, 4 ) = 2 +xyphendoy1 ( 103, 5 ) = 2 +xyphendoy1 ( 103, 6 ) = 2 +xyphendoy1 ( 103, 7 ) = 2 +xyphendoy1 ( 103, 8 ) = 2 + + ! xlat -4.75000000000000 +greenupxy ( 102, 1 ) = 362 +greenupxy ( 102, 2 ) = 278 +greenupxy ( 102, 3 ) = 344 +greenupxy ( 102, 4 ) = 341 +greenupxy ( 102, 5 ) = 341 +greenupxy ( 102, 6 ) = 341 +greenupxy ( 102, 7 ) = 320 +greenupxy ( 102, 8 ) = 320 +fallxy ( 102, 1 ) = 133 +fallxy ( 102, 2 ) = 104 +fallxy ( 102, 3 ) = 107 +fallxy ( 102, 4 ) = 119 +fallxy ( 102, 5 ) = 119 +fallxy ( 102, 6 ) = 119 +fallxy ( 102, 7 ) = 122 +fallxy ( 102, 8 ) = 122 +xyphendoy1 ( 102, 1 ) = 2 +xyphendoy1 ( 102, 2 ) = 2 +xyphendoy1 ( 102, 3 ) = 2 +xyphendoy1 ( 102, 4 ) = 2 +xyphendoy1 ( 102, 5 ) = 2 +xyphendoy1 ( 102, 6 ) = 2 +xyphendoy1 ( 102, 7 ) = 2 +xyphendoy1 ( 102, 8 ) = 2 + + ! xlat -5.25000000000000 +greenupxy ( 101, 1 ) = 362 +greenupxy ( 101, 2 ) = 271 +greenupxy ( 101, 3 ) = 347 +greenupxy ( 101, 4 ) = 343 +greenupxy ( 101, 5 ) = 343 +greenupxy ( 101, 6 ) = 343 +greenupxy ( 101, 7 ) = 318 +greenupxy ( 101, 8 ) = 318 +fallxy ( 101, 1 ) = 133 +fallxy ( 101, 2 ) = 102 +fallxy ( 101, 3 ) = 110 +fallxy ( 101, 4 ) = 119 +fallxy ( 101, 5 ) = 119 +fallxy ( 101, 6 ) = 119 +fallxy ( 101, 7 ) = 122 +fallxy ( 101, 8 ) = 122 +xyphendoy1 ( 101, 1 ) = 2 +xyphendoy1 ( 101, 2 ) = 2 +xyphendoy1 ( 101, 3 ) = 2 +xyphendoy1 ( 101, 4 ) = 2 +xyphendoy1 ( 101, 5 ) = 2 +xyphendoy1 ( 101, 6 ) = 2 +xyphendoy1 ( 101, 7 ) = 2 +xyphendoy1 ( 101, 8 ) = 2 + + ! xlat -5.75000000000000 +greenupxy ( 100, 1 ) = 355 +greenupxy ( 100, 2 ) = 265 +greenupxy ( 100, 3 ) = 348 +greenupxy ( 100, 4 ) = 339 +greenupxy ( 100, 5 ) = 339 +greenupxy ( 100, 6 ) = 339 +greenupxy ( 100, 7 ) = 316 +greenupxy ( 100, 8 ) = 316 +fallxy ( 100, 1 ) = 131 +fallxy ( 100, 2 ) = 97 +fallxy ( 100, 3 ) = 112 +fallxy ( 100, 4 ) = 120 +fallxy ( 100, 5 ) = 120 +fallxy ( 100, 6 ) = 120 +fallxy ( 100, 7 ) = 118 +fallxy ( 100, 8 ) = 118 +xyphendoy1 ( 100, 1 ) = 2 +xyphendoy1 ( 100, 2 ) = 2 +xyphendoy1 ( 100, 3 ) = 2 +xyphendoy1 ( 100, 4 ) = 2 +xyphendoy1 ( 100, 5 ) = 2 +xyphendoy1 ( 100, 6 ) = 2 +xyphendoy1 ( 100, 7 ) = 2 +xyphendoy1 ( 100, 8 ) = 2 + + ! xlat -6.25000000000000 +greenupxy ( 99, 1 ) = 349 +greenupxy ( 99, 2 ) = 260 +greenupxy ( 99, 3 ) = 349 +greenupxy ( 99, 4 ) = 338 +greenupxy ( 99, 5 ) = 338 +greenupxy ( 99, 6 ) = 338 +greenupxy ( 99, 7 ) = 316 +greenupxy ( 99, 8 ) = 316 +fallxy ( 99, 1 ) = 131 +fallxy ( 99, 2 ) = 92 +fallxy ( 99, 3 ) = 109 +fallxy ( 99, 4 ) = 117 +fallxy ( 99, 5 ) = 117 +fallxy ( 99, 6 ) = 117 +fallxy ( 99, 7 ) = 116 +fallxy ( 99, 8 ) = 116 +xyphendoy1 ( 99, 1 ) = 2 +xyphendoy1 ( 99, 2 ) = 2 +xyphendoy1 ( 99, 3 ) = 2 +xyphendoy1 ( 99, 4 ) = 2 +xyphendoy1 ( 99, 5 ) = 2 +xyphendoy1 ( 99, 6 ) = 2 +xyphendoy1 ( 99, 7 ) = 2 +xyphendoy1 ( 99, 8 ) = 2 + + ! xlat -6.75000000000000 +greenupxy ( 98, 1 ) = 349 +greenupxy ( 98, 2 ) = 257 +greenupxy ( 98, 3 ) = 350 +greenupxy ( 98, 4 ) = 338 +greenupxy ( 98, 5 ) = 338 +greenupxy ( 98, 6 ) = 338 +greenupxy ( 98, 7 ) = 316 +greenupxy ( 98, 8 ) = 316 +fallxy ( 98, 1 ) = 131 +fallxy ( 98, 2 ) = 89 +fallxy ( 98, 3 ) = 111 +fallxy ( 98, 4 ) = 115 +fallxy ( 98, 5 ) = 115 +fallxy ( 98, 6 ) = 115 +fallxy ( 98, 7 ) = 114 +fallxy ( 98, 8 ) = 114 +xyphendoy1 ( 98, 1 ) = 2 +xyphendoy1 ( 98, 2 ) = 2 +xyphendoy1 ( 98, 3 ) = 2 +xyphendoy1 ( 98, 4 ) = 2 +xyphendoy1 ( 98, 5 ) = 2 +xyphendoy1 ( 98, 6 ) = 2 +xyphendoy1 ( 98, 7 ) = 2 +xyphendoy1 ( 98, 8 ) = 2 + + ! xlat -7.25000000000000 +greenupxy ( 97, 1 ) = 349 +greenupxy ( 97, 2 ) = 255 +greenupxy ( 97, 3 ) = 349 +greenupxy ( 97, 4 ) = 337 +greenupxy ( 97, 5 ) = 337 +greenupxy ( 97, 6 ) = 337 +greenupxy ( 97, 7 ) = 316 +greenupxy ( 97, 8 ) = 316 +fallxy ( 97, 1 ) = 131 +fallxy ( 97, 2 ) = 86 +fallxy ( 97, 3 ) = 109 +fallxy ( 97, 4 ) = 113 +fallxy ( 97, 5 ) = 113 +fallxy ( 97, 6 ) = 113 +fallxy ( 97, 7 ) = 112 +fallxy ( 97, 8 ) = 112 +xyphendoy1 ( 97, 1 ) = 2 +xyphendoy1 ( 97, 2 ) = 2 +xyphendoy1 ( 97, 3 ) = 2 +xyphendoy1 ( 97, 4 ) = 2 +xyphendoy1 ( 97, 5 ) = 2 +xyphendoy1 ( 97, 6 ) = 2 +xyphendoy1 ( 97, 7 ) = 2 +xyphendoy1 ( 97, 8 ) = 2 + + ! xlat -7.75000000000000 +greenupxy ( 96, 1 ) = 344 +greenupxy ( 96, 2 ) = 253 +greenupxy ( 96, 3 ) = 346 +greenupxy ( 96, 4 ) = 334 +greenupxy ( 96, 5 ) = 334 +greenupxy ( 96, 6 ) = 334 +greenupxy ( 96, 7 ) = 315 +greenupxy ( 96, 8 ) = 315 +fallxy ( 96, 1 ) = 127 +fallxy ( 96, 2 ) = 84 +fallxy ( 96, 3 ) = 107 +fallxy ( 96, 4 ) = 111 +fallxy ( 96, 5 ) = 111 +fallxy ( 96, 6 ) = 111 +fallxy ( 96, 7 ) = 110 +fallxy ( 96, 8 ) = 110 +xyphendoy1 ( 96, 1 ) = 2 +xyphendoy1 ( 96, 2 ) = 2 +xyphendoy1 ( 96, 3 ) = 2 +xyphendoy1 ( 96, 4 ) = 2 +xyphendoy1 ( 96, 5 ) = 2 +xyphendoy1 ( 96, 6 ) = 2 +xyphendoy1 ( 96, 7 ) = 2 +xyphendoy1 ( 96, 8 ) = 2 + + ! xlat -8.25000000000000 +greenupxy ( 95, 1 ) = 344 +greenupxy ( 95, 2 ) = 254 +greenupxy ( 95, 3 ) = 342 +greenupxy ( 95, 4 ) = 331 +greenupxy ( 95, 5 ) = 331 +greenupxy ( 95, 6 ) = 331 +greenupxy ( 95, 7 ) = 315 +greenupxy ( 95, 8 ) = 315 +fallxy ( 95, 1 ) = 127 +fallxy ( 95, 2 ) = 81 +fallxy ( 95, 3 ) = 107 +fallxy ( 95, 4 ) = 110 +fallxy ( 95, 5 ) = 110 +fallxy ( 95, 6 ) = 110 +fallxy ( 95, 7 ) = 106 +fallxy ( 95, 8 ) = 106 +xyphendoy1 ( 95, 1 ) = 2 +xyphendoy1 ( 95, 2 ) = 2 +xyphendoy1 ( 95, 3 ) = 2 +xyphendoy1 ( 95, 4 ) = 2 +xyphendoy1 ( 95, 5 ) = 2 +xyphendoy1 ( 95, 6 ) = 2 +xyphendoy1 ( 95, 7 ) = 2 +xyphendoy1 ( 95, 8 ) = 2 + + ! xlat -8.75000000000000 +greenupxy ( 94, 1 ) = 343 +greenupxy ( 94, 2 ) = 254 +greenupxy ( 94, 3 ) = 339 +greenupxy ( 94, 4 ) = 327 +greenupxy ( 94, 5 ) = 327 +greenupxy ( 94, 6 ) = 327 +greenupxy ( 94, 7 ) = 314 +greenupxy ( 94, 8 ) = 314 +fallxy ( 94, 1 ) = 125 +fallxy ( 94, 2 ) = 78 +fallxy ( 94, 3 ) = 106 +fallxy ( 94, 4 ) = 108 +fallxy ( 94, 5 ) = 108 +fallxy ( 94, 6 ) = 108 +fallxy ( 94, 7 ) = 105 +fallxy ( 94, 8 ) = 105 +xyphendoy1 ( 94, 1 ) = 2 +xyphendoy1 ( 94, 2 ) = 2 +xyphendoy1 ( 94, 3 ) = 2 +xyphendoy1 ( 94, 4 ) = 2 +xyphendoy1 ( 94, 5 ) = 2 +xyphendoy1 ( 94, 6 ) = 2 +xyphendoy1 ( 94, 7 ) = 2 +xyphendoy1 ( 94, 8 ) = 2 + + ! xlat -9.25000000000000 +greenupxy ( 93, 1 ) = 343 +greenupxy ( 93, 2 ) = 254 +greenupxy ( 93, 3 ) = 335 +greenupxy ( 93, 4 ) = 324 +greenupxy ( 93, 5 ) = 324 +greenupxy ( 93, 6 ) = 324 +greenupxy ( 93, 7 ) = 313 +greenupxy ( 93, 8 ) = 313 +fallxy ( 93, 1 ) = 125 +fallxy ( 93, 2 ) = 76 +fallxy ( 93, 3 ) = 103 +fallxy ( 93, 4 ) = 106 +fallxy ( 93, 5 ) = 106 +fallxy ( 93, 6 ) = 106 +fallxy ( 93, 7 ) = 103 +fallxy ( 93, 8 ) = 103 +xyphendoy1 ( 93, 1 ) = 2 +xyphendoy1 ( 93, 2 ) = 2 +xyphendoy1 ( 93, 3 ) = 2 +xyphendoy1 ( 93, 4 ) = 2 +xyphendoy1 ( 93, 5 ) = 2 +xyphendoy1 ( 93, 6 ) = 2 +xyphendoy1 ( 93, 7 ) = 2 +xyphendoy1 ( 93, 8 ) = 2 + + ! xlat -9.75000000000000 +greenupxy ( 92, 1 ) = 343 +greenupxy ( 92, 2 ) = 255 +greenupxy ( 92, 3 ) = 331 +greenupxy ( 92, 4 ) = 321 +greenupxy ( 92, 5 ) = 321 +greenupxy ( 92, 6 ) = 321 +greenupxy ( 92, 7 ) = 311 +greenupxy ( 92, 8 ) = 311 +fallxy ( 92, 1 ) = 125 +fallxy ( 92, 2 ) = 74 +fallxy ( 92, 3 ) = 101 +fallxy ( 92, 4 ) = 104 +fallxy ( 92, 5 ) = 104 +fallxy ( 92, 6 ) = 104 +fallxy ( 92, 7 ) = 98 +fallxy ( 92, 8 ) = 98 +xyphendoy1 ( 92, 1 ) = 2 +xyphendoy1 ( 92, 2 ) = 2 +xyphendoy1 ( 92, 3 ) = 2 +xyphendoy1 ( 92, 4 ) = 2 +xyphendoy1 ( 92, 5 ) = 2 +xyphendoy1 ( 92, 6 ) = 2 +xyphendoy1 ( 92, 7 ) = 2 +xyphendoy1 ( 92, 8 ) = 2 + + ! xlat -10.2500000000000 +greenupxy ( 91, 1 ) = 337 +greenupxy ( 91, 2 ) = 255 +greenupxy ( 91, 3 ) = 327 +greenupxy ( 91, 4 ) = 318 +greenupxy ( 91, 5 ) = 318 +greenupxy ( 91, 6 ) = 318 +greenupxy ( 91, 7 ) = 311 +greenupxy ( 91, 8 ) = 311 +fallxy ( 91, 1 ) = 118 +fallxy ( 91, 2 ) = 72 +fallxy ( 91, 3 ) = 99 +fallxy ( 91, 4 ) = 102 +fallxy ( 91, 5 ) = 102 +fallxy ( 91, 6 ) = 102 +fallxy ( 91, 7 ) = 95 +fallxy ( 91, 8 ) = 95 +xyphendoy1 ( 91, 1 ) = 2 +xyphendoy1 ( 91, 2 ) = 2 +xyphendoy1 ( 91, 3 ) = 2 +xyphendoy1 ( 91, 4 ) = 2 +xyphendoy1 ( 91, 5 ) = 2 +xyphendoy1 ( 91, 6 ) = 2 +xyphendoy1 ( 91, 7 ) = 2 +xyphendoy1 ( 91, 8 ) = 2 + + ! xlat -10.7500000000000 +greenupxy ( 90, 1 ) = 333 +greenupxy ( 90, 2 ) = 258 +greenupxy ( 90, 3 ) = 323 +greenupxy ( 90, 4 ) = 315 +greenupxy ( 90, 5 ) = 315 +greenupxy ( 90, 6 ) = 315 +greenupxy ( 90, 7 ) = 311 +greenupxy ( 90, 8 ) = 311 +fallxy ( 90, 1 ) = 112 +fallxy ( 90, 2 ) = 71 +fallxy ( 90, 3 ) = 97 +fallxy ( 90, 4 ) = 101 +fallxy ( 90, 5 ) = 101 +fallxy ( 90, 6 ) = 101 +fallxy ( 90, 7 ) = 92 +fallxy ( 90, 8 ) = 92 +xyphendoy1 ( 90, 1 ) = 2 +xyphendoy1 ( 90, 2 ) = 2 +xyphendoy1 ( 90, 3 ) = 2 +xyphendoy1 ( 90, 4 ) = 2 +xyphendoy1 ( 90, 5 ) = 2 +xyphendoy1 ( 90, 6 ) = 2 +xyphendoy1 ( 90, 7 ) = 2 +xyphendoy1 ( 90, 8 ) = 2 + + ! xlat -11.2500000000000 +greenupxy ( 89, 1 ) = 333 +greenupxy ( 89, 2 ) = 262 +greenupxy ( 89, 3 ) = 321 +greenupxy ( 89, 4 ) = 313 +greenupxy ( 89, 5 ) = 313 +greenupxy ( 89, 6 ) = 313 +greenupxy ( 89, 7 ) = 310 +greenupxy ( 89, 8 ) = 310 +fallxy ( 89, 1 ) = 112 +fallxy ( 89, 2 ) = 71 +fallxy ( 89, 3 ) = 96 +fallxy ( 89, 4 ) = 99 +fallxy ( 89, 5 ) = 99 +fallxy ( 89, 6 ) = 99 +fallxy ( 89, 7 ) = 90 +fallxy ( 89, 8 ) = 90 +xyphendoy1 ( 89, 1 ) = 2 +xyphendoy1 ( 89, 2 ) = 2 +xyphendoy1 ( 89, 3 ) = 2 +xyphendoy1 ( 89, 4 ) = 2 +xyphendoy1 ( 89, 5 ) = 2 +xyphendoy1 ( 89, 6 ) = 2 +xyphendoy1 ( 89, 7 ) = 2 +xyphendoy1 ( 89, 8 ) = 2 + + ! xlat -11.7500000000000 +greenupxy ( 88, 1 ) = 328 +greenupxy ( 88, 2 ) = 266 +greenupxy ( 88, 3 ) = 319 +greenupxy ( 88, 4 ) = 311 +greenupxy ( 88, 5 ) = 311 +greenupxy ( 88, 6 ) = 311 +greenupxy ( 88, 7 ) = 309 +greenupxy ( 88, 8 ) = 309 +fallxy ( 88, 1 ) = 104 +fallxy ( 88, 2 ) = 72 +fallxy ( 88, 3 ) = 95 +fallxy ( 88, 4 ) = 98 +fallxy ( 88, 5 ) = 98 +fallxy ( 88, 6 ) = 98 +fallxy ( 88, 7 ) = 89 +fallxy ( 88, 8 ) = 89 +xyphendoy1 ( 88, 1 ) = 2 +xyphendoy1 ( 88, 2 ) = 2 +xyphendoy1 ( 88, 3 ) = 2 +xyphendoy1 ( 88, 4 ) = 2 +xyphendoy1 ( 88, 5 ) = 2 +xyphendoy1 ( 88, 6 ) = 2 +xyphendoy1 ( 88, 7 ) = 2 +xyphendoy1 ( 88, 8 ) = 2 + + ! xlat -12.2500000000000 +greenupxy ( 87, 1 ) = 328 +greenupxy ( 87, 2 ) = 269 +greenupxy ( 87, 3 ) = 317 +greenupxy ( 87, 4 ) = 310 +greenupxy ( 87, 5 ) = 310 +greenupxy ( 87, 6 ) = 310 +greenupxy ( 87, 7 ) = 308 +greenupxy ( 87, 8 ) = 308 +fallxy ( 87, 1 ) = 104 +fallxy ( 87, 2 ) = 72 +fallxy ( 87, 3 ) = 94 +fallxy ( 87, 4 ) = 97 +fallxy ( 87, 5 ) = 97 +fallxy ( 87, 6 ) = 97 +fallxy ( 87, 7 ) = 87 +fallxy ( 87, 8 ) = 87 +xyphendoy1 ( 87, 1 ) = 2 +xyphendoy1 ( 87, 2 ) = 2 +xyphendoy1 ( 87, 3 ) = 2 +xyphendoy1 ( 87, 4 ) = 2 +xyphendoy1 ( 87, 5 ) = 2 +xyphendoy1 ( 87, 6 ) = 2 +xyphendoy1 ( 87, 7 ) = 2 +xyphendoy1 ( 87, 8 ) = 2 + + ! xlat -12.7500000000000 +greenupxy ( 86, 1 ) = 328 +greenupxy ( 86, 2 ) = 272 +greenupxy ( 86, 3 ) = 316 +greenupxy ( 86, 4 ) = 309 +greenupxy ( 86, 5 ) = 309 +greenupxy ( 86, 6 ) = 309 +greenupxy ( 86, 7 ) = 307 +greenupxy ( 86, 8 ) = 307 +fallxy ( 86, 1 ) = 104 +fallxy ( 86, 2 ) = 72 +fallxy ( 86, 3 ) = 94 +fallxy ( 86, 4 ) = 96 +fallxy ( 86, 5 ) = 96 +fallxy ( 86, 6 ) = 96 +fallxy ( 86, 7 ) = 85 +fallxy ( 86, 8 ) = 85 +xyphendoy1 ( 86, 1 ) = 2 +xyphendoy1 ( 86, 2 ) = 2 +xyphendoy1 ( 86, 3 ) = 2 +xyphendoy1 ( 86, 4 ) = 2 +xyphendoy1 ( 86, 5 ) = 2 +xyphendoy1 ( 86, 6 ) = 2 +xyphendoy1 ( 86, 7 ) = 2 +xyphendoy1 ( 86, 8 ) = 2 + + ! xlat -13.2500000000000 +greenupxy ( 85, 1 ) = 326 +greenupxy ( 85, 2 ) = 275 +greenupxy ( 85, 3 ) = 316 +greenupxy ( 85, 4 ) = 309 +greenupxy ( 85, 5 ) = 309 +greenupxy ( 85, 6 ) = 309 +greenupxy ( 85, 7 ) = 306 +greenupxy ( 85, 8 ) = 306 +fallxy ( 85, 1 ) = 105 +fallxy ( 85, 2 ) = 72 +fallxy ( 85, 3 ) = 94 +fallxy ( 85, 4 ) = 95 +fallxy ( 85, 5 ) = 95 +fallxy ( 85, 6 ) = 95 +fallxy ( 85, 7 ) = 83 +fallxy ( 85, 8 ) = 83 +xyphendoy1 ( 85, 1 ) = 2 +xyphendoy1 ( 85, 2 ) = 2 +xyphendoy1 ( 85, 3 ) = 2 +xyphendoy1 ( 85, 4 ) = 2 +xyphendoy1 ( 85, 5 ) = 2 +xyphendoy1 ( 85, 6 ) = 2 +xyphendoy1 ( 85, 7 ) = 2 +xyphendoy1 ( 85, 8 ) = 2 + + ! xlat -13.7500000000000 +greenupxy ( 84, 1 ) = 321 +greenupxy ( 84, 2 ) = 277 +greenupxy ( 84, 3 ) = 317 +greenupxy ( 84, 4 ) = 311 +greenupxy ( 84, 5 ) = 311 +greenupxy ( 84, 6 ) = 311 +greenupxy ( 84, 7 ) = 305 +greenupxy ( 84, 8 ) = 305 +fallxy ( 84, 1 ) = 97 +fallxy ( 84, 2 ) = 73 +fallxy ( 84, 3 ) = 93 +fallxy ( 84, 4 ) = 94 +fallxy ( 84, 5 ) = 94 +fallxy ( 84, 6 ) = 94 +fallxy ( 84, 7 ) = 80 +fallxy ( 84, 8 ) = 80 +xyphendoy1 ( 84, 1 ) = 2 +xyphendoy1 ( 84, 2 ) = 2 +xyphendoy1 ( 84, 3 ) = 2 +xyphendoy1 ( 84, 4 ) = 2 +xyphendoy1 ( 84, 5 ) = 2 +xyphendoy1 ( 84, 6 ) = 2 +xyphendoy1 ( 84, 7 ) = 2 +xyphendoy1 ( 84, 8 ) = 2 + + ! xlat -14.2500000000000 +greenupxy ( 83, 1 ) = 320 +greenupxy ( 83, 2 ) = 279 +greenupxy ( 83, 3 ) = 318 +greenupxy ( 83, 4 ) = 313 +greenupxy ( 83, 5 ) = 313 +greenupxy ( 83, 6 ) = 313 +greenupxy ( 83, 7 ) = 304 +greenupxy ( 83, 8 ) = 304 +fallxy ( 83, 1 ) = 93 +fallxy ( 83, 2 ) = 74 +fallxy ( 83, 3 ) = 93 +fallxy ( 83, 4 ) = 93 +fallxy ( 83, 5 ) = 93 +fallxy ( 83, 6 ) = 93 +fallxy ( 83, 7 ) = 79 +fallxy ( 83, 8 ) = 79 +xyphendoy1 ( 83, 1 ) = 2 +xyphendoy1 ( 83, 2 ) = 2 +xyphendoy1 ( 83, 3 ) = 2 +xyphendoy1 ( 83, 4 ) = 2 +xyphendoy1 ( 83, 5 ) = 2 +xyphendoy1 ( 83, 6 ) = 2 +xyphendoy1 ( 83, 7 ) = 2 +xyphendoy1 ( 83, 8 ) = 2 + + ! xlat -14.7500000000000 +greenupxy ( 82, 1 ) = 320 +greenupxy ( 82, 2 ) = 282 +greenupxy ( 82, 3 ) = 321 +greenupxy ( 82, 4 ) = 316 +greenupxy ( 82, 5 ) = 316 +greenupxy ( 82, 6 ) = 316 +greenupxy ( 82, 7 ) = 303 +greenupxy ( 82, 8 ) = 303 +fallxy ( 82, 1 ) = 93 +fallxy ( 82, 2 ) = 75 +fallxy ( 82, 3 ) = 92 +fallxy ( 82, 4 ) = 93 +fallxy ( 82, 5 ) = 93 +fallxy ( 82, 6 ) = 93 +fallxy ( 82, 7 ) = 78 +fallxy ( 82, 8 ) = 78 +xyphendoy1 ( 82, 1 ) = 2 +xyphendoy1 ( 82, 2 ) = 2 +xyphendoy1 ( 82, 3 ) = 2 +xyphendoy1 ( 82, 4 ) = 2 +xyphendoy1 ( 82, 5 ) = 2 +xyphendoy1 ( 82, 6 ) = 2 +xyphendoy1 ( 82, 7 ) = 2 +xyphendoy1 ( 82, 8 ) = 2 + + ! xlat -15.2500000000000 +greenupxy ( 81, 1 ) = 320 +greenupxy ( 81, 2 ) = 284 +greenupxy ( 81, 3 ) = 324 +greenupxy ( 81, 4 ) = 318 +greenupxy ( 81, 5 ) = 318 +greenupxy ( 81, 6 ) = 318 +greenupxy ( 81, 7 ) = 302 +greenupxy ( 81, 8 ) = 302 +fallxy ( 81, 1 ) = 93 +fallxy ( 81, 2 ) = 75 +fallxy ( 81, 3 ) = 92 +fallxy ( 81, 4 ) = 92 +fallxy ( 81, 5 ) = 92 +fallxy ( 81, 6 ) = 92 +fallxy ( 81, 7 ) = 77 +fallxy ( 81, 8 ) = 77 +xyphendoy1 ( 81, 1 ) = 2 +xyphendoy1 ( 81, 2 ) = 2 +xyphendoy1 ( 81, 3 ) = 2 +xyphendoy1 ( 81, 4 ) = 2 +xyphendoy1 ( 81, 5 ) = 2 +xyphendoy1 ( 81, 6 ) = 2 +xyphendoy1 ( 81, 7 ) = 2 +xyphendoy1 ( 81, 8 ) = 2 + + ! xlat -15.7500000000000 +greenupxy ( 80, 1 ) = 320 +greenupxy ( 80, 2 ) = 287 +greenupxy ( 80, 3 ) = 328 +greenupxy ( 80, 4 ) = 321 +greenupxy ( 80, 5 ) = 321 +greenupxy ( 80, 6 ) = 321 +greenupxy ( 80, 7 ) = 301 +greenupxy ( 80, 8 ) = 301 +fallxy ( 80, 1 ) = 93 +fallxy ( 80, 2 ) = 76 +fallxy ( 80, 3 ) = 92 +fallxy ( 80, 4 ) = 91 +fallxy ( 80, 5 ) = 91 +fallxy ( 80, 6 ) = 91 +fallxy ( 80, 7 ) = 76 +fallxy ( 80, 8 ) = 76 +xyphendoy1 ( 80, 1 ) = 2 +xyphendoy1 ( 80, 2 ) = 2 +xyphendoy1 ( 80, 3 ) = 2 +xyphendoy1 ( 80, 4 ) = 2 +xyphendoy1 ( 80, 5 ) = 2 +xyphendoy1 ( 80, 6 ) = 2 +xyphendoy1 ( 80, 7 ) = 2 +xyphendoy1 ( 80, 8 ) = 2 + + ! xlat -16.2500000000000 +greenupxy ( 79, 1 ) = 322 +greenupxy ( 79, 2 ) = 289 +greenupxy ( 79, 3 ) = 332 +greenupxy ( 79, 4 ) = 325 +greenupxy ( 79, 5 ) = 325 +greenupxy ( 79, 6 ) = 325 +greenupxy ( 79, 7 ) = 300 +greenupxy ( 79, 8 ) = 300 +fallxy ( 79, 1 ) = 94 +fallxy ( 79, 2 ) = 77 +fallxy ( 79, 3 ) = 92 +fallxy ( 79, 4 ) = 90 +fallxy ( 79, 5 ) = 90 +fallxy ( 79, 6 ) = 90 +fallxy ( 79, 7 ) = 77 +fallxy ( 79, 8 ) = 77 +xyphendoy1 ( 79, 1 ) = 2 +xyphendoy1 ( 79, 2 ) = 2 +xyphendoy1 ( 79, 3 ) = 2 +xyphendoy1 ( 79, 4 ) = 2 +xyphendoy1 ( 79, 5 ) = 2 +xyphendoy1 ( 79, 6 ) = 2 +xyphendoy1 ( 79, 7 ) = 2 +xyphendoy1 ( 79, 8 ) = 2 + + ! xlat -16.7500000000000 +greenupxy ( 78, 1 ) = 325 +greenupxy ( 78, 2 ) = 292 +greenupxy ( 78, 3 ) = 337 +greenupxy ( 78, 4 ) = 329 +greenupxy ( 78, 5 ) = 329 +greenupxy ( 78, 6 ) = 329 +greenupxy ( 78, 7 ) = 298 +greenupxy ( 78, 8 ) = 298 +fallxy ( 78, 1 ) = 96 +fallxy ( 78, 2 ) = 78 +fallxy ( 78, 3 ) = 91 +fallxy ( 78, 4 ) = 90 +fallxy ( 78, 5 ) = 90 +fallxy ( 78, 6 ) = 90 +fallxy ( 78, 7 ) = 77 +fallxy ( 78, 8 ) = 77 +xyphendoy1 ( 78, 1 ) = 2 +xyphendoy1 ( 78, 2 ) = 2 +xyphendoy1 ( 78, 3 ) = 2 +xyphendoy1 ( 78, 4 ) = 2 +xyphendoy1 ( 78, 5 ) = 2 +xyphendoy1 ( 78, 6 ) = 2 +xyphendoy1 ( 78, 7 ) = 2 +xyphendoy1 ( 78, 8 ) = 2 + + ! xlat -17.2500000000000 +greenupxy ( 77, 1 ) = 328 +greenupxy ( 77, 2 ) = 294 +greenupxy ( 77, 3 ) = 343 +greenupxy ( 77, 4 ) = 331 +greenupxy ( 77, 5 ) = 331 +greenupxy ( 77, 6 ) = 331 +greenupxy ( 77, 7 ) = 297 +greenupxy ( 77, 8 ) = 297 +fallxy ( 77, 1 ) = 93 +fallxy ( 77, 2 ) = 79 +fallxy ( 77, 3 ) = 91 +fallxy ( 77, 4 ) = 90 +fallxy ( 77, 5 ) = 90 +fallxy ( 77, 6 ) = 90 +fallxy ( 77, 7 ) = 78 +fallxy ( 77, 8 ) = 78 +xyphendoy1 ( 77, 1 ) = 2 +xyphendoy1 ( 77, 2 ) = 2 +xyphendoy1 ( 77, 3 ) = 2 +xyphendoy1 ( 77, 4 ) = 2 +xyphendoy1 ( 77, 5 ) = 2 +xyphendoy1 ( 77, 6 ) = 2 +xyphendoy1 ( 77, 7 ) = 2 +xyphendoy1 ( 77, 8 ) = 2 + + ! xlat -17.7500000000000 +greenupxy ( 76, 1 ) = 329 +greenupxy ( 76, 2 ) = 296 +greenupxy ( 76, 3 ) = 348 +greenupxy ( 76, 4 ) = 333 +greenupxy ( 76, 5 ) = 333 +greenupxy ( 76, 6 ) = 333 +greenupxy ( 76, 7 ) = 296 +greenupxy ( 76, 8 ) = 296 +fallxy ( 76, 1 ) = 97 +fallxy ( 76, 2 ) = 80 +fallxy ( 76, 3 ) = 91 +fallxy ( 76, 4 ) = 90 +fallxy ( 76, 5 ) = 90 +fallxy ( 76, 6 ) = 90 +fallxy ( 76, 7 ) = 79 +fallxy ( 76, 8 ) = 79 +xyphendoy1 ( 76, 1 ) = 2 +xyphendoy1 ( 76, 2 ) = 2 +xyphendoy1 ( 76, 3 ) = 2 +xyphendoy1 ( 76, 4 ) = 2 +xyphendoy1 ( 76, 5 ) = 2 +xyphendoy1 ( 76, 6 ) = 2 +xyphendoy1 ( 76, 7 ) = 2 +xyphendoy1 ( 76, 8 ) = 2 + + ! xlat -18.2500000000000 +greenupxy ( 75, 1 ) = 326 +greenupxy ( 75, 2 ) = 298 +greenupxy ( 75, 3 ) = 352 +greenupxy ( 75, 4 ) = 333 +greenupxy ( 75, 5 ) = 333 +greenupxy ( 75, 6 ) = 333 +greenupxy ( 75, 7 ) = 295 +greenupxy ( 75, 8 ) = 295 +fallxy ( 75, 1 ) = 94 +fallxy ( 75, 2 ) = 81 +fallxy ( 75, 3 ) = 91 +fallxy ( 75, 4 ) = 90 +fallxy ( 75, 5 ) = 90 +fallxy ( 75, 6 ) = 90 +fallxy ( 75, 7 ) = 79 +fallxy ( 75, 8 ) = 79 +xyphendoy1 ( 75, 1 ) = 2 +xyphendoy1 ( 75, 2 ) = 2 +xyphendoy1 ( 75, 3 ) = 2 +xyphendoy1 ( 75, 4 ) = 2 +xyphendoy1 ( 75, 5 ) = 2 +xyphendoy1 ( 75, 6 ) = 2 +xyphendoy1 ( 75, 7 ) = 2 +xyphendoy1 ( 75, 8 ) = 2 + + ! xlat -18.7500000000000 +greenupxy ( 74, 1 ) = 327 +greenupxy ( 74, 2 ) = 299 +greenupxy ( 74, 3 ) = 357 +greenupxy ( 74, 4 ) = 333 +greenupxy ( 74, 5 ) = 333 +greenupxy ( 74, 6 ) = 333 +greenupxy ( 74, 7 ) = 294 +greenupxy ( 74, 8 ) = 294 +fallxy ( 74, 1 ) = 92 +fallxy ( 74, 2 ) = 82 +fallxy ( 74, 3 ) = 93 +fallxy ( 74, 4 ) = 90 +fallxy ( 74, 5 ) = 90 +fallxy ( 74, 6 ) = 90 +fallxy ( 74, 7 ) = 80 +fallxy ( 74, 8 ) = 80 +xyphendoy1 ( 74, 1 ) = 2 +xyphendoy1 ( 74, 2 ) = 2 +xyphendoy1 ( 74, 3 ) = 2 +xyphendoy1 ( 74, 4 ) = 2 +xyphendoy1 ( 74, 5 ) = 2 +xyphendoy1 ( 74, 6 ) = 2 +xyphendoy1 ( 74, 7 ) = 2 +xyphendoy1 ( 74, 8 ) = 2 + + ! xlat -19.2500000000000 +greenupxy ( 73, 1 ) = 330 +greenupxy ( 73, 2 ) = 299 +greenupxy ( 73, 3 ) = 361 +greenupxy ( 73, 4 ) = 332 +greenupxy ( 73, 5 ) = 332 +greenupxy ( 73, 6 ) = 332 +greenupxy ( 73, 7 ) = 294 +greenupxy ( 73, 8 ) = 294 +fallxy ( 73, 1 ) = 94 +fallxy ( 73, 2 ) = 82 +fallxy ( 73, 3 ) = 93 +fallxy ( 73, 4 ) = 90 +fallxy ( 73, 5 ) = 90 +fallxy ( 73, 6 ) = 90 +fallxy ( 73, 7 ) = 80 +fallxy ( 73, 8 ) = 80 +xyphendoy1 ( 73, 1 ) = 2 +xyphendoy1 ( 73, 2 ) = 2 +xyphendoy1 ( 73, 3 ) = 2 +xyphendoy1 ( 73, 4 ) = 2 +xyphendoy1 ( 73, 5 ) = 2 +xyphendoy1 ( 73, 6 ) = 2 +xyphendoy1 ( 73, 7 ) = 2 +xyphendoy1 ( 73, 8 ) = 2 + + ! xlat -19.7500000000000 +greenupxy ( 72, 1 ) = 330 +greenupxy ( 72, 2 ) = 298 +greenupxy ( 72, 3 ) = 364 +greenupxy ( 72, 4 ) = 331 +greenupxy ( 72, 5 ) = 331 +greenupxy ( 72, 6 ) = 331 +greenupxy ( 72, 7 ) = 294 +greenupxy ( 72, 8 ) = 294 +fallxy ( 72, 1 ) = 99 +fallxy ( 72, 2 ) = 82 +fallxy ( 72, 3 ) = 94 +fallxy ( 72, 4 ) = 90 +fallxy ( 72, 5 ) = 90 +fallxy ( 72, 6 ) = 90 +fallxy ( 72, 7 ) = 80 +fallxy ( 72, 8 ) = 80 +xyphendoy1 ( 72, 1 ) = 2 +xyphendoy1 ( 72, 2 ) = 2 +xyphendoy1 ( 72, 3 ) = 2 +xyphendoy1 ( 72, 4 ) = 2 +xyphendoy1 ( 72, 5 ) = 2 +xyphendoy1 ( 72, 6 ) = 2 +xyphendoy1 ( 72, 7 ) = 2 +xyphendoy1 ( 72, 8 ) = 2 + + ! xlat -20.2500000000000 +greenupxy ( 71, 1 ) = 328 +greenupxy ( 71, 2 ) = 297 +greenupxy ( 71, 3 ) = 2 +greenupxy ( 71, 4 ) = 330 +greenupxy ( 71, 5 ) = 330 +greenupxy ( 71, 6 ) = 330 +greenupxy ( 71, 7 ) = 293 +greenupxy ( 71, 8 ) = 293 +fallxy ( 71, 1 ) = 101 +fallxy ( 71, 2 ) = 82 +fallxy ( 71, 3 ) = 95 +fallxy ( 71, 4 ) = 90 +fallxy ( 71, 5 ) = 90 +fallxy ( 71, 6 ) = 90 +fallxy ( 71, 7 ) = 80 +fallxy ( 71, 8 ) = 80 +xyphendoy1 ( 71, 1 ) = 2 +xyphendoy1 ( 71, 2 ) = 2 +xyphendoy1 ( 71, 3 ) = 0 +xyphendoy1 ( 71, 4 ) = 2 +xyphendoy1 ( 71, 5 ) = 2 +xyphendoy1 ( 71, 6 ) = 2 +xyphendoy1 ( 71, 7 ) = 2 +xyphendoy1 ( 71, 8 ) = 2 + + ! xlat -20.7500000000000 +greenupxy ( 70, 1 ) = 328 +greenupxy ( 70, 2 ) = 296 +greenupxy ( 70, 3 ) = 5 +greenupxy ( 70, 4 ) = 330 +greenupxy ( 70, 5 ) = 330 +greenupxy ( 70, 6 ) = 330 +greenupxy ( 70, 7 ) = 292 +greenupxy ( 70, 8 ) = 292 +fallxy ( 70, 1 ) = 101 +fallxy ( 70, 2 ) = 82 +fallxy ( 70, 3 ) = 96 +fallxy ( 70, 4 ) = 90 +fallxy ( 70, 5 ) = 90 +fallxy ( 70, 6 ) = 90 +fallxy ( 70, 7 ) = 80 +fallxy ( 70, 8 ) = 80 +xyphendoy1 ( 70, 1 ) = 2 +xyphendoy1 ( 70, 2 ) = 2 +xyphendoy1 ( 70, 3 ) = 0 +xyphendoy1 ( 70, 4 ) = 2 +xyphendoy1 ( 70, 5 ) = 2 +xyphendoy1 ( 70, 6 ) = 2 +xyphendoy1 ( 70, 7 ) = 2 +xyphendoy1 ( 70, 8 ) = 2 + + ! xlat -21.2500000000000 +greenupxy ( 69, 1 ) = 321 +greenupxy ( 69, 2 ) = 296 +greenupxy ( 69, 3 ) = 8 +greenupxy ( 69, 4 ) = 328 +greenupxy ( 69, 5 ) = 328 +greenupxy ( 69, 6 ) = 328 +greenupxy ( 69, 7 ) = 293 +greenupxy ( 69, 8 ) = 293 +fallxy ( 69, 1 ) = 99 +fallxy ( 69, 2 ) = 82 +fallxy ( 69, 3 ) = 98 +fallxy ( 69, 4 ) = 89 +fallxy ( 69, 5 ) = 89 +fallxy ( 69, 6 ) = 89 +fallxy ( 69, 7 ) = 81 +fallxy ( 69, 8 ) = 81 +xyphendoy1 ( 69, 1 ) = 2 +xyphendoy1 ( 69, 2 ) = 2 +xyphendoy1 ( 69, 3 ) = 0 +xyphendoy1 ( 69, 4 ) = 2 +xyphendoy1 ( 69, 5 ) = 2 +xyphendoy1 ( 69, 6 ) = 2 +xyphendoy1 ( 69, 7 ) = 2 +xyphendoy1 ( 69, 8 ) = 2 + + ! xlat -21.7500000000000 +greenupxy ( 68, 1 ) = 321 +greenupxy ( 68, 2 ) = 295 +greenupxy ( 68, 3 ) = 11 +greenupxy ( 68, 4 ) = 325 +greenupxy ( 68, 5 ) = 325 +greenupxy ( 68, 6 ) = 325 +greenupxy ( 68, 7 ) = 292 +greenupxy ( 68, 8 ) = 292 +fallxy ( 68, 1 ) = 96 +fallxy ( 68, 2 ) = 82 +fallxy ( 68, 3 ) = 101 +fallxy ( 68, 4 ) = 89 +fallxy ( 68, 5 ) = 89 +fallxy ( 68, 6 ) = 89 +fallxy ( 68, 7 ) = 82 +fallxy ( 68, 8 ) = 82 +xyphendoy1 ( 68, 1 ) = 2 +xyphendoy1 ( 68, 2 ) = 2 +xyphendoy1 ( 68, 3 ) = 0 +xyphendoy1 ( 68, 4 ) = 2 +xyphendoy1 ( 68, 5 ) = 2 +xyphendoy1 ( 68, 6 ) = 2 +xyphendoy1 ( 68, 7 ) = 2 +xyphendoy1 ( 68, 8 ) = 2 + + ! xlat -22.2500000000000 +greenupxy ( 67, 1 ) = 326 +greenupxy ( 67, 2 ) = 293 +greenupxy ( 67, 3 ) = 14 +greenupxy ( 67, 4 ) = 322 +greenupxy ( 67, 5 ) = 322 +greenupxy ( 67, 6 ) = 322 +greenupxy ( 67, 7 ) = 292 +greenupxy ( 67, 8 ) = 292 +fallxy ( 67, 1 ) = 106 +fallxy ( 67, 2 ) = 81 +fallxy ( 67, 3 ) = 104 +fallxy ( 67, 4 ) = 88 +fallxy ( 67, 5 ) = 88 +fallxy ( 67, 6 ) = 88 +fallxy ( 67, 7 ) = 82 +fallxy ( 67, 8 ) = 82 +xyphendoy1 ( 67, 1 ) = 2 +xyphendoy1 ( 67, 2 ) = 2 +xyphendoy1 ( 67, 3 ) = 0 +xyphendoy1 ( 67, 4 ) = 2 +xyphendoy1 ( 67, 5 ) = 2 +xyphendoy1 ( 67, 6 ) = 2 +xyphendoy1 ( 67, 7 ) = 2 +xyphendoy1 ( 67, 8 ) = 2 + + ! xlat -22.7500000000000 +greenupxy ( 66, 1 ) = 326 +greenupxy ( 66, 2 ) = 292 +greenupxy ( 66, 3 ) = 17 +greenupxy ( 66, 4 ) = 319 +greenupxy ( 66, 5 ) = 319 +greenupxy ( 66, 6 ) = 319 +greenupxy ( 66, 7 ) = 292 +greenupxy ( 66, 8 ) = 292 +fallxy ( 66, 1 ) = 106 +fallxy ( 66, 2 ) = 81 +fallxy ( 66, 3 ) = 107 +fallxy ( 66, 4 ) = 88 +fallxy ( 66, 5 ) = 88 +fallxy ( 66, 6 ) = 88 +fallxy ( 66, 7 ) = 82 +fallxy ( 66, 8 ) = 82 +xyphendoy1 ( 66, 1 ) = 2 +xyphendoy1 ( 66, 2 ) = 2 +xyphendoy1 ( 66, 3 ) = 0 +xyphendoy1 ( 66, 4 ) = 2 +xyphendoy1 ( 66, 5 ) = 2 +xyphendoy1 ( 66, 6 ) = 2 +xyphendoy1 ( 66, 7 ) = 2 +xyphendoy1 ( 66, 8 ) = 2 + + ! xlat -23.2500000000000 +greenupxy ( 65, 1 ) = 321 +greenupxy ( 65, 2 ) = 290 +greenupxy ( 65, 3 ) = 20 +greenupxy ( 65, 4 ) = 316 +greenupxy ( 65, 5 ) = 316 +greenupxy ( 65, 6 ) = 316 +greenupxy ( 65, 7 ) = 293 +greenupxy ( 65, 8 ) = 293 +fallxy ( 65, 1 ) = 107 +fallxy ( 65, 2 ) = 81 +fallxy ( 65, 3 ) = 111 +fallxy ( 65, 4 ) = 88 +fallxy ( 65, 5 ) = 88 +fallxy ( 65, 6 ) = 88 +fallxy ( 65, 7 ) = 82 +fallxy ( 65, 8 ) = 82 +xyphendoy1 ( 65, 1 ) = 2 +xyphendoy1 ( 65, 2 ) = 2 +xyphendoy1 ( 65, 3 ) = 0 +xyphendoy1 ( 65, 4 ) = 2 +xyphendoy1 ( 65, 5 ) = 2 +xyphendoy1 ( 65, 6 ) = 2 +xyphendoy1 ( 65, 7 ) = 2 +xyphendoy1 ( 65, 8 ) = 2 + + ! xlat -23.7500000000000 +greenupxy ( 64, 1 ) = 320 +greenupxy ( 64, 2 ) = 289 +greenupxy ( 64, 3 ) = 23 +greenupxy ( 64, 4 ) = 313 +greenupxy ( 64, 5 ) = 313 +greenupxy ( 64, 6 ) = 313 +greenupxy ( 64, 7 ) = 291 +greenupxy ( 64, 8 ) = 291 +fallxy ( 64, 1 ) = 108 +fallxy ( 64, 2 ) = 81 +fallxy ( 64, 3 ) = 114 +fallxy ( 64, 4 ) = 89 +fallxy ( 64, 5 ) = 89 +fallxy ( 64, 6 ) = 89 +fallxy ( 64, 7 ) = 82 +fallxy ( 64, 8 ) = 82 +xyphendoy1 ( 64, 1 ) = 2 +xyphendoy1 ( 64, 2 ) = 2 +xyphendoy1 ( 64, 3 ) = 0 +xyphendoy1 ( 64, 4 ) = 2 +xyphendoy1 ( 64, 5 ) = 2 +xyphendoy1 ( 64, 6 ) = 2 +xyphendoy1 ( 64, 7 ) = 2 +xyphendoy1 ( 64, 8 ) = 2 + + ! xlat -24.2500000000000 +greenupxy ( 63, 1 ) = 321 +greenupxy ( 63, 2 ) = 288 +greenupxy ( 63, 3 ) = 26 +greenupxy ( 63, 4 ) = 310 +greenupxy ( 63, 5 ) = 310 +greenupxy ( 63, 6 ) = 310 +greenupxy ( 63, 7 ) = 290 +greenupxy ( 63, 8 ) = 290 +fallxy ( 63, 1 ) = 109 +fallxy ( 63, 2 ) = 81 +fallxy ( 63, 3 ) = 119 +fallxy ( 63, 4 ) = 90 +fallxy ( 63, 5 ) = 90 +fallxy ( 63, 6 ) = 90 +fallxy ( 63, 7 ) = 82 +fallxy ( 63, 8 ) = 82 +xyphendoy1 ( 63, 1 ) = 2 +xyphendoy1 ( 63, 2 ) = 2 +xyphendoy1 ( 63, 3 ) = 0 +xyphendoy1 ( 63, 4 ) = 2 +xyphendoy1 ( 63, 5 ) = 2 +xyphendoy1 ( 63, 6 ) = 2 +xyphendoy1 ( 63, 7 ) = 2 +xyphendoy1 ( 63, 8 ) = 2 + + ! xlat -24.7500000000000 +greenupxy ( 62, 1 ) = 313 +greenupxy ( 62, 2 ) = 286 +greenupxy ( 62, 3 ) = 29 +greenupxy ( 62, 4 ) = 307 +greenupxy ( 62, 5 ) = 307 +greenupxy ( 62, 6 ) = 307 +greenupxy ( 62, 7 ) = 289 +greenupxy ( 62, 8 ) = 289 +fallxy ( 62, 1 ) = 104 +fallxy ( 62, 2 ) = 80 +fallxy ( 62, 3 ) = 125 +fallxy ( 62, 4 ) = 90 +fallxy ( 62, 5 ) = 90 +fallxy ( 62, 6 ) = 90 +fallxy ( 62, 7 ) = 82 +fallxy ( 62, 8 ) = 82 +xyphendoy1 ( 62, 1 ) = 2 +xyphendoy1 ( 62, 2 ) = 2 +xyphendoy1 ( 62, 3 ) = 0 +xyphendoy1 ( 62, 4 ) = 2 +xyphendoy1 ( 62, 5 ) = 2 +xyphendoy1 ( 62, 6 ) = 2 +xyphendoy1 ( 62, 7 ) = 2 +xyphendoy1 ( 62, 8 ) = 2 + + ! xlat -25.2500000000000 +greenupxy ( 61, 1 ) = 305 +greenupxy ( 61, 2 ) = 285 +greenupxy ( 61, 3 ) = 33 +greenupxy ( 61, 4 ) = 304 +greenupxy ( 61, 5 ) = 304 +greenupxy ( 61, 6 ) = 304 +greenupxy ( 61, 7 ) = 281 +greenupxy ( 61, 8 ) = 281 +fallxy ( 61, 1 ) = 106 +fallxy ( 61, 2 ) = 80 +fallxy ( 61, 3 ) = 131 +fallxy ( 61, 4 ) = 91 +fallxy ( 61, 5 ) = 91 +fallxy ( 61, 6 ) = 91 +fallxy ( 61, 7 ) = 82 +fallxy ( 61, 8 ) = 82 +xyphendoy1 ( 61, 1 ) = 2 +xyphendoy1 ( 61, 2 ) = 2 +xyphendoy1 ( 61, 3 ) = 0 +xyphendoy1 ( 61, 4 ) = 2 +xyphendoy1 ( 61, 5 ) = 2 +xyphendoy1 ( 61, 6 ) = 2 +xyphendoy1 ( 61, 7 ) = 2 +xyphendoy1 ( 61, 8 ) = 2 + + ! xlat -25.7500000000000 +greenupxy ( 60, 1 ) = 291 +greenupxy ( 60, 2 ) = 283 +greenupxy ( 60, 3 ) = 37 +greenupxy ( 60, 4 ) = 301 +greenupxy ( 60, 5 ) = 301 +greenupxy ( 60, 6 ) = 301 +greenupxy ( 60, 7 ) = 274 +greenupxy ( 60, 8 ) = 274 +fallxy ( 60, 1 ) = 106 +fallxy ( 60, 2 ) = 80 +fallxy ( 60, 3 ) = 138 +fallxy ( 60, 4 ) = 91 +fallxy ( 60, 5 ) = 91 +fallxy ( 60, 6 ) = 91 +fallxy ( 60, 7 ) = 81 +fallxy ( 60, 8 ) = 81 +xyphendoy1 ( 60, 1 ) = 2 +xyphendoy1 ( 60, 2 ) = 2 +xyphendoy1 ( 60, 3 ) = 0 +xyphendoy1 ( 60, 4 ) = 2 +xyphendoy1 ( 60, 5 ) = 2 +xyphendoy1 ( 60, 6 ) = 2 +xyphendoy1 ( 60, 7 ) = 2 +xyphendoy1 ( 60, 8 ) = 2 + + ! xlat -26.2500000000000 +greenupxy ( 59, 1 ) = 291 +greenupxy ( 59, 2 ) = 282 +greenupxy ( 59, 3 ) = 41 +greenupxy ( 59, 4 ) = 298 +greenupxy ( 59, 5 ) = 298 +greenupxy ( 59, 6 ) = 298 +greenupxy ( 59, 7 ) = 266 +greenupxy ( 59, 8 ) = 266 +fallxy ( 59, 1 ) = 102 +fallxy ( 59, 2 ) = 79 +fallxy ( 59, 3 ) = 145 +fallxy ( 59, 4 ) = 92 +fallxy ( 59, 5 ) = 92 +fallxy ( 59, 6 ) = 92 +fallxy ( 59, 7 ) = 81 +fallxy ( 59, 8 ) = 81 +xyphendoy1 ( 59, 1 ) = 2 +xyphendoy1 ( 59, 2 ) = 2 +xyphendoy1 ( 59, 3 ) = 0 +xyphendoy1 ( 59, 4 ) = 2 +xyphendoy1 ( 59, 5 ) = 2 +xyphendoy1 ( 59, 6 ) = 2 +xyphendoy1 ( 59, 7 ) = 2 +xyphendoy1 ( 59, 8 ) = 2 + + ! xlat -26.7500000000000 +greenupxy ( 58, 1 ) = 289 +greenupxy ( 58, 2 ) = 281 +greenupxy ( 58, 3 ) = 47 +greenupxy ( 58, 4 ) = 296 +greenupxy ( 58, 5 ) = 296 +greenupxy ( 58, 6 ) = 296 +greenupxy ( 58, 7 ) = 257 +greenupxy ( 58, 8 ) = 257 +fallxy ( 58, 1 ) = 105 +fallxy ( 58, 2 ) = 79 +fallxy ( 58, 3 ) = 154 +fallxy ( 58, 4 ) = 93 +fallxy ( 58, 5 ) = 93 +fallxy ( 58, 6 ) = 93 +fallxy ( 58, 7 ) = 81 +fallxy ( 58, 8 ) = 81 +xyphendoy1 ( 58, 1 ) = 2 +xyphendoy1 ( 58, 2 ) = 2 +xyphendoy1 ( 58, 3 ) = 0 +xyphendoy1 ( 58, 4 ) = 2 +xyphendoy1 ( 58, 5 ) = 2 +xyphendoy1 ( 58, 6 ) = 2 +xyphendoy1 ( 58, 7 ) = 2 +xyphendoy1 ( 58, 8 ) = 2 + + ! xlat -27.2500000000000 +greenupxy ( 57, 1 ) = 292 +greenupxy ( 57, 2 ) = 280 +greenupxy ( 57, 3 ) = 52 +greenupxy ( 57, 4 ) = 294 +greenupxy ( 57, 5 ) = 294 +greenupxy ( 57, 6 ) = 294 +greenupxy ( 57, 7 ) = 249 +greenupxy ( 57, 8 ) = 249 +fallxy ( 57, 1 ) = 105 +fallxy ( 57, 2 ) = 79 +fallxy ( 57, 3 ) = 161 +fallxy ( 57, 4 ) = 93 +fallxy ( 57, 5 ) = 93 +fallxy ( 57, 6 ) = 93 +fallxy ( 57, 7 ) = 81 +fallxy ( 57, 8 ) = 81 +xyphendoy1 ( 57, 1 ) = 2 +xyphendoy1 ( 57, 2 ) = 2 +xyphendoy1 ( 57, 3 ) = 0 +xyphendoy1 ( 57, 4 ) = 2 +xyphendoy1 ( 57, 5 ) = 2 +xyphendoy1 ( 57, 6 ) = 2 +xyphendoy1 ( 57, 7 ) = 2 +xyphendoy1 ( 57, 8 ) = 2 + + ! xlat -27.7500000000000 +greenupxy ( 56, 1 ) = 292 +greenupxy ( 56, 2 ) = 279 +greenupxy ( 56, 3 ) = 58 +greenupxy ( 56, 4 ) = 292 +greenupxy ( 56, 5 ) = 292 +greenupxy ( 56, 6 ) = 292 +greenupxy ( 56, 7 ) = 241 +greenupxy ( 56, 8 ) = 241 +fallxy ( 56, 1 ) = 105 +fallxy ( 56, 2 ) = 79 +fallxy ( 56, 3 ) = 169 +fallxy ( 56, 4 ) = 93 +fallxy ( 56, 5 ) = 93 +fallxy ( 56, 6 ) = 93 +fallxy ( 56, 7 ) = 81 +fallxy ( 56, 8 ) = 81 +xyphendoy1 ( 56, 1 ) = 2 +xyphendoy1 ( 56, 2 ) = 2 +xyphendoy1 ( 56, 3 ) = 0 +xyphendoy1 ( 56, 4 ) = 2 +xyphendoy1 ( 56, 5 ) = 2 +xyphendoy1 ( 56, 6 ) = 2 +xyphendoy1 ( 56, 7 ) = 2 +xyphendoy1 ( 56, 8 ) = 2 + + ! xlat -28.2500000000000 +greenupxy ( 55, 1 ) = 292 +greenupxy ( 55, 2 ) = 279 +greenupxy ( 55, 3 ) = 64 +greenupxy ( 55, 4 ) = 287 +greenupxy ( 55, 5 ) = 287 +greenupxy ( 55, 6 ) = 287 +greenupxy ( 55, 7 ) = 233 +greenupxy ( 55, 8 ) = 233 +fallxy ( 55, 1 ) = 102 +fallxy ( 55, 2 ) = 78 +fallxy ( 55, 3 ) = 179 +fallxy ( 55, 4 ) = 93 +fallxy ( 55, 5 ) = 93 +fallxy ( 55, 6 ) = 93 +fallxy ( 55, 7 ) = 82 +fallxy ( 55, 8 ) = 82 +xyphendoy1 ( 55, 1 ) = 2 +xyphendoy1 ( 55, 2 ) = 2 +xyphendoy1 ( 55, 3 ) = 0 +xyphendoy1 ( 55, 4 ) = 2 +xyphendoy1 ( 55, 5 ) = 2 +xyphendoy1 ( 55, 6 ) = 2 +xyphendoy1 ( 55, 7 ) = 2 +xyphendoy1 ( 55, 8 ) = 2 + + ! xlat -28.7500000000000 +greenupxy ( 54, 1 ) = 292 +greenupxy ( 54, 2 ) = 278 +greenupxy ( 54, 3 ) = 70 +greenupxy ( 54, 4 ) = 286 +greenupxy ( 54, 5 ) = 286 +greenupxy ( 54, 6 ) = 286 +greenupxy ( 54, 7 ) = 225 +greenupxy ( 54, 8 ) = 225 +fallxy ( 54, 1 ) = 102 +fallxy ( 54, 2 ) = 78 +fallxy ( 54, 3 ) = 188 +fallxy ( 54, 4 ) = 94 +fallxy ( 54, 5 ) = 94 +fallxy ( 54, 6 ) = 94 +fallxy ( 54, 7 ) = 83 +fallxy ( 54, 8 ) = 83 +xyphendoy1 ( 54, 1 ) = 2 +xyphendoy1 ( 54, 2 ) = 2 +xyphendoy1 ( 54, 3 ) = 0 +xyphendoy1 ( 54, 4 ) = 2 +xyphendoy1 ( 54, 5 ) = 2 +xyphendoy1 ( 54, 6 ) = 2 +xyphendoy1 ( 54, 7 ) = 2 +xyphendoy1 ( 54, 8 ) = 2 + + ! xlat -29.2500000000000 +greenupxy ( 53, 1 ) = 297 +greenupxy ( 53, 2 ) = 278 +greenupxy ( 53, 3 ) = 75 +greenupxy ( 53, 4 ) = 284 +greenupxy ( 53, 5 ) = 284 +greenupxy ( 53, 6 ) = 284 +greenupxy ( 53, 7 ) = 218 +greenupxy ( 53, 8 ) = 218 +fallxy ( 53, 1 ) = 97 +fallxy ( 53, 2 ) = 78 +fallxy ( 53, 3 ) = 196 +fallxy ( 53, 4 ) = 93 +fallxy ( 53, 5 ) = 93 +fallxy ( 53, 6 ) = 93 +fallxy ( 53, 7 ) = 83 +fallxy ( 53, 8 ) = 83 +xyphendoy1 ( 53, 1 ) = 2 +xyphendoy1 ( 53, 2 ) = 2 +xyphendoy1 ( 53, 3 ) = 0 +xyphendoy1 ( 53, 4 ) = 2 +xyphendoy1 ( 53, 5 ) = 2 +xyphendoy1 ( 53, 6 ) = 2 +xyphendoy1 ( 53, 7 ) = 2 +xyphendoy1 ( 53, 8 ) = 2 + + ! xlat -29.7500000000000 +greenupxy ( 52, 1 ) = 290 +greenupxy ( 52, 2 ) = 277 +greenupxy ( 52, 3 ) = 79 +greenupxy ( 52, 4 ) = 281 +greenupxy ( 52, 5 ) = 281 +greenupxy ( 52, 6 ) = 281 +greenupxy ( 52, 7 ) = 210 +greenupxy ( 52, 8 ) = 210 +fallxy ( 52, 1 ) = 96 +fallxy ( 52, 2 ) = 77 +fallxy ( 52, 3 ) = 204 +fallxy ( 52, 4 ) = 93 +fallxy ( 52, 5 ) = 93 +fallxy ( 52, 6 ) = 93 +fallxy ( 52, 7 ) = 82 +fallxy ( 52, 8 ) = 82 +xyphendoy1 ( 52, 1 ) = 2 +xyphendoy1 ( 52, 2 ) = 2 +xyphendoy1 ( 52, 3 ) = 0 +xyphendoy1 ( 52, 4 ) = 2 +xyphendoy1 ( 52, 5 ) = 2 +xyphendoy1 ( 52, 6 ) = 2 +xyphendoy1 ( 52, 7 ) = 2 +xyphendoy1 ( 52, 8 ) = 2 + + ! xlat -30.2500000000000 +greenupxy ( 51, 1 ) = 290 +greenupxy ( 51, 2 ) = 276 +greenupxy ( 51, 3 ) = 82 +greenupxy ( 51, 4 ) = 280 +greenupxy ( 51, 5 ) = 280 +greenupxy ( 51, 6 ) = 280 +greenupxy ( 51, 7 ) = 203 +greenupxy ( 51, 8 ) = 203 +fallxy ( 51, 1 ) = 94 +fallxy ( 51, 2 ) = 77 +fallxy ( 51, 3 ) = 211 +fallxy ( 51, 4 ) = 92 +fallxy ( 51, 5 ) = 92 +fallxy ( 51, 6 ) = 92 +fallxy ( 51, 7 ) = 80 +fallxy ( 51, 8 ) = 80 +xyphendoy1 ( 51, 1 ) = 2 +xyphendoy1 ( 51, 2 ) = 2 +xyphendoy1 ( 51, 3 ) = 0 +xyphendoy1 ( 51, 4 ) = 2 +xyphendoy1 ( 51, 5 ) = 2 +xyphendoy1 ( 51, 6 ) = 2 +xyphendoy1 ( 51, 7 ) = 2 +xyphendoy1 ( 51, 8 ) = 2 + + ! xlat -30.7500000000000 +greenupxy ( 50, 1 ) = 285 +greenupxy ( 50, 2 ) = 275 +greenupxy ( 50, 3 ) = 85 +greenupxy ( 50, 4 ) = 280 +greenupxy ( 50, 5 ) = 280 +greenupxy ( 50, 6 ) = 280 +greenupxy ( 50, 7 ) = 196 +greenupxy ( 50, 8 ) = 196 +fallxy ( 50, 1 ) = 90 +fallxy ( 50, 2 ) = 77 +fallxy ( 50, 3 ) = 216 +fallxy ( 50, 4 ) = 91 +fallxy ( 50, 5 ) = 91 +fallxy ( 50, 6 ) = 91 +fallxy ( 50, 7 ) = 83 +fallxy ( 50, 8 ) = 83 +xyphendoy1 ( 50, 1 ) = 2 +xyphendoy1 ( 50, 2 ) = 2 +xyphendoy1 ( 50, 3 ) = 0 +xyphendoy1 ( 50, 4 ) = 2 +xyphendoy1 ( 50, 5 ) = 2 +xyphendoy1 ( 50, 6 ) = 2 +xyphendoy1 ( 50, 7 ) = 2 +xyphendoy1 ( 50, 8 ) = 2 + + ! xlat -31.2500000000000 +greenupxy ( 49, 1 ) = 284 +greenupxy ( 49, 2 ) = 274 +greenupxy ( 49, 3 ) = 81 +greenupxy ( 49, 4 ) = 281 +greenupxy ( 49, 5 ) = 281 +greenupxy ( 49, 6 ) = 281 +greenupxy ( 49, 7 ) = 188 +greenupxy ( 49, 8 ) = 188 +fallxy ( 49, 1 ) = 88 +fallxy ( 49, 2 ) = 76 +fallxy ( 49, 3 ) = 213 +fallxy ( 49, 4 ) = 91 +fallxy ( 49, 5 ) = 91 +fallxy ( 49, 6 ) = 91 +fallxy ( 49, 7 ) = 86 +fallxy ( 49, 8 ) = 86 +xyphendoy1 ( 49, 1 ) = 2 +xyphendoy1 ( 49, 2 ) = 2 +xyphendoy1 ( 49, 3 ) = 0 +xyphendoy1 ( 49, 4 ) = 2 +xyphendoy1 ( 49, 5 ) = 2 +xyphendoy1 ( 49, 6 ) = 2 +xyphendoy1 ( 49, 7 ) = 2 +xyphendoy1 ( 49, 8 ) = 2 + + ! xlat -31.7500000000000 +greenupxy ( 48, 1 ) = 282 +greenupxy ( 48, 2 ) = 273 +greenupxy ( 48, 3 ) = 75 +greenupxy ( 48, 4 ) = 280 +greenupxy ( 48, 5 ) = 280 +greenupxy ( 48, 6 ) = 280 +greenupxy ( 48, 7 ) = 180 +greenupxy ( 48, 8 ) = 180 +fallxy ( 48, 1 ) = 85 +fallxy ( 48, 2 ) = 76 +fallxy ( 48, 3 ) = 212 +fallxy ( 48, 4 ) = 90 +fallxy ( 48, 5 ) = 90 +fallxy ( 48, 6 ) = 90 +fallxy ( 48, 7 ) = 83 +fallxy ( 48, 8 ) = 83 +xyphendoy1 ( 48, 1 ) = 2 +xyphendoy1 ( 48, 2 ) = 2 +xyphendoy1 ( 48, 3 ) = 0 +xyphendoy1 ( 48, 4 ) = 2 +xyphendoy1 ( 48, 5 ) = 2 +xyphendoy1 ( 48, 6 ) = 2 +xyphendoy1 ( 48, 7 ) = 2 +xyphendoy1 ( 48, 8 ) = 2 + + ! xlat -32.2500000000000 +greenupxy ( 47, 1 ) = 279 +greenupxy ( 47, 2 ) = 272 +greenupxy ( 47, 3 ) = 68 +greenupxy ( 47, 4 ) = 279 +greenupxy ( 47, 5 ) = 279 +greenupxy ( 47, 6 ) = 279 +greenupxy ( 47, 7 ) = 174 +greenupxy ( 47, 8 ) = 174 +fallxy ( 47, 1 ) = 81 +fallxy ( 47, 2 ) = 75 +fallxy ( 47, 3 ) = 211 +fallxy ( 47, 4 ) = 89 +fallxy ( 47, 5 ) = 89 +fallxy ( 47, 6 ) = 89 +fallxy ( 47, 7 ) = 83 +fallxy ( 47, 8 ) = 83 +xyphendoy1 ( 47, 1 ) = 2 +xyphendoy1 ( 47, 2 ) = 2 +xyphendoy1 ( 47, 3 ) = 0 +xyphendoy1 ( 47, 4 ) = 2 +xyphendoy1 ( 47, 5 ) = 2 +xyphendoy1 ( 47, 6 ) = 2 +xyphendoy1 ( 47, 7 ) = 2 +xyphendoy1 ( 47, 8 ) = 2 + + ! xlat -32.7500000000000 +greenupxy ( 46, 1 ) = 273 +greenupxy ( 46, 2 ) = 270 +greenupxy ( 46, 3 ) = 61 +greenupxy ( 46, 4 ) = 276 +greenupxy ( 46, 5 ) = 276 +greenupxy ( 46, 6 ) = 276 +greenupxy ( 46, 7 ) = 173 +greenupxy ( 46, 8 ) = 173 +fallxy ( 46, 1 ) = 77 +fallxy ( 46, 2 ) = 73 +fallxy ( 46, 3 ) = 208 +fallxy ( 46, 4 ) = 88 +fallxy ( 46, 5 ) = 88 +fallxy ( 46, 6 ) = 88 +fallxy ( 46, 7 ) = 83 +fallxy ( 46, 8 ) = 83 +xyphendoy1 ( 46, 1 ) = 2 +xyphendoy1 ( 46, 2 ) = 2 +xyphendoy1 ( 46, 3 ) = 0 +xyphendoy1 ( 46, 4 ) = 2 +xyphendoy1 ( 46, 5 ) = 2 +xyphendoy1 ( 46, 6 ) = 2 +xyphendoy1 ( 46, 7 ) = 2 +xyphendoy1 ( 46, 8 ) = 2 + + ! xlat -33.2500000000000 +greenupxy ( 45, 1 ) = 273 +greenupxy ( 45, 2 ) = 269 +greenupxy ( 45, 3 ) = 52 +greenupxy ( 45, 4 ) = 274 +greenupxy ( 45, 5 ) = 274 +greenupxy ( 45, 6 ) = 274 +greenupxy ( 45, 7 ) = 172 +greenupxy ( 45, 8 ) = 172 +fallxy ( 45, 1 ) = 79 +fallxy ( 45, 2 ) = 73 +fallxy ( 45, 3 ) = 207 +fallxy ( 45, 4 ) = 87 +fallxy ( 45, 5 ) = 87 +fallxy ( 45, 6 ) = 87 +fallxy ( 45, 7 ) = 83 +fallxy ( 45, 8 ) = 83 +xyphendoy1 ( 45, 1 ) = 2 +xyphendoy1 ( 45, 2 ) = 2 +xyphendoy1 ( 45, 3 ) = 0 +xyphendoy1 ( 45, 4 ) = 2 +xyphendoy1 ( 45, 5 ) = 2 +xyphendoy1 ( 45, 6 ) = 2 +xyphendoy1 ( 45, 7 ) = 2 +xyphendoy1 ( 45, 8 ) = 2 + + ! xlat -33.7500000000000 +greenupxy ( 44, 1 ) = 274 +greenupxy ( 44, 2 ) = 269 +greenupxy ( 44, 3 ) = 41 +greenupxy ( 44, 4 ) = 271 +greenupxy ( 44, 5 ) = 271 +greenupxy ( 44, 6 ) = 271 +greenupxy ( 44, 7 ) = 177 +greenupxy ( 44, 8 ) = 177 +fallxy ( 44, 1 ) = 73 +fallxy ( 44, 2 ) = 73 +fallxy ( 44, 3 ) = 199 +fallxy ( 44, 4 ) = 82 +fallxy ( 44, 5 ) = 82 +fallxy ( 44, 6 ) = 82 +fallxy ( 44, 7 ) = 83 +fallxy ( 44, 8 ) = 83 +xyphendoy1 ( 44, 1 ) = 2 +xyphendoy1 ( 44, 2 ) = 2 +xyphendoy1 ( 44, 3 ) = 0 +xyphendoy1 ( 44, 4 ) = 2 +xyphendoy1 ( 44, 5 ) = 2 +xyphendoy1 ( 44, 6 ) = 2 +xyphendoy1 ( 44, 7 ) = 2 +xyphendoy1 ( 44, 8 ) = 2 + + ! xlat -34.2500000000000 +greenupxy ( 43, 1 ) = 277 +greenupxy ( 43, 2 ) = 268 +greenupxy ( 43, 3 ) = 33 +greenupxy ( 43, 4 ) = 270 +greenupxy ( 43, 5 ) = 270 +greenupxy ( 43, 6 ) = 270 +greenupxy ( 43, 7 ) = 182 +greenupxy ( 43, 8 ) = 182 +fallxy ( 43, 1 ) = 73 +fallxy ( 43, 2 ) = 73 +fallxy ( 43, 3 ) = 198 +fallxy ( 43, 4 ) = 81 +fallxy ( 43, 5 ) = 81 +fallxy ( 43, 6 ) = 81 +fallxy ( 43, 7 ) = 83 +fallxy ( 43, 8 ) = 83 +xyphendoy1 ( 43, 1 ) = 2 +xyphendoy1 ( 43, 2 ) = 2 +xyphendoy1 ( 43, 3 ) = 0 +xyphendoy1 ( 43, 4 ) = 2 +xyphendoy1 ( 43, 5 ) = 2 +xyphendoy1 ( 43, 6 ) = 2 +xyphendoy1 ( 43, 7 ) = 2 +xyphendoy1 ( 43, 8 ) = 2 + + ! xlat -34.7500000000000 +greenupxy ( 42, 1 ) = 270 +greenupxy ( 42, 2 ) = 267 +greenupxy ( 42, 3 ) = 23 +greenupxy ( 42, 4 ) = 262 +greenupxy ( 42, 5 ) = 262 +greenupxy ( 42, 6 ) = 262 +greenupxy ( 42, 7 ) = 187 +greenupxy ( 42, 8 ) = 187 +fallxy ( 42, 1 ) = 69 +fallxy ( 42, 2 ) = 72 +fallxy ( 42, 3 ) = 197 +fallxy ( 42, 4 ) = 79 +fallxy ( 42, 5 ) = 79 +fallxy ( 42, 6 ) = 79 +fallxy ( 42, 7 ) = 83 +fallxy ( 42, 8 ) = 83 +xyphendoy1 ( 42, 1 ) = 2 +xyphendoy1 ( 42, 2 ) = 2 +xyphendoy1 ( 42, 3 ) = 0 +xyphendoy1 ( 42, 4 ) = 2 +xyphendoy1 ( 42, 5 ) = 2 +xyphendoy1 ( 42, 6 ) = 2 +xyphendoy1 ( 42, 7 ) = 2 +xyphendoy1 ( 42, 8 ) = 2 + + ! xlat -35.2500000000000 +greenupxy ( 41, 1 ) = 273 +greenupxy ( 41, 2 ) = 265 +greenupxy ( 41, 3 ) = 14 +greenupxy ( 41, 4 ) = 261 +greenupxy ( 41, 5 ) = 261 +greenupxy ( 41, 6 ) = 261 +greenupxy ( 41, 7 ) = 193 +greenupxy ( 41, 8 ) = 193 +fallxy ( 41, 1 ) = 68 +fallxy ( 41, 2 ) = 69 +fallxy ( 41, 3 ) = 193 +fallxy ( 41, 4 ) = 75 +fallxy ( 41, 5 ) = 75 +fallxy ( 41, 6 ) = 75 +fallxy ( 41, 7 ) = 21 +fallxy ( 41, 8 ) = 21 +xyphendoy1 ( 41, 1 ) = 2 +xyphendoy1 ( 41, 2 ) = 2 +xyphendoy1 ( 41, 3 ) = 0 +xyphendoy1 ( 41, 4 ) = 2 +xyphendoy1 ( 41, 5 ) = 2 +xyphendoy1 ( 41, 6 ) = 2 +xyphendoy1 ( 41, 7 ) = 2 +xyphendoy1 ( 41, 8 ) = 2 + + ! xlat -35.7500000000000 +greenupxy ( 40, 1 ) = 272 +greenupxy ( 40, 2 ) = 264 +greenupxy ( 40, 3 ) = 7 +greenupxy ( 40, 4 ) = 261 +greenupxy ( 40, 5 ) = 261 +greenupxy ( 40, 6 ) = 261 +greenupxy ( 40, 7 ) = 194 +greenupxy ( 40, 8 ) = 194 +fallxy ( 40, 1 ) = 68 +fallxy ( 40, 2 ) = 64 +fallxy ( 40, 3 ) = 191 +fallxy ( 40, 4 ) = 74 +fallxy ( 40, 5 ) = 74 +fallxy ( 40, 6 ) = 74 +fallxy ( 40, 7 ) = 21 +fallxy ( 40, 8 ) = 21 +xyphendoy1 ( 40, 1 ) = 2 +xyphendoy1 ( 40, 2 ) = 2 +xyphendoy1 ( 40, 3 ) = 0 +xyphendoy1 ( 40, 4 ) = 2 +xyphendoy1 ( 40, 5 ) = 2 +xyphendoy1 ( 40, 6 ) = 2 +xyphendoy1 ( 40, 7 ) = 2 +xyphendoy1 ( 40, 8 ) = 2 + + ! xlat -36.2500000000000 +greenupxy ( 39, 1 ) = 276 +greenupxy ( 39, 2 ) = 262 +greenupxy ( 39, 3 ) = 363 +greenupxy ( 39, 4 ) = 259 +greenupxy ( 39, 5 ) = 259 +greenupxy ( 39, 6 ) = 259 +greenupxy ( 39, 7 ) = 196 +greenupxy ( 39, 8 ) = 196 +fallxy ( 39, 1 ) = 68 +fallxy ( 39, 2 ) = 59 +fallxy ( 39, 3 ) = 187 +fallxy ( 39, 4 ) = 72 +fallxy ( 39, 5 ) = 72 +fallxy ( 39, 6 ) = 72 +fallxy ( 39, 7 ) = 21 +fallxy ( 39, 8 ) = 21 +xyphendoy1 ( 39, 1 ) = 2 +xyphendoy1 ( 39, 2 ) = 2 +xyphendoy1 ( 39, 3 ) = 2 +xyphendoy1 ( 39, 4 ) = 2 +xyphendoy1 ( 39, 5 ) = 2 +xyphendoy1 ( 39, 6 ) = 2 +xyphendoy1 ( 39, 7 ) = 2 +xyphendoy1 ( 39, 8 ) = 2 + + ! xlat -36.7500000000000 +greenupxy ( 38, 1 ) = 272 +greenupxy ( 38, 2 ) = 259 +greenupxy ( 38, 3 ) = 347 +greenupxy ( 38, 4 ) = 262 +greenupxy ( 38, 5 ) = 262 +greenupxy ( 38, 6 ) = 262 +greenupxy ( 38, 7 ) = 198 +greenupxy ( 38, 8 ) = 198 +fallxy ( 38, 1 ) = 68 +fallxy ( 38, 2 ) = 58 +fallxy ( 38, 3 ) = 181 +fallxy ( 38, 4 ) = 70 +fallxy ( 38, 5 ) = 70 +fallxy ( 38, 6 ) = 70 +fallxy ( 38, 7 ) = 21 +fallxy ( 38, 8 ) = 21 +xyphendoy1 ( 38, 1 ) = 2 +xyphendoy1 ( 38, 2 ) = 2 +xyphendoy1 ( 38, 3 ) = 2 +xyphendoy1 ( 38, 4 ) = 2 +xyphendoy1 ( 38, 5 ) = 2 +xyphendoy1 ( 38, 6 ) = 2 +xyphendoy1 ( 38, 7 ) = 2 +xyphendoy1 ( 38, 8 ) = 2 + + ! xlat -37.2500000000000 +greenupxy ( 37, 1 ) = 273 +greenupxy ( 37, 2 ) = 257 +greenupxy ( 37, 3 ) = 329 +greenupxy ( 37, 4 ) = 260 +greenupxy ( 37, 5 ) = 260 +greenupxy ( 37, 6 ) = 260 +greenupxy ( 37, 7 ) = 199 +greenupxy ( 37, 8 ) = 199 +fallxy ( 37, 1 ) = 67 +fallxy ( 37, 2 ) = 53 +fallxy ( 37, 3 ) = 171 +fallxy ( 37, 4 ) = 68 +fallxy ( 37, 5 ) = 68 +fallxy ( 37, 6 ) = 68 +fallxy ( 37, 7 ) = 21 +fallxy ( 37, 8 ) = 21 +xyphendoy1 ( 37, 1 ) = 2 +xyphendoy1 ( 37, 2 ) = 2 +xyphendoy1 ( 37, 3 ) = 2 +xyphendoy1 ( 37, 4 ) = 2 +xyphendoy1 ( 37, 5 ) = 2 +xyphendoy1 ( 37, 6 ) = 2 +xyphendoy1 ( 37, 7 ) = 2 +xyphendoy1 ( 37, 8 ) = 2 + + ! xlat -37.7500000000000 +greenupxy ( 36, 1 ) = 270 +greenupxy ( 36, 2 ) = 255 +greenupxy ( 36, 3 ) = 310 +greenupxy ( 36, 4 ) = 258 +greenupxy ( 36, 5 ) = 258 +greenupxy ( 36, 6 ) = 258 +greenupxy ( 36, 7 ) = 199 +greenupxy ( 36, 8 ) = 199 +fallxy ( 36, 1 ) = 69 +fallxy ( 36, 2 ) = 48 +fallxy ( 36, 3 ) = 160 +fallxy ( 36, 4 ) = 61 +fallxy ( 36, 5 ) = 61 +fallxy ( 36, 6 ) = 61 +fallxy ( 36, 7 ) = 21 +fallxy ( 36, 8 ) = 21 +xyphendoy1 ( 36, 1 ) = 2 +xyphendoy1 ( 36, 2 ) = 2 +xyphendoy1 ( 36, 3 ) = 2 +xyphendoy1 ( 36, 4 ) = 2 +xyphendoy1 ( 36, 5 ) = 2 +xyphendoy1 ( 36, 6 ) = 2 +xyphendoy1 ( 36, 7 ) = 2 +xyphendoy1 ( 36, 8 ) = 2 + + ! xlat -38.2500000000000 +greenupxy ( 35, 1 ) = 274 +greenupxy ( 35, 2 ) = 255 +greenupxy ( 35, 3 ) = 307 +greenupxy ( 35, 4 ) = 260 +greenupxy ( 35, 5 ) = 260 +greenupxy ( 35, 6 ) = 260 +greenupxy ( 35, 7 ) = 202 +greenupxy ( 35, 8 ) = 202 +fallxy ( 35, 1 ) = 67 +fallxy ( 35, 2 ) = 45 +fallxy ( 35, 3 ) = 151 +fallxy ( 35, 4 ) = 59 +fallxy ( 35, 5 ) = 59 +fallxy ( 35, 6 ) = 59 +fallxy ( 35, 7 ) = 21 +fallxy ( 35, 8 ) = 21 +xyphendoy1 ( 35, 1 ) = 2 +xyphendoy1 ( 35, 2 ) = 2 +xyphendoy1 ( 35, 3 ) = 2 +xyphendoy1 ( 35, 4 ) = 2 +xyphendoy1 ( 35, 5 ) = 2 +xyphendoy1 ( 35, 6 ) = 2 +xyphendoy1 ( 35, 7 ) = 2 +xyphendoy1 ( 35, 8 ) = 2 + + ! xlat -38.7500000000000 +greenupxy ( 34, 1 ) = 273 +greenupxy ( 34, 2 ) = 253 +greenupxy ( 34, 3 ) = 304 +greenupxy ( 34, 4 ) = 260 +greenupxy ( 34, 5 ) = 260 +greenupxy ( 34, 6 ) = 260 +greenupxy ( 34, 7 ) = 202 +greenupxy ( 34, 8 ) = 202 +fallxy ( 34, 1 ) = 67 +fallxy ( 34, 2 ) = 43 +fallxy ( 34, 3 ) = 141 +fallxy ( 34, 4 ) = 58 +fallxy ( 34, 5 ) = 58 +fallxy ( 34, 6 ) = 58 +fallxy ( 34, 7 ) = 14 +fallxy ( 34, 8 ) = 14 +xyphendoy1 ( 34, 1 ) = 2 +xyphendoy1 ( 34, 2 ) = 2 +xyphendoy1 ( 34, 3 ) = 2 +xyphendoy1 ( 34, 4 ) = 2 +xyphendoy1 ( 34, 5 ) = 2 +xyphendoy1 ( 34, 6 ) = 2 +xyphendoy1 ( 34, 7 ) = 2 +xyphendoy1 ( 34, 8 ) = 2 + + ! xlat -39.2500000000000 +greenupxy ( 33, 1 ) = 274 +greenupxy ( 33, 2 ) = 254 +greenupxy ( 33, 3 ) = 299 +greenupxy ( 33, 4 ) = 255 +greenupxy ( 33, 5 ) = 255 +greenupxy ( 33, 6 ) = 255 +greenupxy ( 33, 7 ) = 201 +greenupxy ( 33, 8 ) = 201 +fallxy ( 33, 1 ) = 66 +fallxy ( 33, 2 ) = 40 +fallxy ( 33, 3 ) = 141 +fallxy ( 33, 4 ) = 56 +fallxy ( 33, 5 ) = 56 +fallxy ( 33, 6 ) = 56 +fallxy ( 33, 7 ) = 14 +fallxy ( 33, 8 ) = 14 +xyphendoy1 ( 33, 1 ) = 2 +xyphendoy1 ( 33, 2 ) = 2 +xyphendoy1 ( 33, 3 ) = 2 +xyphendoy1 ( 33, 4 ) = 2 +xyphendoy1 ( 33, 5 ) = 2 +xyphendoy1 ( 33, 6 ) = 2 +xyphendoy1 ( 33, 7 ) = 2 +xyphendoy1 ( 33, 8 ) = 2 + + ! xlat -39.7500000000000 +greenupxy ( 32, 1 ) = 275 +greenupxy ( 32, 2 ) = 253 +greenupxy ( 32, 3 ) = 293 +greenupxy ( 32, 4 ) = 250 +greenupxy ( 32, 5 ) = 250 +greenupxy ( 32, 6 ) = 250 +greenupxy ( 32, 7 ) = 205 +greenupxy ( 32, 8 ) = 205 +fallxy ( 32, 1 ) = 65 +fallxy ( 32, 2 ) = 38 +fallxy ( 32, 3 ) = 136 +fallxy ( 32, 4 ) = 53 +fallxy ( 32, 5 ) = 53 +fallxy ( 32, 6 ) = 53 +fallxy ( 32, 7 ) = 14 +fallxy ( 32, 8 ) = 14 +xyphendoy1 ( 32, 1 ) = 2 +xyphendoy1 ( 32, 2 ) = 2 +xyphendoy1 ( 32, 3 ) = 2 +xyphendoy1 ( 32, 4 ) = 2 +xyphendoy1 ( 32, 5 ) = 2 +xyphendoy1 ( 32, 6 ) = 2 +xyphendoy1 ( 32, 7 ) = 2 +xyphendoy1 ( 32, 8 ) = 2 + + ! xlat -40.2500000000000 +greenupxy ( 31, 1 ) = 276 +greenupxy ( 31, 2 ) = 254 +greenupxy ( 31, 3 ) = 288 +greenupxy ( 31, 4 ) = 246 +greenupxy ( 31, 5 ) = 246 +greenupxy ( 31, 6 ) = 246 +greenupxy ( 31, 7 ) = 211 +greenupxy ( 31, 8 ) = 211 +fallxy ( 31, 1 ) = 64 +fallxy ( 31, 2 ) = 36 +fallxy ( 31, 3 ) = 133 +fallxy ( 31, 4 ) = 53 +fallxy ( 31, 5 ) = 53 +fallxy ( 31, 6 ) = 53 +fallxy ( 31, 7 ) = 11 +fallxy ( 31, 8 ) = 11 +xyphendoy1 ( 31, 1 ) = 2 +xyphendoy1 ( 31, 2 ) = 2 +xyphendoy1 ( 31, 3 ) = 2 +xyphendoy1 ( 31, 4 ) = 2 +xyphendoy1 ( 31, 5 ) = 2 +xyphendoy1 ( 31, 6 ) = 2 +xyphendoy1 ( 31, 7 ) = 2 +xyphendoy1 ( 31, 8 ) = 2 + + ! xlat -40.7500000000000 +greenupxy ( 30, 1 ) = 277 +greenupxy ( 30, 2 ) = 255 +greenupxy ( 30, 3 ) = 285 +greenupxy ( 30, 4 ) = 245 +greenupxy ( 30, 5 ) = 245 +greenupxy ( 30, 6 ) = 245 +greenupxy ( 30, 7 ) = 217 +greenupxy ( 30, 8 ) = 217 +fallxy ( 30, 1 ) = 64 +fallxy ( 30, 2 ) = 34 +fallxy ( 30, 3 ) = 128 +fallxy ( 30, 4 ) = 53 +fallxy ( 30, 5 ) = 53 +fallxy ( 30, 6 ) = 53 +fallxy ( 30, 7 ) = 11 +fallxy ( 30, 8 ) = 11 +xyphendoy1 ( 30, 1 ) = 2 +xyphendoy1 ( 30, 2 ) = 2 +xyphendoy1 ( 30, 3 ) = 2 +xyphendoy1 ( 30, 4 ) = 2 +xyphendoy1 ( 30, 5 ) = 2 +xyphendoy1 ( 30, 6 ) = 2 +xyphendoy1 ( 30, 7 ) = 2 +xyphendoy1 ( 30, 8 ) = 2 + + ! xlat -41.2500000000000 +greenupxy ( 29, 1 ) = 279 +greenupxy ( 29, 2 ) = 256 +greenupxy ( 29, 3 ) = 280 +greenupxy ( 29, 4 ) = 244 +greenupxy ( 29, 5 ) = 244 +greenupxy ( 29, 6 ) = 244 +greenupxy ( 29, 7 ) = 217 +greenupxy ( 29, 8 ) = 217 +fallxy ( 29, 1 ) = 65 +fallxy ( 29, 2 ) = 33 +fallxy ( 29, 3 ) = 116 +fallxy ( 29, 4 ) = 52 +fallxy ( 29, 5 ) = 52 +fallxy ( 29, 6 ) = 52 +fallxy ( 29, 7 ) = 15 +fallxy ( 29, 8 ) = 15 +xyphendoy1 ( 29, 1 ) = 2 +xyphendoy1 ( 29, 2 ) = 2 +xyphendoy1 ( 29, 3 ) = 2 +xyphendoy1 ( 29, 4 ) = 2 +xyphendoy1 ( 29, 5 ) = 2 +xyphendoy1 ( 29, 6 ) = 2 +xyphendoy1 ( 29, 7 ) = 2 +xyphendoy1 ( 29, 8 ) = 2 + + ! xlat -41.7500000000000 +greenupxy ( 28, 1 ) = 280 +greenupxy ( 28, 2 ) = 256 +greenupxy ( 28, 3 ) = 278 +greenupxy ( 28, 4 ) = 244 +greenupxy ( 28, 5 ) = 244 +greenupxy ( 28, 6 ) = 244 +greenupxy ( 28, 7 ) = 217 +greenupxy ( 28, 8 ) = 217 +fallxy ( 28, 1 ) = 62 +fallxy ( 28, 2 ) = 34 +fallxy ( 28, 3 ) = 108 +fallxy ( 28, 4 ) = 52 +fallxy ( 28, 5 ) = 52 +fallxy ( 28, 6 ) = 52 +fallxy ( 28, 7 ) = 18 +fallxy ( 28, 8 ) = 18 +xyphendoy1 ( 28, 1 ) = 2 +xyphendoy1 ( 28, 2 ) = 2 +xyphendoy1 ( 28, 3 ) = 2 +xyphendoy1 ( 28, 4 ) = 2 +xyphendoy1 ( 28, 5 ) = 2 +xyphendoy1 ( 28, 6 ) = 2 +xyphendoy1 ( 28, 7 ) = 2 +xyphendoy1 ( 28, 8 ) = 2 + + ! xlat -42.2500000000000 +greenupxy ( 27, 1 ) = 281 +greenupxy ( 27, 2 ) = 257 +greenupxy ( 27, 3 ) = 276 +greenupxy ( 27, 4 ) = 245 +greenupxy ( 27, 5 ) = 245 +greenupxy ( 27, 6 ) = 245 +greenupxy ( 27, 7 ) = 218 +greenupxy ( 27, 8 ) = 218 +fallxy ( 27, 1 ) = 60 +fallxy ( 27, 2 ) = 35 +fallxy ( 27, 3 ) = 107 +fallxy ( 27, 4 ) = 55 +fallxy ( 27, 5 ) = 55 +fallxy ( 27, 6 ) = 55 +fallxy ( 27, 7 ) = 21 +fallxy ( 27, 8 ) = 21 +xyphendoy1 ( 27, 1 ) = 2 +xyphendoy1 ( 27, 2 ) = 2 +xyphendoy1 ( 27, 3 ) = 2 +xyphendoy1 ( 27, 4 ) = 2 +xyphendoy1 ( 27, 5 ) = 2 +xyphendoy1 ( 27, 6 ) = 2 +xyphendoy1 ( 27, 7 ) = 2 +xyphendoy1 ( 27, 8 ) = 2 + + ! xlat -42.7500000000000 +greenupxy ( 26, 1 ) = 281 +greenupxy ( 26, 2 ) = 258 +greenupxy ( 26, 3 ) = 272 +greenupxy ( 26, 4 ) = 247 +greenupxy ( 26, 5 ) = 247 +greenupxy ( 26, 6 ) = 247 +greenupxy ( 26, 7 ) = 220 +greenupxy ( 26, 8 ) = 220 +fallxy ( 26, 1 ) = 60 +fallxy ( 26, 2 ) = 36 +fallxy ( 26, 3 ) = 107 +fallxy ( 26, 4 ) = 56 +fallxy ( 26, 5 ) = 56 +fallxy ( 26, 6 ) = 56 +fallxy ( 26, 7 ) = 27 +fallxy ( 26, 8 ) = 27 +xyphendoy1 ( 26, 1 ) = 2 +xyphendoy1 ( 26, 2 ) = 2 +xyphendoy1 ( 26, 3 ) = 2 +xyphendoy1 ( 26, 4 ) = 2 +xyphendoy1 ( 26, 5 ) = 2 +xyphendoy1 ( 26, 6 ) = 2 +xyphendoy1 ( 26, 7 ) = 2 +xyphendoy1 ( 26, 8 ) = 2 + + ! xlat -43.2500000000000 +greenupxy ( 25, 1 ) = 284 +greenupxy ( 25, 2 ) = 260 +greenupxy ( 25, 3 ) = 268 +greenupxy ( 25, 4 ) = 256 +greenupxy ( 25, 5 ) = 256 +greenupxy ( 25, 6 ) = 256 +greenupxy ( 25, 7 ) = 224 +greenupxy ( 25, 8 ) = 224 +fallxy ( 25, 1 ) = 62 +fallxy ( 25, 2 ) = 37 +fallxy ( 25, 3 ) = 99 +fallxy ( 25, 4 ) = 54 +fallxy ( 25, 5 ) = 54 +fallxy ( 25, 6 ) = 54 +fallxy ( 25, 7 ) = 30 +fallxy ( 25, 8 ) = 30 +xyphendoy1 ( 25, 1 ) = 2 +xyphendoy1 ( 25, 2 ) = 2 +xyphendoy1 ( 25, 3 ) = 2 +xyphendoy1 ( 25, 4 ) = 2 +xyphendoy1 ( 25, 5 ) = 2 +xyphendoy1 ( 25, 6 ) = 2 +xyphendoy1 ( 25, 7 ) = 2 +xyphendoy1 ( 25, 8 ) = 2 + + ! xlat -43.7500000000000 +greenupxy ( 24, 1 ) = 282 +greenupxy ( 24, 2 ) = 262 +greenupxy ( 24, 3 ) = 263 +greenupxy ( 24, 4 ) = 258 +greenupxy ( 24, 5 ) = 258 +greenupxy ( 24, 6 ) = 258 +greenupxy ( 24, 7 ) = 229 +greenupxy ( 24, 8 ) = 229 +fallxy ( 24, 1 ) = 62 +fallxy ( 24, 2 ) = 38 +fallxy ( 24, 3 ) = 83 +fallxy ( 24, 4 ) = 55 +fallxy ( 24, 5 ) = 55 +fallxy ( 24, 6 ) = 55 +fallxy ( 24, 7 ) = 35 +fallxy ( 24, 8 ) = 35 +xyphendoy1 ( 24, 1 ) = 2 +xyphendoy1 ( 24, 2 ) = 2 +xyphendoy1 ( 24, 3 ) = 2 +xyphendoy1 ( 24, 4 ) = 2 +xyphendoy1 ( 24, 5 ) = 2 +xyphendoy1 ( 24, 6 ) = 2 +xyphendoy1 ( 24, 7 ) = 2 +xyphendoy1 ( 24, 8 ) = 2 + + ! xlat -44.2500000000000 +greenupxy ( 23, 1 ) = 279 +greenupxy ( 23, 2 ) = 263 +greenupxy ( 23, 3 ) = 264 +greenupxy ( 23, 4 ) = 260 +greenupxy ( 23, 5 ) = 260 +greenupxy ( 23, 6 ) = 260 +greenupxy ( 23, 7 ) = 234 +greenupxy ( 23, 8 ) = 234 +fallxy ( 23, 1 ) = 61 +fallxy ( 23, 2 ) = 41 +fallxy ( 23, 3 ) = 64 +fallxy ( 23, 4 ) = 55 +fallxy ( 23, 5 ) = 55 +fallxy ( 23, 6 ) = 55 +fallxy ( 23, 7 ) = 35 +fallxy ( 23, 8 ) = 35 +xyphendoy1 ( 23, 1 ) = 2 +xyphendoy1 ( 23, 2 ) = 2 +xyphendoy1 ( 23, 3 ) = 2 +xyphendoy1 ( 23, 4 ) = 2 +xyphendoy1 ( 23, 5 ) = 2 +xyphendoy1 ( 23, 6 ) = 2 +xyphendoy1 ( 23, 7 ) = 2 +xyphendoy1 ( 23, 8 ) = 2 + + ! xlat -44.7500000000000 +greenupxy ( 22, 1 ) = 274 +greenupxy ( 22, 2 ) = 266 +greenupxy ( 22, 3 ) = 265 +greenupxy ( 22, 4 ) = 263 +greenupxy ( 22, 5 ) = 263 +greenupxy ( 22, 6 ) = 263 +greenupxy ( 22, 7 ) = 237 +greenupxy ( 22, 8 ) = 237 +fallxy ( 22, 1 ) = 59 +fallxy ( 22, 2 ) = 44 +fallxy ( 22, 3 ) = 64 +fallxy ( 22, 4 ) = 53 +fallxy ( 22, 5 ) = 53 +fallxy ( 22, 6 ) = 53 +fallxy ( 22, 7 ) = 39 +fallxy ( 22, 8 ) = 39 +xyphendoy1 ( 22, 1 ) = 2 +xyphendoy1 ( 22, 2 ) = 2 +xyphendoy1 ( 22, 3 ) = 2 +xyphendoy1 ( 22, 4 ) = 2 +xyphendoy1 ( 22, 5 ) = 2 +xyphendoy1 ( 22, 6 ) = 2 +xyphendoy1 ( 22, 7 ) = 2 +xyphendoy1 ( 22, 8 ) = 2 + + ! xlat -45.2500000000000 +greenupxy ( 21, 1 ) = 282 +greenupxy ( 21, 2 ) = 271 +greenupxy ( 21, 3 ) = 263 +greenupxy ( 21, 4 ) = 265 +greenupxy ( 21, 5 ) = 265 +greenupxy ( 21, 6 ) = 265 +greenupxy ( 21, 7 ) = 237 +greenupxy ( 21, 8 ) = 237 +fallxy ( 21, 1 ) = 59 +fallxy ( 21, 2 ) = 46 +fallxy ( 21, 3 ) = 64 +fallxy ( 21, 4 ) = 53 +fallxy ( 21, 5 ) = 53 +fallxy ( 21, 6 ) = 53 +fallxy ( 21, 7 ) = 39 +fallxy ( 21, 8 ) = 39 +xyphendoy1 ( 21, 1 ) = 2 +xyphendoy1 ( 21, 2 ) = 2 +xyphendoy1 ( 21, 3 ) = 2 +xyphendoy1 ( 21, 4 ) = 2 +xyphendoy1 ( 21, 5 ) = 2 +xyphendoy1 ( 21, 6 ) = 2 +xyphendoy1 ( 21, 7 ) = 2 +xyphendoy1 ( 21, 8 ) = 2 + + ! xlat -45.7500000000000 +greenupxy ( 20, 1 ) = 280 +greenupxy ( 20, 2 ) = 276 +greenupxy ( 20, 3 ) = 263 +greenupxy ( 20, 4 ) = 265 +greenupxy ( 20, 5 ) = 265 +greenupxy ( 20, 6 ) = 265 +greenupxy ( 20, 7 ) = 244 +greenupxy ( 20, 8 ) = 244 +fallxy ( 20, 1 ) = 59 +fallxy ( 20, 2 ) = 50 +fallxy ( 20, 3 ) = 56 +fallxy ( 20, 4 ) = 53 +fallxy ( 20, 5 ) = 53 +fallxy ( 20, 6 ) = 53 +fallxy ( 20, 7 ) = 39 +fallxy ( 20, 8 ) = 39 +xyphendoy1 ( 20, 1 ) = 2 +xyphendoy1 ( 20, 2 ) = 2 +xyphendoy1 ( 20, 3 ) = 2 +xyphendoy1 ( 20, 4 ) = 2 +xyphendoy1 ( 20, 5 ) = 2 +xyphendoy1 ( 20, 6 ) = 2 +xyphendoy1 ( 20, 7 ) = 2 +xyphendoy1 ( 20, 8 ) = 2 + + ! xlat -46.2500000000000 +greenupxy ( 19, 1 ) = 280 +greenupxy ( 19, 2 ) = 276 +greenupxy ( 19, 3 ) = 262 +greenupxy ( 19, 4 ) = 266 +greenupxy ( 19, 5 ) = 266 +greenupxy ( 19, 6 ) = 266 +greenupxy ( 19, 7 ) = 251 +greenupxy ( 19, 8 ) = 251 +fallxy ( 19, 1 ) = 59 +fallxy ( 19, 2 ) = 52 +fallxy ( 19, 3 ) = 44 +fallxy ( 19, 4 ) = 53 +fallxy ( 19, 5 ) = 53 +fallxy ( 19, 6 ) = 53 +fallxy ( 19, 7 ) = 39 +fallxy ( 19, 8 ) = 39 +xyphendoy1 ( 19, 1 ) = 2 +xyphendoy1 ( 19, 2 ) = 2 +xyphendoy1 ( 19, 3 ) = 2 +xyphendoy1 ( 19, 4 ) = 2 +xyphendoy1 ( 19, 5 ) = 2 +xyphendoy1 ( 19, 6 ) = 2 +xyphendoy1 ( 19, 7 ) = 2 +xyphendoy1 ( 19, 8 ) = 2 + + ! xlat -46.7500000000000 +greenupxy ( 18, 1 ) = 280 +greenupxy ( 18, 2 ) = 277 +greenupxy ( 18, 3 ) = 262 +greenupxy ( 18, 4 ) = 266 +greenupxy ( 18, 5 ) = 266 +greenupxy ( 18, 6 ) = 266 +greenupxy ( 18, 7 ) = 253 +greenupxy ( 18, 8 ) = 253 +fallxy ( 18, 1 ) = 59 +fallxy ( 18, 2 ) = 51 +fallxy ( 18, 3 ) = 41 +fallxy ( 18, 4 ) = 50 +fallxy ( 18, 5 ) = 50 +fallxy ( 18, 6 ) = 50 +fallxy ( 18, 7 ) = 41 +fallxy ( 18, 8 ) = 41 +xyphendoy1 ( 18, 1 ) = 2 +xyphendoy1 ( 18, 2 ) = 2 +xyphendoy1 ( 18, 3 ) = 2 +xyphendoy1 ( 18, 4 ) = 2 +xyphendoy1 ( 18, 5 ) = 2 +xyphendoy1 ( 18, 6 ) = 2 +xyphendoy1 ( 18, 7 ) = 2 +xyphendoy1 ( 18, 8 ) = 2 + + ! xlat -47.2500000000000 +greenupxy ( 17, 1 ) = 280 +greenupxy ( 17, 2 ) = 279 +greenupxy ( 17, 3 ) = 263 +greenupxy ( 17, 4 ) = 266 +greenupxy ( 17, 5 ) = 266 +greenupxy ( 17, 6 ) = 266 +greenupxy ( 17, 7 ) = 260 +greenupxy ( 17, 8 ) = 260 +fallxy ( 17, 1 ) = 59 +fallxy ( 17, 2 ) = 51 +fallxy ( 17, 3 ) = 38 +fallxy ( 17, 4 ) = 48 +fallxy ( 17, 5 ) = 48 +fallxy ( 17, 6 ) = 48 +fallxy ( 17, 7 ) = 44 +fallxy ( 17, 8 ) = 44 +xyphendoy1 ( 17, 1 ) = 2 +xyphendoy1 ( 17, 2 ) = 2 +xyphendoy1 ( 17, 3 ) = 2 +xyphendoy1 ( 17, 4 ) = 2 +xyphendoy1 ( 17, 5 ) = 2 +xyphendoy1 ( 17, 6 ) = 2 +xyphendoy1 ( 17, 7 ) = 2 +xyphendoy1 ( 17, 8 ) = 2 + + ! xlat -47.7500000000000 +greenupxy ( 16, 1 ) = 280 +greenupxy ( 16, 2 ) = 280 +greenupxy ( 16, 3 ) = 265 +greenupxy ( 16, 4 ) = 268 +greenupxy ( 16, 5 ) = 268 +greenupxy ( 16, 6 ) = 268 +greenupxy ( 16, 7 ) = 267 +greenupxy ( 16, 8 ) = 267 +fallxy ( 16, 1 ) = 59 +fallxy ( 16, 2 ) = 52 +fallxy ( 16, 3 ) = 35 +fallxy ( 16, 4 ) = 45 +fallxy ( 16, 5 ) = 45 +fallxy ( 16, 6 ) = 45 +fallxy ( 16, 7 ) = 43 +fallxy ( 16, 8 ) = 43 +xyphendoy1 ( 16, 1 ) = 2 +xyphendoy1 ( 16, 2 ) = 2 +xyphendoy1 ( 16, 3 ) = 2 +xyphendoy1 ( 16, 4 ) = 2 +xyphendoy1 ( 16, 5 ) = 2 +xyphendoy1 ( 16, 6 ) = 2 +xyphendoy1 ( 16, 7 ) = 2 +xyphendoy1 ( 16, 8 ) = 2 + + ! xlat -48.2500000000000 +greenupxy ( 15, 1 ) = 280 +greenupxy ( 15, 2 ) = 282 +greenupxy ( 15, 3 ) = 267 +greenupxy ( 15, 4 ) = 269 +greenupxy ( 15, 5 ) = 269 +greenupxy ( 15, 6 ) = 269 +greenupxy ( 15, 7 ) = 269 +greenupxy ( 15, 8 ) = 269 +fallxy ( 15, 1 ) = 59 +fallxy ( 15, 2 ) = 51 +fallxy ( 15, 3 ) = 34 +fallxy ( 15, 4 ) = 46 +fallxy ( 15, 5 ) = 46 +fallxy ( 15, 6 ) = 46 +fallxy ( 15, 7 ) = 43 +fallxy ( 15, 8 ) = 43 +xyphendoy1 ( 15, 1 ) = 2 +xyphendoy1 ( 15, 2 ) = 2 +xyphendoy1 ( 15, 3 ) = 2 +xyphendoy1 ( 15, 4 ) = 2 +xyphendoy1 ( 15, 5 ) = 2 +xyphendoy1 ( 15, 6 ) = 2 +xyphendoy1 ( 15, 7 ) = 2 +xyphendoy1 ( 15, 8 ) = 2 + + ! xlat -48.7500000000000 +greenupxy ( 14, 1 ) = 280 +greenupxy ( 14, 2 ) = 282 +greenupxy ( 14, 3 ) = 268 +greenupxy ( 14, 4 ) = 271 +greenupxy ( 14, 5 ) = 271 +greenupxy ( 14, 6 ) = 271 +greenupxy ( 14, 7 ) = 271 +greenupxy ( 14, 8 ) = 271 +fallxy ( 14, 1 ) = 59 +fallxy ( 14, 2 ) = 51 +fallxy ( 14, 3 ) = 30 +fallxy ( 14, 4 ) = 44 +fallxy ( 14, 5 ) = 44 +fallxy ( 14, 6 ) = 44 +fallxy ( 14, 7 ) = 46 +fallxy ( 14, 8 ) = 46 +xyphendoy1 ( 14, 1 ) = 2 +xyphendoy1 ( 14, 2 ) = 2 +xyphendoy1 ( 14, 3 ) = 2 +xyphendoy1 ( 14, 4 ) = 2 +xyphendoy1 ( 14, 5 ) = 2 +xyphendoy1 ( 14, 6 ) = 2 +xyphendoy1 ( 14, 7 ) = 2 +xyphendoy1 ( 14, 8 ) = 2 + + ! xlat -49.2500000000000 +greenupxy ( 13, 1 ) = 280 +greenupxy ( 13, 2 ) = 283 +greenupxy ( 13, 3 ) = 269 +greenupxy ( 13, 4 ) = 272 +greenupxy ( 13, 5 ) = 272 +greenupxy ( 13, 6 ) = 272 +greenupxy ( 13, 7 ) = 273 +greenupxy ( 13, 8 ) = 273 +fallxy ( 13, 1 ) = 59 +fallxy ( 13, 2 ) = 51 +fallxy ( 13, 3 ) = 28 +fallxy ( 13, 4 ) = 42 +fallxy ( 13, 5 ) = 42 +fallxy ( 13, 6 ) = 42 +fallxy ( 13, 7 ) = 47 +fallxy ( 13, 8 ) = 47 +xyphendoy1 ( 13, 1 ) = 2 +xyphendoy1 ( 13, 2 ) = 2 +xyphendoy1 ( 13, 3 ) = 2 +xyphendoy1 ( 13, 4 ) = 2 +xyphendoy1 ( 13, 5 ) = 2 +xyphendoy1 ( 13, 6 ) = 2 +xyphendoy1 ( 13, 7 ) = 2 +xyphendoy1 ( 13, 8 ) = 2 + + ! xlat -49.7500000000000 +greenupxy ( 12, 1 ) = 280 +greenupxy ( 12, 2 ) = 284 +greenupxy ( 12, 3 ) = 270 +greenupxy ( 12, 4 ) = 274 +greenupxy ( 12, 5 ) = 274 +greenupxy ( 12, 6 ) = 274 +greenupxy ( 12, 7 ) = 275 +greenupxy ( 12, 8 ) = 275 +fallxy ( 12, 1 ) = 59 +fallxy ( 12, 2 ) = 51 +fallxy ( 12, 3 ) = 32 +fallxy ( 12, 4 ) = 41 +fallxy ( 12, 5 ) = 41 +fallxy ( 12, 6 ) = 41 +fallxy ( 12, 7 ) = 48 +fallxy ( 12, 8 ) = 48 +xyphendoy1 ( 12, 1 ) = 2 +xyphendoy1 ( 12, 2 ) = 2 +xyphendoy1 ( 12, 3 ) = 2 +xyphendoy1 ( 12, 4 ) = 2 +xyphendoy1 ( 12, 5 ) = 2 +xyphendoy1 ( 12, 6 ) = 2 +xyphendoy1 ( 12, 7 ) = 2 +xyphendoy1 ( 12, 8 ) = 2 + + ! xlat -50.2500000000000 +greenupxy ( 11, 1 ) = 280 +greenupxy ( 11, 2 ) = 286 +greenupxy ( 11, 3 ) = 272 +greenupxy ( 11, 4 ) = 276 +greenupxy ( 11, 5 ) = 276 +greenupxy ( 11, 6 ) = 276 +greenupxy ( 11, 7 ) = 277 +greenupxy ( 11, 8 ) = 277 +fallxy ( 11, 1 ) = 59 +fallxy ( 11, 2 ) = 52 +fallxy ( 11, 3 ) = 32 +fallxy ( 11, 4 ) = 41 +fallxy ( 11, 5 ) = 41 +fallxy ( 11, 6 ) = 41 +fallxy ( 11, 7 ) = 50 +fallxy ( 11, 8 ) = 50 +xyphendoy1 ( 11, 1 ) = 2 +xyphendoy1 ( 11, 2 ) = 2 +xyphendoy1 ( 11, 3 ) = 2 +xyphendoy1 ( 11, 4 ) = 2 +xyphendoy1 ( 11, 5 ) = 2 +xyphendoy1 ( 11, 6 ) = 2 +xyphendoy1 ( 11, 7 ) = 2 +xyphendoy1 ( 11, 8 ) = 2 + + ! xlat -50.7500000000000 +greenupxy ( 10, 1 ) = 280 +greenupxy ( 10, 2 ) = 288 +greenupxy ( 10, 3 ) = 273 +greenupxy ( 10, 4 ) = 278 +greenupxy ( 10, 5 ) = 278 +greenupxy ( 10, 6 ) = 278 +greenupxy ( 10, 7 ) = 278 +greenupxy ( 10, 8 ) = 278 +fallxy ( 10, 1 ) = 59 +fallxy ( 10, 2 ) = 53 +fallxy ( 10, 3 ) = 31 +fallxy ( 10, 4 ) = 42 +fallxy ( 10, 5 ) = 42 +fallxy ( 10, 6 ) = 42 +fallxy ( 10, 7 ) = 50 +fallxy ( 10, 8 ) = 50 +xyphendoy1 ( 10, 1 ) = 2 +xyphendoy1 ( 10, 2 ) = 2 +xyphendoy1 ( 10, 3 ) = 2 +xyphendoy1 ( 10, 4 ) = 2 +xyphendoy1 ( 10, 5 ) = 2 +xyphendoy1 ( 10, 6 ) = 2 +xyphendoy1 ( 10, 7 ) = 2 +xyphendoy1 ( 10, 8 ) = 2 + + ! xlat -51.2500000000000 +greenupxy ( 9, 1 ) = 280 +greenupxy ( 9, 2 ) = 289 +greenupxy ( 9, 3 ) = 275 +greenupxy ( 9, 4 ) = 279 +greenupxy ( 9, 5 ) = 279 +greenupxy ( 9, 6 ) = 279 +greenupxy ( 9, 7 ) = 278 +greenupxy ( 9, 8 ) = 278 +fallxy ( 9, 1 ) = 59 +fallxy ( 9, 2 ) = 53 +fallxy ( 9, 3 ) = 34 +fallxy ( 9, 4 ) = 42 +fallxy ( 9, 5 ) = 42 +fallxy ( 9, 6 ) = 42 +fallxy ( 9, 7 ) = 50 +fallxy ( 9, 8 ) = 50 +xyphendoy1 ( 9, 1 ) = 2 +xyphendoy1 ( 9, 2 ) = 2 +xyphendoy1 ( 9, 3 ) = 2 +xyphendoy1 ( 9, 4 ) = 2 +xyphendoy1 ( 9, 5 ) = 2 +xyphendoy1 ( 9, 6 ) = 2 +xyphendoy1 ( 9, 7 ) = 2 +xyphendoy1 ( 9, 8 ) = 2 + + ! xlat -51.7500000000000 +greenupxy ( 8, 1 ) = 280 +greenupxy ( 8, 2 ) = 290 +greenupxy ( 8, 3 ) = 276 +greenupxy ( 8, 4 ) = 280 +greenupxy ( 8, 5 ) = 280 +greenupxy ( 8, 6 ) = 280 +greenupxy ( 8, 7 ) = 278 +greenupxy ( 8, 8 ) = 278 +fallxy ( 8, 1 ) = 59 +fallxy ( 8, 2 ) = 54 +fallxy ( 8, 3 ) = 34 +fallxy ( 8, 4 ) = 42 +fallxy ( 8, 5 ) = 42 +fallxy ( 8, 6 ) = 42 +fallxy ( 8, 7 ) = 50 +fallxy ( 8, 8 ) = 50 +xyphendoy1 ( 8, 1 ) = 2 +xyphendoy1 ( 8, 2 ) = 2 +xyphendoy1 ( 8, 3 ) = 2 +xyphendoy1 ( 8, 4 ) = 2 +xyphendoy1 ( 8, 5 ) = 2 +xyphendoy1 ( 8, 6 ) = 2 +xyphendoy1 ( 8, 7 ) = 2 +xyphendoy1 ( 8, 8 ) = 2 + + ! xlat -52.2500000000000 +greenupxy ( 7, 1 ) = 280 +greenupxy ( 7, 2 ) = 290 +greenupxy ( 7, 3 ) = 276 +greenupxy ( 7, 4 ) = 280 +greenupxy ( 7, 5 ) = 280 +greenupxy ( 7, 6 ) = 280 +greenupxy ( 7, 7 ) = 278 +greenupxy ( 7, 8 ) = 278 +fallxy ( 7, 1 ) = 59 +fallxy ( 7, 2 ) = 54 +fallxy ( 7, 3 ) = 35 +fallxy ( 7, 4 ) = 42 +fallxy ( 7, 5 ) = 42 +fallxy ( 7, 6 ) = 42 +fallxy ( 7, 7 ) = 50 +fallxy ( 7, 8 ) = 50 +xyphendoy1 ( 7, 1 ) = 2 +xyphendoy1 ( 7, 2 ) = 2 +xyphendoy1 ( 7, 3 ) = 2 +xyphendoy1 ( 7, 4 ) = 2 +xyphendoy1 ( 7, 5 ) = 2 +xyphendoy1 ( 7, 6 ) = 2 +xyphendoy1 ( 7, 7 ) = 2 +xyphendoy1 ( 7, 8 ) = 2 + + ! xlat -52.7500000000000 +greenupxy ( 6, 1 ) = 280 +greenupxy ( 6, 2 ) = 290 +greenupxy ( 6, 3 ) = 276 +greenupxy ( 6, 4 ) = 280 +greenupxy ( 6, 5 ) = 280 +greenupxy ( 6, 6 ) = 280 +greenupxy ( 6, 7 ) = 278 +greenupxy ( 6, 8 ) = 278 +fallxy ( 6, 1 ) = 59 +fallxy ( 6, 2 ) = 54 +fallxy ( 6, 3 ) = 35 +fallxy ( 6, 4 ) = 42 +fallxy ( 6, 5 ) = 42 +fallxy ( 6, 6 ) = 42 +fallxy ( 6, 7 ) = 50 +fallxy ( 6, 8 ) = 50 +xyphendoy1 ( 6, 1 ) = 2 +xyphendoy1 ( 6, 2 ) = 2 +xyphendoy1 ( 6, 3 ) = 2 +xyphendoy1 ( 6, 4 ) = 2 +xyphendoy1 ( 6, 5 ) = 2 +xyphendoy1 ( 6, 6 ) = 2 +xyphendoy1 ( 6, 7 ) = 2 +xyphendoy1 ( 6, 8 ) = 2 + + ! xlat -53.2500000000000 +greenupxy ( 5, 1 ) = 280 +greenupxy ( 5, 2 ) = 290 +greenupxy ( 5, 3 ) = 276 +greenupxy ( 5, 4 ) = 280 +greenupxy ( 5, 5 ) = 280 +greenupxy ( 5, 6 ) = 280 +greenupxy ( 5, 7 ) = 278 +greenupxy ( 5, 8 ) = 278 +fallxy ( 5, 1 ) = 59 +fallxy ( 5, 2 ) = 54 +fallxy ( 5, 3 ) = 35 +fallxy ( 5, 4 ) = 42 +fallxy ( 5, 5 ) = 42 +fallxy ( 5, 6 ) = 42 +fallxy ( 5, 7 ) = 50 +fallxy ( 5, 8 ) = 50 +xyphendoy1 ( 5, 1 ) = 2 +xyphendoy1 ( 5, 2 ) = 2 +xyphendoy1 ( 5, 3 ) = 2 +xyphendoy1 ( 5, 4 ) = 2 +xyphendoy1 ( 5, 5 ) = 2 +xyphendoy1 ( 5, 6 ) = 2 +xyphendoy1 ( 5, 7 ) = 2 +xyphendoy1 ( 5, 8 ) = 2 + + ! xlat -53.7500000000000 +greenupxy ( 4, 1 ) = 280 +greenupxy ( 4, 2 ) = 290 +greenupxy ( 4, 3 ) = 276 +greenupxy ( 4, 4 ) = 280 +greenupxy ( 4, 5 ) = 280 +greenupxy ( 4, 6 ) = 280 +greenupxy ( 4, 7 ) = 278 +greenupxy ( 4, 8 ) = 278 +fallxy ( 4, 1 ) = 59 +fallxy ( 4, 2 ) = 54 +fallxy ( 4, 3 ) = 35 +fallxy ( 4, 4 ) = 42 +fallxy ( 4, 5 ) = 42 +fallxy ( 4, 6 ) = 42 +fallxy ( 4, 7 ) = 50 +fallxy ( 4, 8 ) = 50 +xyphendoy1 ( 4, 1 ) = 2 +xyphendoy1 ( 4, 2 ) = 2 +xyphendoy1 ( 4, 3 ) = 2 +xyphendoy1 ( 4, 4 ) = 2 +xyphendoy1 ( 4, 5 ) = 2 +xyphendoy1 ( 4, 6 ) = 2 +xyphendoy1 ( 4, 7 ) = 2 +xyphendoy1 ( 4, 8 ) = 2 + + ! xlat -54.2500000000000 +greenupxy ( 3, 1 ) = 280 +greenupxy ( 3, 2 ) = 290 +greenupxy ( 3, 3 ) = 276 +greenupxy ( 3, 4 ) = 280 +greenupxy ( 3, 5 ) = 280 +greenupxy ( 3, 6 ) = 280 +greenupxy ( 3, 7 ) = 278 +greenupxy ( 3, 8 ) = 278 +fallxy ( 3, 1 ) = 59 +fallxy ( 3, 2 ) = 54 +fallxy ( 3, 3 ) = 35 +fallxy ( 3, 4 ) = 42 +fallxy ( 3, 5 ) = 42 +fallxy ( 3, 6 ) = 42 +fallxy ( 3, 7 ) = 50 +fallxy ( 3, 8 ) = 50 +xyphendoy1 ( 3, 1 ) = 2 +xyphendoy1 ( 3, 2 ) = 2 +xyphendoy1 ( 3, 3 ) = 2 +xyphendoy1 ( 3, 4 ) = 2 +xyphendoy1 ( 3, 5 ) = 2 +xyphendoy1 ( 3, 6 ) = 2 +xyphendoy1 ( 3, 7 ) = 2 +xyphendoy1 ( 3, 8 ) = 2 + + ! xlat -54.7500000000000 +greenupxy ( 2, 1 ) = 280 +greenupxy ( 2, 2 ) = 290 +greenupxy ( 2, 3 ) = 276 +greenupxy ( 2, 4 ) = 280 +greenupxy ( 2, 5 ) = 280 +greenupxy ( 2, 6 ) = 280 +greenupxy ( 2, 7 ) = 278 +greenupxy ( 2, 8 ) = 278 +fallxy ( 2, 1 ) = 59 +fallxy ( 2, 2 ) = 54 +fallxy ( 2, 3 ) = 35 +fallxy ( 2, 4 ) = 42 +fallxy ( 2, 5 ) = 42 +fallxy ( 2, 6 ) = 42 +fallxy ( 2, 7 ) = 50 +fallxy ( 2, 8 ) = 50 +xyphendoy1 ( 2, 1 ) = 2 +xyphendoy1 ( 2, 2 ) = 2 +xyphendoy1 ( 2, 3 ) = 2 +xyphendoy1 ( 2, 4 ) = 2 +xyphendoy1 ( 2, 5 ) = 2 +xyphendoy1 ( 2, 6 ) = 2 +xyphendoy1 ( 2, 7 ) = 2 +xyphendoy1 ( 2, 8 ) = 2 + + ! xlat -55.2500000000000 +greenupxy ( 1, 1 ) = 280 +greenupxy ( 1, 2 ) = 290 +greenupxy ( 1, 3 ) = 276 +greenupxy ( 1, 4 ) = 280 +greenupxy ( 1, 5 ) = 280 +greenupxy ( 1, 6 ) = 280 +greenupxy ( 1, 7 ) = 278 +greenupxy ( 1, 8 ) = 278 +fallxy ( 1, 1 ) = 59 +fallxy ( 1, 2 ) = 54 +fallxy ( 1, 3 ) = 35 +fallxy ( 1, 4 ) = 42 +fallxy ( 1, 5 ) = 42 +fallxy ( 1, 6 ) = 42 +fallxy ( 1, 7 ) = 50 +fallxy ( 1, 8 ) = 50 +xyphendoy1 ( 1, 1 ) = 2 +xyphendoy1 ( 1, 2 ) = 2 +xyphendoy1 ( 1, 3 ) = 2 +xyphendoy1 ( 1, 4 ) = 2 +xyphendoy1 ( 1, 5 ) = 2 +xyphendoy1 ( 1, 6 ) = 2 +xyphendoy1 ( 1, 7 ) = 2 +xyphendoy1 ( 1, 8 ) = 2 + +!jhan: alternative to reading file +DO nx=1,nphen + greenup(ilat,ivtx(nx)) = greenupxy (ilat, nx) + fall(ilat,ivtx(nx)) = fallxy (ilat, nx) + phendoy1(ilat,ivtx(nx))= xyphendoy1(ilat, nx) +ENDDO + + DO np=1,mp + ilat=(casamet%lat(np)+55.25)/0.5+1 + ilat= MIN(271,MAX(1,ilat)) + phen%phase(np) = phendoy1(ilat,veg%iveg(np)) + phen%doyphase(np,1) = greenup(ilat,veg%iveg(np)) ! DOY for greenup + phen%doyphase(np,2) = phen%doyphase(np,1) +14 ! DOY for steady LAI + phen%doyphase(np,3) = fall(ilat,veg%iveg(np)) ! DOY for leaf senescence + phen%doyphase(np,4) = phen%doyphase(np,3) +14 ! DOY for minimal LAI season + IF (phen%doyphase(np,2) > 365) phen%doyphase(np,2)=phen%doyphase(np,2)-365 + IF (phen%doyphase(np,4) > 365) phen%doyphase(np,4)=phen%doyphase(np,4)-365 + + ENDDO + + END SUBROUTINE casa_readphen + + SUBROUTINE casa_init(casabiome,casamet,casaflux,casapool,casabal,veg,phen) + ! mst not used (BP sep2010) + ! ! for first time reading file *_1220.csv (BP may2010) + !SUBROUTINE casa_init(mst,casapool,casabal,veg) + ! !SUBROUTINE casa_init(mst,casapool,casabal) + ! ! end addition (BP may2010) + ! initialize some values in phenology parameters and leaf growth phase + USE casadimension + USE casaparm + +USE phenology_type_mod, ONLY: phenology_type +USE casa_biome_type_mod, ONLY: casa_biome => casa_biome_type +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + + ! for first time reading file *_1220.csv (BP may2010) + USE cable_def_types_mod +!jh: we get lat/lon from UM anyway and I want to get rid of this dependency +!jh! USE cable_io_vars_module, ONLY: patch + USE cable_common_module, ONLY: cable_user +#ifndef UM_CBL +USE casa_offline_inout_module, ONLY : READ_CASA_RESTART_NC +#endif + + ! end addition (BP may2010) + IMPLICIT NONE + ! INTEGER, INTENT(IN) :: mst + TYPE (casa_biome), INTENT(IN) :: casabiome + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_flux), INTENT(INOUT) :: casaflux + TYPE (casa_pool), INTENT(INOUT) :: casapool + TYPE (casa_balance), INTENT(INOUT) :: casabal + ! for first time reading file *_1220.csv (BP may2010) + TYPE (veg_parameter_type), INTENT(IN) :: veg + TYPE (phenology_type), INTENT(INOUT) :: phen + REAL(r_2) :: clabile,cplant(3),clitter(3),csoil(3) + REAL(r_2) :: nplant(3),nlitter(3),nsoil(3),nsoilmin,pplant(3) + REAL(r_2) :: plitter(3),psoil(3),psoillab,psoilsorb,psoilocc + ! end addition (BP may2010) + + ! local variables + INTEGER :: np,npt,npz + INTEGER :: nyearz,ivtz,istz,isoz + REAL(r_2) :: latz,lonz,areacellz,glaiz,slaz + LOGICAL :: EXRST + + + IF (.NOT.cable_user%casa_fromzero) THEN + PRINT *, 'initial pool from restart file' + ENDIF + PRINT *, 'icycle,initcasa,mp ', icycle,initcasa,mp + !phen%phase = 2 + + !CLN initialise all ! THIS NEEDS FIXING because of e.g. ICE-WATER + casaflux%Cgpp = 0. + casaflux%Cnpp = 0. + casaflux%Crp = 0. + casaflux%Crgplant = 0. + ! casaflux%Nminfix = 0. + casaflux%Nminuptake = 0. + casaflux%Plabuptake = 0. + casaflux%Clabloss = 0. + casaflux%fracClabile = 0. + casaflux%stemnpp = 0. + casaflux%frac_sapwood = 0. + casaflux%sapwood_area = 0. + casaflux%FluxCtohwp = 0. + casaflux%FluxCtoClear = 0. + casaflux%fracCalloc = 0. + casaflux%fracNalloc = 0. + casaflux%fracPalloc = 0. + casaflux%Crmplant = 0. + casaflux%kplant = 0. + + casaflux%fromPtoL = 0. + + casaflux%Cnep = 0. + casaflux%Crsoil = 0. + casapool%dClabiledt = 0.0 + !casaflux%Nmindep = casaflux%Nmindep /2.0 + !casaflux%Nmindep = 0. + casaflux%Nminloss = 0. + casaflux%Nminleach = 0. + casaflux%Nupland = 0. + casaflux%Nlittermin = 0. + casaflux%Nsmin = 0. + casaflux%Nsimm = 0. + casaflux%Nsnet = 0. + !casaflux%fNminloss = 0. + !casaflux%fNminleach = 0. + !casaflux%Pdep = 0. + !casaflux%Pwea = 0. + casaflux%Pleach = 0. + casaflux%Ploss = 0. + casaflux%Pupland = 0. + casaflux%Plittermin = 0. + casaflux%Psmin = 0. + casaflux%Psimm = 0. + casaflux%Psnet = 0. + ! casaflux%fPleach = 0. !vh ! this should be a parameter, not a flux variable + casaflux%kplab = 0. + casaflux%kpsorb = 0. + casaflux%kpocc = 0. + ! casaflux%Psorbmax = 0. !vh ! this should be a paramter, not a flux variable + + casaflux%klitter = 0. + casaflux%ksoil = 0. + casaflux%fromLtoS = 0. + casaflux%fromStoS = 0. + casaflux%fromLtoCO2 = 0. + casaflux%fromStoCO2 = 0. + casaflux%FluxCtolitter= 0. + casaflux%FluxNtolitter= 0. + casaflux%FluxPtolitter= 0. + casaflux%FluxCtosoil = 0. + casaflux%FluxNtosoil = 0. + casaflux%FluxPtosoil = 0. + casaflux%FluxCtoCO2 = 0. + + casaflux%Cplant_turnover = 0. +!Ticket #204 - rm phen% clobbing here AND incorrectly so anyway + + IF (initcasa==1) THEN + IF (.NOT.cable_user%casa_fromzero) THEN +#ifndef UM_CBL + CALL READ_CASA_RESTART_NC ( casamet, casapool, casaflux, phen ) +#endif + ELSE + WRITE(*,*)'casa_init: not using restart file!' + WRITE(*,*)'Using input from readbiome.!' + WRITE(*,*) 'initialising frac_sapwood=1 and sapwood_area = 0)' + casaflux%frac_sapwood(:) = 1.0 + casaflux%sapwood_area(:) = 0.0 + ENDIF + ENDIF + WHERE(casamet%lnonwood==1) casapool%cplant(:,WOOD) = 0.0 + WHERE(casamet%lnonwood==1) casapool%nplant(:,WOOD) = 0.0 + WHERE(casamet%lnonwood==1) casapool%pplant(:,WOOD) = 0.0 + +!$ENDIF + !92 format(5(i6,2x),5(f18.6,3x),2(i6,',',2x),',',2x,100(f18.6,3x)) +92 FORMAT(5(i6,',',2x),5(f18.6,',',2x),2(i6,',',2x),',',2x,100(f18.6,',',2x)) + +!jh: we get lat/lon from UM anyway and I want to get rid of this dependency +!jh! IF(initcasa==0) THEN +!jh! nyearz = 1 +!jh! DO npt=1,mp +!jh! casamet%lon(npt) = patch(npt)%longitude +!jh! casamet%lat(npt) = patch(npt)%latitude +!jh! ENDDO +!jh! ENDIF +!jh! + ! reset labile C pool,comment out by Q.Zhang 10/09/2011 + ! casapool%clabile = 0.0 + ! check pool sizes + casapool%cplant = MAX(0.0,casapool%cplant) + casapool%clitter = MAX(0.0,casapool%clitter) + casapool%csoil = MAX(0.0,casapool%csoil) + casabal%cplantlast = casapool%cplant + casabal%clitterlast = casapool%clitter + casabal%csoillast = casapool%csoil + casabal%clabilelast = casapool%clabile + casabal%sumcbal = 0.0 + casabal%FCgppyear=0.0;casabal%FCrpyear=0.0 + casabal%FCnppyear=0;casabal%FCrsyear=0.0;casabal%FCneeyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%cplant(:,WOOD) = 0.0 + IF (icycle==1) THEN + casapool%Nplant(:,:) = casapool%cplant(:,:) * casapool%ratioNCplant(:,:) + casapool%Nsoil(:,:) = casapool%ratioNCsoil(:,:) * casapool%Csoil(:,:) + casapool%Psoil(:,:) = casapool%Nsoil(:,:)/casapool%ratioNPsoil(:,:) + casapool%Nsoilmin(:) = 2.5 + ENDIF + + IF (icycle >=1) THEN + casapool%nplant = MAX(1.e-6,casapool%nplant) + casapool%nlitter = MAX(1.e-6,casapool%nlitter) + casapool%nsoil = MAX(1.e-6,casapool%nsoil) + casapool%nsoilmin = MAX(1.e-6,casapool%nsoilmin) + casabal%nplantlast = casapool%nplant + casabal%nlitterlast = casapool%nlitter + casabal%nsoillast = casapool%nsoil + casabal%nsoilminlast= casapool%nsoilmin + casabal%sumnbal = 0.0 + casabal%FNdepyear=0.0;casabal%FNfixyear=0.0;casabal%FNsnetyear=0.0 + casabal%FNupyear=0.0;casabal%FNleachyear=0.0;casabal%FNlossyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%nplant(:,WOOD) = 0.0 + ENDIF + + IF (icycle >=1) THEN + casapool%pplant = MAX(1.0e-7,casapool%pplant) + casapool%plitter = MAX(1.0e-7,casapool%plitter) + casapool%psoil = MAX(1.0e-7,casapool%psoil) + casapool%Psoillab = MAX(1.0e-7,casapool%psoillab) ! was 2.0, changed according to YP + casapool%psoilsorb = MAX(1.0e-7,casapool%psoilsorb) ! was 10.0, - + casapool%psoilocc = MAX(1.0e-7,casapool%psoilocc) ! was 50.0, - + casabal%pplantlast = casapool%pplant + casabal%plitterlast = casapool%plitter + casabal%psoillast = casapool%psoil + casabal%psoillablast = casapool%psoillab + casabal%psoilsorblast = casapool%psoilsorb + casabal%psoilocclast = casapool%psoilocc + casabal%sumpbal = 0.0 + casabal%FPweayear=0.0;casabal%FPdustyear=0.0; casabal%FPsnetyear=0.0 + casabal%FPupyear=0.0;casabal%FPleachyear=0.0;casabal%FPlossyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%pplant(:,WOOD) = 0.0 + ENDIF + + casapool%cwoodprod=0.0; casapool%nwoodprod=0.0;casapool%pwoodprod=0.0 + + END SUBROUTINE casa_init + + + SUBROUTINE casa_poolout(ktau,veg,soil,casabiome,casapool,casaflux,casamet, & + casabal,phen) + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + USE cable_common_module, ONLY: cable_user +USE phenology_type_mod, ONLY: phenology_type +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_biome_type_mod, ONLY: casa_biome => casa_biome_type +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: ktau + TYPE (veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters + TYPE (soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters + TYPE (casa_biome), INTENT(INOUT) :: casabiome + TYPE (casa_pool), INTENT(INOUT) :: casapool + TYPE (casa_flux), INTENT(INOUT) :: casaflux + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_balance), INTENT(INOUT) :: casabal + TYPE (phenology_type), INTENT(INOUT) :: phen + + ! local variables + REAL(r_2), DIMENSION(mso) :: Psorder,pweasoil,xpsoil50 + REAL(r_2), DIMENSION(mso) :: fracPlab,fracPsorb,fracPocc,fracPorg + REAL(r_2), DIMENSION(mp) :: totpsoil + INTEGER npt,nout,nso + + ! Soiltype soilnumber soil P(g P/m2) + ! Alfisol 1 61.3 + ! Andisol 2 103.9 + ! Aridisol 3 92.8 + ! Entisol 4 136.9 + ! Gellisol 5 98.2 + ! Histosol 6 107.6 + ! Inceptisol 7 84.1 + ! Mollisol 8 110.1 + ! Oxisol 9 35.4 + ! Spodosol 10 41.0 + ! Ultisol 11 51.5 + ! Vertisol 12 190.6 + DATA psorder/61.3,103.9,92.8,136.9,98.2,107.6,84.1,110.1,35.4,41.0,51.5,190.6/ + DATA pweasoil/0.05,0.04,0.03,0.02,0.01,0.009,0.008,0.007,0.006,0.005,0.004,0.003/ + DATA fracpLab/0.08,0.08,0.10,0.02,0.08,0.08,0.08,0.06,0.02,0.05,0.09,0.05/ + DATA fracPsorb/0.32,0.37,0.57,0.67,0.37,0.37,0.37,0.32,0.24,0.22,0.21,0.38/ + DATA fracPocc/0.36,0.38,0.25,0.26,0.38,0.38,0.38,0.44,0.38,0.38,0.37,0.45/ + DATA fracPorg/0.25,0.17,0.08,0.05,0.17,0.17,0.17,0.18,0.36,0.35,0.34,0.12/ + DATA xpsoil50/7.6,4.1,4.2,3.4,4.1,4.1,4.8,4.1,6.9,6.9,6.9,1.7/ + ! + ! estimated based on Yang, Post and Jain (2013) + ! Soiltype soilnumber soil P(g P/m2 top 50 cm) + ! Alfisol 1 400 + ! Andisol 2 426 + ! Aridisol 3 352 + ! Entisol 4 490 + ! Gellisol 5 403 + ! Histosol 6 441 + ! Inceptisol 7 501 + ! Mollisol 8 358 + ! Oxisol 9 96 + ! Spodosol 10 364 + ! Ultisol 11 272 + ! Vertisol 12 430 + ! DATA psorder/400.0,426.0,352.0,490.0,403.0,441.0,501.0,358.0,96.0,364.0,272.0,430.0/ + ! DATA pweasoil/0.05,0.04,0.03,0.02,0.01,0.009,0.008,0.007,0.006,0.005,0.004,0.003/ + ! DATA fracpLab/0.07,0.04,0.08,0.10,0.08,0.10,0.12,0.05,0.05,0.06,0.06,0.05/ + ! DATA fracPsorb/0.30,0.44,0.69,0.53,0.37,0.14,0.24,0.32,0.15,0.21,0.17,0.35/ + ! DATA fracPocc/0.38,0.22,0.18,0.22,0.38,0.42,0.23,0.44,0.60,0.30,0.51,0.48/ + ! DATA fracPorg/0.25,0.30,0.05,0.15,0.17,0.34,0.41,0.19,0.20,0.43,0.26,0.12/ + ! DATA xpsoil50/1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0/ + + PRINT *, 'Within casa_poolout, mp = ', mp + nout=103 + OPEN(nout,file=casafile%cnpepool) + PRINT *, 'Opened file ', casafile%cnpepool + + casabal%sumcbal=MIN(9999.0,MAX(-9999.0,casabal%sumcbal)) + casabal%sumnbal=MIN(9999.0,MAX(-9999.0,casabal%sumnbal)) + casabal%sumpbal=MIN(9999.0,MAX(-9999.0,casabal%sumpbal)) + + DO npt =1, mp + nso = casamet%isorder(npt) + totpsoil(npt) = psorder(nso) *xpsoil50(nso) + IF(casamet%iveg2(npt)>0 ) THEN + IF (icycle<2) THEN + casapool%Nplant(npt,:) = casapool%ratioNCplant(npt,:) & + * casapool%cplant(npt,:) + casapool%Nlitter(npt,:)= casapool%ratioNClitter(npt,:) & + * casapool%clitter(npt,:) + casapool%Nsoil(npt,:) = casapool%ratioNCsoil(npt,:) & + * casapool%Csoil(npt,:) + casapool%nsoilmin(npt) = 2.0 + casabal%sumnbal(npt) = 0.0 + IF(casamet%iveg2(npt)==grass) THEN + casapool%nplant(npt,wood) = 0.0 + casapool%nlitter(npt,cwd) = 0.0 + ENDIF + ENDIF + + IF (icycle<3) THEN + casabal%sumpbal(npt) = 0.0 + casapool%pplant(npt,:) = casapool%Nplant(npt,:)/casapool%ratioNPplant(npt,:) + casapool%plitter(npt,:) = casapool%Nlitter(npt,:)/(casapool%ratioNPlitter(npt,:)+1.0e-10) + casapool%psoil(npt,:) = casapool%Nsoil(npt,:)/casapool%ratioNPsoil(npt,:) + casapool%psoillab(npt) = totpsoil(npt) *fracpLab(nso) + casapool%psoilsorb(npt)= casaflux%psorbmax(npt) * casapool%psoillab(npt) & + /(casaflux%kmlabp(npt)+casapool%psoillab(npt)) + casapool%psoilocc(npt) = totpsoil(npt) *fracPocc(nso) + IF(casamet%iveg2(npt)==grass) THEN + casapool%pplant(npt,wood) = 0.0 + casapool%plitter(npt,cwd) = 0.0 + ENDIF + ENDIF + ELSE + casapool%cplant(npt,:)=0.0; casapool%clitter(npt,:)=0.0; casapool%csoil(npt,:) = 0.0; casapool%clabile(npt) = 0.0 + casapool%nplant(npt,:)=0.0; casapool%nlitter(npt,:)=0.0; casapool%nsoil(npt,:) = 0.0; casapool%nsoilmin(npt) = 0.0 + casapool%pplant(npt,:)=0.0; casapool%plitter(npt,:)=0.0; casapool%psoil(npt,:) = 0.0 + casapool%psoillab(npt) = 0.0; casapool%psoilsorb(npt) = 0.0; casapool%psoilocc(npt) = 0.0 + casabal%sumcbal(npt) =0.0; casabal%sumnbal(npt) =0.0; casabal%sumpbal(npt) = 0.0 + ENDIF + + ! vh_js ! + IF (cable_user%CALL_POP) THEN + + WRITE(nout,92) ktau,npt,veg%iveg(npt),soil%isoilm(npt) , & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casamet%glai(npt), & + casabiome%sla(veg%iveg(npt)), phen%phase(npt), & + phen%doyphase(npt,3), phen%phen(npt), phen%aphen(npt), & + casapool%clabile(npt), & + casapool%cplant(npt,:),casapool%clitter(npt,:),casapool%csoil(npt,:), & + casaflux%frac_sapwood(npt), casaflux%sapwood_area(npt), & + casapool%nplant(npt,:),casapool%nlitter(npt,:),casapool%nsoil(npt,:), & + casapool%nsoilmin(npt),casapool%pplant(npt,:), & + casapool%plitter(npt,:), casapool%psoil(npt,:), & + casapool%psoillab(npt),casapool%psoilsorb(npt),casapool%psoilocc(npt), & + casabal%sumcbal(npt),casabal%sumnbal(npt),casabal%sumpbal(npt) + + + ELSE + WRITE(nout,92) ktau,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casamet%glai(npt), & + casabiome%sla(veg%iveg(npt)), phen%phase(npt), & + phen%doyphase(npt,3), phen%phen(npt), phen%aphen(npt), & + casapool%clabile(npt), & + casapool%cplant(npt,:),casapool%clitter(npt,:),casapool%csoil(npt,:), & + casapool%nplant(npt,:),casapool%nlitter(npt,:),casapool%nsoil(npt,:), & + casapool%nsoilmin(npt),casapool%pplant(npt,:), & + casapool%plitter(npt,:), casapool%psoil(npt,:), & + casapool%psoillab(npt),casapool%psoilsorb(npt),casapool%psoilocc(npt), & + casabal%sumcbal(npt),casabal%sumnbal(npt),casabal%sumpbal(npt) + ENDIF + + + ENDDO + + CLOSE(nout) + +92 FORMAT(5(i6,',',2x),5(f18.6,',',2x),2(i6,',',2x),100(f18.6,',',2x)) + END SUBROUTINE casa_poolout + +SUBROUTINE casa_fluxout(myear,veg,soil,casabal,casamet) + + USE cable_def_types_mod + USE casadimension + USE casaparm +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type +USE phenology_type_mod, ONLY: phenology_type + + IMPLICIT NONE + + TYPE (veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters + TYPE (soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_balance), INTENT(INOUT) :: casabal + INTEGER, INTENT(IN) :: myear + ! REAL(r_2), INTENT(IN) :: clitterinput(mp,3),csoilinput(mp,3) + + ! local variables + INTEGER npt,nout + REAL(r_2) xyear, totGPP, totNPP + + totGPP =0.0 + totNPP =0.0 + nout=104 + xyear=1.0/FLOAT(myear) + casabal%FCgppyear=casabal%FCgppyear * xyear + casabal%FCnppyear=casabal%FCnppyear * xyear + casabal%FCrmleafyear=casabal%FCrmleafyear * xyear + casabal%FCrmwoodyear=casabal%FCrmwoodyear * xyear + casabal%FCrmrootyear=casabal%FCrmrootyear * xyear + casabal%FCrgrowyear=casabal%FCrgrowyear * xyear + casabal%FCrsyear=casabal%FCrsyear * xyear + casabal%FCneeyear=casabal%FCneeyear * xyear + casabal%FNdepyear=casabal%FNdepyear * xyear + casabal%FNfixyear=casabal%FNfixyear * xyear + casabal%FNsnetyear=casabal%FNsnetyear * xyear + casabal%FNupyear=casabal%FNupyear * xyear + casabal%FNleachyear=casabal%FNleachyear * xyear + casabal%FNlossyear=casabal%FNlossyear * xyear + casabal%FPweayear=casabal%FPweayear * xyear + casabal%FPdustyear=casabal%FPdustyear * xyear + casabal%FPsnetyear=casabal%FPsnetyear * xyear + casabal%FPupyear=casabal%FPupyear * xyear + casabal%FPleachyear=casabal%FPleachyear * xyear + casabal%FPlossyear=casabal%FPlossyear * xyear + ! clitterinput = clitterinput * xyear + ! csoilinput = csoilinput * xyear + + PRINT *, 'writing CNP fluxes out to file ', casafile%cnpflux + OPEN(nout,file=casafile%cnpflux) + DO npt =1,mp + SELECT CASE(icycle) + CASE(1) + + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%Fcnppyear(npt), & + casabal%Fcrmleafyear(npt),casabal%Fcrmwoodyear(npt), & + casabal%Fcrmrootyear(npt),casabal%Fcrgrowyear(npt), & + casabal%Fcrsyear(npt),casabal%Fcneeyear(npt) ! , & + ! clitterinput(npt,:),csoilinput(npt,:) + + CASE(2) + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%FCnppyear(npt), & + casabal%FCrmleafyear(npt),casabal%FCrmwoodyear(npt), & + casabal%FCrmrootyear(npt),casabal%FCrgrowyear(npt), & + casabal%FCrsyear(npt), casabal%FCneeyear(npt), & + ! clitterinput(npt,:),csoilinput(npt,:), & + casabal%FNdepyear(npt),casabal%FNfixyear(npt),casabal%FNsnetyear(npt), & + casabal%FNupyear(npt), casabal%FNleachyear(npt),casabal%FNlossyear(npt) + + CASE(3) + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%FCnppyear(npt), & + casabal%Fcrmleafyear(npt),casabal%Fcrmwoodyear(npt), & + casabal%Fcrmrootyear(npt),casabal%Fcrgrowyear(npt), & + casabal%FCrsyear(npt), casabal%FCneeyear(npt), & + ! clitterinput(npt,:),csoilinput(npt,:), & + casabal%FNdepyear(npt),casabal%FNfixyear(npt), casabal%FNsnetyear(npt),& + casabal%FNupyear(npt), casabal%FNleachyear(npt),casabal%FNlossyear(npt),& + casabal%FPweayear(npt),casabal%FPdustyear(npt), casabal%FPsnetyear(npt),& + casabal%FPupyear(npt), casabal%FPleachyear(npt),casabal%FPlossyear(npt) + + END SELECT + totGPP = totGPP+casabal%Fcgppyear(npt)* casamet%areacell(npt) + + + totNPP = totNPP+casabal%Fcnppyear(npt)* casamet%areacell(npt) + ENDDO + + PRINT *, 'totGPP global = ', totGPP*(1.0e-15) + PRINT *, 'totNPP global = ', totNPP*(1.0e-15) + CLOSE(nout) +92 FORMAT(5(i6,',',2x),100(f15.6,',',2x)) + END SUBROUTINE casa_fluxout + +SUBROUTINE casa_cnpflux(casaflux,casapool,casabal,zeroflux) + USE cable_def_types_mod + USE casadimension + USE casaparm +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + +IMPLICIT NONE + +TYPE (casa_flux), INTENT(INOUT) :: casaflux +TYPE (casa_pool), INTENT(INOUT) :: casapool +TYPE (casa_balance), INTENT(INOUT) :: casabal + + LOGICAL :: zeroflux + ! REAL(r_2), INTENT(INOUT) :: clitterinput(mp,3),csoilinput(mp,3) + INTEGER n + + IF(zeroflux) THEN + casabal%FCgppyear = 0.0 + casabal%FCrpyear = 0.0 + casabal%FCrmleafyear = 0.0 + casabal%FCrmwoodyear = 0.0 + casabal%FCrmrootyear = 0.0 + casabal%FCrgrowyear = 0.0 + casabal%FCnppyear = 0.0 + casabal%FCrsyear = 0.0 + casabal%FCneeyear = 0.0 + casabal%dCdtyear = 0.0 + + + casabal%FNdepyear = 0.0 + casabal%FNfixyear = 0.0 + casabal%FNsnetyear = 0.0 + casabal%FNupyear = 0.0 + casabal%FNleachyear = 0.0 + casabal%FNlossyear = 0.0 + + casabal%FPweayear = 0.0 + casabal%FPdustyear = 0.0 + casabal%FPsnetyear = 0.0 + casabal%FPupyear = 0.0 + casabal%FPleachyear = 0.0 + casabal%FPlossyear = 0.0 + + casaflux%FluxCtohwp = 0.0 + casaflux%FluxNtohwp = 0.0 + casaflux%FluxPtohwp = 0.0 + casaflux%FluxCtoclear = 0.0 + casaflux%FluxNtoclear = 0.0 + casaflux%FluxPtoclear = 0.0 + casaflux%CtransferLUC = 0.02 + ELSE + + casaflux%Crp(:) = casaflux%Crmplant(:,leaf) + casaflux%Crmplant(:,wood) + casaflux%Crmplant(:,froot) + casaflux%Crgplant(:) + casabal%FCgppyear = casabal%FCgppyear + casaflux%Cgpp * deltpool + casabal%FCrpyear = casabal%FCrpyear + casaflux%Crp * deltpool + casabal%FCrmleafyear(:) = casabal%FCrmleafyear(:) + casaflux%Crmplant(:,leaf) * deltpool + casabal%FCrmwoodyear(:) = casabal%FCrmwoodyear(:) + casaflux%Crmplant(:,wood) * deltpool + casabal%FCrmrootyear(:) = casabal%FCrmrootyear(:) + casaflux%Crmplant(:,froot) * deltpool + casabal%FCrgrowyear = casabal%FCrgrowyear + casaflux%Crgplant * deltpool + ! change made ypwang 17-nov-2013 to accoutn for change in labile carbon pool size + casabal%FCnppyear = casabal%FCnppyear + (casaflux%Cnpp+casapool%dClabiledt) * deltpool + casabal%FCrsyear = casabal%FCrsyear + casaflux%Crsoil * deltpool + casabal%FCneeyear = casabal%FCneeyear & + + (casaflux%Cnpp+casapool%dClabiledt-casaflux%Crsoil) * deltpool + casabal%dCdtyear = casabal%dCdtyear + (casapool%Ctot-casapool%Ctot_0)*deltpool + + ! DO n=1,3 + ! clitterinput(:,n)= clitterinput(:,n) + casaflux%kplant(:,n) * casapool%cplant(:,n) * deltpool + ! csoilinput(:,n) = csoilinput(:,n) + casaflux%fluxCtosoil(:,n) * deltpool + ! !csoilinput(:,n) = csoilinput(:,n)+casaflux%fluxCtolitter(:,n)*deltpool + ! ENDDO + + IF (icycle >1) THEN + casabal%FNdepyear = casabal%FNdepyear + casaflux%Nmindep * deltpool + casabal%FNfixyear = casabal%FNfixyear + casaflux%Nminfix * deltpool + casabal%FNsnetyear = casabal%FNsnetyear + casaflux%Nsnet * deltpool + casabal%FNupyear = casabal%FNupyear + casaflux%Nminuptake * deltpool + casabal%FNleachyear = casabal%FNleachyear + casaflux%Nminleach * deltpool + casabal%FNlossyear = casabal%FNlossyear + casaflux%Nminloss * deltpool + ENDIF + + IF (icycle >2) THEN + casabal%FPweayear = casabal%FPweayear + casaflux%Pwea * deltpool + casabal%FPdustyear = casabal%FPdustyear + casaflux%Pdep * deltpool + casabal%FPsnetyear = casabal%FPsnetyear + casaflux%Psnet * deltpool + casabal%FPupyear = casabal%FPupyear + casaflux%Plabuptake * deltpool + casabal%FPleachyear = casabal%FPleachyear + casaflux%Pleach * deltpool + casabal%FPlossyear = casabal%FPlossyear + casaflux%Ploss * deltpool + ENDIF + ENDIF + END SUBROUTINE casa_cnpflux + +END MODULE casa_inout_module diff --git a/src/coupled/AM3/control/casa/types/casa_met_type.F90 b/src/coupled/AM3/control/casa/types/casa_met_type.F90 new file mode 100644 index 000000000..793be48d6 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_met_type.F90 @@ -0,0 +1,234 @@ +MODULE casa_met_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_met_data_type +PUBLIC :: casa_met_type +PUBLIC :: alloc_casa_met_data_type +PUBLIC :: assoc_casa_met_type + +TYPE casa_met_data_type + + INTEGER, ALLOCATABLE :: lnonwood (:) + INTEGER, ALLOCATABLE :: iveg2 (:) + INTEGER, ALLOCATABLE :: ijgcm (:) + INTEGER, ALLOCATABLE :: isorder (:) + + REAL(r_2), ALLOCATABLE :: glai (:) + REAL(r_2), ALLOCATABLE :: Tairk (:) + REAL(r_2), ALLOCATABLE :: precip (:) + REAL(r_2), ALLOCATABLE :: tsoilavg (:) + REAL(r_2), ALLOCATABLE :: moistavg (:) + REAL(r_2), ALLOCATABLE :: btran (:) + REAL(r_2), ALLOCATABLE :: lat (:) + REAL(r_2), ALLOCATABLE :: lon (:) + REAL(r_2), ALLOCATABLE :: areacell (:) + + REAL(r_2), ALLOCATABLE :: Tsoil (:,:) + REAL(r_2), ALLOCATABLE :: moist (:,:) + REAL(r_2), ALLOCATABLE :: Tairkspin (:,:) + REAL(r_2), ALLOCATABLE :: cgppspin (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_4 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_5 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_6 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_4 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_5 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_6 (:,:) + REAL(r_2), ALLOCATABLE :: mtempspin (:,:) + +END TYPE casa_met_data_type + +TYPE casa_met_type + + INTEGER, PUBLIC, POINTER :: lnonwood (:) + INTEGER, PUBLIC, POINTER :: iveg2 (:) + INTEGER, PUBLIC, POINTER :: ijgcm (:) + INTEGER, PUBLIC, POINTER :: isorder (:) + + REAL(r_2), PUBLIC, POINTER :: glai (:) + REAL(r_2), PUBLIC, POINTER :: Tairk (:) + REAL(r_2), PUBLIC, POINTER :: precip (:) + REAL(r_2), PUBLIC, POINTER :: tsoilavg (:) + REAL(r_2), PUBLIC, POINTER :: moistavg (:) + REAL(r_2), PUBLIC, POINTER :: btran (:) + REAL(r_2), PUBLIC, POINTER :: lat (:) + REAL(r_2), PUBLIC, POINTER :: lon (:) + REAL(r_2), PUBLIC, POINTER :: areacell (:) + + REAL(r_2), PUBLIC, POINTER :: Tsoil (:,:) + REAL(r_2), PUBLIC, POINTER :: moist (:,:) + REAL(r_2), PUBLIC, POINTER :: Tairkspin (:,:) + REAL(r_2), PUBLIC, POINTER :: cgppspin (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_4 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_5 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_6 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_4 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_5 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_6 (:,:) + REAL(r_2), PUBLIC, POINTER :: mtempspin (:,:) + +END TYPE casa_met_type + +CONTAINS + +SUBROUTINE alloc_casa_met_data_type( casamet_data, arraysize ) + +USE casadimension, ONLY: mdyear +USE grid_constants_mod_cbl, ONLY: nsl ! # of soil layers [6] + +IMPLICIT NONE + +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE( casamet_data % lnonwood ( arraysize ) ) +ALLOCATE( casamet_data % iveg2 ( arraysize ) ) +ALLOCATE( casamet_data % ijgcm ( arraysize ) ) +ALLOCATE( casamet_data % isorder ( arraysize ) ) +ALLOCATE( casamet_data % glai ( arraysize ) ) +ALLOCATE( casamet_data % Tairk ( arraysize ) ) +ALLOCATE( casamet_data % precip ( arraysize ) ) +ALLOCATE( casamet_data % tsoilavg ( arraysize ) ) +ALLOCATE( casamet_data % moistavg ( arraysize ) ) +ALLOCATE( casamet_data % btran ( arraysize ) ) +ALLOCATE( casamet_data % lat ( arraysize ) ) +ALLOCATE( casamet_data % lon ( arraysize ) ) +ALLOCATE( casamet_data % areacell ( arraysize ) ) + +ALLOCATE( casamet_data % Tsoil ( arraysize, nsl ) ) +ALLOCATE( casamet_data % moist ( arraysize, nsl ) ) +ALLOCATE( casamet_data % Tairkspin ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % cgppspin ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_4 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_5 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_6 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_4 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_5 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_6 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % mtempspin ( arraysize, mdyear ) ) + +RETURN +END SUBROUTINE alloc_casa_met_data_type + + +SUBROUTINE zero_casa_met_data_type( casamet_data ) + +IMPLICIT NONE + +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data + +casamet_data % lnonwood (:) = 0.0 +casamet_data % iveg2 (:) = 0.0 +casamet_data % ijgcm (:) = 0.0 +casamet_data % isorder (:) = 0.0 +casamet_data % glai (:) = 0.0 +casamet_data % Tairk (:) = 0.0 +casamet_data % precip (:) = 0.0 +casamet_data % tsoilavg (:) = 0.0 +casamet_data % moistavg (:) = 0.0 +casamet_data % btran (:) = 0.0 +casamet_data % lat (:) = 0.0 +casamet_data % lon (:) = 0.0 +casamet_data % areacell (:) = 0.0 + +casamet_data % Tsoil (:,:) = 0.0 +casamet_data % moist (:,:) = 0.0 +casamet_data % Tairkspin (:,:) = 0.0 +casamet_data % cgppspin (:,:) = 0.0 +casamet_data % crmplantspin_1 (:,:) = 0.0 +casamet_data % crmplantspin_2 (:,:) = 0.0 +casamet_data % crmplantspin_3 (:,:) = 0.0 +casamet_data % Tsoilspin_1 (:,:) = 0.0 +casamet_data % Tsoilspin_2 (:,:) = 0.0 +casamet_data % Tsoilspin_3 (:,:) = 0.0 +casamet_data % Tsoilspin_4 (:,:) = 0.0 +casamet_data % Tsoilspin_5 (:,:) = 0.0 +casamet_data % Tsoilspin_6 (:,:) = 0.0 +casamet_data % moistspin_1 (:,:) = 0.0 +casamet_data % moistspin_2 (:,:) = 0.0 +casamet_data % moistspin_3 (:,:) = 0.0 +casamet_data % moistspin_4 (:,:) = 0.0 +casamet_data % moistspin_5 (:,:) = 0.0 +casamet_data % moistspin_6 (:,:) = 0.0 +casamet_data % mtempspin (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_met_data_type + + +SUBROUTINE assoc_casa_met_type( casamet, casamet_data ) + +IMPLICIT NONE + +TYPE (casa_met_type), INTENT(INOUT) :: casamet +TYPE (casa_met_data_type), INTENT(INOUT), TARGET :: casamet_data + +casamet % lnonwood => casamet_data % lnonwood +casamet % iveg2 => casamet_data % iveg2 +casamet % ijgcm => casamet_data % ijgcm +casamet % isorder => casamet_data % isorder +casamet % glai => casamet_data % glai +casamet % Tairk => casamet_data % Tairk +casamet % precip => casamet_data % precip +casamet % tsoilavg => casamet_data % tsoilavg +casamet % moistavg => casamet_data % moistavg +casamet % btran => casamet_data % btran +casamet % lat => casamet_data % lat +casamet % lon => casamet_data % lon +casamet % areacell => casamet_data % areacell + +casamet % Tsoil => casamet_data % Tsoil +casamet % moist => casamet_data % moist +casamet % Tairkspin => casamet_data % Tairkspin +casamet % cgppspin => casamet_data % cgppspin +casamet % crmplantspin_1 => casamet_data % crmplantspin_1 +casamet % crmplantspin_2 => casamet_data % crmplantspin_2 +casamet % crmplantspin_3 => casamet_data % crmplantspin_3 +casamet % Tsoilspin_1 => casamet_data % Tsoilspin_1 +casamet % Tsoilspin_2 => casamet_data % Tsoilspin_2 +casamet % Tsoilspin_3 => casamet_data % Tsoilspin_3 +casamet % Tsoilspin_4 => casamet_data % Tsoilspin_4 +casamet % Tsoilspin_5 => casamet_data % Tsoilspin_5 +casamet % Tsoilspin_6 => casamet_data % Tsoilspin_6 +casamet % moistspin_1 => casamet_data % moistspin_1 +casamet % moistspin_2 => casamet_data % moistspin_2 +casamet % moistspin_3 => casamet_data % moistspin_3 +casamet % moistspin_4 => casamet_data % moistspin_4 +casamet % moistspin_5 => casamet_data % moistspin_5 +casamet % moistspin_6 => casamet_data % moistspin_6 +casamet % mtempspin => casamet_data % mtempspin + +RETURN +END SUBROUTINE assoc_casa_met_type + +END MODULE casa_met_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 b/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 new file mode 100644 index 000000000..9276866f5 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 @@ -0,0 +1,110 @@ +MODULE phenology_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + ! ntype_max=17 +USE casadimension, ONLY: mvtype, mphase, mdyear + +IMPLICIT NONE + +PUBLIC :: phenology_data_type +PUBLIC :: phenology_type +PUBLIC :: alloc_phenology_data_type +PUBLIC :: zero_phenology_data_type +PUBLIC :: assoc_phenology_type + +TYPE phenology_data_type + + INTEGER, ALLOCATABLE :: phase (:) + REAL(r_2), ALLOCATABLE :: TKshed (:) + INTEGER, ALLOCATABLE :: doyphase (:,:) + REAL, ALLOCATABLE :: phen (:) ! fraction of max LAI + REAL, ALLOCATABLE :: aphen (:) ! annual leaf on sum + INTEGER, ALLOCATABLE :: phasespin (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_1 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_2 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_3 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_4 (:,:) + +END TYPE phenology_data_type + +TYPE phenology_type + + INTEGER, PUBLIC, POINTER :: phase (:) + REAL(r_2), PUBLIC, POINTER :: TKshed (:) + INTEGER, PUBLIC, POINTER :: doyphase (:,:) + REAL, PUBLIC, POINTER :: phen (:) + REAL, PUBLIC, POINTER :: aphen (:) + INTEGER, PUBLIC, POINTER :: phasespin (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_1 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_2 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_3 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_4 (:,:) + +END TYPE phenology_type + +CONTAINS + +SUBROUTINE alloc_phenology_data_type( phen_data, arraysize ) + +IMPLICIT NONE + +TYPE( phenology_data_type ), INTENT(INOUT) :: phen_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE( phen_data % TKshed ( mvtype ) ) +ALLOCATE( phen_data % phase ( arraysize ) ) +ALLOCATE( phen_data % doyphase ( arraysize, mphase ) ) +ALLOCATE( phen_data % phen ( arraysize ) ) +ALLOCATE( phen_data % aphen ( arraysize ) ) +ALLOCATE( phen_data % phasespin ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_1 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_2 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_3 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_4 ( arraysize, mdyear ) ) + +RETURN +END SUBROUTINE alloc_phenology_data_type + +SUBROUTINE zero_phenology_data_type( phen_data ) + +IMPLICIT NONE + +TYPE (phenology_data_type), INTENT(INOUT) :: phen_data + +phen_data % phase (:) = 0 +phen_data % doyphase (:,:) = 0 +phen_data % TKshed (:) = 0.0 +phen_data % phen (:) = 0.0 +phen_data % aphen (:) = 0.0 +phen_data % phasespin (:,:) = 0.0 +phen_data % doyphasespin_1 (:,:) = 0.0 +phen_data % doyphasespin_2 (:,:) = 0.0 +phen_data % doyphasespin_3 (:,:) = 0.0 +phen_data % doyphasespin_4 (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_phenology_data_type + +SUBROUTINE assoc_phenology_type( phen, phen_data ) + +IMPLICIT NONE + +TYPE (phenology_type), INTENT(INOUT) :: phen +TYPE (phenology_data_type), INTENT(INOUT), TARGET :: phen_data + +phen % phase => phen_data % phase +phen % doyphase => phen_data % doyphase +phen % TKshed => phen_data % TKshed +phen % phen => phen_data % phen +phen % aphen => phen_data % aphen +phen % phasespin => phen_data % phasespin +phen % doyphasespin_1 => phen_data % doyphasespin_1 +phen % doyphasespin_2 => phen_data % doyphasespin_2 +phen % doyphasespin_3 => phen_data % doyphasespin_3 +phen % doyphasespin_4 => phen_data % doyphasespin_4 + +RETURN +END SUBROUTINE assoc_phenology_type + +END MODULE phenology_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 new file mode 100644 index 000000000..b37a2eb20 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 @@ -0,0 +1,288 @@ +MODULE casa_pool_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_pool_data_type +PUBLIC :: casa_pool_type +PUBLIC :: alloc_casa_pool_data_type +PUBLIC :: assoc_casa_pool_type +PUBLIC :: zero_casa_pool_data_type + +TYPE casa_pool_data_type + + REAL(r_2), ALLOCATABLE :: Clabile (:) + REAL(r_2), ALLOCATABLE :: dClabiledt (:) + REAL(r_2), ALLOCATABLE :: Ctot (:) + REAL(r_2), ALLOCATABLE :: Ctot_0 (:) + REAL(r_2), ALLOCATABLE :: Nsoilmin (:) + REAL(r_2), ALLOCATABLE :: Psoillab (:) + REAL(r_2), ALLOCATABLE :: Psoilsorb (:) + REAL(r_2), ALLOCATABLE :: Psoilocc (:) + REAL(r_2), ALLOCATABLE :: dNsoilmindt (:) + REAL(r_2), ALLOCATABLE :: dPsoillabdt (:) + REAL(r_2), ALLOCATABLE :: dPsoilsorbdt (:) + REAL(r_2), ALLOCATABLE :: dPsoiloccdt (:) + + REAL(r_2), ALLOCATABLE :: Cplant (:,:) + REAL(r_2), ALLOCATABLE :: Nplant (:,:) + REAL(r_2), ALLOCATABLE :: Pplant (:,:) + REAL(r_2), ALLOCATABLE :: dCplantdt (:,:) + REAL(r_2), ALLOCATABLE :: dNplantdt (:,:) + REAL(r_2), ALLOCATABLE :: dPplantdt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCplant (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPplant (:,:) + REAL(r_2), ALLOCATABLE :: Clitter (:,:) + REAL(r_2), ALLOCATABLE :: Nlitter (:,:) + REAL(r_2), ALLOCATABLE :: Plitter (:,:) + REAL(r_2), ALLOCATABLE :: dClitterdt (:,:) + REAL(r_2), ALLOCATABLE :: dNlitterdt (:,:) + REAL(r_2), ALLOCATABLE :: dPlitterdt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNClitter (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPlitter (:,:) + REAL(r_2), ALLOCATABLE :: Csoil (:,:) + REAL(r_2), ALLOCATABLE :: Nsoil (:,:) + REAL(r_2), ALLOCATABLE :: Psoil (:,:) + REAL(r_2), ALLOCATABLE :: dCsoildt (:,:) + REAL(r_2), ALLOCATABLE :: dNsoildt (:,:) + REAL(r_2), ALLOCATABLE :: dPsoildt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilnew (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilmin (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilmax (:,:) + REAL(r_2), ALLOCATABLE :: ratioPcsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioPcplant (:,:) + REAL(r_2), ALLOCATABLE :: ratioPclitter (:,:) + REAL(r_2), ALLOCATABLE :: cwoodprod (:,:) + REAL(r_2), ALLOCATABLE :: nwoodprod (:,:) + REAL(r_2), ALLOCATABLE :: pwoodprod (:,:) + +END TYPE casa_pool_data_type + +TYPE casa_pool_type + + REAL(r_2), POINTER, PUBLIC :: Clabile (:) + REAL(r_2), POINTER, PUBLIC :: dClabiledt (:) + REAL(r_2), POINTER, PUBLIC :: Ctot (:) + REAL(r_2), POINTER, PUBLIC :: Ctot_0 (:) + REAL(r_2), POINTER, PUBLIC :: Nsoilmin (:) + REAL(r_2), POINTER, PUBLIC :: Psoillab (:) + REAL(r_2), POINTER, PUBLIC :: Psoilsorb (:) + REAL(r_2), POINTER, PUBLIC :: Psoilocc (:) + REAL(r_2), POINTER, PUBLIC :: dNsoilmindt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoillabdt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoilsorbdt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoiloccdt (:) + + REAL(r_2), POINTER, PUBLIC :: Cplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Nplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Pplant (:,:) + REAL(r_2), POINTER, PUBLIC :: dCplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Clitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Nlitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Plitter (:,:) + REAL(r_2), POINTER, PUBLIC :: dClitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNlitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPlitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNClitter (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPlitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Csoil (:,:) + REAL(r_2), POINTER, PUBLIC :: Nsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: Psoil (:,:) + REAL(r_2), POINTER, PUBLIC :: dCsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilnew (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilmax (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPclitter (:,:) + REAL(r_2), POINTER, PUBLIC :: cwoodprod (:,:) + REAL(r_2), POINTER, PUBLIC :: nwoodprod (:,:) + REAL(r_2), POINTER, PUBLIC :: pwoodprod (:,:) + +END TYPE casa_pool_type + +CONTAINS + +SUBROUTINE alloc_casa_pool_data_type( casapool_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil, mwood + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casapool_data % Clabile ( arraysize ) ) +ALLOCATE ( casapool_data % dClabiledt ( arraysize ) ) +ALLOCATE ( casapool_data % Ctot ( arraysize ) ) +ALLOCATE ( casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( casapool_data % Nsoilmin ( arraysize ) ) +ALLOCATE ( casapool_data % Psoillab ( arraysize ) ) +ALLOCATE ( casapool_data % Psoilsorb ( arraysize ) ) +ALLOCATE ( casapool_data % Psoilocc ( arraysize ) ) +ALLOCATE ( casapool_data % dNsoilmindt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoillabdt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoilsorbdt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoiloccdt ( arraysize ) ) + +ALLOCATE ( casapool_data % Cplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Nplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Pplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dCplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dNplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dPplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioNCplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioNPplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Clitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Nlitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Plitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dClitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dNlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dPlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % ratioNClitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % ratioNPlitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Csoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % Nsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % Psoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dCsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dNsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dPsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilnew ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNPsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilmin ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilmax ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioPcsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioPcplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioPclitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % cwoodprod ( arraysize, mwood ) ) +ALLOCATE ( casapool_data % nwoodprod ( arraysize, mwood ) ) +ALLOCATE ( casapool_data % pwoodprod ( arraysize, mwood ) ) + +END SUBROUTINE alloc_casa_pool_data_type + +SUBROUTINE zero_casa_pool_data_type( casapool_data ) + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data + +casapool_data % Clabile = 0.0 +casapool_data % dClabiledt = 0.0 +casapool_data % Ctot = 0.0 +casapool_data % Ctot_0 = 0.0 +casapool_data % Nsoilmin = 0.0 +casapool_data % Psoillab = 0.0 +casapool_data % Psoilsorb = 0.0 +casapool_data % Psoilocc = 0.0 +casapool_data % dNsoilmindt = 0.0 +casapool_data % dPsoillabdt = 0.0 +casapool_data % dPsoilsorbdt = 0.0 +casapool_data % dPsoiloccdt = 0.0 + +casapool_data % Cplant = 0.0 +casapool_data % Nplant = 0.0 +casapool_data % Pplant = 0.0 +casapool_data % dCplantdt = 0.0 +casapool_data % dNplantdt = 0.0 +casapool_data % dPplantdt = 0.0 +casapool_data % ratioNCplant = 0.0 +casapool_data % ratioNPplant = 0.0 +casapool_data % Clitter = 0.0 +casapool_data % Nlitter = 0.0 +casapool_data % Plitter = 0.0 +casapool_data % dClitterdt = 0.0 +casapool_data % dNlitterdt = 0.0 +casapool_data % dPlitterdt = 0.0 +casapool_data % ratioNClitter = 0.0 +casapool_data % ratioNPlitter = 0.0 +casapool_data % Csoil = 0.0 +casapool_data % Nsoil = 0.0 +casapool_data % Psoil = 0.0 +casapool_data % dCsoildt = 0.0 +casapool_data % dNsoildt = 0.0 +casapool_data % dPsoildt = 0.0 +casapool_data % ratioNCsoil = 0.0 +casapool_data % ratioNCsoilnew = 0.0 +casapool_data % ratioNPsoil = 0.0 +casapool_data % ratioNCsoilmin = 0.0 +casapool_data % ratioNCsoilmax = 0.0 +casapool_data % ratioPcsoil = 0.0 +casapool_data % ratioPcplant = 0.0 +casapool_data % ratioPclitter = 0.0 +casapool_data % cwoodprod = 0.0 +casapool_data % nwoodprod = 0.0 +casapool_data % pwoodprod = 0.0 + +RETURN +END SUBROUTINE zero_casa_pool_data_type + +SUBROUTINE assoc_casa_pool_type( casapool, casapool_data ) + +IMPLICIT NONE + +TYPE (casa_pool_type), INTENT(INOUT) :: casapool +TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: casapool_data + +casapool % Clabile => casapool_data % Clabile +casapool % dClabiledt => casapool_data % dClabiledt +casapool % Ctot => casapool_data % Ctot +casapool % Ctot_0 => casapool_data % Ctot_0 +casapool % Nsoilmin => casapool_data % Nsoilmin +casapool % Psoillab => casapool_data % Psoillab +casapool % Psoilsorb => casapool_data % Psoilsorb +casapool % Psoilocc => casapool_data % Psoilocc +casapool % dNsoilmindt => casapool_data % dNsoilmindt +casapool % dPsoillabdt => casapool_data % dPsoillabdt +casapool % dPsoilsorbdt => casapool_data % dPsoilsorbdt +casapool % dPsoiloccdt => casapool_data % dPsoiloccdt + +casapool % Cplant => casapool_data % Cplant +casapool % Nplant => casapool_data % Nplant +casapool % Pplant => casapool_data % Pplant +casapool % dCplantdt => casapool_data % dCplantdt +casapool % dNplantdt => casapool_data % dNplantdt +casapool % dPplantdt => casapool_data % dPplantdt +casapool % ratioNCplant => casapool_data % ratioNCplant +casapool % ratioNPplant => casapool_data % ratioNPplant +casapool % Clitter => casapool_data % Clitter +casapool % Nlitter => casapool_data % Nlitter +casapool % Plitter => casapool_data % Plitter +casapool % dClitterdt => casapool_data % dClitterdt +casapool % dNlitterdt => casapool_data % dNlitterdt +casapool % dPlitterdt => casapool_data % dPlitterdt +casapool % ratioNClitter => casapool_data % ratioNClitter +casapool % ratioNPlitter => casapool_data % ratioNPlitter +casapool % Csoil => casapool_data % Csoil +casapool % Nsoil => casapool_data % Nsoil +casapool % Psoil => casapool_data % Psoil +casapool % dCsoildt => casapool_data % dCsoildt +casapool % dNsoildt => casapool_data % dNsoildt +casapool % dPsoildt => casapool_data % dPsoildt +casapool % ratioNCsoil => casapool_data % ratioNCsoil +casapool % ratioNCsoilnew => casapool_data % ratioNCsoilnew +casapool % ratioNPsoil => casapool_data % ratioNPsoil +casapool % ratioNCsoilmin => casapool_data % ratioNCsoilmin +casapool % ratioNCsoilmax => casapool_data % ratioNCsoilmax +casapool % ratioPcsoil => casapool_data % ratioPcsoil +casapool % ratioPcplant => casapool_data % ratioPcplant +casapool % ratioPclitter => casapool_data % ratioPclitter +casapool % cwoodprod => casapool_data % cwoodprod +casapool % nwoodprod => casapool_data % nwoodprod +casapool % pwoodprod => casapool_data % pwoodprod + +RETURN +END SUBROUTINE assoc_casa_pool_type + +END MODULE casa_pool_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_readbiome.F90 b/src/coupled/AM3/control/casa/types/casa_readbiome.F90 new file mode 100644 index 000000000..800755514 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_readbiome.F90 @@ -0,0 +1,2445 @@ +MODULE casa_readbiome_module + +CONTAINS + +! jh:is ntiles used here actually ntiles? +SUBROUTINE casa_readbiome( mp, nsl, ntiles, veg_iveg, soil_zse, casabiome, & + casapool, casaflux, casamet, phen ) + +!USE cable_def_types_mod !jh? for ms, ntiles + USE casaparm + +!subrs +!jh!USE pft_lookup_parms_csv1_mod_cnp, ONLY: casa_pft_params_csv1 + +!data +USE casa_files_type_mod, ONLY: casafile ! TYPE instance +USE casavariable, ONLY: casa_biome ! TYPE declaration +USE casavariable, ONLY: casa_pool ! TYPE declaration +USE casavariable, ONLY: casa_flux ! TYPE declaration +USE casavariable, ONLY: casa_met ! TYPE declaration + +USE cable_common_module, ONLY: cable_user +USE casadimension, ONLY: mso, msoil, mplant +USE casadimension, ONLY: deltcasa +USE casadimension, ONLY: icycle +USE phenology_type_mod, ONLY: phenology_type + +IMPLICIT NONE + +INTEGER, INTENT(IN) :: mp ! # active tile points +INTEGER, INTENT(IN) :: nsl ! # soil layers +INTEGER, INTENT(IN) :: ntiles ! # SurfaceTypes +INTEGER, INTENT(IN) :: veg_iveg(mp) ! SurfaceType index +REAL, INTENT(IN) :: soil_zse(nsl) ! soil depth per layer + +TYPE (casa_biome), INTENT(OUT) :: casabiome +TYPE (casa_pool), INTENT(OUT) :: casapool +TYPE (casa_flux), INTENT(OUT) :: casaflux +TYPE (casa_met), INTENT(OUT) :: casamet +TYPE (phenology_type), INTENT(OUT) :: phen + + ! local variables + REAL(r_2), DIMENSION(ntiles) :: leafage,frootage,woodage + REAL(r_2), DIMENSION(ntiles) :: totroot + REAL(r_2), DIMENSION(ntiles) :: cwdage,metage,strage + REAL(r_2), DIMENSION(ntiles) :: micage,slowage,passage,clabileage,slax + REAL(r_2), DIMENSION(ntiles,mplant):: ratioCNplant + REAL(r_2), DIMENSION(ntiles,msoil) :: ratioCNsoil,ratioCNsoilmin,ratioCNsoilmax + REAL(r_2), DIMENSION(nsl) :: depthsoila,depthsoilb + REAL(r_2), DIMENSION(ntiles) :: xfNminloss, xfNminleach, xnfixrate + REAL(r_2), DIMENSION(ntiles) :: cleaf,cwood,cfroot, & + cmet,cstr,ccwd, & + cmic,cslow,cpass + REAL(r_2), DIMENSION(ntiles) :: nleaf,nwood,nfroot, & + nmet,nstr,ncwd, & + nmic,nslow,npass,xnsoilmin + REAL(r_2), DIMENSION(ntiles) :: xpleaf, xpwood, xpfroot, & + xpmet, xpstr, xpcwd, & + xpmic,xpslow,xppass,xplab,xpsorb,xpocc + REAL(r_2), DIMENSION(mso) :: xkmlabp,xpsorbmax,xfPleach + REAL(r_2), DIMENSION(mso,msoil) :: ratioNPsoil + REAL(r_2), DIMENSION(ntiles) :: xfherbivore,xxkleafcoldmax, xxkleafdrymax + REAL(r_2), DIMENSION(ntiles) :: xkuplabp + REAL(r_2), DIMENSION(ntiles,nsl) :: fracroot + REAL(r_2) :: xratioNPleafmin,xratioNPleafmax, & + xratioNPwoodmin,xratioNPwoodmax, & + xratioNPfrootmin,xratioNPfrootmax + INTEGER :: i,iv1,nv,ns,npt,iv,is,iso + INTEGER :: nv0,nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nv9,nv10,nv11,nv12 + REAL(r_2), DIMENSION(ntiles) :: xxnpmax,xq10soil,xxkoptlitter,xxkoptsoil,xprodptase, & + xcostnpup,xmaxfinelitter,xmaxcwd,xnintercept,xnslope + REAL(r_2), DIMENSION(mso) :: xxkplab,xxkpsorb,xxkpocc + + +casabiome%ivt2( 1 ) = 3 +casabiome%ivt2( 2 ) = 3 +casabiome%ivt2( 3 ) = 3 +casabiome%ivt2( 4 ) = 3 +casabiome%ivt2( 5 ) = 2 +casabiome%ivt2( 6 ) = 1 +casabiome%ivt2( 7 ) = 1 +casabiome%ivt2( 8 ) = 2 +casabiome%ivt2( 9 ) = 1 +casabiome%ivt2( 10 ) = 1 +casabiome%ivt2( 11 ) = 0 +casabiome%ivt2( 12 ) = 0 +casabiome%ivt2( 13 ) = 0 +casabiome%ivt2( 14 ) = 0 +casabiome%ivt2( 15 ) = 0 +casabiome%ivt2( 16 ) = 0 +casabiome%ivt2( 17 ) = 0 + +! where ice,water,urban=0)/grass=1/shrub=2/woody=3 + +! Tranche 1 +!=============================================================== +casabiome % kroot ( 1 ) = 5.500 +casabiome %rootdepth ( 1 ) = 1.500 +casabiome % kuptake ( 1 ) = 2.000 +casabiome % krootlen ( 1 ) = 14.878 +casabiome % kminN ( 1 ) = 2.000 +casabiome % kuplabP ( 1 ) = 0.500 +xfherbivore ( 1 ) = 0.068 +leafage ( 1 ) = 3.000 +woodage ( 1 ) = 70.000 +frootage ( 1 ) = 18.000 +metage ( 1 ) = 0.040 +strage ( 1 ) = 0.230 +cwdage ( 1 ) = 0.824 +micage ( 1 ) = 0.137 +slowage ( 1 ) = 5.000 +passage ( 1 ) = 222.220 +clabileage ( 1 ) = 0.200 +slax ( 1 ) = 0.007 + +casabiome % kroot ( 2 ) = 3.900 +casabiome %rootdepth ( 2 ) = 1.500 +casabiome % kuptake ( 2 ) = 1.900 +casabiome % krootlen ( 2 ) = 14.386 +casabiome % kminN ( 2 ) = 2.000 +casabiome % kuplabP ( 2 ) = 0.500 +xfherbivore ( 2 ) = 0.406 +leafage ( 2 ) = 2.000 +woodage ( 2 ) = 60.000 +frootage ( 2 ) = 10.000 +metage ( 2 ) = 0.040 +strage ( 2 ) = 0.230 +cwdage ( 2 ) = 0.824 +micage ( 2 ) = 0.137 +slowage ( 2 ) = 5.000 +passage ( 2 ) = 222.220 +clabileage ( 2 ) = 0.200 +slax ( 2 ) = 0.015 + +casabiome % kroot ( 3 ) = 5.500 +casabiome %rootdepth ( 3 ) = 1.500 +casabiome % kuptake ( 3 ) = 2.000 +casabiome % krootlen ( 3 ) = 14.026 +casabiome % kminN ( 3 ) = 2.000 +casabiome % kuplabP ( 3 ) = 0.500 +xfherbivore ( 3 ) = 0.068 +leafage ( 3 ) = 0.500 +woodage ( 3 ) = 80.000 +frootage ( 3 ) = 10.000 +metage ( 3 ) = 0.040 +strage ( 3 ) = 0.230 +cwdage ( 3 ) = 0.824 +micage ( 3 ) = 0.137 +slowage ( 3 ) = 5.000 +passage ( 3 ) = 222.220 +clabileage ( 3 ) = 0.200 +slax ( 3 ) = 0.023 + +casabiome % kroot ( 4 ) = 3.900 +casabiome %rootdepth ( 4 ) = 1.500 +casabiome % kuptake ( 4 ) = 2.000 +casabiome % krootlen ( 4 ) = 18.947 +casabiome % kminN ( 4 ) = 2.000 +casabiome % kuplabP ( 4 ) = 0.500 +xfherbivore ( 4 ) = 0.134 +leafage ( 4 ) = 0.518 +woodage ( 4 ) = 40.000 +frootage ( 4 ) = 10.000 +metage ( 4 ) = 0.040 +strage ( 4 ) = 0.230 +cwdage ( 4 ) = 0.824 +micage ( 4 ) = 0.137 +slowage ( 4 ) = 5.000 +passage ( 4 ) = 222.220 +clabileage ( 4 ) = 0.200 +slax ( 4 ) = 0.026 + +casabiome % kroot ( 5 ) = 2.000 +casabiome %rootdepth ( 5 ) = 0.500 +casabiome % kuptake ( 5 ) = 1.800 +casabiome % krootlen ( 5 ) = 32.308 +casabiome % kminN ( 5 ) = 2.000 +casabiome % kuplabP ( 5 ) = 0.500 +xfherbivore ( 5 ) = 0.022 +leafage ( 5 ) = 1.440 +woodage ( 5 ) = 40.000 +frootage ( 5 ) = 5.000 +metage ( 5 ) = 0.040 +strage ( 5 ) = 0.230 +cwdage ( 5 ) = 0.824 +micage ( 5 ) = 0.137 +slowage ( 5 ) = 5.000 +passage ( 5 ) = 222.220 +clabileage ( 5 ) = 0.200 +slax ( 5 ) = 0.010 + +casabiome % kroot ( 6 ) = 5.500 +casabiome %rootdepth ( 6 ) = 0.500 +casabiome % kuptake ( 6 ) = 2.000 +casabiome % krootlen ( 6 ) = 84.000 +casabiome % kminN ( 6 ) = 2.000 +casabiome % kuplabP ( 6 ) = 0.500 +xfherbivore ( 6 ) = 0.109 +leafage ( 6 ) = 0.500 +woodage ( 6 ) = 1.000 +frootage ( 6 ) = 3.000 +metage ( 6 ) = 0.040 +strage ( 6 ) = 0.230 +cwdage ( 6 ) = 0.824 +micage ( 6 ) = 0.137 +slowage ( 6 ) = 5.000 +passage ( 6 ) = 222.220 +clabileage ( 6 ) = 0.200 +slax ( 6 ) = 0.030 + +casabiome % kroot ( 7 ) = 5.500 +casabiome %rootdepth ( 7 ) = 0.500 +casabiome % kuptake ( 7 ) = 2.000 +casabiome % krootlen ( 7 ) = 84.000 +casabiome % kminN ( 7 ) = 2.000 +casabiome % kuplabP ( 7 ) = 0.500 +xfherbivore ( 7 ) = 0.109 +leafage ( 7 ) = 0.500 +woodage ( 7 ) = 1.000 +frootage ( 7 ) = 3.000 +metage ( 7 ) = 0.040 +strage ( 7 ) = 0.230 +cwdage ( 7 ) = 0.824 +micage ( 7 ) = 0.137 +slowage ( 7 ) = 5.000 +passage ( 7 ) = 222.220 +clabileage ( 7 ) = 0.200 +slax ( 7 ) = 0.022 + +casabiome % kroot ( 8 ) = 5.500 +casabiome %rootdepth ( 8 ) = 0.500 +casabiome % kuptake ( 8 ) = 2.000 +casabiome % krootlen ( 8 ) = 84.000 +casabiome % kminN ( 8 ) = 2.000 +casabiome % kuplabP ( 8 ) = 0.500 +xfherbivore ( 8 ) = 0.109 +leafage ( 8 ) = 0.750 +woodage ( 8 ) = 1.000 +frootage ( 8 ) = 3.000 +metage ( 8 ) = 0.040 +strage ( 8 ) = 0.230 +cwdage ( 8 ) = 0.824 +micage ( 8 ) = 0.137 +slowage ( 8 ) = 5.000 +passage ( 8 ) = 222.220 +clabileage ( 8 ) = 0.200 +slax ( 8 ) = 0.027 + +casabiome % kroot ( 9 ) = 5.500 +casabiome %rootdepth ( 9 ) = 0.500 +casabiome % kuptake ( 9 ) = 1.600 +casabiome % krootlen ( 9 ) = 120.500 +casabiome % kminN ( 9 ) = 2.000 +casabiome % kuplabP ( 9 ) = 0.500 +xfherbivore ( 9 ) = 0.140 +leafage ( 9 ) = 0.370 +woodage ( 9 ) = 1.000 +frootage ( 9 ) = 0.884 +metage ( 9 ) = 0.040 +strage ( 9 ) = 0.230 +cwdage ( 9 ) = 0.824 +micage ( 9 ) = 0.137 +slowage ( 9 ) = 5.000 +passage ( 9 ) = 222.220 +clabileage ( 9 ) = 0.200 +slax ( 9 ) = 0.030 + +casabiome % kroot ( 10 ) = 5.500 +casabiome %rootdepth ( 10 ) = 0.500 +casabiome % kuptake ( 10 ) = 1.600 +casabiome % krootlen ( 10 ) = 120.500 +casabiome % kminN ( 10 ) = 2.000 +casabiome % kuplabP ( 10 ) = 0.500 +xfherbivore ( 10 ) = 0.140 +leafage ( 10 ) = 0.370 +woodage ( 10 ) = 1.000 +frootage ( 10 ) = 0.884 +metage ( 10 ) = 0.040 +strage ( 10 ) = 0.230 +cwdage ( 10 ) = 0.824 +micage ( 10 ) = 0.137 +slowage ( 10 ) = 5.000 +passage ( 10 ) = 222.220 +clabileage ( 10 ) = 0.200 +slax ( 10 ) = 0.022 + +casabiome % kroot ( 11 ) = 5.500 +casabiome %rootdepth ( 11 ) = 0.500 +casabiome % kuptake ( 11 ) = 1.600 +casabiome % krootlen ( 11 ) = 0.000 +casabiome % kminN ( 11 ) = 2.000 +casabiome % kuplabP ( 11 ) = 0.500 +xfherbivore ( 11 ) = 0.000 +leafage ( 11 ) = 1.000 +woodage ( 11 ) = 1.000 +frootage ( 11 ) = 1.000 +metage ( 11 ) = 0.040 +strage ( 11 ) = 0.230 +cwdage ( 11 ) = 0.824 +micage ( 11 ) = 0.137 +slowage ( 11 ) = 5.000 +passage ( 11 ) = 222.220 +clabileage ( 11 ) = 0.200 +slax ( 11 ) = 0.020 + +casabiome % kroot ( 12 ) = 5.500 +casabiome %rootdepth ( 12 ) = 0.500 +casabiome % kuptake ( 12 ) = 1.800 +casabiome % krootlen ( 12 ) = 0.000 +casabiome % kminN ( 12 ) = 2.000 +casabiome % kuplabP ( 12 ) = 0.500 +xfherbivore ( 12 ) = 0.000 +leafage ( 12 ) = 1.000 +woodage ( 12 ) = 1.000 +frootage ( 12 ) = 1.000 +metage ( 12 ) = 0.040 +strage ( 12 ) = 0.230 +cwdage ( 12 ) = 0.824 +micage ( 12 ) = 0.137 +slowage ( 12 ) = 5.000 +passage ( 12 ) = 222.220 +clabileage ( 12 ) = 0.200 +slax ( 12 ) = 0.020 + +casabiome % kroot ( 13 ) = 5.500 +casabiome %rootdepth ( 13 ) = 0.500 +casabiome % kuptake ( 13 ) = 1.800 +casabiome % krootlen ( 13 ) = 0.000 +casabiome % kminN ( 13 ) = 2.000 +casabiome % kuplabP ( 13 ) = 0.500 +xfherbivore ( 13 ) = 0.000 +leafage ( 13 ) = 1.000 +woodage ( 13 ) = 1.000 +frootage ( 13 ) = 1.000 +metage ( 13 ) = 0.040 +strage ( 13 ) = 0.230 +cwdage ( 13 ) = 0.824 +micage ( 13 ) = 0.137 +slowage ( 13 ) = 5.000 +passage ( 13 ) = 222.220 +clabileage ( 13 ) = 0.200 +slax ( 13 ) = 0.020 + +casabiome % kroot ( 14 ) = 2.000 +casabiome %rootdepth ( 14 ) = 0.500 +casabiome % kuptake ( 14 ) = 1.800 +casabiome % krootlen ( 14 ) = 30.769 +casabiome % kminN ( 14 ) = 2.000 +casabiome % kuplabP ( 14 ) = 0.500 +xfherbivore ( 14 ) = 0.010 +leafage ( 14 ) = 0.461 +woodage ( 14 ) = 5.000 +frootage ( 14 ) = 4.000 +metage ( 14 ) = 0.040 +strage ( 14 ) = 0.230 +cwdage ( 14 ) = 0.824 +micage ( 14 ) = 0.137 +slowage ( 14 ) = 5.000 +passage ( 14 ) = 222.220 +clabileage ( 14 ) = 0.200 +slax ( 14 ) = 0.024 + +casabiome % kroot ( 15 ) = 2.000 +casabiome %rootdepth ( 15 ) = 0.500 +casabiome % kuptake ( 15 ) = 1.800 +casabiome % krootlen ( 15 ) = 0.000 +casabiome % kminN ( 15 ) = 2.000 +casabiome % kuplabP ( 15 ) = 0.500 +xfherbivore ( 15 ) = 0.000 +leafage ( 15 ) = 1.000 +woodage ( 15 ) = 1.000 +frootage ( 15 ) = 1.000 +metage ( 15 ) = 0.040 +strage ( 15 ) = 0.230 +cwdage ( 15 ) = 0.824 +micage ( 15 ) = 0.137 +slowage ( 15 ) = 5.000 +passage ( 15 ) = 222.220 +clabileage ( 15 ) = 0.200 +slax ( 15 ) = 0.020 + +casabiome % kroot ( 16 ) = 5.500 +casabiome %rootdepth ( 16 ) = 1.500 +casabiome % kuptake ( 16 ) = 1.800 +casabiome % krootlen ( 16 ) = 0.000 +casabiome % kminN ( 16 ) = 2.000 +casabiome % kuplabP ( 16 ) = 0.500 +xfherbivore ( 16 ) = 0.000 +leafage ( 16 ) = 1.000 +woodage ( 16 ) = 1.000 +frootage ( 16 ) = 1.000 +metage ( 16 ) = 0.040 +strage ( 16 ) = 0.230 +cwdage ( 16 ) = 0.824 +micage ( 16 ) = 0.137 +slowage ( 16 ) = 5.000 +passage ( 16 ) = 222.220 +clabileage ( 16 ) = 0.200 +slax ( 16 ) = 0.020 + +casabiome % kroot ( 17 ) = 5.500 +casabiome %rootdepth ( 17 ) = 0.500 +casabiome % kuptake ( 17 ) = 1.800 +casabiome % krootlen ( 17 ) = 0.000 +casabiome % kminN ( 17 ) = 2.000 +casabiome % kuplabP ( 17 ) = 0.500 +xfherbivore ( 17 ) = 0.000 +leafage ( 17 ) = 1.000 +woodage ( 17 ) = 1.000 +frootage ( 17 ) = 1.000 +metage ( 17 ) = 0.040 +strage ( 17 ) = 0.230 +cwdage ( 17 ) = 0.824 +micage ( 17 ) = 0.137 +slowage ( 17 ) = 5.000 +passage ( 17 ) = 222.220 +clabileage ( 17 ) = 0.200 +slax ( 17 ) = 0.020 + +! Tranche *2* should be 2a +!=============================================================== +casabiome%fracnpptoP ( 1, 1 ) = 0.250 +casabiome%fracnpptoP ( 1, 2 ) = 0.400 +casabiome%fracnpptoP ( 1, 3 ) = 0.350 +casabiome%rmplant ( 1, 1 ) = 0.100 +casabiome%rmplant ( 1, 2 ) = 2.000 +casabiome%rmplant ( 1, 3 ) = 10.000 + +casabiome%fracnpptoP ( 2, 1 ) = 0.250 +casabiome%fracnpptoP ( 2, 2 ) = 0.400 +casabiome%fracnpptoP ( 2, 3 ) = 0.350 +casabiome%rmplant ( 2, 1 ) = 0.100 +casabiome%rmplant ( 2, 2 ) = 2.000 +casabiome%rmplant ( 2, 3 ) = 10.000 + +casabiome%fracnpptoP ( 3, 1 ) = 0.250 +casabiome%fracnpptoP ( 3, 2 ) = 0.400 +casabiome%fracnpptoP ( 3, 3 ) = 0.350 +casabiome%rmplant ( 3, 1 ) = 0.100 +casabiome%rmplant ( 3, 2 ) = 2.000 +casabiome%rmplant ( 3, 3 ) = 10.000 + +casabiome%fracnpptoP ( 4, 1 ) = 0.250 +casabiome%fracnpptoP ( 4, 2 ) = 0.400 +casabiome%fracnpptoP ( 4, 3 ) = 0.350 +casabiome%rmplant ( 4, 1 ) = 0.100 +casabiome%rmplant ( 4, 2 ) = 2.000 +casabiome%rmplant ( 4, 3 ) = 10.000 + +casabiome%fracnpptoP ( 5, 1 ) = 0.250 +casabiome%fracnpptoP ( 5, 2 ) = 0.400 +casabiome%fracnpptoP ( 5, 3 ) = 0.350 +casabiome%rmplant ( 5, 1 ) = 0.100 +casabiome%rmplant ( 5, 2 ) = 2.000 +casabiome%rmplant ( 5, 3 ) = 10.000 + +casabiome%fracnpptoP ( 6, 1 ) = 0.250 +casabiome%fracnpptoP ( 6, 2 ) = 0.400 +casabiome%fracnpptoP ( 6, 3 ) = 0.350 +casabiome%rmplant ( 6, 1 ) = 0.100 +casabiome%rmplant ( 6, 2 ) = 2.000 +casabiome%rmplant ( 6, 3 ) = 10.000 + +casabiome%fracnpptoP ( 7, 1 ) = 0.250 +casabiome%fracnpptoP ( 7, 2 ) = 0.400 +casabiome%fracnpptoP ( 7, 3 ) = 0.350 +casabiome%rmplant ( 7, 1 ) = 0.100 +casabiome%rmplant ( 7, 2 ) = 2.000 +casabiome%rmplant ( 7, 3 ) = 10.000 + +casabiome%fracnpptoP ( 8, 1 ) = 0.250 +casabiome%fracnpptoP ( 8, 2 ) = 0.400 +casabiome%fracnpptoP ( 8, 3 ) = 0.350 +casabiome%rmplant ( 8, 1 ) = 0.100 +casabiome%rmplant ( 8, 2 ) = 2.000 +casabiome%rmplant ( 8, 3 ) = 10.000 + +casabiome%fracnpptoP ( 9, 1 ) = 0.250 +casabiome%fracnpptoP ( 9, 2 ) = 0.400 +casabiome%fracnpptoP ( 9, 3 ) = 0.350 +casabiome%rmplant ( 9, 1 ) = 0.100 +casabiome%rmplant ( 9, 2 ) = 2.000 +casabiome%rmplant ( 9, 3 ) = 10.000 + +casabiome%fracnpptoP ( 10, 1 ) = 0.250 +casabiome%fracnpptoP ( 10, 2 ) = 0.400 +casabiome%fracnpptoP ( 10, 3 ) = 0.350 +casabiome%rmplant ( 10, 1 ) = 0.100 +casabiome%rmplant ( 10, 2 ) = 2.000 +casabiome%rmplant ( 10, 3 ) = 10.000 + +casabiome%fracnpptoP ( 11, 1 ) = 0.250 +casabiome%fracnpptoP ( 11, 2 ) = 0.400 +casabiome%fracnpptoP ( 11, 3 ) = 0.350 +casabiome%rmplant ( 11, 1 ) = 0.100 +casabiome%rmplant ( 11, 2 ) = 2.000 +casabiome%rmplant ( 11, 3 ) = 10.000 + +casabiome%fracnpptoP ( 12, 1 ) = 0.250 +casabiome%fracnpptoP ( 12, 2 ) = 0.400 +casabiome%fracnpptoP ( 12, 3 ) = 0.350 +casabiome%rmplant ( 12, 1 ) = 0.100 +casabiome%rmplant ( 12, 2 ) = 2.000 +casabiome%rmplant ( 12, 3 ) = 10.000 + +casabiome%fracnpptoP ( 13, 1 ) = 0.250 +casabiome%fracnpptoP ( 13, 2 ) = 0.400 +casabiome%fracnpptoP ( 13, 3 ) = 0.350 +casabiome%rmplant ( 13, 1 ) = 0.100 +casabiome%rmplant ( 13, 2 ) = 2.000 +casabiome%rmplant ( 13, 3 ) = 10.000 + +casabiome%fracnpptoP ( 14, 1 ) = 0.250 +casabiome%fracnpptoP ( 14, 2 ) = 0.400 +casabiome%fracnpptoP ( 14, 3 ) = 0.350 +casabiome%rmplant ( 14, 1 ) = 0.100 +casabiome%rmplant ( 14, 2 ) = 2.000 +casabiome%rmplant ( 14, 3 ) = 10.000 + +casabiome%fracnpptoP ( 15, 1 ) = 0.250 +casabiome%fracnpptoP ( 15, 2 ) = 0.400 +casabiome%fracnpptoP ( 15, 3 ) = 0.350 +casabiome%rmplant ( 15, 1 ) = 0.100 +casabiome%rmplant ( 15, 2 ) = 2.000 +casabiome%rmplant ( 15, 3 ) = 10.000 + +casabiome%fracnpptoP ( 16, 1 ) = 0.250 +casabiome%fracnpptoP ( 16, 2 ) = 0.400 +casabiome%fracnpptoP ( 16, 3 ) = 0.350 +casabiome%rmplant ( 16, 1 ) = 0.100 +casabiome%rmplant ( 16, 2 ) = 2.000 +casabiome%rmplant ( 16, 3 ) = 10.000 + +casabiome%fracnpptoP ( 17, 1 ) = 0.250 +casabiome%fracnpptoP ( 17, 2 ) = 0.400 +casabiome%fracnpptoP ( 17, 3 ) = 0.350 +casabiome%rmplant ( 17, 1 ) = 0.100 +casabiome%rmplant ( 17, 2 ) = 2.000 +casabiome%rmplant ( 17, 3 ) = 10.000 + +! Tranche 2b +!=============================================================== +ratioCNplant ( 1, 1 ) = 49.800 +ratioCNplant ( 1, 2 ) = 238.100 +ratioCNplant ( 1, 3 ) = 73.700 +casabiome % ftransNPtoL ( 1, 1 ) = 0.500 +casabiome % ftransNPtoL ( 1, 2 ) = 0.950 +casabiome % ftransNPtoL ( 1, 3 ) = 0.900 +casabiome % fracligninplant ( 1, 1 ) = 0.250 +casabiome % fracligninplant ( 1, 2 ) = 0.400 +casabiome % fracligninplant ( 1, 3 ) = 0.250 +ratioCNsoil ( 1, 1 ) = 8.000 +ratioCNsoil ( 1, 2 ) = 16.100 +ratioCNsoil ( 1, 3 ) = 16.100 +ratioCNsoilmin ( 1, 1 ) = 3.000 +ratioCNsoilmin ( 1, 2 ) = 12.000 +ratioCNsoilmin ( 1, 3 ) = 7.000 +ratioCNsoilmax ( 1, 1 ) = 15.000 +ratioCNsoilmax ( 1, 2 ) = 30.000 +ratioCNsoilmax ( 1, 3 ) = 15.000 +casabiome % glaimax ( 1 ) = 7.000 +casabiome % glaimin ( 1 ) = 1.000 + +ratioCNplant ( 2, 1 ) = 23.100 +ratioCNplant ( 2, 2 ) = 134.900 +ratioCNplant ( 2, 3 ) = 61.200 +casabiome % ftransNPtoL ( 2, 1 ) = 0.500 +casabiome % ftransNPtoL ( 2, 2 ) = 0.950 +casabiome % ftransNPtoL ( 2, 3 ) = 0.900 +casabiome % fracligninplant ( 2, 1 ) = 0.200 +casabiome % fracligninplant ( 2, 2 ) = 0.400 +casabiome % fracligninplant ( 2, 3 ) = 0.200 +ratioCNsoil ( 2, 1 ) = 8.000 +ratioCNsoil ( 2, 2 ) = 12.800 +ratioCNsoil ( 2, 3 ) = 12.800 +ratioCNsoilmin ( 2, 1 ) = 3.000 +ratioCNsoilmin ( 2, 2 ) = 12.000 +ratioCNsoilmin ( 2, 3 ) = 7.000 +ratioCNsoilmax ( 2, 1 ) = 15.000 +ratioCNsoilmax ( 2, 2 ) = 30.000 +ratioCNsoilmax ( 2, 3 ) = 15.000 +casabiome % glaimax ( 2 ) = 7.000 +casabiome % glaimin ( 2 ) = 1.000 + +ratioCNplant ( 3, 1 ) = 59.300 +ratioCNplant ( 3, 2 ) = 243.800 +ratioCNplant ( 3, 3 ) = 75.000 +casabiome % ftransNPtoL ( 3, 1 ) = 0.500 +casabiome % ftransNPtoL ( 3, 2 ) = 0.950 +casabiome % ftransNPtoL ( 3, 3 ) = 0.900 +casabiome % fracligninplant ( 3, 1 ) = 0.200 +casabiome % fracligninplant ( 3, 2 ) = 0.400 +casabiome % fracligninplant ( 3, 3 ) = 0.200 +ratioCNsoil ( 3, 1 ) = 8.000 +ratioCNsoil ( 3, 2 ) = 24.800 +ratioCNsoil ( 3, 3 ) = 24.800 +ratioCNsoilmin ( 3, 1 ) = 3.000 +ratioCNsoilmin ( 3, 2 ) = 12.000 +ratioCNsoilmin ( 3, 3 ) = 7.000 +ratioCNsoilmax ( 3, 1 ) = 15.000 +ratioCNsoilmax ( 3, 2 ) = 30.000 +ratioCNsoilmax ( 3, 3 ) = 15.000 +casabiome % glaimax ( 3 ) = 7.000 +casabiome % glaimin ( 3 ) = 0.500 + +ratioCNplant ( 4, 1 ) = 31.400 +ratioCNplant ( 4, 2 ) = 156.200 +ratioCNplant ( 4, 3 ) = 63.200 +casabiome % ftransNPtoL ( 4, 1 ) = 0.500 +casabiome % ftransNPtoL ( 4, 2 ) = 0.950 +casabiome % ftransNPtoL ( 4, 3 ) = 0.900 +casabiome % fracligninplant ( 4, 1 ) = 0.200 +casabiome % fracligninplant ( 4, 2 ) = 0.400 +casabiome % fracligninplant ( 4, 3 ) = 0.200 +ratioCNsoil ( 4, 1 ) = 8.000 +ratioCNsoil ( 4, 2 ) = 30.000 +ratioCNsoil ( 4, 3 ) = 30.000 +ratioCNsoilmin ( 4, 1 ) = 3.000 +ratioCNsoilmin ( 4, 2 ) = 12.000 +ratioCNsoilmin ( 4, 3 ) = 7.000 +ratioCNsoilmax ( 4, 1 ) = 15.000 +ratioCNsoilmax ( 4, 2 ) = 30.000 +ratioCNsoilmax ( 4, 3 ) = 15.000 +casabiome % glaimax ( 4 ) = 7.000 +casabiome % glaimin ( 4 ) = 0.500 + +ratioCNplant ( 5, 1 ) = 37.600 +ratioCNplant ( 5, 2 ) = 142.100 +ratioCNplant ( 5, 3 ) = 67.100 +casabiome % ftransNPtoL ( 5, 1 ) = 0.500 +casabiome % ftransNPtoL ( 5, 2 ) = 0.950 +casabiome % ftransNPtoL ( 5, 3 ) = 0.900 +casabiome % fracligninplant ( 5, 1 ) = 0.200 +casabiome % fracligninplant ( 5, 2 ) = 0.400 +casabiome % fracligninplant ( 5, 3 ) = 0.200 +ratioCNsoil ( 5, 1 ) = 8.000 +ratioCNsoil ( 5, 2 ) = 19.300 +ratioCNsoil ( 5, 3 ) = 19.300 +ratioCNsoilmin ( 5, 1 ) = 3.000 +ratioCNsoilmin ( 5, 2 ) = 12.000 +ratioCNsoilmin ( 5, 3 ) = 7.000 +ratioCNsoilmax ( 5, 1 ) = 15.000 +ratioCNsoilmax ( 5, 2 ) = 30.000 +ratioCNsoilmax ( 5, 3 ) = 15.000 +casabiome % glaimax ( 5 ) = 3.000 +casabiome % glaimin ( 5 ) = 0.100 + +ratioCNplant ( 6, 1 ) = 34.800 +ratioCNplant ( 6, 2 ) = 150.000 +ratioCNplant ( 6, 3 ) = 64.500 +casabiome % ftransNPtoL ( 6, 1 ) = 0.500 +casabiome % ftransNPtoL ( 6, 2 ) = 0.950 +casabiome % ftransNPtoL ( 6, 3 ) = 0.900 +casabiome % fracligninplant ( 6, 1 ) = 0.100 +casabiome % fracligninplant ( 6, 2 ) = 0.400 +casabiome % fracligninplant ( 6, 3 ) = 0.100 +ratioCNsoil ( 6, 1 ) = 8.000 +ratioCNsoil ( 6, 2 ) = 13.100 +ratioCNsoil ( 6, 3 ) = 13.100 +ratioCNsoilmin ( 6, 1 ) = 3.000 +ratioCNsoilmin ( 6, 2 ) = 12.000 +ratioCNsoilmin ( 6, 3 ) = 7.000 +ratioCNsoilmax ( 6, 1 ) = 15.000 +ratioCNsoilmax ( 6, 2 ) = 30.000 +ratioCNsoilmax ( 6, 3 ) = 15.000 +casabiome % glaimax ( 6 ) = 3.000 +casabiome % glaimin ( 6 ) = 0.100 + +ratioCNplant ( 7, 1 ) = 44.000 +ratioCNplant ( 7, 2 ) = 150.000 +ratioCNplant ( 7, 3 ) = 62.700 +casabiome % ftransNPtoL ( 7, 1 ) = 0.500 +casabiome % ftransNPtoL ( 7, 2 ) = 0.950 +casabiome % ftransNPtoL ( 7, 3 ) = 0.900 +casabiome % fracligninplant ( 7, 1 ) = 0.100 +casabiome % fracligninplant ( 7, 2 ) = 0.400 +casabiome % fracligninplant ( 7, 3 ) = 0.100 +ratioCNsoil ( 7, 1 ) = 8.000 +ratioCNsoil ( 7, 2 ) = 13.100 +ratioCNsoil ( 7, 3 ) = 13.100 +ratioCNsoilmin ( 7, 1 ) = 3.000 +ratioCNsoilmin ( 7, 2 ) = 12.000 +ratioCNsoilmin ( 7, 3 ) = 7.000 +ratioCNsoilmax ( 7, 1 ) = 15.000 +ratioCNsoilmax ( 7, 2 ) = 30.000 +ratioCNsoilmax ( 7, 3 ) = 15.000 +casabiome % glaimax ( 7 ) = 3.000 +casabiome % glaimin ( 7 ) = 0.100 + +ratioCNplant ( 8, 1 ) = 49.200 +ratioCNplant ( 8, 2 ) = 147.300 +ratioCNplant ( 8, 3 ) = 69.000 +casabiome % ftransNPtoL ( 8, 1 ) = 0.500 +casabiome % ftransNPtoL ( 8, 2 ) = 0.950 +casabiome % ftransNPtoL ( 8, 3 ) = 0.900 +casabiome % fracligninplant ( 8, 1 ) = 0.100 +casabiome % fracligninplant ( 8, 2 ) = 0.400 +casabiome % fracligninplant ( 8, 3 ) = 0.100 +ratioCNsoil ( 8, 1 ) = 8.000 +ratioCNsoil ( 8, 2 ) = 13.100 +ratioCNsoil ( 8, 3 ) = 13.100 +ratioCNsoilmin ( 8, 1 ) = 3.000 +ratioCNsoilmin ( 8, 2 ) = 12.000 +ratioCNsoilmin ( 8, 3 ) = 7.000 +ratioCNsoilmax ( 8, 1 ) = 15.000 +ratioCNsoilmax ( 8, 2 ) = 30.000 +ratioCNsoilmax ( 8, 3 ) = 15.000 +casabiome % glaimax ( 8 ) = 3.000 +casabiome % glaimin ( 8 ) = 0.100 + +ratioCNplant ( 9, 1 ) = 21.600 +ratioCNplant ( 9, 2 ) = 150.000 +ratioCNplant ( 9, 3 ) = 60.700 +casabiome % ftransNPtoL ( 9, 1 ) = 0.500 +casabiome % ftransNPtoL ( 9, 2 ) = 0.950 +casabiome % ftransNPtoL ( 9, 3 ) = 0.900 +casabiome % fracligninplant ( 9, 1 ) = 0.100 +casabiome % fracligninplant ( 9, 2 ) = 0.400 +casabiome % fracligninplant ( 9, 3 ) = 0.100 +ratioCNsoil ( 9, 1 ) = 8.000 +ratioCNsoil ( 9, 2 ) = 13.200 +ratioCNsoil ( 9, 3 ) = 13.200 +ratioCNsoilmin ( 9, 1 ) = 3.000 +ratioCNsoilmin ( 9, 2 ) = 12.000 +ratioCNsoilmin ( 9, 3 ) = 7.000 +ratioCNsoilmax ( 9, 1 ) = 15.000 +ratioCNsoilmax ( 9, 2 ) = 30.000 +ratioCNsoilmax ( 9, 3 ) = 15.000 +casabiome % glaimax ( 9 ) = 6.000 +casabiome % glaimin ( 9 ) = 0.100 + +ratioCNplant ( 10, 1 ) = 25.000 +ratioCNplant ( 10, 2 ) = 125.000 +ratioCNplant ( 10, 3 ) = 71.000 +casabiome % ftransNPtoL ( 10, 1 ) = 0.500 +casabiome % ftransNPtoL ( 10, 2 ) = 0.950 +casabiome % ftransNPtoL ( 10, 3 ) = 0.900 +casabiome % fracligninplant ( 10, 1 ) = 0.100 +casabiome % fracligninplant ( 10, 2 ) = 0.400 +casabiome % fracligninplant ( 10, 3 ) = 0.100 +ratioCNsoil ( 10, 1 ) = 8.000 +ratioCNsoil ( 10, 2 ) = 13.200 +ratioCNsoil ( 10, 3 ) = 13.200 +ratioCNsoilmin ( 10, 1 ) = 3.000 +ratioCNsoilmin ( 10, 2 ) = 12.000 +ratioCNsoilmin ( 10, 3 ) = 7.000 +ratioCNsoilmax ( 10, 1 ) = 15.000 +ratioCNsoilmax ( 10, 2 ) = 30.000 +ratioCNsoilmax ( 10, 3 ) = 15.000 +casabiome % glaimax ( 10 ) = 6.000 +casabiome % glaimin ( 10 ) = 0.100 + +ratioCNplant ( 11, 1 ) = 30.000 +ratioCNplant ( 11, 2 ) = 150.000 +ratioCNplant ( 11, 3 ) = 71.000 +casabiome % ftransNPtoL ( 11, 1 ) = 0.500 +casabiome % ftransNPtoL ( 11, 2 ) = 0.950 +casabiome % ftransNPtoL ( 11, 3 ) = 0.900 +casabiome % fracligninplant ( 11, 1 ) = 0.150 +casabiome % fracligninplant ( 11, 2 ) = 0.400 +casabiome % fracligninplant ( 11, 3 ) = 0.150 +ratioCNsoil ( 11, 1 ) = 8.000 +ratioCNsoil ( 11, 2 ) = 13.100 +ratioCNsoil ( 11, 3 ) = 13.100 +ratioCNsoilmin ( 11, 1 ) = 3.000 +ratioCNsoilmin ( 11, 2 ) = 12.000 +ratioCNsoilmin ( 11, 3 ) = 7.000 +ratioCNsoilmax ( 11, 1 ) = 15.000 +ratioCNsoilmax ( 11, 2 ) = 30.000 +ratioCNsoilmax ( 11, 3 ) = 15.000 +casabiome % glaimax ( 11 ) = 5.000 +casabiome % glaimin ( 11 ) = 0.050 + +ratioCNplant ( 12, 1 ) = 30.000 +ratioCNplant ( 12, 2 ) = 150.000 +ratioCNplant ( 12, 3 ) = 71.000 +casabiome % ftransNPtoL ( 12, 1 ) = 0.500 +casabiome % ftransNPtoL ( 12, 2 ) = 0.950 +casabiome % ftransNPtoL ( 12, 3 ) = 0.900 +casabiome % fracligninplant ( 12, 1 ) = 0.150 +casabiome % fracligninplant ( 12, 2 ) = 0.400 +casabiome % fracligninplant ( 12, 3 ) = 0.150 +ratioCNsoil ( 12, 1 ) = 8.000 +ratioCNsoil ( 12, 2 ) = 13.100 +ratioCNsoil ( 12, 3 ) = 13.100 +ratioCNsoilmin ( 12, 1 ) = 3.000 +ratioCNsoilmin ( 12, 2 ) = 12.000 +ratioCNsoilmin ( 12, 3 ) = 7.000 +ratioCNsoilmax ( 12, 1 ) = 15.000 +ratioCNsoilmax ( 12, 2 ) = 30.000 +ratioCNsoilmax ( 12, 3 ) = 15.000 +casabiome % glaimax ( 12 ) = 5.000 +casabiome % glaimin ( 12 ) = 0.050 + +ratioCNplant ( 13, 1 ) = 30.000 +ratioCNplant ( 13, 2 ) = 150.000 +ratioCNplant ( 13, 3 ) = 71.000 +casabiome % ftransNPtoL ( 13, 1 ) = 0.500 +casabiome % ftransNPtoL ( 13, 2 ) = 0.950 +casabiome % ftransNPtoL ( 13, 3 ) = 0.900 +casabiome % fracligninplant ( 13, 1 ) = 0.150 +casabiome % fracligninplant ( 13, 2 ) = 0.400 +casabiome % fracligninplant ( 13, 3 ) = 0.150 +ratioCNsoil ( 13, 1 ) = 8.000 +ratioCNsoil ( 13, 2 ) = 13.100 +ratioCNsoil ( 13, 3 ) = 13.100 +ratioCNsoilmin ( 13, 1 ) = 3.000 +ratioCNsoilmin ( 13, 2 ) = 12.000 +ratioCNsoilmin ( 13, 3 ) = 7.000 +ratioCNsoilmax ( 13, 1 ) = 15.000 +ratioCNsoilmax ( 13, 2 ) = 30.000 +ratioCNsoilmax ( 13, 3 ) = 15.000 +casabiome % glaimax ( 13 ) = 5.000 +casabiome % glaimin ( 13 ) = 0.050 + +ratioCNplant ( 14, 1 ) = 50.000 +ratioCNplant ( 14, 2 ) = 150.000 +ratioCNplant ( 14, 3 ) = 71.000 +casabiome % ftransNPtoL ( 14, 1 ) = 0.500 +casabiome % ftransNPtoL ( 14, 2 ) = 0.950 +casabiome % ftransNPtoL ( 14, 3 ) = 0.900 +casabiome % fracligninplant ( 14, 1 ) = 0.150 +casabiome % fracligninplant ( 14, 2 ) = 0.400 +casabiome % fracligninplant ( 14, 3 ) = 0.150 +ratioCNsoil ( 14, 1 ) = 8.000 +ratioCNsoil ( 14, 2 ) = 26.800 +ratioCNsoil ( 14, 3 ) = 26.800 +ratioCNsoilmin ( 14, 1 ) = 3.000 +ratioCNsoilmin ( 14, 2 ) = 12.000 +ratioCNsoilmin ( 14, 3 ) = 7.000 +ratioCNsoilmax ( 14, 1 ) = 15.000 +ratioCNsoilmax ( 14, 2 ) = 30.000 +ratioCNsoilmax ( 14, 3 ) = 15.000 +casabiome % glaimax ( 14 ) = 1.000 +casabiome % glaimin ( 14 ) = 0.050 + +ratioCNplant ( 15, 1 ) = 40.000 +ratioCNplant ( 15, 2 ) = 150.000 +ratioCNplant ( 15, 3 ) = 71.000 +casabiome % ftransNPtoL ( 15, 1 ) = 0.500 +casabiome % ftransNPtoL ( 15, 2 ) = 0.950 +casabiome % ftransNPtoL ( 15, 3 ) = 0.900 +casabiome % fracligninplant ( 15, 1 ) = 0.150 +casabiome % fracligninplant ( 15, 2 ) = 0.400 +casabiome % fracligninplant ( 15, 3 ) = 0.150 +ratioCNsoil ( 15, 1 ) = 8.000 +ratioCNsoil ( 15, 2 ) = 20.000 +ratioCNsoil ( 15, 3 ) = 20.000 +ratioCNsoilmin ( 15, 1 ) = 3.000 +ratioCNsoilmin ( 15, 2 ) = 12.000 +ratioCNsoilmin ( 15, 3 ) = 7.000 +ratioCNsoilmax ( 15, 1 ) = 15.000 +ratioCNsoilmax ( 15, 2 ) = 30.000 +ratioCNsoilmax ( 15, 3 ) = 15.000 +casabiome % glaimax ( 15 ) = 6.000 +casabiome % glaimin ( 15 ) = 0.050 + +ratioCNplant ( 16, 1 ) = 40.000 +ratioCNplant ( 16, 2 ) = 135.000 +ratioCNplant ( 16, 3 ) = 71.000 +casabiome % ftransNPtoL ( 16, 1 ) = 0.500 +casabiome % ftransNPtoL ( 16, 2 ) = 0.950 +casabiome % ftransNPtoL ( 16, 3 ) = 0.900 +casabiome % fracligninplant ( 16, 1 ) = 0.250 +casabiome % fracligninplant ( 16, 2 ) = 0.400 +casabiome % fracligninplant ( 16, 3 ) = 0.250 +ratioCNsoil ( 16, 1 ) = 8.000 +ratioCNsoil ( 16, 2 ) = 20.000 +ratioCNsoil ( 16, 3 ) = 20.000 +ratioCNsoilmin ( 16, 1 ) = 3.000 +ratioCNsoilmin ( 16, 2 ) = 12.000 +ratioCNsoilmin ( 16, 3 ) = 7.000 +ratioCNsoilmax ( 16, 1 ) = 15.000 +ratioCNsoilmax ( 16, 2 ) = 30.000 +ratioCNsoilmax ( 16, 3 ) = 15.000 +casabiome % glaimax ( 16 ) = 1.000 +casabiome % glaimin ( 16 ) = 0.050 + +ratioCNplant ( 17, 1 ) = 40.000 +ratioCNplant ( 17, 2 ) = 150.000 +ratioCNplant ( 17, 3 ) = 71.000 +casabiome % ftransNPtoL ( 17, 1 ) = 0.500 +casabiome % ftransNPtoL ( 17, 2 ) = 0.950 +casabiome % ftransNPtoL ( 17, 3 ) = 0.900 +casabiome % fracligninplant ( 17, 1 ) = 0.100 +casabiome % fracligninplant ( 17, 2 ) = 0.400 +casabiome % fracligninplant ( 17, 3 ) = 0.100 +ratioCNsoil ( 17, 1 ) = 8.000 +ratioCNsoil ( 17, 2 ) = 20.000 +ratioCNsoil ( 17, 3 ) = 20.000 +ratioCNsoilmin ( 17, 1 ) = 3.000 +ratioCNsoilmin ( 17, 2 ) = 12.000 +ratioCNsoilmin ( 17, 3 ) = 7.000 +ratioCNsoilmax ( 17, 1 ) = 15.000 +ratioCNsoilmax ( 17, 2 ) = 30.000 +ratioCNsoilmax ( 17, 3 ) = 15.000 +casabiome % glaimax ( 17 ) = 0.000 +casabiome % glaimin ( 17 ) = 0.000 + + ! Tranche 3 + !=============================================================== +cleaf ( 1 ) = 5.500 +cwood ( 1 ) = 5.500 +cfroot ( 1 ) = 5.500 +cmet ( 1 ) = 5.500 +cstr ( 1 ) = 5.500 +ccwd ( 1 ) = 5.500 +cmic ( 1 ) = 5.500 +cslow ( 1 ) = 5.500 +cpass ( 1 ) = 5.500 + +cleaf ( 2 ) = 3.900 +cwood ( 2 ) = 3.900 +cfroot ( 2 ) = 3.900 +cmet ( 2 ) = 3.900 +cstr ( 2 ) = 3.900 +ccwd ( 2 ) = 3.900 +cmic ( 2 ) = 3.900 +cslow ( 2 ) = 3.900 +cpass ( 2 ) = 3.900 + +cleaf ( 3 ) = 5.500 +cwood ( 3 ) = 5.500 +cfroot ( 3 ) = 5.500 +cmet ( 3 ) = 5.500 +cstr ( 3 ) = 5.500 +ccwd ( 3 ) = 5.500 +cmic ( 3 ) = 5.500 +cslow ( 3 ) = 5.500 +cpass ( 3 ) = 5.500 + +cleaf ( 4 ) = 3.900 +cwood ( 4 ) = 3.900 +cfroot ( 4 ) = 3.900 +cmet ( 4 ) = 3.900 +cstr ( 4 ) = 3.900 +ccwd ( 4 ) = 3.900 +cmic ( 4 ) = 3.900 +cslow ( 4 ) = 3.900 +cpass ( 4 ) = 3.900 + +cleaf ( 5 ) = 2.000 +cwood ( 5 ) = 2.000 +cfroot ( 5 ) = 2.000 +cmet ( 5 ) = 2.000 +cstr ( 5 ) = 2.000 +ccwd ( 5 ) = 2.000 +cmic ( 5 ) = 2.000 +cslow ( 5 ) = 2.000 +cpass ( 5 ) = 2.000 + +cleaf ( 6 ) = 5.500 +cwood ( 6 ) = 5.500 +cfroot ( 6 ) = 5.500 +cmet ( 6 ) = 5.500 +cstr ( 6 ) = 5.500 +ccwd ( 6 ) = 5.500 +cmic ( 6 ) = 5.500 +cslow ( 6 ) = 5.500 +cpass ( 6 ) = 5.500 + +cleaf ( 7 ) = 5.500 +cwood ( 7 ) = 5.500 +cfroot ( 7 ) = 5.500 +cmet ( 7 ) = 5.500 +cstr ( 7 ) = 5.500 +ccwd ( 7 ) = 5.500 +cmic ( 7 ) = 5.500 +cslow ( 7 ) = 5.500 +cpass ( 7 ) = 5.500 + +cleaf ( 8 ) = 5.500 +cwood ( 8 ) = 5.500 +cfroot ( 8 ) = 5.500 +cmet ( 8 ) = 5.500 +cstr ( 8 ) = 5.500 +ccwd ( 8 ) = 5.500 +cmic ( 8 ) = 5.500 +cslow ( 8 ) = 5.500 +cpass ( 8 ) = 5.500 + +cleaf ( 9 ) = 5.500 +cwood ( 9 ) = 5.500 +cfroot ( 9 ) = 5.500 +cmet ( 9 ) = 5.500 +cstr ( 9 ) = 5.500 +ccwd ( 9 ) = 5.500 +cmic ( 9 ) = 5.500 +cslow ( 9 ) = 5.500 +cpass ( 9 ) = 5.500 + +cleaf ( 10 ) = 5.500 +cwood ( 10 ) = 5.500 +cfroot ( 10 ) = 5.500 +cmet ( 10 ) = 5.500 +cstr ( 10 ) = 5.500 +ccwd ( 10 ) = 5.500 +cmic ( 10 ) = 5.500 +cslow ( 10 ) = 5.500 +cpass ( 10 ) = 5.500 + +cleaf ( 11 ) = 5.500 +cwood ( 11 ) = 5.500 +cfroot ( 11 ) = 5.500 +cmet ( 11 ) = 5.500 +cstr ( 11 ) = 5.500 +ccwd ( 11 ) = 5.500 +cmic ( 11 ) = 5.500 +cslow ( 11 ) = 5.500 +cpass ( 11 ) = 5.500 + +cleaf ( 12 ) = 5.500 +cwood ( 12 ) = 5.500 +cfroot ( 12 ) = 5.500 +cmet ( 12 ) = 5.500 +cstr ( 12 ) = 5.500 +ccwd ( 12 ) = 5.500 +cmic ( 12 ) = 5.500 +cslow ( 12 ) = 5.500 +cpass ( 12 ) = 5.500 + +cleaf ( 13 ) = 5.500 +cwood ( 13 ) = 5.500 +cfroot ( 13 ) = 5.500 +cmet ( 13 ) = 5.500 +cstr ( 13 ) = 5.500 +ccwd ( 13 ) = 5.500 +cmic ( 13 ) = 5.500 +cslow ( 13 ) = 5.500 +cpass ( 13 ) = 5.500 + +cleaf ( 14 ) = 2.000 +cwood ( 14 ) = 2.000 +cfroot ( 14 ) = 2.000 +cmet ( 14 ) = 2.000 +cstr ( 14 ) = 2.000 +ccwd ( 14 ) = 2.000 +cmic ( 14 ) = 2.000 +cslow ( 14 ) = 2.000 +cpass ( 14 ) = 2.000 + +cleaf ( 15 ) = 2.000 +cwood ( 15 ) = 2.000 +cfroot ( 15 ) = 2.000 +cmet ( 15 ) = 2.000 +cstr ( 15 ) = 2.000 +ccwd ( 15 ) = 2.000 +cmic ( 15 ) = 2.000 +cslow ( 15 ) = 2.000 +cpass ( 15 ) = 2.000 + +cleaf ( 16 ) = 5.500 +cwood ( 16 ) = 5.500 +cfroot ( 16 ) = 5.500 +cmet ( 16 ) = 5.500 +cstr ( 16 ) = 5.500 +ccwd ( 16 ) = 5.500 +cmic ( 16 ) = 5.500 +cslow ( 16 ) = 5.500 +cpass ( 16 ) = 5.500 + +cleaf ( 17 ) = 5.500 +cwood ( 17 ) = 5.500 +cfroot ( 17 ) = 5.500 +cmet ( 17 ) = 5.500 +cstr ( 17 ) = 5.500 +ccwd ( 17 ) = 5.500 +cmic ( 17 ) = 5.500 +cslow ( 17 ) = 5.500 +cpass ( 17 ) = 5.500 + + ! Tranche 4 + !=============================================================== +phen%TKshed ( 1 ) = 268.000 +xxkleafcoldmax ( 1 ) = 0.200 +casabiome%xkleafcoldexp ( 1 ) = 3.000 +xxkleafdrymax ( 1 ) = 0.100 +casabiome%xkleafdryexp ( 1 ) = 3.000 + +phen%TKshed ( 2 ) = 260.000 +xxkleafcoldmax ( 2 ) = 0.100 +casabiome%xkleafcoldexp ( 2 ) = 3.000 +xxkleafdrymax ( 2 ) = 0.100 +casabiome%xkleafdryexp ( 2 ) = 3.000 + +phen%TKshed ( 3 ) = 263.150 +xxkleafcoldmax ( 3 ) = 0.100 +casabiome%xkleafcoldexp ( 3 ) = 3.000 +xxkleafdrymax ( 3 ) = 0.100 +casabiome%xkleafdryexp ( 3 ) = 3.000 + +phen%TKshed ( 4 ) = 268.150 +xxkleafcoldmax ( 4 ) = 0.600 +casabiome%xkleafcoldexp ( 4 ) = 3.000 +xxkleafdrymax ( 4 ) = 1.000 +casabiome%xkleafdryexp ( 4 ) = 3.000 + +phen%TKshed ( 5 ) = 277.150 +xxkleafcoldmax ( 5 ) = 1.000 +casabiome%xkleafcoldexp ( 5 ) = 3.000 +xxkleafdrymax ( 5 ) = 0.100 +casabiome%xkleafdryexp ( 5 ) = 3.000 + +phen%TKshed ( 6 ) = 275.150 +xxkleafcoldmax ( 6 ) = 0.200 +casabiome%xkleafcoldexp ( 6 ) = 3.000 +xxkleafdrymax ( 6 ) = 0.100 +casabiome%xkleafdryexp ( 6 ) = 3.000 + +phen%TKshed ( 7 ) = 275.150 +xxkleafcoldmax ( 7 ) = 0.200 +casabiome%xkleafcoldexp ( 7 ) = 3.000 +xxkleafdrymax ( 7 ) = 0.100 +casabiome%xkleafdryexp ( 7 ) = 3.000 + +phen%TKshed ( 8 ) = 275.150 +xxkleafcoldmax ( 8 ) = 0.200 +casabiome%xkleafcoldexp ( 8 ) = 3.000 +xxkleafdrymax ( 8 ) = 0.100 +casabiome%xkleafdryexp ( 8 ) = 3.000 + +phen%TKshed ( 9 ) = 278.150 +xxkleafcoldmax ( 9 ) = 0.300 +casabiome%xkleafcoldexp ( 9 ) = 3.000 +xxkleafdrymax ( 9 ) = 0.100 +casabiome%xkleafdryexp ( 9 ) = 3.000 + +phen%TKshed ( 10 ) = 278.150 +xxkleafcoldmax ( 10 ) = 0.300 +casabiome%xkleafcoldexp ( 10 ) = 3.000 +xxkleafdrymax ( 10 ) = 0.100 +casabiome%xkleafdryexp ( 10 ) = 3.000 + +phen%TKshed ( 11 ) = 277.150 +xxkleafcoldmax ( 11 ) = 0.100 +casabiome%xkleafcoldexp ( 11 ) = 3.000 +xxkleafdrymax ( 11 ) = 0.100 +casabiome%xkleafdryexp ( 11 ) = 3.000 + +phen%TKshed ( 12 ) = 277.150 +xxkleafcoldmax ( 12 ) = 0.100 +casabiome%xkleafcoldexp ( 12 ) = 3.000 +xxkleafdrymax ( 12 ) = 0.100 +casabiome%xkleafdryexp ( 12 ) = 3.000 + +phen%TKshed ( 13 ) = 277.150 +xxkleafcoldmax ( 13 ) = 0.100 +casabiome%xkleafcoldexp ( 13 ) = 3.000 +xxkleafdrymax ( 13 ) = 0.100 +casabiome%xkleafdryexp ( 13 ) = 3.000 + +phen%TKshed ( 14 ) = 277.150 +xxkleafcoldmax ( 14 ) = 0.100 +casabiome%xkleafcoldexp ( 14 ) = 3.000 +xxkleafdrymax ( 14 ) = 0.100 +casabiome%xkleafdryexp ( 14 ) = 3.000 + +phen%TKshed ( 15 ) = 277.150 +xxkleafcoldmax ( 15 ) = 0.100 +casabiome%xkleafcoldexp ( 15 ) = 3.000 +xxkleafdrymax ( 15 ) = 0.100 +casabiome%xkleafdryexp ( 15 ) = 3.000 + +phen%TKshed ( 16 ) = 277.150 +xxkleafcoldmax ( 16 ) = 0.100 +casabiome%xkleafcoldexp ( 16 ) = 3.000 +xxkleafdrymax ( 16 ) = 0.100 +casabiome%xkleafdryexp ( 16 ) = 3.000 + +phen%TKshed ( 17 ) = 283.150 +xxkleafcoldmax ( 17 ) = 0.100 +casabiome%xkleafcoldexp ( 17 ) = 3.000 +xxkleafdrymax ( 17 ) = 0.100 +casabiome%xkleafdryexp ( 17 ) = 3.000 + + ! Tranche 5 gets skipped + !=============================================================== + + ! Tranche 6 + !=============================================================== +casabiome%ratioNCplantmin ( 1, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 1, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 1, 2 ) = 0.004 +casabiome%ratioNCplantmax ( 1, 2 ) = 0.005 +casabiome%ratioNCplantmin ( 1, 3 ) = 0.013 +casabiome%ratioNCplantmax ( 1, 3 ) = 0.015 +xfNminloss ( 1 ) = 0.050 +xfNminleach ( 1 ) = 0.050 +xnfixrate ( 1 ) = 0.080 + +casabiome%ratioNCplantmin ( 2, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 2, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 2, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 2, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 2, 3 ) = 0.015 +casabiome%ratioNCplantmax ( 2, 3 ) = 0.018 +xfNminloss ( 2 ) = 0.050 +xfNminleach ( 2 ) = 0.050 +xnfixrate ( 2 ) = 2.600 + +casabiome%ratioNCplantmin ( 3, 1 ) = 0.017 +casabiome%ratioNCplantmax ( 3, 1 ) = 0.020 +casabiome%ratioNCplantmin ( 3, 2 ) = 0.004 +casabiome%ratioNCplantmax ( 3, 2 ) = 0.005 +casabiome%ratioNCplantmin ( 3, 3 ) = 0.013 +casabiome%ratioNCplantmax ( 3, 3 ) = 0.015 +xfNminloss ( 3 ) = 0.050 +xfNminleach ( 3 ) = 0.050 +xnfixrate ( 3 ) = 0.210 + +casabiome%ratioNCplantmin ( 4, 1 ) = 0.029 +casabiome%ratioNCplantmax ( 4, 1 ) = 0.034 +casabiome%ratioNCplantmin ( 4, 2 ) = 0.006 +casabiome%ratioNCplantmax ( 4, 2 ) = 0.007 +casabiome%ratioNCplantmin ( 4, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 4, 3 ) = 0.017 +xfNminloss ( 4 ) = 0.050 +xfNminleach ( 4 ) = 0.050 +xnfixrate ( 4 ) = 1.640 + +casabiome%ratioNCplantmin ( 5, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 5, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 5, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 5, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 5, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 5, 3 ) = 0.017 +xfNminloss ( 5 ) = 0.050 +xfNminleach ( 5 ) = 0.050 +xnfixrate ( 5 ) = 0.370 + +casabiome%ratioNCplantmin ( 6, 1 ) = 0.026 +casabiome%ratioNCplantmax ( 6, 1 ) = 0.032 +casabiome%ratioNCplantmin ( 6, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 6, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 6, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 6, 3 ) = 0.017 +xfNminloss ( 6 ) = 0.050 +xfNminleach ( 6 ) = 0.050 +xnfixrate ( 6 ) = 0.950 + +casabiome%ratioNCplantmin ( 7, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 7, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 7, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 7, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 7, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 7, 3 ) = 0.017 +xfNminloss ( 7 ) = 0.050 +xfNminleach ( 7 ) = 0.050 +xnfixrate ( 7 ) = 0.950 + +casabiome%ratioNCplantmin ( 8, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 8, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 8, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 8, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 8, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 8, 3 ) = 0.017 +xfNminloss ( 8 ) = 0.050 +xfNminleach ( 8 ) = 0.050 +xnfixrate ( 8 ) = 0.950 + +casabiome%ratioNCplantmin ( 9, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 9, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 9, 2 ) = 0.008 +casabiome%ratioNCplantmax ( 9, 2 ) = 0.010 +casabiome%ratioNCplantmin ( 9, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 9, 3 ) = 0.017 +xfNminloss ( 9 ) = 0.050 +xfNminleach ( 9 ) = 0.050 +xnfixrate ( 9 ) = 4.000 + +casabiome%ratioNCplantmin ( 10, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 10, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 10, 2 ) = 0.008 +casabiome%ratioNCplantmax ( 10, 2 ) = 0.010 +casabiome%ratioNCplantmin ( 10, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 10, 3 ) = 0.017 +xfNminloss ( 10 ) = 0.050 +xfNminleach ( 10 ) = 0.050 +xnfixrate ( 10 ) = 4.000 + +casabiome%ratioNCplantmin ( 11, 1 ) = 0.033 +casabiome%ratioNCplantmax ( 11, 1 ) = 0.040 +casabiome%ratioNCplantmin ( 11, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 11, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 11, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 11, 3 ) = 0.017 +xfNminloss ( 11 ) = 0.050 +xfNminleach ( 11 ) = 0.050 +xnfixrate ( 11 ) = 0.000 + +casabiome%ratioNCplantmin ( 12, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 12, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 12, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 12, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 12, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 12, 3 ) = 0.017 +xfNminloss ( 12 ) = 0.050 +xfNminleach ( 12 ) = 0.050 +xnfixrate ( 12 ) = 0.000 + +casabiome%ratioNCplantmin ( 13, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 13, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 13, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 13, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 13, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 13, 3 ) = 0.017 +xfNminloss ( 13 ) = 0.050 +xfNminleach ( 13 ) = 0.050 +xnfixrate ( 13 ) = 0.000 + +casabiome%ratioNCplantmin ( 14, 1 ) = 0.018 +casabiome%ratioNCplantmax ( 14, 1 ) = 0.022 +casabiome%ratioNCplantmin ( 14, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 14, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 14, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 14, 3 ) = 0.017 +xfNminloss ( 14 ) = 0.050 +xfNminleach ( 14 ) = 0.050 +xnfixrate ( 14 ) = 0.350 + +casabiome%ratioNCplantmin ( 15, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 15, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 15, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 15, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 15, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 15, 3 ) = 0.017 +xfNminloss ( 15 ) = 0.050 +xfNminleach ( 15 ) = 0.050 +xnfixrate ( 15 ) = 0.000 + +casabiome%ratioNCplantmin ( 16, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 16, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 16, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 16, 2 ) = 0.009 +casabiome%ratioNCplantmin ( 16, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 16, 3 ) = 0.017 +xfNminloss ( 16 ) = 0.050 +xfNminleach ( 16 ) = 0.050 +xnfixrate ( 16 ) = 0.000 + +casabiome%ratioNCplantmin ( 17, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 17, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 17, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 17, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 17, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 17, 3 ) = 0.017 +xfNminloss ( 17 ) = 0.050 +xfNminleach ( 17 ) = 0.050 +xnfixrate ( 17 ) = 0.000 + + ! Tranche 7 + !=============================================================== +Nleaf ( 1 ) = 7.541 +Nwood ( 1 ) = 31.462 +Nfroot ( 1 ) = 6.098 +Nmet ( 1 ) = 0.064 +Nstr ( 1 ) = 1.394 +Ncwd ( 1 ) = 2.424 +Nmic ( 1 ) = 52.866 +Nslow ( 1 ) = 919.729 +Npass ( 1 ) = 295.026 +xnsoilmin ( 1 ) = 1000.000 + +Nleaf ( 2 ) = 9.900 +Nwood ( 2 ) = 102.000 +Nfroot ( 2 ) = 38.000 +Nmet ( 2 ) = 0.744 +Nstr ( 2 ) = 2.892 +Ncwd ( 2 ) = 8.524 +Nmic ( 2 ) = 1.138 +Nslow ( 2 ) = 20.787 +Npass ( 2 ) = 880.121 +xnsoilmin ( 2 ) = 1000.000 + +Nleaf ( 3 ) = 1.610 +Nwood ( 3 ) = 22.734 +Nfroot ( 3 ) = 5.366 +Nmet ( 3 ) = 0.059 +Nstr ( 3 ) = 1.852 +Ncwd ( 3 ) = 3.107 +Nmic ( 3 ) = 59.708 +Nslow ( 3 ) = 1074.741 +Npass ( 3 ) = 338.787 +xnsoilmin ( 3 ) = 1000.000 + +Nleaf ( 4 ) = 3.757 +Nwood ( 4 ) = 80.250 +Nfroot ( 4 ) = 5.366 +Nmet ( 4 ) = 0.137 +Nstr ( 4 ) = 2.084 +Ncwd ( 4 ) = 6.582 +Nmic ( 4 ) = 40.556 +Nslow ( 4 ) = 743.550 +Npass ( 4 ) = 336.079 +xnsoilmin ( 4 ) = 1000.000 + +Nleaf ( 5 ) = 2.933 +Nwood ( 5 ) = 2.756 +Nfroot ( 5 ) = 3.415 +Nmet ( 5 ) = 0.054 +Nstr ( 5 ) = 0.263 +Ncwd ( 5 ) = 0.827 +Nmic ( 5 ) = 16.805 +Nslow ( 5 ) = 297.699 +Npass ( 5 ) = 92.432 +xnsoilmin ( 5 ) = 1000.000 + +Nleaf ( 6 ) = 4.572 +Nwood ( 6 ) = 0.000 +Nfroot ( 6 ) = 6.415 +Nmet ( 6 ) = 0.476 +Nstr ( 6 ) = 0.339 +Ncwd ( 6 ) = 0.000 +Nmic ( 6 ) = 42.564 +Nslow ( 6 ) = 379.629 +Npass ( 6 ) = 278.661 +xnsoilmin ( 6 ) = 1000.000 + +Nleaf ( 7 ) = 4.572 +Nwood ( 7 ) = 0.000 +Nfroot ( 7 ) = 6.415 +Nmet ( 7 ) = 0.476 +Nstr ( 7 ) = 0.339 +Ncwd ( 7 ) = 0.000 +Nmic ( 7 ) = 42.564 +Nslow ( 7 ) = 379.629 +Npass ( 7 ) = 278.661 +xnsoilmin ( 7 ) = 1000.000 + +Nleaf ( 8 ) = 4.572 +Nwood ( 8 ) = 0.000 +Nfroot ( 8 ) = 6.415 +Nmet ( 8 ) = 0.476 +Nstr ( 8 ) = 0.339 +Ncwd ( 8 ) = 0.000 +Nmic ( 8 ) = 42.564 +Nslow ( 8 ) = 379.629 +Npass ( 8 ) = 278.661 +xnsoilmin ( 8 ) = 1000.000 + +Nleaf ( 9 ) = 5.333 +Nwood ( 9 ) = 0.000 +Nfroot ( 9 ) = 5.854 +Nmet ( 9 ) = 0.476 +Nstr ( 9 ) = 0.339 +Ncwd ( 9 ) = 0.000 +Nmic ( 9 ) = 51.242 +Nslow ( 9 ) = 457.029 +Npass ( 9 ) = 335.476 +xnsoilmin ( 9 ) = 1000.000 + +Nleaf ( 10 ) = 5.333 +Nwood ( 10 ) = 0.000 +Nfroot ( 10 ) = 5.854 +Nmet ( 10 ) = 0.476 +Nstr ( 10 ) = 0.339 +Ncwd ( 10 ) = 0.000 +Nmic ( 10 ) = 51.242 +Nslow ( 10 ) = 457.029 +Npass ( 10 ) = 335.476 +xnsoilmin ( 10 ) = 1000.000 + +Nleaf ( 11 ) = 0.000 +Nwood ( 11 ) = 0.000 +Nfroot ( 11 ) = 0.000 +Nmet ( 11 ) = 0.000 +Nstr ( 11 ) = 0.000 +Ncwd ( 11 ) = 0.000 +Nmic ( 11 ) = 0.000 +Nslow ( 11 ) = 0.000 +Npass ( 11 ) = 0.000 +xnsoilmin ( 11 ) = 1000.000 + +Nleaf ( 12 ) = 0.000 +Nwood ( 12 ) = 0.000 +Nfroot ( 12 ) = 0.000 +Nmet ( 12 ) = 0.000 +Nstr ( 12 ) = 0.000 +Ncwd ( 12 ) = 0.000 +Nmic ( 12 ) = 0.000 +Nslow ( 12 ) = 0.000 +Npass ( 12 ) = 0.000 +xnsoilmin ( 12 ) = 1000.000 + +Nleaf ( 13 ) = 0.000 +Nwood ( 13 ) = 0.000 +Nfroot ( 13 ) = 0.000 +Nmet ( 13 ) = 0.000 +Nstr ( 13 ) = 0.000 +Ncwd ( 13 ) = 0.000 +Nmic ( 13 ) = 0.000 +Nslow ( 13 ) = 0.000 +Npass ( 13 ) = 0.000 +xnsoilmin ( 13 ) = 1000.000 + +Nleaf ( 14 ) = 0.500 +Nwood ( 14 ) = 0.126 +Nfroot ( 14 ) = 1.537 +Nmet ( 14 ) = 0.018 +Nstr ( 14 ) = 0.033 +Ncwd ( 14 ) = 0.211 +Nmic ( 14 ) = 5.778 +Nslow ( 14 ) = 88.337 +Npass ( 14 ) = 34.478 +xnsoilmin ( 14 ) = 1000.000 + +Nleaf ( 15 ) = 0.000 +Nwood ( 15 ) = 0.000 +Nfroot ( 15 ) = 0.000 +Nmet ( 15 ) = 0.000 +Nstr ( 15 ) = 0.000 +Ncwd ( 15 ) = 0.000 +Nmic ( 15 ) = 0.000 +Nslow ( 15 ) = 0.000 +Npass ( 15 ) = 0.000 +xnsoilmin ( 15 ) = 1000.000 + +Nleaf ( 16 ) = 0.000 +Nwood ( 16 ) = 0.000 +Nfroot ( 16 ) = 0.000 +Nmet ( 16 ) = 0.000 +Nstr ( 16 ) = 0.000 +Ncwd ( 16 ) = 0.000 +Nmic ( 16 ) = 0.000 +Nslow ( 16 ) = 0.000 +Npass ( 16 ) = 0.000 +xnsoilmin ( 16 ) = 1000.000 + +Nleaf ( 17 ) = 0.000 +Nwood ( 17 ) = 0.000 +Nfroot ( 17 ) = 0.000 +Nmet ( 17 ) = 0.000 +Nstr ( 17 ) = 0.000 +Ncwd ( 17 ) = 0.000 +Nmic ( 17 ) = 0.000 +Nslow ( 17 ) = 0.000 +Npass ( 17 ) = 0.000 +xnsoilmin ( 17 ) = 1000.000 + + ! Tranche 8 + !=============================================================== +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 1, 1 ) = 0.500 +casabiome%ftransPPtoL ( 1, 2 ) = 0.950 +casabiome%ftransPPtoL ( 1, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 2, 1 ) = 0.500 +casabiome%ftransPPtoL ( 2, 2 ) = 0.950 +casabiome%ftransPPtoL ( 2, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 3, 1 ) = 0.500 +casabiome%ftransPPtoL ( 3, 2 ) = 0.950 +casabiome%ftransPPtoL ( 3, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 4, 1 ) = 0.500 +casabiome%ftransPPtoL ( 4, 2 ) = 0.950 +casabiome%ftransPPtoL ( 4, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 5, 1 ) = 0.500 +casabiome%ftransPPtoL ( 5, 2 ) = 0.950 +casabiome%ftransPPtoL ( 5, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 6, 1 ) = 0.500 +casabiome%ftransPPtoL ( 6, 2 ) = 0.950 +casabiome%ftransPPtoL ( 6, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 7, 1 ) = 0.500 +casabiome%ftransPPtoL ( 7, 2 ) = 0.950 +casabiome%ftransPPtoL ( 7, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 8, 1 ) = 0.500 +casabiome%ftransPPtoL ( 8, 2 ) = 0.950 +casabiome%ftransPPtoL ( 8, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 9, 1 ) = 0.500 +casabiome%ftransPPtoL ( 9, 2 ) = 0.950 +casabiome%ftransPPtoL ( 9, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 10, 1 ) = 0.500 +casabiome%ftransPPtoL ( 10, 2 ) = 0.950 +casabiome%ftransPPtoL ( 10, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 11, 1 ) = 0.500 +casabiome%ftransPPtoL ( 11, 2 ) = 0.950 +casabiome%ftransPPtoL ( 11, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 12, 1 ) = 0.500 +casabiome%ftransPPtoL ( 12, 2 ) = 0.950 +casabiome%ftransPPtoL ( 12, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 13, 1 ) = 0.500 +casabiome%ftransPPtoL ( 13, 2 ) = 0.950 +casabiome%ftransPPtoL ( 13, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 14, 1 ) = 0.500 +casabiome%ftransPPtoL ( 14, 2 ) = 0.950 +casabiome%ftransPPtoL ( 14, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 15, 1 ) = 0.500 +casabiome%ftransPPtoL ( 15, 2 ) = 0.950 +casabiome%ftransPPtoL ( 15, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 16, 1 ) = 0.500 +casabiome%ftransPPtoL ( 16, 2 ) = 0.950 +casabiome%ftransPPtoL ( 16, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 17, 1 ) = 0.500 +casabiome%ftransPPtoL ( 17, 2 ) = 0.950 +casabiome%ftransPPtoL ( 17, 3 ) = 0.900 + + ! Tranche 9 + !=============================================================== +xkmlabp ( 1 ) = 74.541 +xpsorbmax ( 1 ) = 745.408 +xfPleach ( 1 ) = 0.001 +ratioNPsoil ( 1, 1 ) = 4.000 +ratioNPsoil ( 1, 2 ) = 5.000 +ratioNPsoil ( 1, 3 ) = 5.000 +xxkplab ( 1 ) = 0.001 +xxkpsorb ( 1 ) = 0.000 +xxkpocc ( 1 ) = 0.000 + +xkmlabp ( 2 ) = 68.158 +xpsorbmax ( 2 ) = 788.082 +xfPleach ( 2 ) = 0.001 +ratioNPsoil ( 2, 1 ) = 4.000 +ratioNPsoil ( 2, 2 ) = 5.000 +ratioNPsoil ( 2, 3 ) = 5.000 +xxkplab ( 2 ) = 0.001 +xxkpsorb ( 2 ) = 0.000 +xxkpocc ( 2 ) = 0.000 + +xkmlabp ( 3 ) = 77.952 +xpsorbmax ( 3 ) = 1110.816 +xfPleach ( 3 ) = 0.001 +ratioNPsoil ( 3, 1 ) = 4.000 +ratioNPsoil ( 3, 2 ) = 5.000 +ratioNPsoil ( 3, 3 ) = 5.000 +xxkplab ( 3 ) = 0.001 +xxkpsorb ( 3 ) = 0.000 +xxkpocc ( 3 ) = 0.000 + +xkmlabp ( 4 ) = 64.419 +xpsorbmax ( 4 ) = 744.847 +xfPleach ( 4 ) = 0.001 +ratioNPsoil ( 4, 1 ) = 4.000 +ratioNPsoil ( 4, 2 ) = 15.000 +ratioNPsoil ( 4, 3 ) = 15.000 +xxkplab ( 4 ) = 0.001 +xxkpsorb ( 4 ) = 0.000 +xxkpocc ( 4 ) = 0.000 + +xkmlabp ( 5 ) = 64.419 +xpsorbmax ( 5 ) = 744.847 +xfPleach ( 5 ) = 0.001 +ratioNPsoil ( 5, 1 ) = 4.000 +ratioNPsoil ( 5, 2 ) = 5.000 +ratioNPsoil ( 5, 3 ) = 5.000 +xxkplab ( 5 ) = 0.001 +xxkpsorb ( 5 ) = 0.000 +xxkpocc ( 5 ) = 0.000 + +xkmlabp ( 6 ) = 70.586 +xpsorbmax ( 6 ) = 816.146 +xfPleach ( 6 ) = 0.001 +ratioNPsoil ( 6, 1 ) = 4.000 +ratioNPsoil ( 6, 2 ) = 5.000 +ratioNPsoil ( 6, 3 ) = 5.000 +xxkplab ( 6 ) = 0.001 +xxkpsorb ( 6 ) = 0.000 +xxkpocc ( 6 ) = 0.000 + +xkmlabp ( 7 ) = 64.589 +xpsorbmax ( 7 ) = 746.808 +xfPleach ( 7 ) = 0.001 +ratioNPsoil ( 7, 1 ) = 4.000 +ratioNPsoil ( 7, 2 ) = 5.000 +ratioNPsoil ( 7, 3 ) = 5.000 +xxkplab ( 7 ) = 0.001 +xxkpsorb ( 7 ) = 0.000 +xxkpocc ( 7 ) = 0.000 + +xkmlabp ( 8 ) = 54.169 +xpsorbmax ( 8 ) = 722.256 +xfPleach ( 8 ) = 0.001 +ratioNPsoil ( 8, 1 ) = 4.000 +ratioNPsoil ( 8, 2 ) = 5.000 +ratioNPsoil ( 8, 3 ) = 5.000 +xxkplab ( 8 ) = 0.001 +xxkpsorb ( 8 ) = 0.000 +xxkpocc ( 8 ) = 0.000 + +xkmlabp ( 9 ) = 9.770 +xpsorbmax ( 9 ) = 293.112 +xfPleach ( 9 ) = 0.001 +ratioNPsoil ( 9, 1 ) = 4.000 +ratioNPsoil ( 9, 2 ) = 7.000 +ratioNPsoil ( 9, 3 ) = 7.000 +xxkplab ( 9 ) = 0.001 +xxkpsorb ( 9 ) = 0.000 +xxkpocc ( 9 ) = 0.000 + +xkmlabp ( 10 ) = 28.290 +xpsorbmax ( 10 ) = 311.190 +xfPleach ( 10 ) = 0.001 +ratioNPsoil ( 10, 1 ) = 4.000 +ratioNPsoil ( 10, 2 ) = 7.000 +ratioNPsoil ( 10, 3 ) = 7.000 +xxkplab ( 10 ) = 0.001 +xxkpsorb ( 10 ) = 0.000 +xxkpocc ( 10 ) = 0.000 + +xkmlabp ( 11 ) = 63.963 +xpsorbmax ( 11 ) = 373.118 +xfPleach ( 11 ) = 0.001 +ratioNPsoil ( 11, 1 ) = 4.000 +ratioNPsoil ( 11, 2 ) = 7.000 +ratioNPsoil ( 11, 3 ) = 7.000 +xxkplab ( 11 ) = 0.001 +xxkpsorb ( 11 ) = 0.000 +xxkpocc ( 11 ) = 0.000 + +xkmlabp ( 12 ) = 32.402 +xpsorbmax ( 12 ) = 615.638 +xfPleach ( 12 ) = 0.001 +ratioNPsoil ( 12, 1 ) = 4.000 +ratioNPsoil ( 12, 2 ) = 7.000 +ratioNPsoil ( 12, 3 ) = 7.000 +xxkplab ( 12 ) = 0.001 +xxkpsorb ( 12 ) = 0.000 +xxkpocc ( 12 ) = 0.000 + + ! Tranche 10 + !=============================================================== +xpleaf ( 1 ) = 0.192 +xpwood ( 1 ) = 0.954 +xpfroot ( 1 ) = 0.077 +xpmet ( 1 ) = 0.004 +xpstr ( 1 ) = 0.070 +xpcwd ( 1 ) = 0.101 +xpmic ( 1 ) = 6.873 +xpslow ( 1 ) = 119.565 +xppass ( 1 ) = 38.353 +xplab ( 1 ) = 26.737 +xpsorb ( 1 ) = 126.730 +xpocc ( 1 ) = 138.571 + +xpleaf ( 2 ) = 0.415 +xpwood ( 2 ) = 5.880 +xpfroot ( 2 ) = 1.950 +xpmet ( 2 ) = 0.030 +xpstr ( 2 ) = 0.145 +xpcwd ( 2 ) = 0.192 +xpmic ( 2 ) = 0.148 +xpslow ( 2 ) = 2.702 +xppass ( 2 ) = 114.416 +xplab ( 2 ) = 19.947 +xpsorb ( 2 ) = 92.263 +xpocc ( 2 ) = 120.374 + +xpleaf ( 3 ) = 0.116 +xpwood ( 3 ) = 0.644 +xpfroot ( 3 ) = 0.081 +xpmet ( 3 ) = 0.005 +xpstr ( 3 ) = 0.093 +xpcwd ( 3 ) = 0.129 +xpmic ( 3 ) = 7.762 +xpslow ( 3 ) = 139.716 +xppass ( 3 ) = 44.042 +xplab ( 3 ) = 29.107 +xpsorb ( 3 ) = 134.639 +xpocc ( 3 ) = 138.220 + +xpleaf ( 4 ) = 0.135 +xpwood ( 4 ) = 2.425 +xpfroot ( 4 ) = 0.141 +xpmet ( 4 ) = 0.007 +xpstr ( 4 ) = 0.104 +xpcwd ( 4 ) = 0.148 +xpmic ( 4 ) = 5.272 +xpslow ( 4 ) = 96.662 +xppass ( 4 ) = 43.690 +xplab ( 4 ) = 30.509 +xpsorb ( 4 ) = 132.012 +xpocc ( 4 ) = 148.083 + +xpleaf ( 5 ) = 0.023 +xpwood ( 5 ) = 0.000 +xpfroot ( 5 ) = 0.037 +xpmet ( 5 ) = 0.002 +xpstr ( 5 ) = 0.013 +xpcwd ( 5 ) = 0.019 +xpmic ( 5 ) = 2.185 +xpslow ( 5 ) = 38.701 +xppass ( 5 ) = 12.016 +xplab ( 5 ) = 23.206 +xpsorb ( 5 ) = 173.470 +xpocc ( 5 ) = 114.496 + +xpleaf ( 6 ) = 0.151 +xpwood ( 6 ) = 0.000 +xpfroot ( 6 ) = 0.151 +xpmet ( 6 ) = 0.019 +xpstr ( 6 ) = 0.017 +xpcwd ( 6 ) = 0.000 +xpmic ( 6 ) = 5.533 +xpslow ( 6 ) = 49.352 +xppass ( 6 ) = 36.226 +xplab ( 6 ) = 25.538 +xpsorb ( 6 ) = 186.207 +xpocc ( 6 ) = 145.163 + +xpleaf ( 7 ) = 0.151 +xpwood ( 7 ) = 0.000 +xpfroot ( 7 ) = 0.151 +xpmet ( 7 ) = 0.019 +xpstr ( 7 ) = 0.017 +xpcwd ( 7 ) = 0.000 +xpmic ( 7 ) = 5.533 +xpslow ( 7 ) = 49.352 +xppass ( 7 ) = 36.226 +xplab ( 7 ) = 25.538 +xpsorb ( 7 ) = 186.207 +xpocc ( 7 ) = 145.163 + +xpleaf ( 8 ) = 0.151 +xpwood ( 8 ) = 0.000 +xpfroot ( 8 ) = 0.151 +xpmet ( 8 ) = 0.019 +xpstr ( 8 ) = 0.017 +xpcwd ( 8 ) = 0.000 +xpmic ( 8 ) = 5.533 +xpslow ( 8 ) = 49.352 +xppass ( 8 ) = 36.226 +xplab ( 8 ) = 25.538 +xpsorb ( 8 ) = 186.207 +xpocc ( 8 ) = 145.163 + +xpleaf ( 9 ) = 0.151 +xpwood ( 9 ) = 0.000 +xpfroot ( 9 ) = 0.151 +xpmet ( 9 ) = 0.019 +xpstr ( 9 ) = 0.017 +xpcwd ( 9 ) = 0.000 +xpmic ( 9 ) = 6.662 +xpslow ( 9 ) = 59.414 +xppass ( 9 ) = 43.612 +xplab ( 9 ) = 27.729 +xpsorb ( 9 ) = 155.518 +xpocc ( 9 ) = 158.884 + +xpleaf ( 10 ) = 0.151 +xpwood ( 10 ) = 0.000 +xpfroot ( 10 ) = 0.151 +xpmet ( 10 ) = 0.019 +xpstr ( 10 ) = 0.017 +xpcwd ( 10 ) = 0.000 +xpmic ( 10 ) = 6.662 +xpslow ( 10 ) = 59.414 +xppass ( 10 ) = 43.612 +xplab ( 10 ) = 27.729 +xpsorb ( 10 ) = 155.518 +xpocc ( 10 ) = 158.884 + +xpleaf ( 11 ) = 0.000 +xpwood ( 11 ) = 0.000 +xpfroot ( 11 ) = 0.000 +xpmet ( 11 ) = 0.000 +xpstr ( 11 ) = 0.000 +xpcwd ( 11 ) = 0.000 +xpmic ( 11 ) = 0.000 +xpslow ( 11 ) = 0.000 +xppass ( 11 ) = 0.000 +xplab ( 11 ) = 0.000 +xpsorb ( 11 ) = 0.000 +xpocc ( 11 ) = 0.000 + +xpleaf ( 12 ) = 0.000 +xpwood ( 12 ) = 0.000 +xpfroot ( 12 ) = 0.000 +xpmet ( 12 ) = 0.000 +xpstr ( 12 ) = 0.000 +xpcwd ( 12 ) = 0.000 +xpmic ( 12 ) = 0.000 +xpslow ( 12 ) = 0.000 +xppass ( 12 ) = 0.000 +xplab ( 12 ) = 0.000 +xpsorb ( 12 ) = 0.000 +xpocc ( 12 ) = 0.000 + +xpleaf ( 13 ) = 0.000 +xpwood ( 13 ) = 0.000 +xpfroot ( 13 ) = 0.000 +xpmet ( 13 ) = 0.000 +xpstr ( 13 ) = 0.000 +xpcwd ( 13 ) = 0.000 +xpmic ( 13 ) = 0.000 +xpslow ( 13 ) = 0.000 +xppass ( 13 ) = 0.000 +xplab ( 13 ) = 0.000 +xpsorb ( 13 ) = 0.000 +xpocc ( 13 ) = 0.000 + +xpleaf ( 14 ) = 0.007 +xpwood ( 14 ) = 0.000 +xpfroot ( 14 ) = 0.009 +xpmet ( 14 ) = 0.001 +xpstr ( 14 ) = 0.002 +xpcwd ( 14 ) = 0.000 +xpmic ( 14 ) = 0.751 +xpslow ( 14 ) = 11.484 +xppass ( 14 ) = 4.482 +xplab ( 14 ) = 21.038 +xpsorb ( 14 ) = 255.790 +xpocc ( 14 ) = 108.897 + +xpleaf ( 15 ) = 0.000 +xpwood ( 15 ) = 0.000 +xpfroot ( 15 ) = 0.000 +xpmet ( 15 ) = 0.000 +xpstr ( 15 ) = 0.000 +xpcwd ( 15 ) = 0.000 +xpmic ( 15 ) = 0.000 +xpslow ( 15 ) = 0.000 +xppass ( 15 ) = 0.000 +xplab ( 15 ) = 0.000 +xpsorb ( 15 ) = 0.000 +xpocc ( 15 ) = 0.000 + +xpleaf ( 16 ) = 0.000 +xpwood ( 16 ) = 0.000 +xpfroot ( 16 ) = 0.000 +xpmet ( 16 ) = 0.000 +xpstr ( 16 ) = 0.000 +xpcwd ( 16 ) = 0.000 +xpmic ( 16 ) = 0.000 +xpslow ( 16 ) = 0.000 +xppass ( 16 ) = 0.000 +xplab ( 16 ) = 0.000 +xpsorb ( 16 ) = 0.000 +xpocc ( 16 ) = 0.000 + +xpleaf ( 17 ) = 0.000 +xpwood ( 17 ) = 0.000 +xpfroot ( 17 ) = 0.000 +xpmet ( 17 ) = 0.000 +xpstr ( 17 ) = 0.000 +xpcwd ( 17 ) = 0.000 +xpmic ( 17 ) = 0.000 +xpslow ( 17 ) = 0.000 +xppass ( 17 ) = 0.000 +xplab ( 17 ) = 0.103 +xpsorb ( 17 ) = 1.176 +xpocc ( 17 ) = 0.688 + + ! Tranche 11 + !=============================================================== +xxnpmax ( 1 ) = 1.511 +xq10soil ( 1 ) = 1.720 +xxkoptlitter ( 1 ) = 0.400 +xxkoptsoil ( 1 ) = 0.330 +xprodptase ( 1 ) = 0.500 +xcostnpup ( 1 ) = 40.000 +xmaxfinelitter ( 1 ) = 1524.000 +xmaxcwd ( 1 ) = 1795.000 +xnintercept ( 1 ) = 6.320 +xnslope ( 1 ) = 18.150 + +xxnpmax ( 2 ) = 1.279 +xq10soil ( 2 ) = 1.720 +xxkoptlitter ( 2 ) = 0.400 +xxkoptsoil ( 2 ) = 0.600 +xprodptase ( 2 ) = 0.200 +xcostnpup ( 2 ) = 25.000 +xmaxfinelitter ( 2 ) = 384.000 +xmaxcwd ( 2 ) = 613.000 +xnintercept ( 2 ) = 4.190 +xnslope ( 2 ) = 26.190 + +xxnpmax ( 3 ) = 1.591 +xq10soil ( 3 ) = 1.720 +xxkoptlitter ( 3 ) = 0.400 +xxkoptsoil ( 3 ) = 0.150 +xprodptase ( 3 ) = 0.500 +xcostnpup ( 3 ) = 40.000 +xmaxfinelitter ( 3 ) = 1527.000 +xmaxcwd ( 3 ) = 1918.000 +xnintercept ( 3 ) = 6.320 +xnslope ( 3 ) = 18.150 + +xxnpmax ( 4 ) = 1.186 +xq10soil ( 4 ) = 1.720 +xxkoptlitter ( 4 ) = 0.400 +xxkoptsoil ( 4 ) = 0.600 +xprodptase ( 4 ) = 0.500 +xcostnpup ( 4 ) = 40.000 +xmaxfinelitter ( 4 ) = 887.000 +xmaxcwd ( 4 ) = 1164.000 +xnintercept ( 4 ) = 5.730 +xnslope ( 4 ) = 29.810 + +xxnpmax ( 5 ) = 1.358 +xq10soil ( 5 ) = 1.720 +xxkoptlitter ( 5 ) = 0.400 +xxkoptsoil ( 5 ) = 0.160 +xprodptase ( 5 ) = 0.500 +xcostnpup ( 5 ) = 40.000 +xmaxfinelitter ( 5 ) = 157.000 +xmaxcwd ( 5 ) = 107.000 +xnintercept ( 5 ) = 14.710 +xnslope ( 5 ) = 23.150 + +xxnpmax ( 6 ) = 1.456 +xq10soil ( 6 ) = 1.720 +xxkoptlitter ( 6 ) = 0.400 +xxkoptsoil ( 6 ) = 0.400 +xprodptase ( 6 ) = 0.500 +xcostnpup ( 6 ) = 40.000 +xmaxfinelitter ( 6 ) = 361.000 +xmaxcwd ( 6 ) = 420.000 +xnintercept ( 6 ) = 6.420 +xnslope ( 6 ) = 40.960 + +xxnpmax ( 7 ) = 1.456 +xq10soil ( 7 ) = 1.720 +xxkoptlitter ( 7 ) = 0.400 +xxkoptsoil ( 7 ) = 0.300 +xprodptase ( 7 ) = 0.500 +xcostnpup ( 7 ) = 40.000 +xmaxfinelitter ( 7 ) = 225.000 +xmaxcwd ( 7 ) = 228.000 +xnintercept ( 7 ) = 2.000 +xnslope ( 7 ) = 8.000 + +xxnpmax ( 8 ) = 1.456 +xq10soil ( 8 ) = 1.720 +xxkoptlitter ( 8 ) = 0.400 +xxkoptsoil ( 8 ) = 0.200 +xprodptase ( 8 ) = 0.500 +xcostnpup ( 8 ) = 40.000 +xmaxfinelitter ( 8 ) = 913.000 +xmaxcwd ( 8 ) = 573.000 +xnintercept ( 8 ) = 14.710 +xnslope ( 8 ) = 23.150 + +xxnpmax ( 9 ) = 1.210 +xq10soil ( 9 ) = 1.720 +xxkoptlitter ( 9 ) = 0.400 +xxkoptsoil ( 9 ) = 0.200 +xprodptase ( 9 ) = 0.500 +xcostnpup ( 9 ) = 40.000 +xmaxfinelitter ( 9 ) = 660.000 +xmaxcwd ( 9 ) = 811.000 +xnintercept ( 9 ) = 4.710 +xnslope ( 9 ) = 59.230 + +xxnpmax ( 10 ) = 1.210 +xq10soil ( 10 ) = 1.720 +xxkoptlitter ( 10 ) = 0.400 +xxkoptsoil ( 10 ) = 0.250 +xprodptase ( 10 ) = 0.500 +xcostnpup ( 10 ) = 40.000 +xmaxfinelitter ( 10 ) = 100.000 +xmaxcwd ( 10 ) = 100.000 +xnintercept ( 10 ) = 14.710 +xnslope ( 10 ) = 23.150 + +xxnpmax ( 11 ) = 1.456 +xq10soil ( 11 ) = 1.720 +xxkoptlitter ( 11 ) = 0.400 +xxkoptsoil ( 11 ) = 1.000 +xprodptase ( 11 ) = 0.500 +xcostnpup ( 11 ) = 40.000 +xmaxfinelitter ( 11 ) = 100.000 +xmaxcwd ( 11 ) = 100.000 +xnintercept ( 11 ) = 14.710 +xnslope ( 11 ) = 23.150 + +xxnpmax ( 12 ) = 1.366 +xq10soil ( 12 ) = 1.720 +xxkoptlitter ( 12 ) = 0.400 +xxkoptsoil ( 12 ) = 0.650 +xprodptase ( 12 ) = 4.000 +xcostnpup ( 12 ) = 40.000 +xmaxfinelitter ( 12 ) = 100.000 +xmaxcwd ( 12 ) = 100.000 +xnintercept ( 12 ) = 7.000 +xnslope ( 12 ) = 10.000 + +xxnpmax ( 13 ) = 1.210 +xq10soil ( 13 ) = 1.720 +xxkoptlitter ( 13 ) = 0.400 +xxkoptsoil ( 13 ) = 0.500 +xprodptase ( 13 ) = 0.500 +xcostnpup ( 13 ) = 40.000 +xmaxfinelitter ( 13 ) = 100.000 +xmaxcwd ( 13 ) = 100.000 +xnintercept ( 13 ) = 14.710 +xnslope ( 13 ) = 23.150 + +xxnpmax ( 14 ) = 1.000 +xq10soil ( 14 ) = 1.720 +xxkoptlitter ( 14 ) = 0.400 +xxkoptsoil ( 14 ) = 2.000 +xprodptase ( 14 ) = 0.500 +xcostnpup ( 14 ) = 40.000 +xmaxfinelitter ( 14 ) = 83.000 +xmaxcwd ( 14 ) = 23.000 +xnintercept ( 14 ) = 14.710 +xnslope ( 14 ) = 23.150 + +xxnpmax ( 15 ) = 1.400 +xq10soil ( 15 ) = 1.720 +xxkoptlitter ( 15 ) = 0.400 +xxkoptsoil ( 15 ) = 0.500 +xprodptase ( 15 ) = 0.500 +xcostnpup ( 15 ) = 40.000 +xmaxfinelitter ( 15 ) = 100.000 +xmaxcwd ( 15 ) = 100.000 +xnintercept ( 15 ) = 14.710 +xnslope ( 15 ) = 23.150 + +xxnpmax ( 16 ) = 1.000 +xq10soil ( 16 ) = 1.720 +xxkoptlitter ( 16 ) = 0.400 +xxkoptsoil ( 16 ) = 1.000 +xprodptase ( 16 ) = 0.500 +xcostnpup ( 16 ) = 40.000 +xmaxfinelitter ( 16 ) = 100.000 +xmaxcwd ( 16 ) = 100.000 +xnintercept ( 16 ) = 14.710 +xnslope ( 16 ) = 23.150 + +xxnpmax ( 17 ) = 1.000 +xq10soil ( 17 ) = 1.720 +xxkoptlitter ( 17 ) = 0.400 +xxkoptsoil ( 17 ) = 1.000 +xprodptase ( 17 ) = 0.500 +xcostnpup ( 17 ) = 40.000 +xmaxfinelitter ( 17 ) = 100.000 +xmaxcwd ( 17 ) = 100.000 +xnintercept ( 17 ) = 14.710 +xnslope ( 17 ) = 23.150 + + + + + + + DO nv=1,ntiles + casabiome%ratioPcplantmin(nv,leaf) = 1.0/(xratioNPleafmax*ratioCNplant(nv,leaf)) + casabiome%ratioPcplantmax(nv,leaf) = 1.0/(xratioNPleafmin*ratioCNplant(nv,leaf)) + casabiome%ratioPcplantmin(nv,wood) = 1.0/(xratioNPwoodmax*ratioCNplant(nv,wood)) + casabiome%ratioPcplantmax(nv,wood) = 1.0/(xratioNPwoodmin*ratioCNplant(nv,wood)) + casabiome%ratioPcplantmin(nv,froot) = 1.0/(xratioNPfrootmax*ratioCNplant(nv,froot)) + casabiome%ratioPcplantmax(nv,froot) = 1.0/(xratioNPfrootmin*ratioCNplant(nv,froot)) + + + casabiome%ratioNPplantmin(nv,leaf) = xratioNPleafmin + casabiome%ratioNPplantmax(nv,leaf) = xratioNPleafmax + casabiome%ratioNPplantmin(nv,wood) = xratioNPwoodmin + casabiome%ratioNPplantmax(nv,wood) = xratioNPwoodmax + casabiome%ratioNPplantmin(nv,froot) = xratioNPfrootmin + casabiome%ratioNPplantmax(nv,froot) = xratioNPfrootmax + + ENDDO + + fracroot = 0.0 + depthsoila = 0.0 + depthsoilb = 0.0 + DO ns=1, nsl + depthsoilb(ns) = depthsoilb(ns) + soil_zse(ns) + IF (ns==1) THEN + depthsoila(ns) = 0.0 + ELSE + depthsoila(ns) = depthsoilb(ns-1) + ENDIF + ENDDO + + DO nv=1,ntiles + casabiome%sla(nv) = slax(nv) + casabiome%fraclabile(nv,leaf) = deltcasa*0.6 !1/day + casabiome%fraclabile(nv,froot)= deltcasa*0.4 !1/day + casabiome%fraclabile(nv,wood) = deltcasa*0.0 + casabiome%plantrate(nv,leaf) = deltcasa/(leafage(nv)*(1.0-xfherbivore(nv))) + casabiome%plantrate(nv,froot) = deltcasa/frootage(nv) + casabiome%plantrate(nv,wood) = deltcasa/woodage(nv) + casabiome%litterrate(nv,metb) = deltcasa/metage(nv) + casabiome%litterrate(nv,str) = deltcasa/strage(nv) + casabiome%litterrate(nv,cwd) = deltcasa/cwdage(nv) + casabiome%soilrate(nv,mic) = deltcasa/micage(nv) + casabiome%soilrate(nv,slow) = deltcasa/slowage(nv) + casabiome%soilrate(nv,pass) = deltcasa/passage(nv) + casabiome%xkleafcoldmax(nv) = deltcasa * xxkleafcoldmax(nv) + casabiome%xkleafdrymax(nv) = deltcasa * xxkleafdrymax(nv) + ! casabiome%kuplabp(nv) = xkuplabp(nv) + casabiome%rmplant(nv,:) = casabiome%rmplant(nv,:)*deltcasa + casabiome%kclabrate(nv) = deltcasa/clabileage(nv) + + !@@@@@@@@@@@@@@@@@ + casabiome%xnpmax(nv) = xxnpmax(nv) + casabiome%q10soil(nv) = xq10soil(nv) + casabiome%xkoptlitter(nv) = xxkoptlitter(nv) + casabiome%xkoptsoil(nv) = xxkoptsoil(nv) + casabiome%prodptase(nv) = xprodptase(nv)/365.0 ! convert from yearly to daily + casabiome%costnpup(nv) = xcostnpup(nv) + casabiome%maxfinelitter(nv) = xmaxfinelitter(nv) + casabiome%maxcwd(nv) = xmaxcwd(nv) + casabiome%nintercept(nv) = xnintercept(nv) + casabiome%nslope(nv) = xnslope(nv) + !@@@@@@@@@@@@@@ + ENDDO + + !@@@@@@@@@@@@@@ + DO ns=1,mso + casabiome%xkplab(ns) = xxkplab(ns) + casabiome%xkpsorb(ns) = xxkpsorb(ns) + casabiome%xkpocc(ns) = xxkpocc(ns) + ENDDO + + !@@@@@@@@@@@@@@ + + ! PRINT *, 'casabiome%xkoptsoil = ', casabiome%xkoptsoil(2) + + DO npt = 1, mp + iv1=veg_iveg(npt) + iso=casamet%isorder(npt) + ! The following to be commented out when coupled to CABLE + ! veg%froot(npt,:) =fracroot(iv1,:) + ! PRINT *, 'npt,iv1,iso ', npt,iv1, iso + casamet%iveg2(npt) =casabiome%ivt2(iv1) + casamet%lnonwood(npt) = 1 + casapool%cplant(npt,wood) = 0.0 + casapool%clitter(npt,cwd) = 0.0 + casapool%nplant(npt,wood) = 0.0 + casapool%nlitter(npt,cwd) = 0.0 + casapool%pplant(npt,wood) = 0.0 + casapool%plitter(npt,cwd) = 0.0 + IF (casamet%iveg2(npt)==forest.OR.casamet%iveg2(npt)==shrub) THEN + casamet%lnonwood(npt) = 0 + casapool%cplant(npt,wood) = Cwood(iv1) + casapool%clitter(npt,cwd) = ccwd(iv1) + casapool%nplant(npt,wood) = nwood(iv1) + casapool%nlitter(npt,cwd) = ncwd(iv1) + casapool%pplant(npt,wood) = xpwood(iv1) + casapool%plitter(npt,cwd) = xpcwd(iv1) + !! vh_js !! + IF (cable_user%CALL_POP) THEN ! initialise very small wood pool, so POP can start from zero. + casapool%cplant(npt,wood) = 0.01 + casapool%nplant(npt,wood)= casabiome%ratioNCplantmin(iv1,wood)* casapool%cplant(npt,wood) + casapool%pplant(npt,wood)= casabiome%ratioPCplantmin(iv1,wood)* casapool%cplant(npt,wood) + ENDIF + !! vh_js + + ENDIF + casapool%cplant(npt,leaf) = cleaf(iv1) + casapool%cplant(npt,froot) = cfroot(iv1) + casapool%clabile(npt) = 0.0 + casapool%clitter(npt,metb) = cmet(iv1) + casapool%clitter(npt,str) = cstr(iv1) + casapool%csoil(npt,mic) = cmic(iv1) + casapool%csoil(npt,slow) = cslow(iv1) + casapool%csoil(npt,pass) = cpass(iv1) + IF (icycle==1) THEN + casapool%ratioNCplant(npt,:) = 1.0/ratioCNplant(iv1,:) + ENDIF + + ! initializing glai in case not reading pool file (eg. during spin) + casamet%glai(npt) = MAX(casabiome%glaimin(iv1), & + casabiome%sla(iv1) * casapool%cplant(npt,leaf)) + + casaflux%fNminloss(npt) = xfNminloss(iv1) + ! comment out by ypw 12/07/2009 + casaflux%fNminleach(npt) = 10.0*xfNminleach(iv1) * deltcasa + ! casaflux%fNminleach(npt) = xfNminleach(iv1) + casapool%nplant(npt,leaf) = nleaf(iv1) + casapool%nplant(npt,froot)= nfroot(iv1) + casapool%nlitter(npt,metb) = nmet(iv1) + ! casapool%nlitter(npt,str) = nstr(iv1) + casapool%nlitter(npt,str) = cstr(iv1)*ratioNCstrfix + casapool%nsoil(npt,mic) = nmic(iv1) + casapool%nsoil(npt,slow) = nslow(iv1) + casapool%nsoil(npt,pass) = npass(iv1) + casapool%nsoilmin(npt) = xnsoilmin(iv1) + casapool%pplant(npt,leaf) = xpleaf(iv1) + casapool%pplant(npt,froot)= xpfroot(iv1) + casapool%plitter(npt,metb) = xpmet(iv1) + ! casapool%plitter(npt,str) = xpstr(iv1) + casapool%plitter(npt,str) = casapool%nlitter(npt,str)/ratioNPstrfix + casapool%psoil(npt,mic) = xpmic(iv1) + casapool%psoil(npt,slow) = xpslow(iv1) + casapool%psoil(npt,pass) = xppass(iv1) + casapool%psoillab(npt) = xplab(iv1) + casapool%psoilsorb(npt) = xpsorb(iv1) + casapool%psoilocc(npt) = xpocc(iv1) + casaflux%kmlabp(npt) = xkmlabp(iso) + casaflux%psorbmax(npt) = xpsorbmax(iso) + casaflux%fpleach(npt) = xfPleach(iso) + ! we used the spatially explicit estimate N fixation by Wang and Houlton (GRL) + ! casaflux%Nminfix(npt) = xnfixrate(iv1)/365.0 + + ! use the PFT-specific C:N:P stoichiometry + casapool%ratioNCplant(npt,:) = 1.0/ratioCNplant(iv1,:) + casapool%ratioNPplant(npt,:) = casabiome%ratioNPplantmin(iv1,:) + casapool%ratioPCplant(npt,:) = 1.0/(ratioCNplant(iv1,:) *casabiome%ratioNPplantmin(iv1,:) ) + + casapool%ratioNClitter(npt,metb) = casapool%ratioNCplant(npt,leaf) * casabiome%ftransNPtoL(iv1,leaf) + casapool%ratioNClitter(npt,str) = casapool%ratioNCplant(npt,froot) * casabiome%ftransNPtoL(iv1,froot) + casapool%ratioNClitter(npt,cwd) = casapool%ratioNCplant(npt,wood) * casabiome%ftransNPtoL(iv1,wood) + + casapool%ratioPClitter(npt,metb) = casapool%ratioPCplant(npt,leaf) * casabiome%ftransPPtoL(iv1,leaf) + casapool%ratioPClitter(npt,str) = casapool%ratioPCplant(npt,froot) * casabiome%ftransPPtoL(iv1,froot) + casapool%ratioPClitter(npt,cwd) = casapool%ratioPCplant(npt,wood) * casabiome%ftransPPtoL(iv1,wood) + + casapool%ratioNPlitter(npt,metb) = casapool%ratioNClitter(npt,metb)/(casapool%ratioPClitter(npt,metb) +1.0e-10) + casapool%ratioNPlitter(npt,str) = casapool%ratioNClitter(npt,str)/(casapool%ratioPClitter(npt,str) +1.0e-10) + casapool%ratioNPlitter(npt,cwd) = casapool%ratioNClitter(npt,cwd)/(casapool%ratioPClitter(npt,cwd) +1.0e-10) + + casapool%ratioNCsoil(npt,:) = 1.0/ratioCNsoil(iv1,:) + casapool%ratioNPsoil(npt,:) = ratioNPsoil(iso,:) + casapool%ratioPCsoil(npt,:) = 1.0/(ratioCNsoil(iv1,:)*ratioNPsoil(iso,:)) + + casapool%ratioNCsoilmin(npt,:) = 1.0/ratioCNsoilmax(iv1,:) + casapool%ratioNCsoilmax(npt,:) = 1.0/ratioCNsoilmin(iv1,:) + casapool%ratioNCsoilnew(npt,:) = casapool%ratioNCsoilmax(npt,:) + ENDDO + + IF(icycle<2) THEN + casapool%Nplant(:,:) = casapool%Cplant(:,:) * casapool%ratioNCplant(:,:) + casapool%Nlitter(:,:) = casapool%Clitter(:,:) * casapool%ratioNClitter(:,:) + casapool%Nsoil(:,:) = casapool%Csoil(:,:) * casapool%ratioNCsoil(:,:) + ENDIF + IF(icycle<3) THEN + casapool%Pplant(:,:) = casapool%Cplant(:,:) * casapool%ratioPCplant(:,:) + casapool%Plitter(:,:) = casapool%Clitter(:,:) * casapool%ratioPClitter(:,:) + casapool%Psoil(:,:) = casapool%Csoil(:,:) * casapool%ratioPCsoil(:,:) + casapool%Psoilsorb(:) = casaflux%psorbmax(:) * casapool%psoillab(:) & + /(casaflux%kmlabp(:)+casapool%psoillab(:)) + ENDIF + +RETURN +END SUBROUTINE casa_readbiome + +END MODULE casa_readbiome_module diff --git a/src/coupled/AM3/control/casa/types/casa_variable.F90 b/src/coupled/AM3/control/casa/types/casa_variable.F90 new file mode 100644 index 000000000..f6aad2c97 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_variable.F90 @@ -0,0 +1,157 @@ +MODULE casavariable + +!legacy - USE all the other MODULES here +! data declarations +USE casa_biome_type_mod, ONLY: casa_biome_data_type, & + casa_biome => casa_biome_type +USE casa_pool_type_mod, ONLY: casa_pool_data_type, & + casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux_data_type, & + casa_flux => casa_flux_type +USE casa_met_type_mod, ONLY: casa_met_data_type, & + casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_bal_data_type, & + casa_bal => casa_bal_type +USE phenology_type_mod, ONLY: phenology_data_type, & + phenology_type +IMPLICIT NONE + +PUBLIC :: zero_sum_casa +PUBLIC :: update_sum_casa +PUBLIC :: alloc_casavariable + +CONTAINS + +SUBROUTINE alloc_casavariable( casabiome, casabiome_data, & + casapool, casapool_data, & + casaflux, casaflux_data, & + casamet, casamet_data, & + casabal, casabal_data, & + sum_casapool, sum_casapool_data, & + sum_casaflux, sum_casaflux_data, & + phen, phen_data, mp ) + +! subrs +USE casa_biome_type_mod, ONLY: zero_casa_biome_data_type +USE casa_biome_type_mod, ONLY: assoc_casa_biome_type + +USE casa_pool_type_mod, ONLY: alloc_casa_pool_data_type +USE casa_pool_type_mod, ONLY: assoc_casa_pool_type +USE casa_pool_type_mod, ONLY: zero_casa_pool_data_type + +USE casa_flux_type_mod, ONLY: alloc_casa_flux_data_type +USE casa_flux_type_mod, ONLY: zero_casa_flux_data_type +USE casa_flux_type_mod, ONLY: assoc_casa_flux_type + +USE casa_met_type_mod, ONLY: alloc_casa_met_data_type +USE casa_met_type_mod, ONLY: assoc_casa_met_type +USE casa_met_type_mod, ONLY: zero_casa_met_data_type + +USE sum_casa_pool_type_mod, ONLY: alloc_sum_casa_pool_data_type +USE sum_casa_pool_type_mod, ONLY: assoc_sum_casa_pool_type + +USE sum_casa_flux_type_mod, ONLY: alloc_sum_casa_flux_data_type +USE sum_casa_flux_type_mod, ONLY: assoc_sum_casa_flux_type + +USE casa_balance_type_mod, ONLY: alloc_casa_bal_data_type +USE casa_balance_type_mod, ONLY: zero_casa_bal_data_type +USE casa_balance_type_mod, ONLY: assoc_casa_bal_type + +USE phenology_type_mod, ONLY: alloc_phenology_data_type +USE phenology_type_mod, ONLY: zero_phenology_data_type +USE phenology_type_mod, ONLY: assoc_phenology_type + +IMPLICIT NONE + +TYPE (casa_biome), INTENT(INOUT) :: casabiome +TYPE (casa_biome_data_type), INTENT(INOUT) :: casabiome_data +TYPE (casa_pool), INTENT(INOUT) :: casapool +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +TYPE (casa_flux), INTENT(INOUT) :: casaflux +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data +TYPE (casa_pool), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data +TYPE (casa_flux), INTENT(INOUT) :: sum_casaflux +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data +TYPE (casa_bal), INTENT(INOUT) :: casabal +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data +TYPE (casa_met), INTENT(INOUT) :: casamet +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data +TYPE (phenology_type), INTENT(INOUT) :: phen +TYPE (phenology_data_type), INTENT(INOUT) :: phen_data + +INTEGER, INTENT(INOUT) :: mp + +CALL zero_casa_biome_data_type( casabiome_data ) +! allocating as 1s can also be done here following cable types, given lsm_id=casa +CALL alloc_casa_pool_data_type( casapool_data, mp ) +CALL zero_casa_pool_data_type( casapool_data ) + +CALL alloc_casa_flux_data_type( casaflux_data, mp ) +CALL zero_casa_flux_data_type( casaflux_data ) + +CALL alloc_casa_met_data_type( casamet_data, mp ) +CALL zero_casa_met_data_type( casamet_data ) + +CALL alloc_sum_casa_pool_data_type( sum_casapool_data, mp ) + +CALL alloc_sum_casa_flux_data_type( sum_casaflux_data, mp ) + +CALL alloc_casa_bal_data_type( casabal_data, mp ) +CALL zero_casa_bal_data_type( casabal_data ) + +CALL alloc_phenology_data_type( phen_data, mp ) +CALL zero_phenology_data_type( phen_data ) + +!IF ( cable_runtime%um ) THEN + CALL assoc_casa_biome_type( casabiome, casabiome_data ) + CALL assoc_casa_pool_type ( casapool, casapool_data ) + CALL assoc_casa_flux_type ( casaflux, casaflux_data ) + CALL assoc_casa_met_type ( casamet, casamet_data ) + CALL assoc_casa_bal_type ( casabal, casabal_data ) + CALL assoc_sum_casa_pool_type( sum_casapool, sum_casapool_data ) + CALL assoc_sum_casa_flux_type( sum_casaflux, sum_casaflux_data ) + CALL assoc_phenology_type( phen, phen_data ) +!END IF + +RETURN +END SUBROUTINE alloc_casavariable + +SUBROUTINE zero_sum_casa( sum_casapool, sum_casaflux ) + +USE sum_casa_pool_type_mod, ONLY: zero_sum_casa_pool_data +USE sum_casa_flux_type_mod, ONLY: zero_sum_casa_flux_data + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux + +CALL zero_sum_casa_pool_data( sum_casapool ) +CALL zero_sum_casa_flux_data( sum_casaflux ) + +RETURN +END SUBROUTINE zero_sum_casa + +SUBROUTINE update_sum_casa( sum_casapool, sum_casaflux, casapool, casaflux, & + sum_now, average_now, nsteps ) + +USE sum_casa_pool_type_mod, ONLY: update_sum_casa_pool +USE sum_casa_flux_type_mod, ONLY: update_sum_casa_flux + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +TYPE (casa_flux_data_type), INTENT(IN) :: casaflux +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +CALL update_sum_casa_pool( sum_casapool, casapool, sum_now, average_now, nsteps) + +CALL update_sum_casa_flux( sum_casapool, sum_casaflux, casapool, casaflux, & + sum_now, average_now, nsteps ) + +RETURN +END SUBROUTINE update_sum_casa + +END MODULE casavariable diff --git a/src/coupled/AM3/control/casa/types/phen_variable.F90 b/src/coupled/AM3/control/casa/types/phen_variable.F90 new file mode 100644 index 000000000..b5e92ec74 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/phen_variable.F90 @@ -0,0 +1,6 @@ +module phenvariable + + use phenology_type_mod, only: phen_variable => phenology_type,& + alloc_phenvariable => alloc_phenology_data_type + +end module phenvariable diff --git a/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 new file mode 100644 index 000000000..e262d3438 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 @@ -0,0 +1,466 @@ +MODULE sum_casa_flux_type_mod + +IMPLICIT NONE + +PUBLIC :: alloc_sum_casa_flux_data_type +PUBLIC :: assoc_sum_casa_flux_type +PUBLIC :: zero_sum_casa_flux_data +PUBLIC :: update_sum_casa_flux + +CONTAINS + +SUBROUTINE alloc_sum_casa_flux_data_type( sum_casaflux_data, arraysize) + +USE casadimension, ONLY: mplant, mlitter, msoil +USE casa_flux_type_mod, ONLY: casa_flux_data_type + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( sum_casaflux_data % Cgpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crgplant ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminfix ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminuptake ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Plabuptake ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Clabloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fracClabile ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % stemnpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % sapwood_area ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crsoil ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nmindep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nupland ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nlittermin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsmin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsimm ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsnet ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fNminloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fNminleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pdep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pwea ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Ploss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pupland ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Plittermin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psmin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psimm ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psnet ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fPleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kplab ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kpsorb ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kpocc ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kmlabp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psorbmax ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cnep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtoCO2 ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxNtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxPtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxNtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxPtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % CtransferLUC ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % meangpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % meanrleaf ( arraysize ) ) + +ALLOCATE ( sum_casaflux_data % fracCalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % fracNalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % fracPalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % Crmplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % kplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % klitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % ksoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % fromLtoCO2 ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % fromStoCO2 ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxCtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxNtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxPtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxCtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxNtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxPtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % fromPtoL ( arraysize, mlitter, mplant ) ) +ALLOCATE ( sum_casaflux_data % fromLtoS ( arraysize, msoil, mlitter ) ) +ALLOCATE ( sum_casaflux_data % fromStoS ( arraysize, msoil, msoil ) ) + +ALLOCATE ( sum_casaflux_data % Cplant_turnover ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_disturbance ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_crowding ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_resource_limitation( arraysize ) ) + +RETURN +END SUBROUTINE alloc_sum_casa_flux_data_type + +SUBROUTINE assoc_sum_casa_flux_type( sum_casaflux, sum_casaflux_data ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type +USE casa_flux_type_mod, ONLY: casa_flux_type + + IMPLICIT NONE + +TYPE (casa_flux_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_flux_data_type), INTENT(INOUT), TARGET :: sum_casaflux_data + +sum_casaflux % Cgpp => sum_casaflux_data % Cgpp +sum_casaflux % Cnpp => sum_casaflux_data % Cnpp +sum_casaflux % Crp => sum_casaflux_data % Crp +sum_casaflux % Crgplant => sum_casaflux_data % Crgplant +sum_casaflux % Nminfix => sum_casaflux_data % Nminfix +sum_casaflux % Nminuptake => sum_casaflux_data % Nminuptake +sum_casaflux % Plabuptake => sum_casaflux_data % Plabuptake +sum_casaflux % Clabloss => sum_casaflux_data % Clabloss +sum_casaflux % fracClabile => sum_casaflux_data % fracClabile +sum_casaflux % stemnpp => sum_casaflux_data % stemnpp +sum_casaflux % frac_sapwood => sum_casaflux_data % frac_sapwood +sum_casaflux % sapwood_area => sum_casaflux_data % sapwood_area +sum_casaflux % Crsoil => sum_casaflux_data % Crsoil +sum_casaflux % Nmindep => sum_casaflux_data % Nmindep +sum_casaflux % Nminloss => sum_casaflux_data % Nminloss +sum_casaflux % Nminleach => sum_casaflux_data % Nminleach +sum_casaflux % Nupland => sum_casaflux_data % Nupland +sum_casaflux % Nlittermin => sum_casaflux_data % Nlittermin +sum_casaflux % Nsmin => sum_casaflux_data % Nsmin +sum_casaflux % Nsimm => sum_casaflux_data % Nsimm +sum_casaflux % Nsnet => sum_casaflux_data % Nsnet +sum_casaflux % fNminloss => sum_casaflux_data % fNminloss +sum_casaflux % fNminleach => sum_casaflux_data % fNminleach +sum_casaflux % Pdep => sum_casaflux_data % Pdep +sum_casaflux % Pwea => sum_casaflux_data % Pwea +sum_casaflux % Pleach => sum_casaflux_data % Pleach +sum_casaflux % Ploss => sum_casaflux_data % Ploss +sum_casaflux % Pupland => sum_casaflux_data % Pupland +sum_casaflux % Plittermin => sum_casaflux_data % Plittermin +sum_casaflux % Psmin => sum_casaflux_data % Psmin +sum_casaflux % Psimm => sum_casaflux_data % Psimm +sum_casaflux % Psnet => sum_casaflux_data % Psnet +sum_casaflux % fPleach => sum_casaflux_data % fPleach +sum_casaflux % kplab => sum_casaflux_data % kplab +sum_casaflux % kpsorb => sum_casaflux_data % kpsorb +sum_casaflux % kpocc => sum_casaflux_data % kpocc +sum_casaflux % kmlabp => sum_casaflux_data % kmlabp +sum_casaflux % Psorbmax => sum_casaflux_data % Psorbmax +sum_casaflux % Cnep => sum_casaflux_data % Cnep +sum_casaflux % FluxCtoCO2 => sum_casaflux_data % FluxCtoCO2 +sum_casaflux % FluxCtohwp => sum_casaflux_data % FluxCtohwp +sum_casaflux % FluxNtohwp => sum_casaflux_data % FluxNtohwp +sum_casaflux % FluxPtohwp => sum_casaflux_data % FluxPtohwp +sum_casaflux % FluxCtoclear => sum_casaflux_data % FluxCtoclear +sum_casaflux % FluxNtoclear => sum_casaflux_data % FluxNtoclear +sum_casaflux % FluxPtoclear => sum_casaflux_data % FluxPtoclear +sum_casaflux % CtransferLUC => sum_casaflux_data % CtransferLUC +sum_casaflux % meangpp => sum_casaflux_data % meangpp +sum_casaflux % meanrleaf => sum_casaflux_data % meanrleaf + +sum_casaflux % fracCalloc => sum_casaflux_data % fracCalloc +sum_casaflux % fracNalloc => sum_casaflux_data % fracNalloc +sum_casaflux % fracPalloc => sum_casaflux_data % fracPalloc +sum_casaflux % Crmplant => sum_casaflux_data % Crmplant +sum_casaflux % kplant => sum_casaflux_data % kplant +sum_casaflux % klitter => sum_casaflux_data % klitter +sum_casaflux % ksoil => sum_casaflux_data % ksoil +sum_casaflux % fromLtoCO2 => sum_casaflux_data % fromLtoCO2 +sum_casaflux % fromStoCO2 => sum_casaflux_data % fromStoCO2 +sum_casaflux % FluxCtolitter => sum_casaflux_data % FluxCtolitter +sum_casaflux % FluxNtolitter => sum_casaflux_data % FluxNtolitter +sum_casaflux % FluxPtolitter => sum_casaflux_data % FluxPtolitter +sum_casaflux % FluxCtosoil => sum_casaflux_data % FluxCtosoil +sum_casaflux % FluxNtosoil => sum_casaflux_data % FluxNtosoil +sum_casaflux % FluxPtosoil => sum_casaflux_data % FluxPtosoil +sum_casaflux % fromPtoL => sum_casaflux_data % fromPtoL +sum_casaflux % fromLtoS => sum_casaflux_data % fromLtoS +sum_casaflux % fromStoS => sum_casaflux_data % fromStoS + +sum_casaflux % Cplant_turnover => sum_casaflux % Cplant_turnover +sum_casaflux % Cplant_turnover_disturbance => & + sum_casaflux_data % Cplant_turnover_disturbance +sum_casaflux % Cplant_turnover_crowding => & + sum_casaflux_data % Cplant_turnover_crowding +sum_casaflux % Cplant_turnover_resource_limitation => & + sum_casaflux_data % Cplant_turnover_resource_limitation + +RETURN +END SUBROUTINE assoc_sum_casa_flux_type + +SUBROUTINE zero_sum_casa_flux_data( sum_casaflux ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux + +sum_casaflux % Cgpp = 0.0 +sum_casaflux % Cnpp = 0.0 +sum_casaflux % Crp = 0.0 +sum_casaflux % Crgplant = 0.0 +sum_casaflux % Nminfix = 0.0 +sum_casaflux % Nminuptake = 0.0 +sum_casaflux % Plabuptake = 0.0 +sum_casaflux % Clabloss = 0.0 +sum_casaflux % fracClabile = 0.0 +sum_casaflux % stemnpp = 0.0 +sum_casaflux % frac_sapwood = 0.0 +sum_casaflux % sapwood_area = 0.0 +sum_casaflux % Crsoil = 0.0 +sum_casaflux % Nmindep = 0.0 +sum_casaflux % Nminloss = 0.0 +sum_casaflux % Nminleach = 0.0 +sum_casaflux % Nupland = 0.0 +sum_casaflux % Nlittermin = 0.0 +sum_casaflux % Nsmin = 0.0 +sum_casaflux % Nsimm = 0.0 +sum_casaflux % Nsnet = 0.0 +sum_casaflux % fNminloss = 0.0 +sum_casaflux % fNminleach = 0.0 +sum_casaflux % Pdep = 0.0 +sum_casaflux % Pwea = 0.0 +sum_casaflux % Pleach = 0.0 +sum_casaflux % Ploss = 0.0 +sum_casaflux % Pupland = 0.0 +sum_casaflux % Plittermin = 0.0 +sum_casaflux % Psmin = 0.0 +sum_casaflux % Psimm = 0.0 +sum_casaflux % Psnet = 0.0 +sum_casaflux % fPleach = 0.0 +sum_casaflux % kplab = 0.0 +sum_casaflux % kpsorb = 0.0 +sum_casaflux % kpocc = 0.0 +sum_casaflux % kmlabp = 0.0 +sum_casaflux % Psorbmax = 0.0 +sum_casaflux % Cnep = 0.0 +sum_casaflux % FluxCtoCO2 = 0.0 +sum_casaflux % FluxCtohwp = 0.0 +sum_casaflux % FluxNtohwp = 0.0 +sum_casaflux % FluxPtohwp = 0.0 +sum_casaflux % FluxCtoclear = 0.0 +sum_casaflux % FluxNtoclear = 0.0 +sum_casaflux % FluxPtoclear = 0.0 +sum_casaflux % CtransferLUC = 0.0 +sum_casaflux % meangpp = 0.0 +sum_casaflux % meanrleaf = 0.0 + +sum_casaflux % fracCalloc = 0.0 +sum_casaflux % fracNalloc = 0.0 +sum_casaflux % fracPalloc = 0.0 +sum_casaflux % Crmplant = 0.0 +sum_casaflux % kplant = 0.0 +sum_casaflux % klitter = 0.0 +sum_casaflux % ksoil = 0.0 +sum_casaflux % fromLtoCO2 = 0.0 +sum_casaflux % fromStoCO2 = 0.0 +sum_casaflux % FluxCtolitter = 0.0 +sum_casaflux % FluxNtolitter = 0.0 +sum_casaflux % FluxPtolitter = 0.0 +sum_casaflux % FluxCtosoil = 0.0 +sum_casaflux % FluxNtosoil = 0.0 +sum_casaflux % FluxPtosoil = 0.0 +sum_casaflux % fromPtoL = 0.0 +sum_casaflux % fromLtoS = 0.0 +sum_casaflux % fromStoS = 0.0 + +sum_casaflux % Cplant_turnover = 0.0 +sum_casaflux % Cplant_turnover_disturbance = 0.0 +sum_casaflux % Cplant_turnover_crowding = 0.0 +sum_casaflux % Cplant_turnover_resource_limitation = 0.0 + +END SUBROUTINE zero_sum_casa_flux_data + +!jhan:pass individual elements of casapool +!do the calcshere with the pointers to the _data fields +SUBROUTINE update_sum_casa_flux( sum_casapool, sum_casaflux, & + casapool, casaflux, sum_now, average_now, nsteps ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +TYPE (casa_flux_data_type), INTENT(IN) :: casaflux +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +!local vars +INTEGER :: rsteps + +rsteps = REAL(nsteps) + +IF (sum_now) THEN + + sum_casaflux%Cgpp = sum_casaflux%Cgpp + casaflux%Cgpp + sum_casaflux%Cnpp = sum_casaflux%Cnpp + casaflux%Cnpp + sum_casaflux%Crp = sum_casaflux%Crp + casaflux%Crp + sum_casaflux%Crgplant = sum_casaflux%Crgplant + casaflux%Crgplant + sum_casaflux%Nminfix = sum_casaflux%Nminfix + casaflux%Nminfix + sum_casaflux%Nminuptake = sum_casaflux%Nminuptake + casaflux%Nminuptake + sum_casaflux%Plabuptake = sum_casaflux%Plabuptake + casaflux%Plabuptake + sum_casaflux%Clabloss = sum_casaflux%Clabloss + casaflux%Clabloss + sum_casaflux%fracClabile = sum_casaflux%fracClabile + casaflux%fracClabile + + sum_casaflux%fracCalloc = sum_casaflux%fracCalloc + & + ( casaflux%fracCalloc * casapool%cplant ) + sum_casaflux%fracNalloc = sum_casaflux%fracNalloc + casaflux%fracNalloc + sum_casaflux%fracPalloc = sum_casaflux%fracPalloc + casaflux%fracPalloc + + sum_casaflux%kplant = sum_casaflux%kplant + & + ( casaflux%kplant * casapool%cplant ) + + sum_casaflux%Crmplant = sum_casaflux%Crmplant + casaflux%Crmplant + sum_casaflux%fromPtoL = sum_casaflux%fromPtoL + casaflux%fromPtoL + sum_casaflux%Cnep = sum_casaflux%Cnep + casaflux%Cnep + sum_casaflux%Crsoil = sum_casaflux%Crsoil + casaflux%Crsoil + sum_casaflux%Nmindep = sum_casaflux%Nmindep + casaflux%Nmindep + sum_casaflux%Nminloss = sum_casaflux%Nminloss + casaflux%Nminloss + sum_casaflux%Nminleach = sum_casaflux%Nminleach + casaflux%Nminleach + sum_casaflux%Nupland = sum_casaflux%Nupland + casaflux%Nupland + sum_casaflux%Nlittermin = sum_casaflux%Nlittermin + casaflux%Nlittermin + sum_casaflux%Nsmin = sum_casaflux%Nsmin + casaflux%Nsmin + sum_casaflux%Nsimm = sum_casaflux%Nsimm + casaflux%Nsimm + sum_casaflux%Nsnet = sum_casaflux%Nsnet + casaflux%Nsnet + sum_casaflux%fNminloss = sum_casaflux%fNminloss + casaflux%fNminloss + sum_casaflux%fNminleach = sum_casaflux%fNminleach + casaflux%fNminleach + sum_casaflux%Pdep = sum_casaflux%Pdep + casaflux%Pdep + sum_casaflux%Pwea = sum_casaflux%Pwea + casaflux%Pwea + sum_casaflux%Pleach = sum_casaflux%Pleach + casaflux%Pleach + sum_casaflux%Ploss = sum_casaflux%Ploss + casaflux%Ploss + sum_casaflux%Pupland = sum_casaflux%Pupland + casaflux%Pupland + sum_casaflux%Plittermin = sum_casaflux%Plittermin + casaflux%Plittermin + sum_casaflux%Psmin = sum_casaflux%Psmin + casaflux%Psmin + sum_casaflux%Psimm = sum_casaflux%Psimm + casaflux%Psimm + sum_casaflux%Psnet = sum_casaflux%Psnet + casaflux%Psnet + sum_casaflux%fPleach = sum_casaflux%fPleach + casaflux%fPleach + sum_casaflux%kplab = sum_casaflux%kplab + casaflux%kplab + sum_casaflux%kpsorb = sum_casaflux%kpsorb + casaflux%kpsorb + sum_casaflux%kpocc = sum_casaflux%kpocc + casaflux%kpocc + sum_casaflux%kmlabP = sum_casaflux%kmlabP + casaflux%kmlabP + sum_casaflux%Psorbmax = sum_casaflux%Psorbmax + casaflux%Psorbmax + sum_casaflux%klitter = sum_casaflux%klitter + casaflux%klitter + sum_casaflux%ksoil = sum_casaflux%ksoil + casaflux%ksoil + sum_casaflux%fromLtoS = sum_casaflux%fromLtoS + casaflux%fromLtoS + sum_casaflux%fromStoS = sum_casaflux%fromStoS + casaflux%fromStoS + sum_casaflux%fromLtoCO2 = sum_casaflux%fromLtoCO2 + casaflux%fromLtoCO2 + sum_casaflux%fromStoCO2 = sum_casaflux%fromStoCO2 + casaflux%fromStoCO2 + + sum_casaflux%stemnpp = sum_casaflux%stemnpp + casaflux%stemnpp + sum_casaflux%frac_sapwood = sum_casaflux%frac_sapwood + casaflux%frac_sapwood + sum_casaflux%sapwood_area = sum_casaflux%sapwood_area + casaflux%sapwood_area + sum_casaflux%FluxCtoco2 = sum_casaflux%FluxCtoco2 + casaflux%FluxCtoco2 + sum_casaflux%FluxCtosoil = sum_casaflux%FluxCtosoil + casaflux%FluxCtosoil + sum_casaflux%FluxNtosoil = sum_casaflux%FluxNtosoil + casaflux%FluxNtosoil + sum_casaflux%FluxPtosoil = sum_casaflux%FluxPtosoil + casaflux%FluxPtosoil + + sum_casaflux%FluxCtolitter = sum_casaflux%FluxCtolitter + & + casaflux%FluxCtolitter + + sum_casaflux%FluxNtolitter = sum_casaflux%FluxNtolitter + & + casaflux%FluxNtolitter + + sum_casaflux%FluxPtolitter = sum_casaflux%FluxPtolitter + & + casaflux%FluxPtolitter + + sum_casaflux%Cplant_turnover = sum_casaflux%Cplant_turnover + & + casaflux%Cplant_turnover + + sum_casaflux%Cplant_turnover_disturbance = & + sum_casaflux%Cplant_turnover_disturbance + & + casaflux%Cplant_turnover_disturbance + + sum_casaflux%Cplant_turnover_crowding = & + sum_casaflux%Cplant_turnover_crowding + & + casaflux%Cplant_turnover_crowding + + sum_casaflux%Cplant_turnover_resource_limitation = & + sum_casaflux%Cplant_turnover_resource_limitation + & + casaflux%Cplant_turnover_resource_limitation +ENDIF + +IF (average_now) THEN + + WHERE ( sum_casapool%Cplant .GT. 1.e-12 ) + sum_casaflux%fracCalloc = sum_casaflux%fracCalloc / sum_casapool%Cplant + sum_casaflux%kplant = sum_casaflux%kplant / sum_casapool%Cplant + ELSEWHERE + sum_casaflux%fracCalloc = 0.0 + sum_casaflux%kplant = 0.0 + ENDWHERE + + sum_casaflux%Cgpp = sum_casaflux%Cgpp / rsteps + sum_casaflux%Cnpp = sum_casaflux%Cnpp / rsteps + sum_casaflux%Crp = sum_casaflux%Crp / rsteps + sum_casaflux%Crgplant = sum_casaflux%Crgplant / rsteps + sum_casaflux%Nminfix = sum_casaflux%Nminfix / rsteps + sum_casaflux%Nminuptake = sum_casaflux%Nminuptake / rsteps + sum_casaflux%Plabuptake = sum_casaflux%Plabuptake / rsteps + sum_casaflux%Clabloss = sum_casaflux%Clabloss / rsteps + sum_casaflux%fracClabile = sum_casaflux%fracClabile / rsteps + sum_casaflux%fracNalloc = sum_casaflux%fracNalloc / rsteps + sum_casaflux%fracPalloc = sum_casaflux%fracPalloc / rsteps + sum_casaflux%Crmplant = sum_casaflux%Crmplant / rsteps + sum_casaflux%fromPtoL = sum_casaflux%fromPtoL / rsteps + sum_casaflux%Cnep = sum_casaflux%Cnep / rsteps + sum_casaflux%Crsoil = sum_casaflux%Crsoil / rsteps + sum_casaflux%Nmindep = sum_casaflux%Nmindep / rsteps + sum_casaflux%Nminloss = sum_casaflux%Nminloss / rsteps + sum_casaflux%Nminleach = sum_casaflux%Nminleach / rsteps + sum_casaflux%Nupland = sum_casaflux%Nupland / rsteps + sum_casaflux%Nlittermin = sum_casaflux%Nlittermin / rsteps + sum_casaflux%Nsmin = sum_casaflux%Nsmin / rsteps + sum_casaflux%Nsimm = sum_casaflux%Nsimm / rsteps + sum_casaflux%Nsnet = sum_casaflux%Nsnet / rsteps + sum_casaflux%fNminloss = sum_casaflux%fNminloss / rsteps + sum_casaflux%fNminleach = sum_casaflux%fNminleach / rsteps + sum_casaflux%Pdep = sum_casaflux%Pdep / rsteps + sum_casaflux%Pwea = sum_casaflux%Pwea / rsteps + sum_casaflux%Pleach = sum_casaflux%Pleach / rsteps + sum_casaflux%Ploss = sum_casaflux%Ploss / rsteps + sum_casaflux%Pupland = sum_casaflux%Pupland / rsteps + sum_casaflux%Plittermin = sum_casaflux%Plittermin / rsteps + sum_casaflux%Psmin = sum_casaflux%Psmin / rsteps + sum_casaflux%Psimm = sum_casaflux%Psimm / rsteps + sum_casaflux%Psnet = sum_casaflux%Psnet / rsteps + sum_casaflux%fPleach = sum_casaflux%fPleach / rsteps + sum_casaflux%kplab = sum_casaflux%kplab / rsteps + sum_casaflux%kpsorb = sum_casaflux%kpsorb / rsteps + sum_casaflux%kpocc = sum_casaflux%kpocc / rsteps + sum_casaflux%kmlabP = sum_casaflux%kmlabP / rsteps + sum_casaflux%Psorbmax = sum_casaflux%Psorbmax / rsteps + sum_casaflux%klitter = sum_casaflux%klitter / rsteps + sum_casaflux%ksoil = sum_casaflux%ksoil / rsteps + sum_casaflux%fromLtoS = sum_casaflux%fromLtoS / rsteps + sum_casaflux%fromStoS = sum_casaflux%fromStoS / rsteps + sum_casaflux%fromLtoCO2 = sum_casaflux%fromLtoCO2 / rsteps + sum_casaflux%fromStoCO2 = sum_casaflux%fromStoCO2 / rsteps + sum_casaflux%stemnpp = sum_casaflux%stemnpp / rsteps + sum_casaflux%frac_sapwood = sum_casaflux%frac_sapwood / rsteps + sum_casaflux%sapwood_area = sum_casaflux%sapwood_area / rsteps + sum_casaflux%FluxCtolitter = sum_casaflux%FluxCtolitter / rsteps + sum_casaflux%FluxNtolitter = sum_casaflux%FluxNtolitter / rsteps + sum_casaflux%FluxPtolitter = sum_casaflux%FluxPtolitter / rsteps + sum_casaflux%FluxCtosoil = sum_casaflux%FluxCtosoil / rsteps + sum_casaflux%FluxNtosoil = sum_casaflux%FluxNtosoil / rsteps + sum_casaflux%FluxPtosoil = sum_casaflux%FluxPtosoil / rsteps + sum_casaflux%FluxCtoco2 = sum_casaflux%FluxCtoco2 / rsteps + + sum_casaflux%Cplant_turnover = sum_casaflux%Cplant_turnover / rsteps + + sum_casaflux%Cplant_turnover_disturbance = & + casaflux%Cplant_turnover_disturbance / rsteps + + sum_casaflux% Cplant_turnover_crowding = & + sum_casaflux%Cplant_turnover_crowding / rsteps + + sum_casaflux%Cplant_turnover_resource_limitation = & + sum_casaflux%Cplant_turnover_resource_limitation / rsteps + +ENDIF + +END SUBROUTINE update_sum_casa_flux + +END MODULE sum_casa_flux_type_mod diff --git a/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 new file mode 100644 index 000000000..39139fb68 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 @@ -0,0 +1,313 @@ +MODULE sum_casa_pool_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: alloc_sum_casa_pool_data_type +PUBLIC :: assoc_sum_casa_pool_type +PUBLIC :: zero_sum_casa_pool_data +PUBLIC :: update_sum_casa_pool + +CONTAINS + +SUBROUTINE alloc_sum_casa_pool_data_type( sum_casapool_data, arraysize ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type +USE casadimension, ONLY: mplant, mlitter, msoil, mwood + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( sum_casapool_data % Clabile ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dClabiledt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Ctot ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Nsoilmin ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoillab ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoilsorb ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoilocc ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dNsoilmindt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoillabdt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoilsorbdt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoiloccdt ( arraysize ) ) + +ALLOCATE ( sum_casapool_data % Cplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Nplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Pplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dCplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dNplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dPplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioNCplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioNPplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Clitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Nlitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Plitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dClitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dNlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dPlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % ratioNClitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % ratioNPlitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Csoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % Nsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % Psoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dCsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dNsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dPsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilnew ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNPsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilmin ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilmax ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioPcsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioPcplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioPclitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % cwoodprod ( arraysize, mwood ) ) +ALLOCATE ( sum_casapool_data % nwoodprod ( arraysize, mwood ) ) +ALLOCATE ( sum_casapool_data % pwoodprod ( arraysize, mwood ) ) + +END SUBROUTINE alloc_sum_casa_pool_data_type + +SUBROUTINE zero_sum_casa_pool_data( sum_casapool ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool + +sum_casapool % Clabile = 0.0 +sum_casapool % dClabiledt = 0.0 +sum_casapool % Ctot = 0.0 +sum_casapool % Ctot_0 = 0.0 +sum_casapool % Nsoilmin = 0.0 +sum_casapool % Psoillab = 0.0 +sum_casapool % Psoilsorb = 0.0 +sum_casapool % Psoilocc = 0.0 +sum_casapool % dNsoilmindt = 0.0 +sum_casapool % dPsoillabdt = 0.0 +sum_casapool % dPsoilsorbdt = 0.0 +sum_casapool % dPsoiloccdt = 0.0 + +sum_casapool % Cplant = 0.0 +sum_casapool % Nplant = 0.0 +sum_casapool % Pplant = 0.0 +sum_casapool % dCplantdt = 0.0 +sum_casapool % dNplantdt = 0.0 +sum_casapool % dPplantdt = 0.0 +sum_casapool % ratioNCplant = 0.0 +sum_casapool % ratioNPplant = 0.0 +sum_casapool % Clitter = 0.0 +sum_casapool % Nlitter = 0.0 +sum_casapool % Plitter = 0.0 +sum_casapool % dClitterdt = 0.0 +sum_casapool % dNlitterdt = 0.0 +sum_casapool % dPlitterdt = 0.0 +sum_casapool % ratioNClitter = 0.0 +sum_casapool % ratioNPlitter = 0.0 +sum_casapool % Csoil = 0.0 +sum_casapool % Nsoil = 0.0 +sum_casapool % Psoil = 0.0 +sum_casapool % dCsoildt = 0.0 +sum_casapool % dNsoildt = 0.0 +sum_casapool % dPsoildt = 0.0 +sum_casapool % ratioNCsoil = 0.0 +sum_casapool % ratioNCsoilnew = 0.0 +sum_casapool % ratioNPsoil = 0.0 +sum_casapool % ratioNCsoilmin = 0.0 +sum_casapool % ratioNCsoilmax = 0.0 +sum_casapool % ratioPcsoil = 0.0 +sum_casapool % ratioPcplant = 0.0 +sum_casapool % ratioPclitter = 0.0 +sum_casapool % cwoodprod = 0.0 +sum_casapool % nwoodprod = 0.0 +sum_casapool % pwoodprod = 0.0 + +RETURN +END SUBROUTINE zero_sum_casa_pool_data + +SUBROUTINE assoc_sum_casa_pool_type( sum_casapool, sum_casapool_data ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type +USE casa_pool_type_mod, ONLY: casa_pool_type + +IMPLICIT NONE + +TYPE (casa_pool_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: sum_casapool_data + +sum_casapool % Clabile => sum_casapool_data % Clabile +sum_casapool % dClabiledt => sum_casapool_data % dClabiledt +sum_casapool % Ctot => sum_casapool_data % Ctot +sum_casapool % Ctot_0 => sum_casapool_data % Ctot_0 +sum_casapool % Nsoilmin => sum_casapool_data % Nsoilmin +sum_casapool % Psoillab => sum_casapool_data % Psoillab +sum_casapool % Psoilsorb => sum_casapool_data % Psoilsorb +sum_casapool % Psoilocc => sum_casapool_data % Psoilocc +sum_casapool % dNsoilmindt => sum_casapool_data % dNsoilmindt +sum_casapool % dPsoillabdt => sum_casapool_data % dPsoillabdt +sum_casapool % dPsoilsorbdt => sum_casapool_data % dPsoilsorbdt +sum_casapool % dPsoiloccdt => sum_casapool_data % dPsoiloccdt + +sum_casapool % Cplant => sum_casapool_data % Cplant +sum_casapool % Nplant => sum_casapool_data % Nplant +sum_casapool % Pplant => sum_casapool_data % Pplant +sum_casapool % dCplantdt => sum_casapool_data % dCplantdt +sum_casapool % dNplantdt => sum_casapool_data % dNplantdt +sum_casapool % dPplantdt => sum_casapool_data % dPplantdt +sum_casapool % ratioNCplant => sum_casapool_data % ratioNCplant +sum_casapool % ratioNPplant => sum_casapool_data % ratioNPplant +sum_casapool % Clitter => sum_casapool_data % Clitter +sum_casapool % Nlitter => sum_casapool_data % Nlitter +sum_casapool % Plitter => sum_casapool_data % Plitter +sum_casapool % dClitterdt => sum_casapool_data % dClitterdt +sum_casapool % dNlitterdt => sum_casapool_data % dNlitterdt +sum_casapool % dPlitterdt => sum_casapool_data % dPlitterdt +sum_casapool % ratioNClitter => sum_casapool_data % ratioNClitter +sum_casapool % ratioNPlitter => sum_casapool_data % ratioNPlitter +sum_casapool % Csoil => sum_casapool_data % Csoil +sum_casapool % Nsoil => sum_casapool_data % Nsoil +sum_casapool % Psoil => sum_casapool_data % Psoil +sum_casapool % dCsoildt => sum_casapool_data % dCsoildt +sum_casapool % dNsoildt => sum_casapool_data % dNsoildt +sum_casapool % dPsoildt => sum_casapool_data % dPsoildt +sum_casapool % ratioNCsoil => sum_casapool_data % ratioNCsoil +sum_casapool % ratioNCsoilnew => sum_casapool_data % ratioNCsoilnew +sum_casapool % ratioNPsoil => sum_casapool_data % ratioNPsoil +sum_casapool % ratioNCsoilmin => sum_casapool_data % ratioNCsoilmin +sum_casapool % ratioNCsoilmax => sum_casapool_data % ratioNCsoilmax +sum_casapool % ratioPcsoil => sum_casapool_data % ratioPcsoil +sum_casapool % ratioPcplant => sum_casapool_data % ratioPcplant +sum_casapool % ratioPclitter => sum_casapool_data % ratioPclitter +sum_casapool % cwoodprod => sum_casapool_data % cwoodprod +sum_casapool % nwoodprod => sum_casapool_data % nwoodprod +sum_casapool % pwoodprod => sum_casapool_data % pwoodprod + +RETURN +END SUBROUTINE assoc_sum_casa_pool_type + +SUBROUTINE update_sum_casa_pool( sum_casapool, casapool, sum_now, average_now, & + nsteps ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +!local vars +INTEGER :: rsteps + +rsteps = REAL( nsteps ) + +IF (sum_now) THEN + + sum_casapool%Clabile = sum_casapool%Clabile + casapool%Clabile + sum_casapool%dClabiledt = sum_casapool%Clabile + casapool%Clabile + sum_casapool%Cplant = sum_casapool%Cplant + casapool%Cplant + sum_casapool%Nplant = sum_casapool%Nplant + casapool%Nplant + sum_casapool%Pplant = sum_casapool%Pplant + casapool%Pplant + sum_casapool%dCplantdt = sum_casapool%dCplantdt + casapool%dCplantdt + sum_casapool%dNplantdt = sum_casapool%dNplantdt + casapool%dNplantdt + sum_casapool%dPplantdt = sum_casapool%dPplantdt + casapool%dPplantdt + sum_casapool%ratioNCplant = sum_casapool%ratioNCplant & + + casapool%ratioNCplant + sum_casapool%ratioNPplant = sum_casapool%ratioNPplant & + + casapool%ratioNPplant + sum_casapool%Nsoilmin = sum_casapool%Nsoilmin + casapool%Nsoilmin + sum_casapool%Psoillab = sum_casapool%Psoillab + casapool%Psoillab + sum_casapool%Psoilsorb = sum_casapool%Psoilsorb + casapool%Psoilsorb + + sum_casapool%Psoilocc = sum_casapool%Psoilocc + casapool%Psoilocc + sum_casapool%dNsoilmindt = sum_casapool%dNsoilmindt + casapool%dNsoilmindt + sum_casapool%dPsoillabdt = sum_casapool%dPsoillabdt + casapool%dPsoillabdt + sum_casapool%dPsoilsorbdt = sum_casapool%dPsoilsorbdt & + + casapool%dPsoilsorbdt + sum_casapool%dPsoiloccdt = sum_casapool%dPsoiloccdt + casapool%dPsoiloccdt + sum_casapool%Clitter = sum_casapool%Clitter + casapool%Clitter + sum_casapool%Nlitter = sum_casapool%Nlitter + casapool%Nlitter + sum_casapool%Plitter = sum_casapool%Plitter + casapool%Plitter + sum_casapool%dClitterdt = sum_casapool%dClitterdt + casapool%dClitterdt + sum_casapool%dNlitterdt = sum_casapool%dNlitterdt + casapool%dNlitterdt + sum_casapool%dPlitterdt = sum_casapool%dPlitterdt + casapool%dPlitterdt + sum_casapool%ratioNClitter = sum_casapool%ratioNClitter & + + casapool%ratioNClitter + sum_casapool%ratioNPlitter = sum_casapool%ratioNPlitter & + + casapool%ratioNPlitter + sum_casapool%Csoil = sum_casapool%Csoil + casapool%Csoil + sum_casapool%Nsoil = sum_casapool%Nsoil + casapool%Nsoil + sum_casapool%Psoil = sum_casapool%Psoil + casapool%Psoil + sum_casapool%dCsoildt = sum_casapool%dCsoildt + casapool%dCsoildt + sum_casapool%dNsoildt = sum_casapool%dNsoildt + casapool%dNsoildt + sum_casapool%dPsoildt = sum_casapool%dPsoildt + casapool%dPsoildt + sum_casapool%ratioNCsoil = sum_casapool%ratioNCsoil & + + casapool%ratioNCsoil + sum_casapool%ratioNPsoil = sum_casapool%ratioNPsoil & + + casapool%ratioNPsoil + sum_casapool%ratioNCsoilnew = sum_casapool%ratioNCsoilnew & + + casapool%ratioNCsoilnew + sum_casapool%ratioNCsoilmin = sum_casapool%ratioNCsoilmin & + + casapool%ratioNCsoilmin + sum_casapool%ratioNCsoilmax = sum_casapool%ratioNCsoilmax & + + casapool%ratioNCsoilmax + sum_casapool%ratioPcsoil = sum_casapool%ratioPcsoil + casapool%ratioPcsoil + sum_casapool%ratioPcplant = sum_casapool%ratioPcplant & + + casapool%ratioPcplant + sum_casapool%ratioPclitter = sum_casapool%ratioPclitter & + + casapool%ratioPclitter + +ENDIF + +IF (average_now) THEN + + sum_casapool%Clabile = sum_casapool%Clabile / rsteps + sum_casapool%dClabiledt = sum_casapool%Clabile / rsteps + sum_casapool%Nplant = sum_casapool%Nplant / rsteps + sum_casapool%Pplant = sum_casapool%Pplant / rsteps + sum_casapool%dCplantdt = sum_casapool%dCplantdt / rsteps + sum_casapool%dNplantdt = sum_casapool%dNplantdt / rsteps + sum_casapool%dPplantdt = sum_casapool%dPplantdt / rsteps + sum_casapool%ratioNCplant = sum_casapool%ratioNCplant / rsteps + sum_casapool%ratioNPplant = sum_casapool%ratioNPplant / rsteps + sum_casapool%Nsoilmin = sum_casapool%Nsoilmin / rsteps + sum_casapool%Psoillab = sum_casapool%Psoillab / rsteps + sum_casapool%Psoilsorb = sum_casapool%Psoilsorb / rsteps + sum_casapool%Psoilocc = sum_casapool%Psoilocc / rsteps + sum_casapool%dNsoilmindt = sum_casapool%dNsoilmindt / rsteps + sum_casapool%dPsoillabdt = sum_casapool%dPsoillabdt / rsteps + sum_casapool%dPsoilsorbdt = sum_casapool%dPsoilsorbdt / rsteps + sum_casapool%dPsoiloccdt = sum_casapool%dPsoiloccdt / rsteps + sum_casapool%Clitter = sum_casapool%Clitter / rsteps + sum_casapool%Nlitter = sum_casapool%Nlitter / rsteps + sum_casapool%Plitter = sum_casapool%Plitter / rsteps + sum_casapool%dClitterdt = sum_casapool%dClitterdt / rsteps + sum_casapool%dNlitterdt = sum_casapool%dNlitterdt / rsteps + sum_casapool%dPlitterdt = sum_casapool%dPlitterdt / rsteps + sum_casapool%ratioNClitter = sum_casapool%ratioNClitter / rsteps + sum_casapool%ratioNPlitter = sum_casapool%ratioNPlitter / rsteps + sum_casapool%Csoil = sum_casapool%Csoil / rsteps + sum_casapool%Nsoil = sum_casapool%Nsoil / rsteps + sum_casapool%Psoil = sum_casapool%Psoil / rsteps + sum_casapool%dCsoildt = sum_casapool%dCsoildt / rsteps + sum_casapool%dNsoildt = sum_casapool%dNsoildt / rsteps + sum_casapool%dPsoildt = sum_casapool%dPsoildt / rsteps + sum_casapool%ratioNCsoil = sum_casapool%ratioNCsoil / rsteps + sum_casapool%ratioNPsoil = sum_casapool%ratioNPsoil / rsteps + sum_casapool%ratioNCsoilnew = sum_casapool%ratioNCsoilnew / rsteps + sum_casapool%ratioNCsoilmin = sum_casapool%ratioNCsoilmin / rsteps + sum_casapool%ratioNCsoilmax = sum_casapool%ratioNCsoilmax / rsteps + sum_casapool%ratioPcsoil = sum_casapool%ratioPcsoil / rsteps + sum_casapool%ratioPcplant = sum_casapool%ratioPcplant / rsteps + sum_casapool%ratioPclitter = sum_casapool%ratioPclitter / rsteps + +ENDIF + +RETURN +END SUBROUTINE update_sum_casa_pool + +END MODULE sum_casa_pool_type_mod From c6fe3e52a801dea5041f24c1b71b0998873a25cb Mon Sep 17 00:00:00 2001 From: Whyborn Date: Thu, 28 May 2026 19:13:57 +1000 Subject: [PATCH 28/98] Update CASA types --- .../AM3/control/casa/types/casa_flux_type.F90 | 10 ++++++++++ .../AM3/control/casa/types/casa_inout.F90 | 1 - .../AM3/control/casa/types/casa_pool_type.F90 | 20 +++++++++++++++++++ .../AM3/control/casa/types/casa_variable.F90 | 12 ++++++----- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 index 8f7777962..de575140f 100644 --- a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 +++ b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 @@ -13,6 +13,7 @@ MODULE casa_flux_type_mod REAL(r_2), ALLOCATABLE :: Cgpp (:) REAL(r_2), ALLOCATABLE :: Cnpp (:) + REAL(r_2), ALLOCATABLE :: Cnbp (:) REAL(r_2), ALLOCATABLE :: Crp (:) REAL(r_2), ALLOCATABLE :: Crgplant (:) REAL(r_2), ALLOCATABLE :: Nminfix (:) @@ -22,6 +23,7 @@ MODULE casa_flux_type_mod REAL(r_2), ALLOCATABLE :: fracClabile (:) REAL(r_2), ALLOCATABLE :: stemnpp (:) REAL(r_2), ALLOCATABLE :: frac_sapwood (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_tot (:) REAL(r_2), ALLOCATABLE :: sapwood_area (:) REAL(r_2), ALLOCATABLE :: Crsoil (:) REAL(r_2), ALLOCATABLE :: Nmindep (:) @@ -89,6 +91,7 @@ MODULE casa_flux_type_mod REAL(r_2), POINTER, PUBLIC :: Cgpp (:) REAL(r_2), POINTER, PUBLIC :: Cnpp (:) + REAL(r_2), POINTER, PUBLIC :: Cnbp (:) REAL(r_2), POINTER, PUBLIC :: Crp (:) REAL(r_2), POINTER, PUBLIC :: Crgplant (:) REAL(r_2), POINTER, PUBLIC :: Nminfix (:) @@ -98,6 +101,7 @@ MODULE casa_flux_type_mod REAL(r_2), POINTER, PUBLIC :: fracClabile (:) REAL(r_2), POINTER, PUBLIC :: stemnpp (:) REAL(r_2), POINTER, PUBLIC :: frac_sapwood (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_tot (:) REAL(r_2), POINTER, PUBLIC :: sapwood_area (:) REAL(r_2), POINTER, PUBLIC :: Crsoil (:) REAL(r_2), POINTER, PUBLIC :: Nmindep (:) @@ -174,6 +178,7 @@ SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) ALLOCATE ( casaflux_data % Cgpp ( arraysize ) ) ALLOCATE ( casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnbp ( arraysize ) ) ALLOCATE ( casaflux_data % Crp ( arraysize ) ) ALLOCATE ( casaflux_data % Crgplant ( arraysize ) ) ALLOCATE ( casaflux_data % Nminfix ( arraysize ) ) @@ -183,6 +188,7 @@ SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) ALLOCATE ( casaflux_data % fracClabile ( arraysize ) ) ALLOCATE ( casaflux_data % stemnpp ( arraysize ) ) ALLOCATE ( casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_tot ( arraysize ) ) ALLOCATE ( casaflux_data % sapwood_area ( arraysize ) ) ALLOCATE ( casaflux_data % Crsoil ( arraysize ) ) ALLOCATE ( casaflux_data % Nmindep ( arraysize ) ) @@ -256,6 +262,7 @@ SUBROUTINE zero_casa_flux_data_type( casaflux_data ) casaflux_data % Cgpp (:) = 0.0 casaflux_data % Cnpp (:) = 0.0 +casaflux_data % Cnbp (:) = 0.0 casaflux_data % Crp (:) = 0.0 casaflux_data % Crgplant (:) = 0.0 casaflux_data % Nminfix (:) = 0.0 @@ -265,6 +272,7 @@ SUBROUTINE zero_casa_flux_data_type( casaflux_data ) casaflux_data % fracClabile (:) = 0.0 casaflux_data % stemnpp (:) = 0.0 casaflux_data % frac_sapwood (:) = 0.0 +casaflux_data % Cplant_turnover_tot (:) = 0.0 casaflux_data % sapwood_area (:) = 0.0 casaflux_data % Crsoil (:) = 0.0 casaflux_data % Nmindep (:) = 0.0 @@ -338,6 +346,7 @@ SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) casaflux % Cgpp => casaflux_data % Cgpp casaflux % Cnpp => casaflux_data % Cnpp +casaflux % Cnpp => casaflux_data % Cnbp casaflux % Crp => casaflux_data % Crp casaflux % Crgplant => casaflux_data % Crgplant casaflux % Nminfix => casaflux_data % Nminfix @@ -347,6 +356,7 @@ SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) casaflux % fracClabile => casaflux_data % fracClabile casaflux % stemnpp => casaflux_data % stemnpp casaflux % frac_sapwood => casaflux_data % frac_sapwood +casaflux % Cplant_turnover_tot => casaflux_data % Cplant_turnover_tot casaflux % sapwood_area => casaflux_data % sapwood_area casaflux % Crsoil => casaflux_data % Crsoil casaflux % Nmindep => casaflux_data % Nmindep diff --git a/src/coupled/AM3/control/casa/types/casa_inout.F90 b/src/coupled/AM3/control/casa/types/casa_inout.F90 index 411904a0f..705feb6f0 100644 --- a/src/coupled/AM3/control/casa/types/casa_inout.F90 +++ b/src/coupled/AM3/control/casa/types/casa_inout.F90 @@ -1,4 +1,3 @@ -#define UM_CBL YES !============================================================================== ! This source code is part of the ! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. diff --git a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 index b37a2eb20..f5ff46221 100644 --- a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 +++ b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 @@ -12,10 +12,14 @@ MODULE casa_pool_type_mod TYPE casa_pool_data_type + REAL(r_2), ALLOCATABLE :: dCdt (:) REAL(r_2), ALLOCATABLE :: Clabile (:) REAL(r_2), ALLOCATABLE :: dClabiledt (:) REAL(r_2), ALLOCATABLE :: Ctot (:) REAL(r_2), ALLOCATABLE :: Ctot_0 (:) + REAL(r_2), ALLOCATABLE :: Cplanttot (:) + REAL(r_2), ALLOCATABLE :: Clittertot (:) + REAL(r_2), ALLOCATABLE :: Csoiltot (:) REAL(r_2), ALLOCATABLE :: Nsoilmin (:) REAL(r_2), ALLOCATABLE :: Psoillab (:) REAL(r_2), ALLOCATABLE :: Psoilsorb (:) @@ -63,10 +67,14 @@ MODULE casa_pool_type_mod TYPE casa_pool_type + REAL(r_2), POINTER, PUBLIC :: dCdt (:) REAL(r_2), POINTER, PUBLIC :: Clabile (:) REAL(r_2), POINTER, PUBLIC :: dClabiledt (:) REAL(r_2), POINTER, PUBLIC :: Ctot (:) REAL(r_2), POINTER, PUBLIC :: Ctot_0 (:) + REAL(r_2), POINTER, PUBLIC :: Cplanttot (:) + REAL(r_2), POINTER, PUBLIC :: Clittertot (:) + REAL(r_2), POINTER, PUBLIC :: Csoiltot (:) REAL(r_2), POINTER, PUBLIC :: Nsoilmin (:) REAL(r_2), POINTER, PUBLIC :: Psoillab (:) REAL(r_2), POINTER, PUBLIC :: Psoilsorb (:) @@ -123,10 +131,14 @@ SUBROUTINE alloc_casa_pool_data_type( casapool_data, arraysize ) TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data INTEGER, INTENT(IN) :: arraysize +ALLOCATE ( casapool_data % dCdt ( arraysize ) ) ALLOCATE ( casapool_data % Clabile ( arraysize ) ) ALLOCATE ( casapool_data % dClabiledt ( arraysize ) ) ALLOCATE ( casapool_data % Ctot ( arraysize ) ) ALLOCATE ( casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( casapool_data % Cplanttot ( arraysize ) ) +ALLOCATE ( casapool_data % Clittertot ( arraysize ) ) +ALLOCATE ( casapool_data % Csoiltot ( arraysize ) ) ALLOCATE ( casapool_data % Nsoilmin ( arraysize ) ) ALLOCATE ( casapool_data % Psoillab ( arraysize ) ) ALLOCATE ( casapool_data % Psoilsorb ( arraysize ) ) @@ -178,10 +190,14 @@ SUBROUTINE zero_casa_pool_data_type( casapool_data ) TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +casapool_data % dCdt = 0.0 casapool_data % Clabile = 0.0 casapool_data % dClabiledt = 0.0 casapool_data % Ctot = 0.0 casapool_data % Ctot_0 = 0.0 +casapool_data % Cplanttot = 0.0 +casapool_data % Clittertot = 0.0 +casapool_data % Csoiltot = 0.0 casapool_data % Nsoilmin = 0.0 casapool_data % Psoillab = 0.0 casapool_data % Psoilsorb = 0.0 @@ -235,10 +251,14 @@ SUBROUTINE assoc_casa_pool_type( casapool, casapool_data ) TYPE (casa_pool_type), INTENT(INOUT) :: casapool TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: casapool_data +casapool % dCdt => casapool_data % dCdt casapool % Clabile => casapool_data % Clabile casapool % dClabiledt => casapool_data % dClabiledt casapool % Ctot => casapool_data % Ctot casapool % Ctot_0 => casapool_data % Ctot_0 +casapool % Cplanttot => casapool_data % Cplanttot +casapool % Clittertot => casapool_data % Clittertot +casapool % Csoiltot => casapool_data % Csoiltot casapool % Nsoilmin => casapool_data % Nsoilmin casapool % Psoillab => casapool_data % Psoillab casapool % Psoilsorb => casapool_data % Psoilsorb diff --git a/src/coupled/AM3/control/casa/types/casa_variable.F90 b/src/coupled/AM3/control/casa/types/casa_variable.F90 index f6aad2c97..4f25d1d33 100644 --- a/src/coupled/AM3/control/casa/types/casa_variable.F90 +++ b/src/coupled/AM3/control/casa/types/casa_variable.F90 @@ -5,15 +5,17 @@ MODULE casavariable USE casa_biome_type_mod, ONLY: casa_biome_data_type, & casa_biome => casa_biome_type USE casa_pool_type_mod, ONLY: casa_pool_data_type, & - casa_pool => casa_pool_type + casa_pool => casa_pool_type USE casa_flux_type_mod, ONLY: casa_flux_data_type, & - casa_flux => casa_flux_type + casa_flux => casa_flux_type USE casa_met_type_mod, ONLY: casa_met_data_type, & - casa_met => casa_met_type + casa_met => casa_met_type USE casa_balance_type_mod, ONLY: casa_bal_data_type, & - casa_bal => casa_bal_type + casa_balance => casa_bal_type USE phenology_type_mod, ONLY: phenology_data_type, & phenology_type +USE casa_files_type_mod, ONLY: casa_files_type, casafile + IMPLICIT NONE PUBLIC :: zero_sum_casa @@ -73,7 +75,7 @@ SUBROUTINE alloc_casavariable( casabiome, casabiome_data, & TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data TYPE (casa_flux), INTENT(INOUT) :: sum_casaflux TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data -TYPE (casa_bal), INTENT(INOUT) :: casabal +TYPE (casa_balance), INTENT(INOUT) :: casabal TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data TYPE (casa_met), INTENT(INOUT) :: casamet TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data From 8d4ebc66c56763219437a40c1b1c3f9c3524a789 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 15:33:03 +1000 Subject: [PATCH 29/98] Use new cable_surface_types_mod.F90 --- .../cable/shared/cable_surface_types_mod.F90 | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 48fb78dca..051c74018 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -25,12 +25,17 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& - nnvg, ntype, urban, lake, soil, ice) - INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake,& + SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& + npft, nnvg, ntype, urban, lake, soil, ice) + ! JULES permits surface IDs to be assigned in the namelist, and needs to + ! link these IDs to I/O machinery (via the surface_type_ids) array and to + ! the science via the integer parameters. The parameters specify how many + ! surfaces are PFTs (they always occupy the first N slots), how many + ! non-PFT surfaces there are to round out the total count, which IDs are + ! urban, lake, soil or ice as they get special treatment. + INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& soil, ice - INTEGER, INTENT(IN) :: ncpft surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -53,13 +58,13 @@ SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& npft = 13 nnvg = 4 urban = urban_cable - lake = lakes_cable + lake = lake_cable soil = barren_cable ice = ice_cable ntype = npft - nnvg nnpft = npft - ncpft - END SUBROUTINE set_JULES_surface_types + END SUBROUTINE link_JULES_surface_ids_to_CABLE END MODULE cable_surface_types_mod From 6d8f1a1c6e32dcab8a03947df3bb18cee17a6425 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 16:14:00 +1000 Subject: [PATCH 30/98] Fix dummy argument intents --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 051c74018..7fba42ec5 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -33,7 +33,8 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! surfaces are PFTs (they always occupy the first N slots), how many ! non-PFT surfaces there are to round out the total count, which IDs are ! urban, lake, soil or ice as they get special treatment. - INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids + INTEGER, INTENT(IN ) :: ncpft INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& soil, ice @@ -62,7 +63,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& soil = barren_cable ice = ice_cable - ntype = npft - nnvg + ntype = npft + nnvg nnpft = npft - ncpft END SUBROUTINE link_JULES_surface_ids_to_CABLE From 2ebc5da99e697c19024abee371733753e7f5f5e0 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 16:40:32 +1000 Subject: [PATCH 31/98] Accidental doubly defined argument --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 7fba42ec5..1769e7f75 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -35,8 +35,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& - soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake, soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 From a01f924805e66b73b3cbe706423b4cd673d0bdb2 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 09:50:55 +1000 Subject: [PATCH 32/98] Fix typos --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1769e7f75..1340ae20a 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -35,7 +35,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake, soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake, soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -58,7 +58,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& npft = 13 nnvg = 4 urban = urban_cable - lake = lake_cable + lake = lakes_cable soil = barren_cable ice = ice_cable From 4d6818152b48eb8c0167a78b86bf2dccd7742b87 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 11:48:27 +1000 Subject: [PATCH 33/98] Remove IFDEF statement --- src/offline/cable_iovars.F90 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/offline/cable_iovars.F90 b/src/offline/cable_iovars.F90 index 096ef0300..e4bd739fe 100644 --- a/src/offline/cable_iovars.F90 +++ b/src/offline/cable_iovars.F90 @@ -579,11 +579,7 @@ FUNCTION to_land_index_global(land_index_local) RESULT(land_index_global) !! Translate local land index on current MPI rank to global land index INTEGER, INTENT(IN) :: land_index_local INTEGER :: land_index_global -#ifdef UM_CBL - land_index_global = land_index_local -#else land_index_global = land_decomp_start + land_index_local - 1 -#endif END FUNCTION to_land_index_global END MODULE cable_IO_vars_module From 7a6d2e2cc58c01b9c4f9ee82b800efd2b4486fc7 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 13:44:21 +1000 Subject: [PATCH 34/98] Remove duplicate files --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c87e5e615..70a94ae58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,12 +88,9 @@ if(CABLE_LIBRARY) src/science/casa-cnp/bgcdriver.F90 src/science/casa-cnp/biogeochem_casa.F90 src/science/casa-cnp/casa_cnp.F90 - src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 - src/science/casa-cnp/casa_phenology.F90 - src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 src/science/misc/cable_air.F90 From 3d0312a8bc2ee15488c2f76e903b84a9d0f4f659 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 13:57:28 +1000 Subject: [PATCH 35/98] Set ncpft --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1340ae20a..a5f3ca73e 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -34,8 +34,8 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! non-PFT surfaces there are to round out the total count, which IDs are ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake, soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ncpft, ntype, urban, lake,& + soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -57,6 +57,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& npft = 13 nnvg = 4 + ncpft = 0 urban = urban_cable lake = lakes_cable soil = barren_cable From a892c05be691939e28b5a3048b904959c9716385 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 12 Jun 2026 16:51:23 +1000 Subject: [PATCH 36/98] Remove coupled version of cable_surface_types --- CMakeLists.txt | 2 +- .../cable/shared/cable_surface_types_mod.F90 | 71 ------------------- 2 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 70a94ae58..cbd38306c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/offline/cable_surface_types_mod.F90 src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 deleted file mode 100644 index a5f3ca73e..000000000 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ /dev/null @@ -1,71 +0,0 @@ -MODULE cable_surface_types_mod - - IMPLICIT NONE - - PUBLIC - - ! cable_surface_type (nml) Index - INTEGER, PARAMETER :: evergreen_needleleaf = 1 - INTEGER, PARAMETER :: evergreen_broadleaf = 2 - INTEGER, PARAMETER :: deciduous_needleleaf = 3 - INTEGER, PARAMETER :: deciduous_broadleaf = 4 - INTEGER, PARAMETER :: shrub_cable = 5 - INTEGER, PARAMETER :: c3_grassland = 6 - INTEGER, PARAMETER :: c4_grassland = 7 - INTEGER, PARAMETER :: tundra = 8 - INTEGER, PARAMETER :: c3_cropland = 9 - INTEGER, PARAMETER :: c4_cropland = 10 - INTEGER, PARAMETER :: wetland = 11 - INTEGER, PARAMETER :: aust_mesic = 12 - INTEGER, PARAMETER :: aust_xeric = 13 - INTEGER, PARAMETER :: barren_cable = 14 - INTEGER, PARAMETER :: urban_cable = 15 - INTEGER, PARAMETER :: lakes_cable = 16 - INTEGER, PARAMETER :: ice_cable = 17 - -CONTAINS - - SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& - npft, nnvg, ntype, urban, lake, soil, ice) - ! JULES permits surface IDs to be assigned in the namelist, and needs to - ! link these IDs to I/O machinery (via the surface_type_ids) array and to - ! the science via the integer parameters. The parameters specify how many - ! surfaces are PFTs (they always occupy the first N slots), how many - ! non-PFT surfaces there are to round out the total count, which IDs are - ! urban, lake, soil or ice as they get special treatment. - INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ncpft, ntype, urban, lake,& - soil, ice - - surface_type_ids(evergreen_needleleaf) = 1 - surface_type_ids(evergreen_broadleaf ) = 2 - surface_type_ids(deciduous_needleleaf) = 3 - surface_type_ids(deciduous_broadleaf ) = 4 - surface_type_ids(shrub_cable ) = 5 - surface_type_ids(c3_grassland ) = 6 - surface_type_ids(c4_grassland ) = 7 - surface_type_ids(tundra ) = 8 - surface_type_ids(c3_cropland ) = 9 - surface_type_ids(c4_cropland ) = 10 - surface_type_ids(wetland ) = 11 - surface_type_ids(aust_mesic ) = 12 - surface_type_ids(aust_xeric ) = 13 - surface_type_ids(barren_cable ) = 14 - surface_type_ids(urban_cable ) = 15 - surface_type_ids(lakes_cable ) = 16 - surface_type_ids(ice_cable ) = 17 - - npft = 13 - nnvg = 4 - ncpft = 0 - urban = urban_cable - lake = lakes_cable - soil = barren_cable - ice = ice_cable - - ntype = npft + nnvg - nnpft = npft - ncpft - - END SUBROUTINE link_JULES_surface_ids_to_CABLE - -END MODULE cable_surface_types_mod From 39fc22033dd4c12062cc47c605b1d736e698535c Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Sat, 13 Jun 2026 07:35:47 +1000 Subject: [PATCH 37/98] Fix name error --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cbd38306c..697294666 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/offline/cable_surface_types_mod.F90 + src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") From cd3747da996dd83a85f60a5224ab94581ec3cc8f Mon Sep 17 00:00:00 2001 From: Whyborn Date: Tue, 16 Jun 2026 12:55:58 +1000 Subject: [PATCH 38/98] Update cable_user and CMakeLists.txt --- CMakeLists.txt | 5 +++-- src/util/cable_runtime_opts_mod.F90 | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 697294666..9a53d31d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,7 +126,7 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/science/landuse/landuse3.F90 + src/science/landuse/landuse3.F90 src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 @@ -191,8 +191,9 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/offline/cable_surface_types.F90 + src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 + src/coupled/esm/casa_landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) diff --git a/src/util/cable_runtime_opts_mod.F90 b/src/util/cable_runtime_opts_mod.F90 index 067945664..a2f138e56 100644 --- a/src/util/cable_runtime_opts_mod.F90 +++ b/src/util/cable_runtime_opts_mod.F90 @@ -89,6 +89,8 @@ MODULE cable_runtime_opts_mod casa_dump_read = .FALSE., & ! casa_dump_write = .FALSE., & ! soilsnow_init_spec = .FALSE., & ! + cable_runtime_coupled = .FALSE., & ! Whether CABLE is operating in + ! coupled mode. LogWorker = .TRUE. , & ! Write Output of each worker ! L.Stevens - Test Switches l_new_roughness_soil = .FALSE., & ! From 1c1e944f0609ce3f0bf519d6f4ad9864b3f1c0e2 Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 17 Jun 2026 13:25:53 +1000 Subject: [PATCH 39/98] Include ESM1.5 version of casa_landuse --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a53d31d5..347a3caf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,7 +193,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_readbiome.F90 src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 - src/coupled/esm/casa_landuse.F90 + src/science/landuse/casa_ESM15landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From aaba5ca98516750f331e7083c8806dac2842465a Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 17 Jun 2026 13:48:29 +1000 Subject: [PATCH 40/98] Add missing file --- src/science/landuse/casa_ESM15landuse.F90 | 344 ++++++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 src/science/landuse/casa_ESM15landuse.F90 diff --git a/src/science/landuse/casa_ESM15landuse.F90 b/src/science/landuse/casa_ESM15landuse.F90 new file mode 100644 index 000000000..742819d0c --- /dev/null +++ b/src/science/landuse/casa_ESM15landuse.F90 @@ -0,0 +1,344 @@ +# define ESM15 YES +#ifdef ESM15 +module landuse_mod + +contains + +SUBROUTINE newlitter( casabiome,frac_x,ifpre_x,frac_y,ifpre_y, & + cplant_x,nplant_x,pplant_x,cplant_y,nplant_y,pplant_y, & + clitter_x,nlitter_x,plitter_x,clitter_y,nlitter_y,plitter_y ) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Transfer the deforest C to litter, and re-allocate litter pools. +! Q.Zhang @ 29/05/2011 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + + implicit none + + TYPE (casa_biome), INTENT(IN) :: casabiome + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,mplant),INTENT(in) :: cplant_x,nplant_x,pplant_x + real(r_2),DIMENSION(mvtype,mlitter),INTENT(in) :: clitter_x,nlitter_x,plitter_x + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) :: cplant_y,nplant_y,pplant_y + real(r_2),DIMENSION(mvtype,mlitter),INTENT(inout) :: clitter_y,nlitter_y,plitter_y + + ! local variable + real(r_2),DIMENSION(mvtype,mlitter,mplant) :: fromPtoL + real(r_2),DIMENSION(mvtype,mplant) :: dcplant,dnplant,dpplant,ratioLignintoN + real(r_2),DIMENSION(mvtype,mlitter) :: dclitter,dnlitter,dplitter,clitter_g,nlitter_g,plitter_g + real(r_2),DIMENSION(mlitter) :: dcY, dnY, dpY + real,DIMENSION(mvtype) :: dfrac + real :: sum_y + integer nL, nP, nv + + dcplant = 0. + dnplant = 0. + dpplant = 0. + ratioLignintoN = 0. + fromPtoL = 0. + dclitter = 0. + dnlitter = 0. + dplitter = 0. + dcY = 0. + dnY = 0. + dpY = 0. + sum_y=0. + dfrac = frac_y - frac_x + +! I. transfer removed plant to litter + DO nP =1,mplant + dcplant(:,nP) = cplant_x(:,nP) * frac_x(:) - cplant_y(:,nP) * frac_y(:) + IF (icycle > 1) dnplant(:,nP) = nplant_x(:,nP) * frac_x(:) - nplant_y(:,nP) * frac_y(:) + IF (icycle > 2) dpplant(:,nP) = pplant_x(:,nP) * frac_x(:) - pplant_y(:,nP) * frac_y(:) + END DO +! NB: logged wood should not be transfered to litter + dcplant(1:mlogmax,wood) = 0. + IF (icycle > 1) dnplant(1:mlogmax,wood) = 0. + IF (icycle > 2) dpplant(1:mlogmax,wood) = 0. + + WHERE(sum(dcplant,2) > 0.) + ! In land use, all plant nutient is allocated to litter pools without re-asorbsion.Q.Zhang 11/08/2011 + ratioLignintoN(:,leaf) = cplant_x(:,leaf)/max(1.0e-10,nplant_x(:,leaf)) & + * casabiome%fracLigninplant(:,leaf) + ratioLignintoN(:,froot)= cplant_x(:,froot)/max(1.0e-10,nplant_x(:,froot)) & + * casabiome%fracLigninplant(:,froot) + + fromPtoL(:,metb,leaf) = max(0.001, 0.85 - 0.018 *ratioLignintoN(:,leaf)) + fromPtoL(:,metb,froot) = max(0.001, 0.85 - 0.018 *ratioLignintoN(:,froot)) + fromPtoL(:,str,leaf) = 1.0 - fromPtoL(:,metb,leaf) + fromPtoL(:,str,froot) = 1.0 - fromPtoL(:,metb,froot) + fromPtoL(:,cwd,wood) = 1.0 + ENDWHERE + + DO nv=1, mvtype + ! transfer removed C,N,P pools from plant to litter + IF(ifpre_x(nv) .and. frac_x(nv)>frac_y(nv))THEN + + DO nL=1,mlitter + DO nP=1,mplant + dclitter(nv,nL) = dclitter(nv,nL)+ fromPtoL(nv,nL,nP) * dcplant(nv,nP) + ENDDO + ENDDO + + IF(icycle > 1) THEN + dnlitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot) * dcplant(nv,froot)) * ratioNCstrfix + dnlitter(nv,metb) = dnplant(nv,leaf) + dnplant(nv,froot) - dnlitter(nv,str) + dnlitter(nv,CWD) = dnplant(nv,wood) + ENDIF !end "icycle >1" + + IF(icycle > 2) THEN + dplitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot)* dcplant(nv,froot)) * ratioPCstrfix + dplitter(nv,metb) = dpplant(nv,leaf) + dpplant(nv,froot) -dplitter(nv,str) + dplitter(nv,CWD) = dpplant(nv,wood) + ENDIF !of "icycle >2" + ENDIF + END DO + +! II. re-allocate litter pools according to patch weights. +! average pool variables from gridcell to new patches. + DO nv=1,mvtype + IF (ifpre_x(nv) .and. dfrac(nv)<0.0) THEN + dcY(:) = dcY(:) + dclitter(nv,:) + clitter_x(nv,:)*abs(dfrac(nv)) + IF (icycle > 1) dnY(:) = dnY(:) + dnlitter(nv,:) + nlitter_x(nv,:)*abs(dfrac(nv)) + IF (icycle > 2) dpY(:) = dpY(:) + dplitter(nv,:) + plitter_x(nv,:)*abs(dfrac(nv)) + ENDIF + END DO + + DO nv=1,mvtype + IF ((frac_x(nv)-frac_y(nv))<0.) THEN + sum_y = sum_y + abs(dfrac(nv)) + ENDIF + END DO + + DO nv=1,mvtype + IF (ifpre_y(nv)) THEN ! pft exist in the 2nd year + IF ((frac_x(nv)-frac_y(nv))>0.) THEN ! patch weight decrease + clitter_y(nv,:) = clitter_x(nv,:) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_x(nv,:) + IF (icycle > 2) plitter_y(nv,:) = plitter_x(nv,:) + ELSE IF ((frac_x(nv)-frac_y(nv))<0.) THEN ! patch increase + clitter_y(nv,:) = (clitter_x(nv,:)*frac_x(nv) + dcY(:)*dfrac(nv)/sum_y) / frac_y(nv) + IF (icycle > 1) nlitter_y(nv,:) = (nlitter_x(nv,:)*frac_x(nv) + dnY(:)*dfrac(nv)/sum_y) / frac_y(nv) + IF (icycle > 2) plitter_y(nv,:) = (plitter_x(nv,:)*frac_x(nv) + dpY(:)*dfrac(nv)/sum_y) / frac_y(nv) + ELSE ! no change + clitter_y(nv,:) = clitter_x(nv,:) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_x(nv,:) + IF (icycle > 2) plitter_y(nv,:) = plitter_x(nv,:) + ENDIF + ENDIF + END DO + +END SUBROUTINE newlitter + + +SUBROUTINE newlitter_thin( casabiome,frac_x,ifpre_x,frac_y,ifpre_y, & + cplant_x,nplant_x,pplant_x,cplant_y,nplant_y,pplant_y,& + clitter_x,nlitter_x,plitter_x,clitter_y,nlitter_y,plitter_y,& + thinRatio) +! Used for THINNING FOREST +! Call by casa_reinit +! Transfer the deforest C to litter, and re-allocate litter pools. +! Q.Zhang @ 29/05/2011 +! L.Stevens @ 8/06/2018 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + + implicit none + + TYPE (casa_biome), INTENT(IN) :: casabiome + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y,thinRatio + real(r_2),DIMENSION(mvtype,mplant),INTENT(in) ::cplant_x,nplant_x,pplant_x + real(r_2),DIMENSION(mvtype,mlitter),INTENT(in) ::clitter_x,nlitter_x,plitter_x + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) ::cplant_y,nplant_y,pplant_y + real(r_2),DIMENSION(mvtype,mlitter),INTENT(inout) ::clitter_y,nlitter_y,plitter_y + + ! local variable + real(r_2),DIMENSION(mvtype,mlitter,mplant) :: fromPtoL + real(r_2),DIMENSION(mvtype,mplant) ::dcplant,dnplant,dpplant,ratioLignintoN + real(r_2),DIMENSION(mvtype,mlitter) :: dclitter,dnlitter,dplitter,clitter_g,nlitter_g,plitter_g + integer nL, nP, nv + integer, parameter :: mforest = 4 + + dcplant = 0. + dnplant = 0. + dpplant = 0. + ratioLignintoN = 0. + fromPtoL = 0. + dclitter = 0. + dnlitter = 0. + dplitter = 0. + +! I. transfer removed plant to litter + DO nP =1,mplant + dcplant(:,nP) = cplant_x(:,nP) * frac_x(:) -cplant_y(:,nP) *frac_y(:) + IF (icycle > 1) dnplant(:,nP) = nplant_x(:,nP) * frac_x(:) -nplant_y(:,nP) * frac_y(:) + IF (icycle > 2) dpplant(:,nP) = pplant_x(:,nP) * frac_x(:) -pplant_y(:,nP) * frac_y(:) + END DO +! NB: logged wood should not be transfered to litter + dcplant(1:mlogmax,wood) = 0. + IF (icycle > 1) dnplant(1:mlogmax,wood) = 0. + IF (icycle > 2) dpplant(1:mlogmax,wood) = 0. + + WHERE(sum(dcplant,2) > 0.) + ! In land use, all plant nutient is allocated to litter pools without re-asorbsion.Q.Zhang 11/08/2011 + ratioLignintoN(:,leaf) =cplant_x(:,leaf)/max(1.0e-10,nplant_x(:,leaf)) & + * casabiome%fracLigninplant(:,leaf) + ratioLignintoN(:,froot)=cplant_x(:,froot)/max(1.0e-10,nplant_x(:,froot)) & + * casabiome%fracLigninplant(:,froot) + + fromPtoL(:,metb,leaf) = max(0.001, 0.85 - 0.018*ratioLignintoN(:,leaf)) + fromPtoL(:,metb,froot) = max(0.001, 0.85 - 0.018*ratioLignintoN(:,froot)) + fromPtoL(:,str,leaf) = 1.0 - fromPtoL(:,metb,leaf) + fromPtoL(:,str,froot) = 1.0 - fromPtoL(:,metb,froot) + fromPtoL(:,cwd,wood) = 1.0 + ENDWHERE + + DO nv=1, mforest + ! average litter pools on gridcell + clitter_g(nv,:) = clitter_x(nv,:) * frac_x(nv) + nlitter_g(nv,:) = nlitter_x(nv,:) * frac_x(nv) + plitter_g(nv,:) = plitter_x(nv,:) * frac_x(nv) + ! transfer removed C,N,P pools from plant to litter + IF(ifpre_x(nv) .and. thinRatio(nv)<1.0)THEN + + DO nL=1,mlitter + DO nP=1,mplant + dclitter(nv,nL) = fromPtoL(nv,nL,nP) *dcplant(nv,nP) + !clitter_g(nv,nL) = clitter_g(nv,nL) + fromPtoL(nv,nL,nP) *dcplant(nv,nP) + ENDDO + ENDDO + + IF(icycle > 1) THEN + dnlitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot) * dcplant(nv,froot))* ratioNCstrfix + dnlitter(nv,metb) = dnplant(nv,leaf) + dnplant(nv,froot) -dnlitter(nv,str) + dnlitter(nv,CWD) = dnplant(nv,wood) + ENDIF !end "icycle >1" + + IF(icycle > 2) THEN + dplitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot)* dcplant(nv,froot))* ratioPCstrfix + dplitter(nv,metb) = dpplant(nv,leaf) + dpplant(nv,froot)-dplitter(nv,str) + dplitter(nv,CWD) = dpplant(nv,wood) + ENDIF !of "icycle >2" + ENDIF + END DO + + clitter_g = clitter_g + dclitter + IF (icycle > 1) nlitter_g = nlitter_g + dnlitter + IF (icycle > 2) plitter_g = plitter_g + dplitter + + DO nv=1,mforest + IF (ifpre_y(nv)) THEN ! pft exist in the 2nd year + clitter_y(nv,:) = clitter_g(nv,:)/frac_y(nv) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_g(nv,:)/frac_y(nv) + IF (icycle > 2) plitter_y(nv,:) = plitter_g(nv,:)/frac_y(nv) + ENDIF + END DO + +END SUBROUTINE newlitter_thin + + +SUBROUTINE newplant(cplant_x,frac_x,ifpre_x, & + cplant_y,frac_y,ifpre_y,logc) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Re-allcate plant C,N,P pools to new patch array. +! Q.Zhang @ 29/05/2011 + USE cable_def_types_mod + USE casadimension + USE casaparm + + implicit none + + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) :: cplant_x,cplant_y + real(r_2),DIMENSION(mvtype),INTENT(inout) :: logc + ! local variable + integer p + + DO p = 1, mvtype + ! exist in both years + IF (ifpre_x(p) .and. ifpre_y(p)) THEN + IF (abs(frac_x(p)-0.0)<1.e-8 .or. abs(frac_y(p)-0.0)<1.e-8) THEN +print *, 'Lest Veg0', p,ifpre_x(p),ifpre_y(p),frac_x(p),frac_y(p) + STOP "vegetation fraction .eq. 0" + END IF + IF ((frac_x(p)-frac_y(p))>0.) THEN ! patch weight decrease + ! New pools + cplant_y(p,:) = cplant_x(p,:) + ! Save wood log + IF (p<=mlogmax) logc(p) = cplant_x(p,wood) * (frac_x(p) - frac_y(p)) + ELSE ! patch weight incease + cplant_y(p,:) = cplant_x(p,:)*frac_x(p)/frac_y(p) + END IF + ! plant clear in the second year + ELSEIF (ifpre_x(p) .and. .not.ifpre_y(p)) THEN + IF (p<=mlogmax) logc(p) = cplant_x(p,wood) * (frac_x(p) - frac_y(p)) + ! does not exist in both years + ELSE + + END IF + + END DO ! end pft loop + +END SUBROUTINE newplant + + +SUBROUTINE newsoil(nd,csoil_x,frac_x,ifpre_x,csoil_y,frac_y,ifpre_y) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Re-allocate soil C,N and P pools +! Q.Zhang @ 29/05/2011 +! L.stevens @ 19/01/2018 + USE cable_def_types_mod + USE casadimension + USE casaparm + + implicit none + + integer,INTENT(in) :: nd ! dimension of soil pool + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,nd),INTENT(inout) :: csoil_x,csoil_y +! local variable + real,DIMENSION(nd) :: tmpVar + real :: Rcount + real,DIMENSION(mvtype) :: dfrac + integer nv + + dfrac = frac_y - frac_x ! current minus previous + tmpVar = 0.0 + Rcount = 0.0 + + DO nv=1,mvtype + IF (dfrac(nv)<0.0) THEN + tmpVar = tmpVar + ABS(dfrac(nv))*csoil_x(nv,:) + Rcount = Rcount + ABS(dfrac(nv)) + ENDIF + END DO + if (Rcount > 0) tmpVar = tmpVar/Rcount + + DO nv=1,mvtype + IF (dfrac(nv) > 0.0) THEN ! pft exist in the 2nd year + csoil_y(nv,:) = (dfrac(nv)*tmpVar + & + csoil_x(nv,:) * frac_x(nv)) / frac_y(nv) + ELSE + csoil_y(nv,:) = csoil_x(nv,:) + ENDIF + END DO + +END SUBROUTINE newsoil + +End module landuse_mod +#endif From 4ec8c8fd2c9ac27dfc57f82ae247123a96781b55 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:19:36 +1000 Subject: [PATCH 41/98] Rejig library config for AM3 --- CMakeLists.txt | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 354051dd0..c037c6ef3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,19 +106,6 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/params/cable_phys_constants_mod.F90 - src/params/grid_constants_cbl.F90 - src/params/cable_photo_constants_mod.F90 - src/params/cable_other_constants_mod.F90 - src/params/cable_maths_constants_mod.F90 - src/util/cable_runtime_opts_mod.F90 - src/util/cable_common.F90 - src/coupled/shared/cable_canopy_type_mod.F90 - src/coupled/shared/cable_soilsnow_type_mod.F90 - src/coupled/shared/cable_soil_type_mod.F90 - src/coupled/shared/cable_veg_type_mod.F90 - src/util/cable_climate_type_mod.F90 - src/util/masks_cbl.F90 ) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") @@ -130,6 +117,19 @@ if(CABLE_LIBRARY) src/coupled/esm/cable_pft_params_mod.F90 src/coupled/esm/casa_landuse.F90 src/coupled/esm/LAI_canopy_height_cbl.F90 + src/params/cable_phys_constants_mod.F90 + src/params/grid_constants_cbl.F90 + src/params/cable_photo_constants_mod.F90 + src/params/cable_other_constants_mod.F90 + src/params/cable_maths_constants_mod.F90 + src/util/cable_runtime_opts_mod.F90 + src/util/cable_common.F90 + src/coupled/shared/cable_canopy_type_mod.F90 + src/coupled/shared/cable_soilsnow_type_mod.F90 + src/coupled/shared/cable_soil_type_mod.F90 + src/coupled/shared/cable_veg_type_mod.F90 + src/util/cable_climate_type_mod.F90 + src/util/masks_cbl.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) @@ -138,7 +138,14 @@ if(CABLE_LIBRARY) else() message(STATUS "Cannot compile library with unknown compiler") endif() - + elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") + if (CMAKE_Fortran_COMPILER_ID MATHCES "Intel") + add_compile_options(-r8 -i8) + elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + add_compile_options(-fdefault-real-8 -fdefault-integer-8 -fdefault-double-8) + else() + message(STATUS "Cannot compile library with unknown compiler") + endif() else() message(STATUS "Specified library application does not exist") endif() From 3235b1c037e57718c9cc6c3408362c88caca1a7f Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:39:18 +1000 Subject: [PATCH 42/98] Add library manifests to CI --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 849f76700..1a06e1483 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,9 @@ jobs: spack-manifest-path: - .github/build-ci/manifests/gcc.spack.yaml.j2 - .github/build-ci/manifests/intel.spack.yaml.j2 - uses: access-nri/build-ci/.github/workflows/ci-github-hosted.yml@v2 + - .github/build-ci/manifests/library-gcc.spack.yaml.j2 + - .github/build-ci/manifests/library-intel.spack.yaml.j2 + uses: access-nri/build-ci/.github/workflows/ci.yml@v3 with: spack-manifest-path: ${{ matrix.spack-manifest-path }} spack-config-ref: 2025.11.000 # Before build-ci@v2-breaking change to spack-config, don't go any further forward! From 4179d4d0c1e785dd130c18c51ddab081c300cf1a Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 14:43:59 +1000 Subject: [PATCH 43/98] Add library manifests to CI --- .../manifests/library-gcc.spack.yaml.j2 | 17 +++++++++++++++++ .../manifests/library-intel.spack.yaml.j2 | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/build-ci/manifests/library-gcc.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/library-intel.spack.yaml.j2 diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 new file mode 100644 index 000000000..272eeb171 --- /dev/null +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + # package is defined in the workflows inputs.spack-manifest-data-pairs + # gcc_compiler_ver is defined in the standard_definitions.json data file + - '{{ package }} +mpi library=access3' + - '{{ package }} ~mpi library=access3' + packages: + gcc: + require: + - '{{ gcc_compiler_ver }}' + all: + require: + - '%access_gcc' + - 'target={{ target }}' + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 new file mode 100644 index 000000000..dd2565bae --- /dev/null +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + # package is defined in the workflows inputs.spack-manifest-data-pairs + # intel_compiler_ver is defined in the standard_definitions.json data file + - '{{ package }} +mpi library=access3' + - '{{ package }} ~mpi library=access3' + packages: + intel-oneapi-compilers-classic: + require: + - '{{ intel_compiler_ver }}' + all: + require: + - '%access_intel' + - 'target={{ target }}' + concretizer: + unify: false + view: false From 894a7bb88a5a92fc89bda993bc318ff8caadefdb Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 15:37:31 +1000 Subject: [PATCH 44/98] Remove templates taken from spack-packages --- .github/build-ci/manifests/library-gcc.spack.yaml.j2 | 8 ++++---- .github/build-ci/manifests/library-intel.spack.yaml.j2 | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 index 272eeb171..9195ff0ea 100644 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -2,16 +2,16 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # gcc_compiler_ver is defined in the standard_definitions.json data file - - '{{ package }} +mpi library=access3' - - '{{ package }} ~mpi library=access3' + - 'cable@git.{{ ref }} +mpi library=access3' + - 'cable@git.{{ ref }} ~mpi library=access3' packages: gcc: require: - - '{{ gcc_compiler_ver }}' + - '@13.2.0' all: require: - '%access_gcc' - - 'target={{ target }}' + - 'target=x86_64 concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 index dd2565bae..050fee6fa 100644 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -2,16 +2,16 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # intel_compiler_ver is defined in the standard_definitions.json data file - - '{{ package }} +mpi library=access3' - - '{{ package }} ~mpi library=access3' + - 'cable@git.{{ ref }} +mpi library=access3' + - 'cable@git.{{ ref }} ~mpi library=access3' packages: intel-oneapi-compilers-classic: require: - - '{{ intel_compiler_ver }}' + - '@2021.10.0' all: require: - '%access_intel' - - 'target={{ target }}' + - 'target=x86_64' concretizer: unify: false view: false From 02a30fb40ba4b951d496823d2445c7da82ce0f28 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 15:56:17 +1000 Subject: [PATCH 45/98] Fix quotes --- .github/build-ci/manifests/library-gcc.spack.yaml.j2 | 6 +++--- .github/build-ci/manifests/library-intel.spack.yaml.j2 | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 index 9195ff0ea..a6cda21ee 100644 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 @@ -2,8 +2,8 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # gcc_compiler_ver is defined in the standard_definitions.json data file - - 'cable@git.{{ ref }} +mpi library=access3' - - 'cable@git.{{ ref }} ~mpi library=access3' + - cable@git.{{ ref }} +mpi library=access3 + - cable@git.{{ ref }} ~mpi library=access3 packages: gcc: require: @@ -11,7 +11,7 @@ spack: all: require: - '%access_gcc' - - 'target=x86_64 + - target=x86_64 concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 index 050fee6fa..b9c351dca 100644 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ b/.github/build-ci/manifests/library-intel.spack.yaml.j2 @@ -2,8 +2,8 @@ spack: specs: # package is defined in the workflows inputs.spack-manifest-data-pairs # intel_compiler_ver is defined in the standard_definitions.json data file - - 'cable@git.{{ ref }} +mpi library=access3' - - 'cable@git.{{ ref }} ~mpi library=access3' + - cable@git.{{ ref }} +mpi library=access3 + - cable@git.{{ ref }} ~mpi library=access3 packages: intel-oneapi-compilers-classic: require: @@ -11,7 +11,7 @@ spack: all: require: - '%access_intel' - - 'target=x86_64' + - target=x86_64 concretizer: unify: false view: false From 4ae5a9a405bda711db42b24b01d56d69f9a5d24a Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:04:32 +1000 Subject: [PATCH 46/98] Misspelled matches --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c037c6ef3..34e8f14a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,7 +139,7 @@ if(CABLE_LIBRARY) message(STATUS "Cannot compile library with unknown compiler") endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") - if (CMAKE_Fortran_COMPILER_ID MATHCES "Intel") + if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") add_compile_options(-fdefault-real-8 -fdefault-integer-8 -fdefault-double-8) From e094b8b723a7e9d00b3020a5aadfb762a35a5128 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:26:26 +1000 Subject: [PATCH 47/98] Move some files to common library --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34e8f14a5..801cf1934 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,6 +106,15 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 + src/params/cable_phys_constants_mod.F90 + src/params/grid_constants_cbl.F90 + src/params/cable_photo_constants_mod.F90 + src/params/cable_other_constants_mod.F90 + src/params/cable_maths_constants_mod.F90 + src/util/cable_runtime_opts_mod.F90 + src/util/cable_common.F90 + src/util/cable_climate_type_mod.F90 + src/util/masks_cbl.F90 ) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") @@ -117,19 +126,10 @@ if(CABLE_LIBRARY) src/coupled/esm/cable_pft_params_mod.F90 src/coupled/esm/casa_landuse.F90 src/coupled/esm/LAI_canopy_height_cbl.F90 - src/params/cable_phys_constants_mod.F90 - src/params/grid_constants_cbl.F90 - src/params/cable_photo_constants_mod.F90 - src/params/cable_other_constants_mod.F90 - src/params/cable_maths_constants_mod.F90 - src/util/cable_runtime_opts_mod.F90 - src/util/cable_common.F90 src/coupled/shared/cable_canopy_type_mod.F90 src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 - src/util/cable_climate_type_mod.F90 - src/util/masks_cbl.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From d2435772773a1673f202c2a53b2ed4e62509ef8d Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 22 May 2026 17:43:21 +1000 Subject: [PATCH 48/98] Add type files to library --- CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 801cf1934..81ea1a5fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,6 +139,23 @@ if(CABLE_LIBRARY) message(STATUS "Cannot compile library with unknown compiler") endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") + list(APPEND SOURCES + src/coupled/AM3/control/CM3/air_type.F90 + src/coupled/AM3/control/CM3/balances_type.F90 + src/coupled/AM3/control/CM3/bgc_pool_type.F90 + src/coupled/AM3/control/CM3/cable_define_types.F90 + src/coupled/AM3/control/CM3/cbl_canopy_type.F90 + src/coupled/AM3/control/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/CM3/climate_type.F90 + src/coupled/AM3/control/CM3/met_type_cbl.F90 + src/coupled/AM3/control/CM3/radiation_type.F90 + src/coupled/AM3/control/CM3/read_cable_namelists_mod.F90 + src/coupled/AM3/control/CM3/roughness_type.F90 + src/coupled/AM3/control/CM3/soil_type_cbl.F90 + src/coupled/AM3/control/CM3/ssnow_type.F90 + src/coupled/AM3/control/CM3/sum_flux_type.F90 + src/coupled/AM3/control/CM3/veg_type.F90 + ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") From dc2e041952272359c0fcc27919266d4f7538da9a Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:22:34 +1000 Subject: [PATCH 49/98] Fix some file names --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81ea1a5fc..a6af7ad47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,21 +140,21 @@ if(CABLE_LIBRARY) endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") list(APPEND SOURCES - src/coupled/AM3/control/CM3/air_type.F90 - src/coupled/AM3/control/CM3/balances_type.F90 - src/coupled/AM3/control/CM3/bgc_pool_type.F90 - src/coupled/AM3/control/CM3/cable_define_types.F90 - src/coupled/AM3/control/CM3/cbl_canopy_type.F90 - src/coupled/AM3/control/CM3/cable_cbm_mod.F90 - src/coupled/AM3/control/CM3/climate_type.F90 - src/coupled/AM3/control/CM3/met_type_cbl.F90 - src/coupled/AM3/control/CM3/radiation_type.F90 - src/coupled/AM3/control/CM3/read_cable_namelists_mod.F90 - src/coupled/AM3/control/CM3/roughness_type.F90 - src/coupled/AM3/control/CM3/soil_type_cbl.F90 - src/coupled/AM3/control/CM3/ssnow_type.F90 - src/coupled/AM3/control/CM3/sum_flux_type.F90 - src/coupled/AM3/control/CM3/veg_type.F90 + src/coupled/AM3/control/cable/CM3/air_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/balances_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 + src/coupled/AM3/control/cable/CM3/cable_define_types.F90 + src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 + src/coupled/AM3/control/cable/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/cable/CM3/climate_type.F90 + src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/radiation_type.F90 + src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 + src/coupled/AM3/control/cable/CM3/roughness_type.F90 + src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 + src/coupled/AM3/control/cable/CM3/ssnow_type.F90 + src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 + src/coupled/AM3/control/cable/CM3/veg_type.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 023a5f4f0ef699cfb10e43cd6497a6e9fc9f8a3d Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:33:44 +1000 Subject: [PATCH 50/98] Fix more file names --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6af7ad47..8ef0ad0ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -145,7 +145,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 src/coupled/AM3/control/cable/CM3/cable_define_types.F90 src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 - src/coupled/AM3/control/cable/CM3/cable_cbm_mod.F90 + src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 src/coupled/AM3/control/cable/CM3/climate_type.F90 src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 src/coupled/AM3/control/cable/CM3/radiation_type.F90 From 4fb34edf366f6fc62e305f2288bbdf4b8173c965 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 09:54:08 +1000 Subject: [PATCH 51/98] Drop coupled namelists mod --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ef0ad0ba..6c762206a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,7 +149,6 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/climate_type.F90 src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 src/coupled/AM3/control/cable/CM3/radiation_type.F90 - src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 src/coupled/AM3/control/cable/CM3/roughness_type.F90 src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 src/coupled/AM3/control/cable/CM3/ssnow_type.F90 From 106cbc378db735207440ffff5b54f940616d2385 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 10:08:40 +1000 Subject: [PATCH 52/98] Add surface types mod --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c762206a..c61d8c69d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 + src/coupled/AM3/control/shared/cable_surface_types_mod.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 976c0d1ac7d242164582c269a760cc9764044e21 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 10:18:19 +1000 Subject: [PATCH 53/98] Fix name --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c61d8c69d..fddf35968 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,7 +154,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 - src/coupled/AM3/control/shared/cable_surface_types_mod.F90 + src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From ac97bcaf2cc750239f9d381a775c029b42d8b299 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:33:44 +1000 Subject: [PATCH 54/98] use new cable_surface_types_mod.F90 --- .../cable/shared/cable_surface_types_mod.F90 | 402 ++---------------- 1 file changed, 35 insertions(+), 367 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1c1f808c0..02e9fb0bf 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -1,377 +1,45 @@ -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* - MODULE cable_surface_types_mod -!----------------------------------------------------------------------------- -! Description: -! Contains CABLE surface type information and a namelist for setting them -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -USE max_dimensions, ONLY: & - elev_tile_max, & - ntype_max - -USE missing_data_mod, ONLY: imdi - -!----------------------------------------------------------------------------- -! Module variables. -!----------------------------------------------------------------------------- -USE jules_surface_types_mod, ONLY: & - nnpft, & - ncpft, & - npft, & - nnvg, & - ntype, & - urban, & - lake, & - soil, & - ice - -IMPLICIT NONE - -! Index of the various surface types used by CABLE" -INTEGER :: & - evergreen_needleleaf = imdi, & - evergreen_broadleaf = imdi, & - deciduous_needleleaf = imdi, & - deciduous_broadleaf = imdi, & - shrub_cable = imdi, & - c3_grassland = imdi, & - c4_grassland = imdi, & - tundra = imdi, & - c3_cropland = imdi, & - c4_cropland = imdi, & - wetland = imdi, & - empty1 = imdi, & - empty2 = imdi, & - barren_cable = imdi, & - urban_cable = imdi, & - lakes_cable = imdi, & - ice_cable = imdi - -!----------------------------------------------------------------------------- -! Single namelist definition for UM and standalone -!----------------------------------------------------------------------------- -NAMELIST / cable_surface_types/ & - npft, nnvg, & - evergreen_needleleaf, evergreen_broadleaf, deciduous_needleleaf, & - deciduous_broadleaf, shrub_cable, c3_grassland, c4_grassland, & - tundra, c3_cropland, c4_cropland, wetland, empty1, empty2, & - barren_cable, urban_cable, lakes_cable, ice_cable - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='CABLE_SURFACE_TYPES_MOD' + IMPLICIT NONE + + PUBLIC + + ! cable_surface_type (nml) Index + INTEGER, PARAMETER :: evergreen_needleleaf = 1 + INTEGER, PARAMETER :: evergreen_broadleaf = 2 + INTEGER, PARAMETER :: deciduous_needleleaf = 3 + INTEGER, PARAMETER :: deciduous_broadleaf = 4 + INTEGER, PARAMETER :: shrub_cable = 5 + INTEGER, PARAMETER :: c3_grassland = 6 + INTEGER, PARAMETER :: c4_grassland = 7 + INTEGER, PARAMETER :: tundra = 8 + INTEGER, PARAMETER :: c3_cropland = 9 + INTEGER, PARAMETER :: c4_cropland = 10 + INTEGER, PARAMETER :: wetland = 11 + INTEGER, PARAMETER :: aust_mesic = 12 + INTEGER, PARAMETER :: aust_xeric = 13 + INTEGER, PARAMETER :: barren_cable = 14 + INTEGER, PARAMETER :: urban_cable = 15 + INTEGER, PARAMETER :: lakes_cable = 16 + INTEGER, PARAMETER :: ice_cable = 17 CONTAINS -SUBROUTINE check_surface_type_value ( surface_type, surface_type_name, & - min_value, max_value, RoutineName, errorstatus, nchecks ) - -USE jules_print_mgr, ONLY: jules_print - -IMPLICIT NONE - -INTEGER :: surface_type, min_value, max_value, errorstatus, nchecks -CHARACTER(LEN=*) :: surface_type_name, RoutineName - -IF ( surface_type > 0 ) THEN - nchecks = nchecks + 1 - IF ( surface_type < min_value .OR. surface_type > max_value ) THEN - errorstatus = 101 - CALL jules_print(RoutineName, & - TRIM(surface_type_name) // " tile is given but is out of range") - END IF -END IF - -END SUBROUTINE check_surface_type_value - -SUBROUTINE print_nlist_cable_surface_types() - -USE jules_print_mgr, ONLY: jules_print - -IMPLICIT NONE - -INTEGER :: i, n ! Loop counter - -CHARACTER(LEN=50000) :: lineBuffer - - -!----------------------------------------------------------------------------- -! This needs to be implemented corresponding to cable_surface_types -CALL jules_print('cable_surface_types', & - 'Contents of namelist cable_surface_types') - -!WRITE(lineBuffer, *) ' npft = ', npft -!CALL jules_print('cable_surface_types', lineBuffer) - -!IF ( brd_leaf > 0 ) THEN -! WRITE(lineBuffer, *) ' brd_leaf = ', brd_leaf -! CALL jules_print('cable_surface_types', lineBuffer) -!END IF - -!WRITE(lineBuffer, *) ' = ', -!CALL jules_print('cable_surface_types', lineBuffer) - -!IF ( > 0 ) THEN -! WRITE(lineBuffer, *) ' = ', -! CALL jules_print('cable_surface_types', lineBuffer) -!END IF - -CALL jules_print('cable_surface_types', & - '- - - - - - end of namelist - - - - - -') - -END SUBROUTINE print_nlist_cable_surface_types - - - -SUBROUTINE set_derived_variables_cable_surface_types() - -USE jules_print_mgr, ONLY: jules_print, jules_message - -IMPLICIT NONE - -!----------------------------------------------------------------------------- -! Derive ntype and nnpft from the namelist values -!----------------------------------------------------------------------------- -ntype = npft + nnvg -nnpft = npft - ncpft - -CALL jules_print('set_derived_variables_cable_surface_types', & - 'Derived variables from cable_surface_types') - -!WRITE(jules_message, *) ' ntype = ', ntype -!CALL jules_print('set_derived_variables_cable_surface_types', jules_message) -! -!WRITE(jules_message, *) ' nnpft = ', nnpft -!CALL jules_print('set_derived_variables_cable_surface_types', jules_message) - -CALL jules_print('set_derived_variables_cable_surface_types', & - '- - - - - - end of derived variables - - - - - -') - -RETURN - -END SUBROUTINE set_derived_variables_cable_surface_types - - - -SUBROUTINE check_cable_surface_types() - -USE max_dimensions, ONLY: npft_max, ncpft_max, nnvg_max - -USE ereport_mod, ONLY: ereport -USE jules_print_mgr, ONLY: jules_print, jules_message - -!----------------------------------------------------------------------------- -! Description: -! Checks cable_surface_types namelist for consistency -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE - -INTEGER :: i, nchecks ! Loop counter - -INTEGER :: errorstatus - -CHARACTER(LEN=*), PARAMETER :: & - RoutineName = 'CHECK_CABLE_SURFACE_TYPES' -!----------------------------------------------------------------------------- -! Check that the given values are less than the fixed values for IO -!----------------------------------------------------------------------------- -IF ( npft > npft_max ) THEN - errorstatus = 101 - CALL ereport(RoutineName, errorstatus, & - "npft > npft_max - increase npft_max and recompile") -END IF - -IF ( nnvg > nnvg_max ) THEN - errorstatus = 101 - CALL ereport(RoutineName, errorstatus, & - "nnvg > nnvg_max - increase nnvg_max and recompile") -END IF - -!----------------------------------------------------------------------------- -! Check values for the specific surface types are sensible -!----------------------------------------------------------------------------- -! PFTs -errorstatus = 0 -nchecks = 0 - -!!CALL check_surface_type_value ( brd_leaf, "brd_leaf", 1, npft, & -!! RoutineName, errorstatus, nchecks ) -!!CALL check_surface_type_value ( , "", 1, npft, & -!! RoutineName, errorstatus, nchecks ) -! -!! PFT surface types must come before non-veg types, so if urban, lake, soil, -!! ice, urban_canyon or urban_roof are given (i.e. > 0) then they must be > npft -!! A soil type is required -!!CALL check_surface_type_value ( urban, "urban", npft+1, ntype, & -!! RoutineName, errorstatus, nchecks ) -!!CALL check_surface_type_value ( , "", npft+1, ntype, & -!! RoutineName, errorstatus, nchecks ) - -!jhan:this will need to be properly implemented -nchecks = 17 -! Check that all present surface types have been checked for range compliance -! This check should also ensure that a check is added for each new surface type -IF ( nchecks /= ntype ) THEN - errorstatus = 101 - CALL jules_print(RoutineName, & - "At least one surface type in namelist does not have a range check.") - WRITE(jules_message,'(A,I0,A,I0)') & - "These should be the same; ntype = ", ntype, ", nchecks = ", nchecks - CALL jules_print(RoutineName, jules_message) -END IF - -! Now that all surface types have been checked issue abort if required -IF ( errorstatus > 0 ) THEN - CALL ereport(RoutineName, errorstatus, & - "Error(s) found. Please see job.out for information ") -END IF - -END SUBROUTINE check_cable_surface_types - -SUBROUTINE read_nml_cable_surface_types (unitnumber) - -! Description: -! Read the CABLE_SURFACE_TYPES namelist - -USE setup_namelist, ONLY: setup_nml_type -USE check_iostat_mod, ONLY: check_iostat -USE UM_parcore, ONLY: mype -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE errormessagelength_mod, ONLY: errormessagelength - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: unitnumber -INTEGER :: my_comm -INTEGER :: mpl_nml_type -INTEGER :: ErrorStatus -INTEGER :: icode -CHARACTER(LEN=errormessagelength) :: iomessage -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_CABLE_SURFACE_TYPES' -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 - -! set number of each type of variable in my_namelist type -INTEGER, PARAMETER :: no_of_types = 1 -INTEGER, PARAMETER :: n_int = 19 !+ ntype_max - -TYPE my_namelist - !!SEQUENCE - INTEGER :: npft - INTEGER :: nnvg - INTEGER :: evergreen_needleleaf - INTEGER :: evergreen_broadleaf - INTEGER :: deciduous_needleleaf - INTEGER :: deciduous_broadleaf - INTEGER :: shrub_cable - INTEGER :: c3_grassland - INTEGER :: c4_grassland - INTEGER :: tundra - INTEGER :: c3_cropland - INTEGER :: c4_cropland - INTEGER :: wetland - INTEGER :: empty1 - INTEGER :: empty2 - INTEGER :: barren_cable - INTEGER :: urban_cable - INTEGER :: lakes_cable - INTEGER :: ice_cable - !INTEGER :: tile_map_ids(ntype_max) -END TYPE my_namelist - -TYPE (my_namelist) :: my_nml - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL gc_get_communicator(my_comm, icode) - -CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int) - -IF (mype == 0) THEN - - READ (UNIT = unitnumber, NML = cable_surface_types, IOSTAT = errorstatus, & - IOMSG = iomessage) - CALL check_iostat(errorstatus, "namelist cable_surface_types",iomessage) - - my_nml % npft = npft - my_nml % nnvg = nnvg - my_nml % evergreen_needleleaf = evergreen_needleleaf - my_nml % evergreen_broadleaf = evergreen_broadleaf - my_nml % deciduous_needleleaf = deciduous_needleleaf - my_nml % deciduous_broadleaf = deciduous_broadleaf - my_nml % shrub_cable = shrub_cable - my_nml % c3_grassland = c3_grassland - my_nml % c4_grassland = c4_grassland - my_nml % tundra = tundra - my_nml % c3_cropland = c3_cropland - my_nml % c4_cropland = c4_cropland - my_nml % wetland = wetland - my_nml % empty1 = empty1 - my_nml % empty2 = empty2 - my_nml % barren_cable = barren_cable - my_nml % urban_cable = urban_cable - my_nml % lakes_cable = lakes_cable - my_nml % ice_cable = ice_cable - -END IF - -CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) - -IF (mype /= 0) THEN - - npft = my_nml % npft - nnvg = my_nml % nnvg - evergreen_needleleaf = my_nml % evergreen_needleleaf - evergreen_broadleaf = my_nml % evergreen_broadleaf - deciduous_needleleaf = my_nml % deciduous_needleleaf - deciduous_broadleaf = my_nml % deciduous_broadleaf - shrub_cable = my_nml % shrub_cable - c3_grassland = my_nml % c3_grassland - c4_grassland = my_nml % c4_grassland - tundra = my_nml % tundra - c3_cropland = my_nml % c3_cropland - c4_cropland = my_nml % c4_cropland - wetland = my_nml % wetland - empty1 = my_nml % empty1 - empty2 = my_nml % empty2 - barren_cable = my_nml %barren_cable - urban_cable = my_nml % urban_cable - lakes_cable = my_nml % lakes_cable - ice_cable = my_nml % ice_cable + SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& + soil, ice) + INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& + soil, ice -END IF + npft = 13 + nnvg = 4 + urban = urban_cable + lake = lake_cable + soil = barren_cable + ice = ice_cable -CALL mpl_type_free(mpl_nml_type,icode) + ntype = npft - nnvg + nnpft = npft - ncpft -soil = barren_cable -ice = ice_cable -lake = lakes_cable -urban = urban_cable - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE read_nml_cable_surface_types + END SUBROUTINE set_JULES_PFT_info END MODULE cable_surface_types_mod From c754e2c4d87231fc72196417bc208d8c525550cd Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:51:03 +1000 Subject: [PATCH 55/98] Wrong end subroutine name --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 02e9fb0bf..605274351 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -40,6 +40,6 @@ SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& ntype = npft - nnvg nnpft = npft - ncpft - END SUBROUTINE set_JULES_PFT_info + END SUBROUTINE set_JULES_surface_types END MODULE cable_surface_types_mod From 7ef5097c2b7a07da08afc72a9d369a03805c2409 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 16:54:37 +1000 Subject: [PATCH 56/98] Add stash mapping --- .../cable/shared/cable_surface_types_mod.F90 | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 605274351..47bce4379 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -6,14 +6,14 @@ MODULE cable_surface_types_mod ! cable_surface_type (nml) Index INTEGER, PARAMETER :: evergreen_needleleaf = 1 - INTEGER, PARAMETER :: evergreen_broadleaf = 2 + INTEGER, PARAMETER :: evergreen_broadleaf = 2 INTEGER, PARAMETER :: deciduous_needleleaf = 3 - INTEGER, PARAMETER :: deciduous_broadleaf = 4 + INTEGER, PARAMETER :: deciduous_broadleaf = 4 INTEGER, PARAMETER :: shrub_cable = 5 - INTEGER, PARAMETER :: c3_grassland = 6 - INTEGER, PARAMETER :: c4_grassland = 7 + INTEGER, PARAMETER :: c3_grassland = 6 + INTEGER, PARAMETER :: c4_grassland = 7 INTEGER, PARAMETER :: tundra = 8 - INTEGER, PARAMETER :: c3_cropland = 9 + INTEGER, PARAMETER :: c3_cropland = 9 INTEGER, PARAMETER :: c4_cropland = 10 INTEGER, PARAMETER :: wetland = 11 INTEGER, PARAMETER :: aust_mesic = 12 @@ -25,11 +25,30 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(nnpft, npft, nnvg, ntype, urban, lake,& - soil, ice) + SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& + ntype, urban, lake, soil, ice) + INTEGER, INTENT(INOUT) :: surface_type_ids INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& soil, ice + surface_type_ids(evergreen_needleleaf) = 1 + surface_type_ids(evergreen_broadleaf ) = 2 + surface_type_ids(deciduous_needleleaf) = 3 + surface_type_ids(deciduous_broadleaf ) = 4 + surface_type_ids(shrub_cable ) = 5 + surface_type_ids(c3_grassland ) = 6 + surface_type_ids(c4_grassland ) = 7 + surface_type_ids(tundra ) = 8 + surface_type_ids(c3_cropland ) = 9 + surface_type_ids(c4_cropland ) = 10 + surface_type_ids(wetland ) = 11 + surface_type_ids(aust_mesic ) = 12 + surface_type_ids(aust_xeric ) = 13 + surface_type_ids(barren_cable ) = 14 + surface_type_ids(urban_cable ) = 15 + surface_type_ids(lakes_cable ) = 16 + surface_type_ids(ice_cable ) = 17 + npft = 13 nnvg = 4 urban = urban_cable From 5e47793da1e739eb01964ce46b1f5da64d859f1e Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:07:40 +1000 Subject: [PATCH 57/98] Add ncpft back --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 47bce4379..8a7ec6a54 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -25,10 +25,10 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& - ntype, urban, lake, soil, ice) + SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& + nnvg, ntype, urban, lake, soil, ice) INTEGER, INTENT(INOUT) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake,& + INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& soil, ice surface_type_ids(evergreen_needleleaf) = 1 @@ -52,7 +52,7 @@ SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, npft, nnvg,& npft = 13 nnvg = 4 urban = urban_cable - lake = lake_cable + lake = lakes_cable soil = barren_cable ice = ice_cable From fe9b898edeb9432aabfbc236ebf47a0105bd2e59 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:26:24 +1000 Subject: [PATCH 58/98] Add dimension declaration --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 8a7ec6a54..181468adc 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -27,7 +27,7 @@ MODULE cable_surface_types_mod SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& nnvg, ntype, urban, lake, soil, ice) - INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& soil, ice From dcf009cb00932b4df0899232e4826a8225507902 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 26 May 2026 17:50:35 +1000 Subject: [PATCH 59/98] Remove CASA IO from library --- CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fddf35968..55695c6cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,15 +64,12 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_cnp.F90 src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 - src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 src/science/casa-cnp/casa_phenology.F90 src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 src/science/casa-cnp/casa_variable.F90 - src/science/landuse/landuse3.F90 - src/science/landuse/landuse_constant.F90 src/science/misc/cable_air.F90 src/science/misc/cable_carbon.F90 src/science/misc/cable_climate.F90 @@ -130,6 +127,8 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 + src/science/landuse/landuse3.F90 + src/science/landuse/landuse_constant.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From c93562d3426ee481c22f71a1f3b751a490309515 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 09:16:00 +1000 Subject: [PATCH 60/98] Readd landuse --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55695c6cf..e2344cecc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,8 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 + src/science/landuse/landuse.F90 + src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 src/params/cable_photo_constants_mod.F90 From c2747672b76874adb4317324a0a3ca4d03103bce Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 09:56:16 +1000 Subject: [PATCH 61/98] Fix file name --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2344cecc..c20907f44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,8 +103,8 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/science/landuse/landuse.F90 - src/science/landuse/landuse_constant.F90 + src/science/landuse/landuse3.F90 + src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 src/params/cable_photo_constants_mod.F90 From b9db7a2b09c896519484a435ba8b5a1d48b49673 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 10:19:29 +1000 Subject: [PATCH 62/98] Add cable_iovars.F90 to the build with slight adjustment --- CMakeLists.txt | 5 ++--- src/offline/cable_iovars.F90 | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c20907f44..7c93f2ab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,8 +129,6 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 - src/science/landuse/landuse3.F90 - src/science/landuse/landuse_constant.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) @@ -155,7 +153,8 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 - src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) diff --git a/src/offline/cable_iovars.F90 b/src/offline/cable_iovars.F90 index a2ca5247a..be27cb644 100644 --- a/src/offline/cable_iovars.F90 +++ b/src/offline/cable_iovars.F90 @@ -93,6 +93,15 @@ MODULE cable_IO_vars_module max_vegpatches, & ! The maximum # of patches in any grid cell nmetpatches ! size of patch dimension in met file, if exists + INTEGER :: land_decomp_start = 1 + !! Starting land point index of this MPI rank in global land array + INTEGER :: land_decomp_end + !! Ending land point index of this MPI rank in global land array + INTEGER :: patch_decomp_start + !! Starting patch index of this MPI rank in global patch array + INTEGER :: patch_decomp_end + !! Ending patch index of this MPI rank in global patch array + ! =============== File details ========================== TYPE globalMet_type LOGICAL :: & @@ -553,4 +562,18 @@ SUBROUTINE set_group_output_values END SUBROUTINE set_group_output_values +<<<<<<< HEAD +======= + FUNCTION to_land_index_global(land_index_local) RESULT(land_index_global) + !! Translate local land index on current MPI rank to global land index + INTEGER, INTENT(IN) :: land_index_local + INTEGER :: land_index_global +#ifdef UM_CBL + land_index_global = land_index_local +#else + land_index_global = land_decomp_start + land_index_local - 1 +#endif + END FUNCTION to_land_index_global + +>>>>>>> feb632be (Add cable_iovars.F90 to the build with slight adjustment) END MODULE cable_IO_vars_module From 2df4cd600806a4a918abf8df9f5eb32235fd3060 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 27 May 2026 10:56:18 +1000 Subject: [PATCH 63/98] Readd casa_inout --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c93f2ab5..6e3c40b66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,7 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_cnp.F90 src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 + src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 src/science/casa-cnp/casa_phenology.F90 src/science/casa-cnp/casa_readbiome.F90 From 7c485cc95931a0f6125eed7caad56abb4c863fa4 Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 27 May 2026 11:46:22 +1000 Subject: [PATCH 64/98] Library now builds --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 3 ++- src/science/soilsnow/cbl_GW.F90 | 1 + src/science/soilsnow/cbl_Oldconductivity.F90 | 2 ++ src/science/soilsnow/cbl_conductivity.F90 | 1 + src/science/soilsnow/cbl_hyd_redistrib.F90 | 1 + src/science/soilsnow/cbl_remove_trans.F90 | 1 + src/science/soilsnow/cbl_smoisturev.F90 | 1 + src/science/soilsnow/cbl_snowAccum.F90 | 1 + src/science/soilsnow/cbl_snowCheck.F90 | 1 + src/science/soilsnow/cbl_snowDensity.F90 | 1 + src/science/soilsnow/cbl_snowMelt.F90 | 1 + src/science/soilsnow/cbl_snowl_adjust.F90 | 1 + src/science/soilsnow/cbl_soilfreeze.F90 | 1 + src/science/soilsnow/cbl_soilsnow_data.F90 | 3 --- src/science/soilsnow/cbl_soilsnow_init_special.F90 | 1 + src/science/soilsnow/cbl_soilsnow_main.F90 | 1 + src/science/soilsnow/cbl_stempv.F90 | 1 + src/science/soilsnow/cbl_surfbv.F90 | 1 + src/science/soilsnow/cbl_thermal.F90 | 1 + src/science/soilsnow/cbl_trimb.F90 | 3 ++- 20 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 181468adc..48fb78dca 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -28,8 +28,9 @@ MODULE cable_surface_types_mod SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& nnvg, ntype, urban, lake, soil, ice) INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvg, ntype, urban, lake,& + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake,& soil, ice + INTEGER, INTENT(IN) :: ncpft surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 diff --git a/src/science/soilsnow/cbl_GW.F90 b/src/science/soilsnow/cbl_GW.F90 index 6511b3017..51d81e0a6 100644 --- a/src/science/soilsnow/cbl_GW.F90 +++ b/src/science/soilsnow/cbl_GW.F90 @@ -1,6 +1,7 @@ MODULE GWstempv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC GWstempv diff --git a/src/science/soilsnow/cbl_Oldconductivity.F90 b/src/science/soilsnow/cbl_Oldconductivity.F90 index 972132e66..25f65b1b2 100644 --- a/src/science/soilsnow/cbl_Oldconductivity.F90 +++ b/src/science/soilsnow/cbl_Oldconductivity.F90 @@ -1,6 +1,8 @@ MODULE old_soil_conductivity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod + CONTAINS diff --git a/src/science/soilsnow/cbl_conductivity.F90 b/src/science/soilsnow/cbl_conductivity.F90 index 545ba46f5..9d96c8494 100644 --- a/src/science/soilsnow/cbl_conductivity.F90 +++ b/src/science/soilsnow/cbl_conductivity.F90 @@ -2,6 +2,7 @@ MODULE total_soil_conductivity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC total_soil_conductivity diff --git a/src/science/soilsnow/cbl_hyd_redistrib.F90 b/src/science/soilsnow/cbl_hyd_redistrib.F90 index f63700a4d..918be58fb 100644 --- a/src/science/soilsnow/cbl_hyd_redistrib.F90 +++ b/src/science/soilsnow/cbl_hyd_redistrib.F90 @@ -1,6 +1,7 @@ MODULE hydraulic_redistribution_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC hydraulic_redistribution diff --git a/src/science/soilsnow/cbl_remove_trans.F90 b/src/science/soilsnow/cbl_remove_trans.F90 index d7ce9f6a7..ae50e5b89 100644 --- a/src/science/soilsnow/cbl_remove_trans.F90 +++ b/src/science/soilsnow/cbl_remove_trans.F90 @@ -1,6 +1,7 @@ MODULE remove_trans_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC remove_trans diff --git a/src/science/soilsnow/cbl_smoisturev.F90 b/src/science/soilsnow/cbl_smoisturev.F90 index 635e4f06b..0d6dd167e 100644 --- a/src/science/soilsnow/cbl_smoisturev.F90 +++ b/src/science/soilsnow/cbl_smoisturev.F90 @@ -1,6 +1,7 @@ MODULE smoisturev_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC smoisturev diff --git a/src/science/soilsnow/cbl_snowAccum.F90 b/src/science/soilsnow/cbl_snowAccum.F90 index a6e7f711e..3dcaff7f0 100644 --- a/src/science/soilsnow/cbl_snowAccum.F90 +++ b/src/science/soilsnow/cbl_snowAccum.F90 @@ -1,6 +1,7 @@ MODULE snow_accum_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_accum diff --git a/src/science/soilsnow/cbl_snowCheck.F90 b/src/science/soilsnow/cbl_snowCheck.F90 index 2b4d64800..84c27331c 100644 --- a/src/science/soilsnow/cbl_snowCheck.F90 +++ b/src/science/soilsnow/cbl_snowCheck.F90 @@ -1,6 +1,7 @@ MODULE snowcheck_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowcheck diff --git a/src/science/soilsnow/cbl_snowDensity.F90 b/src/science/soilsnow/cbl_snowDensity.F90 index e7674c68c..ba4e2cd53 100644 --- a/src/science/soilsnow/cbl_snowDensity.F90 +++ b/src/science/soilsnow/cbl_snowDensity.F90 @@ -1,6 +1,7 @@ MODULE snowdensity_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowdensity diff --git a/src/science/soilsnow/cbl_snowMelt.F90 b/src/science/soilsnow/cbl_snowMelt.F90 index 12ac79caa..4cefb68e4 100644 --- a/src/science/soilsnow/cbl_snowMelt.F90 +++ b/src/science/soilsnow/cbl_snowMelt.F90 @@ -1,6 +1,7 @@ MODULE snow_melting_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_melting diff --git a/src/science/soilsnow/cbl_snowl_adjust.F90 b/src/science/soilsnow/cbl_snowl_adjust.F90 index 023f2f50c..201399109 100644 --- a/src/science/soilsnow/cbl_snowl_adjust.F90 +++ b/src/science/soilsnow/cbl_snowl_adjust.F90 @@ -1,6 +1,7 @@ MODULE snowl_adjust_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snowl_adjust diff --git a/src/science/soilsnow/cbl_soilfreeze.F90 b/src/science/soilsnow/cbl_soilfreeze.F90 index a1b1a3cde..9d5df0f0f 100644 --- a/src/science/soilsnow/cbl_soilfreeze.F90 +++ b/src/science/soilsnow/cbl_soilfreeze.F90 @@ -1,6 +1,7 @@ MODULE soilfreeze_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC soilfreeze diff --git a/src/science/soilsnow/cbl_soilsnow_data.F90 b/src/science/soilsnow/cbl_soilsnow_data.F90 index 738432c4b..cd92b2f0e 100644 --- a/src/science/soilsnow/cbl_soilsnow_data.F90 +++ b/src/science/soilsnow/cbl_soilsnow_data.F90 @@ -1,8 +1,5 @@ MODULE cbl_ssnow_data_mod -USE cable_def_types_mod, ONLY : soil_snow_type, soil_parameter_type, & - veg_parameter_type, canopy_type, met_type, & - balances_type, r_2, ms, mp !distribute these per sbr USE cable_phys_constants_mod, ONLY : CTFRZ => TFRZ USE cable_phys_constants_mod, ONLY : CHL => HL diff --git a/src/science/soilsnow/cbl_soilsnow_init_special.F90 b/src/science/soilsnow/cbl_soilsnow_init_special.F90 index 31a85da82..69a99faad 100644 --- a/src/science/soilsnow/cbl_soilsnow_init_special.F90 +++ b/src/science/soilsnow/cbl_soilsnow_init_special.F90 @@ -1,6 +1,7 @@ MODULE cbl_soil_snow_init_special_module USE cbl_ssnow_data_mod +USE cable_def_types_mod IMPLICIT NONE diff --git a/src/science/soilsnow/cbl_soilsnow_main.F90 b/src/science/soilsnow/cbl_soilsnow_main.F90 index ddf3cd5e2..e00a1cb81 100644 --- a/src/science/soilsnow/cbl_soilsnow_main.F90 +++ b/src/science/soilsnow/cbl_soilsnow_main.F90 @@ -27,6 +27,7 @@ MODULE cbl_soil_snow_main_module ! ssnow SUBROUTINE soil_snow(dels, soil, ssnow, canopy, met, bal, veg) USE cable_common_module +USE cable_def_types_mod USE cbl_ssnow_data_mod !called subrs USE hydraulic_redistribution_mod, ONLY: hydraulic_redistribution diff --git a/src/science/soilsnow/cbl_stempv.F90 b/src/science/soilsnow/cbl_stempv.F90 index cd5a280b2..d92190ab5 100644 --- a/src/science/soilsnow/cbl_stempv.F90 +++ b/src/science/soilsnow/cbl_stempv.F90 @@ -1,6 +1,7 @@ MODULE stempv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC stempv diff --git a/src/science/soilsnow/cbl_surfbv.F90 b/src/science/soilsnow/cbl_surfbv.F90 index b6117bb70..eab5cf232 100644 --- a/src/science/soilsnow/cbl_surfbv.F90 +++ b/src/science/soilsnow/cbl_surfbv.F90 @@ -1,6 +1,7 @@ MODULE surfbv_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC surfbv diff --git a/src/science/soilsnow/cbl_thermal.F90 b/src/science/soilsnow/cbl_thermal.F90 index cb682df1f..3742ef79e 100644 --- a/src/science/soilsnow/cbl_thermal.F90 +++ b/src/science/soilsnow/cbl_thermal.F90 @@ -1,6 +1,7 @@ MODULE snow_processes_soil_thermal_mod USE cbl_ssnow_data_mod +USE cable_def_types_mod PUBLIC snow_processes_soil_thermal diff --git a/src/science/soilsnow/cbl_trimb.F90 b/src/science/soilsnow/cbl_trimb.F90 index 9ab95a80b..181b89d17 100644 --- a/src/science/soilsnow/cbl_trimb.F90 +++ b/src/science/soilsnow/cbl_trimb.F90 @@ -1,6 +1,7 @@ MODULE trimb_mod -USE cbl_ssnow_data_mod, ONLY : r_2 +USE cbl_ssnow_data_mod +USE cable_def_types_mod, ONLY : r_2 PUBLIC trimb From 5fe937f51395df763b104a8962b89c4bb92b96c4 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 28 May 2026 14:31:04 +1000 Subject: [PATCH 65/98] Remove casa_variable.F90 from library --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e3c40b66..eb99e9468 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,7 +70,6 @@ if(CABLE_LIBRARY) src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 - src/science/casa-cnp/casa_variable.F90 src/science/misc/cable_air.F90 src/science/misc/cable_carbon.F90 src/science/misc/cable_climate.F90 From 3d5343c2689dfd2825f77d98380caf93bc208b20 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 28 May 2026 15:04:05 +1000 Subject: [PATCH 66/98] Add all the CASA types --- CMakeLists.txt | 14 + .../control/casa/types/casa_balance_type.F90 | 293 + .../control/casa/types/casa_biome_type.F90 | 231 + .../AM3/control/casa/types/casa_dimension.F90 | 59 + .../control/casa/types/casa_files_type.F90 | 26 + .../AM3/control/casa/types/casa_flux_type.F90 | 418 + .../AM3/control/casa/types/casa_inout.F90 | 7732 +++++++++++++++++ .../AM3/control/casa/types/casa_met_type.F90 | 234 + .../casa/types/casa_phenology_type.F90 | 110 + .../AM3/control/casa/types/casa_pool_type.F90 | 288 + .../AM3/control/casa/types/casa_readbiome.F90 | 2445 ++++++ .../AM3/control/casa/types/casa_variable.F90 | 157 + .../AM3/control/casa/types/phen_variable.F90 | 6 + .../control/casa/types/sum_casa_flux_type.F90 | 466 + .../control/casa/types/sum_casa_pool_type.F90 | 313 + 15 files changed, 12792 insertions(+) create mode 100644 src/coupled/AM3/control/casa/types/casa_balance_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_biome_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_dimension.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_files_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_flux_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_inout.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_met_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_phenology_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_pool_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_readbiome.F90 create mode 100644 src/coupled/AM3/control/casa/types/casa_variable.F90 create mode 100644 src/coupled/AM3/control/casa/types/phen_variable.F90 create mode 100644 src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 create mode 100644 src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index eb99e9468..c644658f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,6 +153,20 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/cable/CM3/ssnow_type.F90 src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 src/coupled/AM3/control/cable/CM3/veg_type.F90 + src/coupled/AM3/control/casa/types/casa_balance_type.F90 + src/coupled/AM3/control/casa/types/casa_biome_type.F90 + src/coupled/AM3/control/casa/types/casa_files_type.F90 + src/coupled/AM3/control/casa/types/casa_flux_type.F90 + src/coupled/AM3/control/casa/types/casa_met_type.F90 + src/coupled/AM3/control/casa/types/casa_phenology_type.F90 + src/coupled/AM3/control/casa/types/casa_pool_type.F90 + src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 + src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 + src/coupled/AM3/control/casa/types/casa_variable.F90 + src/coupled/AM3/control/casa/types/phen_variable.F90 + src/coupled/AM3/control/casa/types/casa_dimension.F90 + src/coupled/AM3/control/casa/types/casa_inout.F90 + src/coupled/AM3/control/casa/types/casa_readbiome.F90 src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 src/offline/cable_iovars.F90 ) diff --git a/src/coupled/AM3/control/casa/types/casa_balance_type.F90 b/src/coupled/AM3/control/casa/types/casa_balance_type.F90 new file mode 100644 index 000000000..79e132db6 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_balance_type.F90 @@ -0,0 +1,293 @@ +MODULE casa_balance_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_bal_data_type +PUBLIC :: casa_bal_type +PUBLIC :: alloc_casa_bal_data_type +PUBLIC :: zero_casa_bal_data_type +PUBLIC :: assoc_casa_bal_type + +TYPE casa_bal_data_type + + REAL(r_2), ALLOCATABLE :: FCgppyear (:) + REAL(r_2), ALLOCATABLE :: FCnppyear (:) + REAL(r_2), ALLOCATABLE :: FCrmleafyear (:) + REAL(r_2), ALLOCATABLE :: FCrmwoodyear (:) + REAL(r_2), ALLOCATABLE :: FCrmrootyear (:) + REAL(r_2), ALLOCATABLE :: FCrgrowyear (:) + REAL(r_2), ALLOCATABLE :: FCrpyear (:) + REAL(r_2), ALLOCATABLE :: FCrsyear (:) + REAL(r_2), ALLOCATABLE :: FCneeyear (:) + REAL(r_2), ALLOCATABLE :: dCdtyear (:) + REAL(r_2), ALLOCATABLE :: LAImax (:) + REAL(r_2), ALLOCATABLE :: Cleafmean (:) + REAL(r_2), ALLOCATABLE :: Crootmean (:) + REAL(r_2), ALLOCATABLE :: FNdepyear (:) + REAL(r_2), ALLOCATABLE :: FNfixyear (:) + REAL(r_2), ALLOCATABLE :: FNsnetyear (:) + REAL(r_2), ALLOCATABLE :: FNupyear (:) + REAL(r_2), ALLOCATABLE :: FNleachyear (:) + REAL(r_2), ALLOCATABLE :: FNlossyear (:) + REAL(r_2), ALLOCATABLE :: FPweayear (:) + REAL(r_2), ALLOCATABLE :: FPdustyear (:) + REAL(r_2), ALLOCATABLE :: FPsnetyear (:) + REAL(r_2), ALLOCATABLE :: FPupyear (:) + REAL(r_2), ALLOCATABLE :: FPleachyear (:) + REAL(r_2), ALLOCATABLE :: FPlossyear (:) + REAL(r_2), ALLOCATABLE :: nsoilminlast (:) + REAL(r_2), ALLOCATABLE :: psoillablast (:) + REAL(r_2), ALLOCATABLE :: psoilsorblast (:) + REAL(r_2), ALLOCATABLE :: psoilocclast (:) + REAL(r_2), ALLOCATABLE :: cbalance (:) + REAL(r_2), ALLOCATABLE :: nbalance (:) + REAL(r_2), ALLOCATABLE :: pbalance (:) + REAL(r_2), ALLOCATABLE :: sumcbal (:) + REAL(r_2), ALLOCATABLE :: sumnbal (:) + REAL(r_2), ALLOCATABLE :: sumpbal (:) + REAL(r_2), ALLOCATABLE :: clabilelast (:) + REAL(r_2), ALLOCATABLE :: glaimon (:,:) + REAL(r_2), ALLOCATABLE :: glaimonx (:,:) + REAL(r_2), ALLOCATABLE :: cplantlast (:,:) + REAL(r_2), ALLOCATABLE :: nplantlast (:,:) + REAL(r_2), ALLOCATABLE :: pplantlast (:,:) + REAL(r_2), ALLOCATABLE :: clitterlast (:,:) + REAL(r_2), ALLOCATABLE :: nlitterlast (:,:) + REAL(r_2), ALLOCATABLE :: plitterlast (:,:) + REAL(r_2), ALLOCATABLE :: csoillast (:,:) + REAL(r_2), ALLOCATABLE :: nsoillast (:,:) + REAL(r_2), ALLOCATABLE :: psoillast (:,:) + +END TYPE casa_bal_data_type + +TYPE casa_bal_type + + REAL(r_2), POINTER, PUBLIC :: FCgppyear (:) + REAL(r_2), POINTER, PUBLIC :: FCnppyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmleafyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmwoodyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrmrootyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrgrowyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrpyear (:) + REAL(r_2), POINTER, PUBLIC :: FCrsyear (:) + REAL(r_2), POINTER, PUBLIC :: FCneeyear (:) + REAL(r_2), POINTER, PUBLIC :: dCdtyear (:) + REAL(r_2), POINTER, PUBLIC :: LAImax (:) + REAL(r_2), POINTER, PUBLIC :: Cleafmean (:) + REAL(r_2), POINTER, PUBLIC :: Crootmean (:) + REAL(r_2), POINTER, PUBLIC :: FNdepyear (:) + REAL(r_2), POINTER, PUBLIC :: FNfixyear (:) + REAL(r_2), POINTER, PUBLIC :: FNsnetyear (:) + REAL(r_2), POINTER, PUBLIC :: FNupyear (:) + REAL(r_2), POINTER, PUBLIC :: FNleachyear (:) + REAL(r_2), POINTER, PUBLIC :: FNlossyear (:) + REAL(r_2), POINTER, PUBLIC :: FPweayear (:) + REAL(r_2), POINTER, PUBLIC :: FPdustyear (:) + REAL(r_2), POINTER, PUBLIC :: FPsnetyear (:) + REAL(r_2), POINTER, PUBLIC :: FPupyear (:) + REAL(r_2), POINTER, PUBLIC :: FPleachyear (:) + REAL(r_2), POINTER, PUBLIC :: FPlossyear (:) + REAL(r_2), POINTER, PUBLIC :: nsoilminlast (:) + REAL(r_2), POINTER, PUBLIC :: psoillablast (:) + REAL(r_2), POINTER, PUBLIC :: psoilsorblast (:) + REAL(r_2), POINTER, PUBLIC :: psoilocclast (:) + REAL(r_2), POINTER, PUBLIC :: cbalance (:) + REAL(r_2), POINTER, PUBLIC :: nbalance (:) + REAL(r_2), POINTER, PUBLIC :: pbalance (:) + REAL(r_2), POINTER, PUBLIC :: sumcbal (:) + REAL(r_2), POINTER, PUBLIC :: sumnbal (:) + REAL(r_2), POINTER, PUBLIC :: sumpbal (:) + REAL(r_2), POINTER, PUBLIC :: clabilelast (:) + REAL(r_2), POINTER, PUBLIC :: glaimon (:,:) + REAL(r_2), POINTER, PUBLIC :: glaimonx (:,:) + REAL(r_2), POINTER, PUBLIC :: cplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: nplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: pplantlast (:,:) + REAL(r_2), POINTER, PUBLIC :: clitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: nlitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: plitterlast (:,:) + REAL(r_2), POINTER, PUBLIC :: csoillast (:,:) + REAL(r_2), POINTER, PUBLIC :: nsoillast (:,:) + REAL(r_2), POINTER, PUBLIC :: psoillast (:,:) + +END TYPE casa_bal_type + +CONTAINS + +SUBROUTINE alloc_casa_bal_data_type( casabal_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil + +IMPLICIT NONE + +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casabal_data % FCgppyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCnppyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmleafyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmwoodyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrmrootyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrgrowyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrpyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCrsyear ( arraysize ) ) +ALLOCATE ( casabal_data % FCneeyear ( arraysize ) ) +ALLOCATE ( casabal_data % dCdtyear ( arraysize ) ) +ALLOCATE ( casabal_data % LAImax ( arraysize ) ) +ALLOCATE ( casabal_data % Cleafmean ( arraysize ) ) +ALLOCATE ( casabal_data % Crootmean ( arraysize ) ) +ALLOCATE ( casabal_data % FNdepyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNfixyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNsnetyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNupyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNleachyear ( arraysize ) ) +ALLOCATE ( casabal_data % FNlossyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPweayear ( arraysize ) ) +ALLOCATE ( casabal_data % FPdustyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPsnetyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPupyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPleachyear ( arraysize ) ) +ALLOCATE ( casabal_data % FPlossyear ( arraysize ) ) +ALLOCATE ( casabal_data % nsoilminlast ( arraysize ) ) +ALLOCATE ( casabal_data % psoillablast ( arraysize ) ) +ALLOCATE ( casabal_data % psoilsorblast ( arraysize ) ) +ALLOCATE ( casabal_data % psoilocclast ( arraysize ) ) +ALLOCATE ( casabal_data % cbalance ( arraysize ) ) +ALLOCATE ( casabal_data % nbalance ( arraysize ) ) +ALLOCATE ( casabal_data % pbalance ( arraysize ) ) +ALLOCATE ( casabal_data % sumcbal ( arraysize ) ) +ALLOCATE ( casabal_data % sumnbal ( arraysize ) ) +ALLOCATE ( casabal_data % sumpbal ( arraysize ) ) +ALLOCATE ( casabal_data % clabilelast ( arraysize ) ) +ALLOCATE ( casabal_data % glaimon ( arraysize, 12 ) ) ! 12 months +ALLOCATE ( casabal_data % glaimonx ( arraysize, 12 ) ) ! 12 months +ALLOCATE ( casabal_data % cplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % nplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % pplantlast ( arraysize, mplant ) ) +ALLOCATE ( casabal_data % clitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % nlitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % plitterlast ( arraysize, mlitter ) ) +ALLOCATE ( casabal_data % csoillast ( arraysize, msoil ) ) +ALLOCATE ( casabal_data % nsoillast ( arraysize, msoil ) ) +ALLOCATE ( casabal_data % psoillast ( arraysize, msoil ) ) + +END SUBROUTINE alloc_casa_bal_data_type + +SUBROUTINE zero_casa_bal_data_type( casabal_data ) + +IMPLICIT NONE + +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data + +casabal_data % FCgppyear (:) = 0.0 +casabal_data % FCnppyear (:) = 0.0 +casabal_data % FCrmleafyear (:) = 0.0 +casabal_data % FCrmwoodyear (:) = 0.0 +casabal_data % FCrmrootyear (:) = 0.0 +casabal_data % FCrgrowyear (:) = 0.0 +casabal_data % FCrpyear (:) = 0.0 +casabal_data % FCrsyear (:) = 0.0 +casabal_data % FCneeyear (:) = 0.0 +casabal_data % dCdtyear (:) = 0.0 +casabal_data % LAImax (:) = 0.0 +casabal_data % Cleafmean (:) = 0.0 +casabal_data % Crootmean (:) = 0.0 +casabal_data % FNdepyear (:) = 0.0 +casabal_data % FNfixyear (:) = 0.0 +casabal_data % FNsnetyear (:) = 0.0 +casabal_data % FNupyear (:) = 0.0 +casabal_data % FNleachyear (:) = 0.0 +casabal_data % FNlossyear (:) = 0.0 +casabal_data % FPweayear (:) = 0.0 +casabal_data % FPdustyear (:) = 0.0 +casabal_data % FPsnetyear (:) = 0.0 +casabal_data % FPupyear (:) = 0.0 +casabal_data % FPleachyear (:) = 0.0 +casabal_data % FPlossyear (:) = 0.0 +casabal_data % nsoilminlast (:) = 0.0 +casabal_data % psoillablast (:) = 0.0 +casabal_data % psoilsorblast (:) = 0.0 +casabal_data % psoilocclast (:) = 0.0 +casabal_data % cbalance (:) = 0.0 +casabal_data % nbalance (:) = 0.0 +casabal_data % pbalance (:) = 0.0 +casabal_data % sumcbal (:) = 0.0 +casabal_data % sumnbal (:) = 0.0 +casabal_data % sumpbal (:) = 0.0 +casabal_data % clabilelast (:) = 0.0 +casabal_data % glaimon (:,:) = 0.0 +casabal_data % glaimonx (:,:) = 0.0 +casabal_data % cplantlast (:,:) = 0.0 +casabal_data % nplantlast (:,:) = 0.0 +casabal_data % pplantlast (:,:) = 0.0 +casabal_data % clitterlast (:,:) = 0.0 +casabal_data % nlitterlast (:,:) = 0.0 +casabal_data % plitterlast (:,:) = 0.0 +casabal_data % csoillast (:,:) = 0.0 +casabal_data % nsoillast (:,:) = 0.0 +casabal_data % psoillast (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_bal_data_type + +SUBROUTINE assoc_casa_bal_type( casabal, casabal_data ) + +IMPLICIT NONE + +TYPE (casa_bal_type), INTENT(INOUT) :: casabal +TYPE (casa_bal_data_type), INTENT(INOUT), TARGET :: casabal_data + +casabal % FCgppyear => casabal_data % FCgppyear +casabal % FCnppyear => casabal_data % FCnppyear +casabal % FCrmleafyear => casabal_data % FCrmleafyear +casabal % FCrmwoodyear => casabal_data % FCrmwoodyear +casabal % FCrmrootyear => casabal_data % FCrmrootyear +casabal % FCrgrowyear => casabal_data % FCrgrowyear +casabal % FCrpyear => casabal_data % FCrpyear +casabal % FCrsyear => casabal_data % FCrsyear +casabal % FCneeyear => casabal_data % FCneeyear +casabal % dCdtyear => casabal_data % dCdtyear +casabal % LAImax => casabal_data % LAImax +casabal % Cleafmean => casabal_data % Cleafmean +casabal % Crootmean => casabal_data % Crootmean +casabal % FNdepyear => casabal_data % FNdepyear +casabal % FNfixyear => casabal_data % FNfixyear +casabal % FNsnetyear => casabal_data % FNsnetyear +casabal % FNupyear => casabal_data % FNupyear +casabal % FNleachyear => casabal_data % FNleachyear +casabal % FNlossyear => casabal_data % FNlossyear +casabal % FPweayear => casabal_data % FPweayear +casabal % FPdustyear => casabal_data % FPdustyear +casabal % FPsnetyear => casabal_data % FPsnetyear +casabal % FPupyear => casabal_data % FPupyear +casabal % FPleachyear => casabal_data % FPleachyear +casabal % FPlossyear => casabal_data % FPlossyear +casabal % nsoilminlast => casabal_data % nsoilminlast +casabal % psoillablast => casabal_data % psoillablast +casabal % psoilsorblast => casabal_data % psoilsorblast +casabal % psoilocclast => casabal_data % psoilocclast +casabal % cbalance => casabal_data % cbalance +casabal % nbalance => casabal_data % nbalance +casabal % pbalance => casabal_data % pbalance +casabal % sumcbal => casabal_data % sumcbal +casabal % sumnbal => casabal_data % sumnbal +casabal % sumpbal => casabal_data % sumpbal +casabal % clabilelast => casabal_data % clabilelast +casabal % glaimon => casabal_data % glaimon +casabal % glaimonx => casabal_data % glaimonx +casabal % cplantlast => casabal_data % cplantlast +casabal % nplantlast => casabal_data % nplantlast +casabal % pplantlast => casabal_data % pplantlast +casabal % clitterlast => casabal_data % clitterlast +casabal % nlitterlast => casabal_data % nlitterlast +casabal % plitterlast => casabal_data % plitterlast +casabal % csoillast => casabal_data % csoillast +casabal % nsoillast => casabal_data % nsoillast +casabal % psoillast => casabal_data % psoillast + +RETURN +END SUBROUTINE assoc_casa_bal_type + +END MODULE casa_balance_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_biome_type.F90 b/src/coupled/AM3/control/casa/types/casa_biome_type.F90 new file mode 100644 index 000000000..d86c1b25c --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_biome_type.F90 @@ -0,0 +1,231 @@ +MODULE casa_biome_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision +USE grid_constants_mod_cbl, ONLY: ntype_max ! # veg types [13],non-veg=4, + ! ntype_max=17 +USE casadimension, ONLY: mplant, mlitter, mso, msoil + +IMPLICIT NONE + +PUBLIC :: casa_biome_data_type +PUBLIC :: casa_biome_type +PUBLIC :: zero_casa_biome_data_type +PUBLIC :: assoc_casa_biome_type + +TYPE casa_biome_data_type + + INTEGER :: ivt2 ( ntype_max ) + REAL(r_2) :: xkleafcoldmax ( ntype_max ) + REAL(r_2) :: xkleafcoldexp ( ntype_max ) + REAL(r_2) :: xkleafdrymax ( ntype_max ) + REAL(r_2) :: xkleafdryexp ( ntype_max ) + REAL(r_2) :: glaimax ( ntype_max ) + REAL(r_2) :: glaimin ( ntype_max ) + REAL(r_2) :: sla ( ntype_max ) + REAL(r_2) :: ratiofrootleaf ( ntype_max ) + REAL(r_2) :: kroot ( ntype_max ) + REAL(r_2) :: krootlen ( ntype_max ) + REAL(r_2) :: rootdepth ( ntype_max ) + REAL(r_2) :: kuptake ( ntype_max ) + REAL(r_2) :: kminN ( ntype_max ) + REAL(r_2) :: kuplabP ( ntype_max ) + REAL(r_2) :: kclabrate ( ntype_max ) + REAL(r_2) :: xnpmax ( ntype_max ) + REAL(r_2) :: q10soil ( ntype_max ) + REAL(r_2) :: xkoptlitter ( ntype_max ) + REAL(r_2) :: xkoptsoil ( ntype_max ) + REAL(r_2) :: xkplab ( mso ) + REAL(r_2) :: xkpsorb ( mso ) + REAL(r_2) :: xkpocc ( mso ) + REAL(r_2) :: prodptase ( ntype_max ) + REAL(r_2) :: costnpup ( ntype_max ) + REAL(r_2) :: maxfinelitter ( ntype_max ) + REAL(r_2) :: maxcwd ( ntype_max ) + REAL(r_2) :: nintercept ( ntype_max ) + REAL(r_2) :: nslope ( ntype_max ) + REAL(r_2) :: plantrate ( ntype_max, mplant ) + REAL(r_2) :: rmplant ( ntype_max, mplant ) + REAL(r_2) :: fracnpptoP ( ntype_max, mplant ) + REAL(r_2) :: fraclignin ( ntype_max, mplant ) + REAL(r_2) :: fraclabile ( ntype_max, mplant ) + REAL(r_2) :: ratioNCplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioNCplantmax ( ntype_max, mplant ) + REAL(r_2) :: ratioNPplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioNPplantmax ( ntype_max, mplant ) + REAL(r_2) :: fracLigninplant ( ntype_max, mplant ) + REAL(r_2) :: ftransNPtoL ( ntype_max, mplant ) + REAL(r_2) :: ftransPPtoL ( ntype_max, mplant ) + REAL(r_2) :: litterrate ( ntype_max, mlitter) + REAL(r_2) :: ratioPcplantmin ( ntype_max, mplant ) + REAL(r_2) :: ratioPcplantmax ( ntype_max, mplant ) + REAL(r_2) :: soilrate ( ntype_max, msoil ) + +END TYPE casa_biome_data_type + +TYPE casa_biome_type + + INTEGER, POINTER, PUBLIC :: ivt2 (:) + REAL(r_2), POINTER, PUBLIC :: xkleafcoldmax (:) + REAL(r_2), POINTER, PUBLIC :: xkleafcoldexp (:) + REAL(r_2), POINTER, PUBLIC :: xkleafdrymax (:) + REAL(r_2), POINTER, PUBLIC :: xkleafdryexp (:) + REAL(r_2), POINTER, PUBLIC :: glaimax (:) + REAL(r_2), POINTER, PUBLIC :: glaimin (:) + REAL(r_2), POINTER, PUBLIC :: sla (:) + REAL(r_2), POINTER, PUBLIC :: ratiofrootleaf (:) + REAL(r_2), POINTER, PUBLIC :: kroot (:) + REAL(r_2), POINTER, PUBLIC :: krootlen (:) + REAL(r_2), POINTER, PUBLIC :: rootdepth (:) + REAL(r_2), POINTER, PUBLIC :: kuptake (:) + REAL(r_2), POINTER, PUBLIC :: kminN (:) + REAL(r_2), POINTER, PUBLIC :: kuplabP (:) + REAL(r_2), POINTER, PUBLIC :: kclabrate (:) + REAL(r_2), POINTER, PUBLIC :: xnpmax (:) + REAL(r_2), POINTER, PUBLIC :: q10soil (:) + REAL(r_2), POINTER, PUBLIC :: xkoptlitter (:) + REAL(r_2), POINTER, PUBLIC :: xkoptsoil (:) + REAL(r_2), POINTER, PUBLIC :: xkplab (:) + REAL(r_2), POINTER, PUBLIC :: xkpsorb (:) + REAL(r_2), POINTER, PUBLIC :: xkpocc (:) + REAL(r_2), POINTER, PUBLIC :: prodptase (:) + REAL(r_2), POINTER, PUBLIC :: costnpup (:) + REAL(r_2), POINTER, PUBLIC :: maxfinelitter (:) + REAL(r_2), POINTER, PUBLIC :: maxcwd (:) + REAL(r_2), POINTER, PUBLIC :: nintercept (:) + REAL(r_2), POINTER, PUBLIC :: nslope (:) + REAL(r_2), POINTER, PUBLIC :: plantrate (:,:) + REAL(r_2), POINTER, PUBLIC :: rmplant (:,:) + REAL(r_2), POINTER, PUBLIC :: fracnpptoP (:,:) + REAL(r_2), POINTER, PUBLIC :: fraclignin (:,:) + REAL(r_2), POINTER, PUBLIC :: fraclabile (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplantmax (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplantmax (:,:) + REAL(r_2), POINTER, PUBLIC :: fracLigninplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ftransNPtoL (:,:) + REAL(r_2), POINTER, PUBLIC :: ftransPPtoL (:,:) + REAL(r_2), POINTER, PUBLIC :: litterrate (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplantmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplantmax (:,:) + + REAL(r_2), POINTER, PUBLIC :: soilrate (:,:) + +END TYPE casa_biome_type + +CONTAINS + +SUBROUTINE zero_casa_biome_data_type( casabiome_data ) + +IMPLICIT NONE + +TYPE (casa_biome_data_type), INTENT(INOUT) :: casabiome_data + +casabiome_data % ivt2 (:) = 0 +casabiome_data % xkleafcoldmax (:) = 0.0 +casabiome_data % xkleafcoldexp (:) = 0.0 +casabiome_data % xkleafdrymax (:) = 0.0 +casabiome_data % xkleafdryexp (:) = 0.0 +casabiome_data % glaimax (:) = 0.0 +casabiome_data % glaimin (:) = 0.0 +casabiome_data % sla (:) = 0.0 +casabiome_data % ratiofrootleaf (:) = 0.0 +casabiome_data % kroot (:) = 0.0 +casabiome_data % krootlen (:) = 0.0 +casabiome_data % rootdepth (:) = 0.0 +casabiome_data % kuptake (:) = 0.0 +casabiome_data % kminN (:) = 0.0 +casabiome_data % kuplabP (:) = 0.0 +casabiome_data % kclabrate (:) = 0.0 +casabiome_data % xnpmax (:) = 0.0 +casabiome_data % q10soil (:) = 0.0 +casabiome_data % xkoptlitter (:) = 0.0 +casabiome_data % xkoptsoil (:) = 0.0 +casabiome_data % xkplab (:) = 0.0 +casabiome_data % xkpsorb (:) = 0.0 +casabiome_data % xkpocc (:) = 0.0 +casabiome_data % prodptase (:) = 0.0 +casabiome_data % costnpup (:) = 0.0 +casabiome_data % maxfinelitter (:) = 0.0 +casabiome_data % maxcwd (:) = 0.0 +casabiome_data % nintercept (:) = 0.0 +casabiome_data % nslope (:) = 0.0 +casabiome_data % plantrate (:,:) = 0.0 +casabiome_data % rmplant (:,:) = 0.0 +casabiome_data % fracnpptoP (:,:) = 0.0 +casabiome_data % fraclignin (:,:) = 0.0 +casabiome_data % fraclabile (:,:) = 0.0 +casabiome_data % ratioNCplantmin (:,:) = 0.0 +casabiome_data % ratioNCplantmax (:,:) = 0.0 +casabiome_data % ratioNPplantmin (:,:) = 0.0 +casabiome_data % ratioNPplantmax (:,:) = 0.0 +casabiome_data % fracLigninplant (:,:) = 0.0 +casabiome_data % ftransNPtoL (:,:) = 0.0 +casabiome_data % ftransPPtoL (:,:) = 0.0 +casabiome_data % litterrate (:,:) = 0.0 +casabiome_data % ratioPcplantmin (:,:) = 0.0 +casabiome_data % ratioPcplantmax (:,:) = 0.0 +casabiome_data % soilrate (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_biome_data_type + + +SUBROUTINE assoc_casa_biome_type( casabiome, casabiome_data ) + +IMPLICIT NONE + +TYPE (casa_biome_type), INTENT(INOUT) :: casabiome +TYPE (casa_biome_data_type), INTENT(INOUT), TARGET :: casabiome_data + +casabiome % ivt2 => casabiome_data % ivt2 +casabiome % xkleafcoldmax => casabiome_data % xkleafcoldmax +casabiome % xkleafcoldexp => casabiome_data % xkleafcoldexp +casabiome % xkleafdrymax => casabiome_data % xkleafdrymax +casabiome % xkleafdryexp => casabiome_data % xkleafdryexp +casabiome % glaimax => casabiome_data % glaimax +casabiome % glaimin => casabiome_data % glaimin +casabiome % sla => casabiome_data % sla +casabiome % ratiofrootleaf => casabiome_data % ratiofrootleaf +casabiome % kroot => casabiome_data % kroot +casabiome % krootlen => casabiome_data % krootlen +casabiome % rootdepth => casabiome_data % rootdepth +casabiome % kuptake => casabiome_data % kuptake +casabiome % kminN => casabiome_data % kminN +casabiome % kuplabP => casabiome_data % kuplabP +casabiome % kclabrate => casabiome_data % kclabrate +casabiome % xnpmax => casabiome_data % xnpmax +casabiome % q10soil => casabiome_data % q10soil +casabiome % xkoptlitter => casabiome_data % xkoptlitter +casabiome % xkoptsoil => casabiome_data % xkoptsoil +casabiome % xkplab => casabiome_data % xkplab +casabiome % xkpsorb => casabiome_data % xkpsorb +casabiome % xkpocc => casabiome_data % xkpocc +casabiome % prodptase => casabiome_data % prodptase +casabiome % costnpup => casabiome_data % costnpup +casabiome % maxfinelitter => casabiome_data % maxfinelitter +casabiome % maxcwd => casabiome_data % maxcwd +casabiome % nintercept => casabiome_data % nintercept +casabiome % nslope => casabiome_data % nslope +casabiome % plantrate => casabiome_data % plantrate +casabiome % rmplant => casabiome_data % rmplant +casabiome % fracnpptoP => casabiome_data % fracnpptoP +casabiome % fraclignin => casabiome_data % fraclignin +casabiome % fraclabile => casabiome_data % fraclabile +casabiome % ratioNCplantmin => casabiome_data % ratioNCplantmin +casabiome % ratioNCplantmax => casabiome_data % ratioNCplantmax +casabiome % ratioNPplantmin => casabiome_data % ratioNPplantmin +casabiome % ratioNPplantmax => casabiome_data % ratioNPplantmax +casabiome % fracLigninplant => casabiome_data % fracLigninplant +casabiome % ftransNPtoL => casabiome_data % ftransNPtoL +casabiome % ftransPPtoL => casabiome_data % ftransPPtoL +casabiome % litterrate => casabiome_data % litterrate +casabiome % ratioPcplantmin => casabiome_data % ratioPcplantmin +casabiome % ratioPcplantmax => casabiome_data % ratioPcplantmax +casabiome % soilrate => casabiome_data % soilrate + +RETURN +END SUBROUTINE assoc_casa_biome_type + + +END MODULE casa_biome_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_dimension.F90 b/src/coupled/AM3/control/casa/types/casa_dimension.F90 new file mode 100644 index 000000000..4a6707031 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_dimension.F90 @@ -0,0 +1,59 @@ +!============================================================================== +! This source code is part of the +! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. +! This work is licensed under the CSIRO Open Source Software License +! Agreement (variation of the BSD / MIT License). +! +! You may not use this file except in compliance with this License. +! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) is located +! in each directory containing CABLE code. +! +! ============================================================================== +! Purpose: defines/allocates variables for CASA-CNP +! +! Contact: Yingping.Wang@csiro.au +! +! History: Developed for offline CASA-CNP, code revision likely to better +! suit ACCESS and to merge more consistently with CABLE code +! +! +! ============================================================================== +! casa_variable.f90 +! +! the following modules are used when "casacnp" is coupled to "cable" +! casadimension +! casaparm +! casavariable with subroutine alloc_casavariable +! phenvariable with subroutine alloc_phenvariable + +MODULE casadimension + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision +USE cable_def_types_mod, ONLY: mvtype, ms + + IMPLICIT NONE + + + + INTEGER, PARAMETER :: mdyear=365 ! days per year + INTEGER, PARAMETER :: mdmonth=30 ! days per month + INTEGER, PARAMETER :: mdweek=7 ! days per week + INTEGER, PARAMETER :: mmyear=12 ! month per year + INTEGER, PARAMETER :: mt=36500 ! integration time step + INTEGER, PARAMETER :: mplant = 3 ! plant pools + INTEGER, PARAMETER :: mlitter= 3 ! litter pools + INTEGER, PARAMETER :: msoil = 3 ! soil pools + INTEGER, PARAMETER :: mso = 12 ! soil order number + INTEGER, PARAMETER :: mhwp = 1 ! harvested wood pools + INTEGER, PARAMETER :: mwood = 3 ! wood product pools + INTEGER, PARAMETER :: mclear = 1 ! forest clearing pools + ! BP put icycle into namelist file + INTEGER :: icycle + ! INTEGER, PARAMETER :: icycle=3 ! =1 for C, =2 for C+N; =3 for C+N+P + INTEGER, PARAMETER :: mstart=1 ! starting time step + INTEGER, PARAMETER :: mphase=4 ! phen. phases + INTEGER, PARAMETER :: mlogmax=4 ! max.woody PFT. ESM1.5:land use + REAL(r_2), PARAMETER :: deltcasa=1.0/365.0 ! year + REAL(r_2), PARAMETER :: deltpool=1.0 ! pool delt(1day) + +END MODULE casadimension diff --git a/src/coupled/AM3/control/casa/types/casa_files_type.F90 b/src/coupled/AM3/control/casa/types/casa_files_type.F90 new file mode 100644 index 000000000..e932dd9aa --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_files_type.F90 @@ -0,0 +1,26 @@ +MODULE casa_files_type_mod + +IMPLICIT NONE + +TYPE casa_files_type + + CHARACTER(LEN=99) :: cnpbiome = '' ! biome-specific BGC parameters + CHARACTER(LEN=99) :: cnppoint = '' ! file for point-specific BGC inputs + CHARACTER(LEN=99) :: cnpepool = '' ! file for end-of-run pool sizes + CHARACTER(LEN=99) :: cnpipool = '' ! file for inital pool sizes + CHARACTER(LEN=99) :: cnpmetin = '' ! met file for spin up + CHARACTER(LEN=99) :: cnpmetout = '' ! met file for spin up + CHARACTER(LEN=99) :: cnpspin = '' ! input file for spin up + CHARACTER(LEN=99) :: dump_cnpspin = '' ! dump file for spinning casa-cnp + CHARACTER(LEN=99) :: phen = '' ! leaf phenology datafile + CHARACTER(LEN=99) :: cnpflux = '' ! modelled mean yearly CNP fluxes + CHARACTER(LEN=99) :: c2cdumppath = '' ! cable2casa dump for casa spinup + LOGICAL :: l_ndep = .FALSE. + CHARACTER(LEN=99) :: ndep = '' ! N deposition input file + +END TYPE casa_files_type + +TYPE(casa_files_type) :: casafile + +END MODULE casa_files_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 new file mode 100644 index 000000000..8f7777962 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 @@ -0,0 +1,418 @@ +MODULE casa_flux_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_flux_data_type +PUBLIC :: casa_flux_type +PUBLIC :: alloc_casa_flux_data_type +PUBLIC :: assoc_casa_flux_type + +TYPE casa_flux_data_type + + REAL(r_2), ALLOCATABLE :: Cgpp (:) + REAL(r_2), ALLOCATABLE :: Cnpp (:) + REAL(r_2), ALLOCATABLE :: Crp (:) + REAL(r_2), ALLOCATABLE :: Crgplant (:) + REAL(r_2), ALLOCATABLE :: Nminfix (:) + REAL(r_2), ALLOCATABLE :: Nminuptake (:) + REAL(r_2), ALLOCATABLE :: Plabuptake (:) + REAL(r_2), ALLOCATABLE :: Clabloss (:) + REAL(r_2), ALLOCATABLE :: fracClabile (:) + REAL(r_2), ALLOCATABLE :: stemnpp (:) + REAL(r_2), ALLOCATABLE :: frac_sapwood (:) + REAL(r_2), ALLOCATABLE :: sapwood_area (:) + REAL(r_2), ALLOCATABLE :: Crsoil (:) + REAL(r_2), ALLOCATABLE :: Nmindep (:) + REAL(r_2), ALLOCATABLE :: Nminloss (:) + REAL(r_2), ALLOCATABLE :: Nminleach (:) + REAL(r_2), ALLOCATABLE :: Nupland (:) + REAL(r_2), ALLOCATABLE :: Nlittermin (:) + REAL(r_2), ALLOCATABLE :: Nsmin (:) + REAL(r_2), ALLOCATABLE :: Nsimm (:) + REAL(r_2), ALLOCATABLE :: Nsnet (:) + REAL(r_2), ALLOCATABLE :: fNminloss (:) + REAL(r_2), ALLOCATABLE :: fNminleach (:) + REAL(r_2), ALLOCATABLE :: Pdep (:) + REAL(r_2), ALLOCATABLE :: Pwea (:) + REAL(r_2), ALLOCATABLE :: Pleach (:) + REAL(r_2), ALLOCATABLE :: Ploss (:) + REAL(r_2), ALLOCATABLE :: Pupland (:) + REAL(r_2), ALLOCATABLE :: Plittermin (:) + REAL(r_2), ALLOCATABLE :: Psmin (:) + REAL(r_2), ALLOCATABLE :: Psimm (:) + REAL(r_2), ALLOCATABLE :: Psnet (:) + REAL(r_2), ALLOCATABLE :: fPleach (:) + REAL(r_2), ALLOCATABLE :: kplab (:) + REAL(r_2), ALLOCATABLE :: kpsorb (:) + REAL(r_2), ALLOCATABLE :: kpocc (:) + REAL(r_2), ALLOCATABLE :: kmlabp (:) + REAL(r_2), ALLOCATABLE :: Psorbmax (:) + REAL(r_2), ALLOCATABLE :: Cnep (:) + REAL(r_2), ALLOCATABLE :: FluxCtoCO2 (:) + REAL(r_2), ALLOCATABLE :: FluxCtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxNtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxPtohwp (:) + REAL(r_2), ALLOCATABLE :: FluxCtoclear (:) + REAL(r_2), ALLOCATABLE :: FluxNtoclear (:) + REAL(r_2), ALLOCATABLE :: FluxPtoclear (:) + REAL(r_2), ALLOCATABLE :: CtransferLUC (:) + REAL(r_2), ALLOCATABLE :: meangpp (:) + REAL(r_2), ALLOCATABLE :: meanrleaf (:) + REAL(r_2), ALLOCATABLE :: fracCalloc (:,:) + REAL(r_2), ALLOCATABLE :: fracNalloc (:,:) + REAL(r_2), ALLOCATABLE :: fracPalloc (:,:) + REAL(r_2), ALLOCATABLE :: Crmplant (:,:) + REAL(r_2), ALLOCATABLE :: kplant (:,:) + REAL(r_2), ALLOCATABLE :: klitter (:,:) + REAL(r_2), ALLOCATABLE :: ksoil (:,:) + REAL(r_2), ALLOCATABLE :: fromLtoCO2 (:,:) + REAL(r_2), ALLOCATABLE :: fromStoCO2 (:,:) + REAL(r_2), ALLOCATABLE :: FluxCtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxNtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxPtolitter (:,:) + REAL(r_2), ALLOCATABLE :: FluxCtosoil (:,:) + REAL(r_2), ALLOCATABLE :: FluxNtosoil (:,:) + REAL(r_2), ALLOCATABLE :: FluxPtosoil (:,:) + REAL(r_2), ALLOCATABLE :: fromPtoL (:,:,:) + REAL(r_2), ALLOCATABLE :: fromLtoS (:,:,:) + REAL(r_2), ALLOCATABLE :: fromStoS (:,:,:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover (:,:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_disturbance (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_crowding (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_resource_limitation (:) + +END TYPE casa_flux_data_type + +TYPE casa_flux_type + + REAL(r_2), POINTER, PUBLIC :: Cgpp (:) + REAL(r_2), POINTER, PUBLIC :: Cnpp (:) + REAL(r_2), POINTER, PUBLIC :: Crp (:) + REAL(r_2), POINTER, PUBLIC :: Crgplant (:) + REAL(r_2), POINTER, PUBLIC :: Nminfix (:) + REAL(r_2), POINTER, PUBLIC :: Nminuptake (:) + REAL(r_2), POINTER, PUBLIC :: Plabuptake (:) + REAL(r_2), POINTER, PUBLIC :: Clabloss (:) + REAL(r_2), POINTER, PUBLIC :: fracClabile (:) + REAL(r_2), POINTER, PUBLIC :: stemnpp (:) + REAL(r_2), POINTER, PUBLIC :: frac_sapwood (:) + REAL(r_2), POINTER, PUBLIC :: sapwood_area (:) + REAL(r_2), POINTER, PUBLIC :: Crsoil (:) + REAL(r_2), POINTER, PUBLIC :: Nmindep (:) + REAL(r_2), POINTER, PUBLIC :: Nminloss (:) + REAL(r_2), POINTER, PUBLIC :: Nminleach (:) + REAL(r_2), POINTER, PUBLIC :: Nupland (:) + REAL(r_2), POINTER, PUBLIC :: Nlittermin (:) + REAL(r_2), POINTER, PUBLIC :: Nsmin (:) + REAL(r_2), POINTER, PUBLIC :: Nsimm (:) + REAL(r_2), POINTER, PUBLIC :: Nsnet (:) + REAL(r_2), POINTER, PUBLIC :: fNminloss (:) + REAL(r_2), POINTER, PUBLIC :: fNminleach (:) + REAL(r_2), POINTER, PUBLIC :: Pdep (:) + REAL(r_2), POINTER, PUBLIC :: Pwea (:) + REAL(r_2), POINTER, PUBLIC :: Pleach (:) + REAL(r_2), POINTER, PUBLIC :: Ploss (:) + REAL(r_2), POINTER, PUBLIC :: Pupland (:) + REAL(r_2), POINTER, PUBLIC :: Plittermin (:) + REAL(r_2), POINTER, PUBLIC :: Psmin (:) + REAL(r_2), POINTER, PUBLIC :: Psimm (:) + REAL(r_2), POINTER, PUBLIC :: Psnet (:) + REAL(r_2), POINTER, PUBLIC :: fPleach (:) + REAL(r_2), POINTER, PUBLIC :: kplab (:) + REAL(r_2), POINTER, PUBLIC :: kpsorb (:) + REAL(r_2), POINTER, PUBLIC :: kpocc (:) + REAL(r_2), POINTER, PUBLIC :: kmlabp (:) + REAL(r_2), POINTER, PUBLIC :: Psorbmax (:) + REAL(r_2), POINTER, PUBLIC :: Cnep (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtoCO2 (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxNtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxPtohwp (:) + REAL(r_2), POINTER, PUBLIC :: FluxCtoclear (:) + REAL(r_2), POINTER, PUBLIC :: FluxNtoclear (:) + REAL(r_2), POINTER, PUBLIC :: FluxPtoclear (:) + REAL(r_2), POINTER, PUBLIC :: CtransferLUC (:) + REAL(r_2), POINTER, PUBLIC :: meangpp (:) + REAL(r_2), POINTER, PUBLIC :: meanrleaf (:) + REAL(r_2), POINTER, PUBLIC :: fracCalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: fracNalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: fracPalloc (:,:) + REAL(r_2), POINTER, PUBLIC :: Crmplant (:,:) + REAL(r_2), POINTER, PUBLIC :: kplant (:,:) + REAL(r_2), POINTER, PUBLIC :: klitter (:,:) + REAL(r_2), POINTER, PUBLIC :: ksoil (:,:) + REAL(r_2), POINTER, PUBLIC :: fromLtoCO2 (:,:) + REAL(r_2), POINTER, PUBLIC :: fromStoCO2 (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxCtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxNtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxPtolitter (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxCtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxNtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: FluxPtosoil (:,:) + REAL(r_2), POINTER, PUBLIC :: fromPtoL (:,:,:) + REAL(r_2), POINTER, PUBLIC :: fromLtoS (:,:,:) + REAL(r_2), POINTER, PUBLIC :: fromStoS (:,:,:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover (:,:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_disturbance (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_crowding (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_resource_limitation (:) + +END TYPE casa_flux_type + +CONTAINS + +SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casaflux_data % Cgpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Crp ( arraysize ) ) +ALLOCATE ( casaflux_data % Crgplant ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminfix ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminuptake ( arraysize ) ) +ALLOCATE ( casaflux_data % Plabuptake ( arraysize ) ) +ALLOCATE ( casaflux_data % Clabloss ( arraysize ) ) +ALLOCATE ( casaflux_data % fracClabile ( arraysize ) ) +ALLOCATE ( casaflux_data % stemnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( casaflux_data % sapwood_area ( arraysize ) ) +ALLOCATE ( casaflux_data % Crsoil ( arraysize ) ) +ALLOCATE ( casaflux_data % Nmindep ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminloss ( arraysize ) ) +ALLOCATE ( casaflux_data % Nminleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Nupland ( arraysize ) ) +ALLOCATE ( casaflux_data % Nlittermin ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsmin ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsimm ( arraysize ) ) +ALLOCATE ( casaflux_data % Nsnet ( arraysize ) ) +ALLOCATE ( casaflux_data % fNminloss ( arraysize ) ) +ALLOCATE ( casaflux_data % fNminleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Pdep ( arraysize ) ) +ALLOCATE ( casaflux_data % Pwea ( arraysize ) ) +ALLOCATE ( casaflux_data % Pleach ( arraysize ) ) +ALLOCATE ( casaflux_data % Ploss ( arraysize ) ) +ALLOCATE ( casaflux_data % Pupland ( arraysize ) ) +ALLOCATE ( casaflux_data % Plittermin ( arraysize ) ) +ALLOCATE ( casaflux_data % Psmin ( arraysize ) ) +ALLOCATE ( casaflux_data % Psimm ( arraysize ) ) +ALLOCATE ( casaflux_data % Psnet ( arraysize ) ) +ALLOCATE ( casaflux_data % fPleach ( arraysize ) ) +ALLOCATE ( casaflux_data % kplab ( arraysize ) ) +ALLOCATE ( casaflux_data % kpsorb ( arraysize ) ) +ALLOCATE ( casaflux_data % kpocc ( arraysize ) ) +ALLOCATE ( casaflux_data % kmlabp ( arraysize ) ) +ALLOCATE ( casaflux_data % Psorbmax ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnep ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtoCO2 ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxNtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxPtohwp ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxCtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxNtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % FluxPtoclear ( arraysize ) ) +ALLOCATE ( casaflux_data % CtransferLUC ( arraysize ) ) +ALLOCATE ( casaflux_data % meangpp ( arraysize ) ) +ALLOCATE ( casaflux_data % meanrleaf ( arraysize ) ) + +ALLOCATE ( casaflux_data % fracCalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % fracNalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % fracPalloc ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % Crmplant ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % kplant ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % klitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % ksoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % fromLtoCO2 ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % fromStoCO2 ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxCtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxNtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxPtolitter ( arraysize, mlitter ) ) +ALLOCATE ( casaflux_data % FluxCtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxNtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % FluxPtosoil ( arraysize, msoil ) ) +ALLOCATE ( casaflux_data % fromPtoL ( arraysize, mlitter, mplant ) ) +ALLOCATE ( casaflux_data % fromLtoS ( arraysize, msoil, mlitter ) ) +ALLOCATE ( casaflux_data % fromStoS ( arraysize, msoil, msoil ) ) + +ALLOCATE ( casaflux_data % Cplant_turnover ( arraysize, mplant ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_disturbance ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_crowding ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_resource_limitation( arraysize ) ) + +END SUBROUTINE alloc_casa_flux_data_type + +SUBROUTINE zero_casa_flux_data_type( casaflux_data ) + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data + +casaflux_data % Cgpp (:) = 0.0 +casaflux_data % Cnpp (:) = 0.0 +casaflux_data % Crp (:) = 0.0 +casaflux_data % Crgplant (:) = 0.0 +casaflux_data % Nminfix (:) = 0.0 +casaflux_data % Nminuptake (:) = 0.0 +casaflux_data % Plabuptake (:) = 0.0 +casaflux_data % Clabloss (:) = 0.0 +casaflux_data % fracClabile (:) = 0.0 +casaflux_data % stemnpp (:) = 0.0 +casaflux_data % frac_sapwood (:) = 0.0 +casaflux_data % sapwood_area (:) = 0.0 +casaflux_data % Crsoil (:) = 0.0 +casaflux_data % Nmindep (:) = 0.0 +casaflux_data % Nminloss (:) = 0.0 +casaflux_data % Nminleach (:) = 0.0 +casaflux_data % Nupland (:) = 0.0 +casaflux_data % Nlittermin (:) = 0.0 +casaflux_data % Nsmin (:) = 0.0 +casaflux_data % Nsimm (:) = 0.0 +casaflux_data % Nsnet (:) = 0.0 +casaflux_data % fNminloss (:) = 0.0 +casaflux_data % fNminleach (:) = 0.0 +casaflux_data % Pdep (:) = 0.0 +casaflux_data % Pwea (:) = 0.0 +casaflux_data % Pleach (:) = 0.0 +casaflux_data % Ploss (:) = 0.0 +casaflux_data % Pupland (:) = 0.0 +casaflux_data % Plittermin (:) = 0.0 +casaflux_data % Psmin (:) = 0.0 +casaflux_data % Psimm (:) = 0.0 +casaflux_data % Psnet (:) = 0.0 +casaflux_data % fPleach (:) = 0.0 +casaflux_data % kplab (:) = 0.0 +casaflux_data % kpsorb (:) = 0.0 +casaflux_data % kpocc (:) = 0.0 +casaflux_data % kmlabp (:) = 0.0 +casaflux_data % Psorbmax (:) = 0.0 +casaflux_data % Cnep (:) = 0.0 +casaflux_data % FluxCtoCO2 (:) = 0.0 +casaflux_data % FluxCtohwp (:) = 0.0 +casaflux_data % FluxNtohwp (:) = 0.0 +casaflux_data % FluxPtohwp (:) = 0.0 +casaflux_data % FluxCtoclear (:) = 0.0 +casaflux_data % FluxNtoclear (:) = 0.0 +casaflux_data % FluxPtoclear (:) = 0.0 +casaflux_data % CtransferLUC (:) = 0.0 +casaflux_data % meangpp (:) = 0.0 +casaflux_data % meanrleaf (:) = 0.0 +casaflux_data % fracCalloc (:,:) = 0.0 +casaflux_data % fracNalloc (:,:) = 0.0 +casaflux_data % fracPalloc (:,:) = 0.0 +casaflux_data % Crmplant (:,:) = 0.0 +casaflux_data % kplant (:,:) = 0.0 +casaflux_data % klitter (:,:) = 0.0 +casaflux_data % ksoil (:,:) = 0.0 +casaflux_data % fromLtoCO2 (:,:) = 0.0 +casaflux_data % fromStoCO2 (:,:) = 0.0 +casaflux_data % FluxCtolitter (:,:) = 0.0 +casaflux_data % FluxNtolitter (:,:) = 0.0 +casaflux_data % FluxPtolitter (:,:) = 0.0 +casaflux_data % FluxCtosoil (:,:) = 0.0 +casaflux_data % FluxNtosoil (:,:) = 0.0 +casaflux_data % FluxPtosoil (:,:) = 0.0 +casaflux_data % fromPtoL (:,:,:) = 0.0 +casaflux_data % fromLtoS (:,:,:) = 0.0 +casaflux_data % fromStoS (:,:,:) = 0.0 +casaflux_data % Cplant_turnover (:,:) = 0.0 +casaflux_data % Cplant_turnover_disturbance (:) = 0.0 +casaflux_data % Cplant_turnover_crowding (:) = 0.0 +casaflux_data % Cplant_turnover_resource_limitation (:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_flux_data_type + +SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) + +IMPLICIT NONE + +TYPE (casa_flux_type), INTENT(INOUT) :: casaflux +TYPE (casa_flux_data_type), INTENT(INOUT), TARGET :: casaflux_data + +casaflux % Cgpp => casaflux_data % Cgpp +casaflux % Cnpp => casaflux_data % Cnpp +casaflux % Crp => casaflux_data % Crp +casaflux % Crgplant => casaflux_data % Crgplant +casaflux % Nminfix => casaflux_data % Nminfix +casaflux % Nminuptake => casaflux_data % Nminuptake +casaflux % Plabuptake => casaflux_data % Plabuptake +casaflux % Clabloss => casaflux_data % Clabloss +casaflux % fracClabile => casaflux_data % fracClabile +casaflux % stemnpp => casaflux_data % stemnpp +casaflux % frac_sapwood => casaflux_data % frac_sapwood +casaflux % sapwood_area => casaflux_data % sapwood_area +casaflux % Crsoil => casaflux_data % Crsoil +casaflux % Nmindep => casaflux_data % Nmindep +casaflux % Nminloss => casaflux_data % Nminloss +casaflux % Nminleach => casaflux_data % Nminleach +casaflux % Nupland => casaflux_data % Nupland +casaflux % Nlittermin => casaflux_data % Nlittermin +casaflux % Nsmin => casaflux_data % Nsmin +casaflux % Nsimm => casaflux_data % Nsimm +casaflux % Nsnet => casaflux_data % Nsnet +casaflux % fNminloss => casaflux_data % fNminloss +casaflux % fNminleach => casaflux_data % fNminleach +casaflux % Pdep => casaflux_data % Pdep +casaflux % Pwea => casaflux_data % Pwea +casaflux % Pleach => casaflux_data % Pleach +casaflux % Ploss => casaflux_data % Ploss +casaflux % Pupland => casaflux_data % Pupland +casaflux % Plittermin => casaflux_data % Plittermin +casaflux % Psmin => casaflux_data % Psmin +casaflux % Psimm => casaflux_data % Psimm +casaflux % Psnet => casaflux_data % Psnet +casaflux % fPleach => casaflux_data % fPleach +casaflux % kplab => casaflux_data % kplab +casaflux % kpsorb => casaflux_data % kpsorb +casaflux % kpocc => casaflux_data % kpocc +casaflux % kmlabp => casaflux_data % kmlabp +casaflux % Psorbmax => casaflux_data % Psorbmax +casaflux % Cnep => casaflux_data % Cnep +casaflux % FluxCtoCO2 => casaflux_data % FluxCtoCO2 +casaflux % FluxCtohwp => casaflux_data % FluxCtohwp +casaflux % FluxNtohwp => casaflux_data % FluxNtohwp +casaflux % FluxPtohwp => casaflux_data % FluxPtohwp +casaflux % FluxCtoclear => casaflux_data % FluxCtoclear +casaflux % FluxNtoclear => casaflux_data % FluxNtoclear +casaflux % FluxPtoclear => casaflux_data % FluxPtoclear +casaflux % CtransferLUC => casaflux_data % CtransferLUC +casaflux % meangpp => casaflux_data % meangpp +casaflux % meanrleaf => casaflux_data % meanrleaf + +casaflux % fracCalloc => casaflux_data % fracCalloc +casaflux % fracNalloc => casaflux_data % fracNalloc +casaflux % fracPalloc => casaflux_data % fracPalloc +casaflux % Crmplant => casaflux_data % Crmplant +casaflux % kplant => casaflux_data % kplant +casaflux % klitter => casaflux_data % klitter +casaflux % ksoil => casaflux_data % ksoil +casaflux % fromLtoCO2 => casaflux_data % fromLtoCO2 +casaflux % fromStoCO2 => casaflux_data % fromStoCO2 +casaflux % FluxCtolitter => casaflux_data % FluxCtolitter +casaflux % FluxNtolitter => casaflux_data % FluxNtolitter +casaflux % FluxPtolitter => casaflux_data % FluxPtolitter +casaflux % FluxCtosoil => casaflux_data % FluxCtosoil +casaflux % FluxNtosoil => casaflux_data % FluxNtosoil +casaflux % FluxPtosoil => casaflux_data % FluxPtosoil +casaflux % fromPtoL => casaflux_data % fromPtoL +casaflux % fromLtoS => casaflux_data % fromLtoS +casaflux % fromStoS => casaflux_data % fromStoS + +casaflux % Cplant_turnover => casaflux_data % Cplant_turnover +casaflux % Cplant_turnover_disturbance & + => casaflux_data % Cplant_turnover_disturbance +casaflux % Cplant_turnover_crowding & + => casaflux_data % Cplant_turnover_crowding +casaflux % Cplant_turnover_resource_limitation & + => casaflux_data % Cplant_turnover_resource_limitation + +END SUBROUTINE assoc_casa_flux_type + +END MODULE casa_flux_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_inout.F90 b/src/coupled/AM3/control/casa/types/casa_inout.F90 new file mode 100644 index 000000000..411904a0f --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_inout.F90 @@ -0,0 +1,7732 @@ +#define UM_CBL YES +!============================================================================== +! This source code is part of the +! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. +! This work is licensed under the CSIRO Open Source Software License +! Agreement (variation of the BSD / MIT License). +! +! You may not use this file except in compliance with this License. +! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) is located +! in each directory containing CABLE code. +! +! ============================================================================== +! Purpose: Input and output code for CASA-CNP when run offline +! ACCESS version may use some of this code but split into different files? +! +! Contact: Yingping.Wang@csiro.au and Bernard.Pak@csiro.au +! +! History: Developed for offline code. Expect to re-write for MPI and ACCESS +! versions +! +! +! ============================================================================== +! casa_inout.f90 +! +! the following routines are used when "casacnp" is coupled to "cable" +! casa_readbiome +! casa_readphen +! casa_readpoint (removed, now done in parameter_module) +! casa_init +! casa_poolout +! casa_cnpflux (zeros casabal quantites on doy 1 and updates casabal at end of biogeochem) +! biogeochem + +MODULE casa_inout_module + +USE casa_files_type_mod, ONLY: casafile ! TYPE instance + +CONTAINS + + SUBROUTINE casa_readphen(veg,casamet,phen) + !SUBROUTINE casa_readphen(mvt,veg,casamet,phen) + ! read in the tabulated modis-derived leaf phenology data + ! for latitude bands of 79.75 to -55.25 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable +USE phenology_type_mod, ONLY: phenology_type + +IMPLICIT NONE + + TYPE (veg_parameter_type), INTENT(IN) :: veg ! vegetation parameters + TYPE (casa_met), INTENT(IN) :: casamet +TYPE (phenology_type), INTENT(INOUT) :: phen + + ! local variables + INTEGER, PARAMETER :: nphen=8! was 10(IGBP). changed by Q.Zhang @01/12/2011 + INTEGER np,nx,ilat + INTEGER, DIMENSION(271,mvtype) :: greenup, fall, phendoy1 + INTEGER, DIMENSION(nphen) :: greenupx,fallx,xphendoy1 + INTEGER, DIMENSION(271,nphen) :: greenupxy,fallxy,xyphendoy1 + INTEGER, DIMENSION(nphen) :: ivtx + REAL(r_2), DIMENSION(271) :: xlat + + ! initilize for evergreen PFTs + greenup(:,:) = -50 + fall(:,:) = 367 + phendoy1(:,:)= 2 + + !jh!OPEN(101,file=casafile%phen) + !jh!READ(101,*) + !jh!READ(101,*) (ivtx(nx),nx=1,nphen) ! fixed at 10, as only 10 of 17 IGBP PFT + !jh!! have seasonal leaf phenology + !jh!DO ilat=271,1,-1 + !jh! READ(101,*) xlat(ilat),(greenupx(nx),nx=1,nphen), & + !jh! (fallx(nx),nx=1,nphen),(xphendoy1(nx),nx=1,nphen) + !jh! DO nx=1,nphen + !jh! greenup(ilat,ivtx(nx)) = greenupx(nx) + !jh! fall(ilat,ivtx(nx)) = fallx(nx) + !jh! phendoy1(ilat,ivtx(nx))= xphendoy1(nx) + !jh! ENDDO + !jh!ENDDO + + ! xlat 79.7500000000000 +greenupxy ( 271, 1 ) = 167 +greenupxy ( 271, 2 ) = 156 +greenupxy ( 271, 3 ) = 184 +greenupxy ( 271, 4 ) = 184 +greenupxy ( 271, 5 ) = 184 +greenupxy ( 271, 6 ) = 184 +greenupxy ( 271, 7 ) = 145 +greenupxy ( 271, 8 ) = 145 +fallxy ( 271, 1 ) = 231 +fallxy ( 271, 2 ) = 231 +fallxy ( 271, 3 ) = 229 +fallxy ( 271, 4 ) = 229 +fallxy ( 271, 5 ) = 229 +fallxy ( 271, 6 ) = 229 +fallxy ( 271, 7 ) = 230 +fallxy ( 271, 8 ) = 230 +xyphendoy1 ( 271, 1 ) = 0 +xyphendoy1 ( 271, 2 ) = 0 +xyphendoy1 ( 271, 3 ) = 0 +xyphendoy1 ( 271, 4 ) = 0 +xyphendoy1 ( 271, 5 ) = 0 +xyphendoy1 ( 271, 6 ) = 0 +xyphendoy1 ( 271, 7 ) = 0 +xyphendoy1 ( 271, 8 ) = 0 + + ! xlat 79.2500000000000 +greenupxy ( 270, 1 ) = 167 +greenupxy ( 270, 2 ) = 156 +greenupxy ( 270, 3 ) = 184 +greenupxy ( 270, 4 ) = 184 +greenupxy ( 270, 5 ) = 184 +greenupxy ( 270, 6 ) = 184 +greenupxy ( 270, 7 ) = 145 +greenupxy ( 270, 8 ) = 145 +fallxy ( 270, 1 ) = 231 +fallxy ( 270, 2 ) = 231 +fallxy ( 270, 3 ) = 229 +fallxy ( 270, 4 ) = 229 +fallxy ( 270, 5 ) = 229 +fallxy ( 270, 6 ) = 229 +fallxy ( 270, 7 ) = 230 +fallxy ( 270, 8 ) = 230 +xyphendoy1 ( 270, 1 ) = 0 +xyphendoy1 ( 270, 2 ) = 0 +xyphendoy1 ( 270, 3 ) = 0 +xyphendoy1 ( 270, 4 ) = 0 +xyphendoy1 ( 270, 5 ) = 0 +xyphendoy1 ( 270, 6 ) = 0 +xyphendoy1 ( 270, 7 ) = 0 +xyphendoy1 ( 270, 8 ) = 0 + + ! xlat 78.7500000000000 +greenupxy ( 269, 1 ) = 167 +greenupxy ( 269, 2 ) = 156 +greenupxy ( 269, 3 ) = 184 +greenupxy ( 269, 4 ) = 184 +greenupxy ( 269, 5 ) = 184 +greenupxy ( 269, 6 ) = 184 +greenupxy ( 269, 7 ) = 145 +greenupxy ( 269, 8 ) = 145 +fallxy ( 269, 1 ) = 231 +fallxy ( 269, 2 ) = 231 +fallxy ( 269, 3 ) = 229 +fallxy ( 269, 4 ) = 229 +fallxy ( 269, 5 ) = 229 +fallxy ( 269, 6 ) = 229 +fallxy ( 269, 7 ) = 230 +fallxy ( 269, 8 ) = 230 +xyphendoy1 ( 269, 1 ) = 0 +xyphendoy1 ( 269, 2 ) = 0 +xyphendoy1 ( 269, 3 ) = 0 +xyphendoy1 ( 269, 4 ) = 0 +xyphendoy1 ( 269, 5 ) = 0 +xyphendoy1 ( 269, 6 ) = 0 +xyphendoy1 ( 269, 7 ) = 0 +xyphendoy1 ( 269, 8 ) = 0 + + ! xlat 78.2500000000000 +greenupxy ( 268, 1 ) = 167 +greenupxy ( 268, 2 ) = 156 +greenupxy ( 268, 3 ) = 184 +greenupxy ( 268, 4 ) = 184 +greenupxy ( 268, 5 ) = 184 +greenupxy ( 268, 6 ) = 184 +greenupxy ( 268, 7 ) = 145 +greenupxy ( 268, 8 ) = 145 +fallxy ( 268, 1 ) = 231 +fallxy ( 268, 2 ) = 231 +fallxy ( 268, 3 ) = 229 +fallxy ( 268, 4 ) = 229 +fallxy ( 268, 5 ) = 229 +fallxy ( 268, 6 ) = 229 +fallxy ( 268, 7 ) = 230 +fallxy ( 268, 8 ) = 230 +xyphendoy1 ( 268, 1 ) = 0 +xyphendoy1 ( 268, 2 ) = 0 +xyphendoy1 ( 268, 3 ) = 0 +xyphendoy1 ( 268, 4 ) = 0 +xyphendoy1 ( 268, 5 ) = 0 +xyphendoy1 ( 268, 6 ) = 0 +xyphendoy1 ( 268, 7 ) = 0 +xyphendoy1 ( 268, 8 ) = 0 + + ! xlat 77.7500000000000 +greenupxy ( 267, 1 ) = 167 +greenupxy ( 267, 2 ) = 156 +greenupxy ( 267, 3 ) = 184 +greenupxy ( 267, 4 ) = 184 +greenupxy ( 267, 5 ) = 184 +greenupxy ( 267, 6 ) = 184 +greenupxy ( 267, 7 ) = 145 +greenupxy ( 267, 8 ) = 145 +fallxy ( 267, 1 ) = 231 +fallxy ( 267, 2 ) = 231 +fallxy ( 267, 3 ) = 229 +fallxy ( 267, 4 ) = 229 +fallxy ( 267, 5 ) = 229 +fallxy ( 267, 6 ) = 229 +fallxy ( 267, 7 ) = 230 +fallxy ( 267, 8 ) = 230 +xyphendoy1 ( 267, 1 ) = 0 +xyphendoy1 ( 267, 2 ) = 0 +xyphendoy1 ( 267, 3 ) = 0 +xyphendoy1 ( 267, 4 ) = 0 +xyphendoy1 ( 267, 5 ) = 0 +xyphendoy1 ( 267, 6 ) = 0 +xyphendoy1 ( 267, 7 ) = 0 +xyphendoy1 ( 267, 8 ) = 0 + + ! xlat 77.2500000000000 +greenupxy ( 266, 1 ) = 167 +greenupxy ( 266, 2 ) = 156 +greenupxy ( 266, 3 ) = 184 +greenupxy ( 266, 4 ) = 184 +greenupxy ( 266, 5 ) = 184 +greenupxy ( 266, 6 ) = 184 +greenupxy ( 266, 7 ) = 145 +greenupxy ( 266, 8 ) = 145 +fallxy ( 266, 1 ) = 231 +fallxy ( 266, 2 ) = 231 +fallxy ( 266, 3 ) = 229 +fallxy ( 266, 4 ) = 229 +fallxy ( 266, 5 ) = 229 +fallxy ( 266, 6 ) = 229 +fallxy ( 266, 7 ) = 230 +fallxy ( 266, 8 ) = 230 +xyphendoy1 ( 266, 1 ) = 0 +xyphendoy1 ( 266, 2 ) = 0 +xyphendoy1 ( 266, 3 ) = 0 +xyphendoy1 ( 266, 4 ) = 0 +xyphendoy1 ( 266, 5 ) = 0 +xyphendoy1 ( 266, 6 ) = 0 +xyphendoy1 ( 266, 7 ) = 0 +xyphendoy1 ( 266, 8 ) = 0 + + ! xlat 76.7500000000000 +greenupxy ( 265, 1 ) = 167 +greenupxy ( 265, 2 ) = 156 +greenupxy ( 265, 3 ) = 184 +greenupxy ( 265, 4 ) = 184 +greenupxy ( 265, 5 ) = 184 +greenupxy ( 265, 6 ) = 184 +greenupxy ( 265, 7 ) = 145 +greenupxy ( 265, 8 ) = 145 +fallxy ( 265, 1 ) = 231 +fallxy ( 265, 2 ) = 231 +fallxy ( 265, 3 ) = 229 +fallxy ( 265, 4 ) = 230 +fallxy ( 265, 5 ) = 230 +fallxy ( 265, 6 ) = 230 +fallxy ( 265, 7 ) = 230 +fallxy ( 265, 8 ) = 230 +xyphendoy1 ( 265, 1 ) = 0 +xyphendoy1 ( 265, 2 ) = 0 +xyphendoy1 ( 265, 3 ) = 0 +xyphendoy1 ( 265, 4 ) = 0 +xyphendoy1 ( 265, 5 ) = 0 +xyphendoy1 ( 265, 6 ) = 0 +xyphendoy1 ( 265, 7 ) = 0 +xyphendoy1 ( 265, 8 ) = 0 + + ! xlat 76.2500000000000 +greenupxy ( 264, 1 ) = 167 +greenupxy ( 264, 2 ) = 156 +greenupxy ( 264, 3 ) = 184 +greenupxy ( 264, 4 ) = 184 +greenupxy ( 264, 5 ) = 184 +greenupxy ( 264, 6 ) = 184 +greenupxy ( 264, 7 ) = 145 +greenupxy ( 264, 8 ) = 145 +fallxy ( 264, 1 ) = 231 +fallxy ( 264, 2 ) = 231 +fallxy ( 264, 3 ) = 230 +fallxy ( 264, 4 ) = 230 +fallxy ( 264, 5 ) = 230 +fallxy ( 264, 6 ) = 230 +fallxy ( 264, 7 ) = 230 +fallxy ( 264, 8 ) = 230 +xyphendoy1 ( 264, 1 ) = 0 +xyphendoy1 ( 264, 2 ) = 0 +xyphendoy1 ( 264, 3 ) = 0 +xyphendoy1 ( 264, 4 ) = 0 +xyphendoy1 ( 264, 5 ) = 0 +xyphendoy1 ( 264, 6 ) = 0 +xyphendoy1 ( 264, 7 ) = 0 +xyphendoy1 ( 264, 8 ) = 0 + + ! xlat 75.7500000000000 +greenupxy ( 263, 1 ) = 167 +greenupxy ( 263, 2 ) = 156 +greenupxy ( 263, 3 ) = 184 +greenupxy ( 263, 4 ) = 184 +greenupxy ( 263, 5 ) = 184 +greenupxy ( 263, 6 ) = 184 +greenupxy ( 263, 7 ) = 145 +greenupxy ( 263, 8 ) = 145 +fallxy ( 263, 1 ) = 231 +fallxy ( 263, 2 ) = 231 +fallxy ( 263, 3 ) = 230 +fallxy ( 263, 4 ) = 231 +fallxy ( 263, 5 ) = 231 +fallxy ( 263, 6 ) = 231 +fallxy ( 263, 7 ) = 230 +fallxy ( 263, 8 ) = 230 +xyphendoy1 ( 263, 1 ) = 0 +xyphendoy1 ( 263, 2 ) = 0 +xyphendoy1 ( 263, 3 ) = 0 +xyphendoy1 ( 263, 4 ) = 0 +xyphendoy1 ( 263, 5 ) = 0 +xyphendoy1 ( 263, 6 ) = 0 +xyphendoy1 ( 263, 7 ) = 0 +xyphendoy1 ( 263, 8 ) = 0 + + ! xlat 75.2500000000000 +greenupxy ( 262, 1 ) = 167 +greenupxy ( 262, 2 ) = 156 +greenupxy ( 262, 3 ) = 185 +greenupxy ( 262, 4 ) = 185 +greenupxy ( 262, 5 ) = 185 +greenupxy ( 262, 6 ) = 185 +greenupxy ( 262, 7 ) = 145 +greenupxy ( 262, 8 ) = 145 +fallxy ( 262, 1 ) = 231 +fallxy ( 262, 2 ) = 231 +fallxy ( 262, 3 ) = 231 +fallxy ( 262, 4 ) = 232 +fallxy ( 262, 5 ) = 232 +fallxy ( 262, 6 ) = 232 +fallxy ( 262, 7 ) = 230 +fallxy ( 262, 8 ) = 230 +xyphendoy1 ( 262, 1 ) = 0 +xyphendoy1 ( 262, 2 ) = 0 +xyphendoy1 ( 262, 3 ) = 0 +xyphendoy1 ( 262, 4 ) = 0 +xyphendoy1 ( 262, 5 ) = 0 +xyphendoy1 ( 262, 6 ) = 0 +xyphendoy1 ( 262, 7 ) = 0 +xyphendoy1 ( 262, 8 ) = 0 + + ! xlat 74.7500000000000 +greenupxy ( 261, 1 ) = 167 +greenupxy ( 261, 2 ) = 156 +greenupxy ( 261, 3 ) = 185 +greenupxy ( 261, 4 ) = 185 +greenupxy ( 261, 5 ) = 185 +greenupxy ( 261, 6 ) = 185 +greenupxy ( 261, 7 ) = 145 +greenupxy ( 261, 8 ) = 145 +fallxy ( 261, 1 ) = 231 +fallxy ( 261, 2 ) = 231 +fallxy ( 261, 3 ) = 231 +fallxy ( 261, 4 ) = 232 +fallxy ( 261, 5 ) = 232 +fallxy ( 261, 6 ) = 232 +fallxy ( 261, 7 ) = 230 +fallxy ( 261, 8 ) = 230 +xyphendoy1 ( 261, 1 ) = 0 +xyphendoy1 ( 261, 2 ) = 0 +xyphendoy1 ( 261, 3 ) = 0 +xyphendoy1 ( 261, 4 ) = 0 +xyphendoy1 ( 261, 5 ) = 0 +xyphendoy1 ( 261, 6 ) = 0 +xyphendoy1 ( 261, 7 ) = 0 +xyphendoy1 ( 261, 8 ) = 0 + + ! xlat 74.2500000000000 +greenupxy ( 260, 1 ) = 167 +greenupxy ( 260, 2 ) = 156 +greenupxy ( 260, 3 ) = 185 +greenupxy ( 260, 4 ) = 184 +greenupxy ( 260, 5 ) = 184 +greenupxy ( 260, 6 ) = 184 +greenupxy ( 260, 7 ) = 145 +greenupxy ( 260, 8 ) = 145 +fallxy ( 260, 1 ) = 231 +fallxy ( 260, 2 ) = 231 +fallxy ( 260, 3 ) = 232 +fallxy ( 260, 4 ) = 232 +fallxy ( 260, 5 ) = 232 +fallxy ( 260, 6 ) = 232 +fallxy ( 260, 7 ) = 230 +fallxy ( 260, 8 ) = 230 +xyphendoy1 ( 260, 1 ) = 0 +xyphendoy1 ( 260, 2 ) = 0 +xyphendoy1 ( 260, 3 ) = 0 +xyphendoy1 ( 260, 4 ) = 0 +xyphendoy1 ( 260, 5 ) = 0 +xyphendoy1 ( 260, 6 ) = 0 +xyphendoy1 ( 260, 7 ) = 0 +xyphendoy1 ( 260, 8 ) = 0 + + ! xlat 73.7500000000000 +greenupxy ( 259, 1 ) = 167 +greenupxy ( 259, 2 ) = 156 +greenupxy ( 259, 3 ) = 185 +greenupxy ( 259, 4 ) = 184 +greenupxy ( 259, 5 ) = 184 +greenupxy ( 259, 6 ) = 184 +greenupxy ( 259, 7 ) = 145 +greenupxy ( 259, 8 ) = 145 +fallxy ( 259, 1 ) = 231 +fallxy ( 259, 2 ) = 231 +fallxy ( 259, 3 ) = 233 +fallxy ( 259, 4 ) = 233 +fallxy ( 259, 5 ) = 233 +fallxy ( 259, 6 ) = 233 +fallxy ( 259, 7 ) = 230 +fallxy ( 259, 8 ) = 230 +xyphendoy1 ( 259, 1 ) = 0 +xyphendoy1 ( 259, 2 ) = 0 +xyphendoy1 ( 259, 3 ) = 0 +xyphendoy1 ( 259, 4 ) = 0 +xyphendoy1 ( 259, 5 ) = 0 +xyphendoy1 ( 259, 6 ) = 0 +xyphendoy1 ( 259, 7 ) = 0 +xyphendoy1 ( 259, 8 ) = 0 + + ! xlat 73.2500000000000 +greenupxy ( 258, 1 ) = 167 +greenupxy ( 258, 2 ) = 156 +greenupxy ( 258, 3 ) = 186 +greenupxy ( 258, 4 ) = 183 +greenupxy ( 258, 5 ) = 183 +greenupxy ( 258, 6 ) = 183 +greenupxy ( 258, 7 ) = 145 +greenupxy ( 258, 8 ) = 145 +fallxy ( 258, 1 ) = 231 +fallxy ( 258, 2 ) = 231 +fallxy ( 258, 3 ) = 232 +fallxy ( 258, 4 ) = 233 +fallxy ( 258, 5 ) = 233 +fallxy ( 258, 6 ) = 233 +fallxy ( 258, 7 ) = 230 +fallxy ( 258, 8 ) = 230 +xyphendoy1 ( 258, 1 ) = 0 +xyphendoy1 ( 258, 2 ) = 0 +xyphendoy1 ( 258, 3 ) = 0 +xyphendoy1 ( 258, 4 ) = 0 +xyphendoy1 ( 258, 5 ) = 0 +xyphendoy1 ( 258, 6 ) = 0 +xyphendoy1 ( 258, 7 ) = 0 +xyphendoy1 ( 258, 8 ) = 0 + + ! xlat 72.7500000000000 +greenupxy ( 257, 1 ) = 167 +greenupxy ( 257, 2 ) = 156 +greenupxy ( 257, 3 ) = 186 +greenupxy ( 257, 4 ) = 184 +greenupxy ( 257, 5 ) = 184 +greenupxy ( 257, 6 ) = 184 +greenupxy ( 257, 7 ) = 145 +greenupxy ( 257, 8 ) = 145 +fallxy ( 257, 1 ) = 231 +fallxy ( 257, 2 ) = 231 +fallxy ( 257, 3 ) = 233 +fallxy ( 257, 4 ) = 234 +fallxy ( 257, 5 ) = 234 +fallxy ( 257, 6 ) = 234 +fallxy ( 257, 7 ) = 230 +fallxy ( 257, 8 ) = 230 +xyphendoy1 ( 257, 1 ) = 0 +xyphendoy1 ( 257, 2 ) = 0 +xyphendoy1 ( 257, 3 ) = 0 +xyphendoy1 ( 257, 4 ) = 0 +xyphendoy1 ( 257, 5 ) = 0 +xyphendoy1 ( 257, 6 ) = 0 +xyphendoy1 ( 257, 7 ) = 0 +xyphendoy1 ( 257, 8 ) = 0 + + ! xlat 72.2500000000000 +greenupxy ( 256, 1 ) = 167 +greenupxy ( 256, 2 ) = 156 +greenupxy ( 256, 3 ) = 186 +greenupxy ( 256, 4 ) = 183 +greenupxy ( 256, 5 ) = 183 +greenupxy ( 256, 6 ) = 183 +greenupxy ( 256, 7 ) = 145 +greenupxy ( 256, 8 ) = 145 +fallxy ( 256, 1 ) = 231 +fallxy ( 256, 2 ) = 231 +fallxy ( 256, 3 ) = 234 +fallxy ( 256, 4 ) = 234 +fallxy ( 256, 5 ) = 234 +fallxy ( 256, 6 ) = 234 +fallxy ( 256, 7 ) = 230 +fallxy ( 256, 8 ) = 230 +xyphendoy1 ( 256, 1 ) = 0 +xyphendoy1 ( 256, 2 ) = 0 +xyphendoy1 ( 256, 3 ) = 0 +xyphendoy1 ( 256, 4 ) = 0 +xyphendoy1 ( 256, 5 ) = 0 +xyphendoy1 ( 256, 6 ) = 0 +xyphendoy1 ( 256, 7 ) = 0 +xyphendoy1 ( 256, 8 ) = 0 + + ! xlat 71.7500000000000 +greenupxy ( 255, 1 ) = 167 +greenupxy ( 255, 2 ) = 156 +greenupxy ( 255, 3 ) = 185 +greenupxy ( 255, 4 ) = 183 +greenupxy ( 255, 5 ) = 183 +greenupxy ( 255, 6 ) = 183 +greenupxy ( 255, 7 ) = 145 +greenupxy ( 255, 8 ) = 145 +fallxy ( 255, 1 ) = 231 +fallxy ( 255, 2 ) = 231 +fallxy ( 255, 3 ) = 234 +fallxy ( 255, 4 ) = 234 +fallxy ( 255, 5 ) = 234 +fallxy ( 255, 6 ) = 234 +fallxy ( 255, 7 ) = 230 +fallxy ( 255, 8 ) = 230 +xyphendoy1 ( 255, 1 ) = 0 +xyphendoy1 ( 255, 2 ) = 0 +xyphendoy1 ( 255, 3 ) = 0 +xyphendoy1 ( 255, 4 ) = 0 +xyphendoy1 ( 255, 5 ) = 0 +xyphendoy1 ( 255, 6 ) = 0 +xyphendoy1 ( 255, 7 ) = 0 +xyphendoy1 ( 255, 8 ) = 0 + + ! xlat 71.2500000000000 +greenupxy ( 254, 1 ) = 167 +greenupxy ( 254, 2 ) = 156 +greenupxy ( 254, 3 ) = 184 +greenupxy ( 254, 4 ) = 182 +greenupxy ( 254, 5 ) = 182 +greenupxy ( 254, 6 ) = 182 +greenupxy ( 254, 7 ) = 145 +greenupxy ( 254, 8 ) = 145 +fallxy ( 254, 1 ) = 231 +fallxy ( 254, 2 ) = 231 +fallxy ( 254, 3 ) = 234 +fallxy ( 254, 4 ) = 234 +fallxy ( 254, 5 ) = 234 +fallxy ( 254, 6 ) = 234 +fallxy ( 254, 7 ) = 230 +fallxy ( 254, 8 ) = 230 +xyphendoy1 ( 254, 1 ) = 0 +xyphendoy1 ( 254, 2 ) = 0 +xyphendoy1 ( 254, 3 ) = 0 +xyphendoy1 ( 254, 4 ) = 0 +xyphendoy1 ( 254, 5 ) = 0 +xyphendoy1 ( 254, 6 ) = 0 +xyphendoy1 ( 254, 7 ) = 0 +xyphendoy1 ( 254, 8 ) = 0 + + ! xlat 70.7500000000000 +greenupxy ( 253, 1 ) = 167 +greenupxy ( 253, 2 ) = 156 +greenupxy ( 253, 3 ) = 183 +greenupxy ( 253, 4 ) = 181 +greenupxy ( 253, 5 ) = 181 +greenupxy ( 253, 6 ) = 181 +greenupxy ( 253, 7 ) = 145 +greenupxy ( 253, 8 ) = 145 +fallxy ( 253, 1 ) = 231 +fallxy ( 253, 2 ) = 231 +fallxy ( 253, 3 ) = 234 +fallxy ( 253, 4 ) = 233 +fallxy ( 253, 5 ) = 233 +fallxy ( 253, 6 ) = 233 +fallxy ( 253, 7 ) = 230 +fallxy ( 253, 8 ) = 230 +xyphendoy1 ( 253, 1 ) = 0 +xyphendoy1 ( 253, 2 ) = 0 +xyphendoy1 ( 253, 3 ) = 0 +xyphendoy1 ( 253, 4 ) = 0 +xyphendoy1 ( 253, 5 ) = 0 +xyphendoy1 ( 253, 6 ) = 0 +xyphendoy1 ( 253, 7 ) = 0 +xyphendoy1 ( 253, 8 ) = 0 + + ! xlat 70.2500000000000 +greenupxy ( 252, 1 ) = 167 +greenupxy ( 252, 2 ) = 156 +greenupxy ( 252, 3 ) = 182 +greenupxy ( 252, 4 ) = 180 +greenupxy ( 252, 5 ) = 180 +greenupxy ( 252, 6 ) = 180 +greenupxy ( 252, 7 ) = 145 +greenupxy ( 252, 8 ) = 145 +fallxy ( 252, 1 ) = 231 +fallxy ( 252, 2 ) = 231 +fallxy ( 252, 3 ) = 234 +fallxy ( 252, 4 ) = 234 +fallxy ( 252, 5 ) = 234 +fallxy ( 252, 6 ) = 234 +fallxy ( 252, 7 ) = 230 +fallxy ( 252, 8 ) = 230 +xyphendoy1 ( 252, 1 ) = 0 +xyphendoy1 ( 252, 2 ) = 0 +xyphendoy1 ( 252, 3 ) = 0 +xyphendoy1 ( 252, 4 ) = 0 +xyphendoy1 ( 252, 5 ) = 0 +xyphendoy1 ( 252, 6 ) = 0 +xyphendoy1 ( 252, 7 ) = 0 +xyphendoy1 ( 252, 8 ) = 0 + + ! xlat 69.7500000000000 +greenupxy ( 251, 1 ) = 167 +greenupxy ( 251, 2 ) = 156 +greenupxy ( 251, 3 ) = 181 +greenupxy ( 251, 4 ) = 178 +greenupxy ( 251, 5 ) = 178 +greenupxy ( 251, 6 ) = 178 +greenupxy ( 251, 7 ) = 145 +greenupxy ( 251, 8 ) = 145 +fallxy ( 251, 1 ) = 231 +fallxy ( 251, 2 ) = 231 +fallxy ( 251, 3 ) = 234 +fallxy ( 251, 4 ) = 234 +fallxy ( 251, 5 ) = 234 +fallxy ( 251, 6 ) = 234 +fallxy ( 251, 7 ) = 230 +fallxy ( 251, 8 ) = 230 +xyphendoy1 ( 251, 1 ) = 0 +xyphendoy1 ( 251, 2 ) = 0 +xyphendoy1 ( 251, 3 ) = 0 +xyphendoy1 ( 251, 4 ) = 0 +xyphendoy1 ( 251, 5 ) = 0 +xyphendoy1 ( 251, 6 ) = 0 +xyphendoy1 ( 251, 7 ) = 0 +xyphendoy1 ( 251, 8 ) = 0 + + ! xlat 69.2500000000000 +greenupxy ( 250, 1 ) = 167 +greenupxy ( 250, 2 ) = 156 +greenupxy ( 250, 3 ) = 179 +greenupxy ( 250, 4 ) = 177 +greenupxy ( 250, 5 ) = 177 +greenupxy ( 250, 6 ) = 177 +greenupxy ( 250, 7 ) = 145 +greenupxy ( 250, 8 ) = 145 +fallxy ( 250, 1 ) = 231 +fallxy ( 250, 2 ) = 231 +fallxy ( 250, 3 ) = 234 +fallxy ( 250, 4 ) = 234 +fallxy ( 250, 5 ) = 234 +fallxy ( 250, 6 ) = 234 +fallxy ( 250, 7 ) = 230 +fallxy ( 250, 8 ) = 230 +xyphendoy1 ( 250, 1 ) = 0 +xyphendoy1 ( 250, 2 ) = 0 +xyphendoy1 ( 250, 3 ) = 0 +xyphendoy1 ( 250, 4 ) = 0 +xyphendoy1 ( 250, 5 ) = 0 +xyphendoy1 ( 250, 6 ) = 0 +xyphendoy1 ( 250, 7 ) = 0 +xyphendoy1 ( 250, 8 ) = 0 + + ! xlat 68.7500000000000 +greenupxy ( 249, 1 ) = 167 +greenupxy ( 249, 2 ) = 156 +greenupxy ( 249, 3 ) = 177 +greenupxy ( 249, 4 ) = 176 +greenupxy ( 249, 5 ) = 176 +greenupxy ( 249, 6 ) = 176 +greenupxy ( 249, 7 ) = 145 +greenupxy ( 249, 8 ) = 145 +fallxy ( 249, 1 ) = 231 +fallxy ( 249, 2 ) = 231 +fallxy ( 249, 3 ) = 234 +fallxy ( 249, 4 ) = 233 +fallxy ( 249, 5 ) = 233 +fallxy ( 249, 6 ) = 233 +fallxy ( 249, 7 ) = 230 +fallxy ( 249, 8 ) = 230 +xyphendoy1 ( 249, 1 ) = 0 +xyphendoy1 ( 249, 2 ) = 0 +xyphendoy1 ( 249, 3 ) = 0 +xyphendoy1 ( 249, 4 ) = 0 +xyphendoy1 ( 249, 5 ) = 0 +xyphendoy1 ( 249, 6 ) = 0 +xyphendoy1 ( 249, 7 ) = 0 +xyphendoy1 ( 249, 8 ) = 0 + + ! xlat 68.2500000000000 +greenupxy ( 248, 1 ) = 167 +greenupxy ( 248, 2 ) = 156 +greenupxy ( 248, 3 ) = 176 +greenupxy ( 248, 4 ) = 174 +greenupxy ( 248, 5 ) = 174 +greenupxy ( 248, 6 ) = 174 +greenupxy ( 248, 7 ) = 145 +greenupxy ( 248, 8 ) = 145 +fallxy ( 248, 1 ) = 231 +fallxy ( 248, 2 ) = 231 +fallxy ( 248, 3 ) = 233 +fallxy ( 248, 4 ) = 233 +fallxy ( 248, 5 ) = 233 +fallxy ( 248, 6 ) = 233 +fallxy ( 248, 7 ) = 230 +fallxy ( 248, 8 ) = 230 +xyphendoy1 ( 248, 1 ) = 0 +xyphendoy1 ( 248, 2 ) = 0 +xyphendoy1 ( 248, 3 ) = 0 +xyphendoy1 ( 248, 4 ) = 0 +xyphendoy1 ( 248, 5 ) = 0 +xyphendoy1 ( 248, 6 ) = 0 +xyphendoy1 ( 248, 7 ) = 0 +xyphendoy1 ( 248, 8 ) = 0 + + ! xlat 67.7500000000000 +greenupxy ( 247, 1 ) = 167 +greenupxy ( 247, 2 ) = 156 +greenupxy ( 247, 3 ) = 175 +greenupxy ( 247, 4 ) = 173 +greenupxy ( 247, 5 ) = 173 +greenupxy ( 247, 6 ) = 173 +greenupxy ( 247, 7 ) = 145 +greenupxy ( 247, 8 ) = 145 +fallxy ( 247, 1 ) = 231 +fallxy ( 247, 2 ) = 231 +fallxy ( 247, 3 ) = 233 +fallxy ( 247, 4 ) = 233 +fallxy ( 247, 5 ) = 233 +fallxy ( 247, 6 ) = 233 +fallxy ( 247, 7 ) = 230 +fallxy ( 247, 8 ) = 230 +xyphendoy1 ( 247, 1 ) = 0 +xyphendoy1 ( 247, 2 ) = 0 +xyphendoy1 ( 247, 3 ) = 0 +xyphendoy1 ( 247, 4 ) = 0 +xyphendoy1 ( 247, 5 ) = 0 +xyphendoy1 ( 247, 6 ) = 0 +xyphendoy1 ( 247, 7 ) = 0 +xyphendoy1 ( 247, 8 ) = 0 + + ! xlat 67.2500000000000 +greenupxy ( 246, 1 ) = 167 +greenupxy ( 246, 2 ) = 156 +greenupxy ( 246, 3 ) = 173 +greenupxy ( 246, 4 ) = 171 +greenupxy ( 246, 5 ) = 171 +greenupxy ( 246, 6 ) = 171 +greenupxy ( 246, 7 ) = 145 +greenupxy ( 246, 8 ) = 145 +fallxy ( 246, 1 ) = 231 +fallxy ( 246, 2 ) = 231 +fallxy ( 246, 3 ) = 233 +fallxy ( 246, 4 ) = 233 +fallxy ( 246, 5 ) = 233 +fallxy ( 246, 6 ) = 233 +fallxy ( 246, 7 ) = 230 +fallxy ( 246, 8 ) = 230 +xyphendoy1 ( 246, 1 ) = 0 +xyphendoy1 ( 246, 2 ) = 0 +xyphendoy1 ( 246, 3 ) = 0 +xyphendoy1 ( 246, 4 ) = 0 +xyphendoy1 ( 246, 5 ) = 0 +xyphendoy1 ( 246, 6 ) = 0 +xyphendoy1 ( 246, 7 ) = 0 +xyphendoy1 ( 246, 8 ) = 0 + + ! xlat 66.7500000000000 +greenupxy ( 245, 1 ) = 166 +greenupxy ( 245, 2 ) = 156 +greenupxy ( 245, 3 ) = 172 +greenupxy ( 245, 4 ) = 170 +greenupxy ( 245, 5 ) = 170 +greenupxy ( 245, 6 ) = 170 +greenupxy ( 245, 7 ) = 145 +greenupxy ( 245, 8 ) = 145 +fallxy ( 245, 1 ) = 231 +fallxy ( 245, 2 ) = 230 +fallxy ( 245, 3 ) = 233 +fallxy ( 245, 4 ) = 233 +fallxy ( 245, 5 ) = 233 +fallxy ( 245, 6 ) = 233 +fallxy ( 245, 7 ) = 230 +fallxy ( 245, 8 ) = 230 +xyphendoy1 ( 245, 1 ) = 0 +xyphendoy1 ( 245, 2 ) = 0 +xyphendoy1 ( 245, 3 ) = 0 +xyphendoy1 ( 245, 4 ) = 0 +xyphendoy1 ( 245, 5 ) = 0 +xyphendoy1 ( 245, 6 ) = 0 +xyphendoy1 ( 245, 7 ) = 0 +xyphendoy1 ( 245, 8 ) = 0 + + ! xlat 66.2500000000000 +greenupxy ( 244, 1 ) = 166 +greenupxy ( 244, 2 ) = 155 +greenupxy ( 244, 3 ) = 171 +greenupxy ( 244, 4 ) = 168 +greenupxy ( 244, 5 ) = 168 +greenupxy ( 244, 6 ) = 168 +greenupxy ( 244, 7 ) = 145 +greenupxy ( 244, 8 ) = 145 +fallxy ( 244, 1 ) = 231 +fallxy ( 244, 2 ) = 230 +fallxy ( 244, 3 ) = 233 +fallxy ( 244, 4 ) = 233 +fallxy ( 244, 5 ) = 233 +fallxy ( 244, 6 ) = 233 +fallxy ( 244, 7 ) = 230 +fallxy ( 244, 8 ) = 230 +xyphendoy1 ( 244, 1 ) = 0 +xyphendoy1 ( 244, 2 ) = 0 +xyphendoy1 ( 244, 3 ) = 0 +xyphendoy1 ( 244, 4 ) = 0 +xyphendoy1 ( 244, 5 ) = 0 +xyphendoy1 ( 244, 6 ) = 0 +xyphendoy1 ( 244, 7 ) = 0 +xyphendoy1 ( 244, 8 ) = 0 + + ! xlat 65.7500000000000 +greenupxy ( 243, 1 ) = 164 +greenupxy ( 243, 2 ) = 154 +greenupxy ( 243, 3 ) = 170 +greenupxy ( 243, 4 ) = 167 +greenupxy ( 243, 5 ) = 167 +greenupxy ( 243, 6 ) = 167 +greenupxy ( 243, 7 ) = 145 +greenupxy ( 243, 8 ) = 145 +fallxy ( 243, 1 ) = 231 +fallxy ( 243, 2 ) = 230 +fallxy ( 243, 3 ) = 233 +fallxy ( 243, 4 ) = 233 +fallxy ( 243, 5 ) = 233 +fallxy ( 243, 6 ) = 233 +fallxy ( 243, 7 ) = 230 +fallxy ( 243, 8 ) = 230 +xyphendoy1 ( 243, 1 ) = 0 +xyphendoy1 ( 243, 2 ) = 0 +xyphendoy1 ( 243, 3 ) = 0 +xyphendoy1 ( 243, 4 ) = 0 +xyphendoy1 ( 243, 5 ) = 0 +xyphendoy1 ( 243, 6 ) = 0 +xyphendoy1 ( 243, 7 ) = 0 +xyphendoy1 ( 243, 8 ) = 0 + + ! xlat 65.2500000000000 +greenupxy ( 242, 1 ) = 163 +greenupxy ( 242, 2 ) = 153 +greenupxy ( 242, 3 ) = 169 +greenupxy ( 242, 4 ) = 166 +greenupxy ( 242, 5 ) = 166 +greenupxy ( 242, 6 ) = 166 +greenupxy ( 242, 7 ) = 145 +greenupxy ( 242, 8 ) = 145 +fallxy ( 242, 1 ) = 231 +fallxy ( 242, 2 ) = 230 +fallxy ( 242, 3 ) = 233 +fallxy ( 242, 4 ) = 233 +fallxy ( 242, 5 ) = 233 +fallxy ( 242, 6 ) = 233 +fallxy ( 242, 7 ) = 230 +fallxy ( 242, 8 ) = 230 +xyphendoy1 ( 242, 1 ) = 0 +xyphendoy1 ( 242, 2 ) = 0 +xyphendoy1 ( 242, 3 ) = 0 +xyphendoy1 ( 242, 4 ) = 0 +xyphendoy1 ( 242, 5 ) = 0 +xyphendoy1 ( 242, 6 ) = 0 +xyphendoy1 ( 242, 7 ) = 0 +xyphendoy1 ( 242, 8 ) = 0 + + ! xlat 64.7500000000000 +greenupxy ( 241, 1 ) = 161 +greenupxy ( 241, 2 ) = 153 +greenupxy ( 241, 3 ) = 168 +greenupxy ( 241, 4 ) = 165 +greenupxy ( 241, 5 ) = 165 +greenupxy ( 241, 6 ) = 165 +greenupxy ( 241, 7 ) = 145 +greenupxy ( 241, 8 ) = 145 +fallxy ( 241, 1 ) = 231 +fallxy ( 241, 2 ) = 230 +fallxy ( 241, 3 ) = 233 +fallxy ( 241, 4 ) = 232 +fallxy ( 241, 5 ) = 232 +fallxy ( 241, 6 ) = 232 +fallxy ( 241, 7 ) = 230 +fallxy ( 241, 8 ) = 230 +xyphendoy1 ( 241, 1 ) = 0 +xyphendoy1 ( 241, 2 ) = 0 +xyphendoy1 ( 241, 3 ) = 0 +xyphendoy1 ( 241, 4 ) = 0 +xyphendoy1 ( 241, 5 ) = 0 +xyphendoy1 ( 241, 6 ) = 0 +xyphendoy1 ( 241, 7 ) = 0 +xyphendoy1 ( 241, 8 ) = 0 + + ! xlat 64.2500000000000 +greenupxy ( 240, 1 ) = 160 +greenupxy ( 240, 2 ) = 152 +greenupxy ( 240, 3 ) = 167 +greenupxy ( 240, 4 ) = 164 +greenupxy ( 240, 5 ) = 164 +greenupxy ( 240, 6 ) = 164 +greenupxy ( 240, 7 ) = 145 +greenupxy ( 240, 8 ) = 145 +fallxy ( 240, 1 ) = 231 +fallxy ( 240, 2 ) = 230 +fallxy ( 240, 3 ) = 233 +fallxy ( 240, 4 ) = 233 +fallxy ( 240, 5 ) = 233 +fallxy ( 240, 6 ) = 233 +fallxy ( 240, 7 ) = 230 +fallxy ( 240, 8 ) = 230 +xyphendoy1 ( 240, 1 ) = 0 +xyphendoy1 ( 240, 2 ) = 0 +xyphendoy1 ( 240, 3 ) = 0 +xyphendoy1 ( 240, 4 ) = 0 +xyphendoy1 ( 240, 5 ) = 0 +xyphendoy1 ( 240, 6 ) = 0 +xyphendoy1 ( 240, 7 ) = 0 +xyphendoy1 ( 240, 8 ) = 0 + + ! xlat 63.7500000000000 +greenupxy ( 239, 1 ) = 159 +greenupxy ( 239, 2 ) = 151 +greenupxy ( 239, 3 ) = 167 +greenupxy ( 239, 4 ) = 163 +greenupxy ( 239, 5 ) = 163 +greenupxy ( 239, 6 ) = 163 +greenupxy ( 239, 7 ) = 144 +greenupxy ( 239, 8 ) = 144 +fallxy ( 239, 1 ) = 231 +fallxy ( 239, 2 ) = 229 +fallxy ( 239, 3 ) = 233 +fallxy ( 239, 4 ) = 233 +fallxy ( 239, 5 ) = 233 +fallxy ( 239, 6 ) = 233 +fallxy ( 239, 7 ) = 229 +fallxy ( 239, 8 ) = 229 +xyphendoy1 ( 239, 1 ) = 0 +xyphendoy1 ( 239, 2 ) = 0 +xyphendoy1 ( 239, 3 ) = 0 +xyphendoy1 ( 239, 4 ) = 0 +xyphendoy1 ( 239, 5 ) = 0 +xyphendoy1 ( 239, 6 ) = 0 +xyphendoy1 ( 239, 7 ) = 0 +xyphendoy1 ( 239, 8 ) = 0 + + ! xlat 63.2500000000000 +greenupxy ( 238, 1 ) = 158 +greenupxy ( 238, 2 ) = 150 +greenupxy ( 238, 3 ) = 166 +greenupxy ( 238, 4 ) = 163 +greenupxy ( 238, 5 ) = 163 +greenupxy ( 238, 6 ) = 163 +greenupxy ( 238, 7 ) = 144 +greenupxy ( 238, 8 ) = 144 +fallxy ( 238, 1 ) = 232 +fallxy ( 238, 2 ) = 229 +fallxy ( 238, 3 ) = 233 +fallxy ( 238, 4 ) = 233 +fallxy ( 238, 5 ) = 233 +fallxy ( 238, 6 ) = 233 +fallxy ( 238, 7 ) = 227 +fallxy ( 238, 8 ) = 227 +xyphendoy1 ( 238, 1 ) = 0 +xyphendoy1 ( 238, 2 ) = 0 +xyphendoy1 ( 238, 3 ) = 0 +xyphendoy1 ( 238, 4 ) = 0 +xyphendoy1 ( 238, 5 ) = 0 +xyphendoy1 ( 238, 6 ) = 0 +xyphendoy1 ( 238, 7 ) = 0 +xyphendoy1 ( 238, 8 ) = 0 + + ! xlat 62.7500000000000 +greenupxy ( 237, 1 ) = 157 +greenupxy ( 237, 2 ) = 148 +greenupxy ( 237, 3 ) = 166 +greenupxy ( 237, 4 ) = 162 +greenupxy ( 237, 5 ) = 162 +greenupxy ( 237, 6 ) = 162 +greenupxy ( 237, 7 ) = 144 +greenupxy ( 237, 8 ) = 144 +fallxy ( 237, 1 ) = 232 +fallxy ( 237, 2 ) = 229 +fallxy ( 237, 3 ) = 233 +fallxy ( 237, 4 ) = 233 +fallxy ( 237, 5 ) = 233 +fallxy ( 237, 6 ) = 233 +fallxy ( 237, 7 ) = 227 +fallxy ( 237, 8 ) = 227 +xyphendoy1 ( 237, 1 ) = 0 +xyphendoy1 ( 237, 2 ) = 0 +xyphendoy1 ( 237, 3 ) = 0 +xyphendoy1 ( 237, 4 ) = 0 +xyphendoy1 ( 237, 5 ) = 0 +xyphendoy1 ( 237, 6 ) = 0 +xyphendoy1 ( 237, 7 ) = 0 +xyphendoy1 ( 237, 8 ) = 0 + + ! xlat 62.2500000000000 +greenupxy ( 236, 1 ) = 156 +greenupxy ( 236, 2 ) = 147 +greenupxy ( 236, 3 ) = 165 +greenupxy ( 236, 4 ) = 161 +greenupxy ( 236, 5 ) = 161 +greenupxy ( 236, 6 ) = 161 +greenupxy ( 236, 7 ) = 143 +greenupxy ( 236, 8 ) = 143 +fallxy ( 236, 1 ) = 232 +fallxy ( 236, 2 ) = 229 +fallxy ( 236, 3 ) = 234 +fallxy ( 236, 4 ) = 233 +fallxy ( 236, 5 ) = 233 +fallxy ( 236, 6 ) = 233 +fallxy ( 236, 7 ) = 226 +fallxy ( 236, 8 ) = 226 +xyphendoy1 ( 236, 1 ) = 0 +xyphendoy1 ( 236, 2 ) = 0 +xyphendoy1 ( 236, 3 ) = 0 +xyphendoy1 ( 236, 4 ) = 0 +xyphendoy1 ( 236, 5 ) = 0 +xyphendoy1 ( 236, 6 ) = 0 +xyphendoy1 ( 236, 7 ) = 0 +xyphendoy1 ( 236, 8 ) = 0 + + ! xlat 61.7500000000000 +greenupxy ( 235, 1 ) = 155 +greenupxy ( 235, 2 ) = 146 +greenupxy ( 235, 3 ) = 165 +greenupxy ( 235, 4 ) = 161 +greenupxy ( 235, 5 ) = 161 +greenupxy ( 235, 6 ) = 161 +greenupxy ( 235, 7 ) = 142 +greenupxy ( 235, 8 ) = 142 +fallxy ( 235, 1 ) = 232 +fallxy ( 235, 2 ) = 228 +fallxy ( 235, 3 ) = 234 +fallxy ( 235, 4 ) = 233 +fallxy ( 235, 5 ) = 233 +fallxy ( 235, 6 ) = 233 +fallxy ( 235, 7 ) = 224 +fallxy ( 235, 8 ) = 224 +xyphendoy1 ( 235, 1 ) = 0 +xyphendoy1 ( 235, 2 ) = 0 +xyphendoy1 ( 235, 3 ) = 0 +xyphendoy1 ( 235, 4 ) = 0 +xyphendoy1 ( 235, 5 ) = 0 +xyphendoy1 ( 235, 6 ) = 0 +xyphendoy1 ( 235, 7 ) = 0 +xyphendoy1 ( 235, 8 ) = 0 + + ! xlat 61.2500000000000 +greenupxy ( 234, 1 ) = 155 +greenupxy ( 234, 2 ) = 145 +greenupxy ( 234, 3 ) = 165 +greenupxy ( 234, 4 ) = 160 +greenupxy ( 234, 5 ) = 160 +greenupxy ( 234, 6 ) = 160 +greenupxy ( 234, 7 ) = 141 +greenupxy ( 234, 8 ) = 141 +fallxy ( 234, 1 ) = 232 +fallxy ( 234, 2 ) = 228 +fallxy ( 234, 3 ) = 234 +fallxy ( 234, 4 ) = 233 +fallxy ( 234, 5 ) = 233 +fallxy ( 234, 6 ) = 233 +fallxy ( 234, 7 ) = 222 +fallxy ( 234, 8 ) = 222 +xyphendoy1 ( 234, 1 ) = 0 +xyphendoy1 ( 234, 2 ) = 0 +xyphendoy1 ( 234, 3 ) = 0 +xyphendoy1 ( 234, 4 ) = 0 +xyphendoy1 ( 234, 5 ) = 0 +xyphendoy1 ( 234, 6 ) = 0 +xyphendoy1 ( 234, 7 ) = 0 +xyphendoy1 ( 234, 8 ) = 0 + + ! xlat 60.7500000000000 +greenupxy ( 233, 1 ) = 154 +greenupxy ( 233, 2 ) = 144 +greenupxy ( 233, 3 ) = 165 +greenupxy ( 233, 4 ) = 159 +greenupxy ( 233, 5 ) = 159 +greenupxy ( 233, 6 ) = 159 +greenupxy ( 233, 7 ) = 140 +greenupxy ( 233, 8 ) = 140 +fallxy ( 233, 1 ) = 232 +fallxy ( 233, 2 ) = 227 +fallxy ( 233, 3 ) = 234 +fallxy ( 233, 4 ) = 232 +fallxy ( 233, 5 ) = 232 +fallxy ( 233, 6 ) = 232 +fallxy ( 233, 7 ) = 220 +fallxy ( 233, 8 ) = 220 +xyphendoy1 ( 233, 1 ) = 0 +xyphendoy1 ( 233, 2 ) = 0 +xyphendoy1 ( 233, 3 ) = 0 +xyphendoy1 ( 233, 4 ) = 0 +xyphendoy1 ( 233, 5 ) = 0 +xyphendoy1 ( 233, 6 ) = 0 +xyphendoy1 ( 233, 7 ) = 0 +xyphendoy1 ( 233, 8 ) = 0 + + ! xlat 60.2500000000000 +greenupxy ( 232, 1 ) = 153 +greenupxy ( 232, 2 ) = 144 +greenupxy ( 232, 3 ) = 165 +greenupxy ( 232, 4 ) = 159 +greenupxy ( 232, 5 ) = 159 +greenupxy ( 232, 6 ) = 159 +greenupxy ( 232, 7 ) = 139 +greenupxy ( 232, 8 ) = 139 +fallxy ( 232, 1 ) = 232 +fallxy ( 232, 2 ) = 226 +fallxy ( 232, 3 ) = 235 +fallxy ( 232, 4 ) = 232 +fallxy ( 232, 5 ) = 232 +fallxy ( 232, 6 ) = 232 +fallxy ( 232, 7 ) = 220 +fallxy ( 232, 8 ) = 220 +xyphendoy1 ( 232, 1 ) = 0 +xyphendoy1 ( 232, 2 ) = 0 +xyphendoy1 ( 232, 3 ) = 0 +xyphendoy1 ( 232, 4 ) = 0 +xyphendoy1 ( 232, 5 ) = 0 +xyphendoy1 ( 232, 6 ) = 0 +xyphendoy1 ( 232, 7 ) = 0 +xyphendoy1 ( 232, 8 ) = 0 + + ! xlat 59.7500000000000 +greenupxy ( 231, 1 ) = 153 +greenupxy ( 231, 2 ) = 143 +greenupxy ( 231, 3 ) = 165 +greenupxy ( 231, 4 ) = 158 +greenupxy ( 231, 5 ) = 158 +greenupxy ( 231, 6 ) = 158 +greenupxy ( 231, 7 ) = 138 +greenupxy ( 231, 8 ) = 138 +fallxy ( 231, 1 ) = 232 +fallxy ( 231, 2 ) = 226 +fallxy ( 231, 3 ) = 235 +fallxy ( 231, 4 ) = 232 +fallxy ( 231, 5 ) = 232 +fallxy ( 231, 6 ) = 232 +fallxy ( 231, 7 ) = 218 +fallxy ( 231, 8 ) = 218 +xyphendoy1 ( 231, 1 ) = 0 +xyphendoy1 ( 231, 2 ) = 0 +xyphendoy1 ( 231, 3 ) = 0 +xyphendoy1 ( 231, 4 ) = 0 +xyphendoy1 ( 231, 5 ) = 0 +xyphendoy1 ( 231, 6 ) = 0 +xyphendoy1 ( 231, 7 ) = 0 +xyphendoy1 ( 231, 8 ) = 0 + + ! xlat 59.2500000000000 +greenupxy ( 230, 1 ) = 152 +greenupxy ( 230, 2 ) = 143 +greenupxy ( 230, 3 ) = 165 +greenupxy ( 230, 4 ) = 157 +greenupxy ( 230, 5 ) = 157 +greenupxy ( 230, 6 ) = 157 +greenupxy ( 230, 7 ) = 138 +greenupxy ( 230, 8 ) = 138 +fallxy ( 230, 1 ) = 233 +fallxy ( 230, 2 ) = 226 +fallxy ( 230, 3 ) = 235 +fallxy ( 230, 4 ) = 232 +fallxy ( 230, 5 ) = 232 +fallxy ( 230, 6 ) = 232 +fallxy ( 230, 7 ) = 217 +fallxy ( 230, 8 ) = 217 +xyphendoy1 ( 230, 1 ) = 0 +xyphendoy1 ( 230, 2 ) = 0 +xyphendoy1 ( 230, 3 ) = 0 +xyphendoy1 ( 230, 4 ) = 0 +xyphendoy1 ( 230, 5 ) = 0 +xyphendoy1 ( 230, 6 ) = 0 +xyphendoy1 ( 230, 7 ) = 0 +xyphendoy1 ( 230, 8 ) = 0 + + ! xlat 58.7500000000000 +greenupxy ( 229, 1 ) = 151 +greenupxy ( 229, 2 ) = 143 +greenupxy ( 229, 3 ) = 165 +greenupxy ( 229, 4 ) = 156 +greenupxy ( 229, 5 ) = 156 +greenupxy ( 229, 6 ) = 156 +greenupxy ( 229, 7 ) = 138 +greenupxy ( 229, 8 ) = 138 +fallxy ( 229, 1 ) = 233 +fallxy ( 229, 2 ) = 226 +fallxy ( 229, 3 ) = 235 +fallxy ( 229, 4 ) = 232 +fallxy ( 229, 5 ) = 232 +fallxy ( 229, 6 ) = 232 +fallxy ( 229, 7 ) = 217 +fallxy ( 229, 8 ) = 217 +xyphendoy1 ( 229, 1 ) = 0 +xyphendoy1 ( 229, 2 ) = 0 +xyphendoy1 ( 229, 3 ) = 0 +xyphendoy1 ( 229, 4 ) = 0 +xyphendoy1 ( 229, 5 ) = 0 +xyphendoy1 ( 229, 6 ) = 0 +xyphendoy1 ( 229, 7 ) = 0 +xyphendoy1 ( 229, 8 ) = 0 + + ! xlat 58.2500000000000 +greenupxy ( 228, 1 ) = 151 +greenupxy ( 228, 2 ) = 142 +greenupxy ( 228, 3 ) = 164 +greenupxy ( 228, 4 ) = 156 +greenupxy ( 228, 5 ) = 156 +greenupxy ( 228, 6 ) = 156 +greenupxy ( 228, 7 ) = 137 +greenupxy ( 228, 8 ) = 137 +fallxy ( 228, 1 ) = 233 +fallxy ( 228, 2 ) = 225 +fallxy ( 228, 3 ) = 235 +fallxy ( 228, 4 ) = 232 +fallxy ( 228, 5 ) = 232 +fallxy ( 228, 6 ) = 232 +fallxy ( 228, 7 ) = 217 +fallxy ( 228, 8 ) = 217 +xyphendoy1 ( 228, 1 ) = 0 +xyphendoy1 ( 228, 2 ) = 0 +xyphendoy1 ( 228, 3 ) = 0 +xyphendoy1 ( 228, 4 ) = 0 +xyphendoy1 ( 228, 5 ) = 0 +xyphendoy1 ( 228, 6 ) = 0 +xyphendoy1 ( 228, 7 ) = 0 +xyphendoy1 ( 228, 8 ) = 0 + + ! xlat 57.7500000000000 +greenupxy ( 227, 1 ) = 150 +greenupxy ( 227, 2 ) = 141 +greenupxy ( 227, 3 ) = 164 +greenupxy ( 227, 4 ) = 155 +greenupxy ( 227, 5 ) = 155 +greenupxy ( 227, 6 ) = 155 +greenupxy ( 227, 7 ) = 136 +greenupxy ( 227, 8 ) = 136 +fallxy ( 227, 1 ) = 233 +fallxy ( 227, 2 ) = 225 +fallxy ( 227, 3 ) = 236 +fallxy ( 227, 4 ) = 231 +fallxy ( 227, 5 ) = 231 +fallxy ( 227, 6 ) = 231 +fallxy ( 227, 7 ) = 216 +fallxy ( 227, 8 ) = 216 +xyphendoy1 ( 227, 1 ) = 0 +xyphendoy1 ( 227, 2 ) = 0 +xyphendoy1 ( 227, 3 ) = 0 +xyphendoy1 ( 227, 4 ) = 0 +xyphendoy1 ( 227, 5 ) = 0 +xyphendoy1 ( 227, 6 ) = 0 +xyphendoy1 ( 227, 7 ) = 0 +xyphendoy1 ( 227, 8 ) = 0 + + ! xlat 57.2500000000000 +greenupxy ( 226, 1 ) = 149 +greenupxy ( 226, 2 ) = 140 +greenupxy ( 226, 3 ) = 164 +greenupxy ( 226, 4 ) = 154 +greenupxy ( 226, 5 ) = 154 +greenupxy ( 226, 6 ) = 154 +greenupxy ( 226, 7 ) = 135 +greenupxy ( 226, 8 ) = 135 +fallxy ( 226, 1 ) = 233 +fallxy ( 226, 2 ) = 225 +fallxy ( 226, 3 ) = 236 +fallxy ( 226, 4 ) = 231 +fallxy ( 226, 5 ) = 231 +fallxy ( 226, 6 ) = 231 +fallxy ( 226, 7 ) = 216 +fallxy ( 226, 8 ) = 216 +xyphendoy1 ( 226, 1 ) = 0 +xyphendoy1 ( 226, 2 ) = 0 +xyphendoy1 ( 226, 3 ) = 0 +xyphendoy1 ( 226, 4 ) = 0 +xyphendoy1 ( 226, 5 ) = 0 +xyphendoy1 ( 226, 6 ) = 0 +xyphendoy1 ( 226, 7 ) = 0 +xyphendoy1 ( 226, 8 ) = 0 + + ! xlat 56.7500000000000 +greenupxy ( 225, 1 ) = 149 +greenupxy ( 225, 2 ) = 139 +greenupxy ( 225, 3 ) = 164 +greenupxy ( 225, 4 ) = 153 +greenupxy ( 225, 5 ) = 153 +greenupxy ( 225, 6 ) = 153 +greenupxy ( 225, 7 ) = 134 +greenupxy ( 225, 8 ) = 134 +fallxy ( 225, 1 ) = 233 +fallxy ( 225, 2 ) = 225 +fallxy ( 225, 3 ) = 236 +fallxy ( 225, 4 ) = 231 +fallxy ( 225, 5 ) = 231 +fallxy ( 225, 6 ) = 231 +fallxy ( 225, 7 ) = 215 +fallxy ( 225, 8 ) = 215 +xyphendoy1 ( 225, 1 ) = 0 +xyphendoy1 ( 225, 2 ) = 0 +xyphendoy1 ( 225, 3 ) = 0 +xyphendoy1 ( 225, 4 ) = 0 +xyphendoy1 ( 225, 5 ) = 0 +xyphendoy1 ( 225, 6 ) = 0 +xyphendoy1 ( 225, 7 ) = 0 +xyphendoy1 ( 225, 8 ) = 0 + + ! xlat 56.2500000000000 +greenupxy ( 224, 1 ) = 148 +greenupxy ( 224, 2 ) = 137 +greenupxy ( 224, 3 ) = 163 +greenupxy ( 224, 4 ) = 152 +greenupxy ( 224, 5 ) = 152 +greenupxy ( 224, 6 ) = 152 +greenupxy ( 224, 7 ) = 133 +greenupxy ( 224, 8 ) = 133 +fallxy ( 224, 1 ) = 234 +fallxy ( 224, 2 ) = 225 +fallxy ( 224, 3 ) = 236 +fallxy ( 224, 4 ) = 230 +fallxy ( 224, 5 ) = 230 +fallxy ( 224, 6 ) = 230 +fallxy ( 224, 7 ) = 215 +fallxy ( 224, 8 ) = 215 +xyphendoy1 ( 224, 1 ) = 0 +xyphendoy1 ( 224, 2 ) = 0 +xyphendoy1 ( 224, 3 ) = 0 +xyphendoy1 ( 224, 4 ) = 0 +xyphendoy1 ( 224, 5 ) = 0 +xyphendoy1 ( 224, 6 ) = 0 +xyphendoy1 ( 224, 7 ) = 0 +xyphendoy1 ( 224, 8 ) = 0 + + ! xlat 55.7500000000000 +greenupxy ( 223, 1 ) = 147 +greenupxy ( 223, 2 ) = 136 +greenupxy ( 223, 3 ) = 163 +greenupxy ( 223, 4 ) = 150 +greenupxy ( 223, 5 ) = 150 +greenupxy ( 223, 6 ) = 150 +greenupxy ( 223, 7 ) = 132 +greenupxy ( 223, 8 ) = 132 +fallxy ( 223, 1 ) = 234 +fallxy ( 223, 2 ) = 224 +fallxy ( 223, 3 ) = 236 +fallxy ( 223, 4 ) = 229 +fallxy ( 223, 5 ) = 229 +fallxy ( 223, 6 ) = 229 +fallxy ( 223, 7 ) = 214 +fallxy ( 223, 8 ) = 214 +xyphendoy1 ( 223, 1 ) = 0 +xyphendoy1 ( 223, 2 ) = 0 +xyphendoy1 ( 223, 3 ) = 0 +xyphendoy1 ( 223, 4 ) = 0 +xyphendoy1 ( 223, 5 ) = 0 +xyphendoy1 ( 223, 6 ) = 0 +xyphendoy1 ( 223, 7 ) = 0 +xyphendoy1 ( 223, 8 ) = 0 + + ! xlat 55.2500000000000 +greenupxy ( 222, 1 ) = 147 +greenupxy ( 222, 2 ) = 134 +greenupxy ( 222, 3 ) = 162 +greenupxy ( 222, 4 ) = 149 +greenupxy ( 222, 5 ) = 149 +greenupxy ( 222, 6 ) = 149 +greenupxy ( 222, 7 ) = 132 +greenupxy ( 222, 8 ) = 132 +fallxy ( 222, 1 ) = 234 +fallxy ( 222, 2 ) = 224 +fallxy ( 222, 3 ) = 236 +fallxy ( 222, 4 ) = 228 +fallxy ( 222, 5 ) = 228 +fallxy ( 222, 6 ) = 228 +fallxy ( 222, 7 ) = 214 +fallxy ( 222, 8 ) = 214 +xyphendoy1 ( 222, 1 ) = 0 +xyphendoy1 ( 222, 2 ) = 0 +xyphendoy1 ( 222, 3 ) = 0 +xyphendoy1 ( 222, 4 ) = 0 +xyphendoy1 ( 222, 5 ) = 0 +xyphendoy1 ( 222, 6 ) = 0 +xyphendoy1 ( 222, 7 ) = 0 +xyphendoy1 ( 222, 8 ) = 0 + + ! xlat 54.7500000000000 +greenupxy ( 221, 1 ) = 146 +greenupxy ( 221, 2 ) = 133 +greenupxy ( 221, 3 ) = 161 +greenupxy ( 221, 4 ) = 147 +greenupxy ( 221, 5 ) = 147 +greenupxy ( 221, 6 ) = 147 +greenupxy ( 221, 7 ) = 131 +greenupxy ( 221, 8 ) = 131 +fallxy ( 221, 1 ) = 234 +fallxy ( 221, 2 ) = 223 +fallxy ( 221, 3 ) = 235 +fallxy ( 221, 4 ) = 227 +fallxy ( 221, 5 ) = 227 +fallxy ( 221, 6 ) = 227 +fallxy ( 221, 7 ) = 214 +fallxy ( 221, 8 ) = 214 +xyphendoy1 ( 221, 1 ) = 0 +xyphendoy1 ( 221, 2 ) = 0 +xyphendoy1 ( 221, 3 ) = 0 +xyphendoy1 ( 221, 4 ) = 0 +xyphendoy1 ( 221, 5 ) = 0 +xyphendoy1 ( 221, 6 ) = 0 +xyphendoy1 ( 221, 7 ) = 0 +xyphendoy1 ( 221, 8 ) = 0 + + ! xlat 54.2500000000000 +greenupxy ( 220, 1 ) = 146 +greenupxy ( 220, 2 ) = 132 +greenupxy ( 220, 3 ) = 161 +greenupxy ( 220, 4 ) = 145 +greenupxy ( 220, 5 ) = 145 +greenupxy ( 220, 6 ) = 145 +greenupxy ( 220, 7 ) = 130 +greenupxy ( 220, 8 ) = 130 +fallxy ( 220, 1 ) = 234 +fallxy ( 220, 2 ) = 223 +fallxy ( 220, 3 ) = 235 +fallxy ( 220, 4 ) = 225 +fallxy ( 220, 5 ) = 225 +fallxy ( 220, 6 ) = 225 +fallxy ( 220, 7 ) = 214 +fallxy ( 220, 8 ) = 214 +xyphendoy1 ( 220, 1 ) = 0 +xyphendoy1 ( 220, 2 ) = 0 +xyphendoy1 ( 220, 3 ) = 0 +xyphendoy1 ( 220, 4 ) = 0 +xyphendoy1 ( 220, 5 ) = 0 +xyphendoy1 ( 220, 6 ) = 0 +xyphendoy1 ( 220, 7 ) = 0 +xyphendoy1 ( 220, 8 ) = 0 + + ! xlat 53.7500000000000 +greenupxy ( 219, 1 ) = 145 +greenupxy ( 219, 2 ) = 130 +greenupxy ( 219, 3 ) = 160 +greenupxy ( 219, 4 ) = 143 +greenupxy ( 219, 5 ) = 143 +greenupxy ( 219, 6 ) = 143 +greenupxy ( 219, 7 ) = 129 +greenupxy ( 219, 8 ) = 129 +fallxy ( 219, 1 ) = 234 +fallxy ( 219, 2 ) = 222 +fallxy ( 219, 3 ) = 235 +fallxy ( 219, 4 ) = 224 +fallxy ( 219, 5 ) = 224 +fallxy ( 219, 6 ) = 224 +fallxy ( 219, 7 ) = 214 +fallxy ( 219, 8 ) = 214 +xyphendoy1 ( 219, 1 ) = 0 +xyphendoy1 ( 219, 2 ) = 0 +xyphendoy1 ( 219, 3 ) = 0 +xyphendoy1 ( 219, 4 ) = 0 +xyphendoy1 ( 219, 5 ) = 0 +xyphendoy1 ( 219, 6 ) = 0 +xyphendoy1 ( 219, 7 ) = 0 +xyphendoy1 ( 219, 8 ) = 0 + + ! xlat 53.2500000000000 +greenupxy ( 218, 1 ) = 144 +greenupxy ( 218, 2 ) = 129 +greenupxy ( 218, 3 ) = 158 +greenupxy ( 218, 4 ) = 141 +greenupxy ( 218, 5 ) = 141 +greenupxy ( 218, 6 ) = 141 +greenupxy ( 218, 7 ) = 128 +greenupxy ( 218, 8 ) = 128 +fallxy ( 218, 1 ) = 234 +fallxy ( 218, 2 ) = 222 +fallxy ( 218, 3 ) = 234 +fallxy ( 218, 4 ) = 222 +fallxy ( 218, 5 ) = 222 +fallxy ( 218, 6 ) = 222 +fallxy ( 218, 7 ) = 214 +fallxy ( 218, 8 ) = 214 +xyphendoy1 ( 218, 1 ) = 0 +xyphendoy1 ( 218, 2 ) = 0 +xyphendoy1 ( 218, 3 ) = 0 +xyphendoy1 ( 218, 4 ) = 0 +xyphendoy1 ( 218, 5 ) = 0 +xyphendoy1 ( 218, 6 ) = 0 +xyphendoy1 ( 218, 7 ) = 0 +xyphendoy1 ( 218, 8 ) = 0 + + ! xlat 52.7500000000000 +greenupxy ( 217, 1 ) = 144 +greenupxy ( 217, 2 ) = 127 +greenupxy ( 217, 3 ) = 157 +greenupxy ( 217, 4 ) = 139 +greenupxy ( 217, 5 ) = 139 +greenupxy ( 217, 6 ) = 139 +greenupxy ( 217, 7 ) = 127 +greenupxy ( 217, 8 ) = 127 +fallxy ( 217, 1 ) = 234 +fallxy ( 217, 2 ) = 221 +fallxy ( 217, 3 ) = 234 +fallxy ( 217, 4 ) = 221 +fallxy ( 217, 5 ) = 221 +fallxy ( 217, 6 ) = 221 +fallxy ( 217, 7 ) = 214 +fallxy ( 217, 8 ) = 214 +xyphendoy1 ( 217, 1 ) = 0 +xyphendoy1 ( 217, 2 ) = 0 +xyphendoy1 ( 217, 3 ) = 0 +xyphendoy1 ( 217, 4 ) = 0 +xyphendoy1 ( 217, 5 ) = 0 +xyphendoy1 ( 217, 6 ) = 0 +xyphendoy1 ( 217, 7 ) = 0 +xyphendoy1 ( 217, 8 ) = 0 + + ! xlat 52.2500000000000 +greenupxy ( 216, 1 ) = 143 +greenupxy ( 216, 2 ) = 126 +greenupxy ( 216, 3 ) = 155 +greenupxy ( 216, 4 ) = 137 +greenupxy ( 216, 5 ) = 137 +greenupxy ( 216, 6 ) = 137 +greenupxy ( 216, 7 ) = 126 +greenupxy ( 216, 8 ) = 126 +fallxy ( 216, 1 ) = 234 +fallxy ( 216, 2 ) = 221 +fallxy ( 216, 3 ) = 233 +fallxy ( 216, 4 ) = 219 +fallxy ( 216, 5 ) = 219 +fallxy ( 216, 6 ) = 219 +fallxy ( 216, 7 ) = 214 +fallxy ( 216, 8 ) = 214 +xyphendoy1 ( 216, 1 ) = 0 +xyphendoy1 ( 216, 2 ) = 0 +xyphendoy1 ( 216, 3 ) = 0 +xyphendoy1 ( 216, 4 ) = 0 +xyphendoy1 ( 216, 5 ) = 0 +xyphendoy1 ( 216, 6 ) = 0 +xyphendoy1 ( 216, 7 ) = 0 +xyphendoy1 ( 216, 8 ) = 0 + + ! xlat 51.7500000000000 +greenupxy ( 215, 1 ) = 142 +greenupxy ( 215, 2 ) = 124 +greenupxy ( 215, 3 ) = 153 +greenupxy ( 215, 4 ) = 135 +greenupxy ( 215, 5 ) = 135 +greenupxy ( 215, 6 ) = 135 +greenupxy ( 215, 7 ) = 125 +greenupxy ( 215, 8 ) = 125 +fallxy ( 215, 1 ) = 234 +fallxy ( 215, 2 ) = 221 +fallxy ( 215, 3 ) = 233 +fallxy ( 215, 4 ) = 218 +fallxy ( 215, 5 ) = 218 +fallxy ( 215, 6 ) = 218 +fallxy ( 215, 7 ) = 214 +fallxy ( 215, 8 ) = 214 +xyphendoy1 ( 215, 1 ) = 0 +xyphendoy1 ( 215, 2 ) = 0 +xyphendoy1 ( 215, 3 ) = 0 +xyphendoy1 ( 215, 4 ) = 0 +xyphendoy1 ( 215, 5 ) = 0 +xyphendoy1 ( 215, 6 ) = 0 +xyphendoy1 ( 215, 7 ) = 0 +xyphendoy1 ( 215, 8 ) = 0 + + ! xlat 51.2500000000000 +greenupxy ( 214, 1 ) = 142 +greenupxy ( 214, 2 ) = 123 +greenupxy ( 214, 3 ) = 151 +greenupxy ( 214, 4 ) = 133 +greenupxy ( 214, 5 ) = 133 +greenupxy ( 214, 6 ) = 133 +greenupxy ( 214, 7 ) = 124 +greenupxy ( 214, 8 ) = 124 +fallxy ( 214, 1 ) = 234 +fallxy ( 214, 2 ) = 221 +fallxy ( 214, 3 ) = 232 +fallxy ( 214, 4 ) = 217 +fallxy ( 214, 5 ) = 217 +fallxy ( 214, 6 ) = 217 +fallxy ( 214, 7 ) = 215 +fallxy ( 214, 8 ) = 215 +xyphendoy1 ( 214, 1 ) = 0 +xyphendoy1 ( 214, 2 ) = 0 +xyphendoy1 ( 214, 3 ) = 0 +xyphendoy1 ( 214, 4 ) = 0 +xyphendoy1 ( 214, 5 ) = 0 +xyphendoy1 ( 214, 6 ) = 0 +xyphendoy1 ( 214, 7 ) = 0 +xyphendoy1 ( 214, 8 ) = 0 + + ! xlat 50.7500000000000 +greenupxy ( 213, 1 ) = 142 +greenupxy ( 213, 2 ) = 122 +greenupxy ( 213, 3 ) = 149 +greenupxy ( 213, 4 ) = 131 +greenupxy ( 213, 5 ) = 131 +greenupxy ( 213, 6 ) = 131 +greenupxy ( 213, 7 ) = 123 +greenupxy ( 213, 8 ) = 123 +fallxy ( 213, 1 ) = 234 +fallxy ( 213, 2 ) = 221 +fallxy ( 213, 3 ) = 230 +fallxy ( 213, 4 ) = 215 +fallxy ( 213, 5 ) = 215 +fallxy ( 213, 6 ) = 215 +fallxy ( 213, 7 ) = 215 +fallxy ( 213, 8 ) = 215 +xyphendoy1 ( 213, 1 ) = 0 +xyphendoy1 ( 213, 2 ) = 0 +xyphendoy1 ( 213, 3 ) = 0 +xyphendoy1 ( 213, 4 ) = 0 +xyphendoy1 ( 213, 5 ) = 0 +xyphendoy1 ( 213, 6 ) = 0 +xyphendoy1 ( 213, 7 ) = 0 +xyphendoy1 ( 213, 8 ) = 0 + + ! xlat 50.2500000000000 +greenupxy ( 212, 1 ) = 141 +greenupxy ( 212, 2 ) = 121 +greenupxy ( 212, 3 ) = 146 +greenupxy ( 212, 4 ) = 129 +greenupxy ( 212, 5 ) = 129 +greenupxy ( 212, 6 ) = 129 +greenupxy ( 212, 7 ) = 121 +greenupxy ( 212, 8 ) = 121 +fallxy ( 212, 1 ) = 234 +fallxy ( 212, 2 ) = 222 +fallxy ( 212, 3 ) = 228 +fallxy ( 212, 4 ) = 213 +fallxy ( 212, 5 ) = 213 +fallxy ( 212, 6 ) = 213 +fallxy ( 212, 7 ) = 216 +fallxy ( 212, 8 ) = 216 +xyphendoy1 ( 212, 1 ) = 0 +xyphendoy1 ( 212, 2 ) = 0 +xyphendoy1 ( 212, 3 ) = 0 +xyphendoy1 ( 212, 4 ) = 0 +xyphendoy1 ( 212, 5 ) = 0 +xyphendoy1 ( 212, 6 ) = 0 +xyphendoy1 ( 212, 7 ) = 0 +xyphendoy1 ( 212, 8 ) = 0 + + ! xlat 49.7500000000000 +greenupxy ( 211, 1 ) = 141 +greenupxy ( 211, 2 ) = 120 +greenupxy ( 211, 3 ) = 143 +greenupxy ( 211, 4 ) = 127 +greenupxy ( 211, 5 ) = 127 +greenupxy ( 211, 6 ) = 127 +greenupxy ( 211, 7 ) = 120 +greenupxy ( 211, 8 ) = 120 +fallxy ( 211, 1 ) = 233 +fallxy ( 211, 2 ) = 222 +fallxy ( 211, 3 ) = 226 +fallxy ( 211, 4 ) = 212 +fallxy ( 211, 5 ) = 212 +fallxy ( 211, 6 ) = 212 +fallxy ( 211, 7 ) = 217 +fallxy ( 211, 8 ) = 217 +xyphendoy1 ( 211, 1 ) = 0 +xyphendoy1 ( 211, 2 ) = 0 +xyphendoy1 ( 211, 3 ) = 0 +xyphendoy1 ( 211, 4 ) = 0 +xyphendoy1 ( 211, 5 ) = 0 +xyphendoy1 ( 211, 6 ) = 0 +xyphendoy1 ( 211, 7 ) = 0 +xyphendoy1 ( 211, 8 ) = 0 + + ! xlat 49.2500000000000 +greenupxy ( 210, 1 ) = 140 +greenupxy ( 210, 2 ) = 119 +greenupxy ( 210, 3 ) = 141 +greenupxy ( 210, 4 ) = 125 +greenupxy ( 210, 5 ) = 125 +greenupxy ( 210, 6 ) = 125 +greenupxy ( 210, 7 ) = 119 +greenupxy ( 210, 8 ) = 119 +fallxy ( 210, 1 ) = 233 +fallxy ( 210, 2 ) = 222 +fallxy ( 210, 3 ) = 225 +fallxy ( 210, 4 ) = 211 +fallxy ( 210, 5 ) = 211 +fallxy ( 210, 6 ) = 211 +fallxy ( 210, 7 ) = 218 +fallxy ( 210, 8 ) = 218 +xyphendoy1 ( 210, 1 ) = 0 +xyphendoy1 ( 210, 2 ) = 0 +xyphendoy1 ( 210, 3 ) = 0 +xyphendoy1 ( 210, 4 ) = 0 +xyphendoy1 ( 210, 5 ) = 0 +xyphendoy1 ( 210, 6 ) = 0 +xyphendoy1 ( 210, 7 ) = 0 +xyphendoy1 ( 210, 8 ) = 0 + + ! xlat 48.7500000000000 +greenupxy ( 209, 1 ) = 139 +greenupxy ( 209, 2 ) = 119 +greenupxy ( 209, 3 ) = 138 +greenupxy ( 209, 4 ) = 124 +greenupxy ( 209, 5 ) = 124 +greenupxy ( 209, 6 ) = 124 +greenupxy ( 209, 7 ) = 119 +greenupxy ( 209, 8 ) = 119 +fallxy ( 209, 1 ) = 233 +fallxy ( 209, 2 ) = 222 +fallxy ( 209, 3 ) = 222 +fallxy ( 209, 4 ) = 209 +fallxy ( 209, 5 ) = 209 +fallxy ( 209, 6 ) = 209 +fallxy ( 209, 7 ) = 219 +fallxy ( 209, 8 ) = 219 +xyphendoy1 ( 209, 1 ) = 0 +xyphendoy1 ( 209, 2 ) = 0 +xyphendoy1 ( 209, 3 ) = 0 +xyphendoy1 ( 209, 4 ) = 0 +xyphendoy1 ( 209, 5 ) = 0 +xyphendoy1 ( 209, 6 ) = 0 +xyphendoy1 ( 209, 7 ) = 0 +xyphendoy1 ( 209, 8 ) = 0 + + ! xlat 48.2500000000000 +greenupxy ( 208, 1 ) = 139 +greenupxy ( 208, 2 ) = 119 +greenupxy ( 208, 3 ) = 135 +greenupxy ( 208, 4 ) = 122 +greenupxy ( 208, 5 ) = 122 +greenupxy ( 208, 6 ) = 122 +greenupxy ( 208, 7 ) = 118 +greenupxy ( 208, 8 ) = 118 +fallxy ( 208, 1 ) = 232 +fallxy ( 208, 2 ) = 222 +fallxy ( 208, 3 ) = 220 +fallxy ( 208, 4 ) = 208 +fallxy ( 208, 5 ) = 208 +fallxy ( 208, 6 ) = 208 +fallxy ( 208, 7 ) = 220 +fallxy ( 208, 8 ) = 220 +xyphendoy1 ( 208, 1 ) = 0 +xyphendoy1 ( 208, 2 ) = 0 +xyphendoy1 ( 208, 3 ) = 0 +xyphendoy1 ( 208, 4 ) = 0 +xyphendoy1 ( 208, 5 ) = 0 +xyphendoy1 ( 208, 6 ) = 0 +xyphendoy1 ( 208, 7 ) = 0 +xyphendoy1 ( 208, 8 ) = 0 + + ! xlat 47.7500000000000 +greenupxy ( 207, 1 ) = 138 +greenupxy ( 207, 2 ) = 119 +greenupxy ( 207, 3 ) = 132 +greenupxy ( 207, 4 ) = 120 +greenupxy ( 207, 5 ) = 120 +greenupxy ( 207, 6 ) = 120 +greenupxy ( 207, 7 ) = 118 +greenupxy ( 207, 8 ) = 118 +fallxy ( 207, 1 ) = 232 +fallxy ( 207, 2 ) = 223 +fallxy ( 207, 3 ) = 217 +fallxy ( 207, 4 ) = 207 +fallxy ( 207, 5 ) = 207 +fallxy ( 207, 6 ) = 207 +fallxy ( 207, 7 ) = 222 +fallxy ( 207, 8 ) = 222 +xyphendoy1 ( 207, 1 ) = 0 +xyphendoy1 ( 207, 2 ) = 0 +xyphendoy1 ( 207, 3 ) = 0 +xyphendoy1 ( 207, 4 ) = 0 +xyphendoy1 ( 207, 5 ) = 0 +xyphendoy1 ( 207, 6 ) = 0 +xyphendoy1 ( 207, 7 ) = 0 +xyphendoy1 ( 207, 8 ) = 0 + + ! xlat 47.2500000000000 +greenupxy ( 206, 1 ) = 138 +greenupxy ( 206, 2 ) = 119 +greenupxy ( 206, 3 ) = 129 +greenupxy ( 206, 4 ) = 118 +greenupxy ( 206, 5 ) = 118 +greenupxy ( 206, 6 ) = 118 +greenupxy ( 206, 7 ) = 118 +greenupxy ( 206, 8 ) = 118 +fallxy ( 206, 1 ) = 232 +fallxy ( 206, 2 ) = 223 +fallxy ( 206, 3 ) = 215 +fallxy ( 206, 4 ) = 205 +fallxy ( 206, 5 ) = 205 +fallxy ( 206, 6 ) = 205 +fallxy ( 206, 7 ) = 223 +fallxy ( 206, 8 ) = 223 +xyphendoy1 ( 206, 1 ) = 0 +xyphendoy1 ( 206, 2 ) = 0 +xyphendoy1 ( 206, 3 ) = 0 +xyphendoy1 ( 206, 4 ) = 0 +xyphendoy1 ( 206, 5 ) = 0 +xyphendoy1 ( 206, 6 ) = 0 +xyphendoy1 ( 206, 7 ) = 0 +xyphendoy1 ( 206, 8 ) = 0 + + ! xlat 46.7500000000000 +greenupxy ( 205, 1 ) = 138 +greenupxy ( 205, 2 ) = 119 +greenupxy ( 205, 3 ) = 127 +greenupxy ( 205, 4 ) = 118 +greenupxy ( 205, 5 ) = 118 +greenupxy ( 205, 6 ) = 118 +greenupxy ( 205, 7 ) = 118 +greenupxy ( 205, 8 ) = 118 +fallxy ( 205, 1 ) = 231 +fallxy ( 205, 2 ) = 224 +fallxy ( 205, 3 ) = 213 +fallxy ( 205, 4 ) = 205 +fallxy ( 205, 5 ) = 205 +fallxy ( 205, 6 ) = 205 +fallxy ( 205, 7 ) = 224 +fallxy ( 205, 8 ) = 224 +xyphendoy1 ( 205, 1 ) = 0 +xyphendoy1 ( 205, 2 ) = 0 +xyphendoy1 ( 205, 3 ) = 0 +xyphendoy1 ( 205, 4 ) = 0 +xyphendoy1 ( 205, 5 ) = 0 +xyphendoy1 ( 205, 6 ) = 0 +xyphendoy1 ( 205, 7 ) = 0 +xyphendoy1 ( 205, 8 ) = 0 + + ! xlat 46.2500000000000 +greenupxy ( 204, 1 ) = 137 +greenupxy ( 204, 2 ) = 119 +greenupxy ( 204, 3 ) = 124 +greenupxy ( 204, 4 ) = 117 +greenupxy ( 204, 5 ) = 117 +greenupxy ( 204, 6 ) = 117 +greenupxy ( 204, 7 ) = 118 +greenupxy ( 204, 8 ) = 118 +fallxy ( 204, 1 ) = 230 +fallxy ( 204, 2 ) = 224 +fallxy ( 204, 3 ) = 210 +fallxy ( 204, 4 ) = 205 +fallxy ( 204, 5 ) = 205 +fallxy ( 204, 6 ) = 205 +fallxy ( 204, 7 ) = 226 +fallxy ( 204, 8 ) = 226 +xyphendoy1 ( 204, 1 ) = 0 +xyphendoy1 ( 204, 2 ) = 0 +xyphendoy1 ( 204, 3 ) = 0 +xyphendoy1 ( 204, 4 ) = 0 +xyphendoy1 ( 204, 5 ) = 0 +xyphendoy1 ( 204, 6 ) = 0 +xyphendoy1 ( 204, 7 ) = 0 +xyphendoy1 ( 204, 8 ) = 0 + + ! xlat 45.7500000000000 +greenupxy ( 203, 1 ) = 136 +greenupxy ( 203, 2 ) = 119 +greenupxy ( 203, 3 ) = 121 +greenupxy ( 203, 4 ) = 116 +greenupxy ( 203, 5 ) = 116 +greenupxy ( 203, 6 ) = 116 +greenupxy ( 203, 7 ) = 118 +greenupxy ( 203, 8 ) = 118 +fallxy ( 203, 1 ) = 229 +fallxy ( 203, 2 ) = 226 +fallxy ( 203, 3 ) = 206 +fallxy ( 203, 4 ) = 205 +fallxy ( 203, 5 ) = 205 +fallxy ( 203, 6 ) = 205 +fallxy ( 203, 7 ) = 227 +fallxy ( 203, 8 ) = 227 +xyphendoy1 ( 203, 1 ) = 0 +xyphendoy1 ( 203, 2 ) = 0 +xyphendoy1 ( 203, 3 ) = 0 +xyphendoy1 ( 203, 4 ) = 0 +xyphendoy1 ( 203, 5 ) = 0 +xyphendoy1 ( 203, 6 ) = 0 +xyphendoy1 ( 203, 7 ) = 0 +xyphendoy1 ( 203, 8 ) = 0 + + ! xlat 45.2500000000000 +greenupxy ( 202, 1 ) = 136 +greenupxy ( 202, 2 ) = 120 +greenupxy ( 202, 3 ) = 117 +greenupxy ( 202, 4 ) = 116 +greenupxy ( 202, 5 ) = 116 +greenupxy ( 202, 6 ) = 116 +greenupxy ( 202, 7 ) = 117 +greenupxy ( 202, 8 ) = 117 +fallxy ( 202, 1 ) = 229 +fallxy ( 202, 2 ) = 227 +fallxy ( 202, 3 ) = 203 +fallxy ( 202, 4 ) = 205 +fallxy ( 202, 5 ) = 205 +fallxy ( 202, 6 ) = 205 +fallxy ( 202, 7 ) = 229 +fallxy ( 202, 8 ) = 229 +xyphendoy1 ( 202, 1 ) = 0 +xyphendoy1 ( 202, 2 ) = 0 +xyphendoy1 ( 202, 3 ) = 0 +xyphendoy1 ( 202, 4 ) = 0 +xyphendoy1 ( 202, 5 ) = 0 +xyphendoy1 ( 202, 6 ) = 0 +xyphendoy1 ( 202, 7 ) = 0 +xyphendoy1 ( 202, 8 ) = 0 + + ! xlat 44.7500000000000 +greenupxy ( 201, 1 ) = 136 +greenupxy ( 201, 2 ) = 120 +greenupxy ( 201, 3 ) = 115 +greenupxy ( 201, 4 ) = 116 +greenupxy ( 201, 5 ) = 116 +greenupxy ( 201, 6 ) = 116 +greenupxy ( 201, 7 ) = 117 +greenupxy ( 201, 8 ) = 117 +fallxy ( 201, 1 ) = 228 +fallxy ( 201, 2 ) = 227 +fallxy ( 201, 3 ) = 200 +fallxy ( 201, 4 ) = 206 +fallxy ( 201, 5 ) = 206 +fallxy ( 201, 6 ) = 206 +fallxy ( 201, 7 ) = 230 +fallxy ( 201, 8 ) = 230 +xyphendoy1 ( 201, 1 ) = 0 +xyphendoy1 ( 201, 2 ) = 0 +xyphendoy1 ( 201, 3 ) = 0 +xyphendoy1 ( 201, 4 ) = 0 +xyphendoy1 ( 201, 5 ) = 0 +xyphendoy1 ( 201, 6 ) = 0 +xyphendoy1 ( 201, 7 ) = 0 +xyphendoy1 ( 201, 8 ) = 0 + + ! xlat 44.2500000000000 +greenupxy ( 200, 1 ) = 135 +greenupxy ( 200, 2 ) = 119 +greenupxy ( 200, 3 ) = 112 +greenupxy ( 200, 4 ) = 115 +greenupxy ( 200, 5 ) = 115 +greenupxy ( 200, 6 ) = 115 +greenupxy ( 200, 7 ) = 117 +greenupxy ( 200, 8 ) = 117 +fallxy ( 200, 1 ) = 227 +fallxy ( 200, 2 ) = 228 +fallxy ( 200, 3 ) = 197 +fallxy ( 200, 4 ) = 206 +fallxy ( 200, 5 ) = 206 +fallxy ( 200, 6 ) = 206 +fallxy ( 200, 7 ) = 230 +fallxy ( 200, 8 ) = 230 +xyphendoy1 ( 200, 1 ) = 0 +xyphendoy1 ( 200, 2 ) = 0 +xyphendoy1 ( 200, 3 ) = 0 +xyphendoy1 ( 200, 4 ) = 0 +xyphendoy1 ( 200, 5 ) = 0 +xyphendoy1 ( 200, 6 ) = 0 +xyphendoy1 ( 200, 7 ) = 0 +xyphendoy1 ( 200, 8 ) = 0 + + ! xlat 43.7500000000000 +greenupxy ( 199, 1 ) = 135 +greenupxy ( 199, 2 ) = 119 +greenupxy ( 199, 3 ) = 109 +greenupxy ( 199, 4 ) = 115 +greenupxy ( 199, 5 ) = 115 +greenupxy ( 199, 6 ) = 115 +greenupxy ( 199, 7 ) = 116 +greenupxy ( 199, 8 ) = 116 +fallxy ( 199, 1 ) = 226 +fallxy ( 199, 2 ) = 228 +fallxy ( 199, 3 ) = 194 +fallxy ( 199, 4 ) = 206 +fallxy ( 199, 5 ) = 206 +fallxy ( 199, 6 ) = 206 +fallxy ( 199, 7 ) = 231 +fallxy ( 199, 8 ) = 231 +xyphendoy1 ( 199, 1 ) = 0 +xyphendoy1 ( 199, 2 ) = 0 +xyphendoy1 ( 199, 3 ) = 0 +xyphendoy1 ( 199, 4 ) = 0 +xyphendoy1 ( 199, 5 ) = 0 +xyphendoy1 ( 199, 6 ) = 0 +xyphendoy1 ( 199, 7 ) = 0 +xyphendoy1 ( 199, 8 ) = 0 + + ! xlat 43.2500000000000 +greenupxy ( 198, 1 ) = 134 +greenupxy ( 198, 2 ) = 119 +greenupxy ( 198, 3 ) = 107 +greenupxy ( 198, 4 ) = 115 +greenupxy ( 198, 5 ) = 115 +greenupxy ( 198, 6 ) = 115 +greenupxy ( 198, 7 ) = 116 +greenupxy ( 198, 8 ) = 116 +fallxy ( 198, 1 ) = 226 +fallxy ( 198, 2 ) = 228 +fallxy ( 198, 3 ) = 192 +fallxy ( 198, 4 ) = 206 +fallxy ( 198, 5 ) = 206 +fallxy ( 198, 6 ) = 206 +fallxy ( 198, 7 ) = 232 +fallxy ( 198, 8 ) = 232 +xyphendoy1 ( 198, 1 ) = 0 +xyphendoy1 ( 198, 2 ) = 0 +xyphendoy1 ( 198, 3 ) = 0 +xyphendoy1 ( 198, 4 ) = 0 +xyphendoy1 ( 198, 5 ) = 0 +xyphendoy1 ( 198, 6 ) = 0 +xyphendoy1 ( 198, 7 ) = 0 +xyphendoy1 ( 198, 8 ) = 0 + + ! xlat 42.7500000000000 +greenupxy ( 197, 1 ) = 133 +greenupxy ( 197, 2 ) = 118 +greenupxy ( 197, 3 ) = 106 +greenupxy ( 197, 4 ) = 114 +greenupxy ( 197, 5 ) = 114 +greenupxy ( 197, 6 ) = 114 +greenupxy ( 197, 7 ) = 115 +greenupxy ( 197, 8 ) = 115 +fallxy ( 197, 1 ) = 225 +fallxy ( 197, 2 ) = 228 +fallxy ( 197, 3 ) = 191 +fallxy ( 197, 4 ) = 207 +fallxy ( 197, 5 ) = 207 +fallxy ( 197, 6 ) = 207 +fallxy ( 197, 7 ) = 233 +fallxy ( 197, 8 ) = 233 +xyphendoy1 ( 197, 1 ) = 0 +xyphendoy1 ( 197, 2 ) = 0 +xyphendoy1 ( 197, 3 ) = 0 +xyphendoy1 ( 197, 4 ) = 0 +xyphendoy1 ( 197, 5 ) = 0 +xyphendoy1 ( 197, 6 ) = 0 +xyphendoy1 ( 197, 7 ) = 0 +xyphendoy1 ( 197, 8 ) = 0 + + ! xlat 42.2500000000000 +greenupxy ( 196, 1 ) = 133 +greenupxy ( 196, 2 ) = 117 +greenupxy ( 196, 3 ) = 104 +greenupxy ( 196, 4 ) = 114 +greenupxy ( 196, 5 ) = 114 +greenupxy ( 196, 6 ) = 114 +greenupxy ( 196, 7 ) = 114 +greenupxy ( 196, 8 ) = 114 +fallxy ( 196, 1 ) = 225 +fallxy ( 196, 2 ) = 228 +fallxy ( 196, 3 ) = 187 +fallxy ( 196, 4 ) = 207 +fallxy ( 196, 5 ) = 207 +fallxy ( 196, 6 ) = 207 +fallxy ( 196, 7 ) = 233 +fallxy ( 196, 8 ) = 233 +xyphendoy1 ( 196, 1 ) = 0 +xyphendoy1 ( 196, 2 ) = 0 +xyphendoy1 ( 196, 3 ) = 0 +xyphendoy1 ( 196, 4 ) = 0 +xyphendoy1 ( 196, 5 ) = 0 +xyphendoy1 ( 196, 6 ) = 0 +xyphendoy1 ( 196, 7 ) = 0 +xyphendoy1 ( 196, 8 ) = 0 + + ! xlat 41.7500000000000 +greenupxy ( 195, 1 ) = 132 +greenupxy ( 195, 2 ) = 116 +greenupxy ( 195, 3 ) = 102 +greenupxy ( 195, 4 ) = 113 +greenupxy ( 195, 5 ) = 113 +greenupxy ( 195, 6 ) = 113 +greenupxy ( 195, 7 ) = 112 +greenupxy ( 195, 8 ) = 112 +fallxy ( 195, 1 ) = 224 +fallxy ( 195, 2 ) = 227 +fallxy ( 195, 3 ) = 186 +fallxy ( 195, 4 ) = 208 +fallxy ( 195, 5 ) = 208 +fallxy ( 195, 6 ) = 208 +fallxy ( 195, 7 ) = 232 +fallxy ( 195, 8 ) = 232 +xyphendoy1 ( 195, 1 ) = 0 +xyphendoy1 ( 195, 2 ) = 0 +xyphendoy1 ( 195, 3 ) = 0 +xyphendoy1 ( 195, 4 ) = 0 +xyphendoy1 ( 195, 5 ) = 0 +xyphendoy1 ( 195, 6 ) = 0 +xyphendoy1 ( 195, 7 ) = 0 +xyphendoy1 ( 195, 8 ) = 0 + + ! xlat 41.2500000000000 +greenupxy ( 194, 1 ) = 132 +greenupxy ( 194, 2 ) = 115 +greenupxy ( 194, 3 ) = 101 +greenupxy ( 194, 4 ) = 113 +greenupxy ( 194, 5 ) = 113 +greenupxy ( 194, 6 ) = 113 +greenupxy ( 194, 7 ) = 111 +greenupxy ( 194, 8 ) = 111 +fallxy ( 194, 1 ) = 225 +fallxy ( 194, 2 ) = 227 +fallxy ( 194, 3 ) = 184 +fallxy ( 194, 4 ) = 209 +fallxy ( 194, 5 ) = 209 +fallxy ( 194, 6 ) = 209 +fallxy ( 194, 7 ) = 233 +fallxy ( 194, 8 ) = 233 +xyphendoy1 ( 194, 1 ) = 0 +xyphendoy1 ( 194, 2 ) = 0 +xyphendoy1 ( 194, 3 ) = 0 +xyphendoy1 ( 194, 4 ) = 0 +xyphendoy1 ( 194, 5 ) = 0 +xyphendoy1 ( 194, 6 ) = 0 +xyphendoy1 ( 194, 7 ) = 0 +xyphendoy1 ( 194, 8 ) = 0 + + ! xlat 40.7500000000000 +greenupxy ( 193, 1 ) = 131 +greenupxy ( 193, 2 ) = 113 +greenupxy ( 193, 3 ) = 100 +greenupxy ( 193, 4 ) = 112 +greenupxy ( 193, 5 ) = 112 +greenupxy ( 193, 6 ) = 112 +greenupxy ( 193, 7 ) = 109 +greenupxy ( 193, 8 ) = 109 +fallxy ( 193, 1 ) = 224 +fallxy ( 193, 2 ) = 226 +fallxy ( 193, 3 ) = 180 +fallxy ( 193, 4 ) = 210 +fallxy ( 193, 5 ) = 210 +fallxy ( 193, 6 ) = 210 +fallxy ( 193, 7 ) = 234 +fallxy ( 193, 8 ) = 234 +xyphendoy1 ( 193, 1 ) = 0 +xyphendoy1 ( 193, 2 ) = 0 +xyphendoy1 ( 193, 3 ) = 0 +xyphendoy1 ( 193, 4 ) = 0 +xyphendoy1 ( 193, 5 ) = 0 +xyphendoy1 ( 193, 6 ) = 0 +xyphendoy1 ( 193, 7 ) = 0 +xyphendoy1 ( 193, 8 ) = 0 + + ! xlat 40.2500000000000 +greenupxy ( 192, 1 ) = 131 +greenupxy ( 192, 2 ) = 112 +greenupxy ( 192, 3 ) = 98 +greenupxy ( 192, 4 ) = 111 +greenupxy ( 192, 5 ) = 111 +greenupxy ( 192, 6 ) = 111 +greenupxy ( 192, 7 ) = 108 +greenupxy ( 192, 8 ) = 108 +fallxy ( 192, 1 ) = 224 +fallxy ( 192, 2 ) = 226 +fallxy ( 192, 3 ) = 176 +fallxy ( 192, 4 ) = 210 +fallxy ( 192, 5 ) = 210 +fallxy ( 192, 6 ) = 210 +fallxy ( 192, 7 ) = 234 +fallxy ( 192, 8 ) = 234 +xyphendoy1 ( 192, 1 ) = 0 +xyphendoy1 ( 192, 2 ) = 0 +xyphendoy1 ( 192, 3 ) = 0 +xyphendoy1 ( 192, 4 ) = 0 +xyphendoy1 ( 192, 5 ) = 0 +xyphendoy1 ( 192, 6 ) = 0 +xyphendoy1 ( 192, 7 ) = 0 +xyphendoy1 ( 192, 8 ) = 0 + + ! xlat 39.7500000000000 +greenupxy ( 191, 1 ) = 131 +greenupxy ( 191, 2 ) = 111 +greenupxy ( 191, 3 ) = 95 +greenupxy ( 191, 4 ) = 110 +greenupxy ( 191, 5 ) = 110 +greenupxy ( 191, 6 ) = 110 +greenupxy ( 191, 7 ) = 107 +greenupxy ( 191, 8 ) = 107 +fallxy ( 191, 1 ) = 225 +fallxy ( 191, 2 ) = 226 +fallxy ( 191, 3 ) = 172 +fallxy ( 191, 4 ) = 211 +fallxy ( 191, 5 ) = 211 +fallxy ( 191, 6 ) = 211 +fallxy ( 191, 7 ) = 235 +fallxy ( 191, 8 ) = 235 +xyphendoy1 ( 191, 1 ) = 0 +xyphendoy1 ( 191, 2 ) = 0 +xyphendoy1 ( 191, 3 ) = 0 +xyphendoy1 ( 191, 4 ) = 0 +xyphendoy1 ( 191, 5 ) = 0 +xyphendoy1 ( 191, 6 ) = 0 +xyphendoy1 ( 191, 7 ) = 0 +xyphendoy1 ( 191, 8 ) = 0 + + ! xlat 39.2500000000000 +greenupxy ( 190, 1 ) = 131 +greenupxy ( 190, 2 ) = 109 +greenupxy ( 190, 3 ) = 92 +greenupxy ( 190, 4 ) = 110 +greenupxy ( 190, 5 ) = 110 +greenupxy ( 190, 6 ) = 110 +greenupxy ( 190, 7 ) = 105 +greenupxy ( 190, 8 ) = 105 +fallxy ( 190, 1 ) = 226 +fallxy ( 190, 2 ) = 225 +fallxy ( 190, 3 ) = 167 +fallxy ( 190, 4 ) = 213 +fallxy ( 190, 5 ) = 213 +fallxy ( 190, 6 ) = 213 +fallxy ( 190, 7 ) = 235 +fallxy ( 190, 8 ) = 235 +xyphendoy1 ( 190, 1 ) = 0 +xyphendoy1 ( 190, 2 ) = 0 +xyphendoy1 ( 190, 3 ) = 0 +xyphendoy1 ( 190, 4 ) = 0 +xyphendoy1 ( 190, 5 ) = 0 +xyphendoy1 ( 190, 6 ) = 0 +xyphendoy1 ( 190, 7 ) = 0 +xyphendoy1 ( 190, 8 ) = 0 + + ! xlat 38.7500000000000 +greenupxy ( 189, 1 ) = 131 +greenupxy ( 189, 2 ) = 107 +greenupxy ( 189, 3 ) = 89 +greenupxy ( 189, 4 ) = 110 +greenupxy ( 189, 5 ) = 110 +greenupxy ( 189, 6 ) = 110 +greenupxy ( 189, 7 ) = 103 +greenupxy ( 189, 8 ) = 103 +fallxy ( 189, 1 ) = 226 +fallxy ( 189, 2 ) = 225 +fallxy ( 189, 3 ) = 163 +fallxy ( 189, 4 ) = 215 +fallxy ( 189, 5 ) = 215 +fallxy ( 189, 6 ) = 215 +fallxy ( 189, 7 ) = 236 +fallxy ( 189, 8 ) = 236 +xyphendoy1 ( 189, 1 ) = 0 +xyphendoy1 ( 189, 2 ) = 0 +xyphendoy1 ( 189, 3 ) = 0 +xyphendoy1 ( 189, 4 ) = 0 +xyphendoy1 ( 189, 5 ) = 0 +xyphendoy1 ( 189, 6 ) = 0 +xyphendoy1 ( 189, 7 ) = 0 +xyphendoy1 ( 189, 8 ) = 0 + + ! xlat 38.2500000000000 +greenupxy ( 188, 1 ) = 131 +greenupxy ( 188, 2 ) = 106 +greenupxy ( 188, 3 ) = 86 +greenupxy ( 188, 4 ) = 111 +greenupxy ( 188, 5 ) = 111 +greenupxy ( 188, 6 ) = 111 +greenupxy ( 188, 7 ) = 101 +greenupxy ( 188, 8 ) = 101 +fallxy ( 188, 1 ) = 227 +fallxy ( 188, 2 ) = 224 +fallxy ( 188, 3 ) = 166 +fallxy ( 188, 4 ) = 216 +fallxy ( 188, 5 ) = 216 +fallxy ( 188, 6 ) = 216 +fallxy ( 188, 7 ) = 236 +fallxy ( 188, 8 ) = 236 +xyphendoy1 ( 188, 1 ) = 0 +xyphendoy1 ( 188, 2 ) = 0 +xyphendoy1 ( 188, 3 ) = 0 +xyphendoy1 ( 188, 4 ) = 0 +xyphendoy1 ( 188, 5 ) = 0 +xyphendoy1 ( 188, 6 ) = 0 +xyphendoy1 ( 188, 7 ) = 0 +xyphendoy1 ( 188, 8 ) = 0 + + ! xlat 37.7500000000000 +greenupxy ( 187, 1 ) = 130 +greenupxy ( 187, 2 ) = 104 +greenupxy ( 187, 3 ) = 88 +greenupxy ( 187, 4 ) = 111 +greenupxy ( 187, 5 ) = 111 +greenupxy ( 187, 6 ) = 111 +greenupxy ( 187, 7 ) = 99 +greenupxy ( 187, 8 ) = 99 +fallxy ( 187, 1 ) = 227 +fallxy ( 187, 2 ) = 223 +fallxy ( 187, 3 ) = 170 +fallxy ( 187, 4 ) = 217 +fallxy ( 187, 5 ) = 217 +fallxy ( 187, 6 ) = 217 +fallxy ( 187, 7 ) = 235 +fallxy ( 187, 8 ) = 235 +xyphendoy1 ( 187, 1 ) = 0 +xyphendoy1 ( 187, 2 ) = 0 +xyphendoy1 ( 187, 3 ) = 0 +xyphendoy1 ( 187, 4 ) = 0 +xyphendoy1 ( 187, 5 ) = 0 +xyphendoy1 ( 187, 6 ) = 0 +xyphendoy1 ( 187, 7 ) = 0 +xyphendoy1 ( 187, 8 ) = 0 + + ! xlat 37.2500000000000 +greenupxy ( 186, 1 ) = 130 +greenupxy ( 186, 2 ) = 102 +greenupxy ( 186, 3 ) = 89 +greenupxy ( 186, 4 ) = 111 +greenupxy ( 186, 5 ) = 111 +greenupxy ( 186, 6 ) = 111 +greenupxy ( 186, 7 ) = 96 +greenupxy ( 186, 8 ) = 96 +fallxy ( 186, 1 ) = 229 +fallxy ( 186, 2 ) = 222 +fallxy ( 186, 3 ) = 175 +fallxy ( 186, 4 ) = 219 +fallxy ( 186, 5 ) = 219 +fallxy ( 186, 6 ) = 219 +fallxy ( 186, 7 ) = 235 +fallxy ( 186, 8 ) = 235 +xyphendoy1 ( 186, 1 ) = 0 +xyphendoy1 ( 186, 2 ) = 0 +xyphendoy1 ( 186, 3 ) = 0 +xyphendoy1 ( 186, 4 ) = 0 +xyphendoy1 ( 186, 5 ) = 0 +xyphendoy1 ( 186, 6 ) = 0 +xyphendoy1 ( 186, 7 ) = 0 +xyphendoy1 ( 186, 8 ) = 0 + + ! xlat 36.7500000000000 +greenupxy ( 185, 1 ) = 130 +greenupxy ( 185, 2 ) = 100 +greenupxy ( 185, 3 ) = 93 +greenupxy ( 185, 4 ) = 111 +greenupxy ( 185, 5 ) = 111 +greenupxy ( 185, 6 ) = 111 +greenupxy ( 185, 7 ) = 94 +greenupxy ( 185, 8 ) = 94 +fallxy ( 185, 1 ) = 230 +fallxy ( 185, 2 ) = 221 +fallxy ( 185, 3 ) = 180 +fallxy ( 185, 4 ) = 220 +fallxy ( 185, 5 ) = 220 +fallxy ( 185, 6 ) = 220 +fallxy ( 185, 7 ) = 235 +fallxy ( 185, 8 ) = 235 +xyphendoy1 ( 185, 1 ) = 0 +xyphendoy1 ( 185, 2 ) = 0 +xyphendoy1 ( 185, 3 ) = 0 +xyphendoy1 ( 185, 4 ) = 0 +xyphendoy1 ( 185, 5 ) = 0 +xyphendoy1 ( 185, 6 ) = 0 +xyphendoy1 ( 185, 7 ) = 0 +xyphendoy1 ( 185, 8 ) = 0 + + ! xlat 36.2500000000000 +greenupxy ( 184, 1 ) = 129 +greenupxy ( 184, 2 ) = 98 +greenupxy ( 184, 3 ) = 97 +greenupxy ( 184, 4 ) = 110 +greenupxy ( 184, 5 ) = 110 +greenupxy ( 184, 6 ) = 110 +greenupxy ( 184, 7 ) = 92 +greenupxy ( 184, 8 ) = 92 +fallxy ( 184, 1 ) = 231 +fallxy ( 184, 2 ) = 221 +fallxy ( 184, 3 ) = 184 +fallxy ( 184, 4 ) = 222 +fallxy ( 184, 5 ) = 222 +fallxy ( 184, 6 ) = 222 +fallxy ( 184, 7 ) = 235 +fallxy ( 184, 8 ) = 235 +xyphendoy1 ( 184, 1 ) = 0 +xyphendoy1 ( 184, 2 ) = 0 +xyphendoy1 ( 184, 3 ) = 0 +xyphendoy1 ( 184, 4 ) = 0 +xyphendoy1 ( 184, 5 ) = 0 +xyphendoy1 ( 184, 6 ) = 0 +xyphendoy1 ( 184, 7 ) = 0 +xyphendoy1 ( 184, 8 ) = 0 + + ! xlat 35.7500000000000 +greenupxy ( 183, 1 ) = 128 +greenupxy ( 183, 2 ) = 96 +greenupxy ( 183, 3 ) = 100 +greenupxy ( 183, 4 ) = 110 +greenupxy ( 183, 5 ) = 110 +greenupxy ( 183, 6 ) = 110 +greenupxy ( 183, 7 ) = 91 +greenupxy ( 183, 8 ) = 91 +fallxy ( 183, 1 ) = 233 +fallxy ( 183, 2 ) = 220 +fallxy ( 183, 3 ) = 188 +fallxy ( 183, 4 ) = 224 +fallxy ( 183, 5 ) = 224 +fallxy ( 183, 6 ) = 224 +fallxy ( 183, 7 ) = 235 +fallxy ( 183, 8 ) = 235 +xyphendoy1 ( 183, 1 ) = 0 +xyphendoy1 ( 183, 2 ) = 0 +xyphendoy1 ( 183, 3 ) = 0 +xyphendoy1 ( 183, 4 ) = 0 +xyphendoy1 ( 183, 5 ) = 0 +xyphendoy1 ( 183, 6 ) = 0 +xyphendoy1 ( 183, 7 ) = 0 +xyphendoy1 ( 183, 8 ) = 0 + + ! xlat 35.2500000000000 +greenupxy ( 182, 1 ) = 127 +greenupxy ( 182, 2 ) = 94 +greenupxy ( 182, 3 ) = 104 +greenupxy ( 182, 4 ) = 110 +greenupxy ( 182, 5 ) = 110 +greenupxy ( 182, 6 ) = 110 +greenupxy ( 182, 7 ) = 90 +greenupxy ( 182, 8 ) = 90 +fallxy ( 182, 1 ) = 234 +fallxy ( 182, 2 ) = 220 +fallxy ( 182, 3 ) = 192 +fallxy ( 182, 4 ) = 226 +fallxy ( 182, 5 ) = 226 +fallxy ( 182, 6 ) = 226 +fallxy ( 182, 7 ) = 234 +fallxy ( 182, 8 ) = 234 +xyphendoy1 ( 182, 1 ) = 0 +xyphendoy1 ( 182, 2 ) = 0 +xyphendoy1 ( 182, 3 ) = 0 +xyphendoy1 ( 182, 4 ) = 0 +xyphendoy1 ( 182, 5 ) = 0 +xyphendoy1 ( 182, 6 ) = 0 +xyphendoy1 ( 182, 7 ) = 0 +xyphendoy1 ( 182, 8 ) = 0 + + ! xlat 34.7500000000000 +greenupxy ( 181, 1 ) = 126 +greenupxy ( 181, 2 ) = 93 +greenupxy ( 181, 3 ) = 107 +greenupxy ( 181, 4 ) = 110 +greenupxy ( 181, 5 ) = 110 +greenupxy ( 181, 6 ) = 110 +greenupxy ( 181, 7 ) = 88 +greenupxy ( 181, 8 ) = 88 +fallxy ( 181, 1 ) = 235 +fallxy ( 181, 2 ) = 220 +fallxy ( 181, 3 ) = 197 +fallxy ( 181, 4 ) = 228 +fallxy ( 181, 5 ) = 228 +fallxy ( 181, 6 ) = 228 +fallxy ( 181, 7 ) = 233 +fallxy ( 181, 8 ) = 233 +xyphendoy1 ( 181, 1 ) = 0 +xyphendoy1 ( 181, 2 ) = 0 +xyphendoy1 ( 181, 3 ) = 0 +xyphendoy1 ( 181, 4 ) = 0 +xyphendoy1 ( 181, 5 ) = 0 +xyphendoy1 ( 181, 6 ) = 0 +xyphendoy1 ( 181, 7 ) = 0 +xyphendoy1 ( 181, 8 ) = 0 + + ! xlat 34.2500000000000 +greenupxy ( 180, 1 ) = 125 +greenupxy ( 180, 2 ) = 91 +greenupxy ( 180, 3 ) = 109 +greenupxy ( 180, 4 ) = 111 +greenupxy ( 180, 5 ) = 111 +greenupxy ( 180, 6 ) = 111 +greenupxy ( 180, 7 ) = 87 +greenupxy ( 180, 8 ) = 87 +fallxy ( 180, 1 ) = 236 +fallxy ( 180, 2 ) = 221 +fallxy ( 180, 3 ) = 201 +fallxy ( 180, 4 ) = 231 +fallxy ( 180, 5 ) = 231 +fallxy ( 180, 6 ) = 231 +fallxy ( 180, 7 ) = 233 +fallxy ( 180, 8 ) = 233 +xyphendoy1 ( 180, 1 ) = 0 +xyphendoy1 ( 180, 2 ) = 0 +xyphendoy1 ( 180, 3 ) = 0 +xyphendoy1 ( 180, 4 ) = 0 +xyphendoy1 ( 180, 5 ) = 0 +xyphendoy1 ( 180, 6 ) = 0 +xyphendoy1 ( 180, 7 ) = 0 +xyphendoy1 ( 180, 8 ) = 0 + + ! xlat 33.7500000000000 +greenupxy ( 179, 1 ) = 123 +greenupxy ( 179, 2 ) = 90 +greenupxy ( 179, 3 ) = 113 +greenupxy ( 179, 4 ) = 114 +greenupxy ( 179, 5 ) = 114 +greenupxy ( 179, 6 ) = 114 +greenupxy ( 179, 7 ) = 86 +greenupxy ( 179, 8 ) = 86 +fallxy ( 179, 1 ) = 237 +fallxy ( 179, 2 ) = 222 +fallxy ( 179, 3 ) = 208 +fallxy ( 179, 4 ) = 233 +fallxy ( 179, 5 ) = 233 +fallxy ( 179, 6 ) = 233 +fallxy ( 179, 7 ) = 233 +fallxy ( 179, 8 ) = 233 +xyphendoy1 ( 179, 1 ) = 0 +xyphendoy1 ( 179, 2 ) = 0 +xyphendoy1 ( 179, 3 ) = 0 +xyphendoy1 ( 179, 4 ) = 0 +xyphendoy1 ( 179, 5 ) = 0 +xyphendoy1 ( 179, 6 ) = 0 +xyphendoy1 ( 179, 7 ) = 0 +xyphendoy1 ( 179, 8 ) = 0 + + ! xlat 33.2500000000000 +greenupxy ( 178, 1 ) = 120 +greenupxy ( 178, 2 ) = 89 +greenupxy ( 178, 3 ) = 118 +greenupxy ( 178, 4 ) = 115 +greenupxy ( 178, 5 ) = 115 +greenupxy ( 178, 6 ) = 115 +greenupxy ( 178, 7 ) = 85 +greenupxy ( 178, 8 ) = 85 +fallxy ( 178, 1 ) = 238 +fallxy ( 178, 2 ) = 223 +fallxy ( 178, 3 ) = 213 +fallxy ( 178, 4 ) = 235 +fallxy ( 178, 5 ) = 235 +fallxy ( 178, 6 ) = 235 +fallxy ( 178, 7 ) = 236 +fallxy ( 178, 8 ) = 236 +xyphendoy1 ( 178, 1 ) = 0 +xyphendoy1 ( 178, 2 ) = 0 +xyphendoy1 ( 178, 3 ) = 0 +xyphendoy1 ( 178, 4 ) = 0 +xyphendoy1 ( 178, 5 ) = 0 +xyphendoy1 ( 178, 6 ) = 0 +xyphendoy1 ( 178, 7 ) = 0 +xyphendoy1 ( 178, 8 ) = 0 + + ! xlat 32.7500000000000 +greenupxy ( 177, 1 ) = 118 +greenupxy ( 177, 2 ) = 88 +greenupxy ( 177, 3 ) = 122 +greenupxy ( 177, 4 ) = 117 +greenupxy ( 177, 5 ) = 117 +greenupxy ( 177, 6 ) = 117 +greenupxy ( 177, 7 ) = 84 +greenupxy ( 177, 8 ) = 84 +fallxy ( 177, 1 ) = 238 +fallxy ( 177, 2 ) = 225 +fallxy ( 177, 3 ) = 218 +fallxy ( 177, 4 ) = 238 +fallxy ( 177, 5 ) = 238 +fallxy ( 177, 6 ) = 238 +fallxy ( 177, 7 ) = 235 +fallxy ( 177, 8 ) = 235 +xyphendoy1 ( 177, 1 ) = 0 +xyphendoy1 ( 177, 2 ) = 0 +xyphendoy1 ( 177, 3 ) = 0 +xyphendoy1 ( 177, 4 ) = 0 +xyphendoy1 ( 177, 5 ) = 0 +xyphendoy1 ( 177, 6 ) = 0 +xyphendoy1 ( 177, 7 ) = 0 +xyphendoy1 ( 177, 8 ) = 0 + + ! xlat 32.2500000000000 +greenupxy ( 176, 1 ) = 114 +greenupxy ( 176, 2 ) = 88 +greenupxy ( 176, 3 ) = 126 +greenupxy ( 176, 4 ) = 120 +greenupxy ( 176, 5 ) = 120 +greenupxy ( 176, 6 ) = 120 +greenupxy ( 176, 7 ) = 85 +greenupxy ( 176, 8 ) = 85 +fallxy ( 176, 1 ) = 235 +fallxy ( 176, 2 ) = 226 +fallxy ( 176, 3 ) = 227 +fallxy ( 176, 4 ) = 241 +fallxy ( 176, 5 ) = 241 +fallxy ( 176, 6 ) = 241 +fallxy ( 176, 7 ) = 236 +fallxy ( 176, 8 ) = 236 +xyphendoy1 ( 176, 1 ) = 0 +xyphendoy1 ( 176, 2 ) = 0 +xyphendoy1 ( 176, 3 ) = 0 +xyphendoy1 ( 176, 4 ) = 0 +xyphendoy1 ( 176, 5 ) = 0 +xyphendoy1 ( 176, 6 ) = 0 +xyphendoy1 ( 176, 7 ) = 0 +xyphendoy1 ( 176, 8 ) = 0 + + ! xlat 31.7500000000000 +greenupxy ( 175, 1 ) = 113 +greenupxy ( 175, 2 ) = 88 +greenupxy ( 175, 3 ) = 133 +greenupxy ( 175, 4 ) = 122 +greenupxy ( 175, 5 ) = 122 +greenupxy ( 175, 6 ) = 122 +greenupxy ( 175, 7 ) = 85 +greenupxy ( 175, 8 ) = 85 +fallxy ( 175, 1 ) = 236 +fallxy ( 175, 2 ) = 228 +fallxy ( 175, 3 ) = 236 +fallxy ( 175, 4 ) = 244 +fallxy ( 175, 5 ) = 244 +fallxy ( 175, 6 ) = 244 +fallxy ( 175, 7 ) = 236 +fallxy ( 175, 8 ) = 236 +xyphendoy1 ( 175, 1 ) = 0 +xyphendoy1 ( 175, 2 ) = 0 +xyphendoy1 ( 175, 3 ) = 0 +xyphendoy1 ( 175, 4 ) = 0 +xyphendoy1 ( 175, 5 ) = 0 +xyphendoy1 ( 175, 6 ) = 0 +xyphendoy1 ( 175, 7 ) = 0 +xyphendoy1 ( 175, 8 ) = 0 + + ! xlat 31.2500000000000 +greenupxy ( 174, 1 ) = 110 +greenupxy ( 174, 2 ) = 89 +greenupxy ( 174, 3 ) = 140 +greenupxy ( 174, 4 ) = 124 +greenupxy ( 174, 5 ) = 124 +greenupxy ( 174, 6 ) = 124 +greenupxy ( 174, 7 ) = 85 +greenupxy ( 174, 8 ) = 85 +fallxy ( 174, 1 ) = 236 +fallxy ( 174, 2 ) = 230 +fallxy ( 174, 3 ) = 245 +fallxy ( 174, 4 ) = 247 +fallxy ( 174, 5 ) = 247 +fallxy ( 174, 6 ) = 247 +fallxy ( 174, 7 ) = 236 +fallxy ( 174, 8 ) = 236 +xyphendoy1 ( 174, 1 ) = 0 +xyphendoy1 ( 174, 2 ) = 0 +xyphendoy1 ( 174, 3 ) = 0 +xyphendoy1 ( 174, 4 ) = 0 +xyphendoy1 ( 174, 5 ) = 0 +xyphendoy1 ( 174, 6 ) = 0 +xyphendoy1 ( 174, 7 ) = 0 +xyphendoy1 ( 174, 8 ) = 0 + + ! xlat 30.7500000000000 +greenupxy ( 173, 1 ) = 108 +greenupxy ( 173, 2 ) = 90 +greenupxy ( 173, 3 ) = 148 +greenupxy ( 173, 4 ) = 126 +greenupxy ( 173, 5 ) = 126 +greenupxy ( 173, 6 ) = 126 +greenupxy ( 173, 7 ) = 86 +greenupxy ( 173, 8 ) = 86 +fallxy ( 173, 1 ) = 236 +fallxy ( 173, 2 ) = 232 +fallxy ( 173, 3 ) = 255 +fallxy ( 173, 4 ) = 251 +fallxy ( 173, 5 ) = 251 +fallxy ( 173, 6 ) = 251 +fallxy ( 173, 7 ) = 237 +fallxy ( 173, 8 ) = 237 +xyphendoy1 ( 173, 1 ) = 0 +xyphendoy1 ( 173, 2 ) = 0 +xyphendoy1 ( 173, 3 ) = 0 +xyphendoy1 ( 173, 4 ) = 0 +xyphendoy1 ( 173, 5 ) = 0 +xyphendoy1 ( 173, 6 ) = 0 +xyphendoy1 ( 173, 7 ) = 0 +xyphendoy1 ( 173, 8 ) = 0 + + ! xlat 30.2500000000000 +greenupxy ( 172, 1 ) = 107 +greenupxy ( 172, 2 ) = 93 +greenupxy ( 172, 3 ) = 156 +greenupxy ( 172, 4 ) = 128 +greenupxy ( 172, 5 ) = 128 +greenupxy ( 172, 6 ) = 128 +greenupxy ( 172, 7 ) = 88 +greenupxy ( 172, 8 ) = 88 +fallxy ( 172, 1 ) = 237 +fallxy ( 172, 2 ) = 234 +fallxy ( 172, 3 ) = 265 +fallxy ( 172, 4 ) = 253 +fallxy ( 172, 5 ) = 253 +fallxy ( 172, 6 ) = 253 +fallxy ( 172, 7 ) = 237 +fallxy ( 172, 8 ) = 237 +xyphendoy1 ( 172, 1 ) = 0 +xyphendoy1 ( 172, 2 ) = 0 +xyphendoy1 ( 172, 3 ) = 0 +xyphendoy1 ( 172, 4 ) = 0 +xyphendoy1 ( 172, 5 ) = 0 +xyphendoy1 ( 172, 6 ) = 0 +xyphendoy1 ( 172, 7 ) = 0 +xyphendoy1 ( 172, 8 ) = 0 + + ! xlat 29.7500000000000 +greenupxy ( 171, 1 ) = 108 +greenupxy ( 171, 2 ) = 95 +greenupxy ( 171, 3 ) = 163 +greenupxy ( 171, 4 ) = 129 +greenupxy ( 171, 5 ) = 129 +greenupxy ( 171, 6 ) = 129 +greenupxy ( 171, 7 ) = 90 +greenupxy ( 171, 8 ) = 90 +fallxy ( 171, 1 ) = 238 +fallxy ( 171, 2 ) = 236 +fallxy ( 171, 3 ) = 268 +fallxy ( 171, 4 ) = 256 +fallxy ( 171, 5 ) = 256 +fallxy ( 171, 6 ) = 256 +fallxy ( 171, 7 ) = 238 +fallxy ( 171, 8 ) = 238 +xyphendoy1 ( 171, 1 ) = 0 +xyphendoy1 ( 171, 2 ) = 0 +xyphendoy1 ( 171, 3 ) = 0 +xyphendoy1 ( 171, 4 ) = 0 +xyphendoy1 ( 171, 5 ) = 0 +xyphendoy1 ( 171, 6 ) = 0 +xyphendoy1 ( 171, 7 ) = 0 +xyphendoy1 ( 171, 8 ) = 0 + + ! xlat 29.2500000000000 +greenupxy ( 170, 1 ) = 110 +greenupxy ( 170, 2 ) = 100 +greenupxy ( 170, 3 ) = 167 +greenupxy ( 170, 4 ) = 132 +greenupxy ( 170, 5 ) = 132 +greenupxy ( 170, 6 ) = 132 +greenupxy ( 170, 7 ) = 93 +greenupxy ( 170, 8 ) = 93 +fallxy ( 170, 1 ) = 238 +fallxy ( 170, 2 ) = 238 +fallxy ( 170, 3 ) = 270 +fallxy ( 170, 4 ) = 259 +fallxy ( 170, 5 ) = 259 +fallxy ( 170, 6 ) = 259 +fallxy ( 170, 7 ) = 241 +fallxy ( 170, 8 ) = 241 +xyphendoy1 ( 170, 1 ) = 0 +xyphendoy1 ( 170, 2 ) = 0 +xyphendoy1 ( 170, 3 ) = 0 +xyphendoy1 ( 170, 4 ) = 0 +xyphendoy1 ( 170, 5 ) = 0 +xyphendoy1 ( 170, 6 ) = 0 +xyphendoy1 ( 170, 7 ) = 0 +xyphendoy1 ( 170, 8 ) = 0 + + ! xlat 28.7500000000000 +greenupxy ( 169, 1 ) = 109 +greenupxy ( 169, 2 ) = 105 +greenupxy ( 169, 3 ) = 170 +greenupxy ( 169, 4 ) = 134 +greenupxy ( 169, 5 ) = 134 +greenupxy ( 169, 6 ) = 134 +greenupxy ( 169, 7 ) = 97 +greenupxy ( 169, 8 ) = 97 +fallxy ( 169, 1 ) = 238 +fallxy ( 169, 2 ) = 241 +fallxy ( 169, 3 ) = 272 +fallxy ( 169, 4 ) = 262 +fallxy ( 169, 5 ) = 262 +fallxy ( 169, 6 ) = 262 +fallxy ( 169, 7 ) = 244 +fallxy ( 169, 8 ) = 244 +xyphendoy1 ( 169, 1 ) = 0 +xyphendoy1 ( 169, 2 ) = 0 +xyphendoy1 ( 169, 3 ) = 0 +xyphendoy1 ( 169, 4 ) = 0 +xyphendoy1 ( 169, 5 ) = 0 +xyphendoy1 ( 169, 6 ) = 0 +xyphendoy1 ( 169, 7 ) = 0 +xyphendoy1 ( 169, 8 ) = 0 + + ! xlat 28.2500000000000 +greenupxy ( 168, 1 ) = 112 +greenupxy ( 168, 2 ) = 109 +greenupxy ( 168, 3 ) = 170 +greenupxy ( 168, 4 ) = 136 +greenupxy ( 168, 5 ) = 136 +greenupxy ( 168, 6 ) = 136 +greenupxy ( 168, 7 ) = 99 +greenupxy ( 168, 8 ) = 99 +fallxy ( 168, 1 ) = 239 +fallxy ( 168, 2 ) = 243 +fallxy ( 168, 3 ) = 273 +fallxy ( 168, 4 ) = 264 +fallxy ( 168, 5 ) = 264 +fallxy ( 168, 6 ) = 264 +fallxy ( 168, 7 ) = 247 +fallxy ( 168, 8 ) = 247 +xyphendoy1 ( 168, 1 ) = 0 +xyphendoy1 ( 168, 2 ) = 0 +xyphendoy1 ( 168, 3 ) = 0 +xyphendoy1 ( 168, 4 ) = 0 +xyphendoy1 ( 168, 5 ) = 0 +xyphendoy1 ( 168, 6 ) = 0 +xyphendoy1 ( 168, 7 ) = 0 +xyphendoy1 ( 168, 8 ) = 0 + + ! xlat 27.7500000000000 +greenupxy ( 167, 1 ) = 111 +greenupxy ( 167, 2 ) = 114 +greenupxy ( 167, 3 ) = 170 +greenupxy ( 167, 4 ) = 138 +greenupxy ( 167, 5 ) = 138 +greenupxy ( 167, 6 ) = 138 +greenupxy ( 167, 7 ) = 101 +greenupxy ( 167, 8 ) = 101 +fallxy ( 167, 1 ) = 239 +fallxy ( 167, 2 ) = 246 +fallxy ( 167, 3 ) = 275 +fallxy ( 167, 4 ) = 266 +fallxy ( 167, 5 ) = 266 +fallxy ( 167, 6 ) = 266 +fallxy ( 167, 7 ) = 251 +fallxy ( 167, 8 ) = 251 +xyphendoy1 ( 167, 1 ) = 0 +xyphendoy1 ( 167, 2 ) = 0 +xyphendoy1 ( 167, 3 ) = 0 +xyphendoy1 ( 167, 4 ) = 0 +xyphendoy1 ( 167, 5 ) = 0 +xyphendoy1 ( 167, 6 ) = 0 +xyphendoy1 ( 167, 7 ) = 0 +xyphendoy1 ( 167, 8 ) = 0 + + ! xlat 27.2500000000000 +greenupxy ( 166, 1 ) = 116 +greenupxy ( 166, 2 ) = 119 +greenupxy ( 166, 3 ) = 169 +greenupxy ( 166, 4 ) = 140 +greenupxy ( 166, 5 ) = 140 +greenupxy ( 166, 6 ) = 140 +greenupxy ( 166, 7 ) = 104 +greenupxy ( 166, 8 ) = 104 +fallxy ( 166, 1 ) = 242 +fallxy ( 166, 2 ) = 249 +fallxy ( 166, 3 ) = 276 +fallxy ( 166, 4 ) = 268 +fallxy ( 166, 5 ) = 268 +fallxy ( 166, 6 ) = 268 +fallxy ( 166, 7 ) = 254 +fallxy ( 166, 8 ) = 254 +xyphendoy1 ( 166, 1 ) = 0 +xyphendoy1 ( 166, 2 ) = 0 +xyphendoy1 ( 166, 3 ) = 0 +xyphendoy1 ( 166, 4 ) = 0 +xyphendoy1 ( 166, 5 ) = 0 +xyphendoy1 ( 166, 6 ) = 0 +xyphendoy1 ( 166, 7 ) = 0 +xyphendoy1 ( 166, 8 ) = 0 + + ! xlat 26.7500000000000 +greenupxy ( 165, 1 ) = 115 +greenupxy ( 165, 2 ) = 123 +greenupxy ( 165, 3 ) = 169 +greenupxy ( 165, 4 ) = 141 +greenupxy ( 165, 5 ) = 141 +greenupxy ( 165, 6 ) = 141 +greenupxy ( 165, 7 ) = 106 +greenupxy ( 165, 8 ) = 106 +fallxy ( 165, 1 ) = 242 +fallxy ( 165, 2 ) = 251 +fallxy ( 165, 3 ) = 278 +fallxy ( 165, 4 ) = 270 +fallxy ( 165, 5 ) = 270 +fallxy ( 165, 6 ) = 270 +fallxy ( 165, 7 ) = 260 +fallxy ( 165, 8 ) = 260 +xyphendoy1 ( 165, 1 ) = 0 +xyphendoy1 ( 165, 2 ) = 0 +xyphendoy1 ( 165, 3 ) = 0 +xyphendoy1 ( 165, 4 ) = 0 +xyphendoy1 ( 165, 5 ) = 0 +xyphendoy1 ( 165, 6 ) = 0 +xyphendoy1 ( 165, 7 ) = 0 +xyphendoy1 ( 165, 8 ) = 0 + + ! xlat 26.2500000000000 +greenupxy ( 164, 1 ) = 115 +greenupxy ( 164, 2 ) = 127 +greenupxy ( 164, 3 ) = 168 +greenupxy ( 164, 4 ) = 144 +greenupxy ( 164, 5 ) = 144 +greenupxy ( 164, 6 ) = 144 +greenupxy ( 164, 7 ) = 109 +greenupxy ( 164, 8 ) = 109 +fallxy ( 164, 1 ) = 245 +fallxy ( 164, 2 ) = 254 +fallxy ( 164, 3 ) = 279 +fallxy ( 164, 4 ) = 272 +fallxy ( 164, 5 ) = 272 +fallxy ( 164, 6 ) = 272 +fallxy ( 164, 7 ) = 262 +fallxy ( 164, 8 ) = 262 +xyphendoy1 ( 164, 1 ) = 0 +xyphendoy1 ( 164, 2 ) = 0 +xyphendoy1 ( 164, 3 ) = 0 +xyphendoy1 ( 164, 4 ) = 0 +xyphendoy1 ( 164, 5 ) = 0 +xyphendoy1 ( 164, 6 ) = 0 +xyphendoy1 ( 164, 7 ) = 0 +xyphendoy1 ( 164, 8 ) = 0 + + ! xlat 25.7500000000000 +greenupxy ( 163, 1 ) = 115 +greenupxy ( 163, 2 ) = 131 +greenupxy ( 163, 3 ) = 169 +greenupxy ( 163, 4 ) = 145 +greenupxy ( 163, 5 ) = 145 +greenupxy ( 163, 6 ) = 145 +greenupxy ( 163, 7 ) = 112 +greenupxy ( 163, 8 ) = 112 +fallxy ( 163, 1 ) = 245 +fallxy ( 163, 2 ) = 256 +fallxy ( 163, 3 ) = 279 +fallxy ( 163, 4 ) = 273 +fallxy ( 163, 5 ) = 273 +fallxy ( 163, 6 ) = 273 +fallxy ( 163, 7 ) = 263 +fallxy ( 163, 8 ) = 263 +xyphendoy1 ( 163, 1 ) = 0 +xyphendoy1 ( 163, 2 ) = 0 +xyphendoy1 ( 163, 3 ) = 0 +xyphendoy1 ( 163, 4 ) = 0 +xyphendoy1 ( 163, 5 ) = 0 +xyphendoy1 ( 163, 6 ) = 0 +xyphendoy1 ( 163, 7 ) = 0 +xyphendoy1 ( 163, 8 ) = 0 + + ! xlat 25.2500000000000 +greenupxy ( 162, 1 ) = 116 +greenupxy ( 162, 2 ) = 134 +greenupxy ( 162, 3 ) = 168 +greenupxy ( 162, 4 ) = 145 +greenupxy ( 162, 5 ) = 145 +greenupxy ( 162, 6 ) = 145 +greenupxy ( 162, 7 ) = 115 +greenupxy ( 162, 8 ) = 115 +fallxy ( 162, 1 ) = 245 +fallxy ( 162, 2 ) = 257 +fallxy ( 162, 3 ) = 279 +fallxy ( 162, 4 ) = 273 +fallxy ( 162, 5 ) = 273 +fallxy ( 162, 6 ) = 273 +fallxy ( 162, 7 ) = 265 +fallxy ( 162, 8 ) = 265 +xyphendoy1 ( 162, 1 ) = 0 +xyphendoy1 ( 162, 2 ) = 0 +xyphendoy1 ( 162, 3 ) = 0 +xyphendoy1 ( 162, 4 ) = 0 +xyphendoy1 ( 162, 5 ) = 0 +xyphendoy1 ( 162, 6 ) = 0 +xyphendoy1 ( 162, 7 ) = 0 +xyphendoy1 ( 162, 8 ) = 0 + + ! xlat 24.7500000000000 +greenupxy ( 161, 1 ) = 118 +greenupxy ( 161, 2 ) = 137 +greenupxy ( 161, 3 ) = 167 +greenupxy ( 161, 4 ) = 146 +greenupxy ( 161, 5 ) = 146 +greenupxy ( 161, 6 ) = 146 +greenupxy ( 161, 7 ) = 118 +greenupxy ( 161, 8 ) = 118 +fallxy ( 161, 1 ) = 240 +fallxy ( 161, 2 ) = 258 +fallxy ( 161, 3 ) = 279 +fallxy ( 161, 4 ) = 274 +fallxy ( 161, 5 ) = 274 +fallxy ( 161, 6 ) = 274 +fallxy ( 161, 7 ) = 267 +fallxy ( 161, 8 ) = 267 +xyphendoy1 ( 161, 1 ) = 0 +xyphendoy1 ( 161, 2 ) = 0 +xyphendoy1 ( 161, 3 ) = 0 +xyphendoy1 ( 161, 4 ) = 0 +xyphendoy1 ( 161, 5 ) = 0 +xyphendoy1 ( 161, 6 ) = 0 +xyphendoy1 ( 161, 7 ) = 0 +xyphendoy1 ( 161, 8 ) = 0 + + ! xlat 24.2500000000000 +greenupxy ( 160, 1 ) = 121 +greenupxy ( 160, 2 ) = 140 +greenupxy ( 160, 3 ) = 165 +greenupxy ( 160, 4 ) = 146 +greenupxy ( 160, 5 ) = 146 +greenupxy ( 160, 6 ) = 146 +greenupxy ( 160, 7 ) = 120 +greenupxy ( 160, 8 ) = 120 +fallxy ( 160, 1 ) = 241 +fallxy ( 160, 2 ) = 259 +fallxy ( 160, 3 ) = 279 +fallxy ( 160, 4 ) = 274 +fallxy ( 160, 5 ) = 274 +fallxy ( 160, 6 ) = 274 +fallxy ( 160, 7 ) = 269 +fallxy ( 160, 8 ) = 269 +xyphendoy1 ( 160, 1 ) = 0 +xyphendoy1 ( 160, 2 ) = 0 +xyphendoy1 ( 160, 3 ) = 0 +xyphendoy1 ( 160, 4 ) = 0 +xyphendoy1 ( 160, 5 ) = 0 +xyphendoy1 ( 160, 6 ) = 0 +xyphendoy1 ( 160, 7 ) = 0 +xyphendoy1 ( 160, 8 ) = 0 + + ! xlat 23.7500000000000 +greenupxy ( 159, 1 ) = 127 +greenupxy ( 159, 2 ) = 142 +greenupxy ( 159, 3 ) = 164 +greenupxy ( 159, 4 ) = 146 +greenupxy ( 159, 5 ) = 146 +greenupxy ( 159, 6 ) = 146 +greenupxy ( 159, 7 ) = 121 +greenupxy ( 159, 8 ) = 121 +fallxy ( 159, 1 ) = 249 +fallxy ( 159, 2 ) = 260 +fallxy ( 159, 3 ) = 279 +fallxy ( 159, 4 ) = 274 +fallxy ( 159, 5 ) = 274 +fallxy ( 159, 6 ) = 274 +fallxy ( 159, 7 ) = 271 +fallxy ( 159, 8 ) = 271 +xyphendoy1 ( 159, 1 ) = 0 +xyphendoy1 ( 159, 2 ) = 0 +xyphendoy1 ( 159, 3 ) = 0 +xyphendoy1 ( 159, 4 ) = 0 +xyphendoy1 ( 159, 5 ) = 0 +xyphendoy1 ( 159, 6 ) = 0 +xyphendoy1 ( 159, 7 ) = 0 +xyphendoy1 ( 159, 8 ) = 0 + + ! xlat 23.2500000000000 +greenupxy ( 158, 1 ) = 131 +greenupxy ( 158, 2 ) = 145 +greenupxy ( 158, 3 ) = 162 +greenupxy ( 158, 4 ) = 145 +greenupxy ( 158, 5 ) = 145 +greenupxy ( 158, 6 ) = 145 +greenupxy ( 158, 7 ) = 122 +greenupxy ( 158, 8 ) = 122 +fallxy ( 158, 1 ) = 251 +fallxy ( 158, 2 ) = 262 +fallxy ( 158, 3 ) = 278 +fallxy ( 158, 4 ) = 274 +fallxy ( 158, 5 ) = 274 +fallxy ( 158, 6 ) = 274 +fallxy ( 158, 7 ) = 273 +fallxy ( 158, 8 ) = 273 +xyphendoy1 ( 158, 1 ) = 0 +xyphendoy1 ( 158, 2 ) = 0 +xyphendoy1 ( 158, 3 ) = 0 +xyphendoy1 ( 158, 4 ) = 0 +xyphendoy1 ( 158, 5 ) = 0 +xyphendoy1 ( 158, 6 ) = 0 +xyphendoy1 ( 158, 7 ) = 0 +xyphendoy1 ( 158, 8 ) = 0 + + ! xlat 22.7500000000000 +greenupxy ( 157, 1 ) = 134 +greenupxy ( 157, 2 ) = 147 +greenupxy ( 157, 3 ) = 159 +greenupxy ( 157, 4 ) = 144 +greenupxy ( 157, 5 ) = 144 +greenupxy ( 157, 6 ) = 144 +greenupxy ( 157, 7 ) = 121 +greenupxy ( 157, 8 ) = 121 +fallxy ( 157, 1 ) = 254 +fallxy ( 157, 2 ) = 262 +fallxy ( 157, 3 ) = 278 +fallxy ( 157, 4 ) = 274 +fallxy ( 157, 5 ) = 274 +fallxy ( 157, 6 ) = 274 +fallxy ( 157, 7 ) = 276 +fallxy ( 157, 8 ) = 276 +xyphendoy1 ( 157, 1 ) = 0 +xyphendoy1 ( 157, 2 ) = 0 +xyphendoy1 ( 157, 3 ) = 0 +xyphendoy1 ( 157, 4 ) = 0 +xyphendoy1 ( 157, 5 ) = 0 +xyphendoy1 ( 157, 6 ) = 0 +xyphendoy1 ( 157, 7 ) = 0 +xyphendoy1 ( 157, 8 ) = 0 + + ! xlat 22.2500000000000 +greenupxy ( 156, 1 ) = 137 +greenupxy ( 156, 2 ) = 148 +greenupxy ( 156, 3 ) = 157 +greenupxy ( 156, 4 ) = 144 +greenupxy ( 156, 5 ) = 144 +greenupxy ( 156, 6 ) = 144 +greenupxy ( 156, 7 ) = 122 +greenupxy ( 156, 8 ) = 122 +fallxy ( 156, 1 ) = 256 +fallxy ( 156, 2 ) = 263 +fallxy ( 156, 3 ) = 278 +fallxy ( 156, 4 ) = 274 +fallxy ( 156, 5 ) = 274 +fallxy ( 156, 6 ) = 274 +fallxy ( 156, 7 ) = 279 +fallxy ( 156, 8 ) = 279 +xyphendoy1 ( 156, 1 ) = 0 +xyphendoy1 ( 156, 2 ) = 0 +xyphendoy1 ( 156, 3 ) = 0 +xyphendoy1 ( 156, 4 ) = 0 +xyphendoy1 ( 156, 5 ) = 0 +xyphendoy1 ( 156, 6 ) = 0 +xyphendoy1 ( 156, 7 ) = 0 +xyphendoy1 ( 156, 8 ) = 0 + + ! xlat 21.7500000000000 +greenupxy ( 155, 1 ) = 140 +greenupxy ( 155, 2 ) = 148 +greenupxy ( 155, 3 ) = 159 +greenupxy ( 155, 4 ) = 143 +greenupxy ( 155, 5 ) = 143 +greenupxy ( 155, 6 ) = 143 +greenupxy ( 155, 7 ) = 123 +greenupxy ( 155, 8 ) = 123 +fallxy ( 155, 1 ) = 256 +fallxy ( 155, 2 ) = 264 +fallxy ( 155, 3 ) = 277 +fallxy ( 155, 4 ) = 274 +fallxy ( 155, 5 ) = 274 +fallxy ( 155, 6 ) = 274 +fallxy ( 155, 7 ) = 281 +fallxy ( 155, 8 ) = 281 +xyphendoy1 ( 155, 1 ) = 0 +xyphendoy1 ( 155, 2 ) = 0 +xyphendoy1 ( 155, 3 ) = 0 +xyphendoy1 ( 155, 4 ) = 0 +xyphendoy1 ( 155, 5 ) = 0 +xyphendoy1 ( 155, 6 ) = 0 +xyphendoy1 ( 155, 7 ) = 0 +xyphendoy1 ( 155, 8 ) = 0 + + ! xlat 21.2500000000000 +greenupxy ( 154, 1 ) = 141 +greenupxy ( 154, 2 ) = 148 +greenupxy ( 154, 3 ) = 160 +greenupxy ( 154, 4 ) = 142 +greenupxy ( 154, 5 ) = 142 +greenupxy ( 154, 6 ) = 142 +greenupxy ( 154, 7 ) = 124 +greenupxy ( 154, 8 ) = 124 +fallxy ( 154, 1 ) = 257 +fallxy ( 154, 2 ) = 265 +fallxy ( 154, 3 ) = 277 +fallxy ( 154, 4 ) = 274 +fallxy ( 154, 5 ) = 274 +fallxy ( 154, 6 ) = 274 +fallxy ( 154, 7 ) = 283 +fallxy ( 154, 8 ) = 283 +xyphendoy1 ( 154, 1 ) = 0 +xyphendoy1 ( 154, 2 ) = 0 +xyphendoy1 ( 154, 3 ) = 0 +xyphendoy1 ( 154, 4 ) = 0 +xyphendoy1 ( 154, 5 ) = 0 +xyphendoy1 ( 154, 6 ) = 0 +xyphendoy1 ( 154, 7 ) = 0 +xyphendoy1 ( 154, 8 ) = 0 + + ! xlat 20.7500000000000 +greenupxy ( 153, 1 ) = 141 +greenupxy ( 153, 2 ) = 146 +greenupxy ( 153, 3 ) = 161 +greenupxy ( 153, 4 ) = 146 +greenupxy ( 153, 5 ) = 146 +greenupxy ( 153, 6 ) = 146 +greenupxy ( 153, 7 ) = 124 +greenupxy ( 153, 8 ) = 124 +fallxy ( 153, 1 ) = 261 +fallxy ( 153, 2 ) = 265 +fallxy ( 153, 3 ) = 276 +fallxy ( 153, 4 ) = 274 +fallxy ( 153, 5 ) = 274 +fallxy ( 153, 6 ) = 274 +fallxy ( 153, 7 ) = 284 +fallxy ( 153, 8 ) = 284 +xyphendoy1 ( 153, 1 ) = 0 +xyphendoy1 ( 153, 2 ) = 0 +xyphendoy1 ( 153, 3 ) = 0 +xyphendoy1 ( 153, 4 ) = 0 +xyphendoy1 ( 153, 5 ) = 0 +xyphendoy1 ( 153, 6 ) = 0 +xyphendoy1 ( 153, 7 ) = 0 +xyphendoy1 ( 153, 8 ) = 0 + + ! xlat 20.2500000000000 +greenupxy ( 152, 1 ) = 141 +greenupxy ( 152, 2 ) = 144 +greenupxy ( 152, 3 ) = 163 +greenupxy ( 152, 4 ) = 149 +greenupxy ( 152, 5 ) = 149 +greenupxy ( 152, 6 ) = 149 +greenupxy ( 152, 7 ) = 125 +greenupxy ( 152, 8 ) = 125 +fallxy ( 152, 1 ) = 262 +fallxy ( 152, 2 ) = 266 +fallxy ( 152, 3 ) = 274 +fallxy ( 152, 4 ) = 273 +fallxy ( 152, 5 ) = 273 +fallxy ( 152, 6 ) = 273 +fallxy ( 152, 7 ) = 285 +fallxy ( 152, 8 ) = 285 +xyphendoy1 ( 152, 1 ) = 0 +xyphendoy1 ( 152, 2 ) = 0 +xyphendoy1 ( 152, 3 ) = 0 +xyphendoy1 ( 152, 4 ) = 0 +xyphendoy1 ( 152, 5 ) = 0 +xyphendoy1 ( 152, 6 ) = 0 +xyphendoy1 ( 152, 7 ) = 0 +xyphendoy1 ( 152, 8 ) = 0 + + ! xlat 19.7500000000000 +greenupxy ( 151, 1 ) = 130 +greenupxy ( 151, 2 ) = 142 +greenupxy ( 151, 3 ) = 166 +greenupxy ( 151, 4 ) = 152 +greenupxy ( 151, 5 ) = 152 +greenupxy ( 151, 6 ) = 152 +greenupxy ( 151, 7 ) = 124 +greenupxy ( 151, 8 ) = 124 +fallxy ( 151, 1 ) = 263 +fallxy ( 151, 2 ) = 267 +fallxy ( 151, 3 ) = 273 +fallxy ( 151, 4 ) = 272 +fallxy ( 151, 5 ) = 272 +fallxy ( 151, 6 ) = 272 +fallxy ( 151, 7 ) = 285 +fallxy ( 151, 8 ) = 285 +xyphendoy1 ( 151, 1 ) = 0 +xyphendoy1 ( 151, 2 ) = 0 +xyphendoy1 ( 151, 3 ) = 0 +xyphendoy1 ( 151, 4 ) = 0 +xyphendoy1 ( 151, 5 ) = 0 +xyphendoy1 ( 151, 6 ) = 0 +xyphendoy1 ( 151, 7 ) = 0 +xyphendoy1 ( 151, 8 ) = 0 + + ! xlat 19.2500000000000 +greenupxy ( 150, 1 ) = 130 +greenupxy ( 150, 2 ) = 140 +greenupxy ( 150, 3 ) = 169 +greenupxy ( 150, 4 ) = 155 +greenupxy ( 150, 5 ) = 155 +greenupxy ( 150, 6 ) = 155 +greenupxy ( 150, 7 ) = 125 +greenupxy ( 150, 8 ) = 125 +fallxy ( 150, 1 ) = 263 +fallxy ( 150, 2 ) = 268 +fallxy ( 150, 3 ) = 273 +fallxy ( 150, 4 ) = 271 +fallxy ( 150, 5 ) = 271 +fallxy ( 150, 6 ) = 271 +fallxy ( 150, 7 ) = 285 +fallxy ( 150, 8 ) = 285 +xyphendoy1 ( 150, 1 ) = 0 +xyphendoy1 ( 150, 2 ) = 0 +xyphendoy1 ( 150, 3 ) = 0 +xyphendoy1 ( 150, 4 ) = 0 +xyphendoy1 ( 150, 5 ) = 0 +xyphendoy1 ( 150, 6 ) = 0 +xyphendoy1 ( 150, 7 ) = 0 +xyphendoy1 ( 150, 8 ) = 0 + + ! xlat 18.7500000000000 +greenupxy ( 149, 1 ) = 123 +greenupxy ( 149, 2 ) = 138 +greenupxy ( 149, 3 ) = 172 +greenupxy ( 149, 4 ) = 158 +greenupxy ( 149, 5 ) = 158 +greenupxy ( 149, 6 ) = 158 +greenupxy ( 149, 7 ) = 128 +greenupxy ( 149, 8 ) = 128 +fallxy ( 149, 1 ) = 263 +fallxy ( 149, 2 ) = 269 +fallxy ( 149, 3 ) = 272 +fallxy ( 149, 4 ) = 270 +fallxy ( 149, 5 ) = 270 +fallxy ( 149, 6 ) = 270 +fallxy ( 149, 7 ) = 285 +fallxy ( 149, 8 ) = 285 +xyphendoy1 ( 149, 1 ) = 0 +xyphendoy1 ( 149, 2 ) = 0 +xyphendoy1 ( 149, 3 ) = 0 +xyphendoy1 ( 149, 4 ) = 0 +xyphendoy1 ( 149, 5 ) = 0 +xyphendoy1 ( 149, 6 ) = 0 +xyphendoy1 ( 149, 7 ) = 0 +xyphendoy1 ( 149, 8 ) = 0 + + ! xlat 18.2500000000000 +greenupxy ( 148, 1 ) = 123 +greenupxy ( 148, 2 ) = 137 +greenupxy ( 148, 3 ) = 175 +greenupxy ( 148, 4 ) = 160 +greenupxy ( 148, 5 ) = 160 +greenupxy ( 148, 6 ) = 160 +greenupxy ( 148, 7 ) = 131 +greenupxy ( 148, 8 ) = 131 +fallxy ( 148, 1 ) = 263 +fallxy ( 148, 2 ) = 269 +fallxy ( 148, 3 ) = 272 +fallxy ( 148, 4 ) = 270 +fallxy ( 148, 5 ) = 270 +fallxy ( 148, 6 ) = 270 +fallxy ( 148, 7 ) = 284 +fallxy ( 148, 8 ) = 284 +xyphendoy1 ( 148, 1 ) = 0 +xyphendoy1 ( 148, 2 ) = 0 +xyphendoy1 ( 148, 3 ) = 0 +xyphendoy1 ( 148, 4 ) = 0 +xyphendoy1 ( 148, 5 ) = 0 +xyphendoy1 ( 148, 6 ) = 0 +xyphendoy1 ( 148, 7 ) = 0 +xyphendoy1 ( 148, 8 ) = 0 + + ! xlat 17.7500000000000 +greenupxy ( 147, 1 ) = 126 +greenupxy ( 147, 2 ) = 138 +greenupxy ( 147, 3 ) = 178 +greenupxy ( 147, 4 ) = 163 +greenupxy ( 147, 5 ) = 163 +greenupxy ( 147, 6 ) = 163 +greenupxy ( 147, 7 ) = 134 +greenupxy ( 147, 8 ) = 134 +fallxy ( 147, 1 ) = 262 +fallxy ( 147, 2 ) = 270 +fallxy ( 147, 3 ) = 271 +fallxy ( 147, 4 ) = 269 +fallxy ( 147, 5 ) = 269 +fallxy ( 147, 6 ) = 269 +fallxy ( 147, 7 ) = 284 +fallxy ( 147, 8 ) = 284 +xyphendoy1 ( 147, 1 ) = 0 +xyphendoy1 ( 147, 2 ) = 0 +xyphendoy1 ( 147, 3 ) = 0 +xyphendoy1 ( 147, 4 ) = 0 +xyphendoy1 ( 147, 5 ) = 0 +xyphendoy1 ( 147, 6 ) = 0 +xyphendoy1 ( 147, 7 ) = 0 +xyphendoy1 ( 147, 8 ) = 0 + + ! xlat 17.2500000000000 +greenupxy ( 146, 1 ) = 126 +greenupxy ( 146, 2 ) = 138 +greenupxy ( 146, 3 ) = 180 +greenupxy ( 146, 4 ) = 165 +greenupxy ( 146, 5 ) = 165 +greenupxy ( 146, 6 ) = 165 +greenupxy ( 146, 7 ) = 135 +greenupxy ( 146, 8 ) = 135 +fallxy ( 146, 1 ) = 265 +fallxy ( 146, 2 ) = 271 +fallxy ( 146, 3 ) = 271 +fallxy ( 146, 4 ) = 269 +fallxy ( 146, 5 ) = 269 +fallxy ( 146, 6 ) = 269 +fallxy ( 146, 7 ) = 283 +fallxy ( 146, 8 ) = 283 +xyphendoy1 ( 146, 1 ) = 0 +xyphendoy1 ( 146, 2 ) = 0 +xyphendoy1 ( 146, 3 ) = 0 +xyphendoy1 ( 146, 4 ) = 0 +xyphendoy1 ( 146, 5 ) = 0 +xyphendoy1 ( 146, 6 ) = 0 +xyphendoy1 ( 146, 7 ) = 0 +xyphendoy1 ( 146, 8 ) = 0 + + ! xlat 16.7500000000000 +greenupxy ( 145, 1 ) = 131 +greenupxy ( 145, 2 ) = 139 +greenupxy ( 145, 3 ) = 183 +greenupxy ( 145, 4 ) = 167 +greenupxy ( 145, 5 ) = 167 +greenupxy ( 145, 6 ) = 167 +greenupxy ( 145, 7 ) = 138 +greenupxy ( 145, 8 ) = 138 +fallxy ( 145, 1 ) = 266 +fallxy ( 145, 2 ) = 271 +fallxy ( 145, 3 ) = 271 +fallxy ( 145, 4 ) = 269 +fallxy ( 145, 5 ) = 269 +fallxy ( 145, 6 ) = 269 +fallxy ( 145, 7 ) = 283 +fallxy ( 145, 8 ) = 283 +xyphendoy1 ( 145, 1 ) = 0 +xyphendoy1 ( 145, 2 ) = 0 +xyphendoy1 ( 145, 3 ) = 0 +xyphendoy1 ( 145, 4 ) = 0 +xyphendoy1 ( 145, 5 ) = 0 +xyphendoy1 ( 145, 6 ) = 0 +xyphendoy1 ( 145, 7 ) = 0 +xyphendoy1 ( 145, 8 ) = 0 + + ! xlat 16.2500000000000 +greenupxy ( 144, 1 ) = 135 +greenupxy ( 144, 2 ) = 140 +greenupxy ( 144, 3 ) = 185 +greenupxy ( 144, 4 ) = 168 +greenupxy ( 144, 5 ) = 168 +greenupxy ( 144, 6 ) = 168 +greenupxy ( 144, 7 ) = 141 +greenupxy ( 144, 8 ) = 141 +fallxy ( 144, 1 ) = 275 +fallxy ( 144, 2 ) = 271 +fallxy ( 144, 3 ) = 271 +fallxy ( 144, 4 ) = 269 +fallxy ( 144, 5 ) = 269 +fallxy ( 144, 6 ) = 269 +fallxy ( 144, 7 ) = 282 +fallxy ( 144, 8 ) = 282 +xyphendoy1 ( 144, 1 ) = 0 +xyphendoy1 ( 144, 2 ) = 0 +xyphendoy1 ( 144, 3 ) = 0 +xyphendoy1 ( 144, 4 ) = 0 +xyphendoy1 ( 144, 5 ) = 0 +xyphendoy1 ( 144, 6 ) = 0 +xyphendoy1 ( 144, 7 ) = 0 +xyphendoy1 ( 144, 8 ) = 0 + + ! xlat 15.7500000000000 +greenupxy ( 143, 1 ) = 137 +greenupxy ( 143, 2 ) = 139 +greenupxy ( 143, 3 ) = 186 +greenupxy ( 143, 4 ) = 169 +greenupxy ( 143, 5 ) = 169 +greenupxy ( 143, 6 ) = 169 +greenupxy ( 143, 7 ) = 144 +greenupxy ( 143, 8 ) = 144 +fallxy ( 143, 1 ) = 277 +fallxy ( 143, 2 ) = 272 +fallxy ( 143, 3 ) = 271 +fallxy ( 143, 4 ) = 269 +fallxy ( 143, 5 ) = 269 +fallxy ( 143, 6 ) = 269 +fallxy ( 143, 7 ) = 281 +fallxy ( 143, 8 ) = 281 +xyphendoy1 ( 143, 1 ) = 0 +xyphendoy1 ( 143, 2 ) = 0 +xyphendoy1 ( 143, 3 ) = 0 +xyphendoy1 ( 143, 4 ) = 0 +xyphendoy1 ( 143, 5 ) = 0 +xyphendoy1 ( 143, 6 ) = 0 +xyphendoy1 ( 143, 7 ) = 0 +xyphendoy1 ( 143, 8 ) = 0 + + ! xlat 15.2500000000000 +greenupxy ( 142, 1 ) = 137 +greenupxy ( 142, 2 ) = 139 +greenupxy ( 142, 3 ) = 187 +greenupxy ( 142, 4 ) = 170 +greenupxy ( 142, 5 ) = 170 +greenupxy ( 142, 6 ) = 170 +greenupxy ( 142, 7 ) = 147 +greenupxy ( 142, 8 ) = 147 +fallxy ( 142, 1 ) = 280 +fallxy ( 142, 2 ) = 272 +fallxy ( 142, 3 ) = 271 +fallxy ( 142, 4 ) = 270 +fallxy ( 142, 5 ) = 270 +fallxy ( 142, 6 ) = 270 +fallxy ( 142, 7 ) = 281 +fallxy ( 142, 8 ) = 281 +xyphendoy1 ( 142, 1 ) = 0 +xyphendoy1 ( 142, 2 ) = 0 +xyphendoy1 ( 142, 3 ) = 0 +xyphendoy1 ( 142, 4 ) = 0 +xyphendoy1 ( 142, 5 ) = 0 +xyphendoy1 ( 142, 6 ) = 0 +xyphendoy1 ( 142, 7 ) = 0 +xyphendoy1 ( 142, 8 ) = 0 + + ! xlat 14.7500000000000 +greenupxy ( 141, 1 ) = 137 +greenupxy ( 141, 2 ) = 139 +greenupxy ( 141, 3 ) = 188 +greenupxy ( 141, 4 ) = 172 +greenupxy ( 141, 5 ) = 172 +greenupxy ( 141, 6 ) = 172 +greenupxy ( 141, 7 ) = 150 +greenupxy ( 141, 8 ) = 150 +fallxy ( 141, 1 ) = 282 +fallxy ( 141, 2 ) = 272 +fallxy ( 141, 3 ) = 271 +fallxy ( 141, 4 ) = 270 +fallxy ( 141, 5 ) = 270 +fallxy ( 141, 6 ) = 270 +fallxy ( 141, 7 ) = 280 +fallxy ( 141, 8 ) = 280 +xyphendoy1 ( 141, 1 ) = 0 +xyphendoy1 ( 141, 2 ) = 0 +xyphendoy1 ( 141, 3 ) = 0 +xyphendoy1 ( 141, 4 ) = 0 +xyphendoy1 ( 141, 5 ) = 0 +xyphendoy1 ( 141, 6 ) = 0 +xyphendoy1 ( 141, 7 ) = 0 +xyphendoy1 ( 141, 8 ) = 0 + + ! xlat 14.2500000000000 +greenupxy ( 140, 1 ) = 135 +greenupxy ( 140, 2 ) = 138 +greenupxy ( 140, 3 ) = 189 +greenupxy ( 140, 4 ) = 173 +greenupxy ( 140, 5 ) = 173 +greenupxy ( 140, 6 ) = 173 +greenupxy ( 140, 7 ) = 154 +greenupxy ( 140, 8 ) = 154 +fallxy ( 140, 1 ) = 283 +fallxy ( 140, 2 ) = 272 +fallxy ( 140, 3 ) = 271 +fallxy ( 140, 4 ) = 269 +fallxy ( 140, 5 ) = 269 +fallxy ( 140, 6 ) = 269 +fallxy ( 140, 7 ) = 279 +fallxy ( 140, 8 ) = 279 +xyphendoy1 ( 140, 1 ) = 0 +xyphendoy1 ( 140, 2 ) = 0 +xyphendoy1 ( 140, 3 ) = 0 +xyphendoy1 ( 140, 4 ) = 0 +xyphendoy1 ( 140, 5 ) = 0 +xyphendoy1 ( 140, 6 ) = 0 +xyphendoy1 ( 140, 7 ) = 0 +xyphendoy1 ( 140, 8 ) = 0 + + ! xlat 13.7500000000000 +greenupxy ( 139, 1 ) = 136 +greenupxy ( 139, 2 ) = 138 +greenupxy ( 139, 3 ) = 189 +greenupxy ( 139, 4 ) = 174 +greenupxy ( 139, 5 ) = 174 +greenupxy ( 139, 6 ) = 174 +greenupxy ( 139, 7 ) = 157 +greenupxy ( 139, 8 ) = 157 +fallxy ( 139, 1 ) = 284 +fallxy ( 139, 2 ) = 272 +fallxy ( 139, 3 ) = 269 +fallxy ( 139, 4 ) = 269 +fallxy ( 139, 5 ) = 269 +fallxy ( 139, 6 ) = 269 +fallxy ( 139, 7 ) = 278 +fallxy ( 139, 8 ) = 278 +xyphendoy1 ( 139, 1 ) = 0 +xyphendoy1 ( 139, 2 ) = 0 +xyphendoy1 ( 139, 3 ) = 0 +xyphendoy1 ( 139, 4 ) = 0 +xyphendoy1 ( 139, 5 ) = 0 +xyphendoy1 ( 139, 6 ) = 0 +xyphendoy1 ( 139, 7 ) = 0 +xyphendoy1 ( 139, 8 ) = 0 + + ! xlat 13.2500000000000 +greenupxy ( 138, 1 ) = 134 +greenupxy ( 138, 2 ) = 138 +greenupxy ( 138, 3 ) = 185 +greenupxy ( 138, 4 ) = 174 +greenupxy ( 138, 5 ) = 174 +greenupxy ( 138, 6 ) = 174 +greenupxy ( 138, 7 ) = 159 +greenupxy ( 138, 8 ) = 159 +fallxy ( 138, 1 ) = 284 +fallxy ( 138, 2 ) = 273 +fallxy ( 138, 3 ) = 268 +fallxy ( 138, 4 ) = 269 +fallxy ( 138, 5 ) = 269 +fallxy ( 138, 6 ) = 269 +fallxy ( 138, 7 ) = 278 +fallxy ( 138, 8 ) = 278 +xyphendoy1 ( 138, 1 ) = 0 +xyphendoy1 ( 138, 2 ) = 0 +xyphendoy1 ( 138, 3 ) = 0 +xyphendoy1 ( 138, 4 ) = 0 +xyphendoy1 ( 138, 5 ) = 0 +xyphendoy1 ( 138, 6 ) = 0 +xyphendoy1 ( 138, 7 ) = 0 +xyphendoy1 ( 138, 8 ) = 0 + + ! xlat 12.7500000000000 +greenupxy ( 137, 1 ) = 134 +greenupxy ( 137, 2 ) = 138 +greenupxy ( 137, 3 ) = 178 +greenupxy ( 137, 4 ) = 173 +greenupxy ( 137, 5 ) = 173 +greenupxy ( 137, 6 ) = 173 +greenupxy ( 137, 7 ) = 163 +greenupxy ( 137, 8 ) = 163 +fallxy ( 137, 1 ) = 284 +fallxy ( 137, 2 ) = 273 +fallxy ( 137, 3 ) = 266 +fallxy ( 137, 4 ) = 269 +fallxy ( 137, 5 ) = 269 +fallxy ( 137, 6 ) = 269 +fallxy ( 137, 7 ) = 278 +fallxy ( 137, 8 ) = 278 +xyphendoy1 ( 137, 1 ) = 0 +xyphendoy1 ( 137, 2 ) = 0 +xyphendoy1 ( 137, 3 ) = 0 +xyphendoy1 ( 137, 4 ) = 0 +xyphendoy1 ( 137, 5 ) = 0 +xyphendoy1 ( 137, 6 ) = 0 +xyphendoy1 ( 137, 7 ) = 0 +xyphendoy1 ( 137, 8 ) = 0 + + ! xlat 12.2500000000000 +greenupxy ( 136, 1 ) = 131 +greenupxy ( 136, 2 ) = 137 +greenupxy ( 136, 3 ) = 176 +greenupxy ( 136, 4 ) = 167 +greenupxy ( 136, 5 ) = 167 +greenupxy ( 136, 6 ) = 167 +greenupxy ( 136, 7 ) = 166 +greenupxy ( 136, 8 ) = 166 +fallxy ( 136, 1 ) = 284 +fallxy ( 136, 2 ) = 273 +fallxy ( 136, 3 ) = 264 +fallxy ( 136, 4 ) = 268 +fallxy ( 136, 5 ) = 268 +fallxy ( 136, 6 ) = 268 +fallxy ( 136, 7 ) = 278 +fallxy ( 136, 8 ) = 278 +xyphendoy1 ( 136, 1 ) = 0 +xyphendoy1 ( 136, 2 ) = 0 +xyphendoy1 ( 136, 3 ) = 0 +xyphendoy1 ( 136, 4 ) = 0 +xyphendoy1 ( 136, 5 ) = 0 +xyphendoy1 ( 136, 6 ) = 0 +xyphendoy1 ( 136, 7 ) = 0 +xyphendoy1 ( 136, 8 ) = 0 + + ! xlat 11.7500000000000 +greenupxy ( 135, 1 ) = 130 +greenupxy ( 135, 2 ) = 136 +greenupxy ( 135, 3 ) = 176 +greenupxy ( 135, 4 ) = 161 +greenupxy ( 135, 5 ) = 161 +greenupxy ( 135, 6 ) = 161 +greenupxy ( 135, 7 ) = 169 +greenupxy ( 135, 8 ) = 169 +fallxy ( 135, 1 ) = 284 +fallxy ( 135, 2 ) = 274 +fallxy ( 135, 3 ) = 263 +fallxy ( 135, 4 ) = 267 +fallxy ( 135, 5 ) = 267 +fallxy ( 135, 6 ) = 267 +fallxy ( 135, 7 ) = 277 +fallxy ( 135, 8 ) = 277 +xyphendoy1 ( 135, 1 ) = 0 +xyphendoy1 ( 135, 2 ) = 0 +xyphendoy1 ( 135, 3 ) = 0 +xyphendoy1 ( 135, 4 ) = 0 +xyphendoy1 ( 135, 5 ) = 0 +xyphendoy1 ( 135, 6 ) = 0 +xyphendoy1 ( 135, 7 ) = 0 +xyphendoy1 ( 135, 8 ) = 0 + + ! xlat 11.2500000000000 +greenupxy ( 134, 1 ) = 138 +greenupxy ( 134, 2 ) = 134 +greenupxy ( 134, 3 ) = 174 +greenupxy ( 134, 4 ) = 154 +greenupxy ( 134, 5 ) = 154 +greenupxy ( 134, 6 ) = 154 +greenupxy ( 134, 7 ) = 171 +greenupxy ( 134, 8 ) = 171 +fallxy ( 134, 1 ) = 287 +fallxy ( 134, 2 ) = 274 +fallxy ( 134, 3 ) = 263 +fallxy ( 134, 4 ) = 268 +fallxy ( 134, 5 ) = 268 +fallxy ( 134, 6 ) = 268 +fallxy ( 134, 7 ) = 277 +fallxy ( 134, 8 ) = 277 +xyphendoy1 ( 134, 1 ) = 0 +xyphendoy1 ( 134, 2 ) = 0 +xyphendoy1 ( 134, 3 ) = 0 +xyphendoy1 ( 134, 4 ) = 0 +xyphendoy1 ( 134, 5 ) = 0 +xyphendoy1 ( 134, 6 ) = 0 +xyphendoy1 ( 134, 7 ) = 0 +xyphendoy1 ( 134, 8 ) = 0 + + ! xlat 10.7500000000000 +greenupxy ( 133, 1 ) = 135 +greenupxy ( 133, 2 ) = 132 +greenupxy ( 133, 3 ) = 172 +greenupxy ( 133, 4 ) = 147 +greenupxy ( 133, 5 ) = 147 +greenupxy ( 133, 6 ) = 147 +greenupxy ( 133, 7 ) = 169 +greenupxy ( 133, 8 ) = 169 +fallxy ( 133, 1 ) = 286 +fallxy ( 133, 2 ) = 273 +fallxy ( 133, 3 ) = 263 +fallxy ( 133, 4 ) = 268 +fallxy ( 133, 5 ) = 268 +fallxy ( 133, 6 ) = 268 +fallxy ( 133, 7 ) = 276 +fallxy ( 133, 8 ) = 276 +xyphendoy1 ( 133, 1 ) = 0 +xyphendoy1 ( 133, 2 ) = 0 +xyphendoy1 ( 133, 3 ) = 0 +xyphendoy1 ( 133, 4 ) = 0 +xyphendoy1 ( 133, 5 ) = 0 +xyphendoy1 ( 133, 6 ) = 0 +xyphendoy1 ( 133, 7 ) = 0 +xyphendoy1 ( 133, 8 ) = 0 + + ! xlat 10.2500000000000 +greenupxy ( 132, 1 ) = 137 +greenupxy ( 132, 2 ) = 128 +greenupxy ( 132, 3 ) = 158 +greenupxy ( 132, 4 ) = 139 +greenupxy ( 132, 5 ) = 139 +greenupxy ( 132, 6 ) = 139 +greenupxy ( 132, 7 ) = 165 +greenupxy ( 132, 8 ) = 165 +fallxy ( 132, 1 ) = 286 +fallxy ( 132, 2 ) = 273 +fallxy ( 132, 3 ) = 249 +fallxy ( 132, 4 ) = 268 +fallxy ( 132, 5 ) = 268 +fallxy ( 132, 6 ) = 268 +fallxy ( 132, 7 ) = 274 +fallxy ( 132, 8 ) = 274 +xyphendoy1 ( 132, 1 ) = 0 +xyphendoy1 ( 132, 2 ) = 0 +xyphendoy1 ( 132, 3 ) = 0 +xyphendoy1 ( 132, 4 ) = 0 +xyphendoy1 ( 132, 5 ) = 0 +xyphendoy1 ( 132, 6 ) = 0 +xyphendoy1 ( 132, 7 ) = 0 +xyphendoy1 ( 132, 8 ) = 0 + + ! xlat 9.75000000000000 +greenupxy ( 131, 1 ) = 129 +greenupxy ( 131, 2 ) = 123 +greenupxy ( 131, 3 ) = 145 +greenupxy ( 131, 4 ) = 133 +greenupxy ( 131, 5 ) = 133 +greenupxy ( 131, 6 ) = 133 +greenupxy ( 131, 7 ) = 158 +greenupxy ( 131, 8 ) = 158 +fallxy ( 131, 1 ) = 286 +fallxy ( 131, 2 ) = 272 +fallxy ( 131, 3 ) = 235 +fallxy ( 131, 4 ) = 268 +fallxy ( 131, 5 ) = 268 +fallxy ( 131, 6 ) = 268 +fallxy ( 131, 7 ) = 273 +fallxy ( 131, 8 ) = 273 +xyphendoy1 ( 131, 1 ) = 0 +xyphendoy1 ( 131, 2 ) = 0 +xyphendoy1 ( 131, 3 ) = 0 +xyphendoy1 ( 131, 4 ) = 0 +xyphendoy1 ( 131, 5 ) = 0 +xyphendoy1 ( 131, 6 ) = 0 +xyphendoy1 ( 131, 7 ) = 0 +xyphendoy1 ( 131, 8 ) = 0 + + ! xlat 9.25000000000000 +greenupxy ( 130, 1 ) = 122 +greenupxy ( 130, 2 ) = 118 +greenupxy ( 130, 3 ) = 132 +greenupxy ( 130, 4 ) = 126 +greenupxy ( 130, 5 ) = 126 +greenupxy ( 130, 6 ) = 126 +greenupxy ( 130, 7 ) = 152 +greenupxy ( 130, 8 ) = 152 +fallxy ( 130, 1 ) = 285 +fallxy ( 130, 2 ) = 272 +fallxy ( 130, 3 ) = 220 +fallxy ( 130, 4 ) = 268 +fallxy ( 130, 5 ) = 268 +fallxy ( 130, 6 ) = 268 +fallxy ( 130, 7 ) = 274 +fallxy ( 130, 8 ) = 274 +xyphendoy1 ( 130, 1 ) = 0 +xyphendoy1 ( 130, 2 ) = 0 +xyphendoy1 ( 130, 3 ) = 0 +xyphendoy1 ( 130, 4 ) = 0 +xyphendoy1 ( 130, 5 ) = 0 +xyphendoy1 ( 130, 6 ) = 0 +xyphendoy1 ( 130, 7 ) = 0 +xyphendoy1 ( 130, 8 ) = 0 + + ! xlat 8.75000000000000 +greenupxy ( 129, 1 ) = 122 +greenupxy ( 129, 2 ) = 112 +greenupxy ( 129, 3 ) = 127 +greenupxy ( 129, 4 ) = 119 +greenupxy ( 129, 5 ) = 119 +greenupxy ( 129, 6 ) = 119 +greenupxy ( 129, 7 ) = 145 +greenupxy ( 129, 8 ) = 145 +fallxy ( 129, 1 ) = 285 +fallxy ( 129, 2 ) = 272 +fallxy ( 129, 3 ) = 218 +fallxy ( 129, 4 ) = 268 +fallxy ( 129, 5 ) = 268 +fallxy ( 129, 6 ) = 268 +fallxy ( 129, 7 ) = 273 +fallxy ( 129, 8 ) = 273 +xyphendoy1 ( 129, 1 ) = 0 +xyphendoy1 ( 129, 2 ) = 0 +xyphendoy1 ( 129, 3 ) = 0 +xyphendoy1 ( 129, 4 ) = 0 +xyphendoy1 ( 129, 5 ) = 0 +xyphendoy1 ( 129, 6 ) = 0 +xyphendoy1 ( 129, 7 ) = 0 +xyphendoy1 ( 129, 8 ) = 0 + + ! xlat 8.25000000000000 +greenupxy ( 128, 1 ) = 116 +greenupxy ( 128, 2 ) = 108 +greenupxy ( 128, 3 ) = 114 +greenupxy ( 128, 4 ) = 111 +greenupxy ( 128, 5 ) = 111 +greenupxy ( 128, 6 ) = 111 +greenupxy ( 128, 7 ) = 134 +greenupxy ( 128, 8 ) = 134 +fallxy ( 128, 1 ) = 285 +fallxy ( 128, 2 ) = 271 +fallxy ( 128, 3 ) = 205 +fallxy ( 128, 4 ) = 268 +fallxy ( 128, 5 ) = 268 +fallxy ( 128, 6 ) = 268 +fallxy ( 128, 7 ) = 272 +fallxy ( 128, 8 ) = 272 +xyphendoy1 ( 128, 1 ) = 0 +xyphendoy1 ( 128, 2 ) = 0 +xyphendoy1 ( 128, 3 ) = 0 +xyphendoy1 ( 128, 4 ) = 0 +xyphendoy1 ( 128, 5 ) = 0 +xyphendoy1 ( 128, 6 ) = 0 +xyphendoy1 ( 128, 7 ) = 0 +xyphendoy1 ( 128, 8 ) = 0 + + ! xlat 7.75000000000000 +greenupxy ( 127, 1 ) = 114 +greenupxy ( 127, 2 ) = 103 +greenupxy ( 127, 3 ) = 102 +greenupxy ( 127, 4 ) = 102 +greenupxy ( 127, 5 ) = 102 +greenupxy ( 127, 6 ) = 102 +greenupxy ( 127, 7 ) = 129 +greenupxy ( 127, 8 ) = 129 +fallxy ( 127, 1 ) = 286 +fallxy ( 127, 2 ) = 271 +fallxy ( 127, 3 ) = 191 +fallxy ( 127, 4 ) = 267 +fallxy ( 127, 5 ) = 267 +fallxy ( 127, 6 ) = 267 +fallxy ( 127, 7 ) = 272 +fallxy ( 127, 8 ) = 272 +xyphendoy1 ( 127, 1 ) = 0 +xyphendoy1 ( 127, 2 ) = 0 +xyphendoy1 ( 127, 3 ) = 0 +xyphendoy1 ( 127, 4 ) = 0 +xyphendoy1 ( 127, 5 ) = 0 +xyphendoy1 ( 127, 6 ) = 0 +xyphendoy1 ( 127, 7 ) = 0 +xyphendoy1 ( 127, 8 ) = 0 + + ! xlat 7.25000000000000 +greenupxy ( 126, 1 ) = 110 +greenupxy ( 126, 2 ) = 100 +greenupxy ( 126, 3 ) = 90 +greenupxy ( 126, 4 ) = 93 +greenupxy ( 126, 5 ) = 93 +greenupxy ( 126, 6 ) = 93 +greenupxy ( 126, 7 ) = 124 +greenupxy ( 126, 8 ) = 124 +fallxy ( 126, 1 ) = 286 +fallxy ( 126, 2 ) = 271 +fallxy ( 126, 3 ) = 185 +fallxy ( 126, 4 ) = 267 +fallxy ( 126, 5 ) = 267 +fallxy ( 126, 6 ) = 267 +fallxy ( 126, 7 ) = 269 +fallxy ( 126, 8 ) = 269 +xyphendoy1 ( 126, 1 ) = 0 +xyphendoy1 ( 126, 2 ) = 0 +xyphendoy1 ( 126, 3 ) = 0 +xyphendoy1 ( 126, 4 ) = 0 +xyphendoy1 ( 126, 5 ) = 0 +xyphendoy1 ( 126, 6 ) = 0 +xyphendoy1 ( 126, 7 ) = 0 +xyphendoy1 ( 126, 8 ) = 0 + + ! xlat 6.75000000000000 +greenupxy ( 125, 1 ) = 107 +greenupxy ( 125, 2 ) = 96 +greenupxy ( 125, 3 ) = 79 +greenupxy ( 125, 4 ) = 85 +greenupxy ( 125, 5 ) = 85 +greenupxy ( 125, 6 ) = 85 +greenupxy ( 125, 7 ) = 119 +greenupxy ( 125, 8 ) = 119 +fallxy ( 125, 1 ) = 284 +fallxy ( 125, 2 ) = 271 +fallxy ( 125, 3 ) = 178 +fallxy ( 125, 4 ) = 267 +fallxy ( 125, 5 ) = 267 +fallxy ( 125, 6 ) = 267 +fallxy ( 125, 7 ) = 270 +fallxy ( 125, 8 ) = 270 +xyphendoy1 ( 125, 1 ) = 0 +xyphendoy1 ( 125, 2 ) = 0 +xyphendoy1 ( 125, 3 ) = 0 +xyphendoy1 ( 125, 4 ) = 0 +xyphendoy1 ( 125, 5 ) = 0 +xyphendoy1 ( 125, 6 ) = 0 +xyphendoy1 ( 125, 7 ) = 0 +xyphendoy1 ( 125, 8 ) = 0 + + ! xlat 6.25000000000000 +greenupxy ( 124, 1 ) = 103 +greenupxy ( 124, 2 ) = 93 +greenupxy ( 124, 3 ) = 70 +greenupxy ( 124, 4 ) = 80 +greenupxy ( 124, 5 ) = 80 +greenupxy ( 124, 6 ) = 80 +greenupxy ( 124, 7 ) = 115 +greenupxy ( 124, 8 ) = 115 +fallxy ( 124, 1 ) = 283 +fallxy ( 124, 2 ) = 272 +fallxy ( 124, 3 ) = 162 +fallxy ( 124, 4 ) = 266 +fallxy ( 124, 5 ) = 266 +fallxy ( 124, 6 ) = 266 +fallxy ( 124, 7 ) = 271 +fallxy ( 124, 8 ) = 271 +xyphendoy1 ( 124, 1 ) = 0 +xyphendoy1 ( 124, 2 ) = 0 +xyphendoy1 ( 124, 3 ) = 0 +xyphendoy1 ( 124, 4 ) = 0 +xyphendoy1 ( 124, 5 ) = 0 +xyphendoy1 ( 124, 6 ) = 0 +xyphendoy1 ( 124, 7 ) = 0 +xyphendoy1 ( 124, 8 ) = 0 + + ! xlat 5.75000000000000 +greenupxy ( 123, 1 ) = 102 +greenupxy ( 123, 2 ) = 91 +greenupxy ( 123, 3 ) = 62 +greenupxy ( 123, 4 ) = 75 +greenupxy ( 123, 5 ) = 75 +greenupxy ( 123, 6 ) = 75 +greenupxy ( 123, 7 ) = 110 +greenupxy ( 123, 8 ) = 110 +fallxy ( 123, 1 ) = 278 +fallxy ( 123, 2 ) = 272 +fallxy ( 123, 3 ) = 148 +fallxy ( 123, 4 ) = 266 +fallxy ( 123, 5 ) = 266 +fallxy ( 123, 6 ) = 266 +fallxy ( 123, 7 ) = 272 +fallxy ( 123, 8 ) = 272 +xyphendoy1 ( 123, 1 ) = 0 +xyphendoy1 ( 123, 2 ) = 0 +xyphendoy1 ( 123, 3 ) = 0 +xyphendoy1 ( 123, 4 ) = 0 +xyphendoy1 ( 123, 5 ) = 0 +xyphendoy1 ( 123, 6 ) = 0 +xyphendoy1 ( 123, 7 ) = 0 +xyphendoy1 ( 123, 8 ) = 0 + + ! xlat 5.25000000000000 +greenupxy ( 122, 1 ) = 96 +greenupxy ( 122, 2 ) = 88 +greenupxy ( 122, 3 ) = 52 +greenupxy ( 122, 4 ) = 69 +greenupxy ( 122, 5 ) = 69 +greenupxy ( 122, 6 ) = 69 +greenupxy ( 122, 7 ) = 105 +greenupxy ( 122, 8 ) = 105 +fallxy ( 122, 1 ) = 276 +fallxy ( 122, 2 ) = 269 +fallxy ( 122, 3 ) = 133 +fallxy ( 122, 4 ) = 265 +fallxy ( 122, 5 ) = 265 +fallxy ( 122, 6 ) = 265 +fallxy ( 122, 7 ) = 271 +fallxy ( 122, 8 ) = 271 +xyphendoy1 ( 122, 1 ) = 0 +xyphendoy1 ( 122, 2 ) = 0 +xyphendoy1 ( 122, 3 ) = 0 +xyphendoy1 ( 122, 4 ) = 0 +xyphendoy1 ( 122, 5 ) = 0 +xyphendoy1 ( 122, 6 ) = 0 +xyphendoy1 ( 122, 7 ) = 0 +xyphendoy1 ( 122, 8 ) = 0 + + ! xlat 4.75000000000000 +greenupxy ( 121, 1 ) = 93 +greenupxy ( 121, 2 ) = 84 +greenupxy ( 121, 3 ) = 41 +greenupxy ( 121, 4 ) = 61 +greenupxy ( 121, 5 ) = 61 +greenupxy ( 121, 6 ) = 61 +greenupxy ( 121, 7 ) = 96 +greenupxy ( 121, 8 ) = 96 +fallxy ( 121, 1 ) = 276 +fallxy ( 121, 2 ) = 267 +fallxy ( 121, 3 ) = 117 +fallxy ( 121, 4 ) = 265 +fallxy ( 121, 5 ) = 265 +fallxy ( 121, 6 ) = 265 +fallxy ( 121, 7 ) = 269 +fallxy ( 121, 8 ) = 269 +xyphendoy1 ( 121, 1 ) = 0 +xyphendoy1 ( 121, 2 ) = 0 +xyphendoy1 ( 121, 3 ) = 0 +xyphendoy1 ( 121, 4 ) = 0 +xyphendoy1 ( 121, 5 ) = 0 +xyphendoy1 ( 121, 6 ) = 0 +xyphendoy1 ( 121, 7 ) = 0 +xyphendoy1 ( 121, 8 ) = 0 + + ! xlat 4.25000000000000 +greenupxy ( 120, 1 ) = 93 +greenupxy ( 120, 2 ) = 71 +greenupxy ( 120, 3 ) = 34 +greenupxy ( 120, 4 ) = 55 +greenupxy ( 120, 5 ) = 55 +greenupxy ( 120, 6 ) = 55 +greenupxy ( 120, 7 ) = 85 +greenupxy ( 120, 8 ) = 85 +fallxy ( 120, 1 ) = 276 +fallxy ( 120, 2 ) = 266 +fallxy ( 120, 3 ) = 102 +fallxy ( 120, 4 ) = 264 +fallxy ( 120, 5 ) = 264 +fallxy ( 120, 6 ) = 264 +fallxy ( 120, 7 ) = 267 +fallxy ( 120, 8 ) = 267 +xyphendoy1 ( 120, 1 ) = 0 +xyphendoy1 ( 120, 2 ) = 0 +xyphendoy1 ( 120, 3 ) = 0 +xyphendoy1 ( 120, 4 ) = 0 +xyphendoy1 ( 120, 5 ) = 0 +xyphendoy1 ( 120, 6 ) = 0 +xyphendoy1 ( 120, 7 ) = 0 +xyphendoy1 ( 120, 8 ) = 0 + + ! xlat 3.75000000000000 +greenupxy ( 119, 1 ) = 90 +greenupxy ( 119, 2 ) = 58 +greenupxy ( 119, 3 ) = 32 +greenupxy ( 119, 4 ) = 48 +greenupxy ( 119, 5 ) = 48 +greenupxy ( 119, 6 ) = 48 +greenupxy ( 119, 7 ) = 79 +greenupxy ( 119, 8 ) = 79 +fallxy ( 119, 1 ) = 259 +fallxy ( 119, 2 ) = 266 +fallxy ( 119, 3 ) = 87 +fallxy ( 119, 4 ) = 265 +fallxy ( 119, 5 ) = 265 +fallxy ( 119, 6 ) = 265 +fallxy ( 119, 7 ) = 267 +fallxy ( 119, 8 ) = 267 +xyphendoy1 ( 119, 1 ) = 0 +xyphendoy1 ( 119, 2 ) = 0 +xyphendoy1 ( 119, 3 ) = 0 +xyphendoy1 ( 119, 4 ) = 0 +xyphendoy1 ( 119, 5 ) = 0 +xyphendoy1 ( 119, 6 ) = 0 +xyphendoy1 ( 119, 7 ) = 0 +xyphendoy1 ( 119, 8 ) = 0 + + ! xlat 3.25000000000000 +greenupxy ( 118, 1 ) = 90 +greenupxy ( 118, 2 ) = 51 +greenupxy ( 118, 3 ) = 13 +greenupxy ( 118, 4 ) = 38 +greenupxy ( 118, 5 ) = 38 +greenupxy ( 118, 6 ) = 38 +greenupxy ( 118, 7 ) = 67 +greenupxy ( 118, 8 ) = 67 +fallxy ( 118, 1 ) = 259 +fallxy ( 118, 2 ) = 264 +fallxy ( 118, 3 ) = 84 +fallxy ( 118, 4 ) = 265 +fallxy ( 118, 5 ) = 265 +fallxy ( 118, 6 ) = 265 +fallxy ( 118, 7 ) = 266 +fallxy ( 118, 8 ) = 266 +xyphendoy1 ( 118, 1 ) = 0 +xyphendoy1 ( 118, 2 ) = 0 +xyphendoy1 ( 118, 3 ) = 0 +xyphendoy1 ( 118, 4 ) = 0 +xyphendoy1 ( 118, 5 ) = 0 +xyphendoy1 ( 118, 6 ) = 0 +xyphendoy1 ( 118, 7 ) = 0 +xyphendoy1 ( 118, 8 ) = 0 + + ! xlat 2.75000000000000 +greenupxy ( 117, 1 ) = 81 +greenupxy ( 117, 2 ) = 42 +greenupxy ( 117, 3 ) = 8 +greenupxy ( 117, 4 ) = 34 +greenupxy ( 117, 5 ) = 34 +greenupxy ( 117, 6 ) = 34 +greenupxy ( 117, 7 ) = 57 +greenupxy ( 117, 8 ) = 57 +fallxy ( 117, 1 ) = 251 +fallxy ( 117, 2 ) = 253 +fallxy ( 117, 3 ) = 83 +fallxy ( 117, 4 ) = 241 +fallxy ( 117, 5 ) = 241 +fallxy ( 117, 6 ) = 241 +fallxy ( 117, 7 ) = 258 +fallxy ( 117, 8 ) = 258 +xyphendoy1 ( 117, 1 ) = 0 +xyphendoy1 ( 117, 2 ) = 0 +xyphendoy1 ( 117, 3 ) = 0 +xyphendoy1 ( 117, 4 ) = 0 +xyphendoy1 ( 117, 5 ) = 0 +xyphendoy1 ( 117, 6 ) = 0 +xyphendoy1 ( 117, 7 ) = 0 +xyphendoy1 ( 117, 8 ) = 0 + + ! xlat 2.25000000000000 +greenupxy ( 116, 1 ) = 67 +greenupxy ( 116, 2 ) = 35 +greenupxy ( 116, 3 ) = 3 +greenupxy ( 116, 4 ) = 26 +greenupxy ( 116, 5 ) = 26 +greenupxy ( 116, 6 ) = 26 +greenupxy ( 116, 7 ) = 48 +greenupxy ( 116, 8 ) = 48 +fallxy ( 116, 1 ) = 245 +fallxy ( 116, 2 ) = 240 +fallxy ( 116, 3 ) = 88 +fallxy ( 116, 4 ) = 226 +fallxy ( 116, 5 ) = 226 +fallxy ( 116, 6 ) = 226 +fallxy ( 116, 7 ) = 249 +fallxy ( 116, 8 ) = 249 +xyphendoy1 ( 116, 1 ) = 0 +xyphendoy1 ( 116, 2 ) = 0 +xyphendoy1 ( 116, 3 ) = 0 +xyphendoy1 ( 116, 4 ) = 0 +xyphendoy1 ( 116, 5 ) = 0 +xyphendoy1 ( 116, 6 ) = 0 +xyphendoy1 ( 116, 7 ) = 0 +xyphendoy1 ( 116, 8 ) = 0 + + ! xlat 1.75000000000000 +greenupxy ( 115, 1 ) = 51 +greenupxy ( 115, 2 ) = 24 +greenupxy ( 115, 3 ) = 363 +greenupxy ( 115, 4 ) = 19 +greenupxy ( 115, 5 ) = 19 +greenupxy ( 115, 6 ) = 19 +greenupxy ( 115, 7 ) = 38 +greenupxy ( 115, 8 ) = 38 +fallxy ( 115, 1 ) = 231 +fallxy ( 115, 2 ) = 226 +fallxy ( 115, 3 ) = 87 +fallxy ( 115, 4 ) = 210 +fallxy ( 115, 5 ) = 210 +fallxy ( 115, 6 ) = 210 +fallxy ( 115, 7 ) = 242 +fallxy ( 115, 8 ) = 242 +xyphendoy1 ( 115, 1 ) = 0 +xyphendoy1 ( 115, 2 ) = 0 +xyphendoy1 ( 115, 3 ) = 2 +xyphendoy1 ( 115, 4 ) = 0 +xyphendoy1 ( 115, 5 ) = 0 +xyphendoy1 ( 115, 6 ) = 0 +xyphendoy1 ( 115, 7 ) = 0 +xyphendoy1 ( 115, 8 ) = 0 + + ! xlat 1.25000000000000 +greenupxy ( 114, 1 ) = 58 +greenupxy ( 114, 2 ) = 15 +greenupxy ( 114, 3 ) = 360 +greenupxy ( 114, 4 ) = 10 +greenupxy ( 114, 5 ) = 10 +greenupxy ( 114, 6 ) = 10 +greenupxy ( 114, 7 ) = 30 +greenupxy ( 114, 8 ) = 30 +fallxy ( 114, 1 ) = 231 +fallxy ( 114, 2 ) = 211 +fallxy ( 114, 3 ) = 91 +fallxy ( 114, 4 ) = 194 +fallxy ( 114, 5 ) = 194 +fallxy ( 114, 6 ) = 194 +fallxy ( 114, 7 ) = 233 +fallxy ( 114, 8 ) = 233 +xyphendoy1 ( 114, 1 ) = 0 +xyphendoy1 ( 114, 2 ) = 0 +xyphendoy1 ( 114, 3 ) = 2 +xyphendoy1 ( 114, 4 ) = 0 +xyphendoy1 ( 114, 5 ) = 0 +xyphendoy1 ( 114, 6 ) = 0 +xyphendoy1 ( 114, 7 ) = 0 +xyphendoy1 ( 114, 8 ) = 0 + + ! xlat 0.750000000000000 +greenupxy ( 113, 1 ) = 67 +greenupxy ( 113, 2 ) = 5 +greenupxy ( 113, 3 ) = 358 +greenupxy ( 113, 4 ) = 4 +greenupxy ( 113, 5 ) = 4 +greenupxy ( 113, 6 ) = 4 +greenupxy ( 113, 7 ) = 21 +greenupxy ( 113, 8 ) = 21 +fallxy ( 113, 1 ) = 207 +fallxy ( 113, 2 ) = 196 +fallxy ( 113, 3 ) = 95 +fallxy ( 113, 4 ) = 176 +fallxy ( 113, 5 ) = 176 +fallxy ( 113, 6 ) = 176 +fallxy ( 113, 7 ) = 222 +fallxy ( 113, 8 ) = 222 +xyphendoy1 ( 113, 1 ) = 0 +xyphendoy1 ( 113, 2 ) = 0 +xyphendoy1 ( 113, 3 ) = 2 +xyphendoy1 ( 113, 4 ) = 0 +xyphendoy1 ( 113, 5 ) = 0 +xyphendoy1 ( 113, 6 ) = 0 +xyphendoy1 ( 113, 7 ) = 0 +xyphendoy1 ( 113, 8 ) = 0 + + ! xlat 0.250000000000000 +greenupxy ( 112, 1 ) = 67 +greenupxy ( 112, 2 ) = 365 +greenupxy ( 112, 3 ) = 357 +greenupxy ( 112, 4 ) = 364 +greenupxy ( 112, 5 ) = 364 +greenupxy ( 112, 6 ) = 364 +greenupxy ( 112, 7 ) = 15 +greenupxy ( 112, 8 ) = 15 +fallxy ( 112, 1 ) = 207 +fallxy ( 112, 2 ) = 179 +fallxy ( 112, 3 ) = 85 +fallxy ( 112, 4 ) = 157 +fallxy ( 112, 5 ) = 157 +fallxy ( 112, 6 ) = 157 +fallxy ( 112, 7 ) = 213 +fallxy ( 112, 8 ) = 213 +xyphendoy1 ( 112, 1 ) = 0 +xyphendoy1 ( 112, 2 ) = 2 +xyphendoy1 ( 112, 3 ) = 2 +xyphendoy1 ( 112, 4 ) = 2 +xyphendoy1 ( 112, 5 ) = 2 +xyphendoy1 ( 112, 6 ) = 2 +xyphendoy1 ( 112, 7 ) = 0 +xyphendoy1 ( 112, 8 ) = 0 + + ! xlat -0.250000000000000 +greenupxy ( 111, 1 ) = 67 +greenupxy ( 111, 2 ) = 359 +greenupxy ( 111, 3 ) = 355 +greenupxy ( 111, 4 ) = 360 +greenupxy ( 111, 5 ) = 360 +greenupxy ( 111, 6 ) = 360 +greenupxy ( 111, 7 ) = 13 +greenupxy ( 111, 8 ) = 13 +fallxy ( 111, 1 ) = 207 +fallxy ( 111, 2 ) = 164 +fallxy ( 111, 3 ) = 86 +fallxy ( 111, 4 ) = 140 +fallxy ( 111, 5 ) = 140 +fallxy ( 111, 6 ) = 140 +fallxy ( 111, 7 ) = 202 +fallxy ( 111, 8 ) = 202 +xyphendoy1 ( 111, 1 ) = 0 +xyphendoy1 ( 111, 2 ) = 2 +xyphendoy1 ( 111, 3 ) = 2 +xyphendoy1 ( 111, 4 ) = 2 +xyphendoy1 ( 111, 5 ) = 2 +xyphendoy1 ( 111, 6 ) = 2 +xyphendoy1 ( 111, 7 ) = 0 +xyphendoy1 ( 111, 8 ) = 0 + + ! xlat -0.750000000000000 +greenupxy ( 110, 1 ) = 67 +greenupxy ( 110, 2 ) = 345 +greenupxy ( 110, 3 ) = 353 +greenupxy ( 110, 4 ) = 358 +greenupxy ( 110, 5 ) = 358 +greenupxy ( 110, 6 ) = 358 +greenupxy ( 110, 7 ) = 5 +greenupxy ( 110, 8 ) = 5 +fallxy ( 110, 1 ) = 207 +fallxy ( 110, 2 ) = 148 +fallxy ( 110, 3 ) = 90 +fallxy ( 110, 4 ) = 124 +fallxy ( 110, 5 ) = 124 +fallxy ( 110, 6 ) = 124 +fallxy ( 110, 7 ) = 192 +fallxy ( 110, 8 ) = 192 +xyphendoy1 ( 110, 1 ) = 0 +xyphendoy1 ( 110, 2 ) = 2 +xyphendoy1 ( 110, 3 ) = 2 +xyphendoy1 ( 110, 4 ) = 2 +xyphendoy1 ( 110, 5 ) = 2 +xyphendoy1 ( 110, 6 ) = 2 +xyphendoy1 ( 110, 7 ) = 0 +xyphendoy1 ( 110, 8 ) = 0 + + ! xlat -1.25000000000000 +greenupxy ( 109, 1 ) = 67 +greenupxy ( 109, 2 ) = 329 +greenupxy ( 109, 3 ) = 353 +greenupxy ( 109, 4 ) = 356 +greenupxy ( 109, 5 ) = 356 +greenupxy ( 109, 6 ) = 356 +greenupxy ( 109, 7 ) = 363 +greenupxy ( 109, 8 ) = 363 +fallxy ( 109, 1 ) = 207 +fallxy ( 109, 2 ) = 143 +fallxy ( 109, 3 ) = 93 +fallxy ( 109, 4 ) = 124 +fallxy ( 109, 5 ) = 124 +fallxy ( 109, 6 ) = 124 +fallxy ( 109, 7 ) = 187 +fallxy ( 109, 8 ) = 187 +xyphendoy1 ( 109, 1 ) = 0 +xyphendoy1 ( 109, 2 ) = 2 +xyphendoy1 ( 109, 3 ) = 2 +xyphendoy1 ( 109, 4 ) = 2 +xyphendoy1 ( 109, 5 ) = 2 +xyphendoy1 ( 109, 6 ) = 2 +xyphendoy1 ( 109, 7 ) = 2 +xyphendoy1 ( 109, 8 ) = 2 + + ! xlat -1.75000000000000 +greenupxy ( 108, 1 ) = 48 +greenupxy ( 108, 2 ) = 314 +greenupxy ( 108, 3 ) = 353 +greenupxy ( 108, 4 ) = 355 +greenupxy ( 108, 5 ) = 355 +greenupxy ( 108, 6 ) = 355 +greenupxy ( 108, 7 ) = 354 +greenupxy ( 108, 8 ) = 354 +fallxy ( 108, 1 ) = 187 +fallxy ( 108, 2 ) = 139 +fallxy ( 108, 3 ) = 95 +fallxy ( 108, 4 ) = 124 +fallxy ( 108, 5 ) = 124 +fallxy ( 108, 6 ) = 124 +fallxy ( 108, 7 ) = 177 +fallxy ( 108, 8 ) = 177 +xyphendoy1 ( 108, 1 ) = 0 +xyphendoy1 ( 108, 2 ) = 2 +xyphendoy1 ( 108, 3 ) = 2 +xyphendoy1 ( 108, 4 ) = 2 +xyphendoy1 ( 108, 5 ) = 2 +xyphendoy1 ( 108, 6 ) = 2 +xyphendoy1 ( 108, 7 ) = 2 +xyphendoy1 ( 108, 8 ) = 2 + + ! xlat -2.25000000000000 +greenupxy ( 107, 1 ) = 48 +greenupxy ( 107, 2 ) = 297 +greenupxy ( 107, 3 ) = 351 +greenupxy ( 107, 4 ) = 355 +greenupxy ( 107, 5 ) = 355 +greenupxy ( 107, 6 ) = 355 +greenupxy ( 107, 7 ) = 345 +greenupxy ( 107, 8 ) = 345 +fallxy ( 107, 1 ) = 187 +fallxy ( 107, 2 ) = 135 +fallxy ( 107, 3 ) = 97 +fallxy ( 107, 4 ) = 124 +fallxy ( 107, 5 ) = 124 +fallxy ( 107, 6 ) = 124 +fallxy ( 107, 7 ) = 164 +fallxy ( 107, 8 ) = 164 +xyphendoy1 ( 107, 1 ) = 0 +xyphendoy1 ( 107, 2 ) = 2 +xyphendoy1 ( 107, 3 ) = 2 +xyphendoy1 ( 107, 4 ) = 2 +xyphendoy1 ( 107, 5 ) = 2 +xyphendoy1 ( 107, 6 ) = 2 +xyphendoy1 ( 107, 7 ) = 2 +xyphendoy1 ( 107, 8 ) = 2 + + ! xlat -2.75000000000000 +greenupxy ( 106, 1 ) = 33 +greenupxy ( 106, 2 ) = 293 +greenupxy ( 106, 3 ) = 349 +greenupxy ( 106, 4 ) = 351 +greenupxy ( 106, 5 ) = 351 +greenupxy ( 106, 6 ) = 351 +greenupxy ( 106, 7 ) = 336 +greenupxy ( 106, 8 ) = 336 +fallxy ( 106, 1 ) = 162 +fallxy ( 106, 2 ) = 131 +fallxy ( 106, 3 ) = 98 +fallxy ( 106, 4 ) = 123 +fallxy ( 106, 5 ) = 123 +fallxy ( 106, 6 ) = 123 +fallxy ( 106, 7 ) = 152 +fallxy ( 106, 8 ) = 152 +xyphendoy1 ( 106, 1 ) = 0 +xyphendoy1 ( 106, 2 ) = 2 +xyphendoy1 ( 106, 3 ) = 2 +xyphendoy1 ( 106, 4 ) = 2 +xyphendoy1 ( 106, 5 ) = 2 +xyphendoy1 ( 106, 6 ) = 2 +xyphendoy1 ( 106, 7 ) = 2 +xyphendoy1 ( 106, 8 ) = 2 + + ! xlat -3.25000000000000 +greenupxy ( 105, 1 ) = 26 +greenupxy ( 105, 2 ) = 289 +greenupxy ( 105, 3 ) = 347 +greenupxy ( 105, 4 ) = 347 +greenupxy ( 105, 5 ) = 347 +greenupxy ( 105, 6 ) = 347 +greenupxy ( 105, 7 ) = 327 +greenupxy ( 105, 8 ) = 327 +fallxy ( 105, 1 ) = 151 +fallxy ( 105, 2 ) = 119 +fallxy ( 105, 3 ) = 100 +fallxy ( 105, 4 ) = 122 +fallxy ( 105, 5 ) = 122 +fallxy ( 105, 6 ) = 122 +fallxy ( 105, 7 ) = 142 +fallxy ( 105, 8 ) = 142 +xyphendoy1 ( 105, 1 ) = 0 +xyphendoy1 ( 105, 2 ) = 2 +xyphendoy1 ( 105, 3 ) = 2 +xyphendoy1 ( 105, 4 ) = 2 +xyphendoy1 ( 105, 5 ) = 2 +xyphendoy1 ( 105, 6 ) = 2 +xyphendoy1 ( 105, 7 ) = 2 +xyphendoy1 ( 105, 8 ) = 2 + + ! xlat -3.75000000000000 +greenupxy ( 104, 1 ) = 26 +greenupxy ( 104, 2 ) = 285 +greenupxy ( 104, 3 ) = 347 +greenupxy ( 104, 4 ) = 345 +greenupxy ( 104, 5 ) = 345 +greenupxy ( 104, 6 ) = 345 +greenupxy ( 104, 7 ) = 323 +greenupxy ( 104, 8 ) = 323 +fallxy ( 104, 1 ) = 151 +fallxy ( 104, 2 ) = 108 +fallxy ( 104, 3 ) = 102 +fallxy ( 104, 4 ) = 121 +fallxy ( 104, 5 ) = 121 +fallxy ( 104, 6 ) = 121 +fallxy ( 104, 7 ) = 132 +fallxy ( 104, 8 ) = 132 +xyphendoy1 ( 104, 1 ) = 0 +xyphendoy1 ( 104, 2 ) = 2 +xyphendoy1 ( 104, 3 ) = 2 +xyphendoy1 ( 104, 4 ) = 2 +xyphendoy1 ( 104, 5 ) = 2 +xyphendoy1 ( 104, 6 ) = 2 +xyphendoy1 ( 104, 7 ) = 2 +xyphendoy1 ( 104, 8 ) = 2 + + ! xlat -4.25000000000000 +greenupxy ( 103, 1 ) = 26 +greenupxy ( 103, 2 ) = 281 +greenupxy ( 103, 3 ) = 345 +greenupxy ( 103, 4 ) = 343 +greenupxy ( 103, 5 ) = 343 +greenupxy ( 103, 6 ) = 343 +greenupxy ( 103, 7 ) = 320 +greenupxy ( 103, 8 ) = 320 +fallxy ( 103, 1 ) = 151 +fallxy ( 103, 2 ) = 106 +fallxy ( 103, 3 ) = 104 +fallxy ( 103, 4 ) = 120 +fallxy ( 103, 5 ) = 120 +fallxy ( 103, 6 ) = 120 +fallxy ( 103, 7 ) = 123 +fallxy ( 103, 8 ) = 123 +xyphendoy1 ( 103, 1 ) = 0 +xyphendoy1 ( 103, 2 ) = 2 +xyphendoy1 ( 103, 3 ) = 2 +xyphendoy1 ( 103, 4 ) = 2 +xyphendoy1 ( 103, 5 ) = 2 +xyphendoy1 ( 103, 6 ) = 2 +xyphendoy1 ( 103, 7 ) = 2 +xyphendoy1 ( 103, 8 ) = 2 + + ! xlat -4.75000000000000 +greenupxy ( 102, 1 ) = 362 +greenupxy ( 102, 2 ) = 278 +greenupxy ( 102, 3 ) = 344 +greenupxy ( 102, 4 ) = 341 +greenupxy ( 102, 5 ) = 341 +greenupxy ( 102, 6 ) = 341 +greenupxy ( 102, 7 ) = 320 +greenupxy ( 102, 8 ) = 320 +fallxy ( 102, 1 ) = 133 +fallxy ( 102, 2 ) = 104 +fallxy ( 102, 3 ) = 107 +fallxy ( 102, 4 ) = 119 +fallxy ( 102, 5 ) = 119 +fallxy ( 102, 6 ) = 119 +fallxy ( 102, 7 ) = 122 +fallxy ( 102, 8 ) = 122 +xyphendoy1 ( 102, 1 ) = 2 +xyphendoy1 ( 102, 2 ) = 2 +xyphendoy1 ( 102, 3 ) = 2 +xyphendoy1 ( 102, 4 ) = 2 +xyphendoy1 ( 102, 5 ) = 2 +xyphendoy1 ( 102, 6 ) = 2 +xyphendoy1 ( 102, 7 ) = 2 +xyphendoy1 ( 102, 8 ) = 2 + + ! xlat -5.25000000000000 +greenupxy ( 101, 1 ) = 362 +greenupxy ( 101, 2 ) = 271 +greenupxy ( 101, 3 ) = 347 +greenupxy ( 101, 4 ) = 343 +greenupxy ( 101, 5 ) = 343 +greenupxy ( 101, 6 ) = 343 +greenupxy ( 101, 7 ) = 318 +greenupxy ( 101, 8 ) = 318 +fallxy ( 101, 1 ) = 133 +fallxy ( 101, 2 ) = 102 +fallxy ( 101, 3 ) = 110 +fallxy ( 101, 4 ) = 119 +fallxy ( 101, 5 ) = 119 +fallxy ( 101, 6 ) = 119 +fallxy ( 101, 7 ) = 122 +fallxy ( 101, 8 ) = 122 +xyphendoy1 ( 101, 1 ) = 2 +xyphendoy1 ( 101, 2 ) = 2 +xyphendoy1 ( 101, 3 ) = 2 +xyphendoy1 ( 101, 4 ) = 2 +xyphendoy1 ( 101, 5 ) = 2 +xyphendoy1 ( 101, 6 ) = 2 +xyphendoy1 ( 101, 7 ) = 2 +xyphendoy1 ( 101, 8 ) = 2 + + ! xlat -5.75000000000000 +greenupxy ( 100, 1 ) = 355 +greenupxy ( 100, 2 ) = 265 +greenupxy ( 100, 3 ) = 348 +greenupxy ( 100, 4 ) = 339 +greenupxy ( 100, 5 ) = 339 +greenupxy ( 100, 6 ) = 339 +greenupxy ( 100, 7 ) = 316 +greenupxy ( 100, 8 ) = 316 +fallxy ( 100, 1 ) = 131 +fallxy ( 100, 2 ) = 97 +fallxy ( 100, 3 ) = 112 +fallxy ( 100, 4 ) = 120 +fallxy ( 100, 5 ) = 120 +fallxy ( 100, 6 ) = 120 +fallxy ( 100, 7 ) = 118 +fallxy ( 100, 8 ) = 118 +xyphendoy1 ( 100, 1 ) = 2 +xyphendoy1 ( 100, 2 ) = 2 +xyphendoy1 ( 100, 3 ) = 2 +xyphendoy1 ( 100, 4 ) = 2 +xyphendoy1 ( 100, 5 ) = 2 +xyphendoy1 ( 100, 6 ) = 2 +xyphendoy1 ( 100, 7 ) = 2 +xyphendoy1 ( 100, 8 ) = 2 + + ! xlat -6.25000000000000 +greenupxy ( 99, 1 ) = 349 +greenupxy ( 99, 2 ) = 260 +greenupxy ( 99, 3 ) = 349 +greenupxy ( 99, 4 ) = 338 +greenupxy ( 99, 5 ) = 338 +greenupxy ( 99, 6 ) = 338 +greenupxy ( 99, 7 ) = 316 +greenupxy ( 99, 8 ) = 316 +fallxy ( 99, 1 ) = 131 +fallxy ( 99, 2 ) = 92 +fallxy ( 99, 3 ) = 109 +fallxy ( 99, 4 ) = 117 +fallxy ( 99, 5 ) = 117 +fallxy ( 99, 6 ) = 117 +fallxy ( 99, 7 ) = 116 +fallxy ( 99, 8 ) = 116 +xyphendoy1 ( 99, 1 ) = 2 +xyphendoy1 ( 99, 2 ) = 2 +xyphendoy1 ( 99, 3 ) = 2 +xyphendoy1 ( 99, 4 ) = 2 +xyphendoy1 ( 99, 5 ) = 2 +xyphendoy1 ( 99, 6 ) = 2 +xyphendoy1 ( 99, 7 ) = 2 +xyphendoy1 ( 99, 8 ) = 2 + + ! xlat -6.75000000000000 +greenupxy ( 98, 1 ) = 349 +greenupxy ( 98, 2 ) = 257 +greenupxy ( 98, 3 ) = 350 +greenupxy ( 98, 4 ) = 338 +greenupxy ( 98, 5 ) = 338 +greenupxy ( 98, 6 ) = 338 +greenupxy ( 98, 7 ) = 316 +greenupxy ( 98, 8 ) = 316 +fallxy ( 98, 1 ) = 131 +fallxy ( 98, 2 ) = 89 +fallxy ( 98, 3 ) = 111 +fallxy ( 98, 4 ) = 115 +fallxy ( 98, 5 ) = 115 +fallxy ( 98, 6 ) = 115 +fallxy ( 98, 7 ) = 114 +fallxy ( 98, 8 ) = 114 +xyphendoy1 ( 98, 1 ) = 2 +xyphendoy1 ( 98, 2 ) = 2 +xyphendoy1 ( 98, 3 ) = 2 +xyphendoy1 ( 98, 4 ) = 2 +xyphendoy1 ( 98, 5 ) = 2 +xyphendoy1 ( 98, 6 ) = 2 +xyphendoy1 ( 98, 7 ) = 2 +xyphendoy1 ( 98, 8 ) = 2 + + ! xlat -7.25000000000000 +greenupxy ( 97, 1 ) = 349 +greenupxy ( 97, 2 ) = 255 +greenupxy ( 97, 3 ) = 349 +greenupxy ( 97, 4 ) = 337 +greenupxy ( 97, 5 ) = 337 +greenupxy ( 97, 6 ) = 337 +greenupxy ( 97, 7 ) = 316 +greenupxy ( 97, 8 ) = 316 +fallxy ( 97, 1 ) = 131 +fallxy ( 97, 2 ) = 86 +fallxy ( 97, 3 ) = 109 +fallxy ( 97, 4 ) = 113 +fallxy ( 97, 5 ) = 113 +fallxy ( 97, 6 ) = 113 +fallxy ( 97, 7 ) = 112 +fallxy ( 97, 8 ) = 112 +xyphendoy1 ( 97, 1 ) = 2 +xyphendoy1 ( 97, 2 ) = 2 +xyphendoy1 ( 97, 3 ) = 2 +xyphendoy1 ( 97, 4 ) = 2 +xyphendoy1 ( 97, 5 ) = 2 +xyphendoy1 ( 97, 6 ) = 2 +xyphendoy1 ( 97, 7 ) = 2 +xyphendoy1 ( 97, 8 ) = 2 + + ! xlat -7.75000000000000 +greenupxy ( 96, 1 ) = 344 +greenupxy ( 96, 2 ) = 253 +greenupxy ( 96, 3 ) = 346 +greenupxy ( 96, 4 ) = 334 +greenupxy ( 96, 5 ) = 334 +greenupxy ( 96, 6 ) = 334 +greenupxy ( 96, 7 ) = 315 +greenupxy ( 96, 8 ) = 315 +fallxy ( 96, 1 ) = 127 +fallxy ( 96, 2 ) = 84 +fallxy ( 96, 3 ) = 107 +fallxy ( 96, 4 ) = 111 +fallxy ( 96, 5 ) = 111 +fallxy ( 96, 6 ) = 111 +fallxy ( 96, 7 ) = 110 +fallxy ( 96, 8 ) = 110 +xyphendoy1 ( 96, 1 ) = 2 +xyphendoy1 ( 96, 2 ) = 2 +xyphendoy1 ( 96, 3 ) = 2 +xyphendoy1 ( 96, 4 ) = 2 +xyphendoy1 ( 96, 5 ) = 2 +xyphendoy1 ( 96, 6 ) = 2 +xyphendoy1 ( 96, 7 ) = 2 +xyphendoy1 ( 96, 8 ) = 2 + + ! xlat -8.25000000000000 +greenupxy ( 95, 1 ) = 344 +greenupxy ( 95, 2 ) = 254 +greenupxy ( 95, 3 ) = 342 +greenupxy ( 95, 4 ) = 331 +greenupxy ( 95, 5 ) = 331 +greenupxy ( 95, 6 ) = 331 +greenupxy ( 95, 7 ) = 315 +greenupxy ( 95, 8 ) = 315 +fallxy ( 95, 1 ) = 127 +fallxy ( 95, 2 ) = 81 +fallxy ( 95, 3 ) = 107 +fallxy ( 95, 4 ) = 110 +fallxy ( 95, 5 ) = 110 +fallxy ( 95, 6 ) = 110 +fallxy ( 95, 7 ) = 106 +fallxy ( 95, 8 ) = 106 +xyphendoy1 ( 95, 1 ) = 2 +xyphendoy1 ( 95, 2 ) = 2 +xyphendoy1 ( 95, 3 ) = 2 +xyphendoy1 ( 95, 4 ) = 2 +xyphendoy1 ( 95, 5 ) = 2 +xyphendoy1 ( 95, 6 ) = 2 +xyphendoy1 ( 95, 7 ) = 2 +xyphendoy1 ( 95, 8 ) = 2 + + ! xlat -8.75000000000000 +greenupxy ( 94, 1 ) = 343 +greenupxy ( 94, 2 ) = 254 +greenupxy ( 94, 3 ) = 339 +greenupxy ( 94, 4 ) = 327 +greenupxy ( 94, 5 ) = 327 +greenupxy ( 94, 6 ) = 327 +greenupxy ( 94, 7 ) = 314 +greenupxy ( 94, 8 ) = 314 +fallxy ( 94, 1 ) = 125 +fallxy ( 94, 2 ) = 78 +fallxy ( 94, 3 ) = 106 +fallxy ( 94, 4 ) = 108 +fallxy ( 94, 5 ) = 108 +fallxy ( 94, 6 ) = 108 +fallxy ( 94, 7 ) = 105 +fallxy ( 94, 8 ) = 105 +xyphendoy1 ( 94, 1 ) = 2 +xyphendoy1 ( 94, 2 ) = 2 +xyphendoy1 ( 94, 3 ) = 2 +xyphendoy1 ( 94, 4 ) = 2 +xyphendoy1 ( 94, 5 ) = 2 +xyphendoy1 ( 94, 6 ) = 2 +xyphendoy1 ( 94, 7 ) = 2 +xyphendoy1 ( 94, 8 ) = 2 + + ! xlat -9.25000000000000 +greenupxy ( 93, 1 ) = 343 +greenupxy ( 93, 2 ) = 254 +greenupxy ( 93, 3 ) = 335 +greenupxy ( 93, 4 ) = 324 +greenupxy ( 93, 5 ) = 324 +greenupxy ( 93, 6 ) = 324 +greenupxy ( 93, 7 ) = 313 +greenupxy ( 93, 8 ) = 313 +fallxy ( 93, 1 ) = 125 +fallxy ( 93, 2 ) = 76 +fallxy ( 93, 3 ) = 103 +fallxy ( 93, 4 ) = 106 +fallxy ( 93, 5 ) = 106 +fallxy ( 93, 6 ) = 106 +fallxy ( 93, 7 ) = 103 +fallxy ( 93, 8 ) = 103 +xyphendoy1 ( 93, 1 ) = 2 +xyphendoy1 ( 93, 2 ) = 2 +xyphendoy1 ( 93, 3 ) = 2 +xyphendoy1 ( 93, 4 ) = 2 +xyphendoy1 ( 93, 5 ) = 2 +xyphendoy1 ( 93, 6 ) = 2 +xyphendoy1 ( 93, 7 ) = 2 +xyphendoy1 ( 93, 8 ) = 2 + + ! xlat -9.75000000000000 +greenupxy ( 92, 1 ) = 343 +greenupxy ( 92, 2 ) = 255 +greenupxy ( 92, 3 ) = 331 +greenupxy ( 92, 4 ) = 321 +greenupxy ( 92, 5 ) = 321 +greenupxy ( 92, 6 ) = 321 +greenupxy ( 92, 7 ) = 311 +greenupxy ( 92, 8 ) = 311 +fallxy ( 92, 1 ) = 125 +fallxy ( 92, 2 ) = 74 +fallxy ( 92, 3 ) = 101 +fallxy ( 92, 4 ) = 104 +fallxy ( 92, 5 ) = 104 +fallxy ( 92, 6 ) = 104 +fallxy ( 92, 7 ) = 98 +fallxy ( 92, 8 ) = 98 +xyphendoy1 ( 92, 1 ) = 2 +xyphendoy1 ( 92, 2 ) = 2 +xyphendoy1 ( 92, 3 ) = 2 +xyphendoy1 ( 92, 4 ) = 2 +xyphendoy1 ( 92, 5 ) = 2 +xyphendoy1 ( 92, 6 ) = 2 +xyphendoy1 ( 92, 7 ) = 2 +xyphendoy1 ( 92, 8 ) = 2 + + ! xlat -10.2500000000000 +greenupxy ( 91, 1 ) = 337 +greenupxy ( 91, 2 ) = 255 +greenupxy ( 91, 3 ) = 327 +greenupxy ( 91, 4 ) = 318 +greenupxy ( 91, 5 ) = 318 +greenupxy ( 91, 6 ) = 318 +greenupxy ( 91, 7 ) = 311 +greenupxy ( 91, 8 ) = 311 +fallxy ( 91, 1 ) = 118 +fallxy ( 91, 2 ) = 72 +fallxy ( 91, 3 ) = 99 +fallxy ( 91, 4 ) = 102 +fallxy ( 91, 5 ) = 102 +fallxy ( 91, 6 ) = 102 +fallxy ( 91, 7 ) = 95 +fallxy ( 91, 8 ) = 95 +xyphendoy1 ( 91, 1 ) = 2 +xyphendoy1 ( 91, 2 ) = 2 +xyphendoy1 ( 91, 3 ) = 2 +xyphendoy1 ( 91, 4 ) = 2 +xyphendoy1 ( 91, 5 ) = 2 +xyphendoy1 ( 91, 6 ) = 2 +xyphendoy1 ( 91, 7 ) = 2 +xyphendoy1 ( 91, 8 ) = 2 + + ! xlat -10.7500000000000 +greenupxy ( 90, 1 ) = 333 +greenupxy ( 90, 2 ) = 258 +greenupxy ( 90, 3 ) = 323 +greenupxy ( 90, 4 ) = 315 +greenupxy ( 90, 5 ) = 315 +greenupxy ( 90, 6 ) = 315 +greenupxy ( 90, 7 ) = 311 +greenupxy ( 90, 8 ) = 311 +fallxy ( 90, 1 ) = 112 +fallxy ( 90, 2 ) = 71 +fallxy ( 90, 3 ) = 97 +fallxy ( 90, 4 ) = 101 +fallxy ( 90, 5 ) = 101 +fallxy ( 90, 6 ) = 101 +fallxy ( 90, 7 ) = 92 +fallxy ( 90, 8 ) = 92 +xyphendoy1 ( 90, 1 ) = 2 +xyphendoy1 ( 90, 2 ) = 2 +xyphendoy1 ( 90, 3 ) = 2 +xyphendoy1 ( 90, 4 ) = 2 +xyphendoy1 ( 90, 5 ) = 2 +xyphendoy1 ( 90, 6 ) = 2 +xyphendoy1 ( 90, 7 ) = 2 +xyphendoy1 ( 90, 8 ) = 2 + + ! xlat -11.2500000000000 +greenupxy ( 89, 1 ) = 333 +greenupxy ( 89, 2 ) = 262 +greenupxy ( 89, 3 ) = 321 +greenupxy ( 89, 4 ) = 313 +greenupxy ( 89, 5 ) = 313 +greenupxy ( 89, 6 ) = 313 +greenupxy ( 89, 7 ) = 310 +greenupxy ( 89, 8 ) = 310 +fallxy ( 89, 1 ) = 112 +fallxy ( 89, 2 ) = 71 +fallxy ( 89, 3 ) = 96 +fallxy ( 89, 4 ) = 99 +fallxy ( 89, 5 ) = 99 +fallxy ( 89, 6 ) = 99 +fallxy ( 89, 7 ) = 90 +fallxy ( 89, 8 ) = 90 +xyphendoy1 ( 89, 1 ) = 2 +xyphendoy1 ( 89, 2 ) = 2 +xyphendoy1 ( 89, 3 ) = 2 +xyphendoy1 ( 89, 4 ) = 2 +xyphendoy1 ( 89, 5 ) = 2 +xyphendoy1 ( 89, 6 ) = 2 +xyphendoy1 ( 89, 7 ) = 2 +xyphendoy1 ( 89, 8 ) = 2 + + ! xlat -11.7500000000000 +greenupxy ( 88, 1 ) = 328 +greenupxy ( 88, 2 ) = 266 +greenupxy ( 88, 3 ) = 319 +greenupxy ( 88, 4 ) = 311 +greenupxy ( 88, 5 ) = 311 +greenupxy ( 88, 6 ) = 311 +greenupxy ( 88, 7 ) = 309 +greenupxy ( 88, 8 ) = 309 +fallxy ( 88, 1 ) = 104 +fallxy ( 88, 2 ) = 72 +fallxy ( 88, 3 ) = 95 +fallxy ( 88, 4 ) = 98 +fallxy ( 88, 5 ) = 98 +fallxy ( 88, 6 ) = 98 +fallxy ( 88, 7 ) = 89 +fallxy ( 88, 8 ) = 89 +xyphendoy1 ( 88, 1 ) = 2 +xyphendoy1 ( 88, 2 ) = 2 +xyphendoy1 ( 88, 3 ) = 2 +xyphendoy1 ( 88, 4 ) = 2 +xyphendoy1 ( 88, 5 ) = 2 +xyphendoy1 ( 88, 6 ) = 2 +xyphendoy1 ( 88, 7 ) = 2 +xyphendoy1 ( 88, 8 ) = 2 + + ! xlat -12.2500000000000 +greenupxy ( 87, 1 ) = 328 +greenupxy ( 87, 2 ) = 269 +greenupxy ( 87, 3 ) = 317 +greenupxy ( 87, 4 ) = 310 +greenupxy ( 87, 5 ) = 310 +greenupxy ( 87, 6 ) = 310 +greenupxy ( 87, 7 ) = 308 +greenupxy ( 87, 8 ) = 308 +fallxy ( 87, 1 ) = 104 +fallxy ( 87, 2 ) = 72 +fallxy ( 87, 3 ) = 94 +fallxy ( 87, 4 ) = 97 +fallxy ( 87, 5 ) = 97 +fallxy ( 87, 6 ) = 97 +fallxy ( 87, 7 ) = 87 +fallxy ( 87, 8 ) = 87 +xyphendoy1 ( 87, 1 ) = 2 +xyphendoy1 ( 87, 2 ) = 2 +xyphendoy1 ( 87, 3 ) = 2 +xyphendoy1 ( 87, 4 ) = 2 +xyphendoy1 ( 87, 5 ) = 2 +xyphendoy1 ( 87, 6 ) = 2 +xyphendoy1 ( 87, 7 ) = 2 +xyphendoy1 ( 87, 8 ) = 2 + + ! xlat -12.7500000000000 +greenupxy ( 86, 1 ) = 328 +greenupxy ( 86, 2 ) = 272 +greenupxy ( 86, 3 ) = 316 +greenupxy ( 86, 4 ) = 309 +greenupxy ( 86, 5 ) = 309 +greenupxy ( 86, 6 ) = 309 +greenupxy ( 86, 7 ) = 307 +greenupxy ( 86, 8 ) = 307 +fallxy ( 86, 1 ) = 104 +fallxy ( 86, 2 ) = 72 +fallxy ( 86, 3 ) = 94 +fallxy ( 86, 4 ) = 96 +fallxy ( 86, 5 ) = 96 +fallxy ( 86, 6 ) = 96 +fallxy ( 86, 7 ) = 85 +fallxy ( 86, 8 ) = 85 +xyphendoy1 ( 86, 1 ) = 2 +xyphendoy1 ( 86, 2 ) = 2 +xyphendoy1 ( 86, 3 ) = 2 +xyphendoy1 ( 86, 4 ) = 2 +xyphendoy1 ( 86, 5 ) = 2 +xyphendoy1 ( 86, 6 ) = 2 +xyphendoy1 ( 86, 7 ) = 2 +xyphendoy1 ( 86, 8 ) = 2 + + ! xlat -13.2500000000000 +greenupxy ( 85, 1 ) = 326 +greenupxy ( 85, 2 ) = 275 +greenupxy ( 85, 3 ) = 316 +greenupxy ( 85, 4 ) = 309 +greenupxy ( 85, 5 ) = 309 +greenupxy ( 85, 6 ) = 309 +greenupxy ( 85, 7 ) = 306 +greenupxy ( 85, 8 ) = 306 +fallxy ( 85, 1 ) = 105 +fallxy ( 85, 2 ) = 72 +fallxy ( 85, 3 ) = 94 +fallxy ( 85, 4 ) = 95 +fallxy ( 85, 5 ) = 95 +fallxy ( 85, 6 ) = 95 +fallxy ( 85, 7 ) = 83 +fallxy ( 85, 8 ) = 83 +xyphendoy1 ( 85, 1 ) = 2 +xyphendoy1 ( 85, 2 ) = 2 +xyphendoy1 ( 85, 3 ) = 2 +xyphendoy1 ( 85, 4 ) = 2 +xyphendoy1 ( 85, 5 ) = 2 +xyphendoy1 ( 85, 6 ) = 2 +xyphendoy1 ( 85, 7 ) = 2 +xyphendoy1 ( 85, 8 ) = 2 + + ! xlat -13.7500000000000 +greenupxy ( 84, 1 ) = 321 +greenupxy ( 84, 2 ) = 277 +greenupxy ( 84, 3 ) = 317 +greenupxy ( 84, 4 ) = 311 +greenupxy ( 84, 5 ) = 311 +greenupxy ( 84, 6 ) = 311 +greenupxy ( 84, 7 ) = 305 +greenupxy ( 84, 8 ) = 305 +fallxy ( 84, 1 ) = 97 +fallxy ( 84, 2 ) = 73 +fallxy ( 84, 3 ) = 93 +fallxy ( 84, 4 ) = 94 +fallxy ( 84, 5 ) = 94 +fallxy ( 84, 6 ) = 94 +fallxy ( 84, 7 ) = 80 +fallxy ( 84, 8 ) = 80 +xyphendoy1 ( 84, 1 ) = 2 +xyphendoy1 ( 84, 2 ) = 2 +xyphendoy1 ( 84, 3 ) = 2 +xyphendoy1 ( 84, 4 ) = 2 +xyphendoy1 ( 84, 5 ) = 2 +xyphendoy1 ( 84, 6 ) = 2 +xyphendoy1 ( 84, 7 ) = 2 +xyphendoy1 ( 84, 8 ) = 2 + + ! xlat -14.2500000000000 +greenupxy ( 83, 1 ) = 320 +greenupxy ( 83, 2 ) = 279 +greenupxy ( 83, 3 ) = 318 +greenupxy ( 83, 4 ) = 313 +greenupxy ( 83, 5 ) = 313 +greenupxy ( 83, 6 ) = 313 +greenupxy ( 83, 7 ) = 304 +greenupxy ( 83, 8 ) = 304 +fallxy ( 83, 1 ) = 93 +fallxy ( 83, 2 ) = 74 +fallxy ( 83, 3 ) = 93 +fallxy ( 83, 4 ) = 93 +fallxy ( 83, 5 ) = 93 +fallxy ( 83, 6 ) = 93 +fallxy ( 83, 7 ) = 79 +fallxy ( 83, 8 ) = 79 +xyphendoy1 ( 83, 1 ) = 2 +xyphendoy1 ( 83, 2 ) = 2 +xyphendoy1 ( 83, 3 ) = 2 +xyphendoy1 ( 83, 4 ) = 2 +xyphendoy1 ( 83, 5 ) = 2 +xyphendoy1 ( 83, 6 ) = 2 +xyphendoy1 ( 83, 7 ) = 2 +xyphendoy1 ( 83, 8 ) = 2 + + ! xlat -14.7500000000000 +greenupxy ( 82, 1 ) = 320 +greenupxy ( 82, 2 ) = 282 +greenupxy ( 82, 3 ) = 321 +greenupxy ( 82, 4 ) = 316 +greenupxy ( 82, 5 ) = 316 +greenupxy ( 82, 6 ) = 316 +greenupxy ( 82, 7 ) = 303 +greenupxy ( 82, 8 ) = 303 +fallxy ( 82, 1 ) = 93 +fallxy ( 82, 2 ) = 75 +fallxy ( 82, 3 ) = 92 +fallxy ( 82, 4 ) = 93 +fallxy ( 82, 5 ) = 93 +fallxy ( 82, 6 ) = 93 +fallxy ( 82, 7 ) = 78 +fallxy ( 82, 8 ) = 78 +xyphendoy1 ( 82, 1 ) = 2 +xyphendoy1 ( 82, 2 ) = 2 +xyphendoy1 ( 82, 3 ) = 2 +xyphendoy1 ( 82, 4 ) = 2 +xyphendoy1 ( 82, 5 ) = 2 +xyphendoy1 ( 82, 6 ) = 2 +xyphendoy1 ( 82, 7 ) = 2 +xyphendoy1 ( 82, 8 ) = 2 + + ! xlat -15.2500000000000 +greenupxy ( 81, 1 ) = 320 +greenupxy ( 81, 2 ) = 284 +greenupxy ( 81, 3 ) = 324 +greenupxy ( 81, 4 ) = 318 +greenupxy ( 81, 5 ) = 318 +greenupxy ( 81, 6 ) = 318 +greenupxy ( 81, 7 ) = 302 +greenupxy ( 81, 8 ) = 302 +fallxy ( 81, 1 ) = 93 +fallxy ( 81, 2 ) = 75 +fallxy ( 81, 3 ) = 92 +fallxy ( 81, 4 ) = 92 +fallxy ( 81, 5 ) = 92 +fallxy ( 81, 6 ) = 92 +fallxy ( 81, 7 ) = 77 +fallxy ( 81, 8 ) = 77 +xyphendoy1 ( 81, 1 ) = 2 +xyphendoy1 ( 81, 2 ) = 2 +xyphendoy1 ( 81, 3 ) = 2 +xyphendoy1 ( 81, 4 ) = 2 +xyphendoy1 ( 81, 5 ) = 2 +xyphendoy1 ( 81, 6 ) = 2 +xyphendoy1 ( 81, 7 ) = 2 +xyphendoy1 ( 81, 8 ) = 2 + + ! xlat -15.7500000000000 +greenupxy ( 80, 1 ) = 320 +greenupxy ( 80, 2 ) = 287 +greenupxy ( 80, 3 ) = 328 +greenupxy ( 80, 4 ) = 321 +greenupxy ( 80, 5 ) = 321 +greenupxy ( 80, 6 ) = 321 +greenupxy ( 80, 7 ) = 301 +greenupxy ( 80, 8 ) = 301 +fallxy ( 80, 1 ) = 93 +fallxy ( 80, 2 ) = 76 +fallxy ( 80, 3 ) = 92 +fallxy ( 80, 4 ) = 91 +fallxy ( 80, 5 ) = 91 +fallxy ( 80, 6 ) = 91 +fallxy ( 80, 7 ) = 76 +fallxy ( 80, 8 ) = 76 +xyphendoy1 ( 80, 1 ) = 2 +xyphendoy1 ( 80, 2 ) = 2 +xyphendoy1 ( 80, 3 ) = 2 +xyphendoy1 ( 80, 4 ) = 2 +xyphendoy1 ( 80, 5 ) = 2 +xyphendoy1 ( 80, 6 ) = 2 +xyphendoy1 ( 80, 7 ) = 2 +xyphendoy1 ( 80, 8 ) = 2 + + ! xlat -16.2500000000000 +greenupxy ( 79, 1 ) = 322 +greenupxy ( 79, 2 ) = 289 +greenupxy ( 79, 3 ) = 332 +greenupxy ( 79, 4 ) = 325 +greenupxy ( 79, 5 ) = 325 +greenupxy ( 79, 6 ) = 325 +greenupxy ( 79, 7 ) = 300 +greenupxy ( 79, 8 ) = 300 +fallxy ( 79, 1 ) = 94 +fallxy ( 79, 2 ) = 77 +fallxy ( 79, 3 ) = 92 +fallxy ( 79, 4 ) = 90 +fallxy ( 79, 5 ) = 90 +fallxy ( 79, 6 ) = 90 +fallxy ( 79, 7 ) = 77 +fallxy ( 79, 8 ) = 77 +xyphendoy1 ( 79, 1 ) = 2 +xyphendoy1 ( 79, 2 ) = 2 +xyphendoy1 ( 79, 3 ) = 2 +xyphendoy1 ( 79, 4 ) = 2 +xyphendoy1 ( 79, 5 ) = 2 +xyphendoy1 ( 79, 6 ) = 2 +xyphendoy1 ( 79, 7 ) = 2 +xyphendoy1 ( 79, 8 ) = 2 + + ! xlat -16.7500000000000 +greenupxy ( 78, 1 ) = 325 +greenupxy ( 78, 2 ) = 292 +greenupxy ( 78, 3 ) = 337 +greenupxy ( 78, 4 ) = 329 +greenupxy ( 78, 5 ) = 329 +greenupxy ( 78, 6 ) = 329 +greenupxy ( 78, 7 ) = 298 +greenupxy ( 78, 8 ) = 298 +fallxy ( 78, 1 ) = 96 +fallxy ( 78, 2 ) = 78 +fallxy ( 78, 3 ) = 91 +fallxy ( 78, 4 ) = 90 +fallxy ( 78, 5 ) = 90 +fallxy ( 78, 6 ) = 90 +fallxy ( 78, 7 ) = 77 +fallxy ( 78, 8 ) = 77 +xyphendoy1 ( 78, 1 ) = 2 +xyphendoy1 ( 78, 2 ) = 2 +xyphendoy1 ( 78, 3 ) = 2 +xyphendoy1 ( 78, 4 ) = 2 +xyphendoy1 ( 78, 5 ) = 2 +xyphendoy1 ( 78, 6 ) = 2 +xyphendoy1 ( 78, 7 ) = 2 +xyphendoy1 ( 78, 8 ) = 2 + + ! xlat -17.2500000000000 +greenupxy ( 77, 1 ) = 328 +greenupxy ( 77, 2 ) = 294 +greenupxy ( 77, 3 ) = 343 +greenupxy ( 77, 4 ) = 331 +greenupxy ( 77, 5 ) = 331 +greenupxy ( 77, 6 ) = 331 +greenupxy ( 77, 7 ) = 297 +greenupxy ( 77, 8 ) = 297 +fallxy ( 77, 1 ) = 93 +fallxy ( 77, 2 ) = 79 +fallxy ( 77, 3 ) = 91 +fallxy ( 77, 4 ) = 90 +fallxy ( 77, 5 ) = 90 +fallxy ( 77, 6 ) = 90 +fallxy ( 77, 7 ) = 78 +fallxy ( 77, 8 ) = 78 +xyphendoy1 ( 77, 1 ) = 2 +xyphendoy1 ( 77, 2 ) = 2 +xyphendoy1 ( 77, 3 ) = 2 +xyphendoy1 ( 77, 4 ) = 2 +xyphendoy1 ( 77, 5 ) = 2 +xyphendoy1 ( 77, 6 ) = 2 +xyphendoy1 ( 77, 7 ) = 2 +xyphendoy1 ( 77, 8 ) = 2 + + ! xlat -17.7500000000000 +greenupxy ( 76, 1 ) = 329 +greenupxy ( 76, 2 ) = 296 +greenupxy ( 76, 3 ) = 348 +greenupxy ( 76, 4 ) = 333 +greenupxy ( 76, 5 ) = 333 +greenupxy ( 76, 6 ) = 333 +greenupxy ( 76, 7 ) = 296 +greenupxy ( 76, 8 ) = 296 +fallxy ( 76, 1 ) = 97 +fallxy ( 76, 2 ) = 80 +fallxy ( 76, 3 ) = 91 +fallxy ( 76, 4 ) = 90 +fallxy ( 76, 5 ) = 90 +fallxy ( 76, 6 ) = 90 +fallxy ( 76, 7 ) = 79 +fallxy ( 76, 8 ) = 79 +xyphendoy1 ( 76, 1 ) = 2 +xyphendoy1 ( 76, 2 ) = 2 +xyphendoy1 ( 76, 3 ) = 2 +xyphendoy1 ( 76, 4 ) = 2 +xyphendoy1 ( 76, 5 ) = 2 +xyphendoy1 ( 76, 6 ) = 2 +xyphendoy1 ( 76, 7 ) = 2 +xyphendoy1 ( 76, 8 ) = 2 + + ! xlat -18.2500000000000 +greenupxy ( 75, 1 ) = 326 +greenupxy ( 75, 2 ) = 298 +greenupxy ( 75, 3 ) = 352 +greenupxy ( 75, 4 ) = 333 +greenupxy ( 75, 5 ) = 333 +greenupxy ( 75, 6 ) = 333 +greenupxy ( 75, 7 ) = 295 +greenupxy ( 75, 8 ) = 295 +fallxy ( 75, 1 ) = 94 +fallxy ( 75, 2 ) = 81 +fallxy ( 75, 3 ) = 91 +fallxy ( 75, 4 ) = 90 +fallxy ( 75, 5 ) = 90 +fallxy ( 75, 6 ) = 90 +fallxy ( 75, 7 ) = 79 +fallxy ( 75, 8 ) = 79 +xyphendoy1 ( 75, 1 ) = 2 +xyphendoy1 ( 75, 2 ) = 2 +xyphendoy1 ( 75, 3 ) = 2 +xyphendoy1 ( 75, 4 ) = 2 +xyphendoy1 ( 75, 5 ) = 2 +xyphendoy1 ( 75, 6 ) = 2 +xyphendoy1 ( 75, 7 ) = 2 +xyphendoy1 ( 75, 8 ) = 2 + + ! xlat -18.7500000000000 +greenupxy ( 74, 1 ) = 327 +greenupxy ( 74, 2 ) = 299 +greenupxy ( 74, 3 ) = 357 +greenupxy ( 74, 4 ) = 333 +greenupxy ( 74, 5 ) = 333 +greenupxy ( 74, 6 ) = 333 +greenupxy ( 74, 7 ) = 294 +greenupxy ( 74, 8 ) = 294 +fallxy ( 74, 1 ) = 92 +fallxy ( 74, 2 ) = 82 +fallxy ( 74, 3 ) = 93 +fallxy ( 74, 4 ) = 90 +fallxy ( 74, 5 ) = 90 +fallxy ( 74, 6 ) = 90 +fallxy ( 74, 7 ) = 80 +fallxy ( 74, 8 ) = 80 +xyphendoy1 ( 74, 1 ) = 2 +xyphendoy1 ( 74, 2 ) = 2 +xyphendoy1 ( 74, 3 ) = 2 +xyphendoy1 ( 74, 4 ) = 2 +xyphendoy1 ( 74, 5 ) = 2 +xyphendoy1 ( 74, 6 ) = 2 +xyphendoy1 ( 74, 7 ) = 2 +xyphendoy1 ( 74, 8 ) = 2 + + ! xlat -19.2500000000000 +greenupxy ( 73, 1 ) = 330 +greenupxy ( 73, 2 ) = 299 +greenupxy ( 73, 3 ) = 361 +greenupxy ( 73, 4 ) = 332 +greenupxy ( 73, 5 ) = 332 +greenupxy ( 73, 6 ) = 332 +greenupxy ( 73, 7 ) = 294 +greenupxy ( 73, 8 ) = 294 +fallxy ( 73, 1 ) = 94 +fallxy ( 73, 2 ) = 82 +fallxy ( 73, 3 ) = 93 +fallxy ( 73, 4 ) = 90 +fallxy ( 73, 5 ) = 90 +fallxy ( 73, 6 ) = 90 +fallxy ( 73, 7 ) = 80 +fallxy ( 73, 8 ) = 80 +xyphendoy1 ( 73, 1 ) = 2 +xyphendoy1 ( 73, 2 ) = 2 +xyphendoy1 ( 73, 3 ) = 2 +xyphendoy1 ( 73, 4 ) = 2 +xyphendoy1 ( 73, 5 ) = 2 +xyphendoy1 ( 73, 6 ) = 2 +xyphendoy1 ( 73, 7 ) = 2 +xyphendoy1 ( 73, 8 ) = 2 + + ! xlat -19.7500000000000 +greenupxy ( 72, 1 ) = 330 +greenupxy ( 72, 2 ) = 298 +greenupxy ( 72, 3 ) = 364 +greenupxy ( 72, 4 ) = 331 +greenupxy ( 72, 5 ) = 331 +greenupxy ( 72, 6 ) = 331 +greenupxy ( 72, 7 ) = 294 +greenupxy ( 72, 8 ) = 294 +fallxy ( 72, 1 ) = 99 +fallxy ( 72, 2 ) = 82 +fallxy ( 72, 3 ) = 94 +fallxy ( 72, 4 ) = 90 +fallxy ( 72, 5 ) = 90 +fallxy ( 72, 6 ) = 90 +fallxy ( 72, 7 ) = 80 +fallxy ( 72, 8 ) = 80 +xyphendoy1 ( 72, 1 ) = 2 +xyphendoy1 ( 72, 2 ) = 2 +xyphendoy1 ( 72, 3 ) = 2 +xyphendoy1 ( 72, 4 ) = 2 +xyphendoy1 ( 72, 5 ) = 2 +xyphendoy1 ( 72, 6 ) = 2 +xyphendoy1 ( 72, 7 ) = 2 +xyphendoy1 ( 72, 8 ) = 2 + + ! xlat -20.2500000000000 +greenupxy ( 71, 1 ) = 328 +greenupxy ( 71, 2 ) = 297 +greenupxy ( 71, 3 ) = 2 +greenupxy ( 71, 4 ) = 330 +greenupxy ( 71, 5 ) = 330 +greenupxy ( 71, 6 ) = 330 +greenupxy ( 71, 7 ) = 293 +greenupxy ( 71, 8 ) = 293 +fallxy ( 71, 1 ) = 101 +fallxy ( 71, 2 ) = 82 +fallxy ( 71, 3 ) = 95 +fallxy ( 71, 4 ) = 90 +fallxy ( 71, 5 ) = 90 +fallxy ( 71, 6 ) = 90 +fallxy ( 71, 7 ) = 80 +fallxy ( 71, 8 ) = 80 +xyphendoy1 ( 71, 1 ) = 2 +xyphendoy1 ( 71, 2 ) = 2 +xyphendoy1 ( 71, 3 ) = 0 +xyphendoy1 ( 71, 4 ) = 2 +xyphendoy1 ( 71, 5 ) = 2 +xyphendoy1 ( 71, 6 ) = 2 +xyphendoy1 ( 71, 7 ) = 2 +xyphendoy1 ( 71, 8 ) = 2 + + ! xlat -20.7500000000000 +greenupxy ( 70, 1 ) = 328 +greenupxy ( 70, 2 ) = 296 +greenupxy ( 70, 3 ) = 5 +greenupxy ( 70, 4 ) = 330 +greenupxy ( 70, 5 ) = 330 +greenupxy ( 70, 6 ) = 330 +greenupxy ( 70, 7 ) = 292 +greenupxy ( 70, 8 ) = 292 +fallxy ( 70, 1 ) = 101 +fallxy ( 70, 2 ) = 82 +fallxy ( 70, 3 ) = 96 +fallxy ( 70, 4 ) = 90 +fallxy ( 70, 5 ) = 90 +fallxy ( 70, 6 ) = 90 +fallxy ( 70, 7 ) = 80 +fallxy ( 70, 8 ) = 80 +xyphendoy1 ( 70, 1 ) = 2 +xyphendoy1 ( 70, 2 ) = 2 +xyphendoy1 ( 70, 3 ) = 0 +xyphendoy1 ( 70, 4 ) = 2 +xyphendoy1 ( 70, 5 ) = 2 +xyphendoy1 ( 70, 6 ) = 2 +xyphendoy1 ( 70, 7 ) = 2 +xyphendoy1 ( 70, 8 ) = 2 + + ! xlat -21.2500000000000 +greenupxy ( 69, 1 ) = 321 +greenupxy ( 69, 2 ) = 296 +greenupxy ( 69, 3 ) = 8 +greenupxy ( 69, 4 ) = 328 +greenupxy ( 69, 5 ) = 328 +greenupxy ( 69, 6 ) = 328 +greenupxy ( 69, 7 ) = 293 +greenupxy ( 69, 8 ) = 293 +fallxy ( 69, 1 ) = 99 +fallxy ( 69, 2 ) = 82 +fallxy ( 69, 3 ) = 98 +fallxy ( 69, 4 ) = 89 +fallxy ( 69, 5 ) = 89 +fallxy ( 69, 6 ) = 89 +fallxy ( 69, 7 ) = 81 +fallxy ( 69, 8 ) = 81 +xyphendoy1 ( 69, 1 ) = 2 +xyphendoy1 ( 69, 2 ) = 2 +xyphendoy1 ( 69, 3 ) = 0 +xyphendoy1 ( 69, 4 ) = 2 +xyphendoy1 ( 69, 5 ) = 2 +xyphendoy1 ( 69, 6 ) = 2 +xyphendoy1 ( 69, 7 ) = 2 +xyphendoy1 ( 69, 8 ) = 2 + + ! xlat -21.7500000000000 +greenupxy ( 68, 1 ) = 321 +greenupxy ( 68, 2 ) = 295 +greenupxy ( 68, 3 ) = 11 +greenupxy ( 68, 4 ) = 325 +greenupxy ( 68, 5 ) = 325 +greenupxy ( 68, 6 ) = 325 +greenupxy ( 68, 7 ) = 292 +greenupxy ( 68, 8 ) = 292 +fallxy ( 68, 1 ) = 96 +fallxy ( 68, 2 ) = 82 +fallxy ( 68, 3 ) = 101 +fallxy ( 68, 4 ) = 89 +fallxy ( 68, 5 ) = 89 +fallxy ( 68, 6 ) = 89 +fallxy ( 68, 7 ) = 82 +fallxy ( 68, 8 ) = 82 +xyphendoy1 ( 68, 1 ) = 2 +xyphendoy1 ( 68, 2 ) = 2 +xyphendoy1 ( 68, 3 ) = 0 +xyphendoy1 ( 68, 4 ) = 2 +xyphendoy1 ( 68, 5 ) = 2 +xyphendoy1 ( 68, 6 ) = 2 +xyphendoy1 ( 68, 7 ) = 2 +xyphendoy1 ( 68, 8 ) = 2 + + ! xlat -22.2500000000000 +greenupxy ( 67, 1 ) = 326 +greenupxy ( 67, 2 ) = 293 +greenupxy ( 67, 3 ) = 14 +greenupxy ( 67, 4 ) = 322 +greenupxy ( 67, 5 ) = 322 +greenupxy ( 67, 6 ) = 322 +greenupxy ( 67, 7 ) = 292 +greenupxy ( 67, 8 ) = 292 +fallxy ( 67, 1 ) = 106 +fallxy ( 67, 2 ) = 81 +fallxy ( 67, 3 ) = 104 +fallxy ( 67, 4 ) = 88 +fallxy ( 67, 5 ) = 88 +fallxy ( 67, 6 ) = 88 +fallxy ( 67, 7 ) = 82 +fallxy ( 67, 8 ) = 82 +xyphendoy1 ( 67, 1 ) = 2 +xyphendoy1 ( 67, 2 ) = 2 +xyphendoy1 ( 67, 3 ) = 0 +xyphendoy1 ( 67, 4 ) = 2 +xyphendoy1 ( 67, 5 ) = 2 +xyphendoy1 ( 67, 6 ) = 2 +xyphendoy1 ( 67, 7 ) = 2 +xyphendoy1 ( 67, 8 ) = 2 + + ! xlat -22.7500000000000 +greenupxy ( 66, 1 ) = 326 +greenupxy ( 66, 2 ) = 292 +greenupxy ( 66, 3 ) = 17 +greenupxy ( 66, 4 ) = 319 +greenupxy ( 66, 5 ) = 319 +greenupxy ( 66, 6 ) = 319 +greenupxy ( 66, 7 ) = 292 +greenupxy ( 66, 8 ) = 292 +fallxy ( 66, 1 ) = 106 +fallxy ( 66, 2 ) = 81 +fallxy ( 66, 3 ) = 107 +fallxy ( 66, 4 ) = 88 +fallxy ( 66, 5 ) = 88 +fallxy ( 66, 6 ) = 88 +fallxy ( 66, 7 ) = 82 +fallxy ( 66, 8 ) = 82 +xyphendoy1 ( 66, 1 ) = 2 +xyphendoy1 ( 66, 2 ) = 2 +xyphendoy1 ( 66, 3 ) = 0 +xyphendoy1 ( 66, 4 ) = 2 +xyphendoy1 ( 66, 5 ) = 2 +xyphendoy1 ( 66, 6 ) = 2 +xyphendoy1 ( 66, 7 ) = 2 +xyphendoy1 ( 66, 8 ) = 2 + + ! xlat -23.2500000000000 +greenupxy ( 65, 1 ) = 321 +greenupxy ( 65, 2 ) = 290 +greenupxy ( 65, 3 ) = 20 +greenupxy ( 65, 4 ) = 316 +greenupxy ( 65, 5 ) = 316 +greenupxy ( 65, 6 ) = 316 +greenupxy ( 65, 7 ) = 293 +greenupxy ( 65, 8 ) = 293 +fallxy ( 65, 1 ) = 107 +fallxy ( 65, 2 ) = 81 +fallxy ( 65, 3 ) = 111 +fallxy ( 65, 4 ) = 88 +fallxy ( 65, 5 ) = 88 +fallxy ( 65, 6 ) = 88 +fallxy ( 65, 7 ) = 82 +fallxy ( 65, 8 ) = 82 +xyphendoy1 ( 65, 1 ) = 2 +xyphendoy1 ( 65, 2 ) = 2 +xyphendoy1 ( 65, 3 ) = 0 +xyphendoy1 ( 65, 4 ) = 2 +xyphendoy1 ( 65, 5 ) = 2 +xyphendoy1 ( 65, 6 ) = 2 +xyphendoy1 ( 65, 7 ) = 2 +xyphendoy1 ( 65, 8 ) = 2 + + ! xlat -23.7500000000000 +greenupxy ( 64, 1 ) = 320 +greenupxy ( 64, 2 ) = 289 +greenupxy ( 64, 3 ) = 23 +greenupxy ( 64, 4 ) = 313 +greenupxy ( 64, 5 ) = 313 +greenupxy ( 64, 6 ) = 313 +greenupxy ( 64, 7 ) = 291 +greenupxy ( 64, 8 ) = 291 +fallxy ( 64, 1 ) = 108 +fallxy ( 64, 2 ) = 81 +fallxy ( 64, 3 ) = 114 +fallxy ( 64, 4 ) = 89 +fallxy ( 64, 5 ) = 89 +fallxy ( 64, 6 ) = 89 +fallxy ( 64, 7 ) = 82 +fallxy ( 64, 8 ) = 82 +xyphendoy1 ( 64, 1 ) = 2 +xyphendoy1 ( 64, 2 ) = 2 +xyphendoy1 ( 64, 3 ) = 0 +xyphendoy1 ( 64, 4 ) = 2 +xyphendoy1 ( 64, 5 ) = 2 +xyphendoy1 ( 64, 6 ) = 2 +xyphendoy1 ( 64, 7 ) = 2 +xyphendoy1 ( 64, 8 ) = 2 + + ! xlat -24.2500000000000 +greenupxy ( 63, 1 ) = 321 +greenupxy ( 63, 2 ) = 288 +greenupxy ( 63, 3 ) = 26 +greenupxy ( 63, 4 ) = 310 +greenupxy ( 63, 5 ) = 310 +greenupxy ( 63, 6 ) = 310 +greenupxy ( 63, 7 ) = 290 +greenupxy ( 63, 8 ) = 290 +fallxy ( 63, 1 ) = 109 +fallxy ( 63, 2 ) = 81 +fallxy ( 63, 3 ) = 119 +fallxy ( 63, 4 ) = 90 +fallxy ( 63, 5 ) = 90 +fallxy ( 63, 6 ) = 90 +fallxy ( 63, 7 ) = 82 +fallxy ( 63, 8 ) = 82 +xyphendoy1 ( 63, 1 ) = 2 +xyphendoy1 ( 63, 2 ) = 2 +xyphendoy1 ( 63, 3 ) = 0 +xyphendoy1 ( 63, 4 ) = 2 +xyphendoy1 ( 63, 5 ) = 2 +xyphendoy1 ( 63, 6 ) = 2 +xyphendoy1 ( 63, 7 ) = 2 +xyphendoy1 ( 63, 8 ) = 2 + + ! xlat -24.7500000000000 +greenupxy ( 62, 1 ) = 313 +greenupxy ( 62, 2 ) = 286 +greenupxy ( 62, 3 ) = 29 +greenupxy ( 62, 4 ) = 307 +greenupxy ( 62, 5 ) = 307 +greenupxy ( 62, 6 ) = 307 +greenupxy ( 62, 7 ) = 289 +greenupxy ( 62, 8 ) = 289 +fallxy ( 62, 1 ) = 104 +fallxy ( 62, 2 ) = 80 +fallxy ( 62, 3 ) = 125 +fallxy ( 62, 4 ) = 90 +fallxy ( 62, 5 ) = 90 +fallxy ( 62, 6 ) = 90 +fallxy ( 62, 7 ) = 82 +fallxy ( 62, 8 ) = 82 +xyphendoy1 ( 62, 1 ) = 2 +xyphendoy1 ( 62, 2 ) = 2 +xyphendoy1 ( 62, 3 ) = 0 +xyphendoy1 ( 62, 4 ) = 2 +xyphendoy1 ( 62, 5 ) = 2 +xyphendoy1 ( 62, 6 ) = 2 +xyphendoy1 ( 62, 7 ) = 2 +xyphendoy1 ( 62, 8 ) = 2 + + ! xlat -25.2500000000000 +greenupxy ( 61, 1 ) = 305 +greenupxy ( 61, 2 ) = 285 +greenupxy ( 61, 3 ) = 33 +greenupxy ( 61, 4 ) = 304 +greenupxy ( 61, 5 ) = 304 +greenupxy ( 61, 6 ) = 304 +greenupxy ( 61, 7 ) = 281 +greenupxy ( 61, 8 ) = 281 +fallxy ( 61, 1 ) = 106 +fallxy ( 61, 2 ) = 80 +fallxy ( 61, 3 ) = 131 +fallxy ( 61, 4 ) = 91 +fallxy ( 61, 5 ) = 91 +fallxy ( 61, 6 ) = 91 +fallxy ( 61, 7 ) = 82 +fallxy ( 61, 8 ) = 82 +xyphendoy1 ( 61, 1 ) = 2 +xyphendoy1 ( 61, 2 ) = 2 +xyphendoy1 ( 61, 3 ) = 0 +xyphendoy1 ( 61, 4 ) = 2 +xyphendoy1 ( 61, 5 ) = 2 +xyphendoy1 ( 61, 6 ) = 2 +xyphendoy1 ( 61, 7 ) = 2 +xyphendoy1 ( 61, 8 ) = 2 + + ! xlat -25.7500000000000 +greenupxy ( 60, 1 ) = 291 +greenupxy ( 60, 2 ) = 283 +greenupxy ( 60, 3 ) = 37 +greenupxy ( 60, 4 ) = 301 +greenupxy ( 60, 5 ) = 301 +greenupxy ( 60, 6 ) = 301 +greenupxy ( 60, 7 ) = 274 +greenupxy ( 60, 8 ) = 274 +fallxy ( 60, 1 ) = 106 +fallxy ( 60, 2 ) = 80 +fallxy ( 60, 3 ) = 138 +fallxy ( 60, 4 ) = 91 +fallxy ( 60, 5 ) = 91 +fallxy ( 60, 6 ) = 91 +fallxy ( 60, 7 ) = 81 +fallxy ( 60, 8 ) = 81 +xyphendoy1 ( 60, 1 ) = 2 +xyphendoy1 ( 60, 2 ) = 2 +xyphendoy1 ( 60, 3 ) = 0 +xyphendoy1 ( 60, 4 ) = 2 +xyphendoy1 ( 60, 5 ) = 2 +xyphendoy1 ( 60, 6 ) = 2 +xyphendoy1 ( 60, 7 ) = 2 +xyphendoy1 ( 60, 8 ) = 2 + + ! xlat -26.2500000000000 +greenupxy ( 59, 1 ) = 291 +greenupxy ( 59, 2 ) = 282 +greenupxy ( 59, 3 ) = 41 +greenupxy ( 59, 4 ) = 298 +greenupxy ( 59, 5 ) = 298 +greenupxy ( 59, 6 ) = 298 +greenupxy ( 59, 7 ) = 266 +greenupxy ( 59, 8 ) = 266 +fallxy ( 59, 1 ) = 102 +fallxy ( 59, 2 ) = 79 +fallxy ( 59, 3 ) = 145 +fallxy ( 59, 4 ) = 92 +fallxy ( 59, 5 ) = 92 +fallxy ( 59, 6 ) = 92 +fallxy ( 59, 7 ) = 81 +fallxy ( 59, 8 ) = 81 +xyphendoy1 ( 59, 1 ) = 2 +xyphendoy1 ( 59, 2 ) = 2 +xyphendoy1 ( 59, 3 ) = 0 +xyphendoy1 ( 59, 4 ) = 2 +xyphendoy1 ( 59, 5 ) = 2 +xyphendoy1 ( 59, 6 ) = 2 +xyphendoy1 ( 59, 7 ) = 2 +xyphendoy1 ( 59, 8 ) = 2 + + ! xlat -26.7500000000000 +greenupxy ( 58, 1 ) = 289 +greenupxy ( 58, 2 ) = 281 +greenupxy ( 58, 3 ) = 47 +greenupxy ( 58, 4 ) = 296 +greenupxy ( 58, 5 ) = 296 +greenupxy ( 58, 6 ) = 296 +greenupxy ( 58, 7 ) = 257 +greenupxy ( 58, 8 ) = 257 +fallxy ( 58, 1 ) = 105 +fallxy ( 58, 2 ) = 79 +fallxy ( 58, 3 ) = 154 +fallxy ( 58, 4 ) = 93 +fallxy ( 58, 5 ) = 93 +fallxy ( 58, 6 ) = 93 +fallxy ( 58, 7 ) = 81 +fallxy ( 58, 8 ) = 81 +xyphendoy1 ( 58, 1 ) = 2 +xyphendoy1 ( 58, 2 ) = 2 +xyphendoy1 ( 58, 3 ) = 0 +xyphendoy1 ( 58, 4 ) = 2 +xyphendoy1 ( 58, 5 ) = 2 +xyphendoy1 ( 58, 6 ) = 2 +xyphendoy1 ( 58, 7 ) = 2 +xyphendoy1 ( 58, 8 ) = 2 + + ! xlat -27.2500000000000 +greenupxy ( 57, 1 ) = 292 +greenupxy ( 57, 2 ) = 280 +greenupxy ( 57, 3 ) = 52 +greenupxy ( 57, 4 ) = 294 +greenupxy ( 57, 5 ) = 294 +greenupxy ( 57, 6 ) = 294 +greenupxy ( 57, 7 ) = 249 +greenupxy ( 57, 8 ) = 249 +fallxy ( 57, 1 ) = 105 +fallxy ( 57, 2 ) = 79 +fallxy ( 57, 3 ) = 161 +fallxy ( 57, 4 ) = 93 +fallxy ( 57, 5 ) = 93 +fallxy ( 57, 6 ) = 93 +fallxy ( 57, 7 ) = 81 +fallxy ( 57, 8 ) = 81 +xyphendoy1 ( 57, 1 ) = 2 +xyphendoy1 ( 57, 2 ) = 2 +xyphendoy1 ( 57, 3 ) = 0 +xyphendoy1 ( 57, 4 ) = 2 +xyphendoy1 ( 57, 5 ) = 2 +xyphendoy1 ( 57, 6 ) = 2 +xyphendoy1 ( 57, 7 ) = 2 +xyphendoy1 ( 57, 8 ) = 2 + + ! xlat -27.7500000000000 +greenupxy ( 56, 1 ) = 292 +greenupxy ( 56, 2 ) = 279 +greenupxy ( 56, 3 ) = 58 +greenupxy ( 56, 4 ) = 292 +greenupxy ( 56, 5 ) = 292 +greenupxy ( 56, 6 ) = 292 +greenupxy ( 56, 7 ) = 241 +greenupxy ( 56, 8 ) = 241 +fallxy ( 56, 1 ) = 105 +fallxy ( 56, 2 ) = 79 +fallxy ( 56, 3 ) = 169 +fallxy ( 56, 4 ) = 93 +fallxy ( 56, 5 ) = 93 +fallxy ( 56, 6 ) = 93 +fallxy ( 56, 7 ) = 81 +fallxy ( 56, 8 ) = 81 +xyphendoy1 ( 56, 1 ) = 2 +xyphendoy1 ( 56, 2 ) = 2 +xyphendoy1 ( 56, 3 ) = 0 +xyphendoy1 ( 56, 4 ) = 2 +xyphendoy1 ( 56, 5 ) = 2 +xyphendoy1 ( 56, 6 ) = 2 +xyphendoy1 ( 56, 7 ) = 2 +xyphendoy1 ( 56, 8 ) = 2 + + ! xlat -28.2500000000000 +greenupxy ( 55, 1 ) = 292 +greenupxy ( 55, 2 ) = 279 +greenupxy ( 55, 3 ) = 64 +greenupxy ( 55, 4 ) = 287 +greenupxy ( 55, 5 ) = 287 +greenupxy ( 55, 6 ) = 287 +greenupxy ( 55, 7 ) = 233 +greenupxy ( 55, 8 ) = 233 +fallxy ( 55, 1 ) = 102 +fallxy ( 55, 2 ) = 78 +fallxy ( 55, 3 ) = 179 +fallxy ( 55, 4 ) = 93 +fallxy ( 55, 5 ) = 93 +fallxy ( 55, 6 ) = 93 +fallxy ( 55, 7 ) = 82 +fallxy ( 55, 8 ) = 82 +xyphendoy1 ( 55, 1 ) = 2 +xyphendoy1 ( 55, 2 ) = 2 +xyphendoy1 ( 55, 3 ) = 0 +xyphendoy1 ( 55, 4 ) = 2 +xyphendoy1 ( 55, 5 ) = 2 +xyphendoy1 ( 55, 6 ) = 2 +xyphendoy1 ( 55, 7 ) = 2 +xyphendoy1 ( 55, 8 ) = 2 + + ! xlat -28.7500000000000 +greenupxy ( 54, 1 ) = 292 +greenupxy ( 54, 2 ) = 278 +greenupxy ( 54, 3 ) = 70 +greenupxy ( 54, 4 ) = 286 +greenupxy ( 54, 5 ) = 286 +greenupxy ( 54, 6 ) = 286 +greenupxy ( 54, 7 ) = 225 +greenupxy ( 54, 8 ) = 225 +fallxy ( 54, 1 ) = 102 +fallxy ( 54, 2 ) = 78 +fallxy ( 54, 3 ) = 188 +fallxy ( 54, 4 ) = 94 +fallxy ( 54, 5 ) = 94 +fallxy ( 54, 6 ) = 94 +fallxy ( 54, 7 ) = 83 +fallxy ( 54, 8 ) = 83 +xyphendoy1 ( 54, 1 ) = 2 +xyphendoy1 ( 54, 2 ) = 2 +xyphendoy1 ( 54, 3 ) = 0 +xyphendoy1 ( 54, 4 ) = 2 +xyphendoy1 ( 54, 5 ) = 2 +xyphendoy1 ( 54, 6 ) = 2 +xyphendoy1 ( 54, 7 ) = 2 +xyphendoy1 ( 54, 8 ) = 2 + + ! xlat -29.2500000000000 +greenupxy ( 53, 1 ) = 297 +greenupxy ( 53, 2 ) = 278 +greenupxy ( 53, 3 ) = 75 +greenupxy ( 53, 4 ) = 284 +greenupxy ( 53, 5 ) = 284 +greenupxy ( 53, 6 ) = 284 +greenupxy ( 53, 7 ) = 218 +greenupxy ( 53, 8 ) = 218 +fallxy ( 53, 1 ) = 97 +fallxy ( 53, 2 ) = 78 +fallxy ( 53, 3 ) = 196 +fallxy ( 53, 4 ) = 93 +fallxy ( 53, 5 ) = 93 +fallxy ( 53, 6 ) = 93 +fallxy ( 53, 7 ) = 83 +fallxy ( 53, 8 ) = 83 +xyphendoy1 ( 53, 1 ) = 2 +xyphendoy1 ( 53, 2 ) = 2 +xyphendoy1 ( 53, 3 ) = 0 +xyphendoy1 ( 53, 4 ) = 2 +xyphendoy1 ( 53, 5 ) = 2 +xyphendoy1 ( 53, 6 ) = 2 +xyphendoy1 ( 53, 7 ) = 2 +xyphendoy1 ( 53, 8 ) = 2 + + ! xlat -29.7500000000000 +greenupxy ( 52, 1 ) = 290 +greenupxy ( 52, 2 ) = 277 +greenupxy ( 52, 3 ) = 79 +greenupxy ( 52, 4 ) = 281 +greenupxy ( 52, 5 ) = 281 +greenupxy ( 52, 6 ) = 281 +greenupxy ( 52, 7 ) = 210 +greenupxy ( 52, 8 ) = 210 +fallxy ( 52, 1 ) = 96 +fallxy ( 52, 2 ) = 77 +fallxy ( 52, 3 ) = 204 +fallxy ( 52, 4 ) = 93 +fallxy ( 52, 5 ) = 93 +fallxy ( 52, 6 ) = 93 +fallxy ( 52, 7 ) = 82 +fallxy ( 52, 8 ) = 82 +xyphendoy1 ( 52, 1 ) = 2 +xyphendoy1 ( 52, 2 ) = 2 +xyphendoy1 ( 52, 3 ) = 0 +xyphendoy1 ( 52, 4 ) = 2 +xyphendoy1 ( 52, 5 ) = 2 +xyphendoy1 ( 52, 6 ) = 2 +xyphendoy1 ( 52, 7 ) = 2 +xyphendoy1 ( 52, 8 ) = 2 + + ! xlat -30.2500000000000 +greenupxy ( 51, 1 ) = 290 +greenupxy ( 51, 2 ) = 276 +greenupxy ( 51, 3 ) = 82 +greenupxy ( 51, 4 ) = 280 +greenupxy ( 51, 5 ) = 280 +greenupxy ( 51, 6 ) = 280 +greenupxy ( 51, 7 ) = 203 +greenupxy ( 51, 8 ) = 203 +fallxy ( 51, 1 ) = 94 +fallxy ( 51, 2 ) = 77 +fallxy ( 51, 3 ) = 211 +fallxy ( 51, 4 ) = 92 +fallxy ( 51, 5 ) = 92 +fallxy ( 51, 6 ) = 92 +fallxy ( 51, 7 ) = 80 +fallxy ( 51, 8 ) = 80 +xyphendoy1 ( 51, 1 ) = 2 +xyphendoy1 ( 51, 2 ) = 2 +xyphendoy1 ( 51, 3 ) = 0 +xyphendoy1 ( 51, 4 ) = 2 +xyphendoy1 ( 51, 5 ) = 2 +xyphendoy1 ( 51, 6 ) = 2 +xyphendoy1 ( 51, 7 ) = 2 +xyphendoy1 ( 51, 8 ) = 2 + + ! xlat -30.7500000000000 +greenupxy ( 50, 1 ) = 285 +greenupxy ( 50, 2 ) = 275 +greenupxy ( 50, 3 ) = 85 +greenupxy ( 50, 4 ) = 280 +greenupxy ( 50, 5 ) = 280 +greenupxy ( 50, 6 ) = 280 +greenupxy ( 50, 7 ) = 196 +greenupxy ( 50, 8 ) = 196 +fallxy ( 50, 1 ) = 90 +fallxy ( 50, 2 ) = 77 +fallxy ( 50, 3 ) = 216 +fallxy ( 50, 4 ) = 91 +fallxy ( 50, 5 ) = 91 +fallxy ( 50, 6 ) = 91 +fallxy ( 50, 7 ) = 83 +fallxy ( 50, 8 ) = 83 +xyphendoy1 ( 50, 1 ) = 2 +xyphendoy1 ( 50, 2 ) = 2 +xyphendoy1 ( 50, 3 ) = 0 +xyphendoy1 ( 50, 4 ) = 2 +xyphendoy1 ( 50, 5 ) = 2 +xyphendoy1 ( 50, 6 ) = 2 +xyphendoy1 ( 50, 7 ) = 2 +xyphendoy1 ( 50, 8 ) = 2 + + ! xlat -31.2500000000000 +greenupxy ( 49, 1 ) = 284 +greenupxy ( 49, 2 ) = 274 +greenupxy ( 49, 3 ) = 81 +greenupxy ( 49, 4 ) = 281 +greenupxy ( 49, 5 ) = 281 +greenupxy ( 49, 6 ) = 281 +greenupxy ( 49, 7 ) = 188 +greenupxy ( 49, 8 ) = 188 +fallxy ( 49, 1 ) = 88 +fallxy ( 49, 2 ) = 76 +fallxy ( 49, 3 ) = 213 +fallxy ( 49, 4 ) = 91 +fallxy ( 49, 5 ) = 91 +fallxy ( 49, 6 ) = 91 +fallxy ( 49, 7 ) = 86 +fallxy ( 49, 8 ) = 86 +xyphendoy1 ( 49, 1 ) = 2 +xyphendoy1 ( 49, 2 ) = 2 +xyphendoy1 ( 49, 3 ) = 0 +xyphendoy1 ( 49, 4 ) = 2 +xyphendoy1 ( 49, 5 ) = 2 +xyphendoy1 ( 49, 6 ) = 2 +xyphendoy1 ( 49, 7 ) = 2 +xyphendoy1 ( 49, 8 ) = 2 + + ! xlat -31.7500000000000 +greenupxy ( 48, 1 ) = 282 +greenupxy ( 48, 2 ) = 273 +greenupxy ( 48, 3 ) = 75 +greenupxy ( 48, 4 ) = 280 +greenupxy ( 48, 5 ) = 280 +greenupxy ( 48, 6 ) = 280 +greenupxy ( 48, 7 ) = 180 +greenupxy ( 48, 8 ) = 180 +fallxy ( 48, 1 ) = 85 +fallxy ( 48, 2 ) = 76 +fallxy ( 48, 3 ) = 212 +fallxy ( 48, 4 ) = 90 +fallxy ( 48, 5 ) = 90 +fallxy ( 48, 6 ) = 90 +fallxy ( 48, 7 ) = 83 +fallxy ( 48, 8 ) = 83 +xyphendoy1 ( 48, 1 ) = 2 +xyphendoy1 ( 48, 2 ) = 2 +xyphendoy1 ( 48, 3 ) = 0 +xyphendoy1 ( 48, 4 ) = 2 +xyphendoy1 ( 48, 5 ) = 2 +xyphendoy1 ( 48, 6 ) = 2 +xyphendoy1 ( 48, 7 ) = 2 +xyphendoy1 ( 48, 8 ) = 2 + + ! xlat -32.2500000000000 +greenupxy ( 47, 1 ) = 279 +greenupxy ( 47, 2 ) = 272 +greenupxy ( 47, 3 ) = 68 +greenupxy ( 47, 4 ) = 279 +greenupxy ( 47, 5 ) = 279 +greenupxy ( 47, 6 ) = 279 +greenupxy ( 47, 7 ) = 174 +greenupxy ( 47, 8 ) = 174 +fallxy ( 47, 1 ) = 81 +fallxy ( 47, 2 ) = 75 +fallxy ( 47, 3 ) = 211 +fallxy ( 47, 4 ) = 89 +fallxy ( 47, 5 ) = 89 +fallxy ( 47, 6 ) = 89 +fallxy ( 47, 7 ) = 83 +fallxy ( 47, 8 ) = 83 +xyphendoy1 ( 47, 1 ) = 2 +xyphendoy1 ( 47, 2 ) = 2 +xyphendoy1 ( 47, 3 ) = 0 +xyphendoy1 ( 47, 4 ) = 2 +xyphendoy1 ( 47, 5 ) = 2 +xyphendoy1 ( 47, 6 ) = 2 +xyphendoy1 ( 47, 7 ) = 2 +xyphendoy1 ( 47, 8 ) = 2 + + ! xlat -32.7500000000000 +greenupxy ( 46, 1 ) = 273 +greenupxy ( 46, 2 ) = 270 +greenupxy ( 46, 3 ) = 61 +greenupxy ( 46, 4 ) = 276 +greenupxy ( 46, 5 ) = 276 +greenupxy ( 46, 6 ) = 276 +greenupxy ( 46, 7 ) = 173 +greenupxy ( 46, 8 ) = 173 +fallxy ( 46, 1 ) = 77 +fallxy ( 46, 2 ) = 73 +fallxy ( 46, 3 ) = 208 +fallxy ( 46, 4 ) = 88 +fallxy ( 46, 5 ) = 88 +fallxy ( 46, 6 ) = 88 +fallxy ( 46, 7 ) = 83 +fallxy ( 46, 8 ) = 83 +xyphendoy1 ( 46, 1 ) = 2 +xyphendoy1 ( 46, 2 ) = 2 +xyphendoy1 ( 46, 3 ) = 0 +xyphendoy1 ( 46, 4 ) = 2 +xyphendoy1 ( 46, 5 ) = 2 +xyphendoy1 ( 46, 6 ) = 2 +xyphendoy1 ( 46, 7 ) = 2 +xyphendoy1 ( 46, 8 ) = 2 + + ! xlat -33.2500000000000 +greenupxy ( 45, 1 ) = 273 +greenupxy ( 45, 2 ) = 269 +greenupxy ( 45, 3 ) = 52 +greenupxy ( 45, 4 ) = 274 +greenupxy ( 45, 5 ) = 274 +greenupxy ( 45, 6 ) = 274 +greenupxy ( 45, 7 ) = 172 +greenupxy ( 45, 8 ) = 172 +fallxy ( 45, 1 ) = 79 +fallxy ( 45, 2 ) = 73 +fallxy ( 45, 3 ) = 207 +fallxy ( 45, 4 ) = 87 +fallxy ( 45, 5 ) = 87 +fallxy ( 45, 6 ) = 87 +fallxy ( 45, 7 ) = 83 +fallxy ( 45, 8 ) = 83 +xyphendoy1 ( 45, 1 ) = 2 +xyphendoy1 ( 45, 2 ) = 2 +xyphendoy1 ( 45, 3 ) = 0 +xyphendoy1 ( 45, 4 ) = 2 +xyphendoy1 ( 45, 5 ) = 2 +xyphendoy1 ( 45, 6 ) = 2 +xyphendoy1 ( 45, 7 ) = 2 +xyphendoy1 ( 45, 8 ) = 2 + + ! xlat -33.7500000000000 +greenupxy ( 44, 1 ) = 274 +greenupxy ( 44, 2 ) = 269 +greenupxy ( 44, 3 ) = 41 +greenupxy ( 44, 4 ) = 271 +greenupxy ( 44, 5 ) = 271 +greenupxy ( 44, 6 ) = 271 +greenupxy ( 44, 7 ) = 177 +greenupxy ( 44, 8 ) = 177 +fallxy ( 44, 1 ) = 73 +fallxy ( 44, 2 ) = 73 +fallxy ( 44, 3 ) = 199 +fallxy ( 44, 4 ) = 82 +fallxy ( 44, 5 ) = 82 +fallxy ( 44, 6 ) = 82 +fallxy ( 44, 7 ) = 83 +fallxy ( 44, 8 ) = 83 +xyphendoy1 ( 44, 1 ) = 2 +xyphendoy1 ( 44, 2 ) = 2 +xyphendoy1 ( 44, 3 ) = 0 +xyphendoy1 ( 44, 4 ) = 2 +xyphendoy1 ( 44, 5 ) = 2 +xyphendoy1 ( 44, 6 ) = 2 +xyphendoy1 ( 44, 7 ) = 2 +xyphendoy1 ( 44, 8 ) = 2 + + ! xlat -34.2500000000000 +greenupxy ( 43, 1 ) = 277 +greenupxy ( 43, 2 ) = 268 +greenupxy ( 43, 3 ) = 33 +greenupxy ( 43, 4 ) = 270 +greenupxy ( 43, 5 ) = 270 +greenupxy ( 43, 6 ) = 270 +greenupxy ( 43, 7 ) = 182 +greenupxy ( 43, 8 ) = 182 +fallxy ( 43, 1 ) = 73 +fallxy ( 43, 2 ) = 73 +fallxy ( 43, 3 ) = 198 +fallxy ( 43, 4 ) = 81 +fallxy ( 43, 5 ) = 81 +fallxy ( 43, 6 ) = 81 +fallxy ( 43, 7 ) = 83 +fallxy ( 43, 8 ) = 83 +xyphendoy1 ( 43, 1 ) = 2 +xyphendoy1 ( 43, 2 ) = 2 +xyphendoy1 ( 43, 3 ) = 0 +xyphendoy1 ( 43, 4 ) = 2 +xyphendoy1 ( 43, 5 ) = 2 +xyphendoy1 ( 43, 6 ) = 2 +xyphendoy1 ( 43, 7 ) = 2 +xyphendoy1 ( 43, 8 ) = 2 + + ! xlat -34.7500000000000 +greenupxy ( 42, 1 ) = 270 +greenupxy ( 42, 2 ) = 267 +greenupxy ( 42, 3 ) = 23 +greenupxy ( 42, 4 ) = 262 +greenupxy ( 42, 5 ) = 262 +greenupxy ( 42, 6 ) = 262 +greenupxy ( 42, 7 ) = 187 +greenupxy ( 42, 8 ) = 187 +fallxy ( 42, 1 ) = 69 +fallxy ( 42, 2 ) = 72 +fallxy ( 42, 3 ) = 197 +fallxy ( 42, 4 ) = 79 +fallxy ( 42, 5 ) = 79 +fallxy ( 42, 6 ) = 79 +fallxy ( 42, 7 ) = 83 +fallxy ( 42, 8 ) = 83 +xyphendoy1 ( 42, 1 ) = 2 +xyphendoy1 ( 42, 2 ) = 2 +xyphendoy1 ( 42, 3 ) = 0 +xyphendoy1 ( 42, 4 ) = 2 +xyphendoy1 ( 42, 5 ) = 2 +xyphendoy1 ( 42, 6 ) = 2 +xyphendoy1 ( 42, 7 ) = 2 +xyphendoy1 ( 42, 8 ) = 2 + + ! xlat -35.2500000000000 +greenupxy ( 41, 1 ) = 273 +greenupxy ( 41, 2 ) = 265 +greenupxy ( 41, 3 ) = 14 +greenupxy ( 41, 4 ) = 261 +greenupxy ( 41, 5 ) = 261 +greenupxy ( 41, 6 ) = 261 +greenupxy ( 41, 7 ) = 193 +greenupxy ( 41, 8 ) = 193 +fallxy ( 41, 1 ) = 68 +fallxy ( 41, 2 ) = 69 +fallxy ( 41, 3 ) = 193 +fallxy ( 41, 4 ) = 75 +fallxy ( 41, 5 ) = 75 +fallxy ( 41, 6 ) = 75 +fallxy ( 41, 7 ) = 21 +fallxy ( 41, 8 ) = 21 +xyphendoy1 ( 41, 1 ) = 2 +xyphendoy1 ( 41, 2 ) = 2 +xyphendoy1 ( 41, 3 ) = 0 +xyphendoy1 ( 41, 4 ) = 2 +xyphendoy1 ( 41, 5 ) = 2 +xyphendoy1 ( 41, 6 ) = 2 +xyphendoy1 ( 41, 7 ) = 2 +xyphendoy1 ( 41, 8 ) = 2 + + ! xlat -35.7500000000000 +greenupxy ( 40, 1 ) = 272 +greenupxy ( 40, 2 ) = 264 +greenupxy ( 40, 3 ) = 7 +greenupxy ( 40, 4 ) = 261 +greenupxy ( 40, 5 ) = 261 +greenupxy ( 40, 6 ) = 261 +greenupxy ( 40, 7 ) = 194 +greenupxy ( 40, 8 ) = 194 +fallxy ( 40, 1 ) = 68 +fallxy ( 40, 2 ) = 64 +fallxy ( 40, 3 ) = 191 +fallxy ( 40, 4 ) = 74 +fallxy ( 40, 5 ) = 74 +fallxy ( 40, 6 ) = 74 +fallxy ( 40, 7 ) = 21 +fallxy ( 40, 8 ) = 21 +xyphendoy1 ( 40, 1 ) = 2 +xyphendoy1 ( 40, 2 ) = 2 +xyphendoy1 ( 40, 3 ) = 0 +xyphendoy1 ( 40, 4 ) = 2 +xyphendoy1 ( 40, 5 ) = 2 +xyphendoy1 ( 40, 6 ) = 2 +xyphendoy1 ( 40, 7 ) = 2 +xyphendoy1 ( 40, 8 ) = 2 + + ! xlat -36.2500000000000 +greenupxy ( 39, 1 ) = 276 +greenupxy ( 39, 2 ) = 262 +greenupxy ( 39, 3 ) = 363 +greenupxy ( 39, 4 ) = 259 +greenupxy ( 39, 5 ) = 259 +greenupxy ( 39, 6 ) = 259 +greenupxy ( 39, 7 ) = 196 +greenupxy ( 39, 8 ) = 196 +fallxy ( 39, 1 ) = 68 +fallxy ( 39, 2 ) = 59 +fallxy ( 39, 3 ) = 187 +fallxy ( 39, 4 ) = 72 +fallxy ( 39, 5 ) = 72 +fallxy ( 39, 6 ) = 72 +fallxy ( 39, 7 ) = 21 +fallxy ( 39, 8 ) = 21 +xyphendoy1 ( 39, 1 ) = 2 +xyphendoy1 ( 39, 2 ) = 2 +xyphendoy1 ( 39, 3 ) = 2 +xyphendoy1 ( 39, 4 ) = 2 +xyphendoy1 ( 39, 5 ) = 2 +xyphendoy1 ( 39, 6 ) = 2 +xyphendoy1 ( 39, 7 ) = 2 +xyphendoy1 ( 39, 8 ) = 2 + + ! xlat -36.7500000000000 +greenupxy ( 38, 1 ) = 272 +greenupxy ( 38, 2 ) = 259 +greenupxy ( 38, 3 ) = 347 +greenupxy ( 38, 4 ) = 262 +greenupxy ( 38, 5 ) = 262 +greenupxy ( 38, 6 ) = 262 +greenupxy ( 38, 7 ) = 198 +greenupxy ( 38, 8 ) = 198 +fallxy ( 38, 1 ) = 68 +fallxy ( 38, 2 ) = 58 +fallxy ( 38, 3 ) = 181 +fallxy ( 38, 4 ) = 70 +fallxy ( 38, 5 ) = 70 +fallxy ( 38, 6 ) = 70 +fallxy ( 38, 7 ) = 21 +fallxy ( 38, 8 ) = 21 +xyphendoy1 ( 38, 1 ) = 2 +xyphendoy1 ( 38, 2 ) = 2 +xyphendoy1 ( 38, 3 ) = 2 +xyphendoy1 ( 38, 4 ) = 2 +xyphendoy1 ( 38, 5 ) = 2 +xyphendoy1 ( 38, 6 ) = 2 +xyphendoy1 ( 38, 7 ) = 2 +xyphendoy1 ( 38, 8 ) = 2 + + ! xlat -37.2500000000000 +greenupxy ( 37, 1 ) = 273 +greenupxy ( 37, 2 ) = 257 +greenupxy ( 37, 3 ) = 329 +greenupxy ( 37, 4 ) = 260 +greenupxy ( 37, 5 ) = 260 +greenupxy ( 37, 6 ) = 260 +greenupxy ( 37, 7 ) = 199 +greenupxy ( 37, 8 ) = 199 +fallxy ( 37, 1 ) = 67 +fallxy ( 37, 2 ) = 53 +fallxy ( 37, 3 ) = 171 +fallxy ( 37, 4 ) = 68 +fallxy ( 37, 5 ) = 68 +fallxy ( 37, 6 ) = 68 +fallxy ( 37, 7 ) = 21 +fallxy ( 37, 8 ) = 21 +xyphendoy1 ( 37, 1 ) = 2 +xyphendoy1 ( 37, 2 ) = 2 +xyphendoy1 ( 37, 3 ) = 2 +xyphendoy1 ( 37, 4 ) = 2 +xyphendoy1 ( 37, 5 ) = 2 +xyphendoy1 ( 37, 6 ) = 2 +xyphendoy1 ( 37, 7 ) = 2 +xyphendoy1 ( 37, 8 ) = 2 + + ! xlat -37.7500000000000 +greenupxy ( 36, 1 ) = 270 +greenupxy ( 36, 2 ) = 255 +greenupxy ( 36, 3 ) = 310 +greenupxy ( 36, 4 ) = 258 +greenupxy ( 36, 5 ) = 258 +greenupxy ( 36, 6 ) = 258 +greenupxy ( 36, 7 ) = 199 +greenupxy ( 36, 8 ) = 199 +fallxy ( 36, 1 ) = 69 +fallxy ( 36, 2 ) = 48 +fallxy ( 36, 3 ) = 160 +fallxy ( 36, 4 ) = 61 +fallxy ( 36, 5 ) = 61 +fallxy ( 36, 6 ) = 61 +fallxy ( 36, 7 ) = 21 +fallxy ( 36, 8 ) = 21 +xyphendoy1 ( 36, 1 ) = 2 +xyphendoy1 ( 36, 2 ) = 2 +xyphendoy1 ( 36, 3 ) = 2 +xyphendoy1 ( 36, 4 ) = 2 +xyphendoy1 ( 36, 5 ) = 2 +xyphendoy1 ( 36, 6 ) = 2 +xyphendoy1 ( 36, 7 ) = 2 +xyphendoy1 ( 36, 8 ) = 2 + + ! xlat -38.2500000000000 +greenupxy ( 35, 1 ) = 274 +greenupxy ( 35, 2 ) = 255 +greenupxy ( 35, 3 ) = 307 +greenupxy ( 35, 4 ) = 260 +greenupxy ( 35, 5 ) = 260 +greenupxy ( 35, 6 ) = 260 +greenupxy ( 35, 7 ) = 202 +greenupxy ( 35, 8 ) = 202 +fallxy ( 35, 1 ) = 67 +fallxy ( 35, 2 ) = 45 +fallxy ( 35, 3 ) = 151 +fallxy ( 35, 4 ) = 59 +fallxy ( 35, 5 ) = 59 +fallxy ( 35, 6 ) = 59 +fallxy ( 35, 7 ) = 21 +fallxy ( 35, 8 ) = 21 +xyphendoy1 ( 35, 1 ) = 2 +xyphendoy1 ( 35, 2 ) = 2 +xyphendoy1 ( 35, 3 ) = 2 +xyphendoy1 ( 35, 4 ) = 2 +xyphendoy1 ( 35, 5 ) = 2 +xyphendoy1 ( 35, 6 ) = 2 +xyphendoy1 ( 35, 7 ) = 2 +xyphendoy1 ( 35, 8 ) = 2 + + ! xlat -38.7500000000000 +greenupxy ( 34, 1 ) = 273 +greenupxy ( 34, 2 ) = 253 +greenupxy ( 34, 3 ) = 304 +greenupxy ( 34, 4 ) = 260 +greenupxy ( 34, 5 ) = 260 +greenupxy ( 34, 6 ) = 260 +greenupxy ( 34, 7 ) = 202 +greenupxy ( 34, 8 ) = 202 +fallxy ( 34, 1 ) = 67 +fallxy ( 34, 2 ) = 43 +fallxy ( 34, 3 ) = 141 +fallxy ( 34, 4 ) = 58 +fallxy ( 34, 5 ) = 58 +fallxy ( 34, 6 ) = 58 +fallxy ( 34, 7 ) = 14 +fallxy ( 34, 8 ) = 14 +xyphendoy1 ( 34, 1 ) = 2 +xyphendoy1 ( 34, 2 ) = 2 +xyphendoy1 ( 34, 3 ) = 2 +xyphendoy1 ( 34, 4 ) = 2 +xyphendoy1 ( 34, 5 ) = 2 +xyphendoy1 ( 34, 6 ) = 2 +xyphendoy1 ( 34, 7 ) = 2 +xyphendoy1 ( 34, 8 ) = 2 + + ! xlat -39.2500000000000 +greenupxy ( 33, 1 ) = 274 +greenupxy ( 33, 2 ) = 254 +greenupxy ( 33, 3 ) = 299 +greenupxy ( 33, 4 ) = 255 +greenupxy ( 33, 5 ) = 255 +greenupxy ( 33, 6 ) = 255 +greenupxy ( 33, 7 ) = 201 +greenupxy ( 33, 8 ) = 201 +fallxy ( 33, 1 ) = 66 +fallxy ( 33, 2 ) = 40 +fallxy ( 33, 3 ) = 141 +fallxy ( 33, 4 ) = 56 +fallxy ( 33, 5 ) = 56 +fallxy ( 33, 6 ) = 56 +fallxy ( 33, 7 ) = 14 +fallxy ( 33, 8 ) = 14 +xyphendoy1 ( 33, 1 ) = 2 +xyphendoy1 ( 33, 2 ) = 2 +xyphendoy1 ( 33, 3 ) = 2 +xyphendoy1 ( 33, 4 ) = 2 +xyphendoy1 ( 33, 5 ) = 2 +xyphendoy1 ( 33, 6 ) = 2 +xyphendoy1 ( 33, 7 ) = 2 +xyphendoy1 ( 33, 8 ) = 2 + + ! xlat -39.7500000000000 +greenupxy ( 32, 1 ) = 275 +greenupxy ( 32, 2 ) = 253 +greenupxy ( 32, 3 ) = 293 +greenupxy ( 32, 4 ) = 250 +greenupxy ( 32, 5 ) = 250 +greenupxy ( 32, 6 ) = 250 +greenupxy ( 32, 7 ) = 205 +greenupxy ( 32, 8 ) = 205 +fallxy ( 32, 1 ) = 65 +fallxy ( 32, 2 ) = 38 +fallxy ( 32, 3 ) = 136 +fallxy ( 32, 4 ) = 53 +fallxy ( 32, 5 ) = 53 +fallxy ( 32, 6 ) = 53 +fallxy ( 32, 7 ) = 14 +fallxy ( 32, 8 ) = 14 +xyphendoy1 ( 32, 1 ) = 2 +xyphendoy1 ( 32, 2 ) = 2 +xyphendoy1 ( 32, 3 ) = 2 +xyphendoy1 ( 32, 4 ) = 2 +xyphendoy1 ( 32, 5 ) = 2 +xyphendoy1 ( 32, 6 ) = 2 +xyphendoy1 ( 32, 7 ) = 2 +xyphendoy1 ( 32, 8 ) = 2 + + ! xlat -40.2500000000000 +greenupxy ( 31, 1 ) = 276 +greenupxy ( 31, 2 ) = 254 +greenupxy ( 31, 3 ) = 288 +greenupxy ( 31, 4 ) = 246 +greenupxy ( 31, 5 ) = 246 +greenupxy ( 31, 6 ) = 246 +greenupxy ( 31, 7 ) = 211 +greenupxy ( 31, 8 ) = 211 +fallxy ( 31, 1 ) = 64 +fallxy ( 31, 2 ) = 36 +fallxy ( 31, 3 ) = 133 +fallxy ( 31, 4 ) = 53 +fallxy ( 31, 5 ) = 53 +fallxy ( 31, 6 ) = 53 +fallxy ( 31, 7 ) = 11 +fallxy ( 31, 8 ) = 11 +xyphendoy1 ( 31, 1 ) = 2 +xyphendoy1 ( 31, 2 ) = 2 +xyphendoy1 ( 31, 3 ) = 2 +xyphendoy1 ( 31, 4 ) = 2 +xyphendoy1 ( 31, 5 ) = 2 +xyphendoy1 ( 31, 6 ) = 2 +xyphendoy1 ( 31, 7 ) = 2 +xyphendoy1 ( 31, 8 ) = 2 + + ! xlat -40.7500000000000 +greenupxy ( 30, 1 ) = 277 +greenupxy ( 30, 2 ) = 255 +greenupxy ( 30, 3 ) = 285 +greenupxy ( 30, 4 ) = 245 +greenupxy ( 30, 5 ) = 245 +greenupxy ( 30, 6 ) = 245 +greenupxy ( 30, 7 ) = 217 +greenupxy ( 30, 8 ) = 217 +fallxy ( 30, 1 ) = 64 +fallxy ( 30, 2 ) = 34 +fallxy ( 30, 3 ) = 128 +fallxy ( 30, 4 ) = 53 +fallxy ( 30, 5 ) = 53 +fallxy ( 30, 6 ) = 53 +fallxy ( 30, 7 ) = 11 +fallxy ( 30, 8 ) = 11 +xyphendoy1 ( 30, 1 ) = 2 +xyphendoy1 ( 30, 2 ) = 2 +xyphendoy1 ( 30, 3 ) = 2 +xyphendoy1 ( 30, 4 ) = 2 +xyphendoy1 ( 30, 5 ) = 2 +xyphendoy1 ( 30, 6 ) = 2 +xyphendoy1 ( 30, 7 ) = 2 +xyphendoy1 ( 30, 8 ) = 2 + + ! xlat -41.2500000000000 +greenupxy ( 29, 1 ) = 279 +greenupxy ( 29, 2 ) = 256 +greenupxy ( 29, 3 ) = 280 +greenupxy ( 29, 4 ) = 244 +greenupxy ( 29, 5 ) = 244 +greenupxy ( 29, 6 ) = 244 +greenupxy ( 29, 7 ) = 217 +greenupxy ( 29, 8 ) = 217 +fallxy ( 29, 1 ) = 65 +fallxy ( 29, 2 ) = 33 +fallxy ( 29, 3 ) = 116 +fallxy ( 29, 4 ) = 52 +fallxy ( 29, 5 ) = 52 +fallxy ( 29, 6 ) = 52 +fallxy ( 29, 7 ) = 15 +fallxy ( 29, 8 ) = 15 +xyphendoy1 ( 29, 1 ) = 2 +xyphendoy1 ( 29, 2 ) = 2 +xyphendoy1 ( 29, 3 ) = 2 +xyphendoy1 ( 29, 4 ) = 2 +xyphendoy1 ( 29, 5 ) = 2 +xyphendoy1 ( 29, 6 ) = 2 +xyphendoy1 ( 29, 7 ) = 2 +xyphendoy1 ( 29, 8 ) = 2 + + ! xlat -41.7500000000000 +greenupxy ( 28, 1 ) = 280 +greenupxy ( 28, 2 ) = 256 +greenupxy ( 28, 3 ) = 278 +greenupxy ( 28, 4 ) = 244 +greenupxy ( 28, 5 ) = 244 +greenupxy ( 28, 6 ) = 244 +greenupxy ( 28, 7 ) = 217 +greenupxy ( 28, 8 ) = 217 +fallxy ( 28, 1 ) = 62 +fallxy ( 28, 2 ) = 34 +fallxy ( 28, 3 ) = 108 +fallxy ( 28, 4 ) = 52 +fallxy ( 28, 5 ) = 52 +fallxy ( 28, 6 ) = 52 +fallxy ( 28, 7 ) = 18 +fallxy ( 28, 8 ) = 18 +xyphendoy1 ( 28, 1 ) = 2 +xyphendoy1 ( 28, 2 ) = 2 +xyphendoy1 ( 28, 3 ) = 2 +xyphendoy1 ( 28, 4 ) = 2 +xyphendoy1 ( 28, 5 ) = 2 +xyphendoy1 ( 28, 6 ) = 2 +xyphendoy1 ( 28, 7 ) = 2 +xyphendoy1 ( 28, 8 ) = 2 + + ! xlat -42.2500000000000 +greenupxy ( 27, 1 ) = 281 +greenupxy ( 27, 2 ) = 257 +greenupxy ( 27, 3 ) = 276 +greenupxy ( 27, 4 ) = 245 +greenupxy ( 27, 5 ) = 245 +greenupxy ( 27, 6 ) = 245 +greenupxy ( 27, 7 ) = 218 +greenupxy ( 27, 8 ) = 218 +fallxy ( 27, 1 ) = 60 +fallxy ( 27, 2 ) = 35 +fallxy ( 27, 3 ) = 107 +fallxy ( 27, 4 ) = 55 +fallxy ( 27, 5 ) = 55 +fallxy ( 27, 6 ) = 55 +fallxy ( 27, 7 ) = 21 +fallxy ( 27, 8 ) = 21 +xyphendoy1 ( 27, 1 ) = 2 +xyphendoy1 ( 27, 2 ) = 2 +xyphendoy1 ( 27, 3 ) = 2 +xyphendoy1 ( 27, 4 ) = 2 +xyphendoy1 ( 27, 5 ) = 2 +xyphendoy1 ( 27, 6 ) = 2 +xyphendoy1 ( 27, 7 ) = 2 +xyphendoy1 ( 27, 8 ) = 2 + + ! xlat -42.7500000000000 +greenupxy ( 26, 1 ) = 281 +greenupxy ( 26, 2 ) = 258 +greenupxy ( 26, 3 ) = 272 +greenupxy ( 26, 4 ) = 247 +greenupxy ( 26, 5 ) = 247 +greenupxy ( 26, 6 ) = 247 +greenupxy ( 26, 7 ) = 220 +greenupxy ( 26, 8 ) = 220 +fallxy ( 26, 1 ) = 60 +fallxy ( 26, 2 ) = 36 +fallxy ( 26, 3 ) = 107 +fallxy ( 26, 4 ) = 56 +fallxy ( 26, 5 ) = 56 +fallxy ( 26, 6 ) = 56 +fallxy ( 26, 7 ) = 27 +fallxy ( 26, 8 ) = 27 +xyphendoy1 ( 26, 1 ) = 2 +xyphendoy1 ( 26, 2 ) = 2 +xyphendoy1 ( 26, 3 ) = 2 +xyphendoy1 ( 26, 4 ) = 2 +xyphendoy1 ( 26, 5 ) = 2 +xyphendoy1 ( 26, 6 ) = 2 +xyphendoy1 ( 26, 7 ) = 2 +xyphendoy1 ( 26, 8 ) = 2 + + ! xlat -43.2500000000000 +greenupxy ( 25, 1 ) = 284 +greenupxy ( 25, 2 ) = 260 +greenupxy ( 25, 3 ) = 268 +greenupxy ( 25, 4 ) = 256 +greenupxy ( 25, 5 ) = 256 +greenupxy ( 25, 6 ) = 256 +greenupxy ( 25, 7 ) = 224 +greenupxy ( 25, 8 ) = 224 +fallxy ( 25, 1 ) = 62 +fallxy ( 25, 2 ) = 37 +fallxy ( 25, 3 ) = 99 +fallxy ( 25, 4 ) = 54 +fallxy ( 25, 5 ) = 54 +fallxy ( 25, 6 ) = 54 +fallxy ( 25, 7 ) = 30 +fallxy ( 25, 8 ) = 30 +xyphendoy1 ( 25, 1 ) = 2 +xyphendoy1 ( 25, 2 ) = 2 +xyphendoy1 ( 25, 3 ) = 2 +xyphendoy1 ( 25, 4 ) = 2 +xyphendoy1 ( 25, 5 ) = 2 +xyphendoy1 ( 25, 6 ) = 2 +xyphendoy1 ( 25, 7 ) = 2 +xyphendoy1 ( 25, 8 ) = 2 + + ! xlat -43.7500000000000 +greenupxy ( 24, 1 ) = 282 +greenupxy ( 24, 2 ) = 262 +greenupxy ( 24, 3 ) = 263 +greenupxy ( 24, 4 ) = 258 +greenupxy ( 24, 5 ) = 258 +greenupxy ( 24, 6 ) = 258 +greenupxy ( 24, 7 ) = 229 +greenupxy ( 24, 8 ) = 229 +fallxy ( 24, 1 ) = 62 +fallxy ( 24, 2 ) = 38 +fallxy ( 24, 3 ) = 83 +fallxy ( 24, 4 ) = 55 +fallxy ( 24, 5 ) = 55 +fallxy ( 24, 6 ) = 55 +fallxy ( 24, 7 ) = 35 +fallxy ( 24, 8 ) = 35 +xyphendoy1 ( 24, 1 ) = 2 +xyphendoy1 ( 24, 2 ) = 2 +xyphendoy1 ( 24, 3 ) = 2 +xyphendoy1 ( 24, 4 ) = 2 +xyphendoy1 ( 24, 5 ) = 2 +xyphendoy1 ( 24, 6 ) = 2 +xyphendoy1 ( 24, 7 ) = 2 +xyphendoy1 ( 24, 8 ) = 2 + + ! xlat -44.2500000000000 +greenupxy ( 23, 1 ) = 279 +greenupxy ( 23, 2 ) = 263 +greenupxy ( 23, 3 ) = 264 +greenupxy ( 23, 4 ) = 260 +greenupxy ( 23, 5 ) = 260 +greenupxy ( 23, 6 ) = 260 +greenupxy ( 23, 7 ) = 234 +greenupxy ( 23, 8 ) = 234 +fallxy ( 23, 1 ) = 61 +fallxy ( 23, 2 ) = 41 +fallxy ( 23, 3 ) = 64 +fallxy ( 23, 4 ) = 55 +fallxy ( 23, 5 ) = 55 +fallxy ( 23, 6 ) = 55 +fallxy ( 23, 7 ) = 35 +fallxy ( 23, 8 ) = 35 +xyphendoy1 ( 23, 1 ) = 2 +xyphendoy1 ( 23, 2 ) = 2 +xyphendoy1 ( 23, 3 ) = 2 +xyphendoy1 ( 23, 4 ) = 2 +xyphendoy1 ( 23, 5 ) = 2 +xyphendoy1 ( 23, 6 ) = 2 +xyphendoy1 ( 23, 7 ) = 2 +xyphendoy1 ( 23, 8 ) = 2 + + ! xlat -44.7500000000000 +greenupxy ( 22, 1 ) = 274 +greenupxy ( 22, 2 ) = 266 +greenupxy ( 22, 3 ) = 265 +greenupxy ( 22, 4 ) = 263 +greenupxy ( 22, 5 ) = 263 +greenupxy ( 22, 6 ) = 263 +greenupxy ( 22, 7 ) = 237 +greenupxy ( 22, 8 ) = 237 +fallxy ( 22, 1 ) = 59 +fallxy ( 22, 2 ) = 44 +fallxy ( 22, 3 ) = 64 +fallxy ( 22, 4 ) = 53 +fallxy ( 22, 5 ) = 53 +fallxy ( 22, 6 ) = 53 +fallxy ( 22, 7 ) = 39 +fallxy ( 22, 8 ) = 39 +xyphendoy1 ( 22, 1 ) = 2 +xyphendoy1 ( 22, 2 ) = 2 +xyphendoy1 ( 22, 3 ) = 2 +xyphendoy1 ( 22, 4 ) = 2 +xyphendoy1 ( 22, 5 ) = 2 +xyphendoy1 ( 22, 6 ) = 2 +xyphendoy1 ( 22, 7 ) = 2 +xyphendoy1 ( 22, 8 ) = 2 + + ! xlat -45.2500000000000 +greenupxy ( 21, 1 ) = 282 +greenupxy ( 21, 2 ) = 271 +greenupxy ( 21, 3 ) = 263 +greenupxy ( 21, 4 ) = 265 +greenupxy ( 21, 5 ) = 265 +greenupxy ( 21, 6 ) = 265 +greenupxy ( 21, 7 ) = 237 +greenupxy ( 21, 8 ) = 237 +fallxy ( 21, 1 ) = 59 +fallxy ( 21, 2 ) = 46 +fallxy ( 21, 3 ) = 64 +fallxy ( 21, 4 ) = 53 +fallxy ( 21, 5 ) = 53 +fallxy ( 21, 6 ) = 53 +fallxy ( 21, 7 ) = 39 +fallxy ( 21, 8 ) = 39 +xyphendoy1 ( 21, 1 ) = 2 +xyphendoy1 ( 21, 2 ) = 2 +xyphendoy1 ( 21, 3 ) = 2 +xyphendoy1 ( 21, 4 ) = 2 +xyphendoy1 ( 21, 5 ) = 2 +xyphendoy1 ( 21, 6 ) = 2 +xyphendoy1 ( 21, 7 ) = 2 +xyphendoy1 ( 21, 8 ) = 2 + + ! xlat -45.7500000000000 +greenupxy ( 20, 1 ) = 280 +greenupxy ( 20, 2 ) = 276 +greenupxy ( 20, 3 ) = 263 +greenupxy ( 20, 4 ) = 265 +greenupxy ( 20, 5 ) = 265 +greenupxy ( 20, 6 ) = 265 +greenupxy ( 20, 7 ) = 244 +greenupxy ( 20, 8 ) = 244 +fallxy ( 20, 1 ) = 59 +fallxy ( 20, 2 ) = 50 +fallxy ( 20, 3 ) = 56 +fallxy ( 20, 4 ) = 53 +fallxy ( 20, 5 ) = 53 +fallxy ( 20, 6 ) = 53 +fallxy ( 20, 7 ) = 39 +fallxy ( 20, 8 ) = 39 +xyphendoy1 ( 20, 1 ) = 2 +xyphendoy1 ( 20, 2 ) = 2 +xyphendoy1 ( 20, 3 ) = 2 +xyphendoy1 ( 20, 4 ) = 2 +xyphendoy1 ( 20, 5 ) = 2 +xyphendoy1 ( 20, 6 ) = 2 +xyphendoy1 ( 20, 7 ) = 2 +xyphendoy1 ( 20, 8 ) = 2 + + ! xlat -46.2500000000000 +greenupxy ( 19, 1 ) = 280 +greenupxy ( 19, 2 ) = 276 +greenupxy ( 19, 3 ) = 262 +greenupxy ( 19, 4 ) = 266 +greenupxy ( 19, 5 ) = 266 +greenupxy ( 19, 6 ) = 266 +greenupxy ( 19, 7 ) = 251 +greenupxy ( 19, 8 ) = 251 +fallxy ( 19, 1 ) = 59 +fallxy ( 19, 2 ) = 52 +fallxy ( 19, 3 ) = 44 +fallxy ( 19, 4 ) = 53 +fallxy ( 19, 5 ) = 53 +fallxy ( 19, 6 ) = 53 +fallxy ( 19, 7 ) = 39 +fallxy ( 19, 8 ) = 39 +xyphendoy1 ( 19, 1 ) = 2 +xyphendoy1 ( 19, 2 ) = 2 +xyphendoy1 ( 19, 3 ) = 2 +xyphendoy1 ( 19, 4 ) = 2 +xyphendoy1 ( 19, 5 ) = 2 +xyphendoy1 ( 19, 6 ) = 2 +xyphendoy1 ( 19, 7 ) = 2 +xyphendoy1 ( 19, 8 ) = 2 + + ! xlat -46.7500000000000 +greenupxy ( 18, 1 ) = 280 +greenupxy ( 18, 2 ) = 277 +greenupxy ( 18, 3 ) = 262 +greenupxy ( 18, 4 ) = 266 +greenupxy ( 18, 5 ) = 266 +greenupxy ( 18, 6 ) = 266 +greenupxy ( 18, 7 ) = 253 +greenupxy ( 18, 8 ) = 253 +fallxy ( 18, 1 ) = 59 +fallxy ( 18, 2 ) = 51 +fallxy ( 18, 3 ) = 41 +fallxy ( 18, 4 ) = 50 +fallxy ( 18, 5 ) = 50 +fallxy ( 18, 6 ) = 50 +fallxy ( 18, 7 ) = 41 +fallxy ( 18, 8 ) = 41 +xyphendoy1 ( 18, 1 ) = 2 +xyphendoy1 ( 18, 2 ) = 2 +xyphendoy1 ( 18, 3 ) = 2 +xyphendoy1 ( 18, 4 ) = 2 +xyphendoy1 ( 18, 5 ) = 2 +xyphendoy1 ( 18, 6 ) = 2 +xyphendoy1 ( 18, 7 ) = 2 +xyphendoy1 ( 18, 8 ) = 2 + + ! xlat -47.2500000000000 +greenupxy ( 17, 1 ) = 280 +greenupxy ( 17, 2 ) = 279 +greenupxy ( 17, 3 ) = 263 +greenupxy ( 17, 4 ) = 266 +greenupxy ( 17, 5 ) = 266 +greenupxy ( 17, 6 ) = 266 +greenupxy ( 17, 7 ) = 260 +greenupxy ( 17, 8 ) = 260 +fallxy ( 17, 1 ) = 59 +fallxy ( 17, 2 ) = 51 +fallxy ( 17, 3 ) = 38 +fallxy ( 17, 4 ) = 48 +fallxy ( 17, 5 ) = 48 +fallxy ( 17, 6 ) = 48 +fallxy ( 17, 7 ) = 44 +fallxy ( 17, 8 ) = 44 +xyphendoy1 ( 17, 1 ) = 2 +xyphendoy1 ( 17, 2 ) = 2 +xyphendoy1 ( 17, 3 ) = 2 +xyphendoy1 ( 17, 4 ) = 2 +xyphendoy1 ( 17, 5 ) = 2 +xyphendoy1 ( 17, 6 ) = 2 +xyphendoy1 ( 17, 7 ) = 2 +xyphendoy1 ( 17, 8 ) = 2 + + ! xlat -47.7500000000000 +greenupxy ( 16, 1 ) = 280 +greenupxy ( 16, 2 ) = 280 +greenupxy ( 16, 3 ) = 265 +greenupxy ( 16, 4 ) = 268 +greenupxy ( 16, 5 ) = 268 +greenupxy ( 16, 6 ) = 268 +greenupxy ( 16, 7 ) = 267 +greenupxy ( 16, 8 ) = 267 +fallxy ( 16, 1 ) = 59 +fallxy ( 16, 2 ) = 52 +fallxy ( 16, 3 ) = 35 +fallxy ( 16, 4 ) = 45 +fallxy ( 16, 5 ) = 45 +fallxy ( 16, 6 ) = 45 +fallxy ( 16, 7 ) = 43 +fallxy ( 16, 8 ) = 43 +xyphendoy1 ( 16, 1 ) = 2 +xyphendoy1 ( 16, 2 ) = 2 +xyphendoy1 ( 16, 3 ) = 2 +xyphendoy1 ( 16, 4 ) = 2 +xyphendoy1 ( 16, 5 ) = 2 +xyphendoy1 ( 16, 6 ) = 2 +xyphendoy1 ( 16, 7 ) = 2 +xyphendoy1 ( 16, 8 ) = 2 + + ! xlat -48.2500000000000 +greenupxy ( 15, 1 ) = 280 +greenupxy ( 15, 2 ) = 282 +greenupxy ( 15, 3 ) = 267 +greenupxy ( 15, 4 ) = 269 +greenupxy ( 15, 5 ) = 269 +greenupxy ( 15, 6 ) = 269 +greenupxy ( 15, 7 ) = 269 +greenupxy ( 15, 8 ) = 269 +fallxy ( 15, 1 ) = 59 +fallxy ( 15, 2 ) = 51 +fallxy ( 15, 3 ) = 34 +fallxy ( 15, 4 ) = 46 +fallxy ( 15, 5 ) = 46 +fallxy ( 15, 6 ) = 46 +fallxy ( 15, 7 ) = 43 +fallxy ( 15, 8 ) = 43 +xyphendoy1 ( 15, 1 ) = 2 +xyphendoy1 ( 15, 2 ) = 2 +xyphendoy1 ( 15, 3 ) = 2 +xyphendoy1 ( 15, 4 ) = 2 +xyphendoy1 ( 15, 5 ) = 2 +xyphendoy1 ( 15, 6 ) = 2 +xyphendoy1 ( 15, 7 ) = 2 +xyphendoy1 ( 15, 8 ) = 2 + + ! xlat -48.7500000000000 +greenupxy ( 14, 1 ) = 280 +greenupxy ( 14, 2 ) = 282 +greenupxy ( 14, 3 ) = 268 +greenupxy ( 14, 4 ) = 271 +greenupxy ( 14, 5 ) = 271 +greenupxy ( 14, 6 ) = 271 +greenupxy ( 14, 7 ) = 271 +greenupxy ( 14, 8 ) = 271 +fallxy ( 14, 1 ) = 59 +fallxy ( 14, 2 ) = 51 +fallxy ( 14, 3 ) = 30 +fallxy ( 14, 4 ) = 44 +fallxy ( 14, 5 ) = 44 +fallxy ( 14, 6 ) = 44 +fallxy ( 14, 7 ) = 46 +fallxy ( 14, 8 ) = 46 +xyphendoy1 ( 14, 1 ) = 2 +xyphendoy1 ( 14, 2 ) = 2 +xyphendoy1 ( 14, 3 ) = 2 +xyphendoy1 ( 14, 4 ) = 2 +xyphendoy1 ( 14, 5 ) = 2 +xyphendoy1 ( 14, 6 ) = 2 +xyphendoy1 ( 14, 7 ) = 2 +xyphendoy1 ( 14, 8 ) = 2 + + ! xlat -49.2500000000000 +greenupxy ( 13, 1 ) = 280 +greenupxy ( 13, 2 ) = 283 +greenupxy ( 13, 3 ) = 269 +greenupxy ( 13, 4 ) = 272 +greenupxy ( 13, 5 ) = 272 +greenupxy ( 13, 6 ) = 272 +greenupxy ( 13, 7 ) = 273 +greenupxy ( 13, 8 ) = 273 +fallxy ( 13, 1 ) = 59 +fallxy ( 13, 2 ) = 51 +fallxy ( 13, 3 ) = 28 +fallxy ( 13, 4 ) = 42 +fallxy ( 13, 5 ) = 42 +fallxy ( 13, 6 ) = 42 +fallxy ( 13, 7 ) = 47 +fallxy ( 13, 8 ) = 47 +xyphendoy1 ( 13, 1 ) = 2 +xyphendoy1 ( 13, 2 ) = 2 +xyphendoy1 ( 13, 3 ) = 2 +xyphendoy1 ( 13, 4 ) = 2 +xyphendoy1 ( 13, 5 ) = 2 +xyphendoy1 ( 13, 6 ) = 2 +xyphendoy1 ( 13, 7 ) = 2 +xyphendoy1 ( 13, 8 ) = 2 + + ! xlat -49.7500000000000 +greenupxy ( 12, 1 ) = 280 +greenupxy ( 12, 2 ) = 284 +greenupxy ( 12, 3 ) = 270 +greenupxy ( 12, 4 ) = 274 +greenupxy ( 12, 5 ) = 274 +greenupxy ( 12, 6 ) = 274 +greenupxy ( 12, 7 ) = 275 +greenupxy ( 12, 8 ) = 275 +fallxy ( 12, 1 ) = 59 +fallxy ( 12, 2 ) = 51 +fallxy ( 12, 3 ) = 32 +fallxy ( 12, 4 ) = 41 +fallxy ( 12, 5 ) = 41 +fallxy ( 12, 6 ) = 41 +fallxy ( 12, 7 ) = 48 +fallxy ( 12, 8 ) = 48 +xyphendoy1 ( 12, 1 ) = 2 +xyphendoy1 ( 12, 2 ) = 2 +xyphendoy1 ( 12, 3 ) = 2 +xyphendoy1 ( 12, 4 ) = 2 +xyphendoy1 ( 12, 5 ) = 2 +xyphendoy1 ( 12, 6 ) = 2 +xyphendoy1 ( 12, 7 ) = 2 +xyphendoy1 ( 12, 8 ) = 2 + + ! xlat -50.2500000000000 +greenupxy ( 11, 1 ) = 280 +greenupxy ( 11, 2 ) = 286 +greenupxy ( 11, 3 ) = 272 +greenupxy ( 11, 4 ) = 276 +greenupxy ( 11, 5 ) = 276 +greenupxy ( 11, 6 ) = 276 +greenupxy ( 11, 7 ) = 277 +greenupxy ( 11, 8 ) = 277 +fallxy ( 11, 1 ) = 59 +fallxy ( 11, 2 ) = 52 +fallxy ( 11, 3 ) = 32 +fallxy ( 11, 4 ) = 41 +fallxy ( 11, 5 ) = 41 +fallxy ( 11, 6 ) = 41 +fallxy ( 11, 7 ) = 50 +fallxy ( 11, 8 ) = 50 +xyphendoy1 ( 11, 1 ) = 2 +xyphendoy1 ( 11, 2 ) = 2 +xyphendoy1 ( 11, 3 ) = 2 +xyphendoy1 ( 11, 4 ) = 2 +xyphendoy1 ( 11, 5 ) = 2 +xyphendoy1 ( 11, 6 ) = 2 +xyphendoy1 ( 11, 7 ) = 2 +xyphendoy1 ( 11, 8 ) = 2 + + ! xlat -50.7500000000000 +greenupxy ( 10, 1 ) = 280 +greenupxy ( 10, 2 ) = 288 +greenupxy ( 10, 3 ) = 273 +greenupxy ( 10, 4 ) = 278 +greenupxy ( 10, 5 ) = 278 +greenupxy ( 10, 6 ) = 278 +greenupxy ( 10, 7 ) = 278 +greenupxy ( 10, 8 ) = 278 +fallxy ( 10, 1 ) = 59 +fallxy ( 10, 2 ) = 53 +fallxy ( 10, 3 ) = 31 +fallxy ( 10, 4 ) = 42 +fallxy ( 10, 5 ) = 42 +fallxy ( 10, 6 ) = 42 +fallxy ( 10, 7 ) = 50 +fallxy ( 10, 8 ) = 50 +xyphendoy1 ( 10, 1 ) = 2 +xyphendoy1 ( 10, 2 ) = 2 +xyphendoy1 ( 10, 3 ) = 2 +xyphendoy1 ( 10, 4 ) = 2 +xyphendoy1 ( 10, 5 ) = 2 +xyphendoy1 ( 10, 6 ) = 2 +xyphendoy1 ( 10, 7 ) = 2 +xyphendoy1 ( 10, 8 ) = 2 + + ! xlat -51.2500000000000 +greenupxy ( 9, 1 ) = 280 +greenupxy ( 9, 2 ) = 289 +greenupxy ( 9, 3 ) = 275 +greenupxy ( 9, 4 ) = 279 +greenupxy ( 9, 5 ) = 279 +greenupxy ( 9, 6 ) = 279 +greenupxy ( 9, 7 ) = 278 +greenupxy ( 9, 8 ) = 278 +fallxy ( 9, 1 ) = 59 +fallxy ( 9, 2 ) = 53 +fallxy ( 9, 3 ) = 34 +fallxy ( 9, 4 ) = 42 +fallxy ( 9, 5 ) = 42 +fallxy ( 9, 6 ) = 42 +fallxy ( 9, 7 ) = 50 +fallxy ( 9, 8 ) = 50 +xyphendoy1 ( 9, 1 ) = 2 +xyphendoy1 ( 9, 2 ) = 2 +xyphendoy1 ( 9, 3 ) = 2 +xyphendoy1 ( 9, 4 ) = 2 +xyphendoy1 ( 9, 5 ) = 2 +xyphendoy1 ( 9, 6 ) = 2 +xyphendoy1 ( 9, 7 ) = 2 +xyphendoy1 ( 9, 8 ) = 2 + + ! xlat -51.7500000000000 +greenupxy ( 8, 1 ) = 280 +greenupxy ( 8, 2 ) = 290 +greenupxy ( 8, 3 ) = 276 +greenupxy ( 8, 4 ) = 280 +greenupxy ( 8, 5 ) = 280 +greenupxy ( 8, 6 ) = 280 +greenupxy ( 8, 7 ) = 278 +greenupxy ( 8, 8 ) = 278 +fallxy ( 8, 1 ) = 59 +fallxy ( 8, 2 ) = 54 +fallxy ( 8, 3 ) = 34 +fallxy ( 8, 4 ) = 42 +fallxy ( 8, 5 ) = 42 +fallxy ( 8, 6 ) = 42 +fallxy ( 8, 7 ) = 50 +fallxy ( 8, 8 ) = 50 +xyphendoy1 ( 8, 1 ) = 2 +xyphendoy1 ( 8, 2 ) = 2 +xyphendoy1 ( 8, 3 ) = 2 +xyphendoy1 ( 8, 4 ) = 2 +xyphendoy1 ( 8, 5 ) = 2 +xyphendoy1 ( 8, 6 ) = 2 +xyphendoy1 ( 8, 7 ) = 2 +xyphendoy1 ( 8, 8 ) = 2 + + ! xlat -52.2500000000000 +greenupxy ( 7, 1 ) = 280 +greenupxy ( 7, 2 ) = 290 +greenupxy ( 7, 3 ) = 276 +greenupxy ( 7, 4 ) = 280 +greenupxy ( 7, 5 ) = 280 +greenupxy ( 7, 6 ) = 280 +greenupxy ( 7, 7 ) = 278 +greenupxy ( 7, 8 ) = 278 +fallxy ( 7, 1 ) = 59 +fallxy ( 7, 2 ) = 54 +fallxy ( 7, 3 ) = 35 +fallxy ( 7, 4 ) = 42 +fallxy ( 7, 5 ) = 42 +fallxy ( 7, 6 ) = 42 +fallxy ( 7, 7 ) = 50 +fallxy ( 7, 8 ) = 50 +xyphendoy1 ( 7, 1 ) = 2 +xyphendoy1 ( 7, 2 ) = 2 +xyphendoy1 ( 7, 3 ) = 2 +xyphendoy1 ( 7, 4 ) = 2 +xyphendoy1 ( 7, 5 ) = 2 +xyphendoy1 ( 7, 6 ) = 2 +xyphendoy1 ( 7, 7 ) = 2 +xyphendoy1 ( 7, 8 ) = 2 + + ! xlat -52.7500000000000 +greenupxy ( 6, 1 ) = 280 +greenupxy ( 6, 2 ) = 290 +greenupxy ( 6, 3 ) = 276 +greenupxy ( 6, 4 ) = 280 +greenupxy ( 6, 5 ) = 280 +greenupxy ( 6, 6 ) = 280 +greenupxy ( 6, 7 ) = 278 +greenupxy ( 6, 8 ) = 278 +fallxy ( 6, 1 ) = 59 +fallxy ( 6, 2 ) = 54 +fallxy ( 6, 3 ) = 35 +fallxy ( 6, 4 ) = 42 +fallxy ( 6, 5 ) = 42 +fallxy ( 6, 6 ) = 42 +fallxy ( 6, 7 ) = 50 +fallxy ( 6, 8 ) = 50 +xyphendoy1 ( 6, 1 ) = 2 +xyphendoy1 ( 6, 2 ) = 2 +xyphendoy1 ( 6, 3 ) = 2 +xyphendoy1 ( 6, 4 ) = 2 +xyphendoy1 ( 6, 5 ) = 2 +xyphendoy1 ( 6, 6 ) = 2 +xyphendoy1 ( 6, 7 ) = 2 +xyphendoy1 ( 6, 8 ) = 2 + + ! xlat -53.2500000000000 +greenupxy ( 5, 1 ) = 280 +greenupxy ( 5, 2 ) = 290 +greenupxy ( 5, 3 ) = 276 +greenupxy ( 5, 4 ) = 280 +greenupxy ( 5, 5 ) = 280 +greenupxy ( 5, 6 ) = 280 +greenupxy ( 5, 7 ) = 278 +greenupxy ( 5, 8 ) = 278 +fallxy ( 5, 1 ) = 59 +fallxy ( 5, 2 ) = 54 +fallxy ( 5, 3 ) = 35 +fallxy ( 5, 4 ) = 42 +fallxy ( 5, 5 ) = 42 +fallxy ( 5, 6 ) = 42 +fallxy ( 5, 7 ) = 50 +fallxy ( 5, 8 ) = 50 +xyphendoy1 ( 5, 1 ) = 2 +xyphendoy1 ( 5, 2 ) = 2 +xyphendoy1 ( 5, 3 ) = 2 +xyphendoy1 ( 5, 4 ) = 2 +xyphendoy1 ( 5, 5 ) = 2 +xyphendoy1 ( 5, 6 ) = 2 +xyphendoy1 ( 5, 7 ) = 2 +xyphendoy1 ( 5, 8 ) = 2 + + ! xlat -53.7500000000000 +greenupxy ( 4, 1 ) = 280 +greenupxy ( 4, 2 ) = 290 +greenupxy ( 4, 3 ) = 276 +greenupxy ( 4, 4 ) = 280 +greenupxy ( 4, 5 ) = 280 +greenupxy ( 4, 6 ) = 280 +greenupxy ( 4, 7 ) = 278 +greenupxy ( 4, 8 ) = 278 +fallxy ( 4, 1 ) = 59 +fallxy ( 4, 2 ) = 54 +fallxy ( 4, 3 ) = 35 +fallxy ( 4, 4 ) = 42 +fallxy ( 4, 5 ) = 42 +fallxy ( 4, 6 ) = 42 +fallxy ( 4, 7 ) = 50 +fallxy ( 4, 8 ) = 50 +xyphendoy1 ( 4, 1 ) = 2 +xyphendoy1 ( 4, 2 ) = 2 +xyphendoy1 ( 4, 3 ) = 2 +xyphendoy1 ( 4, 4 ) = 2 +xyphendoy1 ( 4, 5 ) = 2 +xyphendoy1 ( 4, 6 ) = 2 +xyphendoy1 ( 4, 7 ) = 2 +xyphendoy1 ( 4, 8 ) = 2 + + ! xlat -54.2500000000000 +greenupxy ( 3, 1 ) = 280 +greenupxy ( 3, 2 ) = 290 +greenupxy ( 3, 3 ) = 276 +greenupxy ( 3, 4 ) = 280 +greenupxy ( 3, 5 ) = 280 +greenupxy ( 3, 6 ) = 280 +greenupxy ( 3, 7 ) = 278 +greenupxy ( 3, 8 ) = 278 +fallxy ( 3, 1 ) = 59 +fallxy ( 3, 2 ) = 54 +fallxy ( 3, 3 ) = 35 +fallxy ( 3, 4 ) = 42 +fallxy ( 3, 5 ) = 42 +fallxy ( 3, 6 ) = 42 +fallxy ( 3, 7 ) = 50 +fallxy ( 3, 8 ) = 50 +xyphendoy1 ( 3, 1 ) = 2 +xyphendoy1 ( 3, 2 ) = 2 +xyphendoy1 ( 3, 3 ) = 2 +xyphendoy1 ( 3, 4 ) = 2 +xyphendoy1 ( 3, 5 ) = 2 +xyphendoy1 ( 3, 6 ) = 2 +xyphendoy1 ( 3, 7 ) = 2 +xyphendoy1 ( 3, 8 ) = 2 + + ! xlat -54.7500000000000 +greenupxy ( 2, 1 ) = 280 +greenupxy ( 2, 2 ) = 290 +greenupxy ( 2, 3 ) = 276 +greenupxy ( 2, 4 ) = 280 +greenupxy ( 2, 5 ) = 280 +greenupxy ( 2, 6 ) = 280 +greenupxy ( 2, 7 ) = 278 +greenupxy ( 2, 8 ) = 278 +fallxy ( 2, 1 ) = 59 +fallxy ( 2, 2 ) = 54 +fallxy ( 2, 3 ) = 35 +fallxy ( 2, 4 ) = 42 +fallxy ( 2, 5 ) = 42 +fallxy ( 2, 6 ) = 42 +fallxy ( 2, 7 ) = 50 +fallxy ( 2, 8 ) = 50 +xyphendoy1 ( 2, 1 ) = 2 +xyphendoy1 ( 2, 2 ) = 2 +xyphendoy1 ( 2, 3 ) = 2 +xyphendoy1 ( 2, 4 ) = 2 +xyphendoy1 ( 2, 5 ) = 2 +xyphendoy1 ( 2, 6 ) = 2 +xyphendoy1 ( 2, 7 ) = 2 +xyphendoy1 ( 2, 8 ) = 2 + + ! xlat -55.2500000000000 +greenupxy ( 1, 1 ) = 280 +greenupxy ( 1, 2 ) = 290 +greenupxy ( 1, 3 ) = 276 +greenupxy ( 1, 4 ) = 280 +greenupxy ( 1, 5 ) = 280 +greenupxy ( 1, 6 ) = 280 +greenupxy ( 1, 7 ) = 278 +greenupxy ( 1, 8 ) = 278 +fallxy ( 1, 1 ) = 59 +fallxy ( 1, 2 ) = 54 +fallxy ( 1, 3 ) = 35 +fallxy ( 1, 4 ) = 42 +fallxy ( 1, 5 ) = 42 +fallxy ( 1, 6 ) = 42 +fallxy ( 1, 7 ) = 50 +fallxy ( 1, 8 ) = 50 +xyphendoy1 ( 1, 1 ) = 2 +xyphendoy1 ( 1, 2 ) = 2 +xyphendoy1 ( 1, 3 ) = 2 +xyphendoy1 ( 1, 4 ) = 2 +xyphendoy1 ( 1, 5 ) = 2 +xyphendoy1 ( 1, 6 ) = 2 +xyphendoy1 ( 1, 7 ) = 2 +xyphendoy1 ( 1, 8 ) = 2 + +!jhan: alternative to reading file +DO nx=1,nphen + greenup(ilat,ivtx(nx)) = greenupxy (ilat, nx) + fall(ilat,ivtx(nx)) = fallxy (ilat, nx) + phendoy1(ilat,ivtx(nx))= xyphendoy1(ilat, nx) +ENDDO + + DO np=1,mp + ilat=(casamet%lat(np)+55.25)/0.5+1 + ilat= MIN(271,MAX(1,ilat)) + phen%phase(np) = phendoy1(ilat,veg%iveg(np)) + phen%doyphase(np,1) = greenup(ilat,veg%iveg(np)) ! DOY for greenup + phen%doyphase(np,2) = phen%doyphase(np,1) +14 ! DOY for steady LAI + phen%doyphase(np,3) = fall(ilat,veg%iveg(np)) ! DOY for leaf senescence + phen%doyphase(np,4) = phen%doyphase(np,3) +14 ! DOY for minimal LAI season + IF (phen%doyphase(np,2) > 365) phen%doyphase(np,2)=phen%doyphase(np,2)-365 + IF (phen%doyphase(np,4) > 365) phen%doyphase(np,4)=phen%doyphase(np,4)-365 + + ENDDO + + END SUBROUTINE casa_readphen + + SUBROUTINE casa_init(casabiome,casamet,casaflux,casapool,casabal,veg,phen) + ! mst not used (BP sep2010) + ! ! for first time reading file *_1220.csv (BP may2010) + !SUBROUTINE casa_init(mst,casapool,casabal,veg) + ! !SUBROUTINE casa_init(mst,casapool,casabal) + ! ! end addition (BP may2010) + ! initialize some values in phenology parameters and leaf growth phase + USE casadimension + USE casaparm + +USE phenology_type_mod, ONLY: phenology_type +USE casa_biome_type_mod, ONLY: casa_biome => casa_biome_type +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + + ! for first time reading file *_1220.csv (BP may2010) + USE cable_def_types_mod +!jh: we get lat/lon from UM anyway and I want to get rid of this dependency +!jh! USE cable_io_vars_module, ONLY: patch + USE cable_common_module, ONLY: cable_user +#ifndef UM_CBL +USE casa_offline_inout_module, ONLY : READ_CASA_RESTART_NC +#endif + + ! end addition (BP may2010) + IMPLICIT NONE + ! INTEGER, INTENT(IN) :: mst + TYPE (casa_biome), INTENT(IN) :: casabiome + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_flux), INTENT(INOUT) :: casaflux + TYPE (casa_pool), INTENT(INOUT) :: casapool + TYPE (casa_balance), INTENT(INOUT) :: casabal + ! for first time reading file *_1220.csv (BP may2010) + TYPE (veg_parameter_type), INTENT(IN) :: veg + TYPE (phenology_type), INTENT(INOUT) :: phen + REAL(r_2) :: clabile,cplant(3),clitter(3),csoil(3) + REAL(r_2) :: nplant(3),nlitter(3),nsoil(3),nsoilmin,pplant(3) + REAL(r_2) :: plitter(3),psoil(3),psoillab,psoilsorb,psoilocc + ! end addition (BP may2010) + + ! local variables + INTEGER :: np,npt,npz + INTEGER :: nyearz,ivtz,istz,isoz + REAL(r_2) :: latz,lonz,areacellz,glaiz,slaz + LOGICAL :: EXRST + + + IF (.NOT.cable_user%casa_fromzero) THEN + PRINT *, 'initial pool from restart file' + ENDIF + PRINT *, 'icycle,initcasa,mp ', icycle,initcasa,mp + !phen%phase = 2 + + !CLN initialise all ! THIS NEEDS FIXING because of e.g. ICE-WATER + casaflux%Cgpp = 0. + casaflux%Cnpp = 0. + casaflux%Crp = 0. + casaflux%Crgplant = 0. + ! casaflux%Nminfix = 0. + casaflux%Nminuptake = 0. + casaflux%Plabuptake = 0. + casaflux%Clabloss = 0. + casaflux%fracClabile = 0. + casaflux%stemnpp = 0. + casaflux%frac_sapwood = 0. + casaflux%sapwood_area = 0. + casaflux%FluxCtohwp = 0. + casaflux%FluxCtoClear = 0. + casaflux%fracCalloc = 0. + casaflux%fracNalloc = 0. + casaflux%fracPalloc = 0. + casaflux%Crmplant = 0. + casaflux%kplant = 0. + + casaflux%fromPtoL = 0. + + casaflux%Cnep = 0. + casaflux%Crsoil = 0. + casapool%dClabiledt = 0.0 + !casaflux%Nmindep = casaflux%Nmindep /2.0 + !casaflux%Nmindep = 0. + casaflux%Nminloss = 0. + casaflux%Nminleach = 0. + casaflux%Nupland = 0. + casaflux%Nlittermin = 0. + casaflux%Nsmin = 0. + casaflux%Nsimm = 0. + casaflux%Nsnet = 0. + !casaflux%fNminloss = 0. + !casaflux%fNminleach = 0. + !casaflux%Pdep = 0. + !casaflux%Pwea = 0. + casaflux%Pleach = 0. + casaflux%Ploss = 0. + casaflux%Pupland = 0. + casaflux%Plittermin = 0. + casaflux%Psmin = 0. + casaflux%Psimm = 0. + casaflux%Psnet = 0. + ! casaflux%fPleach = 0. !vh ! this should be a parameter, not a flux variable + casaflux%kplab = 0. + casaflux%kpsorb = 0. + casaflux%kpocc = 0. + ! casaflux%Psorbmax = 0. !vh ! this should be a paramter, not a flux variable + + casaflux%klitter = 0. + casaflux%ksoil = 0. + casaflux%fromLtoS = 0. + casaflux%fromStoS = 0. + casaflux%fromLtoCO2 = 0. + casaflux%fromStoCO2 = 0. + casaflux%FluxCtolitter= 0. + casaflux%FluxNtolitter= 0. + casaflux%FluxPtolitter= 0. + casaflux%FluxCtosoil = 0. + casaflux%FluxNtosoil = 0. + casaflux%FluxPtosoil = 0. + casaflux%FluxCtoCO2 = 0. + + casaflux%Cplant_turnover = 0. +!Ticket #204 - rm phen% clobbing here AND incorrectly so anyway + + IF (initcasa==1) THEN + IF (.NOT.cable_user%casa_fromzero) THEN +#ifndef UM_CBL + CALL READ_CASA_RESTART_NC ( casamet, casapool, casaflux, phen ) +#endif + ELSE + WRITE(*,*)'casa_init: not using restart file!' + WRITE(*,*)'Using input from readbiome.!' + WRITE(*,*) 'initialising frac_sapwood=1 and sapwood_area = 0)' + casaflux%frac_sapwood(:) = 1.0 + casaflux%sapwood_area(:) = 0.0 + ENDIF + ENDIF + WHERE(casamet%lnonwood==1) casapool%cplant(:,WOOD) = 0.0 + WHERE(casamet%lnonwood==1) casapool%nplant(:,WOOD) = 0.0 + WHERE(casamet%lnonwood==1) casapool%pplant(:,WOOD) = 0.0 + +!$ENDIF + !92 format(5(i6,2x),5(f18.6,3x),2(i6,',',2x),',',2x,100(f18.6,3x)) +92 FORMAT(5(i6,',',2x),5(f18.6,',',2x),2(i6,',',2x),',',2x,100(f18.6,',',2x)) + +!jh: we get lat/lon from UM anyway and I want to get rid of this dependency +!jh! IF(initcasa==0) THEN +!jh! nyearz = 1 +!jh! DO npt=1,mp +!jh! casamet%lon(npt) = patch(npt)%longitude +!jh! casamet%lat(npt) = patch(npt)%latitude +!jh! ENDDO +!jh! ENDIF +!jh! + ! reset labile C pool,comment out by Q.Zhang 10/09/2011 + ! casapool%clabile = 0.0 + ! check pool sizes + casapool%cplant = MAX(0.0,casapool%cplant) + casapool%clitter = MAX(0.0,casapool%clitter) + casapool%csoil = MAX(0.0,casapool%csoil) + casabal%cplantlast = casapool%cplant + casabal%clitterlast = casapool%clitter + casabal%csoillast = casapool%csoil + casabal%clabilelast = casapool%clabile + casabal%sumcbal = 0.0 + casabal%FCgppyear=0.0;casabal%FCrpyear=0.0 + casabal%FCnppyear=0;casabal%FCrsyear=0.0;casabal%FCneeyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%cplant(:,WOOD) = 0.0 + IF (icycle==1) THEN + casapool%Nplant(:,:) = casapool%cplant(:,:) * casapool%ratioNCplant(:,:) + casapool%Nsoil(:,:) = casapool%ratioNCsoil(:,:) * casapool%Csoil(:,:) + casapool%Psoil(:,:) = casapool%Nsoil(:,:)/casapool%ratioNPsoil(:,:) + casapool%Nsoilmin(:) = 2.5 + ENDIF + + IF (icycle >=1) THEN + casapool%nplant = MAX(1.e-6,casapool%nplant) + casapool%nlitter = MAX(1.e-6,casapool%nlitter) + casapool%nsoil = MAX(1.e-6,casapool%nsoil) + casapool%nsoilmin = MAX(1.e-6,casapool%nsoilmin) + casabal%nplantlast = casapool%nplant + casabal%nlitterlast = casapool%nlitter + casabal%nsoillast = casapool%nsoil + casabal%nsoilminlast= casapool%nsoilmin + casabal%sumnbal = 0.0 + casabal%FNdepyear=0.0;casabal%FNfixyear=0.0;casabal%FNsnetyear=0.0 + casabal%FNupyear=0.0;casabal%FNleachyear=0.0;casabal%FNlossyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%nplant(:,WOOD) = 0.0 + ENDIF + + IF (icycle >=1) THEN + casapool%pplant = MAX(1.0e-7,casapool%pplant) + casapool%plitter = MAX(1.0e-7,casapool%plitter) + casapool%psoil = MAX(1.0e-7,casapool%psoil) + casapool%Psoillab = MAX(1.0e-7,casapool%psoillab) ! was 2.0, changed according to YP + casapool%psoilsorb = MAX(1.0e-7,casapool%psoilsorb) ! was 10.0, - + casapool%psoilocc = MAX(1.0e-7,casapool%psoilocc) ! was 50.0, - + casabal%pplantlast = casapool%pplant + casabal%plitterlast = casapool%plitter + casabal%psoillast = casapool%psoil + casabal%psoillablast = casapool%psoillab + casabal%psoilsorblast = casapool%psoilsorb + casabal%psoilocclast = casapool%psoilocc + casabal%sumpbal = 0.0 + casabal%FPweayear=0.0;casabal%FPdustyear=0.0; casabal%FPsnetyear=0.0 + casabal%FPupyear=0.0;casabal%FPleachyear=0.0;casabal%FPlossyear=0.0 + !vh ! + WHERE(casamet%lnonwood==1) casapool%pplant(:,WOOD) = 0.0 + ENDIF + + casapool%cwoodprod=0.0; casapool%nwoodprod=0.0;casapool%pwoodprod=0.0 + + END SUBROUTINE casa_init + + + SUBROUTINE casa_poolout(ktau,veg,soil,casabiome,casapool,casaflux,casamet, & + casabal,phen) + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + USE cable_common_module, ONLY: cable_user +USE phenology_type_mod, ONLY: phenology_type +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_biome_type_mod, ONLY: casa_biome => casa_biome_type +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: ktau + TYPE (veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters + TYPE (soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters + TYPE (casa_biome), INTENT(INOUT) :: casabiome + TYPE (casa_pool), INTENT(INOUT) :: casapool + TYPE (casa_flux), INTENT(INOUT) :: casaflux + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_balance), INTENT(INOUT) :: casabal + TYPE (phenology_type), INTENT(INOUT) :: phen + + ! local variables + REAL(r_2), DIMENSION(mso) :: Psorder,pweasoil,xpsoil50 + REAL(r_2), DIMENSION(mso) :: fracPlab,fracPsorb,fracPocc,fracPorg + REAL(r_2), DIMENSION(mp) :: totpsoil + INTEGER npt,nout,nso + + ! Soiltype soilnumber soil P(g P/m2) + ! Alfisol 1 61.3 + ! Andisol 2 103.9 + ! Aridisol 3 92.8 + ! Entisol 4 136.9 + ! Gellisol 5 98.2 + ! Histosol 6 107.6 + ! Inceptisol 7 84.1 + ! Mollisol 8 110.1 + ! Oxisol 9 35.4 + ! Spodosol 10 41.0 + ! Ultisol 11 51.5 + ! Vertisol 12 190.6 + DATA psorder/61.3,103.9,92.8,136.9,98.2,107.6,84.1,110.1,35.4,41.0,51.5,190.6/ + DATA pweasoil/0.05,0.04,0.03,0.02,0.01,0.009,0.008,0.007,0.006,0.005,0.004,0.003/ + DATA fracpLab/0.08,0.08,0.10,0.02,0.08,0.08,0.08,0.06,0.02,0.05,0.09,0.05/ + DATA fracPsorb/0.32,0.37,0.57,0.67,0.37,0.37,0.37,0.32,0.24,0.22,0.21,0.38/ + DATA fracPocc/0.36,0.38,0.25,0.26,0.38,0.38,0.38,0.44,0.38,0.38,0.37,0.45/ + DATA fracPorg/0.25,0.17,0.08,0.05,0.17,0.17,0.17,0.18,0.36,0.35,0.34,0.12/ + DATA xpsoil50/7.6,4.1,4.2,3.4,4.1,4.1,4.8,4.1,6.9,6.9,6.9,1.7/ + ! + ! estimated based on Yang, Post and Jain (2013) + ! Soiltype soilnumber soil P(g P/m2 top 50 cm) + ! Alfisol 1 400 + ! Andisol 2 426 + ! Aridisol 3 352 + ! Entisol 4 490 + ! Gellisol 5 403 + ! Histosol 6 441 + ! Inceptisol 7 501 + ! Mollisol 8 358 + ! Oxisol 9 96 + ! Spodosol 10 364 + ! Ultisol 11 272 + ! Vertisol 12 430 + ! DATA psorder/400.0,426.0,352.0,490.0,403.0,441.0,501.0,358.0,96.0,364.0,272.0,430.0/ + ! DATA pweasoil/0.05,0.04,0.03,0.02,0.01,0.009,0.008,0.007,0.006,0.005,0.004,0.003/ + ! DATA fracpLab/0.07,0.04,0.08,0.10,0.08,0.10,0.12,0.05,0.05,0.06,0.06,0.05/ + ! DATA fracPsorb/0.30,0.44,0.69,0.53,0.37,0.14,0.24,0.32,0.15,0.21,0.17,0.35/ + ! DATA fracPocc/0.38,0.22,0.18,0.22,0.38,0.42,0.23,0.44,0.60,0.30,0.51,0.48/ + ! DATA fracPorg/0.25,0.30,0.05,0.15,0.17,0.34,0.41,0.19,0.20,0.43,0.26,0.12/ + ! DATA xpsoil50/1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0/ + + PRINT *, 'Within casa_poolout, mp = ', mp + nout=103 + OPEN(nout,file=casafile%cnpepool) + PRINT *, 'Opened file ', casafile%cnpepool + + casabal%sumcbal=MIN(9999.0,MAX(-9999.0,casabal%sumcbal)) + casabal%sumnbal=MIN(9999.0,MAX(-9999.0,casabal%sumnbal)) + casabal%sumpbal=MIN(9999.0,MAX(-9999.0,casabal%sumpbal)) + + DO npt =1, mp + nso = casamet%isorder(npt) + totpsoil(npt) = psorder(nso) *xpsoil50(nso) + IF(casamet%iveg2(npt)>0 ) THEN + IF (icycle<2) THEN + casapool%Nplant(npt,:) = casapool%ratioNCplant(npt,:) & + * casapool%cplant(npt,:) + casapool%Nlitter(npt,:)= casapool%ratioNClitter(npt,:) & + * casapool%clitter(npt,:) + casapool%Nsoil(npt,:) = casapool%ratioNCsoil(npt,:) & + * casapool%Csoil(npt,:) + casapool%nsoilmin(npt) = 2.0 + casabal%sumnbal(npt) = 0.0 + IF(casamet%iveg2(npt)==grass) THEN + casapool%nplant(npt,wood) = 0.0 + casapool%nlitter(npt,cwd) = 0.0 + ENDIF + ENDIF + + IF (icycle<3) THEN + casabal%sumpbal(npt) = 0.0 + casapool%pplant(npt,:) = casapool%Nplant(npt,:)/casapool%ratioNPplant(npt,:) + casapool%plitter(npt,:) = casapool%Nlitter(npt,:)/(casapool%ratioNPlitter(npt,:)+1.0e-10) + casapool%psoil(npt,:) = casapool%Nsoil(npt,:)/casapool%ratioNPsoil(npt,:) + casapool%psoillab(npt) = totpsoil(npt) *fracpLab(nso) + casapool%psoilsorb(npt)= casaflux%psorbmax(npt) * casapool%psoillab(npt) & + /(casaflux%kmlabp(npt)+casapool%psoillab(npt)) + casapool%psoilocc(npt) = totpsoil(npt) *fracPocc(nso) + IF(casamet%iveg2(npt)==grass) THEN + casapool%pplant(npt,wood) = 0.0 + casapool%plitter(npt,cwd) = 0.0 + ENDIF + ENDIF + ELSE + casapool%cplant(npt,:)=0.0; casapool%clitter(npt,:)=0.0; casapool%csoil(npt,:) = 0.0; casapool%clabile(npt) = 0.0 + casapool%nplant(npt,:)=0.0; casapool%nlitter(npt,:)=0.0; casapool%nsoil(npt,:) = 0.0; casapool%nsoilmin(npt) = 0.0 + casapool%pplant(npt,:)=0.0; casapool%plitter(npt,:)=0.0; casapool%psoil(npt,:) = 0.0 + casapool%psoillab(npt) = 0.0; casapool%psoilsorb(npt) = 0.0; casapool%psoilocc(npt) = 0.0 + casabal%sumcbal(npt) =0.0; casabal%sumnbal(npt) =0.0; casabal%sumpbal(npt) = 0.0 + ENDIF + + ! vh_js ! + IF (cable_user%CALL_POP) THEN + + WRITE(nout,92) ktau,npt,veg%iveg(npt),soil%isoilm(npt) , & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casamet%glai(npt), & + casabiome%sla(veg%iveg(npt)), phen%phase(npt), & + phen%doyphase(npt,3), phen%phen(npt), phen%aphen(npt), & + casapool%clabile(npt), & + casapool%cplant(npt,:),casapool%clitter(npt,:),casapool%csoil(npt,:), & + casaflux%frac_sapwood(npt), casaflux%sapwood_area(npt), & + casapool%nplant(npt,:),casapool%nlitter(npt,:),casapool%nsoil(npt,:), & + casapool%nsoilmin(npt),casapool%pplant(npt,:), & + casapool%plitter(npt,:), casapool%psoil(npt,:), & + casapool%psoillab(npt),casapool%psoilsorb(npt),casapool%psoilocc(npt), & + casabal%sumcbal(npt),casabal%sumnbal(npt),casabal%sumpbal(npt) + + + ELSE + WRITE(nout,92) ktau,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casamet%glai(npt), & + casabiome%sla(veg%iveg(npt)), phen%phase(npt), & + phen%doyphase(npt,3), phen%phen(npt), phen%aphen(npt), & + casapool%clabile(npt), & + casapool%cplant(npt,:),casapool%clitter(npt,:),casapool%csoil(npt,:), & + casapool%nplant(npt,:),casapool%nlitter(npt,:),casapool%nsoil(npt,:), & + casapool%nsoilmin(npt),casapool%pplant(npt,:), & + casapool%plitter(npt,:), casapool%psoil(npt,:), & + casapool%psoillab(npt),casapool%psoilsorb(npt),casapool%psoilocc(npt), & + casabal%sumcbal(npt),casabal%sumnbal(npt),casabal%sumpbal(npt) + ENDIF + + + ENDDO + + CLOSE(nout) + +92 FORMAT(5(i6,',',2x),5(f18.6,',',2x),2(i6,',',2x),100(f18.6,',',2x)) + END SUBROUTINE casa_poolout + +SUBROUTINE casa_fluxout(myear,veg,soil,casabal,casamet) + + USE cable_def_types_mod + USE casadimension + USE casaparm +USE casa_met_type_mod, ONLY: casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type +USE phenology_type_mod, ONLY: phenology_type + + IMPLICIT NONE + + TYPE (veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters + TYPE (soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters + TYPE (casa_met), INTENT(INOUT) :: casamet + TYPE (casa_balance), INTENT(INOUT) :: casabal + INTEGER, INTENT(IN) :: myear + ! REAL(r_2), INTENT(IN) :: clitterinput(mp,3),csoilinput(mp,3) + + ! local variables + INTEGER npt,nout + REAL(r_2) xyear, totGPP, totNPP + + totGPP =0.0 + totNPP =0.0 + nout=104 + xyear=1.0/FLOAT(myear) + casabal%FCgppyear=casabal%FCgppyear * xyear + casabal%FCnppyear=casabal%FCnppyear * xyear + casabal%FCrmleafyear=casabal%FCrmleafyear * xyear + casabal%FCrmwoodyear=casabal%FCrmwoodyear * xyear + casabal%FCrmrootyear=casabal%FCrmrootyear * xyear + casabal%FCrgrowyear=casabal%FCrgrowyear * xyear + casabal%FCrsyear=casabal%FCrsyear * xyear + casabal%FCneeyear=casabal%FCneeyear * xyear + casabal%FNdepyear=casabal%FNdepyear * xyear + casabal%FNfixyear=casabal%FNfixyear * xyear + casabal%FNsnetyear=casabal%FNsnetyear * xyear + casabal%FNupyear=casabal%FNupyear * xyear + casabal%FNleachyear=casabal%FNleachyear * xyear + casabal%FNlossyear=casabal%FNlossyear * xyear + casabal%FPweayear=casabal%FPweayear * xyear + casabal%FPdustyear=casabal%FPdustyear * xyear + casabal%FPsnetyear=casabal%FPsnetyear * xyear + casabal%FPupyear=casabal%FPupyear * xyear + casabal%FPleachyear=casabal%FPleachyear * xyear + casabal%FPlossyear=casabal%FPlossyear * xyear + ! clitterinput = clitterinput * xyear + ! csoilinput = csoilinput * xyear + + PRINT *, 'writing CNP fluxes out to file ', casafile%cnpflux + OPEN(nout,file=casafile%cnpflux) + DO npt =1,mp + SELECT CASE(icycle) + CASE(1) + + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%Fcnppyear(npt), & + casabal%Fcrmleafyear(npt),casabal%Fcrmwoodyear(npt), & + casabal%Fcrmrootyear(npt),casabal%Fcrgrowyear(npt), & + casabal%Fcrsyear(npt),casabal%Fcneeyear(npt) ! , & + ! clitterinput(npt,:),csoilinput(npt,:) + + CASE(2) + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%FCnppyear(npt), & + casabal%FCrmleafyear(npt),casabal%FCrmwoodyear(npt), & + casabal%FCrmrootyear(npt),casabal%FCrgrowyear(npt), & + casabal%FCrsyear(npt), casabal%FCneeyear(npt), & + ! clitterinput(npt,:),csoilinput(npt,:), & + casabal%FNdepyear(npt),casabal%FNfixyear(npt),casabal%FNsnetyear(npt), & + casabal%FNupyear(npt), casabal%FNleachyear(npt),casabal%FNlossyear(npt) + + CASE(3) + WRITE(nout,*) myear,npt,veg%iveg(npt),soil%isoilm(npt), & + casamet%isorder(npt),casamet%lat(npt),casamet%lon(npt), & + casamet%areacell(npt)*(1.0e-9),casabal%Fcgppyear(npt), & + casabal%FCnppyear(npt), & + casabal%Fcrmleafyear(npt),casabal%Fcrmwoodyear(npt), & + casabal%Fcrmrootyear(npt),casabal%Fcrgrowyear(npt), & + casabal%FCrsyear(npt), casabal%FCneeyear(npt), & + ! clitterinput(npt,:),csoilinput(npt,:), & + casabal%FNdepyear(npt),casabal%FNfixyear(npt), casabal%FNsnetyear(npt),& + casabal%FNupyear(npt), casabal%FNleachyear(npt),casabal%FNlossyear(npt),& + casabal%FPweayear(npt),casabal%FPdustyear(npt), casabal%FPsnetyear(npt),& + casabal%FPupyear(npt), casabal%FPleachyear(npt),casabal%FPlossyear(npt) + + END SELECT + totGPP = totGPP+casabal%Fcgppyear(npt)* casamet%areacell(npt) + + + totNPP = totNPP+casabal%Fcnppyear(npt)* casamet%areacell(npt) + ENDDO + + PRINT *, 'totGPP global = ', totGPP*(1.0e-15) + PRINT *, 'totNPP global = ', totNPP*(1.0e-15) + CLOSE(nout) +92 FORMAT(5(i6,',',2x),100(f15.6,',',2x)) + END SUBROUTINE casa_fluxout + +SUBROUTINE casa_cnpflux(casaflux,casapool,casabal,zeroflux) + USE cable_def_types_mod + USE casadimension + USE casaparm +USE casa_pool_type_mod, ONLY: casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux => casa_flux_type +USE casa_balance_type_mod, ONLY: casa_balance => casa_bal_type + +IMPLICIT NONE + +TYPE (casa_flux), INTENT(INOUT) :: casaflux +TYPE (casa_pool), INTENT(INOUT) :: casapool +TYPE (casa_balance), INTENT(INOUT) :: casabal + + LOGICAL :: zeroflux + ! REAL(r_2), INTENT(INOUT) :: clitterinput(mp,3),csoilinput(mp,3) + INTEGER n + + IF(zeroflux) THEN + casabal%FCgppyear = 0.0 + casabal%FCrpyear = 0.0 + casabal%FCrmleafyear = 0.0 + casabal%FCrmwoodyear = 0.0 + casabal%FCrmrootyear = 0.0 + casabal%FCrgrowyear = 0.0 + casabal%FCnppyear = 0.0 + casabal%FCrsyear = 0.0 + casabal%FCneeyear = 0.0 + casabal%dCdtyear = 0.0 + + + casabal%FNdepyear = 0.0 + casabal%FNfixyear = 0.0 + casabal%FNsnetyear = 0.0 + casabal%FNupyear = 0.0 + casabal%FNleachyear = 0.0 + casabal%FNlossyear = 0.0 + + casabal%FPweayear = 0.0 + casabal%FPdustyear = 0.0 + casabal%FPsnetyear = 0.0 + casabal%FPupyear = 0.0 + casabal%FPleachyear = 0.0 + casabal%FPlossyear = 0.0 + + casaflux%FluxCtohwp = 0.0 + casaflux%FluxNtohwp = 0.0 + casaflux%FluxPtohwp = 0.0 + casaflux%FluxCtoclear = 0.0 + casaflux%FluxNtoclear = 0.0 + casaflux%FluxPtoclear = 0.0 + casaflux%CtransferLUC = 0.02 + ELSE + + casaflux%Crp(:) = casaflux%Crmplant(:,leaf) + casaflux%Crmplant(:,wood) + casaflux%Crmplant(:,froot) + casaflux%Crgplant(:) + casabal%FCgppyear = casabal%FCgppyear + casaflux%Cgpp * deltpool + casabal%FCrpyear = casabal%FCrpyear + casaflux%Crp * deltpool + casabal%FCrmleafyear(:) = casabal%FCrmleafyear(:) + casaflux%Crmplant(:,leaf) * deltpool + casabal%FCrmwoodyear(:) = casabal%FCrmwoodyear(:) + casaflux%Crmplant(:,wood) * deltpool + casabal%FCrmrootyear(:) = casabal%FCrmrootyear(:) + casaflux%Crmplant(:,froot) * deltpool + casabal%FCrgrowyear = casabal%FCrgrowyear + casaflux%Crgplant * deltpool + ! change made ypwang 17-nov-2013 to accoutn for change in labile carbon pool size + casabal%FCnppyear = casabal%FCnppyear + (casaflux%Cnpp+casapool%dClabiledt) * deltpool + casabal%FCrsyear = casabal%FCrsyear + casaflux%Crsoil * deltpool + casabal%FCneeyear = casabal%FCneeyear & + + (casaflux%Cnpp+casapool%dClabiledt-casaflux%Crsoil) * deltpool + casabal%dCdtyear = casabal%dCdtyear + (casapool%Ctot-casapool%Ctot_0)*deltpool + + ! DO n=1,3 + ! clitterinput(:,n)= clitterinput(:,n) + casaflux%kplant(:,n) * casapool%cplant(:,n) * deltpool + ! csoilinput(:,n) = csoilinput(:,n) + casaflux%fluxCtosoil(:,n) * deltpool + ! !csoilinput(:,n) = csoilinput(:,n)+casaflux%fluxCtolitter(:,n)*deltpool + ! ENDDO + + IF (icycle >1) THEN + casabal%FNdepyear = casabal%FNdepyear + casaflux%Nmindep * deltpool + casabal%FNfixyear = casabal%FNfixyear + casaflux%Nminfix * deltpool + casabal%FNsnetyear = casabal%FNsnetyear + casaflux%Nsnet * deltpool + casabal%FNupyear = casabal%FNupyear + casaflux%Nminuptake * deltpool + casabal%FNleachyear = casabal%FNleachyear + casaflux%Nminleach * deltpool + casabal%FNlossyear = casabal%FNlossyear + casaflux%Nminloss * deltpool + ENDIF + + IF (icycle >2) THEN + casabal%FPweayear = casabal%FPweayear + casaflux%Pwea * deltpool + casabal%FPdustyear = casabal%FPdustyear + casaflux%Pdep * deltpool + casabal%FPsnetyear = casabal%FPsnetyear + casaflux%Psnet * deltpool + casabal%FPupyear = casabal%FPupyear + casaflux%Plabuptake * deltpool + casabal%FPleachyear = casabal%FPleachyear + casaflux%Pleach * deltpool + casabal%FPlossyear = casabal%FPlossyear + casaflux%Ploss * deltpool + ENDIF + ENDIF + END SUBROUTINE casa_cnpflux + +END MODULE casa_inout_module diff --git a/src/coupled/AM3/control/casa/types/casa_met_type.F90 b/src/coupled/AM3/control/casa/types/casa_met_type.F90 new file mode 100644 index 000000000..793be48d6 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_met_type.F90 @@ -0,0 +1,234 @@ +MODULE casa_met_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_met_data_type +PUBLIC :: casa_met_type +PUBLIC :: alloc_casa_met_data_type +PUBLIC :: assoc_casa_met_type + +TYPE casa_met_data_type + + INTEGER, ALLOCATABLE :: lnonwood (:) + INTEGER, ALLOCATABLE :: iveg2 (:) + INTEGER, ALLOCATABLE :: ijgcm (:) + INTEGER, ALLOCATABLE :: isorder (:) + + REAL(r_2), ALLOCATABLE :: glai (:) + REAL(r_2), ALLOCATABLE :: Tairk (:) + REAL(r_2), ALLOCATABLE :: precip (:) + REAL(r_2), ALLOCATABLE :: tsoilavg (:) + REAL(r_2), ALLOCATABLE :: moistavg (:) + REAL(r_2), ALLOCATABLE :: btran (:) + REAL(r_2), ALLOCATABLE :: lat (:) + REAL(r_2), ALLOCATABLE :: lon (:) + REAL(r_2), ALLOCATABLE :: areacell (:) + + REAL(r_2), ALLOCATABLE :: Tsoil (:,:) + REAL(r_2), ALLOCATABLE :: moist (:,:) + REAL(r_2), ALLOCATABLE :: Tairkspin (:,:) + REAL(r_2), ALLOCATABLE :: cgppspin (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: crmplantspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_4 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_5 (:,:) + REAL(r_2), ALLOCATABLE :: Tsoilspin_6 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_1 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_2 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_3 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_4 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_5 (:,:) + REAL(r_2), ALLOCATABLE :: moistspin_6 (:,:) + REAL(r_2), ALLOCATABLE :: mtempspin (:,:) + +END TYPE casa_met_data_type + +TYPE casa_met_type + + INTEGER, PUBLIC, POINTER :: lnonwood (:) + INTEGER, PUBLIC, POINTER :: iveg2 (:) + INTEGER, PUBLIC, POINTER :: ijgcm (:) + INTEGER, PUBLIC, POINTER :: isorder (:) + + REAL(r_2), PUBLIC, POINTER :: glai (:) + REAL(r_2), PUBLIC, POINTER :: Tairk (:) + REAL(r_2), PUBLIC, POINTER :: precip (:) + REAL(r_2), PUBLIC, POINTER :: tsoilavg (:) + REAL(r_2), PUBLIC, POINTER :: moistavg (:) + REAL(r_2), PUBLIC, POINTER :: btran (:) + REAL(r_2), PUBLIC, POINTER :: lat (:) + REAL(r_2), PUBLIC, POINTER :: lon (:) + REAL(r_2), PUBLIC, POINTER :: areacell (:) + + REAL(r_2), PUBLIC, POINTER :: Tsoil (:,:) + REAL(r_2), PUBLIC, POINTER :: moist (:,:) + REAL(r_2), PUBLIC, POINTER :: Tairkspin (:,:) + REAL(r_2), PUBLIC, POINTER :: cgppspin (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: crmplantspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_4 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_5 (:,:) + REAL(r_2), PUBLIC, POINTER :: Tsoilspin_6 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_1 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_2 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_3 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_4 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_5 (:,:) + REAL(r_2), PUBLIC, POINTER :: moistspin_6 (:,:) + REAL(r_2), PUBLIC, POINTER :: mtempspin (:,:) + +END TYPE casa_met_type + +CONTAINS + +SUBROUTINE alloc_casa_met_data_type( casamet_data, arraysize ) + +USE casadimension, ONLY: mdyear +USE grid_constants_mod_cbl, ONLY: nsl ! # of soil layers [6] + +IMPLICIT NONE + +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE( casamet_data % lnonwood ( arraysize ) ) +ALLOCATE( casamet_data % iveg2 ( arraysize ) ) +ALLOCATE( casamet_data % ijgcm ( arraysize ) ) +ALLOCATE( casamet_data % isorder ( arraysize ) ) +ALLOCATE( casamet_data % glai ( arraysize ) ) +ALLOCATE( casamet_data % Tairk ( arraysize ) ) +ALLOCATE( casamet_data % precip ( arraysize ) ) +ALLOCATE( casamet_data % tsoilavg ( arraysize ) ) +ALLOCATE( casamet_data % moistavg ( arraysize ) ) +ALLOCATE( casamet_data % btran ( arraysize ) ) +ALLOCATE( casamet_data % lat ( arraysize ) ) +ALLOCATE( casamet_data % lon ( arraysize ) ) +ALLOCATE( casamet_data % areacell ( arraysize ) ) + +ALLOCATE( casamet_data % Tsoil ( arraysize, nsl ) ) +ALLOCATE( casamet_data % moist ( arraysize, nsl ) ) +ALLOCATE( casamet_data % Tairkspin ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % cgppspin ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % crmplantspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_4 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_5 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % Tsoilspin_6 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_1 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_2 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_3 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_4 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_5 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % moistspin_6 ( arraysize, mdyear ) ) +ALLOCATE( casamet_data % mtempspin ( arraysize, mdyear ) ) + +RETURN +END SUBROUTINE alloc_casa_met_data_type + + +SUBROUTINE zero_casa_met_data_type( casamet_data ) + +IMPLICIT NONE + +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data + +casamet_data % lnonwood (:) = 0.0 +casamet_data % iveg2 (:) = 0.0 +casamet_data % ijgcm (:) = 0.0 +casamet_data % isorder (:) = 0.0 +casamet_data % glai (:) = 0.0 +casamet_data % Tairk (:) = 0.0 +casamet_data % precip (:) = 0.0 +casamet_data % tsoilavg (:) = 0.0 +casamet_data % moistavg (:) = 0.0 +casamet_data % btran (:) = 0.0 +casamet_data % lat (:) = 0.0 +casamet_data % lon (:) = 0.0 +casamet_data % areacell (:) = 0.0 + +casamet_data % Tsoil (:,:) = 0.0 +casamet_data % moist (:,:) = 0.0 +casamet_data % Tairkspin (:,:) = 0.0 +casamet_data % cgppspin (:,:) = 0.0 +casamet_data % crmplantspin_1 (:,:) = 0.0 +casamet_data % crmplantspin_2 (:,:) = 0.0 +casamet_data % crmplantspin_3 (:,:) = 0.0 +casamet_data % Tsoilspin_1 (:,:) = 0.0 +casamet_data % Tsoilspin_2 (:,:) = 0.0 +casamet_data % Tsoilspin_3 (:,:) = 0.0 +casamet_data % Tsoilspin_4 (:,:) = 0.0 +casamet_data % Tsoilspin_5 (:,:) = 0.0 +casamet_data % Tsoilspin_6 (:,:) = 0.0 +casamet_data % moistspin_1 (:,:) = 0.0 +casamet_data % moistspin_2 (:,:) = 0.0 +casamet_data % moistspin_3 (:,:) = 0.0 +casamet_data % moistspin_4 (:,:) = 0.0 +casamet_data % moistspin_5 (:,:) = 0.0 +casamet_data % moistspin_6 (:,:) = 0.0 +casamet_data % mtempspin (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_casa_met_data_type + + +SUBROUTINE assoc_casa_met_type( casamet, casamet_data ) + +IMPLICIT NONE + +TYPE (casa_met_type), INTENT(INOUT) :: casamet +TYPE (casa_met_data_type), INTENT(INOUT), TARGET :: casamet_data + +casamet % lnonwood => casamet_data % lnonwood +casamet % iveg2 => casamet_data % iveg2 +casamet % ijgcm => casamet_data % ijgcm +casamet % isorder => casamet_data % isorder +casamet % glai => casamet_data % glai +casamet % Tairk => casamet_data % Tairk +casamet % precip => casamet_data % precip +casamet % tsoilavg => casamet_data % tsoilavg +casamet % moistavg => casamet_data % moistavg +casamet % btran => casamet_data % btran +casamet % lat => casamet_data % lat +casamet % lon => casamet_data % lon +casamet % areacell => casamet_data % areacell + +casamet % Tsoil => casamet_data % Tsoil +casamet % moist => casamet_data % moist +casamet % Tairkspin => casamet_data % Tairkspin +casamet % cgppspin => casamet_data % cgppspin +casamet % crmplantspin_1 => casamet_data % crmplantspin_1 +casamet % crmplantspin_2 => casamet_data % crmplantspin_2 +casamet % crmplantspin_3 => casamet_data % crmplantspin_3 +casamet % Tsoilspin_1 => casamet_data % Tsoilspin_1 +casamet % Tsoilspin_2 => casamet_data % Tsoilspin_2 +casamet % Tsoilspin_3 => casamet_data % Tsoilspin_3 +casamet % Tsoilspin_4 => casamet_data % Tsoilspin_4 +casamet % Tsoilspin_5 => casamet_data % Tsoilspin_5 +casamet % Tsoilspin_6 => casamet_data % Tsoilspin_6 +casamet % moistspin_1 => casamet_data % moistspin_1 +casamet % moistspin_2 => casamet_data % moistspin_2 +casamet % moistspin_3 => casamet_data % moistspin_3 +casamet % moistspin_4 => casamet_data % moistspin_4 +casamet % moistspin_5 => casamet_data % moistspin_5 +casamet % moistspin_6 => casamet_data % moistspin_6 +casamet % mtempspin => casamet_data % mtempspin + +RETURN +END SUBROUTINE assoc_casa_met_type + +END MODULE casa_met_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 b/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 new file mode 100644 index 000000000..9276866f5 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 @@ -0,0 +1,110 @@ +MODULE phenology_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + ! ntype_max=17 +USE casadimension, ONLY: mvtype, mphase, mdyear + +IMPLICIT NONE + +PUBLIC :: phenology_data_type +PUBLIC :: phenology_type +PUBLIC :: alloc_phenology_data_type +PUBLIC :: zero_phenology_data_type +PUBLIC :: assoc_phenology_type + +TYPE phenology_data_type + + INTEGER, ALLOCATABLE :: phase (:) + REAL(r_2), ALLOCATABLE :: TKshed (:) + INTEGER, ALLOCATABLE :: doyphase (:,:) + REAL, ALLOCATABLE :: phen (:) ! fraction of max LAI + REAL, ALLOCATABLE :: aphen (:) ! annual leaf on sum + INTEGER, ALLOCATABLE :: phasespin (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_1 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_2 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_3 (:,:) + INTEGER, ALLOCATABLE :: doyphasespin_4 (:,:) + +END TYPE phenology_data_type + +TYPE phenology_type + + INTEGER, PUBLIC, POINTER :: phase (:) + REAL(r_2), PUBLIC, POINTER :: TKshed (:) + INTEGER, PUBLIC, POINTER :: doyphase (:,:) + REAL, PUBLIC, POINTER :: phen (:) + REAL, PUBLIC, POINTER :: aphen (:) + INTEGER, PUBLIC, POINTER :: phasespin (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_1 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_2 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_3 (:,:) + INTEGER, PUBLIC, POINTER :: doyphasespin_4 (:,:) + +END TYPE phenology_type + +CONTAINS + +SUBROUTINE alloc_phenology_data_type( phen_data, arraysize ) + +IMPLICIT NONE + +TYPE( phenology_data_type ), INTENT(INOUT) :: phen_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE( phen_data % TKshed ( mvtype ) ) +ALLOCATE( phen_data % phase ( arraysize ) ) +ALLOCATE( phen_data % doyphase ( arraysize, mphase ) ) +ALLOCATE( phen_data % phen ( arraysize ) ) +ALLOCATE( phen_data % aphen ( arraysize ) ) +ALLOCATE( phen_data % phasespin ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_1 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_2 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_3 ( arraysize, mdyear ) ) +ALLOCATE( phen_data % doyphasespin_4 ( arraysize, mdyear ) ) + +RETURN +END SUBROUTINE alloc_phenology_data_type + +SUBROUTINE zero_phenology_data_type( phen_data ) + +IMPLICIT NONE + +TYPE (phenology_data_type), INTENT(INOUT) :: phen_data + +phen_data % phase (:) = 0 +phen_data % doyphase (:,:) = 0 +phen_data % TKshed (:) = 0.0 +phen_data % phen (:) = 0.0 +phen_data % aphen (:) = 0.0 +phen_data % phasespin (:,:) = 0.0 +phen_data % doyphasespin_1 (:,:) = 0.0 +phen_data % doyphasespin_2 (:,:) = 0.0 +phen_data % doyphasespin_3 (:,:) = 0.0 +phen_data % doyphasespin_4 (:,:) = 0.0 + +RETURN +END SUBROUTINE zero_phenology_data_type + +SUBROUTINE assoc_phenology_type( phen, phen_data ) + +IMPLICIT NONE + +TYPE (phenology_type), INTENT(INOUT) :: phen +TYPE (phenology_data_type), INTENT(INOUT), TARGET :: phen_data + +phen % phase => phen_data % phase +phen % doyphase => phen_data % doyphase +phen % TKshed => phen_data % TKshed +phen % phen => phen_data % phen +phen % aphen => phen_data % aphen +phen % phasespin => phen_data % phasespin +phen % doyphasespin_1 => phen_data % doyphasespin_1 +phen % doyphasespin_2 => phen_data % doyphasespin_2 +phen % doyphasespin_3 => phen_data % doyphasespin_3 +phen % doyphasespin_4 => phen_data % doyphasespin_4 + +RETURN +END SUBROUTINE assoc_phenology_type + +END MODULE phenology_type_mod + diff --git a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 new file mode 100644 index 000000000..b37a2eb20 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 @@ -0,0 +1,288 @@ +MODULE casa_pool_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: casa_pool_data_type +PUBLIC :: casa_pool_type +PUBLIC :: alloc_casa_pool_data_type +PUBLIC :: assoc_casa_pool_type +PUBLIC :: zero_casa_pool_data_type + +TYPE casa_pool_data_type + + REAL(r_2), ALLOCATABLE :: Clabile (:) + REAL(r_2), ALLOCATABLE :: dClabiledt (:) + REAL(r_2), ALLOCATABLE :: Ctot (:) + REAL(r_2), ALLOCATABLE :: Ctot_0 (:) + REAL(r_2), ALLOCATABLE :: Nsoilmin (:) + REAL(r_2), ALLOCATABLE :: Psoillab (:) + REAL(r_2), ALLOCATABLE :: Psoilsorb (:) + REAL(r_2), ALLOCATABLE :: Psoilocc (:) + REAL(r_2), ALLOCATABLE :: dNsoilmindt (:) + REAL(r_2), ALLOCATABLE :: dPsoillabdt (:) + REAL(r_2), ALLOCATABLE :: dPsoilsorbdt (:) + REAL(r_2), ALLOCATABLE :: dPsoiloccdt (:) + + REAL(r_2), ALLOCATABLE :: Cplant (:,:) + REAL(r_2), ALLOCATABLE :: Nplant (:,:) + REAL(r_2), ALLOCATABLE :: Pplant (:,:) + REAL(r_2), ALLOCATABLE :: dCplantdt (:,:) + REAL(r_2), ALLOCATABLE :: dNplantdt (:,:) + REAL(r_2), ALLOCATABLE :: dPplantdt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCplant (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPplant (:,:) + REAL(r_2), ALLOCATABLE :: Clitter (:,:) + REAL(r_2), ALLOCATABLE :: Nlitter (:,:) + REAL(r_2), ALLOCATABLE :: Plitter (:,:) + REAL(r_2), ALLOCATABLE :: dClitterdt (:,:) + REAL(r_2), ALLOCATABLE :: dNlitterdt (:,:) + REAL(r_2), ALLOCATABLE :: dPlitterdt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNClitter (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPlitter (:,:) + REAL(r_2), ALLOCATABLE :: Csoil (:,:) + REAL(r_2), ALLOCATABLE :: Nsoil (:,:) + REAL(r_2), ALLOCATABLE :: Psoil (:,:) + REAL(r_2), ALLOCATABLE :: dCsoildt (:,:) + REAL(r_2), ALLOCATABLE :: dNsoildt (:,:) + REAL(r_2), ALLOCATABLE :: dPsoildt (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilnew (:,:) + REAL(r_2), ALLOCATABLE :: ratioNPsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilmin (:,:) + REAL(r_2), ALLOCATABLE :: ratioNCsoilmax (:,:) + REAL(r_2), ALLOCATABLE :: ratioPcsoil (:,:) + REAL(r_2), ALLOCATABLE :: ratioPcplant (:,:) + REAL(r_2), ALLOCATABLE :: ratioPclitter (:,:) + REAL(r_2), ALLOCATABLE :: cwoodprod (:,:) + REAL(r_2), ALLOCATABLE :: nwoodprod (:,:) + REAL(r_2), ALLOCATABLE :: pwoodprod (:,:) + +END TYPE casa_pool_data_type + +TYPE casa_pool_type + + REAL(r_2), POINTER, PUBLIC :: Clabile (:) + REAL(r_2), POINTER, PUBLIC :: dClabiledt (:) + REAL(r_2), POINTER, PUBLIC :: Ctot (:) + REAL(r_2), POINTER, PUBLIC :: Ctot_0 (:) + REAL(r_2), POINTER, PUBLIC :: Nsoilmin (:) + REAL(r_2), POINTER, PUBLIC :: Psoillab (:) + REAL(r_2), POINTER, PUBLIC :: Psoilsorb (:) + REAL(r_2), POINTER, PUBLIC :: Psoilocc (:) + REAL(r_2), POINTER, PUBLIC :: dNsoilmindt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoillabdt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoilsorbdt (:) + REAL(r_2), POINTER, PUBLIC :: dPsoiloccdt (:) + + REAL(r_2), POINTER, PUBLIC :: Cplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Nplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Pplant (:,:) + REAL(r_2), POINTER, PUBLIC :: dCplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPplantdt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPplant (:,:) + REAL(r_2), POINTER, PUBLIC :: Clitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Nlitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Plitter (:,:) + REAL(r_2), POINTER, PUBLIC :: dClitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNlitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPlitterdt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNClitter (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPlitter (:,:) + REAL(r_2), POINTER, PUBLIC :: Csoil (:,:) + REAL(r_2), POINTER, PUBLIC :: Nsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: Psoil (:,:) + REAL(r_2), POINTER, PUBLIC :: dCsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: dNsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: dPsoildt (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilnew (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNPsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilmin (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioNCsoilmax (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcsoil (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPcplant (:,:) + REAL(r_2), POINTER, PUBLIC :: ratioPclitter (:,:) + REAL(r_2), POINTER, PUBLIC :: cwoodprod (:,:) + REAL(r_2), POINTER, PUBLIC :: nwoodprod (:,:) + REAL(r_2), POINTER, PUBLIC :: pwoodprod (:,:) + +END TYPE casa_pool_type + +CONTAINS + +SUBROUTINE alloc_casa_pool_data_type( casapool_data, arraysize ) + +USE casadimension, ONLY: mplant, mlitter, msoil, mwood + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( casapool_data % Clabile ( arraysize ) ) +ALLOCATE ( casapool_data % dClabiledt ( arraysize ) ) +ALLOCATE ( casapool_data % Ctot ( arraysize ) ) +ALLOCATE ( casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( casapool_data % Nsoilmin ( arraysize ) ) +ALLOCATE ( casapool_data % Psoillab ( arraysize ) ) +ALLOCATE ( casapool_data % Psoilsorb ( arraysize ) ) +ALLOCATE ( casapool_data % Psoilocc ( arraysize ) ) +ALLOCATE ( casapool_data % dNsoilmindt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoillabdt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoilsorbdt ( arraysize ) ) +ALLOCATE ( casapool_data % dPsoiloccdt ( arraysize ) ) + +ALLOCATE ( casapool_data % Cplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Nplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Pplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dCplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dNplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % dPplantdt ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioNCplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioNPplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % Clitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Nlitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Plitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dClitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dNlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % dPlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % ratioNClitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % ratioNPlitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % Csoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % Nsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % Psoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dCsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dNsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % dPsoildt ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilnew ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNPsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilmin ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioNCsoilmax ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioPcsoil ( arraysize, msoil ) ) +ALLOCATE ( casapool_data % ratioPcplant ( arraysize, mplant ) ) +ALLOCATE ( casapool_data % ratioPclitter ( arraysize, mlitter ) ) +ALLOCATE ( casapool_data % cwoodprod ( arraysize, mwood ) ) +ALLOCATE ( casapool_data % nwoodprod ( arraysize, mwood ) ) +ALLOCATE ( casapool_data % pwoodprod ( arraysize, mwood ) ) + +END SUBROUTINE alloc_casa_pool_data_type + +SUBROUTINE zero_casa_pool_data_type( casapool_data ) + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data + +casapool_data % Clabile = 0.0 +casapool_data % dClabiledt = 0.0 +casapool_data % Ctot = 0.0 +casapool_data % Ctot_0 = 0.0 +casapool_data % Nsoilmin = 0.0 +casapool_data % Psoillab = 0.0 +casapool_data % Psoilsorb = 0.0 +casapool_data % Psoilocc = 0.0 +casapool_data % dNsoilmindt = 0.0 +casapool_data % dPsoillabdt = 0.0 +casapool_data % dPsoilsorbdt = 0.0 +casapool_data % dPsoiloccdt = 0.0 + +casapool_data % Cplant = 0.0 +casapool_data % Nplant = 0.0 +casapool_data % Pplant = 0.0 +casapool_data % dCplantdt = 0.0 +casapool_data % dNplantdt = 0.0 +casapool_data % dPplantdt = 0.0 +casapool_data % ratioNCplant = 0.0 +casapool_data % ratioNPplant = 0.0 +casapool_data % Clitter = 0.0 +casapool_data % Nlitter = 0.0 +casapool_data % Plitter = 0.0 +casapool_data % dClitterdt = 0.0 +casapool_data % dNlitterdt = 0.0 +casapool_data % dPlitterdt = 0.0 +casapool_data % ratioNClitter = 0.0 +casapool_data % ratioNPlitter = 0.0 +casapool_data % Csoil = 0.0 +casapool_data % Nsoil = 0.0 +casapool_data % Psoil = 0.0 +casapool_data % dCsoildt = 0.0 +casapool_data % dNsoildt = 0.0 +casapool_data % dPsoildt = 0.0 +casapool_data % ratioNCsoil = 0.0 +casapool_data % ratioNCsoilnew = 0.0 +casapool_data % ratioNPsoil = 0.0 +casapool_data % ratioNCsoilmin = 0.0 +casapool_data % ratioNCsoilmax = 0.0 +casapool_data % ratioPcsoil = 0.0 +casapool_data % ratioPcplant = 0.0 +casapool_data % ratioPclitter = 0.0 +casapool_data % cwoodprod = 0.0 +casapool_data % nwoodprod = 0.0 +casapool_data % pwoodprod = 0.0 + +RETURN +END SUBROUTINE zero_casa_pool_data_type + +SUBROUTINE assoc_casa_pool_type( casapool, casapool_data ) + +IMPLICIT NONE + +TYPE (casa_pool_type), INTENT(INOUT) :: casapool +TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: casapool_data + +casapool % Clabile => casapool_data % Clabile +casapool % dClabiledt => casapool_data % dClabiledt +casapool % Ctot => casapool_data % Ctot +casapool % Ctot_0 => casapool_data % Ctot_0 +casapool % Nsoilmin => casapool_data % Nsoilmin +casapool % Psoillab => casapool_data % Psoillab +casapool % Psoilsorb => casapool_data % Psoilsorb +casapool % Psoilocc => casapool_data % Psoilocc +casapool % dNsoilmindt => casapool_data % dNsoilmindt +casapool % dPsoillabdt => casapool_data % dPsoillabdt +casapool % dPsoilsorbdt => casapool_data % dPsoilsorbdt +casapool % dPsoiloccdt => casapool_data % dPsoiloccdt + +casapool % Cplant => casapool_data % Cplant +casapool % Nplant => casapool_data % Nplant +casapool % Pplant => casapool_data % Pplant +casapool % dCplantdt => casapool_data % dCplantdt +casapool % dNplantdt => casapool_data % dNplantdt +casapool % dPplantdt => casapool_data % dPplantdt +casapool % ratioNCplant => casapool_data % ratioNCplant +casapool % ratioNPplant => casapool_data % ratioNPplant +casapool % Clitter => casapool_data % Clitter +casapool % Nlitter => casapool_data % Nlitter +casapool % Plitter => casapool_data % Plitter +casapool % dClitterdt => casapool_data % dClitterdt +casapool % dNlitterdt => casapool_data % dNlitterdt +casapool % dPlitterdt => casapool_data % dPlitterdt +casapool % ratioNClitter => casapool_data % ratioNClitter +casapool % ratioNPlitter => casapool_data % ratioNPlitter +casapool % Csoil => casapool_data % Csoil +casapool % Nsoil => casapool_data % Nsoil +casapool % Psoil => casapool_data % Psoil +casapool % dCsoildt => casapool_data % dCsoildt +casapool % dNsoildt => casapool_data % dNsoildt +casapool % dPsoildt => casapool_data % dPsoildt +casapool % ratioNCsoil => casapool_data % ratioNCsoil +casapool % ratioNCsoilnew => casapool_data % ratioNCsoilnew +casapool % ratioNPsoil => casapool_data % ratioNPsoil +casapool % ratioNCsoilmin => casapool_data % ratioNCsoilmin +casapool % ratioNCsoilmax => casapool_data % ratioNCsoilmax +casapool % ratioPcsoil => casapool_data % ratioPcsoil +casapool % ratioPcplant => casapool_data % ratioPcplant +casapool % ratioPclitter => casapool_data % ratioPclitter +casapool % cwoodprod => casapool_data % cwoodprod +casapool % nwoodprod => casapool_data % nwoodprod +casapool % pwoodprod => casapool_data % pwoodprod + +RETURN +END SUBROUTINE assoc_casa_pool_type + +END MODULE casa_pool_type_mod diff --git a/src/coupled/AM3/control/casa/types/casa_readbiome.F90 b/src/coupled/AM3/control/casa/types/casa_readbiome.F90 new file mode 100644 index 000000000..800755514 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_readbiome.F90 @@ -0,0 +1,2445 @@ +MODULE casa_readbiome_module + +CONTAINS + +! jh:is ntiles used here actually ntiles? +SUBROUTINE casa_readbiome( mp, nsl, ntiles, veg_iveg, soil_zse, casabiome, & + casapool, casaflux, casamet, phen ) + +!USE cable_def_types_mod !jh? for ms, ntiles + USE casaparm + +!subrs +!jh!USE pft_lookup_parms_csv1_mod_cnp, ONLY: casa_pft_params_csv1 + +!data +USE casa_files_type_mod, ONLY: casafile ! TYPE instance +USE casavariable, ONLY: casa_biome ! TYPE declaration +USE casavariable, ONLY: casa_pool ! TYPE declaration +USE casavariable, ONLY: casa_flux ! TYPE declaration +USE casavariable, ONLY: casa_met ! TYPE declaration + +USE cable_common_module, ONLY: cable_user +USE casadimension, ONLY: mso, msoil, mplant +USE casadimension, ONLY: deltcasa +USE casadimension, ONLY: icycle +USE phenology_type_mod, ONLY: phenology_type + +IMPLICIT NONE + +INTEGER, INTENT(IN) :: mp ! # active tile points +INTEGER, INTENT(IN) :: nsl ! # soil layers +INTEGER, INTENT(IN) :: ntiles ! # SurfaceTypes +INTEGER, INTENT(IN) :: veg_iveg(mp) ! SurfaceType index +REAL, INTENT(IN) :: soil_zse(nsl) ! soil depth per layer + +TYPE (casa_biome), INTENT(OUT) :: casabiome +TYPE (casa_pool), INTENT(OUT) :: casapool +TYPE (casa_flux), INTENT(OUT) :: casaflux +TYPE (casa_met), INTENT(OUT) :: casamet +TYPE (phenology_type), INTENT(OUT) :: phen + + ! local variables + REAL(r_2), DIMENSION(ntiles) :: leafage,frootage,woodage + REAL(r_2), DIMENSION(ntiles) :: totroot + REAL(r_2), DIMENSION(ntiles) :: cwdage,metage,strage + REAL(r_2), DIMENSION(ntiles) :: micage,slowage,passage,clabileage,slax + REAL(r_2), DIMENSION(ntiles,mplant):: ratioCNplant + REAL(r_2), DIMENSION(ntiles,msoil) :: ratioCNsoil,ratioCNsoilmin,ratioCNsoilmax + REAL(r_2), DIMENSION(nsl) :: depthsoila,depthsoilb + REAL(r_2), DIMENSION(ntiles) :: xfNminloss, xfNminleach, xnfixrate + REAL(r_2), DIMENSION(ntiles) :: cleaf,cwood,cfroot, & + cmet,cstr,ccwd, & + cmic,cslow,cpass + REAL(r_2), DIMENSION(ntiles) :: nleaf,nwood,nfroot, & + nmet,nstr,ncwd, & + nmic,nslow,npass,xnsoilmin + REAL(r_2), DIMENSION(ntiles) :: xpleaf, xpwood, xpfroot, & + xpmet, xpstr, xpcwd, & + xpmic,xpslow,xppass,xplab,xpsorb,xpocc + REAL(r_2), DIMENSION(mso) :: xkmlabp,xpsorbmax,xfPleach + REAL(r_2), DIMENSION(mso,msoil) :: ratioNPsoil + REAL(r_2), DIMENSION(ntiles) :: xfherbivore,xxkleafcoldmax, xxkleafdrymax + REAL(r_2), DIMENSION(ntiles) :: xkuplabp + REAL(r_2), DIMENSION(ntiles,nsl) :: fracroot + REAL(r_2) :: xratioNPleafmin,xratioNPleafmax, & + xratioNPwoodmin,xratioNPwoodmax, & + xratioNPfrootmin,xratioNPfrootmax + INTEGER :: i,iv1,nv,ns,npt,iv,is,iso + INTEGER :: nv0,nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nv9,nv10,nv11,nv12 + REAL(r_2), DIMENSION(ntiles) :: xxnpmax,xq10soil,xxkoptlitter,xxkoptsoil,xprodptase, & + xcostnpup,xmaxfinelitter,xmaxcwd,xnintercept,xnslope + REAL(r_2), DIMENSION(mso) :: xxkplab,xxkpsorb,xxkpocc + + +casabiome%ivt2( 1 ) = 3 +casabiome%ivt2( 2 ) = 3 +casabiome%ivt2( 3 ) = 3 +casabiome%ivt2( 4 ) = 3 +casabiome%ivt2( 5 ) = 2 +casabiome%ivt2( 6 ) = 1 +casabiome%ivt2( 7 ) = 1 +casabiome%ivt2( 8 ) = 2 +casabiome%ivt2( 9 ) = 1 +casabiome%ivt2( 10 ) = 1 +casabiome%ivt2( 11 ) = 0 +casabiome%ivt2( 12 ) = 0 +casabiome%ivt2( 13 ) = 0 +casabiome%ivt2( 14 ) = 0 +casabiome%ivt2( 15 ) = 0 +casabiome%ivt2( 16 ) = 0 +casabiome%ivt2( 17 ) = 0 + +! where ice,water,urban=0)/grass=1/shrub=2/woody=3 + +! Tranche 1 +!=============================================================== +casabiome % kroot ( 1 ) = 5.500 +casabiome %rootdepth ( 1 ) = 1.500 +casabiome % kuptake ( 1 ) = 2.000 +casabiome % krootlen ( 1 ) = 14.878 +casabiome % kminN ( 1 ) = 2.000 +casabiome % kuplabP ( 1 ) = 0.500 +xfherbivore ( 1 ) = 0.068 +leafage ( 1 ) = 3.000 +woodage ( 1 ) = 70.000 +frootage ( 1 ) = 18.000 +metage ( 1 ) = 0.040 +strage ( 1 ) = 0.230 +cwdage ( 1 ) = 0.824 +micage ( 1 ) = 0.137 +slowage ( 1 ) = 5.000 +passage ( 1 ) = 222.220 +clabileage ( 1 ) = 0.200 +slax ( 1 ) = 0.007 + +casabiome % kroot ( 2 ) = 3.900 +casabiome %rootdepth ( 2 ) = 1.500 +casabiome % kuptake ( 2 ) = 1.900 +casabiome % krootlen ( 2 ) = 14.386 +casabiome % kminN ( 2 ) = 2.000 +casabiome % kuplabP ( 2 ) = 0.500 +xfherbivore ( 2 ) = 0.406 +leafage ( 2 ) = 2.000 +woodage ( 2 ) = 60.000 +frootage ( 2 ) = 10.000 +metage ( 2 ) = 0.040 +strage ( 2 ) = 0.230 +cwdage ( 2 ) = 0.824 +micage ( 2 ) = 0.137 +slowage ( 2 ) = 5.000 +passage ( 2 ) = 222.220 +clabileage ( 2 ) = 0.200 +slax ( 2 ) = 0.015 + +casabiome % kroot ( 3 ) = 5.500 +casabiome %rootdepth ( 3 ) = 1.500 +casabiome % kuptake ( 3 ) = 2.000 +casabiome % krootlen ( 3 ) = 14.026 +casabiome % kminN ( 3 ) = 2.000 +casabiome % kuplabP ( 3 ) = 0.500 +xfherbivore ( 3 ) = 0.068 +leafage ( 3 ) = 0.500 +woodage ( 3 ) = 80.000 +frootage ( 3 ) = 10.000 +metage ( 3 ) = 0.040 +strage ( 3 ) = 0.230 +cwdage ( 3 ) = 0.824 +micage ( 3 ) = 0.137 +slowage ( 3 ) = 5.000 +passage ( 3 ) = 222.220 +clabileage ( 3 ) = 0.200 +slax ( 3 ) = 0.023 + +casabiome % kroot ( 4 ) = 3.900 +casabiome %rootdepth ( 4 ) = 1.500 +casabiome % kuptake ( 4 ) = 2.000 +casabiome % krootlen ( 4 ) = 18.947 +casabiome % kminN ( 4 ) = 2.000 +casabiome % kuplabP ( 4 ) = 0.500 +xfherbivore ( 4 ) = 0.134 +leafage ( 4 ) = 0.518 +woodage ( 4 ) = 40.000 +frootage ( 4 ) = 10.000 +metage ( 4 ) = 0.040 +strage ( 4 ) = 0.230 +cwdage ( 4 ) = 0.824 +micage ( 4 ) = 0.137 +slowage ( 4 ) = 5.000 +passage ( 4 ) = 222.220 +clabileage ( 4 ) = 0.200 +slax ( 4 ) = 0.026 + +casabiome % kroot ( 5 ) = 2.000 +casabiome %rootdepth ( 5 ) = 0.500 +casabiome % kuptake ( 5 ) = 1.800 +casabiome % krootlen ( 5 ) = 32.308 +casabiome % kminN ( 5 ) = 2.000 +casabiome % kuplabP ( 5 ) = 0.500 +xfherbivore ( 5 ) = 0.022 +leafage ( 5 ) = 1.440 +woodage ( 5 ) = 40.000 +frootage ( 5 ) = 5.000 +metage ( 5 ) = 0.040 +strage ( 5 ) = 0.230 +cwdage ( 5 ) = 0.824 +micage ( 5 ) = 0.137 +slowage ( 5 ) = 5.000 +passage ( 5 ) = 222.220 +clabileage ( 5 ) = 0.200 +slax ( 5 ) = 0.010 + +casabiome % kroot ( 6 ) = 5.500 +casabiome %rootdepth ( 6 ) = 0.500 +casabiome % kuptake ( 6 ) = 2.000 +casabiome % krootlen ( 6 ) = 84.000 +casabiome % kminN ( 6 ) = 2.000 +casabiome % kuplabP ( 6 ) = 0.500 +xfherbivore ( 6 ) = 0.109 +leafage ( 6 ) = 0.500 +woodage ( 6 ) = 1.000 +frootage ( 6 ) = 3.000 +metage ( 6 ) = 0.040 +strage ( 6 ) = 0.230 +cwdage ( 6 ) = 0.824 +micage ( 6 ) = 0.137 +slowage ( 6 ) = 5.000 +passage ( 6 ) = 222.220 +clabileage ( 6 ) = 0.200 +slax ( 6 ) = 0.030 + +casabiome % kroot ( 7 ) = 5.500 +casabiome %rootdepth ( 7 ) = 0.500 +casabiome % kuptake ( 7 ) = 2.000 +casabiome % krootlen ( 7 ) = 84.000 +casabiome % kminN ( 7 ) = 2.000 +casabiome % kuplabP ( 7 ) = 0.500 +xfherbivore ( 7 ) = 0.109 +leafage ( 7 ) = 0.500 +woodage ( 7 ) = 1.000 +frootage ( 7 ) = 3.000 +metage ( 7 ) = 0.040 +strage ( 7 ) = 0.230 +cwdage ( 7 ) = 0.824 +micage ( 7 ) = 0.137 +slowage ( 7 ) = 5.000 +passage ( 7 ) = 222.220 +clabileage ( 7 ) = 0.200 +slax ( 7 ) = 0.022 + +casabiome % kroot ( 8 ) = 5.500 +casabiome %rootdepth ( 8 ) = 0.500 +casabiome % kuptake ( 8 ) = 2.000 +casabiome % krootlen ( 8 ) = 84.000 +casabiome % kminN ( 8 ) = 2.000 +casabiome % kuplabP ( 8 ) = 0.500 +xfherbivore ( 8 ) = 0.109 +leafage ( 8 ) = 0.750 +woodage ( 8 ) = 1.000 +frootage ( 8 ) = 3.000 +metage ( 8 ) = 0.040 +strage ( 8 ) = 0.230 +cwdage ( 8 ) = 0.824 +micage ( 8 ) = 0.137 +slowage ( 8 ) = 5.000 +passage ( 8 ) = 222.220 +clabileage ( 8 ) = 0.200 +slax ( 8 ) = 0.027 + +casabiome % kroot ( 9 ) = 5.500 +casabiome %rootdepth ( 9 ) = 0.500 +casabiome % kuptake ( 9 ) = 1.600 +casabiome % krootlen ( 9 ) = 120.500 +casabiome % kminN ( 9 ) = 2.000 +casabiome % kuplabP ( 9 ) = 0.500 +xfherbivore ( 9 ) = 0.140 +leafage ( 9 ) = 0.370 +woodage ( 9 ) = 1.000 +frootage ( 9 ) = 0.884 +metage ( 9 ) = 0.040 +strage ( 9 ) = 0.230 +cwdage ( 9 ) = 0.824 +micage ( 9 ) = 0.137 +slowage ( 9 ) = 5.000 +passage ( 9 ) = 222.220 +clabileage ( 9 ) = 0.200 +slax ( 9 ) = 0.030 + +casabiome % kroot ( 10 ) = 5.500 +casabiome %rootdepth ( 10 ) = 0.500 +casabiome % kuptake ( 10 ) = 1.600 +casabiome % krootlen ( 10 ) = 120.500 +casabiome % kminN ( 10 ) = 2.000 +casabiome % kuplabP ( 10 ) = 0.500 +xfherbivore ( 10 ) = 0.140 +leafage ( 10 ) = 0.370 +woodage ( 10 ) = 1.000 +frootage ( 10 ) = 0.884 +metage ( 10 ) = 0.040 +strage ( 10 ) = 0.230 +cwdage ( 10 ) = 0.824 +micage ( 10 ) = 0.137 +slowage ( 10 ) = 5.000 +passage ( 10 ) = 222.220 +clabileage ( 10 ) = 0.200 +slax ( 10 ) = 0.022 + +casabiome % kroot ( 11 ) = 5.500 +casabiome %rootdepth ( 11 ) = 0.500 +casabiome % kuptake ( 11 ) = 1.600 +casabiome % krootlen ( 11 ) = 0.000 +casabiome % kminN ( 11 ) = 2.000 +casabiome % kuplabP ( 11 ) = 0.500 +xfherbivore ( 11 ) = 0.000 +leafage ( 11 ) = 1.000 +woodage ( 11 ) = 1.000 +frootage ( 11 ) = 1.000 +metage ( 11 ) = 0.040 +strage ( 11 ) = 0.230 +cwdage ( 11 ) = 0.824 +micage ( 11 ) = 0.137 +slowage ( 11 ) = 5.000 +passage ( 11 ) = 222.220 +clabileage ( 11 ) = 0.200 +slax ( 11 ) = 0.020 + +casabiome % kroot ( 12 ) = 5.500 +casabiome %rootdepth ( 12 ) = 0.500 +casabiome % kuptake ( 12 ) = 1.800 +casabiome % krootlen ( 12 ) = 0.000 +casabiome % kminN ( 12 ) = 2.000 +casabiome % kuplabP ( 12 ) = 0.500 +xfherbivore ( 12 ) = 0.000 +leafage ( 12 ) = 1.000 +woodage ( 12 ) = 1.000 +frootage ( 12 ) = 1.000 +metage ( 12 ) = 0.040 +strage ( 12 ) = 0.230 +cwdage ( 12 ) = 0.824 +micage ( 12 ) = 0.137 +slowage ( 12 ) = 5.000 +passage ( 12 ) = 222.220 +clabileage ( 12 ) = 0.200 +slax ( 12 ) = 0.020 + +casabiome % kroot ( 13 ) = 5.500 +casabiome %rootdepth ( 13 ) = 0.500 +casabiome % kuptake ( 13 ) = 1.800 +casabiome % krootlen ( 13 ) = 0.000 +casabiome % kminN ( 13 ) = 2.000 +casabiome % kuplabP ( 13 ) = 0.500 +xfherbivore ( 13 ) = 0.000 +leafage ( 13 ) = 1.000 +woodage ( 13 ) = 1.000 +frootage ( 13 ) = 1.000 +metage ( 13 ) = 0.040 +strage ( 13 ) = 0.230 +cwdage ( 13 ) = 0.824 +micage ( 13 ) = 0.137 +slowage ( 13 ) = 5.000 +passage ( 13 ) = 222.220 +clabileage ( 13 ) = 0.200 +slax ( 13 ) = 0.020 + +casabiome % kroot ( 14 ) = 2.000 +casabiome %rootdepth ( 14 ) = 0.500 +casabiome % kuptake ( 14 ) = 1.800 +casabiome % krootlen ( 14 ) = 30.769 +casabiome % kminN ( 14 ) = 2.000 +casabiome % kuplabP ( 14 ) = 0.500 +xfherbivore ( 14 ) = 0.010 +leafage ( 14 ) = 0.461 +woodage ( 14 ) = 5.000 +frootage ( 14 ) = 4.000 +metage ( 14 ) = 0.040 +strage ( 14 ) = 0.230 +cwdage ( 14 ) = 0.824 +micage ( 14 ) = 0.137 +slowage ( 14 ) = 5.000 +passage ( 14 ) = 222.220 +clabileage ( 14 ) = 0.200 +slax ( 14 ) = 0.024 + +casabiome % kroot ( 15 ) = 2.000 +casabiome %rootdepth ( 15 ) = 0.500 +casabiome % kuptake ( 15 ) = 1.800 +casabiome % krootlen ( 15 ) = 0.000 +casabiome % kminN ( 15 ) = 2.000 +casabiome % kuplabP ( 15 ) = 0.500 +xfherbivore ( 15 ) = 0.000 +leafage ( 15 ) = 1.000 +woodage ( 15 ) = 1.000 +frootage ( 15 ) = 1.000 +metage ( 15 ) = 0.040 +strage ( 15 ) = 0.230 +cwdage ( 15 ) = 0.824 +micage ( 15 ) = 0.137 +slowage ( 15 ) = 5.000 +passage ( 15 ) = 222.220 +clabileage ( 15 ) = 0.200 +slax ( 15 ) = 0.020 + +casabiome % kroot ( 16 ) = 5.500 +casabiome %rootdepth ( 16 ) = 1.500 +casabiome % kuptake ( 16 ) = 1.800 +casabiome % krootlen ( 16 ) = 0.000 +casabiome % kminN ( 16 ) = 2.000 +casabiome % kuplabP ( 16 ) = 0.500 +xfherbivore ( 16 ) = 0.000 +leafage ( 16 ) = 1.000 +woodage ( 16 ) = 1.000 +frootage ( 16 ) = 1.000 +metage ( 16 ) = 0.040 +strage ( 16 ) = 0.230 +cwdage ( 16 ) = 0.824 +micage ( 16 ) = 0.137 +slowage ( 16 ) = 5.000 +passage ( 16 ) = 222.220 +clabileage ( 16 ) = 0.200 +slax ( 16 ) = 0.020 + +casabiome % kroot ( 17 ) = 5.500 +casabiome %rootdepth ( 17 ) = 0.500 +casabiome % kuptake ( 17 ) = 1.800 +casabiome % krootlen ( 17 ) = 0.000 +casabiome % kminN ( 17 ) = 2.000 +casabiome % kuplabP ( 17 ) = 0.500 +xfherbivore ( 17 ) = 0.000 +leafage ( 17 ) = 1.000 +woodage ( 17 ) = 1.000 +frootage ( 17 ) = 1.000 +metage ( 17 ) = 0.040 +strage ( 17 ) = 0.230 +cwdage ( 17 ) = 0.824 +micage ( 17 ) = 0.137 +slowage ( 17 ) = 5.000 +passage ( 17 ) = 222.220 +clabileage ( 17 ) = 0.200 +slax ( 17 ) = 0.020 + +! Tranche *2* should be 2a +!=============================================================== +casabiome%fracnpptoP ( 1, 1 ) = 0.250 +casabiome%fracnpptoP ( 1, 2 ) = 0.400 +casabiome%fracnpptoP ( 1, 3 ) = 0.350 +casabiome%rmplant ( 1, 1 ) = 0.100 +casabiome%rmplant ( 1, 2 ) = 2.000 +casabiome%rmplant ( 1, 3 ) = 10.000 + +casabiome%fracnpptoP ( 2, 1 ) = 0.250 +casabiome%fracnpptoP ( 2, 2 ) = 0.400 +casabiome%fracnpptoP ( 2, 3 ) = 0.350 +casabiome%rmplant ( 2, 1 ) = 0.100 +casabiome%rmplant ( 2, 2 ) = 2.000 +casabiome%rmplant ( 2, 3 ) = 10.000 + +casabiome%fracnpptoP ( 3, 1 ) = 0.250 +casabiome%fracnpptoP ( 3, 2 ) = 0.400 +casabiome%fracnpptoP ( 3, 3 ) = 0.350 +casabiome%rmplant ( 3, 1 ) = 0.100 +casabiome%rmplant ( 3, 2 ) = 2.000 +casabiome%rmplant ( 3, 3 ) = 10.000 + +casabiome%fracnpptoP ( 4, 1 ) = 0.250 +casabiome%fracnpptoP ( 4, 2 ) = 0.400 +casabiome%fracnpptoP ( 4, 3 ) = 0.350 +casabiome%rmplant ( 4, 1 ) = 0.100 +casabiome%rmplant ( 4, 2 ) = 2.000 +casabiome%rmplant ( 4, 3 ) = 10.000 + +casabiome%fracnpptoP ( 5, 1 ) = 0.250 +casabiome%fracnpptoP ( 5, 2 ) = 0.400 +casabiome%fracnpptoP ( 5, 3 ) = 0.350 +casabiome%rmplant ( 5, 1 ) = 0.100 +casabiome%rmplant ( 5, 2 ) = 2.000 +casabiome%rmplant ( 5, 3 ) = 10.000 + +casabiome%fracnpptoP ( 6, 1 ) = 0.250 +casabiome%fracnpptoP ( 6, 2 ) = 0.400 +casabiome%fracnpptoP ( 6, 3 ) = 0.350 +casabiome%rmplant ( 6, 1 ) = 0.100 +casabiome%rmplant ( 6, 2 ) = 2.000 +casabiome%rmplant ( 6, 3 ) = 10.000 + +casabiome%fracnpptoP ( 7, 1 ) = 0.250 +casabiome%fracnpptoP ( 7, 2 ) = 0.400 +casabiome%fracnpptoP ( 7, 3 ) = 0.350 +casabiome%rmplant ( 7, 1 ) = 0.100 +casabiome%rmplant ( 7, 2 ) = 2.000 +casabiome%rmplant ( 7, 3 ) = 10.000 + +casabiome%fracnpptoP ( 8, 1 ) = 0.250 +casabiome%fracnpptoP ( 8, 2 ) = 0.400 +casabiome%fracnpptoP ( 8, 3 ) = 0.350 +casabiome%rmplant ( 8, 1 ) = 0.100 +casabiome%rmplant ( 8, 2 ) = 2.000 +casabiome%rmplant ( 8, 3 ) = 10.000 + +casabiome%fracnpptoP ( 9, 1 ) = 0.250 +casabiome%fracnpptoP ( 9, 2 ) = 0.400 +casabiome%fracnpptoP ( 9, 3 ) = 0.350 +casabiome%rmplant ( 9, 1 ) = 0.100 +casabiome%rmplant ( 9, 2 ) = 2.000 +casabiome%rmplant ( 9, 3 ) = 10.000 + +casabiome%fracnpptoP ( 10, 1 ) = 0.250 +casabiome%fracnpptoP ( 10, 2 ) = 0.400 +casabiome%fracnpptoP ( 10, 3 ) = 0.350 +casabiome%rmplant ( 10, 1 ) = 0.100 +casabiome%rmplant ( 10, 2 ) = 2.000 +casabiome%rmplant ( 10, 3 ) = 10.000 + +casabiome%fracnpptoP ( 11, 1 ) = 0.250 +casabiome%fracnpptoP ( 11, 2 ) = 0.400 +casabiome%fracnpptoP ( 11, 3 ) = 0.350 +casabiome%rmplant ( 11, 1 ) = 0.100 +casabiome%rmplant ( 11, 2 ) = 2.000 +casabiome%rmplant ( 11, 3 ) = 10.000 + +casabiome%fracnpptoP ( 12, 1 ) = 0.250 +casabiome%fracnpptoP ( 12, 2 ) = 0.400 +casabiome%fracnpptoP ( 12, 3 ) = 0.350 +casabiome%rmplant ( 12, 1 ) = 0.100 +casabiome%rmplant ( 12, 2 ) = 2.000 +casabiome%rmplant ( 12, 3 ) = 10.000 + +casabiome%fracnpptoP ( 13, 1 ) = 0.250 +casabiome%fracnpptoP ( 13, 2 ) = 0.400 +casabiome%fracnpptoP ( 13, 3 ) = 0.350 +casabiome%rmplant ( 13, 1 ) = 0.100 +casabiome%rmplant ( 13, 2 ) = 2.000 +casabiome%rmplant ( 13, 3 ) = 10.000 + +casabiome%fracnpptoP ( 14, 1 ) = 0.250 +casabiome%fracnpptoP ( 14, 2 ) = 0.400 +casabiome%fracnpptoP ( 14, 3 ) = 0.350 +casabiome%rmplant ( 14, 1 ) = 0.100 +casabiome%rmplant ( 14, 2 ) = 2.000 +casabiome%rmplant ( 14, 3 ) = 10.000 + +casabiome%fracnpptoP ( 15, 1 ) = 0.250 +casabiome%fracnpptoP ( 15, 2 ) = 0.400 +casabiome%fracnpptoP ( 15, 3 ) = 0.350 +casabiome%rmplant ( 15, 1 ) = 0.100 +casabiome%rmplant ( 15, 2 ) = 2.000 +casabiome%rmplant ( 15, 3 ) = 10.000 + +casabiome%fracnpptoP ( 16, 1 ) = 0.250 +casabiome%fracnpptoP ( 16, 2 ) = 0.400 +casabiome%fracnpptoP ( 16, 3 ) = 0.350 +casabiome%rmplant ( 16, 1 ) = 0.100 +casabiome%rmplant ( 16, 2 ) = 2.000 +casabiome%rmplant ( 16, 3 ) = 10.000 + +casabiome%fracnpptoP ( 17, 1 ) = 0.250 +casabiome%fracnpptoP ( 17, 2 ) = 0.400 +casabiome%fracnpptoP ( 17, 3 ) = 0.350 +casabiome%rmplant ( 17, 1 ) = 0.100 +casabiome%rmplant ( 17, 2 ) = 2.000 +casabiome%rmplant ( 17, 3 ) = 10.000 + +! Tranche 2b +!=============================================================== +ratioCNplant ( 1, 1 ) = 49.800 +ratioCNplant ( 1, 2 ) = 238.100 +ratioCNplant ( 1, 3 ) = 73.700 +casabiome % ftransNPtoL ( 1, 1 ) = 0.500 +casabiome % ftransNPtoL ( 1, 2 ) = 0.950 +casabiome % ftransNPtoL ( 1, 3 ) = 0.900 +casabiome % fracligninplant ( 1, 1 ) = 0.250 +casabiome % fracligninplant ( 1, 2 ) = 0.400 +casabiome % fracligninplant ( 1, 3 ) = 0.250 +ratioCNsoil ( 1, 1 ) = 8.000 +ratioCNsoil ( 1, 2 ) = 16.100 +ratioCNsoil ( 1, 3 ) = 16.100 +ratioCNsoilmin ( 1, 1 ) = 3.000 +ratioCNsoilmin ( 1, 2 ) = 12.000 +ratioCNsoilmin ( 1, 3 ) = 7.000 +ratioCNsoilmax ( 1, 1 ) = 15.000 +ratioCNsoilmax ( 1, 2 ) = 30.000 +ratioCNsoilmax ( 1, 3 ) = 15.000 +casabiome % glaimax ( 1 ) = 7.000 +casabiome % glaimin ( 1 ) = 1.000 + +ratioCNplant ( 2, 1 ) = 23.100 +ratioCNplant ( 2, 2 ) = 134.900 +ratioCNplant ( 2, 3 ) = 61.200 +casabiome % ftransNPtoL ( 2, 1 ) = 0.500 +casabiome % ftransNPtoL ( 2, 2 ) = 0.950 +casabiome % ftransNPtoL ( 2, 3 ) = 0.900 +casabiome % fracligninplant ( 2, 1 ) = 0.200 +casabiome % fracligninplant ( 2, 2 ) = 0.400 +casabiome % fracligninplant ( 2, 3 ) = 0.200 +ratioCNsoil ( 2, 1 ) = 8.000 +ratioCNsoil ( 2, 2 ) = 12.800 +ratioCNsoil ( 2, 3 ) = 12.800 +ratioCNsoilmin ( 2, 1 ) = 3.000 +ratioCNsoilmin ( 2, 2 ) = 12.000 +ratioCNsoilmin ( 2, 3 ) = 7.000 +ratioCNsoilmax ( 2, 1 ) = 15.000 +ratioCNsoilmax ( 2, 2 ) = 30.000 +ratioCNsoilmax ( 2, 3 ) = 15.000 +casabiome % glaimax ( 2 ) = 7.000 +casabiome % glaimin ( 2 ) = 1.000 + +ratioCNplant ( 3, 1 ) = 59.300 +ratioCNplant ( 3, 2 ) = 243.800 +ratioCNplant ( 3, 3 ) = 75.000 +casabiome % ftransNPtoL ( 3, 1 ) = 0.500 +casabiome % ftransNPtoL ( 3, 2 ) = 0.950 +casabiome % ftransNPtoL ( 3, 3 ) = 0.900 +casabiome % fracligninplant ( 3, 1 ) = 0.200 +casabiome % fracligninplant ( 3, 2 ) = 0.400 +casabiome % fracligninplant ( 3, 3 ) = 0.200 +ratioCNsoil ( 3, 1 ) = 8.000 +ratioCNsoil ( 3, 2 ) = 24.800 +ratioCNsoil ( 3, 3 ) = 24.800 +ratioCNsoilmin ( 3, 1 ) = 3.000 +ratioCNsoilmin ( 3, 2 ) = 12.000 +ratioCNsoilmin ( 3, 3 ) = 7.000 +ratioCNsoilmax ( 3, 1 ) = 15.000 +ratioCNsoilmax ( 3, 2 ) = 30.000 +ratioCNsoilmax ( 3, 3 ) = 15.000 +casabiome % glaimax ( 3 ) = 7.000 +casabiome % glaimin ( 3 ) = 0.500 + +ratioCNplant ( 4, 1 ) = 31.400 +ratioCNplant ( 4, 2 ) = 156.200 +ratioCNplant ( 4, 3 ) = 63.200 +casabiome % ftransNPtoL ( 4, 1 ) = 0.500 +casabiome % ftransNPtoL ( 4, 2 ) = 0.950 +casabiome % ftransNPtoL ( 4, 3 ) = 0.900 +casabiome % fracligninplant ( 4, 1 ) = 0.200 +casabiome % fracligninplant ( 4, 2 ) = 0.400 +casabiome % fracligninplant ( 4, 3 ) = 0.200 +ratioCNsoil ( 4, 1 ) = 8.000 +ratioCNsoil ( 4, 2 ) = 30.000 +ratioCNsoil ( 4, 3 ) = 30.000 +ratioCNsoilmin ( 4, 1 ) = 3.000 +ratioCNsoilmin ( 4, 2 ) = 12.000 +ratioCNsoilmin ( 4, 3 ) = 7.000 +ratioCNsoilmax ( 4, 1 ) = 15.000 +ratioCNsoilmax ( 4, 2 ) = 30.000 +ratioCNsoilmax ( 4, 3 ) = 15.000 +casabiome % glaimax ( 4 ) = 7.000 +casabiome % glaimin ( 4 ) = 0.500 + +ratioCNplant ( 5, 1 ) = 37.600 +ratioCNplant ( 5, 2 ) = 142.100 +ratioCNplant ( 5, 3 ) = 67.100 +casabiome % ftransNPtoL ( 5, 1 ) = 0.500 +casabiome % ftransNPtoL ( 5, 2 ) = 0.950 +casabiome % ftransNPtoL ( 5, 3 ) = 0.900 +casabiome % fracligninplant ( 5, 1 ) = 0.200 +casabiome % fracligninplant ( 5, 2 ) = 0.400 +casabiome % fracligninplant ( 5, 3 ) = 0.200 +ratioCNsoil ( 5, 1 ) = 8.000 +ratioCNsoil ( 5, 2 ) = 19.300 +ratioCNsoil ( 5, 3 ) = 19.300 +ratioCNsoilmin ( 5, 1 ) = 3.000 +ratioCNsoilmin ( 5, 2 ) = 12.000 +ratioCNsoilmin ( 5, 3 ) = 7.000 +ratioCNsoilmax ( 5, 1 ) = 15.000 +ratioCNsoilmax ( 5, 2 ) = 30.000 +ratioCNsoilmax ( 5, 3 ) = 15.000 +casabiome % glaimax ( 5 ) = 3.000 +casabiome % glaimin ( 5 ) = 0.100 + +ratioCNplant ( 6, 1 ) = 34.800 +ratioCNplant ( 6, 2 ) = 150.000 +ratioCNplant ( 6, 3 ) = 64.500 +casabiome % ftransNPtoL ( 6, 1 ) = 0.500 +casabiome % ftransNPtoL ( 6, 2 ) = 0.950 +casabiome % ftransNPtoL ( 6, 3 ) = 0.900 +casabiome % fracligninplant ( 6, 1 ) = 0.100 +casabiome % fracligninplant ( 6, 2 ) = 0.400 +casabiome % fracligninplant ( 6, 3 ) = 0.100 +ratioCNsoil ( 6, 1 ) = 8.000 +ratioCNsoil ( 6, 2 ) = 13.100 +ratioCNsoil ( 6, 3 ) = 13.100 +ratioCNsoilmin ( 6, 1 ) = 3.000 +ratioCNsoilmin ( 6, 2 ) = 12.000 +ratioCNsoilmin ( 6, 3 ) = 7.000 +ratioCNsoilmax ( 6, 1 ) = 15.000 +ratioCNsoilmax ( 6, 2 ) = 30.000 +ratioCNsoilmax ( 6, 3 ) = 15.000 +casabiome % glaimax ( 6 ) = 3.000 +casabiome % glaimin ( 6 ) = 0.100 + +ratioCNplant ( 7, 1 ) = 44.000 +ratioCNplant ( 7, 2 ) = 150.000 +ratioCNplant ( 7, 3 ) = 62.700 +casabiome % ftransNPtoL ( 7, 1 ) = 0.500 +casabiome % ftransNPtoL ( 7, 2 ) = 0.950 +casabiome % ftransNPtoL ( 7, 3 ) = 0.900 +casabiome % fracligninplant ( 7, 1 ) = 0.100 +casabiome % fracligninplant ( 7, 2 ) = 0.400 +casabiome % fracligninplant ( 7, 3 ) = 0.100 +ratioCNsoil ( 7, 1 ) = 8.000 +ratioCNsoil ( 7, 2 ) = 13.100 +ratioCNsoil ( 7, 3 ) = 13.100 +ratioCNsoilmin ( 7, 1 ) = 3.000 +ratioCNsoilmin ( 7, 2 ) = 12.000 +ratioCNsoilmin ( 7, 3 ) = 7.000 +ratioCNsoilmax ( 7, 1 ) = 15.000 +ratioCNsoilmax ( 7, 2 ) = 30.000 +ratioCNsoilmax ( 7, 3 ) = 15.000 +casabiome % glaimax ( 7 ) = 3.000 +casabiome % glaimin ( 7 ) = 0.100 + +ratioCNplant ( 8, 1 ) = 49.200 +ratioCNplant ( 8, 2 ) = 147.300 +ratioCNplant ( 8, 3 ) = 69.000 +casabiome % ftransNPtoL ( 8, 1 ) = 0.500 +casabiome % ftransNPtoL ( 8, 2 ) = 0.950 +casabiome % ftransNPtoL ( 8, 3 ) = 0.900 +casabiome % fracligninplant ( 8, 1 ) = 0.100 +casabiome % fracligninplant ( 8, 2 ) = 0.400 +casabiome % fracligninplant ( 8, 3 ) = 0.100 +ratioCNsoil ( 8, 1 ) = 8.000 +ratioCNsoil ( 8, 2 ) = 13.100 +ratioCNsoil ( 8, 3 ) = 13.100 +ratioCNsoilmin ( 8, 1 ) = 3.000 +ratioCNsoilmin ( 8, 2 ) = 12.000 +ratioCNsoilmin ( 8, 3 ) = 7.000 +ratioCNsoilmax ( 8, 1 ) = 15.000 +ratioCNsoilmax ( 8, 2 ) = 30.000 +ratioCNsoilmax ( 8, 3 ) = 15.000 +casabiome % glaimax ( 8 ) = 3.000 +casabiome % glaimin ( 8 ) = 0.100 + +ratioCNplant ( 9, 1 ) = 21.600 +ratioCNplant ( 9, 2 ) = 150.000 +ratioCNplant ( 9, 3 ) = 60.700 +casabiome % ftransNPtoL ( 9, 1 ) = 0.500 +casabiome % ftransNPtoL ( 9, 2 ) = 0.950 +casabiome % ftransNPtoL ( 9, 3 ) = 0.900 +casabiome % fracligninplant ( 9, 1 ) = 0.100 +casabiome % fracligninplant ( 9, 2 ) = 0.400 +casabiome % fracligninplant ( 9, 3 ) = 0.100 +ratioCNsoil ( 9, 1 ) = 8.000 +ratioCNsoil ( 9, 2 ) = 13.200 +ratioCNsoil ( 9, 3 ) = 13.200 +ratioCNsoilmin ( 9, 1 ) = 3.000 +ratioCNsoilmin ( 9, 2 ) = 12.000 +ratioCNsoilmin ( 9, 3 ) = 7.000 +ratioCNsoilmax ( 9, 1 ) = 15.000 +ratioCNsoilmax ( 9, 2 ) = 30.000 +ratioCNsoilmax ( 9, 3 ) = 15.000 +casabiome % glaimax ( 9 ) = 6.000 +casabiome % glaimin ( 9 ) = 0.100 + +ratioCNplant ( 10, 1 ) = 25.000 +ratioCNplant ( 10, 2 ) = 125.000 +ratioCNplant ( 10, 3 ) = 71.000 +casabiome % ftransNPtoL ( 10, 1 ) = 0.500 +casabiome % ftransNPtoL ( 10, 2 ) = 0.950 +casabiome % ftransNPtoL ( 10, 3 ) = 0.900 +casabiome % fracligninplant ( 10, 1 ) = 0.100 +casabiome % fracligninplant ( 10, 2 ) = 0.400 +casabiome % fracligninplant ( 10, 3 ) = 0.100 +ratioCNsoil ( 10, 1 ) = 8.000 +ratioCNsoil ( 10, 2 ) = 13.200 +ratioCNsoil ( 10, 3 ) = 13.200 +ratioCNsoilmin ( 10, 1 ) = 3.000 +ratioCNsoilmin ( 10, 2 ) = 12.000 +ratioCNsoilmin ( 10, 3 ) = 7.000 +ratioCNsoilmax ( 10, 1 ) = 15.000 +ratioCNsoilmax ( 10, 2 ) = 30.000 +ratioCNsoilmax ( 10, 3 ) = 15.000 +casabiome % glaimax ( 10 ) = 6.000 +casabiome % glaimin ( 10 ) = 0.100 + +ratioCNplant ( 11, 1 ) = 30.000 +ratioCNplant ( 11, 2 ) = 150.000 +ratioCNplant ( 11, 3 ) = 71.000 +casabiome % ftransNPtoL ( 11, 1 ) = 0.500 +casabiome % ftransNPtoL ( 11, 2 ) = 0.950 +casabiome % ftransNPtoL ( 11, 3 ) = 0.900 +casabiome % fracligninplant ( 11, 1 ) = 0.150 +casabiome % fracligninplant ( 11, 2 ) = 0.400 +casabiome % fracligninplant ( 11, 3 ) = 0.150 +ratioCNsoil ( 11, 1 ) = 8.000 +ratioCNsoil ( 11, 2 ) = 13.100 +ratioCNsoil ( 11, 3 ) = 13.100 +ratioCNsoilmin ( 11, 1 ) = 3.000 +ratioCNsoilmin ( 11, 2 ) = 12.000 +ratioCNsoilmin ( 11, 3 ) = 7.000 +ratioCNsoilmax ( 11, 1 ) = 15.000 +ratioCNsoilmax ( 11, 2 ) = 30.000 +ratioCNsoilmax ( 11, 3 ) = 15.000 +casabiome % glaimax ( 11 ) = 5.000 +casabiome % glaimin ( 11 ) = 0.050 + +ratioCNplant ( 12, 1 ) = 30.000 +ratioCNplant ( 12, 2 ) = 150.000 +ratioCNplant ( 12, 3 ) = 71.000 +casabiome % ftransNPtoL ( 12, 1 ) = 0.500 +casabiome % ftransNPtoL ( 12, 2 ) = 0.950 +casabiome % ftransNPtoL ( 12, 3 ) = 0.900 +casabiome % fracligninplant ( 12, 1 ) = 0.150 +casabiome % fracligninplant ( 12, 2 ) = 0.400 +casabiome % fracligninplant ( 12, 3 ) = 0.150 +ratioCNsoil ( 12, 1 ) = 8.000 +ratioCNsoil ( 12, 2 ) = 13.100 +ratioCNsoil ( 12, 3 ) = 13.100 +ratioCNsoilmin ( 12, 1 ) = 3.000 +ratioCNsoilmin ( 12, 2 ) = 12.000 +ratioCNsoilmin ( 12, 3 ) = 7.000 +ratioCNsoilmax ( 12, 1 ) = 15.000 +ratioCNsoilmax ( 12, 2 ) = 30.000 +ratioCNsoilmax ( 12, 3 ) = 15.000 +casabiome % glaimax ( 12 ) = 5.000 +casabiome % glaimin ( 12 ) = 0.050 + +ratioCNplant ( 13, 1 ) = 30.000 +ratioCNplant ( 13, 2 ) = 150.000 +ratioCNplant ( 13, 3 ) = 71.000 +casabiome % ftransNPtoL ( 13, 1 ) = 0.500 +casabiome % ftransNPtoL ( 13, 2 ) = 0.950 +casabiome % ftransNPtoL ( 13, 3 ) = 0.900 +casabiome % fracligninplant ( 13, 1 ) = 0.150 +casabiome % fracligninplant ( 13, 2 ) = 0.400 +casabiome % fracligninplant ( 13, 3 ) = 0.150 +ratioCNsoil ( 13, 1 ) = 8.000 +ratioCNsoil ( 13, 2 ) = 13.100 +ratioCNsoil ( 13, 3 ) = 13.100 +ratioCNsoilmin ( 13, 1 ) = 3.000 +ratioCNsoilmin ( 13, 2 ) = 12.000 +ratioCNsoilmin ( 13, 3 ) = 7.000 +ratioCNsoilmax ( 13, 1 ) = 15.000 +ratioCNsoilmax ( 13, 2 ) = 30.000 +ratioCNsoilmax ( 13, 3 ) = 15.000 +casabiome % glaimax ( 13 ) = 5.000 +casabiome % glaimin ( 13 ) = 0.050 + +ratioCNplant ( 14, 1 ) = 50.000 +ratioCNplant ( 14, 2 ) = 150.000 +ratioCNplant ( 14, 3 ) = 71.000 +casabiome % ftransNPtoL ( 14, 1 ) = 0.500 +casabiome % ftransNPtoL ( 14, 2 ) = 0.950 +casabiome % ftransNPtoL ( 14, 3 ) = 0.900 +casabiome % fracligninplant ( 14, 1 ) = 0.150 +casabiome % fracligninplant ( 14, 2 ) = 0.400 +casabiome % fracligninplant ( 14, 3 ) = 0.150 +ratioCNsoil ( 14, 1 ) = 8.000 +ratioCNsoil ( 14, 2 ) = 26.800 +ratioCNsoil ( 14, 3 ) = 26.800 +ratioCNsoilmin ( 14, 1 ) = 3.000 +ratioCNsoilmin ( 14, 2 ) = 12.000 +ratioCNsoilmin ( 14, 3 ) = 7.000 +ratioCNsoilmax ( 14, 1 ) = 15.000 +ratioCNsoilmax ( 14, 2 ) = 30.000 +ratioCNsoilmax ( 14, 3 ) = 15.000 +casabiome % glaimax ( 14 ) = 1.000 +casabiome % glaimin ( 14 ) = 0.050 + +ratioCNplant ( 15, 1 ) = 40.000 +ratioCNplant ( 15, 2 ) = 150.000 +ratioCNplant ( 15, 3 ) = 71.000 +casabiome % ftransNPtoL ( 15, 1 ) = 0.500 +casabiome % ftransNPtoL ( 15, 2 ) = 0.950 +casabiome % ftransNPtoL ( 15, 3 ) = 0.900 +casabiome % fracligninplant ( 15, 1 ) = 0.150 +casabiome % fracligninplant ( 15, 2 ) = 0.400 +casabiome % fracligninplant ( 15, 3 ) = 0.150 +ratioCNsoil ( 15, 1 ) = 8.000 +ratioCNsoil ( 15, 2 ) = 20.000 +ratioCNsoil ( 15, 3 ) = 20.000 +ratioCNsoilmin ( 15, 1 ) = 3.000 +ratioCNsoilmin ( 15, 2 ) = 12.000 +ratioCNsoilmin ( 15, 3 ) = 7.000 +ratioCNsoilmax ( 15, 1 ) = 15.000 +ratioCNsoilmax ( 15, 2 ) = 30.000 +ratioCNsoilmax ( 15, 3 ) = 15.000 +casabiome % glaimax ( 15 ) = 6.000 +casabiome % glaimin ( 15 ) = 0.050 + +ratioCNplant ( 16, 1 ) = 40.000 +ratioCNplant ( 16, 2 ) = 135.000 +ratioCNplant ( 16, 3 ) = 71.000 +casabiome % ftransNPtoL ( 16, 1 ) = 0.500 +casabiome % ftransNPtoL ( 16, 2 ) = 0.950 +casabiome % ftransNPtoL ( 16, 3 ) = 0.900 +casabiome % fracligninplant ( 16, 1 ) = 0.250 +casabiome % fracligninplant ( 16, 2 ) = 0.400 +casabiome % fracligninplant ( 16, 3 ) = 0.250 +ratioCNsoil ( 16, 1 ) = 8.000 +ratioCNsoil ( 16, 2 ) = 20.000 +ratioCNsoil ( 16, 3 ) = 20.000 +ratioCNsoilmin ( 16, 1 ) = 3.000 +ratioCNsoilmin ( 16, 2 ) = 12.000 +ratioCNsoilmin ( 16, 3 ) = 7.000 +ratioCNsoilmax ( 16, 1 ) = 15.000 +ratioCNsoilmax ( 16, 2 ) = 30.000 +ratioCNsoilmax ( 16, 3 ) = 15.000 +casabiome % glaimax ( 16 ) = 1.000 +casabiome % glaimin ( 16 ) = 0.050 + +ratioCNplant ( 17, 1 ) = 40.000 +ratioCNplant ( 17, 2 ) = 150.000 +ratioCNplant ( 17, 3 ) = 71.000 +casabiome % ftransNPtoL ( 17, 1 ) = 0.500 +casabiome % ftransNPtoL ( 17, 2 ) = 0.950 +casabiome % ftransNPtoL ( 17, 3 ) = 0.900 +casabiome % fracligninplant ( 17, 1 ) = 0.100 +casabiome % fracligninplant ( 17, 2 ) = 0.400 +casabiome % fracligninplant ( 17, 3 ) = 0.100 +ratioCNsoil ( 17, 1 ) = 8.000 +ratioCNsoil ( 17, 2 ) = 20.000 +ratioCNsoil ( 17, 3 ) = 20.000 +ratioCNsoilmin ( 17, 1 ) = 3.000 +ratioCNsoilmin ( 17, 2 ) = 12.000 +ratioCNsoilmin ( 17, 3 ) = 7.000 +ratioCNsoilmax ( 17, 1 ) = 15.000 +ratioCNsoilmax ( 17, 2 ) = 30.000 +ratioCNsoilmax ( 17, 3 ) = 15.000 +casabiome % glaimax ( 17 ) = 0.000 +casabiome % glaimin ( 17 ) = 0.000 + + ! Tranche 3 + !=============================================================== +cleaf ( 1 ) = 5.500 +cwood ( 1 ) = 5.500 +cfroot ( 1 ) = 5.500 +cmet ( 1 ) = 5.500 +cstr ( 1 ) = 5.500 +ccwd ( 1 ) = 5.500 +cmic ( 1 ) = 5.500 +cslow ( 1 ) = 5.500 +cpass ( 1 ) = 5.500 + +cleaf ( 2 ) = 3.900 +cwood ( 2 ) = 3.900 +cfroot ( 2 ) = 3.900 +cmet ( 2 ) = 3.900 +cstr ( 2 ) = 3.900 +ccwd ( 2 ) = 3.900 +cmic ( 2 ) = 3.900 +cslow ( 2 ) = 3.900 +cpass ( 2 ) = 3.900 + +cleaf ( 3 ) = 5.500 +cwood ( 3 ) = 5.500 +cfroot ( 3 ) = 5.500 +cmet ( 3 ) = 5.500 +cstr ( 3 ) = 5.500 +ccwd ( 3 ) = 5.500 +cmic ( 3 ) = 5.500 +cslow ( 3 ) = 5.500 +cpass ( 3 ) = 5.500 + +cleaf ( 4 ) = 3.900 +cwood ( 4 ) = 3.900 +cfroot ( 4 ) = 3.900 +cmet ( 4 ) = 3.900 +cstr ( 4 ) = 3.900 +ccwd ( 4 ) = 3.900 +cmic ( 4 ) = 3.900 +cslow ( 4 ) = 3.900 +cpass ( 4 ) = 3.900 + +cleaf ( 5 ) = 2.000 +cwood ( 5 ) = 2.000 +cfroot ( 5 ) = 2.000 +cmet ( 5 ) = 2.000 +cstr ( 5 ) = 2.000 +ccwd ( 5 ) = 2.000 +cmic ( 5 ) = 2.000 +cslow ( 5 ) = 2.000 +cpass ( 5 ) = 2.000 + +cleaf ( 6 ) = 5.500 +cwood ( 6 ) = 5.500 +cfroot ( 6 ) = 5.500 +cmet ( 6 ) = 5.500 +cstr ( 6 ) = 5.500 +ccwd ( 6 ) = 5.500 +cmic ( 6 ) = 5.500 +cslow ( 6 ) = 5.500 +cpass ( 6 ) = 5.500 + +cleaf ( 7 ) = 5.500 +cwood ( 7 ) = 5.500 +cfroot ( 7 ) = 5.500 +cmet ( 7 ) = 5.500 +cstr ( 7 ) = 5.500 +ccwd ( 7 ) = 5.500 +cmic ( 7 ) = 5.500 +cslow ( 7 ) = 5.500 +cpass ( 7 ) = 5.500 + +cleaf ( 8 ) = 5.500 +cwood ( 8 ) = 5.500 +cfroot ( 8 ) = 5.500 +cmet ( 8 ) = 5.500 +cstr ( 8 ) = 5.500 +ccwd ( 8 ) = 5.500 +cmic ( 8 ) = 5.500 +cslow ( 8 ) = 5.500 +cpass ( 8 ) = 5.500 + +cleaf ( 9 ) = 5.500 +cwood ( 9 ) = 5.500 +cfroot ( 9 ) = 5.500 +cmet ( 9 ) = 5.500 +cstr ( 9 ) = 5.500 +ccwd ( 9 ) = 5.500 +cmic ( 9 ) = 5.500 +cslow ( 9 ) = 5.500 +cpass ( 9 ) = 5.500 + +cleaf ( 10 ) = 5.500 +cwood ( 10 ) = 5.500 +cfroot ( 10 ) = 5.500 +cmet ( 10 ) = 5.500 +cstr ( 10 ) = 5.500 +ccwd ( 10 ) = 5.500 +cmic ( 10 ) = 5.500 +cslow ( 10 ) = 5.500 +cpass ( 10 ) = 5.500 + +cleaf ( 11 ) = 5.500 +cwood ( 11 ) = 5.500 +cfroot ( 11 ) = 5.500 +cmet ( 11 ) = 5.500 +cstr ( 11 ) = 5.500 +ccwd ( 11 ) = 5.500 +cmic ( 11 ) = 5.500 +cslow ( 11 ) = 5.500 +cpass ( 11 ) = 5.500 + +cleaf ( 12 ) = 5.500 +cwood ( 12 ) = 5.500 +cfroot ( 12 ) = 5.500 +cmet ( 12 ) = 5.500 +cstr ( 12 ) = 5.500 +ccwd ( 12 ) = 5.500 +cmic ( 12 ) = 5.500 +cslow ( 12 ) = 5.500 +cpass ( 12 ) = 5.500 + +cleaf ( 13 ) = 5.500 +cwood ( 13 ) = 5.500 +cfroot ( 13 ) = 5.500 +cmet ( 13 ) = 5.500 +cstr ( 13 ) = 5.500 +ccwd ( 13 ) = 5.500 +cmic ( 13 ) = 5.500 +cslow ( 13 ) = 5.500 +cpass ( 13 ) = 5.500 + +cleaf ( 14 ) = 2.000 +cwood ( 14 ) = 2.000 +cfroot ( 14 ) = 2.000 +cmet ( 14 ) = 2.000 +cstr ( 14 ) = 2.000 +ccwd ( 14 ) = 2.000 +cmic ( 14 ) = 2.000 +cslow ( 14 ) = 2.000 +cpass ( 14 ) = 2.000 + +cleaf ( 15 ) = 2.000 +cwood ( 15 ) = 2.000 +cfroot ( 15 ) = 2.000 +cmet ( 15 ) = 2.000 +cstr ( 15 ) = 2.000 +ccwd ( 15 ) = 2.000 +cmic ( 15 ) = 2.000 +cslow ( 15 ) = 2.000 +cpass ( 15 ) = 2.000 + +cleaf ( 16 ) = 5.500 +cwood ( 16 ) = 5.500 +cfroot ( 16 ) = 5.500 +cmet ( 16 ) = 5.500 +cstr ( 16 ) = 5.500 +ccwd ( 16 ) = 5.500 +cmic ( 16 ) = 5.500 +cslow ( 16 ) = 5.500 +cpass ( 16 ) = 5.500 + +cleaf ( 17 ) = 5.500 +cwood ( 17 ) = 5.500 +cfroot ( 17 ) = 5.500 +cmet ( 17 ) = 5.500 +cstr ( 17 ) = 5.500 +ccwd ( 17 ) = 5.500 +cmic ( 17 ) = 5.500 +cslow ( 17 ) = 5.500 +cpass ( 17 ) = 5.500 + + ! Tranche 4 + !=============================================================== +phen%TKshed ( 1 ) = 268.000 +xxkleafcoldmax ( 1 ) = 0.200 +casabiome%xkleafcoldexp ( 1 ) = 3.000 +xxkleafdrymax ( 1 ) = 0.100 +casabiome%xkleafdryexp ( 1 ) = 3.000 + +phen%TKshed ( 2 ) = 260.000 +xxkleafcoldmax ( 2 ) = 0.100 +casabiome%xkleafcoldexp ( 2 ) = 3.000 +xxkleafdrymax ( 2 ) = 0.100 +casabiome%xkleafdryexp ( 2 ) = 3.000 + +phen%TKshed ( 3 ) = 263.150 +xxkleafcoldmax ( 3 ) = 0.100 +casabiome%xkleafcoldexp ( 3 ) = 3.000 +xxkleafdrymax ( 3 ) = 0.100 +casabiome%xkleafdryexp ( 3 ) = 3.000 + +phen%TKshed ( 4 ) = 268.150 +xxkleafcoldmax ( 4 ) = 0.600 +casabiome%xkleafcoldexp ( 4 ) = 3.000 +xxkleafdrymax ( 4 ) = 1.000 +casabiome%xkleafdryexp ( 4 ) = 3.000 + +phen%TKshed ( 5 ) = 277.150 +xxkleafcoldmax ( 5 ) = 1.000 +casabiome%xkleafcoldexp ( 5 ) = 3.000 +xxkleafdrymax ( 5 ) = 0.100 +casabiome%xkleafdryexp ( 5 ) = 3.000 + +phen%TKshed ( 6 ) = 275.150 +xxkleafcoldmax ( 6 ) = 0.200 +casabiome%xkleafcoldexp ( 6 ) = 3.000 +xxkleafdrymax ( 6 ) = 0.100 +casabiome%xkleafdryexp ( 6 ) = 3.000 + +phen%TKshed ( 7 ) = 275.150 +xxkleafcoldmax ( 7 ) = 0.200 +casabiome%xkleafcoldexp ( 7 ) = 3.000 +xxkleafdrymax ( 7 ) = 0.100 +casabiome%xkleafdryexp ( 7 ) = 3.000 + +phen%TKshed ( 8 ) = 275.150 +xxkleafcoldmax ( 8 ) = 0.200 +casabiome%xkleafcoldexp ( 8 ) = 3.000 +xxkleafdrymax ( 8 ) = 0.100 +casabiome%xkleafdryexp ( 8 ) = 3.000 + +phen%TKshed ( 9 ) = 278.150 +xxkleafcoldmax ( 9 ) = 0.300 +casabiome%xkleafcoldexp ( 9 ) = 3.000 +xxkleafdrymax ( 9 ) = 0.100 +casabiome%xkleafdryexp ( 9 ) = 3.000 + +phen%TKshed ( 10 ) = 278.150 +xxkleafcoldmax ( 10 ) = 0.300 +casabiome%xkleafcoldexp ( 10 ) = 3.000 +xxkleafdrymax ( 10 ) = 0.100 +casabiome%xkleafdryexp ( 10 ) = 3.000 + +phen%TKshed ( 11 ) = 277.150 +xxkleafcoldmax ( 11 ) = 0.100 +casabiome%xkleafcoldexp ( 11 ) = 3.000 +xxkleafdrymax ( 11 ) = 0.100 +casabiome%xkleafdryexp ( 11 ) = 3.000 + +phen%TKshed ( 12 ) = 277.150 +xxkleafcoldmax ( 12 ) = 0.100 +casabiome%xkleafcoldexp ( 12 ) = 3.000 +xxkleafdrymax ( 12 ) = 0.100 +casabiome%xkleafdryexp ( 12 ) = 3.000 + +phen%TKshed ( 13 ) = 277.150 +xxkleafcoldmax ( 13 ) = 0.100 +casabiome%xkleafcoldexp ( 13 ) = 3.000 +xxkleafdrymax ( 13 ) = 0.100 +casabiome%xkleafdryexp ( 13 ) = 3.000 + +phen%TKshed ( 14 ) = 277.150 +xxkleafcoldmax ( 14 ) = 0.100 +casabiome%xkleafcoldexp ( 14 ) = 3.000 +xxkleafdrymax ( 14 ) = 0.100 +casabiome%xkleafdryexp ( 14 ) = 3.000 + +phen%TKshed ( 15 ) = 277.150 +xxkleafcoldmax ( 15 ) = 0.100 +casabiome%xkleafcoldexp ( 15 ) = 3.000 +xxkleafdrymax ( 15 ) = 0.100 +casabiome%xkleafdryexp ( 15 ) = 3.000 + +phen%TKshed ( 16 ) = 277.150 +xxkleafcoldmax ( 16 ) = 0.100 +casabiome%xkleafcoldexp ( 16 ) = 3.000 +xxkleafdrymax ( 16 ) = 0.100 +casabiome%xkleafdryexp ( 16 ) = 3.000 + +phen%TKshed ( 17 ) = 283.150 +xxkleafcoldmax ( 17 ) = 0.100 +casabiome%xkleafcoldexp ( 17 ) = 3.000 +xxkleafdrymax ( 17 ) = 0.100 +casabiome%xkleafdryexp ( 17 ) = 3.000 + + ! Tranche 5 gets skipped + !=============================================================== + + ! Tranche 6 + !=============================================================== +casabiome%ratioNCplantmin ( 1, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 1, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 1, 2 ) = 0.004 +casabiome%ratioNCplantmax ( 1, 2 ) = 0.005 +casabiome%ratioNCplantmin ( 1, 3 ) = 0.013 +casabiome%ratioNCplantmax ( 1, 3 ) = 0.015 +xfNminloss ( 1 ) = 0.050 +xfNminleach ( 1 ) = 0.050 +xnfixrate ( 1 ) = 0.080 + +casabiome%ratioNCplantmin ( 2, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 2, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 2, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 2, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 2, 3 ) = 0.015 +casabiome%ratioNCplantmax ( 2, 3 ) = 0.018 +xfNminloss ( 2 ) = 0.050 +xfNminleach ( 2 ) = 0.050 +xnfixrate ( 2 ) = 2.600 + +casabiome%ratioNCplantmin ( 3, 1 ) = 0.017 +casabiome%ratioNCplantmax ( 3, 1 ) = 0.020 +casabiome%ratioNCplantmin ( 3, 2 ) = 0.004 +casabiome%ratioNCplantmax ( 3, 2 ) = 0.005 +casabiome%ratioNCplantmin ( 3, 3 ) = 0.013 +casabiome%ratioNCplantmax ( 3, 3 ) = 0.015 +xfNminloss ( 3 ) = 0.050 +xfNminleach ( 3 ) = 0.050 +xnfixrate ( 3 ) = 0.210 + +casabiome%ratioNCplantmin ( 4, 1 ) = 0.029 +casabiome%ratioNCplantmax ( 4, 1 ) = 0.034 +casabiome%ratioNCplantmin ( 4, 2 ) = 0.006 +casabiome%ratioNCplantmax ( 4, 2 ) = 0.007 +casabiome%ratioNCplantmin ( 4, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 4, 3 ) = 0.017 +xfNminloss ( 4 ) = 0.050 +xfNminleach ( 4 ) = 0.050 +xnfixrate ( 4 ) = 1.640 + +casabiome%ratioNCplantmin ( 5, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 5, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 5, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 5, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 5, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 5, 3 ) = 0.017 +xfNminloss ( 5 ) = 0.050 +xfNminleach ( 5 ) = 0.050 +xnfixrate ( 5 ) = 0.370 + +casabiome%ratioNCplantmin ( 6, 1 ) = 0.026 +casabiome%ratioNCplantmax ( 6, 1 ) = 0.032 +casabiome%ratioNCplantmin ( 6, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 6, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 6, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 6, 3 ) = 0.017 +xfNminloss ( 6 ) = 0.050 +xfNminleach ( 6 ) = 0.050 +xnfixrate ( 6 ) = 0.950 + +casabiome%ratioNCplantmin ( 7, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 7, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 7, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 7, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 7, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 7, 3 ) = 0.017 +xfNminloss ( 7 ) = 0.050 +xfNminleach ( 7 ) = 0.050 +xnfixrate ( 7 ) = 0.950 + +casabiome%ratioNCplantmin ( 8, 1 ) = 0.020 +casabiome%ratioNCplantmax ( 8, 1 ) = 0.024 +casabiome%ratioNCplantmin ( 8, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 8, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 8, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 8, 3 ) = 0.017 +xfNminloss ( 8 ) = 0.050 +xfNminleach ( 8 ) = 0.050 +xnfixrate ( 8 ) = 0.950 + +casabiome%ratioNCplantmin ( 9, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 9, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 9, 2 ) = 0.008 +casabiome%ratioNCplantmax ( 9, 2 ) = 0.010 +casabiome%ratioNCplantmin ( 9, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 9, 3 ) = 0.017 +xfNminloss ( 9 ) = 0.050 +xfNminleach ( 9 ) = 0.050 +xnfixrate ( 9 ) = 4.000 + +casabiome%ratioNCplantmin ( 10, 1 ) = 0.040 +casabiome%ratioNCplantmax ( 10, 1 ) = 0.048 +casabiome%ratioNCplantmin ( 10, 2 ) = 0.008 +casabiome%ratioNCplantmax ( 10, 2 ) = 0.010 +casabiome%ratioNCplantmin ( 10, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 10, 3 ) = 0.017 +xfNminloss ( 10 ) = 0.050 +xfNminleach ( 10 ) = 0.050 +xnfixrate ( 10 ) = 4.000 + +casabiome%ratioNCplantmin ( 11, 1 ) = 0.033 +casabiome%ratioNCplantmax ( 11, 1 ) = 0.040 +casabiome%ratioNCplantmin ( 11, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 11, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 11, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 11, 3 ) = 0.017 +xfNminloss ( 11 ) = 0.050 +xfNminleach ( 11 ) = 0.050 +xnfixrate ( 11 ) = 0.000 + +casabiome%ratioNCplantmin ( 12, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 12, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 12, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 12, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 12, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 12, 3 ) = 0.017 +xfNminloss ( 12 ) = 0.050 +xfNminleach ( 12 ) = 0.050 +xnfixrate ( 12 ) = 0.000 + +casabiome%ratioNCplantmin ( 13, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 13, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 13, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 13, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 13, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 13, 3 ) = 0.017 +xfNminloss ( 13 ) = 0.050 +xfNminleach ( 13 ) = 0.050 +xnfixrate ( 13 ) = 0.000 + +casabiome%ratioNCplantmin ( 14, 1 ) = 0.018 +casabiome%ratioNCplantmax ( 14, 1 ) = 0.022 +casabiome%ratioNCplantmin ( 14, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 14, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 14, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 14, 3 ) = 0.017 +xfNminloss ( 14 ) = 0.050 +xfNminleach ( 14 ) = 0.050 +xnfixrate ( 14 ) = 0.350 + +casabiome%ratioNCplantmin ( 15, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 15, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 15, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 15, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 15, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 15, 3 ) = 0.017 +xfNminloss ( 15 ) = 0.050 +xfNminleach ( 15 ) = 0.050 +xnfixrate ( 15 ) = 0.000 + +casabiome%ratioNCplantmin ( 16, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 16, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 16, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 16, 2 ) = 0.009 +casabiome%ratioNCplantmin ( 16, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 16, 3 ) = 0.017 +xfNminloss ( 16 ) = 0.050 +xfNminleach ( 16 ) = 0.050 +xnfixrate ( 16 ) = 0.000 + +casabiome%ratioNCplantmin ( 17, 1 ) = 0.025 +casabiome%ratioNCplantmax ( 17, 1 ) = 0.030 +casabiome%ratioNCplantmin ( 17, 2 ) = 0.007 +casabiome%ratioNCplantmax ( 17, 2 ) = 0.008 +casabiome%ratioNCplantmin ( 17, 3 ) = 0.014 +casabiome%ratioNCplantmax ( 17, 3 ) = 0.017 +xfNminloss ( 17 ) = 0.050 +xfNminleach ( 17 ) = 0.050 +xnfixrate ( 17 ) = 0.000 + + ! Tranche 7 + !=============================================================== +Nleaf ( 1 ) = 7.541 +Nwood ( 1 ) = 31.462 +Nfroot ( 1 ) = 6.098 +Nmet ( 1 ) = 0.064 +Nstr ( 1 ) = 1.394 +Ncwd ( 1 ) = 2.424 +Nmic ( 1 ) = 52.866 +Nslow ( 1 ) = 919.729 +Npass ( 1 ) = 295.026 +xnsoilmin ( 1 ) = 1000.000 + +Nleaf ( 2 ) = 9.900 +Nwood ( 2 ) = 102.000 +Nfroot ( 2 ) = 38.000 +Nmet ( 2 ) = 0.744 +Nstr ( 2 ) = 2.892 +Ncwd ( 2 ) = 8.524 +Nmic ( 2 ) = 1.138 +Nslow ( 2 ) = 20.787 +Npass ( 2 ) = 880.121 +xnsoilmin ( 2 ) = 1000.000 + +Nleaf ( 3 ) = 1.610 +Nwood ( 3 ) = 22.734 +Nfroot ( 3 ) = 5.366 +Nmet ( 3 ) = 0.059 +Nstr ( 3 ) = 1.852 +Ncwd ( 3 ) = 3.107 +Nmic ( 3 ) = 59.708 +Nslow ( 3 ) = 1074.741 +Npass ( 3 ) = 338.787 +xnsoilmin ( 3 ) = 1000.000 + +Nleaf ( 4 ) = 3.757 +Nwood ( 4 ) = 80.250 +Nfroot ( 4 ) = 5.366 +Nmet ( 4 ) = 0.137 +Nstr ( 4 ) = 2.084 +Ncwd ( 4 ) = 6.582 +Nmic ( 4 ) = 40.556 +Nslow ( 4 ) = 743.550 +Npass ( 4 ) = 336.079 +xnsoilmin ( 4 ) = 1000.000 + +Nleaf ( 5 ) = 2.933 +Nwood ( 5 ) = 2.756 +Nfroot ( 5 ) = 3.415 +Nmet ( 5 ) = 0.054 +Nstr ( 5 ) = 0.263 +Ncwd ( 5 ) = 0.827 +Nmic ( 5 ) = 16.805 +Nslow ( 5 ) = 297.699 +Npass ( 5 ) = 92.432 +xnsoilmin ( 5 ) = 1000.000 + +Nleaf ( 6 ) = 4.572 +Nwood ( 6 ) = 0.000 +Nfroot ( 6 ) = 6.415 +Nmet ( 6 ) = 0.476 +Nstr ( 6 ) = 0.339 +Ncwd ( 6 ) = 0.000 +Nmic ( 6 ) = 42.564 +Nslow ( 6 ) = 379.629 +Npass ( 6 ) = 278.661 +xnsoilmin ( 6 ) = 1000.000 + +Nleaf ( 7 ) = 4.572 +Nwood ( 7 ) = 0.000 +Nfroot ( 7 ) = 6.415 +Nmet ( 7 ) = 0.476 +Nstr ( 7 ) = 0.339 +Ncwd ( 7 ) = 0.000 +Nmic ( 7 ) = 42.564 +Nslow ( 7 ) = 379.629 +Npass ( 7 ) = 278.661 +xnsoilmin ( 7 ) = 1000.000 + +Nleaf ( 8 ) = 4.572 +Nwood ( 8 ) = 0.000 +Nfroot ( 8 ) = 6.415 +Nmet ( 8 ) = 0.476 +Nstr ( 8 ) = 0.339 +Ncwd ( 8 ) = 0.000 +Nmic ( 8 ) = 42.564 +Nslow ( 8 ) = 379.629 +Npass ( 8 ) = 278.661 +xnsoilmin ( 8 ) = 1000.000 + +Nleaf ( 9 ) = 5.333 +Nwood ( 9 ) = 0.000 +Nfroot ( 9 ) = 5.854 +Nmet ( 9 ) = 0.476 +Nstr ( 9 ) = 0.339 +Ncwd ( 9 ) = 0.000 +Nmic ( 9 ) = 51.242 +Nslow ( 9 ) = 457.029 +Npass ( 9 ) = 335.476 +xnsoilmin ( 9 ) = 1000.000 + +Nleaf ( 10 ) = 5.333 +Nwood ( 10 ) = 0.000 +Nfroot ( 10 ) = 5.854 +Nmet ( 10 ) = 0.476 +Nstr ( 10 ) = 0.339 +Ncwd ( 10 ) = 0.000 +Nmic ( 10 ) = 51.242 +Nslow ( 10 ) = 457.029 +Npass ( 10 ) = 335.476 +xnsoilmin ( 10 ) = 1000.000 + +Nleaf ( 11 ) = 0.000 +Nwood ( 11 ) = 0.000 +Nfroot ( 11 ) = 0.000 +Nmet ( 11 ) = 0.000 +Nstr ( 11 ) = 0.000 +Ncwd ( 11 ) = 0.000 +Nmic ( 11 ) = 0.000 +Nslow ( 11 ) = 0.000 +Npass ( 11 ) = 0.000 +xnsoilmin ( 11 ) = 1000.000 + +Nleaf ( 12 ) = 0.000 +Nwood ( 12 ) = 0.000 +Nfroot ( 12 ) = 0.000 +Nmet ( 12 ) = 0.000 +Nstr ( 12 ) = 0.000 +Ncwd ( 12 ) = 0.000 +Nmic ( 12 ) = 0.000 +Nslow ( 12 ) = 0.000 +Npass ( 12 ) = 0.000 +xnsoilmin ( 12 ) = 1000.000 + +Nleaf ( 13 ) = 0.000 +Nwood ( 13 ) = 0.000 +Nfroot ( 13 ) = 0.000 +Nmet ( 13 ) = 0.000 +Nstr ( 13 ) = 0.000 +Ncwd ( 13 ) = 0.000 +Nmic ( 13 ) = 0.000 +Nslow ( 13 ) = 0.000 +Npass ( 13 ) = 0.000 +xnsoilmin ( 13 ) = 1000.000 + +Nleaf ( 14 ) = 0.500 +Nwood ( 14 ) = 0.126 +Nfroot ( 14 ) = 1.537 +Nmet ( 14 ) = 0.018 +Nstr ( 14 ) = 0.033 +Ncwd ( 14 ) = 0.211 +Nmic ( 14 ) = 5.778 +Nslow ( 14 ) = 88.337 +Npass ( 14 ) = 34.478 +xnsoilmin ( 14 ) = 1000.000 + +Nleaf ( 15 ) = 0.000 +Nwood ( 15 ) = 0.000 +Nfroot ( 15 ) = 0.000 +Nmet ( 15 ) = 0.000 +Nstr ( 15 ) = 0.000 +Ncwd ( 15 ) = 0.000 +Nmic ( 15 ) = 0.000 +Nslow ( 15 ) = 0.000 +Npass ( 15 ) = 0.000 +xnsoilmin ( 15 ) = 1000.000 + +Nleaf ( 16 ) = 0.000 +Nwood ( 16 ) = 0.000 +Nfroot ( 16 ) = 0.000 +Nmet ( 16 ) = 0.000 +Nstr ( 16 ) = 0.000 +Ncwd ( 16 ) = 0.000 +Nmic ( 16 ) = 0.000 +Nslow ( 16 ) = 0.000 +Npass ( 16 ) = 0.000 +xnsoilmin ( 16 ) = 1000.000 + +Nleaf ( 17 ) = 0.000 +Nwood ( 17 ) = 0.000 +Nfroot ( 17 ) = 0.000 +Nmet ( 17 ) = 0.000 +Nstr ( 17 ) = 0.000 +Ncwd ( 17 ) = 0.000 +Nmic ( 17 ) = 0.000 +Nslow ( 17 ) = 0.000 +Npass ( 17 ) = 0.000 +xnsoilmin ( 17 ) = 1000.000 + + ! Tranche 8 + !=============================================================== +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 1, 1 ) = 0.500 +casabiome%ftransPPtoL ( 1, 2 ) = 0.950 +casabiome%ftransPPtoL ( 1, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 2, 1 ) = 0.500 +casabiome%ftransPPtoL ( 2, 2 ) = 0.950 +casabiome%ftransPPtoL ( 2, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 3, 1 ) = 0.500 +casabiome%ftransPPtoL ( 3, 2 ) = 0.950 +casabiome%ftransPPtoL ( 3, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 4, 1 ) = 0.500 +casabiome%ftransPPtoL ( 4, 2 ) = 0.950 +casabiome%ftransPPtoL ( 4, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 5, 1 ) = 0.500 +casabiome%ftransPPtoL ( 5, 2 ) = 0.950 +casabiome%ftransPPtoL ( 5, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 6, 1 ) = 0.500 +casabiome%ftransPPtoL ( 6, 2 ) = 0.950 +casabiome%ftransPPtoL ( 6, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 7, 1 ) = 0.500 +casabiome%ftransPPtoL ( 7, 2 ) = 0.950 +casabiome%ftransPPtoL ( 7, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 8, 1 ) = 0.500 +casabiome%ftransPPtoL ( 8, 2 ) = 0.950 +casabiome%ftransPPtoL ( 8, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 9, 1 ) = 0.500 +casabiome%ftransPPtoL ( 9, 2 ) = 0.950 +casabiome%ftransPPtoL ( 9, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 10, 1 ) = 0.500 +casabiome%ftransPPtoL ( 10, 2 ) = 0.950 +casabiome%ftransPPtoL ( 10, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 11, 1 ) = 0.500 +casabiome%ftransPPtoL ( 11, 2 ) = 0.950 +casabiome%ftransPPtoL ( 11, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 12, 1 ) = 0.500 +casabiome%ftransPPtoL ( 12, 2 ) = 0.950 +casabiome%ftransPPtoL ( 12, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 13, 1 ) = 0.500 +casabiome%ftransPPtoL ( 13, 2 ) = 0.950 +casabiome%ftransPPtoL ( 13, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 14, 1 ) = 0.500 +casabiome%ftransPPtoL ( 14, 2 ) = 0.950 +casabiome%ftransPPtoL ( 14, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 15, 1 ) = 0.500 +casabiome%ftransPPtoL ( 15, 2 ) = 0.950 +casabiome%ftransPPtoL ( 15, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 16, 1 ) = 0.500 +casabiome%ftransPPtoL ( 16, 2 ) = 0.950 +casabiome%ftransPPtoL ( 16, 3 ) = 0.900 + +xratioNPleafmin = 10.000 +xratioNPleafmax = 10.000 +xratioNPwoodmin = 15.000 +xratioNPwoodmax = 15.000 +xratioNPfrootmin = 15.000 +xratioNPfrootmax = 15.000 +casabiome%ftransPPtoL ( 17, 1 ) = 0.500 +casabiome%ftransPPtoL ( 17, 2 ) = 0.950 +casabiome%ftransPPtoL ( 17, 3 ) = 0.900 + + ! Tranche 9 + !=============================================================== +xkmlabp ( 1 ) = 74.541 +xpsorbmax ( 1 ) = 745.408 +xfPleach ( 1 ) = 0.001 +ratioNPsoil ( 1, 1 ) = 4.000 +ratioNPsoil ( 1, 2 ) = 5.000 +ratioNPsoil ( 1, 3 ) = 5.000 +xxkplab ( 1 ) = 0.001 +xxkpsorb ( 1 ) = 0.000 +xxkpocc ( 1 ) = 0.000 + +xkmlabp ( 2 ) = 68.158 +xpsorbmax ( 2 ) = 788.082 +xfPleach ( 2 ) = 0.001 +ratioNPsoil ( 2, 1 ) = 4.000 +ratioNPsoil ( 2, 2 ) = 5.000 +ratioNPsoil ( 2, 3 ) = 5.000 +xxkplab ( 2 ) = 0.001 +xxkpsorb ( 2 ) = 0.000 +xxkpocc ( 2 ) = 0.000 + +xkmlabp ( 3 ) = 77.952 +xpsorbmax ( 3 ) = 1110.816 +xfPleach ( 3 ) = 0.001 +ratioNPsoil ( 3, 1 ) = 4.000 +ratioNPsoil ( 3, 2 ) = 5.000 +ratioNPsoil ( 3, 3 ) = 5.000 +xxkplab ( 3 ) = 0.001 +xxkpsorb ( 3 ) = 0.000 +xxkpocc ( 3 ) = 0.000 + +xkmlabp ( 4 ) = 64.419 +xpsorbmax ( 4 ) = 744.847 +xfPleach ( 4 ) = 0.001 +ratioNPsoil ( 4, 1 ) = 4.000 +ratioNPsoil ( 4, 2 ) = 15.000 +ratioNPsoil ( 4, 3 ) = 15.000 +xxkplab ( 4 ) = 0.001 +xxkpsorb ( 4 ) = 0.000 +xxkpocc ( 4 ) = 0.000 + +xkmlabp ( 5 ) = 64.419 +xpsorbmax ( 5 ) = 744.847 +xfPleach ( 5 ) = 0.001 +ratioNPsoil ( 5, 1 ) = 4.000 +ratioNPsoil ( 5, 2 ) = 5.000 +ratioNPsoil ( 5, 3 ) = 5.000 +xxkplab ( 5 ) = 0.001 +xxkpsorb ( 5 ) = 0.000 +xxkpocc ( 5 ) = 0.000 + +xkmlabp ( 6 ) = 70.586 +xpsorbmax ( 6 ) = 816.146 +xfPleach ( 6 ) = 0.001 +ratioNPsoil ( 6, 1 ) = 4.000 +ratioNPsoil ( 6, 2 ) = 5.000 +ratioNPsoil ( 6, 3 ) = 5.000 +xxkplab ( 6 ) = 0.001 +xxkpsorb ( 6 ) = 0.000 +xxkpocc ( 6 ) = 0.000 + +xkmlabp ( 7 ) = 64.589 +xpsorbmax ( 7 ) = 746.808 +xfPleach ( 7 ) = 0.001 +ratioNPsoil ( 7, 1 ) = 4.000 +ratioNPsoil ( 7, 2 ) = 5.000 +ratioNPsoil ( 7, 3 ) = 5.000 +xxkplab ( 7 ) = 0.001 +xxkpsorb ( 7 ) = 0.000 +xxkpocc ( 7 ) = 0.000 + +xkmlabp ( 8 ) = 54.169 +xpsorbmax ( 8 ) = 722.256 +xfPleach ( 8 ) = 0.001 +ratioNPsoil ( 8, 1 ) = 4.000 +ratioNPsoil ( 8, 2 ) = 5.000 +ratioNPsoil ( 8, 3 ) = 5.000 +xxkplab ( 8 ) = 0.001 +xxkpsorb ( 8 ) = 0.000 +xxkpocc ( 8 ) = 0.000 + +xkmlabp ( 9 ) = 9.770 +xpsorbmax ( 9 ) = 293.112 +xfPleach ( 9 ) = 0.001 +ratioNPsoil ( 9, 1 ) = 4.000 +ratioNPsoil ( 9, 2 ) = 7.000 +ratioNPsoil ( 9, 3 ) = 7.000 +xxkplab ( 9 ) = 0.001 +xxkpsorb ( 9 ) = 0.000 +xxkpocc ( 9 ) = 0.000 + +xkmlabp ( 10 ) = 28.290 +xpsorbmax ( 10 ) = 311.190 +xfPleach ( 10 ) = 0.001 +ratioNPsoil ( 10, 1 ) = 4.000 +ratioNPsoil ( 10, 2 ) = 7.000 +ratioNPsoil ( 10, 3 ) = 7.000 +xxkplab ( 10 ) = 0.001 +xxkpsorb ( 10 ) = 0.000 +xxkpocc ( 10 ) = 0.000 + +xkmlabp ( 11 ) = 63.963 +xpsorbmax ( 11 ) = 373.118 +xfPleach ( 11 ) = 0.001 +ratioNPsoil ( 11, 1 ) = 4.000 +ratioNPsoil ( 11, 2 ) = 7.000 +ratioNPsoil ( 11, 3 ) = 7.000 +xxkplab ( 11 ) = 0.001 +xxkpsorb ( 11 ) = 0.000 +xxkpocc ( 11 ) = 0.000 + +xkmlabp ( 12 ) = 32.402 +xpsorbmax ( 12 ) = 615.638 +xfPleach ( 12 ) = 0.001 +ratioNPsoil ( 12, 1 ) = 4.000 +ratioNPsoil ( 12, 2 ) = 7.000 +ratioNPsoil ( 12, 3 ) = 7.000 +xxkplab ( 12 ) = 0.001 +xxkpsorb ( 12 ) = 0.000 +xxkpocc ( 12 ) = 0.000 + + ! Tranche 10 + !=============================================================== +xpleaf ( 1 ) = 0.192 +xpwood ( 1 ) = 0.954 +xpfroot ( 1 ) = 0.077 +xpmet ( 1 ) = 0.004 +xpstr ( 1 ) = 0.070 +xpcwd ( 1 ) = 0.101 +xpmic ( 1 ) = 6.873 +xpslow ( 1 ) = 119.565 +xppass ( 1 ) = 38.353 +xplab ( 1 ) = 26.737 +xpsorb ( 1 ) = 126.730 +xpocc ( 1 ) = 138.571 + +xpleaf ( 2 ) = 0.415 +xpwood ( 2 ) = 5.880 +xpfroot ( 2 ) = 1.950 +xpmet ( 2 ) = 0.030 +xpstr ( 2 ) = 0.145 +xpcwd ( 2 ) = 0.192 +xpmic ( 2 ) = 0.148 +xpslow ( 2 ) = 2.702 +xppass ( 2 ) = 114.416 +xplab ( 2 ) = 19.947 +xpsorb ( 2 ) = 92.263 +xpocc ( 2 ) = 120.374 + +xpleaf ( 3 ) = 0.116 +xpwood ( 3 ) = 0.644 +xpfroot ( 3 ) = 0.081 +xpmet ( 3 ) = 0.005 +xpstr ( 3 ) = 0.093 +xpcwd ( 3 ) = 0.129 +xpmic ( 3 ) = 7.762 +xpslow ( 3 ) = 139.716 +xppass ( 3 ) = 44.042 +xplab ( 3 ) = 29.107 +xpsorb ( 3 ) = 134.639 +xpocc ( 3 ) = 138.220 + +xpleaf ( 4 ) = 0.135 +xpwood ( 4 ) = 2.425 +xpfroot ( 4 ) = 0.141 +xpmet ( 4 ) = 0.007 +xpstr ( 4 ) = 0.104 +xpcwd ( 4 ) = 0.148 +xpmic ( 4 ) = 5.272 +xpslow ( 4 ) = 96.662 +xppass ( 4 ) = 43.690 +xplab ( 4 ) = 30.509 +xpsorb ( 4 ) = 132.012 +xpocc ( 4 ) = 148.083 + +xpleaf ( 5 ) = 0.023 +xpwood ( 5 ) = 0.000 +xpfroot ( 5 ) = 0.037 +xpmet ( 5 ) = 0.002 +xpstr ( 5 ) = 0.013 +xpcwd ( 5 ) = 0.019 +xpmic ( 5 ) = 2.185 +xpslow ( 5 ) = 38.701 +xppass ( 5 ) = 12.016 +xplab ( 5 ) = 23.206 +xpsorb ( 5 ) = 173.470 +xpocc ( 5 ) = 114.496 + +xpleaf ( 6 ) = 0.151 +xpwood ( 6 ) = 0.000 +xpfroot ( 6 ) = 0.151 +xpmet ( 6 ) = 0.019 +xpstr ( 6 ) = 0.017 +xpcwd ( 6 ) = 0.000 +xpmic ( 6 ) = 5.533 +xpslow ( 6 ) = 49.352 +xppass ( 6 ) = 36.226 +xplab ( 6 ) = 25.538 +xpsorb ( 6 ) = 186.207 +xpocc ( 6 ) = 145.163 + +xpleaf ( 7 ) = 0.151 +xpwood ( 7 ) = 0.000 +xpfroot ( 7 ) = 0.151 +xpmet ( 7 ) = 0.019 +xpstr ( 7 ) = 0.017 +xpcwd ( 7 ) = 0.000 +xpmic ( 7 ) = 5.533 +xpslow ( 7 ) = 49.352 +xppass ( 7 ) = 36.226 +xplab ( 7 ) = 25.538 +xpsorb ( 7 ) = 186.207 +xpocc ( 7 ) = 145.163 + +xpleaf ( 8 ) = 0.151 +xpwood ( 8 ) = 0.000 +xpfroot ( 8 ) = 0.151 +xpmet ( 8 ) = 0.019 +xpstr ( 8 ) = 0.017 +xpcwd ( 8 ) = 0.000 +xpmic ( 8 ) = 5.533 +xpslow ( 8 ) = 49.352 +xppass ( 8 ) = 36.226 +xplab ( 8 ) = 25.538 +xpsorb ( 8 ) = 186.207 +xpocc ( 8 ) = 145.163 + +xpleaf ( 9 ) = 0.151 +xpwood ( 9 ) = 0.000 +xpfroot ( 9 ) = 0.151 +xpmet ( 9 ) = 0.019 +xpstr ( 9 ) = 0.017 +xpcwd ( 9 ) = 0.000 +xpmic ( 9 ) = 6.662 +xpslow ( 9 ) = 59.414 +xppass ( 9 ) = 43.612 +xplab ( 9 ) = 27.729 +xpsorb ( 9 ) = 155.518 +xpocc ( 9 ) = 158.884 + +xpleaf ( 10 ) = 0.151 +xpwood ( 10 ) = 0.000 +xpfroot ( 10 ) = 0.151 +xpmet ( 10 ) = 0.019 +xpstr ( 10 ) = 0.017 +xpcwd ( 10 ) = 0.000 +xpmic ( 10 ) = 6.662 +xpslow ( 10 ) = 59.414 +xppass ( 10 ) = 43.612 +xplab ( 10 ) = 27.729 +xpsorb ( 10 ) = 155.518 +xpocc ( 10 ) = 158.884 + +xpleaf ( 11 ) = 0.000 +xpwood ( 11 ) = 0.000 +xpfroot ( 11 ) = 0.000 +xpmet ( 11 ) = 0.000 +xpstr ( 11 ) = 0.000 +xpcwd ( 11 ) = 0.000 +xpmic ( 11 ) = 0.000 +xpslow ( 11 ) = 0.000 +xppass ( 11 ) = 0.000 +xplab ( 11 ) = 0.000 +xpsorb ( 11 ) = 0.000 +xpocc ( 11 ) = 0.000 + +xpleaf ( 12 ) = 0.000 +xpwood ( 12 ) = 0.000 +xpfroot ( 12 ) = 0.000 +xpmet ( 12 ) = 0.000 +xpstr ( 12 ) = 0.000 +xpcwd ( 12 ) = 0.000 +xpmic ( 12 ) = 0.000 +xpslow ( 12 ) = 0.000 +xppass ( 12 ) = 0.000 +xplab ( 12 ) = 0.000 +xpsorb ( 12 ) = 0.000 +xpocc ( 12 ) = 0.000 + +xpleaf ( 13 ) = 0.000 +xpwood ( 13 ) = 0.000 +xpfroot ( 13 ) = 0.000 +xpmet ( 13 ) = 0.000 +xpstr ( 13 ) = 0.000 +xpcwd ( 13 ) = 0.000 +xpmic ( 13 ) = 0.000 +xpslow ( 13 ) = 0.000 +xppass ( 13 ) = 0.000 +xplab ( 13 ) = 0.000 +xpsorb ( 13 ) = 0.000 +xpocc ( 13 ) = 0.000 + +xpleaf ( 14 ) = 0.007 +xpwood ( 14 ) = 0.000 +xpfroot ( 14 ) = 0.009 +xpmet ( 14 ) = 0.001 +xpstr ( 14 ) = 0.002 +xpcwd ( 14 ) = 0.000 +xpmic ( 14 ) = 0.751 +xpslow ( 14 ) = 11.484 +xppass ( 14 ) = 4.482 +xplab ( 14 ) = 21.038 +xpsorb ( 14 ) = 255.790 +xpocc ( 14 ) = 108.897 + +xpleaf ( 15 ) = 0.000 +xpwood ( 15 ) = 0.000 +xpfroot ( 15 ) = 0.000 +xpmet ( 15 ) = 0.000 +xpstr ( 15 ) = 0.000 +xpcwd ( 15 ) = 0.000 +xpmic ( 15 ) = 0.000 +xpslow ( 15 ) = 0.000 +xppass ( 15 ) = 0.000 +xplab ( 15 ) = 0.000 +xpsorb ( 15 ) = 0.000 +xpocc ( 15 ) = 0.000 + +xpleaf ( 16 ) = 0.000 +xpwood ( 16 ) = 0.000 +xpfroot ( 16 ) = 0.000 +xpmet ( 16 ) = 0.000 +xpstr ( 16 ) = 0.000 +xpcwd ( 16 ) = 0.000 +xpmic ( 16 ) = 0.000 +xpslow ( 16 ) = 0.000 +xppass ( 16 ) = 0.000 +xplab ( 16 ) = 0.000 +xpsorb ( 16 ) = 0.000 +xpocc ( 16 ) = 0.000 + +xpleaf ( 17 ) = 0.000 +xpwood ( 17 ) = 0.000 +xpfroot ( 17 ) = 0.000 +xpmet ( 17 ) = 0.000 +xpstr ( 17 ) = 0.000 +xpcwd ( 17 ) = 0.000 +xpmic ( 17 ) = 0.000 +xpslow ( 17 ) = 0.000 +xppass ( 17 ) = 0.000 +xplab ( 17 ) = 0.103 +xpsorb ( 17 ) = 1.176 +xpocc ( 17 ) = 0.688 + + ! Tranche 11 + !=============================================================== +xxnpmax ( 1 ) = 1.511 +xq10soil ( 1 ) = 1.720 +xxkoptlitter ( 1 ) = 0.400 +xxkoptsoil ( 1 ) = 0.330 +xprodptase ( 1 ) = 0.500 +xcostnpup ( 1 ) = 40.000 +xmaxfinelitter ( 1 ) = 1524.000 +xmaxcwd ( 1 ) = 1795.000 +xnintercept ( 1 ) = 6.320 +xnslope ( 1 ) = 18.150 + +xxnpmax ( 2 ) = 1.279 +xq10soil ( 2 ) = 1.720 +xxkoptlitter ( 2 ) = 0.400 +xxkoptsoil ( 2 ) = 0.600 +xprodptase ( 2 ) = 0.200 +xcostnpup ( 2 ) = 25.000 +xmaxfinelitter ( 2 ) = 384.000 +xmaxcwd ( 2 ) = 613.000 +xnintercept ( 2 ) = 4.190 +xnslope ( 2 ) = 26.190 + +xxnpmax ( 3 ) = 1.591 +xq10soil ( 3 ) = 1.720 +xxkoptlitter ( 3 ) = 0.400 +xxkoptsoil ( 3 ) = 0.150 +xprodptase ( 3 ) = 0.500 +xcostnpup ( 3 ) = 40.000 +xmaxfinelitter ( 3 ) = 1527.000 +xmaxcwd ( 3 ) = 1918.000 +xnintercept ( 3 ) = 6.320 +xnslope ( 3 ) = 18.150 + +xxnpmax ( 4 ) = 1.186 +xq10soil ( 4 ) = 1.720 +xxkoptlitter ( 4 ) = 0.400 +xxkoptsoil ( 4 ) = 0.600 +xprodptase ( 4 ) = 0.500 +xcostnpup ( 4 ) = 40.000 +xmaxfinelitter ( 4 ) = 887.000 +xmaxcwd ( 4 ) = 1164.000 +xnintercept ( 4 ) = 5.730 +xnslope ( 4 ) = 29.810 + +xxnpmax ( 5 ) = 1.358 +xq10soil ( 5 ) = 1.720 +xxkoptlitter ( 5 ) = 0.400 +xxkoptsoil ( 5 ) = 0.160 +xprodptase ( 5 ) = 0.500 +xcostnpup ( 5 ) = 40.000 +xmaxfinelitter ( 5 ) = 157.000 +xmaxcwd ( 5 ) = 107.000 +xnintercept ( 5 ) = 14.710 +xnslope ( 5 ) = 23.150 + +xxnpmax ( 6 ) = 1.456 +xq10soil ( 6 ) = 1.720 +xxkoptlitter ( 6 ) = 0.400 +xxkoptsoil ( 6 ) = 0.400 +xprodptase ( 6 ) = 0.500 +xcostnpup ( 6 ) = 40.000 +xmaxfinelitter ( 6 ) = 361.000 +xmaxcwd ( 6 ) = 420.000 +xnintercept ( 6 ) = 6.420 +xnslope ( 6 ) = 40.960 + +xxnpmax ( 7 ) = 1.456 +xq10soil ( 7 ) = 1.720 +xxkoptlitter ( 7 ) = 0.400 +xxkoptsoil ( 7 ) = 0.300 +xprodptase ( 7 ) = 0.500 +xcostnpup ( 7 ) = 40.000 +xmaxfinelitter ( 7 ) = 225.000 +xmaxcwd ( 7 ) = 228.000 +xnintercept ( 7 ) = 2.000 +xnslope ( 7 ) = 8.000 + +xxnpmax ( 8 ) = 1.456 +xq10soil ( 8 ) = 1.720 +xxkoptlitter ( 8 ) = 0.400 +xxkoptsoil ( 8 ) = 0.200 +xprodptase ( 8 ) = 0.500 +xcostnpup ( 8 ) = 40.000 +xmaxfinelitter ( 8 ) = 913.000 +xmaxcwd ( 8 ) = 573.000 +xnintercept ( 8 ) = 14.710 +xnslope ( 8 ) = 23.150 + +xxnpmax ( 9 ) = 1.210 +xq10soil ( 9 ) = 1.720 +xxkoptlitter ( 9 ) = 0.400 +xxkoptsoil ( 9 ) = 0.200 +xprodptase ( 9 ) = 0.500 +xcostnpup ( 9 ) = 40.000 +xmaxfinelitter ( 9 ) = 660.000 +xmaxcwd ( 9 ) = 811.000 +xnintercept ( 9 ) = 4.710 +xnslope ( 9 ) = 59.230 + +xxnpmax ( 10 ) = 1.210 +xq10soil ( 10 ) = 1.720 +xxkoptlitter ( 10 ) = 0.400 +xxkoptsoil ( 10 ) = 0.250 +xprodptase ( 10 ) = 0.500 +xcostnpup ( 10 ) = 40.000 +xmaxfinelitter ( 10 ) = 100.000 +xmaxcwd ( 10 ) = 100.000 +xnintercept ( 10 ) = 14.710 +xnslope ( 10 ) = 23.150 + +xxnpmax ( 11 ) = 1.456 +xq10soil ( 11 ) = 1.720 +xxkoptlitter ( 11 ) = 0.400 +xxkoptsoil ( 11 ) = 1.000 +xprodptase ( 11 ) = 0.500 +xcostnpup ( 11 ) = 40.000 +xmaxfinelitter ( 11 ) = 100.000 +xmaxcwd ( 11 ) = 100.000 +xnintercept ( 11 ) = 14.710 +xnslope ( 11 ) = 23.150 + +xxnpmax ( 12 ) = 1.366 +xq10soil ( 12 ) = 1.720 +xxkoptlitter ( 12 ) = 0.400 +xxkoptsoil ( 12 ) = 0.650 +xprodptase ( 12 ) = 4.000 +xcostnpup ( 12 ) = 40.000 +xmaxfinelitter ( 12 ) = 100.000 +xmaxcwd ( 12 ) = 100.000 +xnintercept ( 12 ) = 7.000 +xnslope ( 12 ) = 10.000 + +xxnpmax ( 13 ) = 1.210 +xq10soil ( 13 ) = 1.720 +xxkoptlitter ( 13 ) = 0.400 +xxkoptsoil ( 13 ) = 0.500 +xprodptase ( 13 ) = 0.500 +xcostnpup ( 13 ) = 40.000 +xmaxfinelitter ( 13 ) = 100.000 +xmaxcwd ( 13 ) = 100.000 +xnintercept ( 13 ) = 14.710 +xnslope ( 13 ) = 23.150 + +xxnpmax ( 14 ) = 1.000 +xq10soil ( 14 ) = 1.720 +xxkoptlitter ( 14 ) = 0.400 +xxkoptsoil ( 14 ) = 2.000 +xprodptase ( 14 ) = 0.500 +xcostnpup ( 14 ) = 40.000 +xmaxfinelitter ( 14 ) = 83.000 +xmaxcwd ( 14 ) = 23.000 +xnintercept ( 14 ) = 14.710 +xnslope ( 14 ) = 23.150 + +xxnpmax ( 15 ) = 1.400 +xq10soil ( 15 ) = 1.720 +xxkoptlitter ( 15 ) = 0.400 +xxkoptsoil ( 15 ) = 0.500 +xprodptase ( 15 ) = 0.500 +xcostnpup ( 15 ) = 40.000 +xmaxfinelitter ( 15 ) = 100.000 +xmaxcwd ( 15 ) = 100.000 +xnintercept ( 15 ) = 14.710 +xnslope ( 15 ) = 23.150 + +xxnpmax ( 16 ) = 1.000 +xq10soil ( 16 ) = 1.720 +xxkoptlitter ( 16 ) = 0.400 +xxkoptsoil ( 16 ) = 1.000 +xprodptase ( 16 ) = 0.500 +xcostnpup ( 16 ) = 40.000 +xmaxfinelitter ( 16 ) = 100.000 +xmaxcwd ( 16 ) = 100.000 +xnintercept ( 16 ) = 14.710 +xnslope ( 16 ) = 23.150 + +xxnpmax ( 17 ) = 1.000 +xq10soil ( 17 ) = 1.720 +xxkoptlitter ( 17 ) = 0.400 +xxkoptsoil ( 17 ) = 1.000 +xprodptase ( 17 ) = 0.500 +xcostnpup ( 17 ) = 40.000 +xmaxfinelitter ( 17 ) = 100.000 +xmaxcwd ( 17 ) = 100.000 +xnintercept ( 17 ) = 14.710 +xnslope ( 17 ) = 23.150 + + + + + + + DO nv=1,ntiles + casabiome%ratioPcplantmin(nv,leaf) = 1.0/(xratioNPleafmax*ratioCNplant(nv,leaf)) + casabiome%ratioPcplantmax(nv,leaf) = 1.0/(xratioNPleafmin*ratioCNplant(nv,leaf)) + casabiome%ratioPcplantmin(nv,wood) = 1.0/(xratioNPwoodmax*ratioCNplant(nv,wood)) + casabiome%ratioPcplantmax(nv,wood) = 1.0/(xratioNPwoodmin*ratioCNplant(nv,wood)) + casabiome%ratioPcplantmin(nv,froot) = 1.0/(xratioNPfrootmax*ratioCNplant(nv,froot)) + casabiome%ratioPcplantmax(nv,froot) = 1.0/(xratioNPfrootmin*ratioCNplant(nv,froot)) + + + casabiome%ratioNPplantmin(nv,leaf) = xratioNPleafmin + casabiome%ratioNPplantmax(nv,leaf) = xratioNPleafmax + casabiome%ratioNPplantmin(nv,wood) = xratioNPwoodmin + casabiome%ratioNPplantmax(nv,wood) = xratioNPwoodmax + casabiome%ratioNPplantmin(nv,froot) = xratioNPfrootmin + casabiome%ratioNPplantmax(nv,froot) = xratioNPfrootmax + + ENDDO + + fracroot = 0.0 + depthsoila = 0.0 + depthsoilb = 0.0 + DO ns=1, nsl + depthsoilb(ns) = depthsoilb(ns) + soil_zse(ns) + IF (ns==1) THEN + depthsoila(ns) = 0.0 + ELSE + depthsoila(ns) = depthsoilb(ns-1) + ENDIF + ENDDO + + DO nv=1,ntiles + casabiome%sla(nv) = slax(nv) + casabiome%fraclabile(nv,leaf) = deltcasa*0.6 !1/day + casabiome%fraclabile(nv,froot)= deltcasa*0.4 !1/day + casabiome%fraclabile(nv,wood) = deltcasa*0.0 + casabiome%plantrate(nv,leaf) = deltcasa/(leafage(nv)*(1.0-xfherbivore(nv))) + casabiome%plantrate(nv,froot) = deltcasa/frootage(nv) + casabiome%plantrate(nv,wood) = deltcasa/woodage(nv) + casabiome%litterrate(nv,metb) = deltcasa/metage(nv) + casabiome%litterrate(nv,str) = deltcasa/strage(nv) + casabiome%litterrate(nv,cwd) = deltcasa/cwdage(nv) + casabiome%soilrate(nv,mic) = deltcasa/micage(nv) + casabiome%soilrate(nv,slow) = deltcasa/slowage(nv) + casabiome%soilrate(nv,pass) = deltcasa/passage(nv) + casabiome%xkleafcoldmax(nv) = deltcasa * xxkleafcoldmax(nv) + casabiome%xkleafdrymax(nv) = deltcasa * xxkleafdrymax(nv) + ! casabiome%kuplabp(nv) = xkuplabp(nv) + casabiome%rmplant(nv,:) = casabiome%rmplant(nv,:)*deltcasa + casabiome%kclabrate(nv) = deltcasa/clabileage(nv) + + !@@@@@@@@@@@@@@@@@ + casabiome%xnpmax(nv) = xxnpmax(nv) + casabiome%q10soil(nv) = xq10soil(nv) + casabiome%xkoptlitter(nv) = xxkoptlitter(nv) + casabiome%xkoptsoil(nv) = xxkoptsoil(nv) + casabiome%prodptase(nv) = xprodptase(nv)/365.0 ! convert from yearly to daily + casabiome%costnpup(nv) = xcostnpup(nv) + casabiome%maxfinelitter(nv) = xmaxfinelitter(nv) + casabiome%maxcwd(nv) = xmaxcwd(nv) + casabiome%nintercept(nv) = xnintercept(nv) + casabiome%nslope(nv) = xnslope(nv) + !@@@@@@@@@@@@@@ + ENDDO + + !@@@@@@@@@@@@@@ + DO ns=1,mso + casabiome%xkplab(ns) = xxkplab(ns) + casabiome%xkpsorb(ns) = xxkpsorb(ns) + casabiome%xkpocc(ns) = xxkpocc(ns) + ENDDO + + !@@@@@@@@@@@@@@ + + ! PRINT *, 'casabiome%xkoptsoil = ', casabiome%xkoptsoil(2) + + DO npt = 1, mp + iv1=veg_iveg(npt) + iso=casamet%isorder(npt) + ! The following to be commented out when coupled to CABLE + ! veg%froot(npt,:) =fracroot(iv1,:) + ! PRINT *, 'npt,iv1,iso ', npt,iv1, iso + casamet%iveg2(npt) =casabiome%ivt2(iv1) + casamet%lnonwood(npt) = 1 + casapool%cplant(npt,wood) = 0.0 + casapool%clitter(npt,cwd) = 0.0 + casapool%nplant(npt,wood) = 0.0 + casapool%nlitter(npt,cwd) = 0.0 + casapool%pplant(npt,wood) = 0.0 + casapool%plitter(npt,cwd) = 0.0 + IF (casamet%iveg2(npt)==forest.OR.casamet%iveg2(npt)==shrub) THEN + casamet%lnonwood(npt) = 0 + casapool%cplant(npt,wood) = Cwood(iv1) + casapool%clitter(npt,cwd) = ccwd(iv1) + casapool%nplant(npt,wood) = nwood(iv1) + casapool%nlitter(npt,cwd) = ncwd(iv1) + casapool%pplant(npt,wood) = xpwood(iv1) + casapool%plitter(npt,cwd) = xpcwd(iv1) + !! vh_js !! + IF (cable_user%CALL_POP) THEN ! initialise very small wood pool, so POP can start from zero. + casapool%cplant(npt,wood) = 0.01 + casapool%nplant(npt,wood)= casabiome%ratioNCplantmin(iv1,wood)* casapool%cplant(npt,wood) + casapool%pplant(npt,wood)= casabiome%ratioPCplantmin(iv1,wood)* casapool%cplant(npt,wood) + ENDIF + !! vh_js + + ENDIF + casapool%cplant(npt,leaf) = cleaf(iv1) + casapool%cplant(npt,froot) = cfroot(iv1) + casapool%clabile(npt) = 0.0 + casapool%clitter(npt,metb) = cmet(iv1) + casapool%clitter(npt,str) = cstr(iv1) + casapool%csoil(npt,mic) = cmic(iv1) + casapool%csoil(npt,slow) = cslow(iv1) + casapool%csoil(npt,pass) = cpass(iv1) + IF (icycle==1) THEN + casapool%ratioNCplant(npt,:) = 1.0/ratioCNplant(iv1,:) + ENDIF + + ! initializing glai in case not reading pool file (eg. during spin) + casamet%glai(npt) = MAX(casabiome%glaimin(iv1), & + casabiome%sla(iv1) * casapool%cplant(npt,leaf)) + + casaflux%fNminloss(npt) = xfNminloss(iv1) + ! comment out by ypw 12/07/2009 + casaflux%fNminleach(npt) = 10.0*xfNminleach(iv1) * deltcasa + ! casaflux%fNminleach(npt) = xfNminleach(iv1) + casapool%nplant(npt,leaf) = nleaf(iv1) + casapool%nplant(npt,froot)= nfroot(iv1) + casapool%nlitter(npt,metb) = nmet(iv1) + ! casapool%nlitter(npt,str) = nstr(iv1) + casapool%nlitter(npt,str) = cstr(iv1)*ratioNCstrfix + casapool%nsoil(npt,mic) = nmic(iv1) + casapool%nsoil(npt,slow) = nslow(iv1) + casapool%nsoil(npt,pass) = npass(iv1) + casapool%nsoilmin(npt) = xnsoilmin(iv1) + casapool%pplant(npt,leaf) = xpleaf(iv1) + casapool%pplant(npt,froot)= xpfroot(iv1) + casapool%plitter(npt,metb) = xpmet(iv1) + ! casapool%plitter(npt,str) = xpstr(iv1) + casapool%plitter(npt,str) = casapool%nlitter(npt,str)/ratioNPstrfix + casapool%psoil(npt,mic) = xpmic(iv1) + casapool%psoil(npt,slow) = xpslow(iv1) + casapool%psoil(npt,pass) = xppass(iv1) + casapool%psoillab(npt) = xplab(iv1) + casapool%psoilsorb(npt) = xpsorb(iv1) + casapool%psoilocc(npt) = xpocc(iv1) + casaflux%kmlabp(npt) = xkmlabp(iso) + casaflux%psorbmax(npt) = xpsorbmax(iso) + casaflux%fpleach(npt) = xfPleach(iso) + ! we used the spatially explicit estimate N fixation by Wang and Houlton (GRL) + ! casaflux%Nminfix(npt) = xnfixrate(iv1)/365.0 + + ! use the PFT-specific C:N:P stoichiometry + casapool%ratioNCplant(npt,:) = 1.0/ratioCNplant(iv1,:) + casapool%ratioNPplant(npt,:) = casabiome%ratioNPplantmin(iv1,:) + casapool%ratioPCplant(npt,:) = 1.0/(ratioCNplant(iv1,:) *casabiome%ratioNPplantmin(iv1,:) ) + + casapool%ratioNClitter(npt,metb) = casapool%ratioNCplant(npt,leaf) * casabiome%ftransNPtoL(iv1,leaf) + casapool%ratioNClitter(npt,str) = casapool%ratioNCplant(npt,froot) * casabiome%ftransNPtoL(iv1,froot) + casapool%ratioNClitter(npt,cwd) = casapool%ratioNCplant(npt,wood) * casabiome%ftransNPtoL(iv1,wood) + + casapool%ratioPClitter(npt,metb) = casapool%ratioPCplant(npt,leaf) * casabiome%ftransPPtoL(iv1,leaf) + casapool%ratioPClitter(npt,str) = casapool%ratioPCplant(npt,froot) * casabiome%ftransPPtoL(iv1,froot) + casapool%ratioPClitter(npt,cwd) = casapool%ratioPCplant(npt,wood) * casabiome%ftransPPtoL(iv1,wood) + + casapool%ratioNPlitter(npt,metb) = casapool%ratioNClitter(npt,metb)/(casapool%ratioPClitter(npt,metb) +1.0e-10) + casapool%ratioNPlitter(npt,str) = casapool%ratioNClitter(npt,str)/(casapool%ratioPClitter(npt,str) +1.0e-10) + casapool%ratioNPlitter(npt,cwd) = casapool%ratioNClitter(npt,cwd)/(casapool%ratioPClitter(npt,cwd) +1.0e-10) + + casapool%ratioNCsoil(npt,:) = 1.0/ratioCNsoil(iv1,:) + casapool%ratioNPsoil(npt,:) = ratioNPsoil(iso,:) + casapool%ratioPCsoil(npt,:) = 1.0/(ratioCNsoil(iv1,:)*ratioNPsoil(iso,:)) + + casapool%ratioNCsoilmin(npt,:) = 1.0/ratioCNsoilmax(iv1,:) + casapool%ratioNCsoilmax(npt,:) = 1.0/ratioCNsoilmin(iv1,:) + casapool%ratioNCsoilnew(npt,:) = casapool%ratioNCsoilmax(npt,:) + ENDDO + + IF(icycle<2) THEN + casapool%Nplant(:,:) = casapool%Cplant(:,:) * casapool%ratioNCplant(:,:) + casapool%Nlitter(:,:) = casapool%Clitter(:,:) * casapool%ratioNClitter(:,:) + casapool%Nsoil(:,:) = casapool%Csoil(:,:) * casapool%ratioNCsoil(:,:) + ENDIF + IF(icycle<3) THEN + casapool%Pplant(:,:) = casapool%Cplant(:,:) * casapool%ratioPCplant(:,:) + casapool%Plitter(:,:) = casapool%Clitter(:,:) * casapool%ratioPClitter(:,:) + casapool%Psoil(:,:) = casapool%Csoil(:,:) * casapool%ratioPCsoil(:,:) + casapool%Psoilsorb(:) = casaflux%psorbmax(:) * casapool%psoillab(:) & + /(casaflux%kmlabp(:)+casapool%psoillab(:)) + ENDIF + +RETURN +END SUBROUTINE casa_readbiome + +END MODULE casa_readbiome_module diff --git a/src/coupled/AM3/control/casa/types/casa_variable.F90 b/src/coupled/AM3/control/casa/types/casa_variable.F90 new file mode 100644 index 000000000..f6aad2c97 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/casa_variable.F90 @@ -0,0 +1,157 @@ +MODULE casavariable + +!legacy - USE all the other MODULES here +! data declarations +USE casa_biome_type_mod, ONLY: casa_biome_data_type, & + casa_biome => casa_biome_type +USE casa_pool_type_mod, ONLY: casa_pool_data_type, & + casa_pool => casa_pool_type +USE casa_flux_type_mod, ONLY: casa_flux_data_type, & + casa_flux => casa_flux_type +USE casa_met_type_mod, ONLY: casa_met_data_type, & + casa_met => casa_met_type +USE casa_balance_type_mod, ONLY: casa_bal_data_type, & + casa_bal => casa_bal_type +USE phenology_type_mod, ONLY: phenology_data_type, & + phenology_type +IMPLICIT NONE + +PUBLIC :: zero_sum_casa +PUBLIC :: update_sum_casa +PUBLIC :: alloc_casavariable + +CONTAINS + +SUBROUTINE alloc_casavariable( casabiome, casabiome_data, & + casapool, casapool_data, & + casaflux, casaflux_data, & + casamet, casamet_data, & + casabal, casabal_data, & + sum_casapool, sum_casapool_data, & + sum_casaflux, sum_casaflux_data, & + phen, phen_data, mp ) + +! subrs +USE casa_biome_type_mod, ONLY: zero_casa_biome_data_type +USE casa_biome_type_mod, ONLY: assoc_casa_biome_type + +USE casa_pool_type_mod, ONLY: alloc_casa_pool_data_type +USE casa_pool_type_mod, ONLY: assoc_casa_pool_type +USE casa_pool_type_mod, ONLY: zero_casa_pool_data_type + +USE casa_flux_type_mod, ONLY: alloc_casa_flux_data_type +USE casa_flux_type_mod, ONLY: zero_casa_flux_data_type +USE casa_flux_type_mod, ONLY: assoc_casa_flux_type + +USE casa_met_type_mod, ONLY: alloc_casa_met_data_type +USE casa_met_type_mod, ONLY: assoc_casa_met_type +USE casa_met_type_mod, ONLY: zero_casa_met_data_type + +USE sum_casa_pool_type_mod, ONLY: alloc_sum_casa_pool_data_type +USE sum_casa_pool_type_mod, ONLY: assoc_sum_casa_pool_type + +USE sum_casa_flux_type_mod, ONLY: alloc_sum_casa_flux_data_type +USE sum_casa_flux_type_mod, ONLY: assoc_sum_casa_flux_type + +USE casa_balance_type_mod, ONLY: alloc_casa_bal_data_type +USE casa_balance_type_mod, ONLY: zero_casa_bal_data_type +USE casa_balance_type_mod, ONLY: assoc_casa_bal_type + +USE phenology_type_mod, ONLY: alloc_phenology_data_type +USE phenology_type_mod, ONLY: zero_phenology_data_type +USE phenology_type_mod, ONLY: assoc_phenology_type + +IMPLICIT NONE + +TYPE (casa_biome), INTENT(INOUT) :: casabiome +TYPE (casa_biome_data_type), INTENT(INOUT) :: casabiome_data +TYPE (casa_pool), INTENT(INOUT) :: casapool +TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +TYPE (casa_flux), INTENT(INOUT) :: casaflux +TYPE (casa_flux_data_type), INTENT(INOUT) :: casaflux_data +TYPE (casa_pool), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data +TYPE (casa_flux), INTENT(INOUT) :: sum_casaflux +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data +TYPE (casa_bal), INTENT(INOUT) :: casabal +TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data +TYPE (casa_met), INTENT(INOUT) :: casamet +TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data +TYPE (phenology_type), INTENT(INOUT) :: phen +TYPE (phenology_data_type), INTENT(INOUT) :: phen_data + +INTEGER, INTENT(INOUT) :: mp + +CALL zero_casa_biome_data_type( casabiome_data ) +! allocating as 1s can also be done here following cable types, given lsm_id=casa +CALL alloc_casa_pool_data_type( casapool_data, mp ) +CALL zero_casa_pool_data_type( casapool_data ) + +CALL alloc_casa_flux_data_type( casaflux_data, mp ) +CALL zero_casa_flux_data_type( casaflux_data ) + +CALL alloc_casa_met_data_type( casamet_data, mp ) +CALL zero_casa_met_data_type( casamet_data ) + +CALL alloc_sum_casa_pool_data_type( sum_casapool_data, mp ) + +CALL alloc_sum_casa_flux_data_type( sum_casaflux_data, mp ) + +CALL alloc_casa_bal_data_type( casabal_data, mp ) +CALL zero_casa_bal_data_type( casabal_data ) + +CALL alloc_phenology_data_type( phen_data, mp ) +CALL zero_phenology_data_type( phen_data ) + +!IF ( cable_runtime%um ) THEN + CALL assoc_casa_biome_type( casabiome, casabiome_data ) + CALL assoc_casa_pool_type ( casapool, casapool_data ) + CALL assoc_casa_flux_type ( casaflux, casaflux_data ) + CALL assoc_casa_met_type ( casamet, casamet_data ) + CALL assoc_casa_bal_type ( casabal, casabal_data ) + CALL assoc_sum_casa_pool_type( sum_casapool, sum_casapool_data ) + CALL assoc_sum_casa_flux_type( sum_casaflux, sum_casaflux_data ) + CALL assoc_phenology_type( phen, phen_data ) +!END IF + +RETURN +END SUBROUTINE alloc_casavariable + +SUBROUTINE zero_sum_casa( sum_casapool, sum_casaflux ) + +USE sum_casa_pool_type_mod, ONLY: zero_sum_casa_pool_data +USE sum_casa_flux_type_mod, ONLY: zero_sum_casa_flux_data + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux + +CALL zero_sum_casa_pool_data( sum_casapool ) +CALL zero_sum_casa_flux_data( sum_casaflux ) + +RETURN +END SUBROUTINE zero_sum_casa + +SUBROUTINE update_sum_casa( sum_casapool, sum_casaflux, casapool, casaflux, & + sum_now, average_now, nsteps ) + +USE sum_casa_pool_type_mod, ONLY: update_sum_casa_pool +USE sum_casa_flux_type_mod, ONLY: update_sum_casa_flux + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +TYPE (casa_flux_data_type), INTENT(IN) :: casaflux +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +CALL update_sum_casa_pool( sum_casapool, casapool, sum_now, average_now, nsteps) + +CALL update_sum_casa_flux( sum_casapool, sum_casaflux, casapool, casaflux, & + sum_now, average_now, nsteps ) + +RETURN +END SUBROUTINE update_sum_casa + +END MODULE casavariable diff --git a/src/coupled/AM3/control/casa/types/phen_variable.F90 b/src/coupled/AM3/control/casa/types/phen_variable.F90 new file mode 100644 index 000000000..b5e92ec74 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/phen_variable.F90 @@ -0,0 +1,6 @@ +module phenvariable + + use phenology_type_mod, only: phen_variable => phenology_type,& + alloc_phenvariable => alloc_phenology_data_type + +end module phenvariable diff --git a/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 new file mode 100644 index 000000000..e262d3438 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 @@ -0,0 +1,466 @@ +MODULE sum_casa_flux_type_mod + +IMPLICIT NONE + +PUBLIC :: alloc_sum_casa_flux_data_type +PUBLIC :: assoc_sum_casa_flux_type +PUBLIC :: zero_sum_casa_flux_data +PUBLIC :: update_sum_casa_flux + +CONTAINS + +SUBROUTINE alloc_sum_casa_flux_data_type( sum_casaflux_data, arraysize) + +USE casadimension, ONLY: mplant, mlitter, msoil +USE casa_flux_type_mod, ONLY: casa_flux_data_type + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( sum_casaflux_data % Cgpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crgplant ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminfix ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminuptake ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Plabuptake ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Clabloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fracClabile ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % stemnpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % sapwood_area ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Crsoil ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nmindep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nminleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nupland ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nlittermin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsmin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsimm ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Nsnet ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fNminloss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fNminleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pdep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pwea ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Ploss ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Pupland ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Plittermin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psmin ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psimm ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psnet ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % fPleach ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kplab ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kpsorb ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kpocc ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % kmlabp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Psorbmax ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cnep ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtoCO2 ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxNtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxPtohwp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxCtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxNtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % FluxPtoclear ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % CtransferLUC ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % meangpp ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % meanrleaf ( arraysize ) ) + +ALLOCATE ( sum_casaflux_data % fracCalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % fracNalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % fracPalloc ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % Crmplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % kplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % klitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % ksoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % fromLtoCO2 ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % fromStoCO2 ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxCtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxNtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxPtolitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casaflux_data % FluxCtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxNtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % FluxPtosoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casaflux_data % fromPtoL ( arraysize, mlitter, mplant ) ) +ALLOCATE ( sum_casaflux_data % fromLtoS ( arraysize, msoil, mlitter ) ) +ALLOCATE ( sum_casaflux_data % fromStoS ( arraysize, msoil, msoil ) ) + +ALLOCATE ( sum_casaflux_data % Cplant_turnover ( arraysize, mplant ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_disturbance ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_crowding ( arraysize ) ) +ALLOCATE ( sum_casaflux_data % Cplant_turnover_resource_limitation( arraysize ) ) + +RETURN +END SUBROUTINE alloc_sum_casa_flux_data_type + +SUBROUTINE assoc_sum_casa_flux_type( sum_casaflux, sum_casaflux_data ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type +USE casa_flux_type_mod, ONLY: casa_flux_type + + IMPLICIT NONE + +TYPE (casa_flux_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_flux_data_type), INTENT(INOUT), TARGET :: sum_casaflux_data + +sum_casaflux % Cgpp => sum_casaflux_data % Cgpp +sum_casaflux % Cnpp => sum_casaflux_data % Cnpp +sum_casaflux % Crp => sum_casaflux_data % Crp +sum_casaflux % Crgplant => sum_casaflux_data % Crgplant +sum_casaflux % Nminfix => sum_casaflux_data % Nminfix +sum_casaflux % Nminuptake => sum_casaflux_data % Nminuptake +sum_casaflux % Plabuptake => sum_casaflux_data % Plabuptake +sum_casaflux % Clabloss => sum_casaflux_data % Clabloss +sum_casaflux % fracClabile => sum_casaflux_data % fracClabile +sum_casaflux % stemnpp => sum_casaflux_data % stemnpp +sum_casaflux % frac_sapwood => sum_casaflux_data % frac_sapwood +sum_casaflux % sapwood_area => sum_casaflux_data % sapwood_area +sum_casaflux % Crsoil => sum_casaflux_data % Crsoil +sum_casaflux % Nmindep => sum_casaflux_data % Nmindep +sum_casaflux % Nminloss => sum_casaflux_data % Nminloss +sum_casaflux % Nminleach => sum_casaflux_data % Nminleach +sum_casaflux % Nupland => sum_casaflux_data % Nupland +sum_casaflux % Nlittermin => sum_casaflux_data % Nlittermin +sum_casaflux % Nsmin => sum_casaflux_data % Nsmin +sum_casaflux % Nsimm => sum_casaflux_data % Nsimm +sum_casaflux % Nsnet => sum_casaflux_data % Nsnet +sum_casaflux % fNminloss => sum_casaflux_data % fNminloss +sum_casaflux % fNminleach => sum_casaflux_data % fNminleach +sum_casaflux % Pdep => sum_casaflux_data % Pdep +sum_casaflux % Pwea => sum_casaflux_data % Pwea +sum_casaflux % Pleach => sum_casaflux_data % Pleach +sum_casaflux % Ploss => sum_casaflux_data % Ploss +sum_casaflux % Pupland => sum_casaflux_data % Pupland +sum_casaflux % Plittermin => sum_casaflux_data % Plittermin +sum_casaflux % Psmin => sum_casaflux_data % Psmin +sum_casaflux % Psimm => sum_casaflux_data % Psimm +sum_casaflux % Psnet => sum_casaflux_data % Psnet +sum_casaflux % fPleach => sum_casaflux_data % fPleach +sum_casaflux % kplab => sum_casaflux_data % kplab +sum_casaflux % kpsorb => sum_casaflux_data % kpsorb +sum_casaflux % kpocc => sum_casaflux_data % kpocc +sum_casaflux % kmlabp => sum_casaflux_data % kmlabp +sum_casaflux % Psorbmax => sum_casaflux_data % Psorbmax +sum_casaflux % Cnep => sum_casaflux_data % Cnep +sum_casaflux % FluxCtoCO2 => sum_casaflux_data % FluxCtoCO2 +sum_casaflux % FluxCtohwp => sum_casaflux_data % FluxCtohwp +sum_casaflux % FluxNtohwp => sum_casaflux_data % FluxNtohwp +sum_casaflux % FluxPtohwp => sum_casaflux_data % FluxPtohwp +sum_casaflux % FluxCtoclear => sum_casaflux_data % FluxCtoclear +sum_casaflux % FluxNtoclear => sum_casaflux_data % FluxNtoclear +sum_casaflux % FluxPtoclear => sum_casaflux_data % FluxPtoclear +sum_casaflux % CtransferLUC => sum_casaflux_data % CtransferLUC +sum_casaflux % meangpp => sum_casaflux_data % meangpp +sum_casaflux % meanrleaf => sum_casaflux_data % meanrleaf + +sum_casaflux % fracCalloc => sum_casaflux_data % fracCalloc +sum_casaflux % fracNalloc => sum_casaflux_data % fracNalloc +sum_casaflux % fracPalloc => sum_casaflux_data % fracPalloc +sum_casaflux % Crmplant => sum_casaflux_data % Crmplant +sum_casaflux % kplant => sum_casaflux_data % kplant +sum_casaflux % klitter => sum_casaflux_data % klitter +sum_casaflux % ksoil => sum_casaflux_data % ksoil +sum_casaflux % fromLtoCO2 => sum_casaflux_data % fromLtoCO2 +sum_casaflux % fromStoCO2 => sum_casaflux_data % fromStoCO2 +sum_casaflux % FluxCtolitter => sum_casaflux_data % FluxCtolitter +sum_casaflux % FluxNtolitter => sum_casaflux_data % FluxNtolitter +sum_casaflux % FluxPtolitter => sum_casaflux_data % FluxPtolitter +sum_casaflux % FluxCtosoil => sum_casaflux_data % FluxCtosoil +sum_casaflux % FluxNtosoil => sum_casaflux_data % FluxNtosoil +sum_casaflux % FluxPtosoil => sum_casaflux_data % FluxPtosoil +sum_casaflux % fromPtoL => sum_casaflux_data % fromPtoL +sum_casaflux % fromLtoS => sum_casaflux_data % fromLtoS +sum_casaflux % fromStoS => sum_casaflux_data % fromStoS + +sum_casaflux % Cplant_turnover => sum_casaflux % Cplant_turnover +sum_casaflux % Cplant_turnover_disturbance => & + sum_casaflux_data % Cplant_turnover_disturbance +sum_casaflux % Cplant_turnover_crowding => & + sum_casaflux_data % Cplant_turnover_crowding +sum_casaflux % Cplant_turnover_resource_limitation => & + sum_casaflux_data % Cplant_turnover_resource_limitation + +RETURN +END SUBROUTINE assoc_sum_casa_flux_type + +SUBROUTINE zero_sum_casa_flux_data( sum_casaflux ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type + +IMPLICIT NONE + +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux + +sum_casaflux % Cgpp = 0.0 +sum_casaflux % Cnpp = 0.0 +sum_casaflux % Crp = 0.0 +sum_casaflux % Crgplant = 0.0 +sum_casaflux % Nminfix = 0.0 +sum_casaflux % Nminuptake = 0.0 +sum_casaflux % Plabuptake = 0.0 +sum_casaflux % Clabloss = 0.0 +sum_casaflux % fracClabile = 0.0 +sum_casaflux % stemnpp = 0.0 +sum_casaflux % frac_sapwood = 0.0 +sum_casaflux % sapwood_area = 0.0 +sum_casaflux % Crsoil = 0.0 +sum_casaflux % Nmindep = 0.0 +sum_casaflux % Nminloss = 0.0 +sum_casaflux % Nminleach = 0.0 +sum_casaflux % Nupland = 0.0 +sum_casaflux % Nlittermin = 0.0 +sum_casaflux % Nsmin = 0.0 +sum_casaflux % Nsimm = 0.0 +sum_casaflux % Nsnet = 0.0 +sum_casaflux % fNminloss = 0.0 +sum_casaflux % fNminleach = 0.0 +sum_casaflux % Pdep = 0.0 +sum_casaflux % Pwea = 0.0 +sum_casaflux % Pleach = 0.0 +sum_casaflux % Ploss = 0.0 +sum_casaflux % Pupland = 0.0 +sum_casaflux % Plittermin = 0.0 +sum_casaflux % Psmin = 0.0 +sum_casaflux % Psimm = 0.0 +sum_casaflux % Psnet = 0.0 +sum_casaflux % fPleach = 0.0 +sum_casaflux % kplab = 0.0 +sum_casaflux % kpsorb = 0.0 +sum_casaflux % kpocc = 0.0 +sum_casaflux % kmlabp = 0.0 +sum_casaflux % Psorbmax = 0.0 +sum_casaflux % Cnep = 0.0 +sum_casaflux % FluxCtoCO2 = 0.0 +sum_casaflux % FluxCtohwp = 0.0 +sum_casaflux % FluxNtohwp = 0.0 +sum_casaflux % FluxPtohwp = 0.0 +sum_casaflux % FluxCtoclear = 0.0 +sum_casaflux % FluxNtoclear = 0.0 +sum_casaflux % FluxPtoclear = 0.0 +sum_casaflux % CtransferLUC = 0.0 +sum_casaflux % meangpp = 0.0 +sum_casaflux % meanrleaf = 0.0 + +sum_casaflux % fracCalloc = 0.0 +sum_casaflux % fracNalloc = 0.0 +sum_casaflux % fracPalloc = 0.0 +sum_casaflux % Crmplant = 0.0 +sum_casaflux % kplant = 0.0 +sum_casaflux % klitter = 0.0 +sum_casaflux % ksoil = 0.0 +sum_casaflux % fromLtoCO2 = 0.0 +sum_casaflux % fromStoCO2 = 0.0 +sum_casaflux % FluxCtolitter = 0.0 +sum_casaflux % FluxNtolitter = 0.0 +sum_casaflux % FluxPtolitter = 0.0 +sum_casaflux % FluxCtosoil = 0.0 +sum_casaflux % FluxNtosoil = 0.0 +sum_casaflux % FluxPtosoil = 0.0 +sum_casaflux % fromPtoL = 0.0 +sum_casaflux % fromLtoS = 0.0 +sum_casaflux % fromStoS = 0.0 + +sum_casaflux % Cplant_turnover = 0.0 +sum_casaflux % Cplant_turnover_disturbance = 0.0 +sum_casaflux % Cplant_turnover_crowding = 0.0 +sum_casaflux % Cplant_turnover_resource_limitation = 0.0 + +END SUBROUTINE zero_sum_casa_flux_data + +!jhan:pass individual elements of casapool +!do the calcshere with the pointers to the _data fields +SUBROUTINE update_sum_casa_flux( sum_casapool, sum_casaflux, & + casapool, casaflux, sum_now, average_now, nsteps ) + +USE casa_flux_type_mod, ONLY: casa_flux_data_type +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +TYPE (casa_flux_data_type), INTENT(IN) :: casaflux +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +!local vars +INTEGER :: rsteps + +rsteps = REAL(nsteps) + +IF (sum_now) THEN + + sum_casaflux%Cgpp = sum_casaflux%Cgpp + casaflux%Cgpp + sum_casaflux%Cnpp = sum_casaflux%Cnpp + casaflux%Cnpp + sum_casaflux%Crp = sum_casaflux%Crp + casaflux%Crp + sum_casaflux%Crgplant = sum_casaflux%Crgplant + casaflux%Crgplant + sum_casaflux%Nminfix = sum_casaflux%Nminfix + casaflux%Nminfix + sum_casaflux%Nminuptake = sum_casaflux%Nminuptake + casaflux%Nminuptake + sum_casaflux%Plabuptake = sum_casaflux%Plabuptake + casaflux%Plabuptake + sum_casaflux%Clabloss = sum_casaflux%Clabloss + casaflux%Clabloss + sum_casaflux%fracClabile = sum_casaflux%fracClabile + casaflux%fracClabile + + sum_casaflux%fracCalloc = sum_casaflux%fracCalloc + & + ( casaflux%fracCalloc * casapool%cplant ) + sum_casaflux%fracNalloc = sum_casaflux%fracNalloc + casaflux%fracNalloc + sum_casaflux%fracPalloc = sum_casaflux%fracPalloc + casaflux%fracPalloc + + sum_casaflux%kplant = sum_casaflux%kplant + & + ( casaflux%kplant * casapool%cplant ) + + sum_casaflux%Crmplant = sum_casaflux%Crmplant + casaflux%Crmplant + sum_casaflux%fromPtoL = sum_casaflux%fromPtoL + casaflux%fromPtoL + sum_casaflux%Cnep = sum_casaflux%Cnep + casaflux%Cnep + sum_casaflux%Crsoil = sum_casaflux%Crsoil + casaflux%Crsoil + sum_casaflux%Nmindep = sum_casaflux%Nmindep + casaflux%Nmindep + sum_casaflux%Nminloss = sum_casaflux%Nminloss + casaflux%Nminloss + sum_casaflux%Nminleach = sum_casaflux%Nminleach + casaflux%Nminleach + sum_casaflux%Nupland = sum_casaflux%Nupland + casaflux%Nupland + sum_casaflux%Nlittermin = sum_casaflux%Nlittermin + casaflux%Nlittermin + sum_casaflux%Nsmin = sum_casaflux%Nsmin + casaflux%Nsmin + sum_casaflux%Nsimm = sum_casaflux%Nsimm + casaflux%Nsimm + sum_casaflux%Nsnet = sum_casaflux%Nsnet + casaflux%Nsnet + sum_casaflux%fNminloss = sum_casaflux%fNminloss + casaflux%fNminloss + sum_casaflux%fNminleach = sum_casaflux%fNminleach + casaflux%fNminleach + sum_casaflux%Pdep = sum_casaflux%Pdep + casaflux%Pdep + sum_casaflux%Pwea = sum_casaflux%Pwea + casaflux%Pwea + sum_casaflux%Pleach = sum_casaflux%Pleach + casaflux%Pleach + sum_casaflux%Ploss = sum_casaflux%Ploss + casaflux%Ploss + sum_casaflux%Pupland = sum_casaflux%Pupland + casaflux%Pupland + sum_casaflux%Plittermin = sum_casaflux%Plittermin + casaflux%Plittermin + sum_casaflux%Psmin = sum_casaflux%Psmin + casaflux%Psmin + sum_casaflux%Psimm = sum_casaflux%Psimm + casaflux%Psimm + sum_casaflux%Psnet = sum_casaflux%Psnet + casaflux%Psnet + sum_casaflux%fPleach = sum_casaflux%fPleach + casaflux%fPleach + sum_casaflux%kplab = sum_casaflux%kplab + casaflux%kplab + sum_casaflux%kpsorb = sum_casaflux%kpsorb + casaflux%kpsorb + sum_casaflux%kpocc = sum_casaflux%kpocc + casaflux%kpocc + sum_casaflux%kmlabP = sum_casaflux%kmlabP + casaflux%kmlabP + sum_casaflux%Psorbmax = sum_casaflux%Psorbmax + casaflux%Psorbmax + sum_casaflux%klitter = sum_casaflux%klitter + casaflux%klitter + sum_casaflux%ksoil = sum_casaflux%ksoil + casaflux%ksoil + sum_casaflux%fromLtoS = sum_casaflux%fromLtoS + casaflux%fromLtoS + sum_casaflux%fromStoS = sum_casaflux%fromStoS + casaflux%fromStoS + sum_casaflux%fromLtoCO2 = sum_casaflux%fromLtoCO2 + casaflux%fromLtoCO2 + sum_casaflux%fromStoCO2 = sum_casaflux%fromStoCO2 + casaflux%fromStoCO2 + + sum_casaflux%stemnpp = sum_casaflux%stemnpp + casaflux%stemnpp + sum_casaflux%frac_sapwood = sum_casaflux%frac_sapwood + casaflux%frac_sapwood + sum_casaflux%sapwood_area = sum_casaflux%sapwood_area + casaflux%sapwood_area + sum_casaflux%FluxCtoco2 = sum_casaflux%FluxCtoco2 + casaflux%FluxCtoco2 + sum_casaflux%FluxCtosoil = sum_casaflux%FluxCtosoil + casaflux%FluxCtosoil + sum_casaflux%FluxNtosoil = sum_casaflux%FluxNtosoil + casaflux%FluxNtosoil + sum_casaflux%FluxPtosoil = sum_casaflux%FluxPtosoil + casaflux%FluxPtosoil + + sum_casaflux%FluxCtolitter = sum_casaflux%FluxCtolitter + & + casaflux%FluxCtolitter + + sum_casaflux%FluxNtolitter = sum_casaflux%FluxNtolitter + & + casaflux%FluxNtolitter + + sum_casaflux%FluxPtolitter = sum_casaflux%FluxPtolitter + & + casaflux%FluxPtolitter + + sum_casaflux%Cplant_turnover = sum_casaflux%Cplant_turnover + & + casaflux%Cplant_turnover + + sum_casaflux%Cplant_turnover_disturbance = & + sum_casaflux%Cplant_turnover_disturbance + & + casaflux%Cplant_turnover_disturbance + + sum_casaflux%Cplant_turnover_crowding = & + sum_casaflux%Cplant_turnover_crowding + & + casaflux%Cplant_turnover_crowding + + sum_casaflux%Cplant_turnover_resource_limitation = & + sum_casaflux%Cplant_turnover_resource_limitation + & + casaflux%Cplant_turnover_resource_limitation +ENDIF + +IF (average_now) THEN + + WHERE ( sum_casapool%Cplant .GT. 1.e-12 ) + sum_casaflux%fracCalloc = sum_casaflux%fracCalloc / sum_casapool%Cplant + sum_casaflux%kplant = sum_casaflux%kplant / sum_casapool%Cplant + ELSEWHERE + sum_casaflux%fracCalloc = 0.0 + sum_casaflux%kplant = 0.0 + ENDWHERE + + sum_casaflux%Cgpp = sum_casaflux%Cgpp / rsteps + sum_casaflux%Cnpp = sum_casaflux%Cnpp / rsteps + sum_casaflux%Crp = sum_casaflux%Crp / rsteps + sum_casaflux%Crgplant = sum_casaflux%Crgplant / rsteps + sum_casaflux%Nminfix = sum_casaflux%Nminfix / rsteps + sum_casaflux%Nminuptake = sum_casaflux%Nminuptake / rsteps + sum_casaflux%Plabuptake = sum_casaflux%Plabuptake / rsteps + sum_casaflux%Clabloss = sum_casaflux%Clabloss / rsteps + sum_casaflux%fracClabile = sum_casaflux%fracClabile / rsteps + sum_casaflux%fracNalloc = sum_casaflux%fracNalloc / rsteps + sum_casaflux%fracPalloc = sum_casaflux%fracPalloc / rsteps + sum_casaflux%Crmplant = sum_casaflux%Crmplant / rsteps + sum_casaflux%fromPtoL = sum_casaflux%fromPtoL / rsteps + sum_casaflux%Cnep = sum_casaflux%Cnep / rsteps + sum_casaflux%Crsoil = sum_casaflux%Crsoil / rsteps + sum_casaflux%Nmindep = sum_casaflux%Nmindep / rsteps + sum_casaflux%Nminloss = sum_casaflux%Nminloss / rsteps + sum_casaflux%Nminleach = sum_casaflux%Nminleach / rsteps + sum_casaflux%Nupland = sum_casaflux%Nupland / rsteps + sum_casaflux%Nlittermin = sum_casaflux%Nlittermin / rsteps + sum_casaflux%Nsmin = sum_casaflux%Nsmin / rsteps + sum_casaflux%Nsimm = sum_casaflux%Nsimm / rsteps + sum_casaflux%Nsnet = sum_casaflux%Nsnet / rsteps + sum_casaflux%fNminloss = sum_casaflux%fNminloss / rsteps + sum_casaflux%fNminleach = sum_casaflux%fNminleach / rsteps + sum_casaflux%Pdep = sum_casaflux%Pdep / rsteps + sum_casaflux%Pwea = sum_casaflux%Pwea / rsteps + sum_casaflux%Pleach = sum_casaflux%Pleach / rsteps + sum_casaflux%Ploss = sum_casaflux%Ploss / rsteps + sum_casaflux%Pupland = sum_casaflux%Pupland / rsteps + sum_casaflux%Plittermin = sum_casaflux%Plittermin / rsteps + sum_casaflux%Psmin = sum_casaflux%Psmin / rsteps + sum_casaflux%Psimm = sum_casaflux%Psimm / rsteps + sum_casaflux%Psnet = sum_casaflux%Psnet / rsteps + sum_casaflux%fPleach = sum_casaflux%fPleach / rsteps + sum_casaflux%kplab = sum_casaflux%kplab / rsteps + sum_casaflux%kpsorb = sum_casaflux%kpsorb / rsteps + sum_casaflux%kpocc = sum_casaflux%kpocc / rsteps + sum_casaflux%kmlabP = sum_casaflux%kmlabP / rsteps + sum_casaflux%Psorbmax = sum_casaflux%Psorbmax / rsteps + sum_casaflux%klitter = sum_casaflux%klitter / rsteps + sum_casaflux%ksoil = sum_casaflux%ksoil / rsteps + sum_casaflux%fromLtoS = sum_casaflux%fromLtoS / rsteps + sum_casaflux%fromStoS = sum_casaflux%fromStoS / rsteps + sum_casaflux%fromLtoCO2 = sum_casaflux%fromLtoCO2 / rsteps + sum_casaflux%fromStoCO2 = sum_casaflux%fromStoCO2 / rsteps + sum_casaflux%stemnpp = sum_casaflux%stemnpp / rsteps + sum_casaflux%frac_sapwood = sum_casaflux%frac_sapwood / rsteps + sum_casaflux%sapwood_area = sum_casaflux%sapwood_area / rsteps + sum_casaflux%FluxCtolitter = sum_casaflux%FluxCtolitter / rsteps + sum_casaflux%FluxNtolitter = sum_casaflux%FluxNtolitter / rsteps + sum_casaflux%FluxPtolitter = sum_casaflux%FluxPtolitter / rsteps + sum_casaflux%FluxCtosoil = sum_casaflux%FluxCtosoil / rsteps + sum_casaflux%FluxNtosoil = sum_casaflux%FluxNtosoil / rsteps + sum_casaflux%FluxPtosoil = sum_casaflux%FluxPtosoil / rsteps + sum_casaflux%FluxCtoco2 = sum_casaflux%FluxCtoco2 / rsteps + + sum_casaflux%Cplant_turnover = sum_casaflux%Cplant_turnover / rsteps + + sum_casaflux%Cplant_turnover_disturbance = & + casaflux%Cplant_turnover_disturbance / rsteps + + sum_casaflux% Cplant_turnover_crowding = & + sum_casaflux%Cplant_turnover_crowding / rsteps + + sum_casaflux%Cplant_turnover_resource_limitation = & + sum_casaflux%Cplant_turnover_resource_limitation / rsteps + +ENDIF + +END SUBROUTINE update_sum_casa_flux + +END MODULE sum_casa_flux_type_mod diff --git a/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 new file mode 100644 index 000000000..39139fb68 --- /dev/null +++ b/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 @@ -0,0 +1,313 @@ +MODULE sum_casa_pool_type_mod + +USE cable_other_constants_mod, ONLY: r_2 ! currently DOUBLE precision + +IMPLICIT NONE + +PUBLIC :: alloc_sum_casa_pool_data_type +PUBLIC :: assoc_sum_casa_pool_type +PUBLIC :: zero_sum_casa_pool_data +PUBLIC :: update_sum_casa_pool + +CONTAINS + +SUBROUTINE alloc_sum_casa_pool_data_type( sum_casapool_data, arraysize ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type +USE casadimension, ONLY: mplant, mlitter, msoil, mwood + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data +INTEGER, INTENT(IN) :: arraysize + +ALLOCATE ( sum_casapool_data % Clabile ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dClabiledt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Ctot ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Nsoilmin ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoillab ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoilsorb ( arraysize ) ) +ALLOCATE ( sum_casapool_data % Psoilocc ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dNsoilmindt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoillabdt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoilsorbdt ( arraysize ) ) +ALLOCATE ( sum_casapool_data % dPsoiloccdt ( arraysize ) ) + +ALLOCATE ( sum_casapool_data % Cplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Nplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Pplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dCplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dNplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % dPplantdt ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioNCplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioNPplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % Clitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Nlitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Plitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dClitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dNlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % dPlitterdt ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % ratioNClitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % ratioNPlitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % Csoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % Nsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % Psoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dCsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dNsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % dPsoildt ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilnew ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNPsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilmin ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioNCsoilmax ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioPcsoil ( arraysize, msoil ) ) +ALLOCATE ( sum_casapool_data % ratioPcplant ( arraysize, mplant ) ) +ALLOCATE ( sum_casapool_data % ratioPclitter ( arraysize, mlitter ) ) +ALLOCATE ( sum_casapool_data % cwoodprod ( arraysize, mwood ) ) +ALLOCATE ( sum_casapool_data % nwoodprod ( arraysize, mwood ) ) +ALLOCATE ( sum_casapool_data % pwoodprod ( arraysize, mwood ) ) + +END SUBROUTINE alloc_sum_casa_pool_data_type + +SUBROUTINE zero_sum_casa_pool_data( sum_casapool ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool + +sum_casapool % Clabile = 0.0 +sum_casapool % dClabiledt = 0.0 +sum_casapool % Ctot = 0.0 +sum_casapool % Ctot_0 = 0.0 +sum_casapool % Nsoilmin = 0.0 +sum_casapool % Psoillab = 0.0 +sum_casapool % Psoilsorb = 0.0 +sum_casapool % Psoilocc = 0.0 +sum_casapool % dNsoilmindt = 0.0 +sum_casapool % dPsoillabdt = 0.0 +sum_casapool % dPsoilsorbdt = 0.0 +sum_casapool % dPsoiloccdt = 0.0 + +sum_casapool % Cplant = 0.0 +sum_casapool % Nplant = 0.0 +sum_casapool % Pplant = 0.0 +sum_casapool % dCplantdt = 0.0 +sum_casapool % dNplantdt = 0.0 +sum_casapool % dPplantdt = 0.0 +sum_casapool % ratioNCplant = 0.0 +sum_casapool % ratioNPplant = 0.0 +sum_casapool % Clitter = 0.0 +sum_casapool % Nlitter = 0.0 +sum_casapool % Plitter = 0.0 +sum_casapool % dClitterdt = 0.0 +sum_casapool % dNlitterdt = 0.0 +sum_casapool % dPlitterdt = 0.0 +sum_casapool % ratioNClitter = 0.0 +sum_casapool % ratioNPlitter = 0.0 +sum_casapool % Csoil = 0.0 +sum_casapool % Nsoil = 0.0 +sum_casapool % Psoil = 0.0 +sum_casapool % dCsoildt = 0.0 +sum_casapool % dNsoildt = 0.0 +sum_casapool % dPsoildt = 0.0 +sum_casapool % ratioNCsoil = 0.0 +sum_casapool % ratioNCsoilnew = 0.0 +sum_casapool % ratioNPsoil = 0.0 +sum_casapool % ratioNCsoilmin = 0.0 +sum_casapool % ratioNCsoilmax = 0.0 +sum_casapool % ratioPcsoil = 0.0 +sum_casapool % ratioPcplant = 0.0 +sum_casapool % ratioPclitter = 0.0 +sum_casapool % cwoodprod = 0.0 +sum_casapool % nwoodprod = 0.0 +sum_casapool % pwoodprod = 0.0 + +RETURN +END SUBROUTINE zero_sum_casa_pool_data + +SUBROUTINE assoc_sum_casa_pool_type( sum_casapool, sum_casapool_data ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type +USE casa_pool_type_mod, ONLY: casa_pool_type + +IMPLICIT NONE + +TYPE (casa_pool_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: sum_casapool_data + +sum_casapool % Clabile => sum_casapool_data % Clabile +sum_casapool % dClabiledt => sum_casapool_data % dClabiledt +sum_casapool % Ctot => sum_casapool_data % Ctot +sum_casapool % Ctot_0 => sum_casapool_data % Ctot_0 +sum_casapool % Nsoilmin => sum_casapool_data % Nsoilmin +sum_casapool % Psoillab => sum_casapool_data % Psoillab +sum_casapool % Psoilsorb => sum_casapool_data % Psoilsorb +sum_casapool % Psoilocc => sum_casapool_data % Psoilocc +sum_casapool % dNsoilmindt => sum_casapool_data % dNsoilmindt +sum_casapool % dPsoillabdt => sum_casapool_data % dPsoillabdt +sum_casapool % dPsoilsorbdt => sum_casapool_data % dPsoilsorbdt +sum_casapool % dPsoiloccdt => sum_casapool_data % dPsoiloccdt + +sum_casapool % Cplant => sum_casapool_data % Cplant +sum_casapool % Nplant => sum_casapool_data % Nplant +sum_casapool % Pplant => sum_casapool_data % Pplant +sum_casapool % dCplantdt => sum_casapool_data % dCplantdt +sum_casapool % dNplantdt => sum_casapool_data % dNplantdt +sum_casapool % dPplantdt => sum_casapool_data % dPplantdt +sum_casapool % ratioNCplant => sum_casapool_data % ratioNCplant +sum_casapool % ratioNPplant => sum_casapool_data % ratioNPplant +sum_casapool % Clitter => sum_casapool_data % Clitter +sum_casapool % Nlitter => sum_casapool_data % Nlitter +sum_casapool % Plitter => sum_casapool_data % Plitter +sum_casapool % dClitterdt => sum_casapool_data % dClitterdt +sum_casapool % dNlitterdt => sum_casapool_data % dNlitterdt +sum_casapool % dPlitterdt => sum_casapool_data % dPlitterdt +sum_casapool % ratioNClitter => sum_casapool_data % ratioNClitter +sum_casapool % ratioNPlitter => sum_casapool_data % ratioNPlitter +sum_casapool % Csoil => sum_casapool_data % Csoil +sum_casapool % Nsoil => sum_casapool_data % Nsoil +sum_casapool % Psoil => sum_casapool_data % Psoil +sum_casapool % dCsoildt => sum_casapool_data % dCsoildt +sum_casapool % dNsoildt => sum_casapool_data % dNsoildt +sum_casapool % dPsoildt => sum_casapool_data % dPsoildt +sum_casapool % ratioNCsoil => sum_casapool_data % ratioNCsoil +sum_casapool % ratioNCsoilnew => sum_casapool_data % ratioNCsoilnew +sum_casapool % ratioNPsoil => sum_casapool_data % ratioNPsoil +sum_casapool % ratioNCsoilmin => sum_casapool_data % ratioNCsoilmin +sum_casapool % ratioNCsoilmax => sum_casapool_data % ratioNCsoilmax +sum_casapool % ratioPcsoil => sum_casapool_data % ratioPcsoil +sum_casapool % ratioPcplant => sum_casapool_data % ratioPcplant +sum_casapool % ratioPclitter => sum_casapool_data % ratioPclitter +sum_casapool % cwoodprod => sum_casapool_data % cwoodprod +sum_casapool % nwoodprod => sum_casapool_data % nwoodprod +sum_casapool % pwoodprod => sum_casapool_data % pwoodprod + +RETURN +END SUBROUTINE assoc_sum_casa_pool_type + +SUBROUTINE update_sum_casa_pool( sum_casapool, casapool, sum_now, average_now, & + nsteps ) + +USE casa_pool_type_mod, ONLY: casa_pool_data_type + +IMPLICIT NONE + +TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool +TYPE (casa_pool_data_type), INTENT(IN) :: casapool +LOGICAL, INTENT(IN) :: sum_now, average_now +INTEGER, INTENT(IN) :: nsteps + +!local vars +INTEGER :: rsteps + +rsteps = REAL( nsteps ) + +IF (sum_now) THEN + + sum_casapool%Clabile = sum_casapool%Clabile + casapool%Clabile + sum_casapool%dClabiledt = sum_casapool%Clabile + casapool%Clabile + sum_casapool%Cplant = sum_casapool%Cplant + casapool%Cplant + sum_casapool%Nplant = sum_casapool%Nplant + casapool%Nplant + sum_casapool%Pplant = sum_casapool%Pplant + casapool%Pplant + sum_casapool%dCplantdt = sum_casapool%dCplantdt + casapool%dCplantdt + sum_casapool%dNplantdt = sum_casapool%dNplantdt + casapool%dNplantdt + sum_casapool%dPplantdt = sum_casapool%dPplantdt + casapool%dPplantdt + sum_casapool%ratioNCplant = sum_casapool%ratioNCplant & + + casapool%ratioNCplant + sum_casapool%ratioNPplant = sum_casapool%ratioNPplant & + + casapool%ratioNPplant + sum_casapool%Nsoilmin = sum_casapool%Nsoilmin + casapool%Nsoilmin + sum_casapool%Psoillab = sum_casapool%Psoillab + casapool%Psoillab + sum_casapool%Psoilsorb = sum_casapool%Psoilsorb + casapool%Psoilsorb + + sum_casapool%Psoilocc = sum_casapool%Psoilocc + casapool%Psoilocc + sum_casapool%dNsoilmindt = sum_casapool%dNsoilmindt + casapool%dNsoilmindt + sum_casapool%dPsoillabdt = sum_casapool%dPsoillabdt + casapool%dPsoillabdt + sum_casapool%dPsoilsorbdt = sum_casapool%dPsoilsorbdt & + + casapool%dPsoilsorbdt + sum_casapool%dPsoiloccdt = sum_casapool%dPsoiloccdt + casapool%dPsoiloccdt + sum_casapool%Clitter = sum_casapool%Clitter + casapool%Clitter + sum_casapool%Nlitter = sum_casapool%Nlitter + casapool%Nlitter + sum_casapool%Plitter = sum_casapool%Plitter + casapool%Plitter + sum_casapool%dClitterdt = sum_casapool%dClitterdt + casapool%dClitterdt + sum_casapool%dNlitterdt = sum_casapool%dNlitterdt + casapool%dNlitterdt + sum_casapool%dPlitterdt = sum_casapool%dPlitterdt + casapool%dPlitterdt + sum_casapool%ratioNClitter = sum_casapool%ratioNClitter & + + casapool%ratioNClitter + sum_casapool%ratioNPlitter = sum_casapool%ratioNPlitter & + + casapool%ratioNPlitter + sum_casapool%Csoil = sum_casapool%Csoil + casapool%Csoil + sum_casapool%Nsoil = sum_casapool%Nsoil + casapool%Nsoil + sum_casapool%Psoil = sum_casapool%Psoil + casapool%Psoil + sum_casapool%dCsoildt = sum_casapool%dCsoildt + casapool%dCsoildt + sum_casapool%dNsoildt = sum_casapool%dNsoildt + casapool%dNsoildt + sum_casapool%dPsoildt = sum_casapool%dPsoildt + casapool%dPsoildt + sum_casapool%ratioNCsoil = sum_casapool%ratioNCsoil & + + casapool%ratioNCsoil + sum_casapool%ratioNPsoil = sum_casapool%ratioNPsoil & + + casapool%ratioNPsoil + sum_casapool%ratioNCsoilnew = sum_casapool%ratioNCsoilnew & + + casapool%ratioNCsoilnew + sum_casapool%ratioNCsoilmin = sum_casapool%ratioNCsoilmin & + + casapool%ratioNCsoilmin + sum_casapool%ratioNCsoilmax = sum_casapool%ratioNCsoilmax & + + casapool%ratioNCsoilmax + sum_casapool%ratioPcsoil = sum_casapool%ratioPcsoil + casapool%ratioPcsoil + sum_casapool%ratioPcplant = sum_casapool%ratioPcplant & + + casapool%ratioPcplant + sum_casapool%ratioPclitter = sum_casapool%ratioPclitter & + + casapool%ratioPclitter + +ENDIF + +IF (average_now) THEN + + sum_casapool%Clabile = sum_casapool%Clabile / rsteps + sum_casapool%dClabiledt = sum_casapool%Clabile / rsteps + sum_casapool%Nplant = sum_casapool%Nplant / rsteps + sum_casapool%Pplant = sum_casapool%Pplant / rsteps + sum_casapool%dCplantdt = sum_casapool%dCplantdt / rsteps + sum_casapool%dNplantdt = sum_casapool%dNplantdt / rsteps + sum_casapool%dPplantdt = sum_casapool%dPplantdt / rsteps + sum_casapool%ratioNCplant = sum_casapool%ratioNCplant / rsteps + sum_casapool%ratioNPplant = sum_casapool%ratioNPplant / rsteps + sum_casapool%Nsoilmin = sum_casapool%Nsoilmin / rsteps + sum_casapool%Psoillab = sum_casapool%Psoillab / rsteps + sum_casapool%Psoilsorb = sum_casapool%Psoilsorb / rsteps + sum_casapool%Psoilocc = sum_casapool%Psoilocc / rsteps + sum_casapool%dNsoilmindt = sum_casapool%dNsoilmindt / rsteps + sum_casapool%dPsoillabdt = sum_casapool%dPsoillabdt / rsteps + sum_casapool%dPsoilsorbdt = sum_casapool%dPsoilsorbdt / rsteps + sum_casapool%dPsoiloccdt = sum_casapool%dPsoiloccdt / rsteps + sum_casapool%Clitter = sum_casapool%Clitter / rsteps + sum_casapool%Nlitter = sum_casapool%Nlitter / rsteps + sum_casapool%Plitter = sum_casapool%Plitter / rsteps + sum_casapool%dClitterdt = sum_casapool%dClitterdt / rsteps + sum_casapool%dNlitterdt = sum_casapool%dNlitterdt / rsteps + sum_casapool%dPlitterdt = sum_casapool%dPlitterdt / rsteps + sum_casapool%ratioNClitter = sum_casapool%ratioNClitter / rsteps + sum_casapool%ratioNPlitter = sum_casapool%ratioNPlitter / rsteps + sum_casapool%Csoil = sum_casapool%Csoil / rsteps + sum_casapool%Nsoil = sum_casapool%Nsoil / rsteps + sum_casapool%Psoil = sum_casapool%Psoil / rsteps + sum_casapool%dCsoildt = sum_casapool%dCsoildt / rsteps + sum_casapool%dNsoildt = sum_casapool%dNsoildt / rsteps + sum_casapool%dPsoildt = sum_casapool%dPsoildt / rsteps + sum_casapool%ratioNCsoil = sum_casapool%ratioNCsoil / rsteps + sum_casapool%ratioNPsoil = sum_casapool%ratioNPsoil / rsteps + sum_casapool%ratioNCsoilnew = sum_casapool%ratioNCsoilnew / rsteps + sum_casapool%ratioNCsoilmin = sum_casapool%ratioNCsoilmin / rsteps + sum_casapool%ratioNCsoilmax = sum_casapool%ratioNCsoilmax / rsteps + sum_casapool%ratioPcsoil = sum_casapool%ratioPcsoil / rsteps + sum_casapool%ratioPcplant = sum_casapool%ratioPcplant / rsteps + sum_casapool%ratioPclitter = sum_casapool%ratioPclitter / rsteps + +ENDIF + +RETURN +END SUBROUTINE update_sum_casa_pool + +END MODULE sum_casa_pool_type_mod From 084d9002f1268b63d15fe29bfb43dec76d08512c Mon Sep 17 00:00:00 2001 From: Whyborn Date: Thu, 28 May 2026 19:13:57 +1000 Subject: [PATCH 67/98] Update CASA types --- .../AM3/control/casa/types/casa_flux_type.F90 | 10 ++++++++++ .../AM3/control/casa/types/casa_inout.F90 | 1 - .../AM3/control/casa/types/casa_pool_type.F90 | 20 +++++++++++++++++++ .../AM3/control/casa/types/casa_variable.F90 | 12 ++++++----- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 index 8f7777962..de575140f 100644 --- a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 +++ b/src/coupled/AM3/control/casa/types/casa_flux_type.F90 @@ -13,6 +13,7 @@ MODULE casa_flux_type_mod REAL(r_2), ALLOCATABLE :: Cgpp (:) REAL(r_2), ALLOCATABLE :: Cnpp (:) + REAL(r_2), ALLOCATABLE :: Cnbp (:) REAL(r_2), ALLOCATABLE :: Crp (:) REAL(r_2), ALLOCATABLE :: Crgplant (:) REAL(r_2), ALLOCATABLE :: Nminfix (:) @@ -22,6 +23,7 @@ MODULE casa_flux_type_mod REAL(r_2), ALLOCATABLE :: fracClabile (:) REAL(r_2), ALLOCATABLE :: stemnpp (:) REAL(r_2), ALLOCATABLE :: frac_sapwood (:) + REAL(r_2), ALLOCATABLE :: Cplant_turnover_tot (:) REAL(r_2), ALLOCATABLE :: sapwood_area (:) REAL(r_2), ALLOCATABLE :: Crsoil (:) REAL(r_2), ALLOCATABLE :: Nmindep (:) @@ -89,6 +91,7 @@ MODULE casa_flux_type_mod REAL(r_2), POINTER, PUBLIC :: Cgpp (:) REAL(r_2), POINTER, PUBLIC :: Cnpp (:) + REAL(r_2), POINTER, PUBLIC :: Cnbp (:) REAL(r_2), POINTER, PUBLIC :: Crp (:) REAL(r_2), POINTER, PUBLIC :: Crgplant (:) REAL(r_2), POINTER, PUBLIC :: Nminfix (:) @@ -98,6 +101,7 @@ MODULE casa_flux_type_mod REAL(r_2), POINTER, PUBLIC :: fracClabile (:) REAL(r_2), POINTER, PUBLIC :: stemnpp (:) REAL(r_2), POINTER, PUBLIC :: frac_sapwood (:) + REAL(r_2), POINTER, PUBLIC :: Cplant_turnover_tot (:) REAL(r_2), POINTER, PUBLIC :: sapwood_area (:) REAL(r_2), POINTER, PUBLIC :: Crsoil (:) REAL(r_2), POINTER, PUBLIC :: Nmindep (:) @@ -174,6 +178,7 @@ SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) ALLOCATE ( casaflux_data % Cgpp ( arraysize ) ) ALLOCATE ( casaflux_data % Cnpp ( arraysize ) ) +ALLOCATE ( casaflux_data % Cnbp ( arraysize ) ) ALLOCATE ( casaflux_data % Crp ( arraysize ) ) ALLOCATE ( casaflux_data % Crgplant ( arraysize ) ) ALLOCATE ( casaflux_data % Nminfix ( arraysize ) ) @@ -183,6 +188,7 @@ SUBROUTINE alloc_casa_flux_data_type( casaflux_data, arraysize ) ALLOCATE ( casaflux_data % fracClabile ( arraysize ) ) ALLOCATE ( casaflux_data % stemnpp ( arraysize ) ) ALLOCATE ( casaflux_data % frac_sapwood ( arraysize ) ) +ALLOCATE ( casaflux_data % Cplant_turnover_tot ( arraysize ) ) ALLOCATE ( casaflux_data % sapwood_area ( arraysize ) ) ALLOCATE ( casaflux_data % Crsoil ( arraysize ) ) ALLOCATE ( casaflux_data % Nmindep ( arraysize ) ) @@ -256,6 +262,7 @@ SUBROUTINE zero_casa_flux_data_type( casaflux_data ) casaflux_data % Cgpp (:) = 0.0 casaflux_data % Cnpp (:) = 0.0 +casaflux_data % Cnbp (:) = 0.0 casaflux_data % Crp (:) = 0.0 casaflux_data % Crgplant (:) = 0.0 casaflux_data % Nminfix (:) = 0.0 @@ -265,6 +272,7 @@ SUBROUTINE zero_casa_flux_data_type( casaflux_data ) casaflux_data % fracClabile (:) = 0.0 casaflux_data % stemnpp (:) = 0.0 casaflux_data % frac_sapwood (:) = 0.0 +casaflux_data % Cplant_turnover_tot (:) = 0.0 casaflux_data % sapwood_area (:) = 0.0 casaflux_data % Crsoil (:) = 0.0 casaflux_data % Nmindep (:) = 0.0 @@ -338,6 +346,7 @@ SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) casaflux % Cgpp => casaflux_data % Cgpp casaflux % Cnpp => casaflux_data % Cnpp +casaflux % Cnpp => casaflux_data % Cnbp casaflux % Crp => casaflux_data % Crp casaflux % Crgplant => casaflux_data % Crgplant casaflux % Nminfix => casaflux_data % Nminfix @@ -347,6 +356,7 @@ SUBROUTINE assoc_casa_flux_type( casaflux, casaflux_data ) casaflux % fracClabile => casaflux_data % fracClabile casaflux % stemnpp => casaflux_data % stemnpp casaflux % frac_sapwood => casaflux_data % frac_sapwood +casaflux % Cplant_turnover_tot => casaflux_data % Cplant_turnover_tot casaflux % sapwood_area => casaflux_data % sapwood_area casaflux % Crsoil => casaflux_data % Crsoil casaflux % Nmindep => casaflux_data % Nmindep diff --git a/src/coupled/AM3/control/casa/types/casa_inout.F90 b/src/coupled/AM3/control/casa/types/casa_inout.F90 index 411904a0f..705feb6f0 100644 --- a/src/coupled/AM3/control/casa/types/casa_inout.F90 +++ b/src/coupled/AM3/control/casa/types/casa_inout.F90 @@ -1,4 +1,3 @@ -#define UM_CBL YES !============================================================================== ! This source code is part of the ! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. diff --git a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 index b37a2eb20..f5ff46221 100644 --- a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 +++ b/src/coupled/AM3/control/casa/types/casa_pool_type.F90 @@ -12,10 +12,14 @@ MODULE casa_pool_type_mod TYPE casa_pool_data_type + REAL(r_2), ALLOCATABLE :: dCdt (:) REAL(r_2), ALLOCATABLE :: Clabile (:) REAL(r_2), ALLOCATABLE :: dClabiledt (:) REAL(r_2), ALLOCATABLE :: Ctot (:) REAL(r_2), ALLOCATABLE :: Ctot_0 (:) + REAL(r_2), ALLOCATABLE :: Cplanttot (:) + REAL(r_2), ALLOCATABLE :: Clittertot (:) + REAL(r_2), ALLOCATABLE :: Csoiltot (:) REAL(r_2), ALLOCATABLE :: Nsoilmin (:) REAL(r_2), ALLOCATABLE :: Psoillab (:) REAL(r_2), ALLOCATABLE :: Psoilsorb (:) @@ -63,10 +67,14 @@ MODULE casa_pool_type_mod TYPE casa_pool_type + REAL(r_2), POINTER, PUBLIC :: dCdt (:) REAL(r_2), POINTER, PUBLIC :: Clabile (:) REAL(r_2), POINTER, PUBLIC :: dClabiledt (:) REAL(r_2), POINTER, PUBLIC :: Ctot (:) REAL(r_2), POINTER, PUBLIC :: Ctot_0 (:) + REAL(r_2), POINTER, PUBLIC :: Cplanttot (:) + REAL(r_2), POINTER, PUBLIC :: Clittertot (:) + REAL(r_2), POINTER, PUBLIC :: Csoiltot (:) REAL(r_2), POINTER, PUBLIC :: Nsoilmin (:) REAL(r_2), POINTER, PUBLIC :: Psoillab (:) REAL(r_2), POINTER, PUBLIC :: Psoilsorb (:) @@ -123,10 +131,14 @@ SUBROUTINE alloc_casa_pool_data_type( casapool_data, arraysize ) TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data INTEGER, INTENT(IN) :: arraysize +ALLOCATE ( casapool_data % dCdt ( arraysize ) ) ALLOCATE ( casapool_data % Clabile ( arraysize ) ) ALLOCATE ( casapool_data % dClabiledt ( arraysize ) ) ALLOCATE ( casapool_data % Ctot ( arraysize ) ) ALLOCATE ( casapool_data % Ctot_0 ( arraysize ) ) +ALLOCATE ( casapool_data % Cplanttot ( arraysize ) ) +ALLOCATE ( casapool_data % Clittertot ( arraysize ) ) +ALLOCATE ( casapool_data % Csoiltot ( arraysize ) ) ALLOCATE ( casapool_data % Nsoilmin ( arraysize ) ) ALLOCATE ( casapool_data % Psoillab ( arraysize ) ) ALLOCATE ( casapool_data % Psoilsorb ( arraysize ) ) @@ -178,10 +190,14 @@ SUBROUTINE zero_casa_pool_data_type( casapool_data ) TYPE (casa_pool_data_type), INTENT(INOUT) :: casapool_data +casapool_data % dCdt = 0.0 casapool_data % Clabile = 0.0 casapool_data % dClabiledt = 0.0 casapool_data % Ctot = 0.0 casapool_data % Ctot_0 = 0.0 +casapool_data % Cplanttot = 0.0 +casapool_data % Clittertot = 0.0 +casapool_data % Csoiltot = 0.0 casapool_data % Nsoilmin = 0.0 casapool_data % Psoillab = 0.0 casapool_data % Psoilsorb = 0.0 @@ -235,10 +251,14 @@ SUBROUTINE assoc_casa_pool_type( casapool, casapool_data ) TYPE (casa_pool_type), INTENT(INOUT) :: casapool TYPE (casa_pool_data_type), INTENT(INOUT), TARGET :: casapool_data +casapool % dCdt => casapool_data % dCdt casapool % Clabile => casapool_data % Clabile casapool % dClabiledt => casapool_data % dClabiledt casapool % Ctot => casapool_data % Ctot casapool % Ctot_0 => casapool_data % Ctot_0 +casapool % Cplanttot => casapool_data % Cplanttot +casapool % Clittertot => casapool_data % Clittertot +casapool % Csoiltot => casapool_data % Csoiltot casapool % Nsoilmin => casapool_data % Nsoilmin casapool % Psoillab => casapool_data % Psoillab casapool % Psoilsorb => casapool_data % Psoilsorb diff --git a/src/coupled/AM3/control/casa/types/casa_variable.F90 b/src/coupled/AM3/control/casa/types/casa_variable.F90 index f6aad2c97..4f25d1d33 100644 --- a/src/coupled/AM3/control/casa/types/casa_variable.F90 +++ b/src/coupled/AM3/control/casa/types/casa_variable.F90 @@ -5,15 +5,17 @@ MODULE casavariable USE casa_biome_type_mod, ONLY: casa_biome_data_type, & casa_biome => casa_biome_type USE casa_pool_type_mod, ONLY: casa_pool_data_type, & - casa_pool => casa_pool_type + casa_pool => casa_pool_type USE casa_flux_type_mod, ONLY: casa_flux_data_type, & - casa_flux => casa_flux_type + casa_flux => casa_flux_type USE casa_met_type_mod, ONLY: casa_met_data_type, & - casa_met => casa_met_type + casa_met => casa_met_type USE casa_balance_type_mod, ONLY: casa_bal_data_type, & - casa_bal => casa_bal_type + casa_balance => casa_bal_type USE phenology_type_mod, ONLY: phenology_data_type, & phenology_type +USE casa_files_type_mod, ONLY: casa_files_type, casafile + IMPLICIT NONE PUBLIC :: zero_sum_casa @@ -73,7 +75,7 @@ SUBROUTINE alloc_casavariable( casabiome, casabiome_data, & TYPE (casa_pool_data_type), INTENT(INOUT) :: sum_casapool_data TYPE (casa_flux), INTENT(INOUT) :: sum_casaflux TYPE (casa_flux_data_type), INTENT(INOUT) :: sum_casaflux_data -TYPE (casa_bal), INTENT(INOUT) :: casabal +TYPE (casa_balance), INTENT(INOUT) :: casabal TYPE (casa_bal_data_type), INTENT(INOUT) :: casabal_data TYPE (casa_met), INTENT(INOUT) :: casamet TYPE (casa_met_data_type), INTENT(INOUT) :: casamet_data From f845f2e5fd775c95c8f1a21b3b816d2d74f4f4c7 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 15:33:03 +1000 Subject: [PATCH 68/98] Use new cable_surface_types_mod.F90 --- .../cable/shared/cable_surface_types_mod.F90 | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 48fb78dca..051c74018 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -25,12 +25,17 @@ MODULE cable_surface_types_mod CONTAINS - SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& - nnvg, ntype, urban, lake, soil, ice) - INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake,& + SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& + npft, nnvg, ntype, urban, lake, soil, ice) + ! JULES permits surface IDs to be assigned in the namelist, and needs to + ! link these IDs to I/O machinery (via the surface_type_ids) array and to + ! the science via the integer parameters. The parameters specify how many + ! surfaces are PFTs (they always occupy the first N slots), how many + ! non-PFT surfaces there are to round out the total count, which IDs are + ! urban, lake, soil or ice as they get special treatment. + INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& soil, ice - INTEGER, INTENT(IN) :: ncpft surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -53,13 +58,13 @@ SUBROUTINE set_JULES_surface_types(surface_type_ids, nnpft, ncpft, npft,& npft = 13 nnvg = 4 urban = urban_cable - lake = lakes_cable + lake = lake_cable soil = barren_cable ice = ice_cable ntype = npft - nnvg nnpft = npft - ncpft - END SUBROUTINE set_JULES_surface_types + END SUBROUTINE link_JULES_surface_ids_to_CABLE END MODULE cable_surface_types_mod From d8803a21af3475401677c5b59b93b4dc12cb7033 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 16:14:00 +1000 Subject: [PATCH 69/98] Fix dummy argument intents --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 051c74018..7fba42ec5 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -33,7 +33,8 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! surfaces are PFTs (they always occupy the first N slots), how many ! non-PFT surfaces there are to round out the total count, which IDs are ! urban, lake, soil or ice as they get special treatment. - INTEGER, INTENT(INOUT) :: surface_type_ids + INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids + INTEGER, INTENT(IN ) :: ncpft INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& soil, ice @@ -62,7 +63,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& soil = barren_cable ice = ice_cable - ntype = npft - nnvg + ntype = npft + nnvg nnpft = npft - ncpft END SUBROUTINE link_JULES_surface_ids_to_CABLE From cd5f58f0f18f4aa2cbcba857eb0c3f2f6abd93c2 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 29 May 2026 16:40:32 +1000 Subject: [PATCH 70/98] Accidental doubly defined argument --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 7fba42ec5..1769e7f75 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -35,8 +35,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, ncpft, npft, nnvp, ntype, urban, lake,& - soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake, soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 From 0672feba35c89e339a12b31a545a339867cf7f4e Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 09:50:55 +1000 Subject: [PATCH 71/98] Fix typos --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1769e7f75..1340ae20a 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -35,7 +35,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, npft, nnvp, ntype, urban, lake, soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake, soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -58,7 +58,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& npft = 13 nnvg = 4 urban = urban_cable - lake = lake_cable + lake = lakes_cable soil = barren_cable ice = ice_cable From 95c8a00076a33816179aeac3224e77ec9f6966cc Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 11:48:27 +1000 Subject: [PATCH 72/98] Remove IFDEF statement --- src/offline/cable_iovars.F90 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/offline/cable_iovars.F90 b/src/offline/cable_iovars.F90 index be27cb644..7edcaead0 100644 --- a/src/offline/cable_iovars.F90 +++ b/src/offline/cable_iovars.F90 @@ -568,11 +568,7 @@ FUNCTION to_land_index_global(land_index_local) RESULT(land_index_global) !! Translate local land index on current MPI rank to global land index INTEGER, INTENT(IN) :: land_index_local INTEGER :: land_index_global -#ifdef UM_CBL - land_index_global = land_index_local -#else land_index_global = land_decomp_start + land_index_local - 1 -#endif END FUNCTION to_land_index_global >>>>>>> feb632be (Add cable_iovars.F90 to the build with slight adjustment) From b9ba147d8fc9f0cdf1352621e0e28ada7e09a754 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 13:44:21 +1000 Subject: [PATCH 73/98] Remove duplicate files --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c644658f6..1935c497d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,12 +62,9 @@ if(CABLE_LIBRARY) src/science/casa-cnp/bgcdriver.F90 src/science/casa-cnp/biogeochem_casa.F90 src/science/casa-cnp/casa_cnp.F90 - src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_feedback.F90 src/science/casa-cnp/casa_inout.F90 src/science/casa-cnp/casa_param.F90 - src/science/casa-cnp/casa_phenology.F90 - src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_rplant.F90 src/science/casa-cnp/casa_sumcflux.F90 src/science/misc/cable_air.F90 From 3e2f3cf1c7c140bc213c21cedfeb8db3d0be4b51 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 2 Jun 2026 13:57:28 +1000 Subject: [PATCH 74/98] Set ncpft --- .../AM3/control/cable/shared/cable_surface_types_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 index 1340ae20a..a5f3ca73e 100644 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 @@ -34,8 +34,8 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& ! non-PFT surfaces there are to round out the total count, which IDs are ! urban, lake, soil or ice as they get special treatment. INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(IN ) :: ncpft - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ntype, urban, lake, soil, ice + INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ncpft, ntype, urban, lake,& + soil, ice surface_type_ids(evergreen_needleleaf) = 1 surface_type_ids(evergreen_broadleaf ) = 2 @@ -57,6 +57,7 @@ SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& npft = 13 nnvg = 4 + ncpft = 0 urban = urban_cable lake = lakes_cable soil = barren_cable From 4f0d020b08f0a568fbe1e8577286266720fd3372 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 12 Jun 2026 16:51:23 +1000 Subject: [PATCH 75/98] Remove coupled version of cable_surface_types --- CMakeLists.txt | 2 +- .../cable/shared/cable_surface_types_mod.F90 | 71 ------------------- 2 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 1935c497d..e30a9a743 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,7 +164,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 + src/offline/cable_surface_types_mod.F90 src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") diff --git a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 deleted file mode 100644 index a5f3ca73e..000000000 --- a/src/coupled/AM3/control/cable/shared/cable_surface_types_mod.F90 +++ /dev/null @@ -1,71 +0,0 @@ -MODULE cable_surface_types_mod - - IMPLICIT NONE - - PUBLIC - - ! cable_surface_type (nml) Index - INTEGER, PARAMETER :: evergreen_needleleaf = 1 - INTEGER, PARAMETER :: evergreen_broadleaf = 2 - INTEGER, PARAMETER :: deciduous_needleleaf = 3 - INTEGER, PARAMETER :: deciduous_broadleaf = 4 - INTEGER, PARAMETER :: shrub_cable = 5 - INTEGER, PARAMETER :: c3_grassland = 6 - INTEGER, PARAMETER :: c4_grassland = 7 - INTEGER, PARAMETER :: tundra = 8 - INTEGER, PARAMETER :: c3_cropland = 9 - INTEGER, PARAMETER :: c4_cropland = 10 - INTEGER, PARAMETER :: wetland = 11 - INTEGER, PARAMETER :: aust_mesic = 12 - INTEGER, PARAMETER :: aust_xeric = 13 - INTEGER, PARAMETER :: barren_cable = 14 - INTEGER, PARAMETER :: urban_cable = 15 - INTEGER, PARAMETER :: lakes_cable = 16 - INTEGER, PARAMETER :: ice_cable = 17 - -CONTAINS - - SUBROUTINE link_JULES_surface_ids_to_CABLE(surface_type_ids, nnpft, ncpft,& - npft, nnvg, ntype, urban, lake, soil, ice) - ! JULES permits surface IDs to be assigned in the namelist, and needs to - ! link these IDs to I/O machinery (via the surface_type_ids) array and to - ! the science via the integer parameters. The parameters specify how many - ! surfaces are PFTs (they always occupy the first N slots), how many - ! non-PFT surfaces there are to round out the total count, which IDs are - ! urban, lake, soil or ice as they get special treatment. - INTEGER, INTENT(INOUT), DIMENSION(:) :: surface_type_ids - INTEGER, INTENT(OUT) :: nnpft, npft, nnvg, ncpft, ntype, urban, lake,& - soil, ice - - surface_type_ids(evergreen_needleleaf) = 1 - surface_type_ids(evergreen_broadleaf ) = 2 - surface_type_ids(deciduous_needleleaf) = 3 - surface_type_ids(deciduous_broadleaf ) = 4 - surface_type_ids(shrub_cable ) = 5 - surface_type_ids(c3_grassland ) = 6 - surface_type_ids(c4_grassland ) = 7 - surface_type_ids(tundra ) = 8 - surface_type_ids(c3_cropland ) = 9 - surface_type_ids(c4_cropland ) = 10 - surface_type_ids(wetland ) = 11 - surface_type_ids(aust_mesic ) = 12 - surface_type_ids(aust_xeric ) = 13 - surface_type_ids(barren_cable ) = 14 - surface_type_ids(urban_cable ) = 15 - surface_type_ids(lakes_cable ) = 16 - surface_type_ids(ice_cable ) = 17 - - npft = 13 - nnvg = 4 - ncpft = 0 - urban = urban_cable - lake = lakes_cable - soil = barren_cable - ice = ice_cable - - ntype = npft + nnvg - nnpft = npft - ncpft - - END SUBROUTINE link_JULES_surface_ids_to_CABLE - -END MODULE cable_surface_types_mod From 174ab4301c9a26cd9104bcec1741f25ba2817478 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Sat, 13 Jun 2026 07:35:47 +1000 Subject: [PATCH 76/98] Fix name error --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e30a9a743..3305f91a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,7 +164,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/offline/cable_surface_types_mod.F90 + src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") From 79fdbd3e0fa24fb50b2669e436b981bac88278fe Mon Sep 17 00:00:00 2001 From: Whyborn Date: Tue, 16 Jun 2026 12:55:58 +1000 Subject: [PATCH 77/98] Update cable_user and CMakeLists.txt --- CMakeLists.txt | 5 +++-- src/util/cable_runtime_opts_mod.F90 | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3305f91a7..84e69710c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/science/landuse/landuse3.F90 + src/science/landuse/landuse3.F90 src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 @@ -164,8 +164,9 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/offline/cable_surface_types.F90 + src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 + src/coupled/esm/casa_landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) diff --git a/src/util/cable_runtime_opts_mod.F90 b/src/util/cable_runtime_opts_mod.F90 index acd3bb636..69def1eaf 100644 --- a/src/util/cable_runtime_opts_mod.F90 +++ b/src/util/cable_runtime_opts_mod.F90 @@ -89,6 +89,8 @@ MODULE cable_runtime_opts_mod casa_dump_read = .FALSE., & ! casa_dump_write = .FALSE., & ! soilsnow_init_spec = .FALSE., & ! + cable_runtime_coupled = .FALSE., & ! Whether CABLE is operating in + ! coupled mode. LogWorker = .TRUE. , & ! Write Output of each worker ! L.Stevens - Test Switches l_new_roughness_soil = .FALSE., & ! From 595bce005c77da6a2d2ab84bff4d26feb64c4b37 Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 17 Jun 2026 13:25:53 +1000 Subject: [PATCH 78/98] Include ESM1.5 version of casa_landuse --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84e69710c..ddb40870d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,7 +166,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_readbiome.F90 src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 - src/coupled/esm/casa_landuse.F90 + src/science/landuse/casa_ESM15landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 3ef0fedb03b4375bf98497af8ad7453123dacd97 Mon Sep 17 00:00:00 2001 From: Whyborn Date: Wed, 17 Jun 2026 13:48:29 +1000 Subject: [PATCH 79/98] Add missing file --- src/science/landuse/casa_ESM15landuse.F90 | 344 ++++++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 src/science/landuse/casa_ESM15landuse.F90 diff --git a/src/science/landuse/casa_ESM15landuse.F90 b/src/science/landuse/casa_ESM15landuse.F90 new file mode 100644 index 000000000..742819d0c --- /dev/null +++ b/src/science/landuse/casa_ESM15landuse.F90 @@ -0,0 +1,344 @@ +# define ESM15 YES +#ifdef ESM15 +module landuse_mod + +contains + +SUBROUTINE newlitter( casabiome,frac_x,ifpre_x,frac_y,ifpre_y, & + cplant_x,nplant_x,pplant_x,cplant_y,nplant_y,pplant_y, & + clitter_x,nlitter_x,plitter_x,clitter_y,nlitter_y,plitter_y ) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Transfer the deforest C to litter, and re-allocate litter pools. +! Q.Zhang @ 29/05/2011 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + + implicit none + + TYPE (casa_biome), INTENT(IN) :: casabiome + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,mplant),INTENT(in) :: cplant_x,nplant_x,pplant_x + real(r_2),DIMENSION(mvtype,mlitter),INTENT(in) :: clitter_x,nlitter_x,plitter_x + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) :: cplant_y,nplant_y,pplant_y + real(r_2),DIMENSION(mvtype,mlitter),INTENT(inout) :: clitter_y,nlitter_y,plitter_y + + ! local variable + real(r_2),DIMENSION(mvtype,mlitter,mplant) :: fromPtoL + real(r_2),DIMENSION(mvtype,mplant) :: dcplant,dnplant,dpplant,ratioLignintoN + real(r_2),DIMENSION(mvtype,mlitter) :: dclitter,dnlitter,dplitter,clitter_g,nlitter_g,plitter_g + real(r_2),DIMENSION(mlitter) :: dcY, dnY, dpY + real,DIMENSION(mvtype) :: dfrac + real :: sum_y + integer nL, nP, nv + + dcplant = 0. + dnplant = 0. + dpplant = 0. + ratioLignintoN = 0. + fromPtoL = 0. + dclitter = 0. + dnlitter = 0. + dplitter = 0. + dcY = 0. + dnY = 0. + dpY = 0. + sum_y=0. + dfrac = frac_y - frac_x + +! I. transfer removed plant to litter + DO nP =1,mplant + dcplant(:,nP) = cplant_x(:,nP) * frac_x(:) - cplant_y(:,nP) * frac_y(:) + IF (icycle > 1) dnplant(:,nP) = nplant_x(:,nP) * frac_x(:) - nplant_y(:,nP) * frac_y(:) + IF (icycle > 2) dpplant(:,nP) = pplant_x(:,nP) * frac_x(:) - pplant_y(:,nP) * frac_y(:) + END DO +! NB: logged wood should not be transfered to litter + dcplant(1:mlogmax,wood) = 0. + IF (icycle > 1) dnplant(1:mlogmax,wood) = 0. + IF (icycle > 2) dpplant(1:mlogmax,wood) = 0. + + WHERE(sum(dcplant,2) > 0.) + ! In land use, all plant nutient is allocated to litter pools without re-asorbsion.Q.Zhang 11/08/2011 + ratioLignintoN(:,leaf) = cplant_x(:,leaf)/max(1.0e-10,nplant_x(:,leaf)) & + * casabiome%fracLigninplant(:,leaf) + ratioLignintoN(:,froot)= cplant_x(:,froot)/max(1.0e-10,nplant_x(:,froot)) & + * casabiome%fracLigninplant(:,froot) + + fromPtoL(:,metb,leaf) = max(0.001, 0.85 - 0.018 *ratioLignintoN(:,leaf)) + fromPtoL(:,metb,froot) = max(0.001, 0.85 - 0.018 *ratioLignintoN(:,froot)) + fromPtoL(:,str,leaf) = 1.0 - fromPtoL(:,metb,leaf) + fromPtoL(:,str,froot) = 1.0 - fromPtoL(:,metb,froot) + fromPtoL(:,cwd,wood) = 1.0 + ENDWHERE + + DO nv=1, mvtype + ! transfer removed C,N,P pools from plant to litter + IF(ifpre_x(nv) .and. frac_x(nv)>frac_y(nv))THEN + + DO nL=1,mlitter + DO nP=1,mplant + dclitter(nv,nL) = dclitter(nv,nL)+ fromPtoL(nv,nL,nP) * dcplant(nv,nP) + ENDDO + ENDDO + + IF(icycle > 1) THEN + dnlitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot) * dcplant(nv,froot)) * ratioNCstrfix + dnlitter(nv,metb) = dnplant(nv,leaf) + dnplant(nv,froot) - dnlitter(nv,str) + dnlitter(nv,CWD) = dnplant(nv,wood) + ENDIF !end "icycle >1" + + IF(icycle > 2) THEN + dplitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot)* dcplant(nv,froot)) * ratioPCstrfix + dplitter(nv,metb) = dpplant(nv,leaf) + dpplant(nv,froot) -dplitter(nv,str) + dplitter(nv,CWD) = dpplant(nv,wood) + ENDIF !of "icycle >2" + ENDIF + END DO + +! II. re-allocate litter pools according to patch weights. +! average pool variables from gridcell to new patches. + DO nv=1,mvtype + IF (ifpre_x(nv) .and. dfrac(nv)<0.0) THEN + dcY(:) = dcY(:) + dclitter(nv,:) + clitter_x(nv,:)*abs(dfrac(nv)) + IF (icycle > 1) dnY(:) = dnY(:) + dnlitter(nv,:) + nlitter_x(nv,:)*abs(dfrac(nv)) + IF (icycle > 2) dpY(:) = dpY(:) + dplitter(nv,:) + plitter_x(nv,:)*abs(dfrac(nv)) + ENDIF + END DO + + DO nv=1,mvtype + IF ((frac_x(nv)-frac_y(nv))<0.) THEN + sum_y = sum_y + abs(dfrac(nv)) + ENDIF + END DO + + DO nv=1,mvtype + IF (ifpre_y(nv)) THEN ! pft exist in the 2nd year + IF ((frac_x(nv)-frac_y(nv))>0.) THEN ! patch weight decrease + clitter_y(nv,:) = clitter_x(nv,:) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_x(nv,:) + IF (icycle > 2) plitter_y(nv,:) = plitter_x(nv,:) + ELSE IF ((frac_x(nv)-frac_y(nv))<0.) THEN ! patch increase + clitter_y(nv,:) = (clitter_x(nv,:)*frac_x(nv) + dcY(:)*dfrac(nv)/sum_y) / frac_y(nv) + IF (icycle > 1) nlitter_y(nv,:) = (nlitter_x(nv,:)*frac_x(nv) + dnY(:)*dfrac(nv)/sum_y) / frac_y(nv) + IF (icycle > 2) plitter_y(nv,:) = (plitter_x(nv,:)*frac_x(nv) + dpY(:)*dfrac(nv)/sum_y) / frac_y(nv) + ELSE ! no change + clitter_y(nv,:) = clitter_x(nv,:) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_x(nv,:) + IF (icycle > 2) plitter_y(nv,:) = plitter_x(nv,:) + ENDIF + ENDIF + END DO + +END SUBROUTINE newlitter + + +SUBROUTINE newlitter_thin( casabiome,frac_x,ifpre_x,frac_y,ifpre_y, & + cplant_x,nplant_x,pplant_x,cplant_y,nplant_y,pplant_y,& + clitter_x,nlitter_x,plitter_x,clitter_y,nlitter_y,plitter_y,& + thinRatio) +! Used for THINNING FOREST +! Call by casa_reinit +! Transfer the deforest C to litter, and re-allocate litter pools. +! Q.Zhang @ 29/05/2011 +! L.Stevens @ 8/06/2018 + USE cable_def_types_mod + USE casadimension + USE casaparm + USE casavariable + + implicit none + + TYPE (casa_biome), INTENT(IN) :: casabiome + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y,thinRatio + real(r_2),DIMENSION(mvtype,mplant),INTENT(in) ::cplant_x,nplant_x,pplant_x + real(r_2),DIMENSION(mvtype,mlitter),INTENT(in) ::clitter_x,nlitter_x,plitter_x + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) ::cplant_y,nplant_y,pplant_y + real(r_2),DIMENSION(mvtype,mlitter),INTENT(inout) ::clitter_y,nlitter_y,plitter_y + + ! local variable + real(r_2),DIMENSION(mvtype,mlitter,mplant) :: fromPtoL + real(r_2),DIMENSION(mvtype,mplant) ::dcplant,dnplant,dpplant,ratioLignintoN + real(r_2),DIMENSION(mvtype,mlitter) :: dclitter,dnlitter,dplitter,clitter_g,nlitter_g,plitter_g + integer nL, nP, nv + integer, parameter :: mforest = 4 + + dcplant = 0. + dnplant = 0. + dpplant = 0. + ratioLignintoN = 0. + fromPtoL = 0. + dclitter = 0. + dnlitter = 0. + dplitter = 0. + +! I. transfer removed plant to litter + DO nP =1,mplant + dcplant(:,nP) = cplant_x(:,nP) * frac_x(:) -cplant_y(:,nP) *frac_y(:) + IF (icycle > 1) dnplant(:,nP) = nplant_x(:,nP) * frac_x(:) -nplant_y(:,nP) * frac_y(:) + IF (icycle > 2) dpplant(:,nP) = pplant_x(:,nP) * frac_x(:) -pplant_y(:,nP) * frac_y(:) + END DO +! NB: logged wood should not be transfered to litter + dcplant(1:mlogmax,wood) = 0. + IF (icycle > 1) dnplant(1:mlogmax,wood) = 0. + IF (icycle > 2) dpplant(1:mlogmax,wood) = 0. + + WHERE(sum(dcplant,2) > 0.) + ! In land use, all plant nutient is allocated to litter pools without re-asorbsion.Q.Zhang 11/08/2011 + ratioLignintoN(:,leaf) =cplant_x(:,leaf)/max(1.0e-10,nplant_x(:,leaf)) & + * casabiome%fracLigninplant(:,leaf) + ratioLignintoN(:,froot)=cplant_x(:,froot)/max(1.0e-10,nplant_x(:,froot)) & + * casabiome%fracLigninplant(:,froot) + + fromPtoL(:,metb,leaf) = max(0.001, 0.85 - 0.018*ratioLignintoN(:,leaf)) + fromPtoL(:,metb,froot) = max(0.001, 0.85 - 0.018*ratioLignintoN(:,froot)) + fromPtoL(:,str,leaf) = 1.0 - fromPtoL(:,metb,leaf) + fromPtoL(:,str,froot) = 1.0 - fromPtoL(:,metb,froot) + fromPtoL(:,cwd,wood) = 1.0 + ENDWHERE + + DO nv=1, mforest + ! average litter pools on gridcell + clitter_g(nv,:) = clitter_x(nv,:) * frac_x(nv) + nlitter_g(nv,:) = nlitter_x(nv,:) * frac_x(nv) + plitter_g(nv,:) = plitter_x(nv,:) * frac_x(nv) + ! transfer removed C,N,P pools from plant to litter + IF(ifpre_x(nv) .and. thinRatio(nv)<1.0)THEN + + DO nL=1,mlitter + DO nP=1,mplant + dclitter(nv,nL) = fromPtoL(nv,nL,nP) *dcplant(nv,nP) + !clitter_g(nv,nL) = clitter_g(nv,nL) + fromPtoL(nv,nL,nP) *dcplant(nv,nP) + ENDDO + ENDDO + + IF(icycle > 1) THEN + dnlitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot) * dcplant(nv,froot))* ratioNCstrfix + dnlitter(nv,metb) = dnplant(nv,leaf) + dnplant(nv,froot) -dnlitter(nv,str) + dnlitter(nv,CWD) = dnplant(nv,wood) + ENDIF !end "icycle >1" + + IF(icycle > 2) THEN + dplitter(nv,str) = (fromPtoL(nv,str,leaf) * dcplant(nv,leaf) & + + fromPtoL(nv,str,froot)* dcplant(nv,froot))* ratioPCstrfix + dplitter(nv,metb) = dpplant(nv,leaf) + dpplant(nv,froot)-dplitter(nv,str) + dplitter(nv,CWD) = dpplant(nv,wood) + ENDIF !of "icycle >2" + ENDIF + END DO + + clitter_g = clitter_g + dclitter + IF (icycle > 1) nlitter_g = nlitter_g + dnlitter + IF (icycle > 2) plitter_g = plitter_g + dplitter + + DO nv=1,mforest + IF (ifpre_y(nv)) THEN ! pft exist in the 2nd year + clitter_y(nv,:) = clitter_g(nv,:)/frac_y(nv) + IF (icycle > 1) nlitter_y(nv,:) = nlitter_g(nv,:)/frac_y(nv) + IF (icycle > 2) plitter_y(nv,:) = plitter_g(nv,:)/frac_y(nv) + ENDIF + END DO + +END SUBROUTINE newlitter_thin + + +SUBROUTINE newplant(cplant_x,frac_x,ifpre_x, & + cplant_y,frac_y,ifpre_y,logc) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Re-allcate plant C,N,P pools to new patch array. +! Q.Zhang @ 29/05/2011 + USE cable_def_types_mod + USE casadimension + USE casaparm + + implicit none + + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,mplant),INTENT(inout) :: cplant_x,cplant_y + real(r_2),DIMENSION(mvtype),INTENT(inout) :: logc + ! local variable + integer p + + DO p = 1, mvtype + ! exist in both years + IF (ifpre_x(p) .and. ifpre_y(p)) THEN + IF (abs(frac_x(p)-0.0)<1.e-8 .or. abs(frac_y(p)-0.0)<1.e-8) THEN +print *, 'Lest Veg0', p,ifpre_x(p),ifpre_y(p),frac_x(p),frac_y(p) + STOP "vegetation fraction .eq. 0" + END IF + IF ((frac_x(p)-frac_y(p))>0.) THEN ! patch weight decrease + ! New pools + cplant_y(p,:) = cplant_x(p,:) + ! Save wood log + IF (p<=mlogmax) logc(p) = cplant_x(p,wood) * (frac_x(p) - frac_y(p)) + ELSE ! patch weight incease + cplant_y(p,:) = cplant_x(p,:)*frac_x(p)/frac_y(p) + END IF + ! plant clear in the second year + ELSEIF (ifpre_x(p) .and. .not.ifpre_y(p)) THEN + IF (p<=mlogmax) logc(p) = cplant_x(p,wood) * (frac_x(p) - frac_y(p)) + ! does not exist in both years + ELSE + + END IF + + END DO ! end pft loop + +END SUBROUTINE newplant + + +SUBROUTINE newsoil(nd,csoil_x,frac_x,ifpre_x,csoil_y,frac_y,ifpre_y) +! Used for LAND USE CHANGE SIMULATION +! Call by casa_reinit +! Re-allocate soil C,N and P pools +! Q.Zhang @ 29/05/2011 +! L.stevens @ 19/01/2018 + USE cable_def_types_mod + USE casadimension + USE casaparm + + implicit none + + integer,INTENT(in) :: nd ! dimension of soil pool + logical,DIMENSION(mvtype),INTENT(in) :: ifpre_x,ifpre_y + real,DIMENSION(mvtype),INTENT(in) :: frac_x,frac_y + real(r_2),DIMENSION(mvtype,nd),INTENT(inout) :: csoil_x,csoil_y +! local variable + real,DIMENSION(nd) :: tmpVar + real :: Rcount + real,DIMENSION(mvtype) :: dfrac + integer nv + + dfrac = frac_y - frac_x ! current minus previous + tmpVar = 0.0 + Rcount = 0.0 + + DO nv=1,mvtype + IF (dfrac(nv)<0.0) THEN + tmpVar = tmpVar + ABS(dfrac(nv))*csoil_x(nv,:) + Rcount = Rcount + ABS(dfrac(nv)) + ENDIF + END DO + if (Rcount > 0) tmpVar = tmpVar/Rcount + + DO nv=1,mvtype + IF (dfrac(nv) > 0.0) THEN ! pft exist in the 2nd year + csoil_y(nv,:) = (dfrac(nv)*tmpVar + & + csoil_x(nv,:) * frac_x(nv)) / frac_y(nv) + ELSE + csoil_y(nv,:) = csoil_x(nv,:) + ENDIF + END DO + +END SUBROUTINE newsoil + +End module landuse_mod +#endif From 2f7849381757b67ae8fadfe7833c307b0a85c3e8 Mon Sep 17 00:00:00 2001 From: Whyborn Date: Fri, 3 Jul 2026 12:55:08 +1000 Subject: [PATCH 80/98] Update science --- src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 | 12 ++++-------- src/science/soilsnow/cbl_soilsnow_main.F90 | 12 ++++++------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 b/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 index f4d7734d8..7d976d2a2 100644 --- a/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 +++ b/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 @@ -77,7 +77,6 @@ SUBROUTINE cbm_expl( mp, nrb, ktau,dels, air, bgc, canopy, met, & REAL :: veg_trad(mp) REAL :: soil_wt(mp) REAL :: soil_trad(mp) -REAL :: trad_corr(mp) CHARACTER(LEN=8), PARAMETER :: subr_name = "ExpCbmT_" @@ -172,10 +171,9 @@ SUBROUTINE cbm_expl( mp, nrb, ktau,dels, air, bgc, canopy, met, & veg_wt = 1.0 - rad%transd veg_trad = Cemleaf * canopy%tv**4 soil_wt = rad%transd -soil_trad = Cemsoil * ssnow%otss**4 -trad_corr = canopy%fns_cor/CSBOLTZ +soil_trad = Cemsoil * ssnow%tss**4 -rad%trad = ( veg_wt * veg_trad ) + ( soil_wt * soil_trad ) + trad_corr +rad%trad = ( veg_wt * veg_trad ) + ( soil_wt * soil_trad ) rad%trad = rad%trad**0.25 RETURN @@ -260,7 +258,6 @@ SUBROUTINE cbm_impl( cycleno, numcycles, mp, nrb, ktau, dels, & REAL :: veg_trad(mp) REAL :: soil_wt(mp) REAL :: soil_trad(mp) -REAL :: trad_corr(mp) CHARACTER(LEN=8), PARAMETER :: subr_name = "cbm_impl" @@ -374,10 +371,9 @@ SUBROUTINE cbm_impl( cycleno, numcycles, mp, nrb, ktau, dels, & veg_wt = 1.0 - rad%transd veg_trad = Cemleaf * canopy%tv**4 soil_wt = rad%transd -soil_trad = Cemsoil * ssnow%otss**4 -trad_corr = canopy%fns_cor/CSBOLTZ +soil_trad = Cemsoil * ssnow%tss**4 -rad%trad = ( veg_wt * veg_trad ) + ( soil_wt * soil_trad ) + trad_corr +rad%trad = ( veg_wt * veg_trad ) + ( soil_wt * soil_trad ) rad%trad = rad%trad**0.25 ! In physical model only (i.e. without CASA-CNP) diff --git a/src/science/soilsnow/cbl_soilsnow_main.F90 b/src/science/soilsnow/cbl_soilsnow_main.F90 index 5c11ae0fb..163d0d959 100644 --- a/src/science/soilsnow/cbl_soilsnow_main.F90 +++ b/src/science/soilsnow/cbl_soilsnow_main.F90 @@ -89,12 +89,12 @@ SUBROUTINE soil_snow(dels, soil, ssnow, canopy, met, bal, veg) ! soilsnow_init_spec, special initalizations in um_init NA for ESM1.5 - xx=soil%css * soil%rhosoil - IF (ktau <= 1) & - ssnow%gammzz(:,1) = MAX( (1.0 - soil%ssat) * soil%css * soil%rhosoil & - & + (ssnow%wb(:,1) - ssnow%wbice(:,1) ) * Ccswat * Cdensity_liq & - & + ssnow%wbice(:,1) * Ccsice * Cdensity_ice, xx ) * soil%zse(1) + & - & (1. - ssnow%isflag) * Ccgsnow * ssnow%snowd + !xx=soil%css * soil%rhosoil + !IF (ktau <= 1) & + ! ssnow%gammzz(:,1) = MAX( (1.0 - soil%ssat) * soil%css * soil%rhosoil & + ! & + (ssnow%wb(:,1) - ssnow%wbice(:,1) ) * Ccswat * Cdensity_liq & + ! & + ssnow%wbice(:,1) * Ccsice * Cdensity_ice, xx ) * soil%zse(1) + & + ! & (1. - ssnow%isflag) * Ccgsnow * ssnow%snowd From 7cd8286acb4b20429c052959d6f3b3922852c760 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Fri, 3 Jul 2026 17:26:13 +1000 Subject: [PATCH 81/98] Didn't fix the merge conflict properly --- src/science/soilsnow/cbl_soilsnow_main.F90 | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/science/soilsnow/cbl_soilsnow_main.F90 b/src/science/soilsnow/cbl_soilsnow_main.F90 index 2f33ca9ec..3b3963c4a 100644 --- a/src/science/soilsnow/cbl_soilsnow_main.F90 +++ b/src/science/soilsnow/cbl_soilsnow_main.F90 @@ -87,20 +87,6 @@ SUBROUTINE soil_snow(dels, soil, ssnow, canopy, met, bal, veg) ssnow%wbliq = ssnow%wb - ssnow%wbice -<<<<<<< make-AM3-library - ! soilsnow_init_spec, special initalizations in um_init NA for ESM1.5 - - !xx=soil%css * soil%rhosoil - !IF (ktau <= 1) & - ! ssnow%gammzz(:,1) = MAX( (1.0 - soil%ssat) * soil%css * soil%rhosoil & - ! & + (ssnow%wb(:,1) - ssnow%wbice(:,1) ) * Ccswat * Cdensity_liq & - ! & + ssnow%wbice(:,1) * Ccsice * Cdensity_ice, xx ) * soil%zse(1) + & - ! & (1. - ssnow%isflag) * Ccgsnow * ssnow%snowd - - - -======= ->>>>>>> main DO k = 1, ms ! for stempv ! Set liquid soil water fraction (fraction of saturation value): From ef8cdfd76a5db3f110532d8b29d8fc8bc5c5199c Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 9 Jul 2026 16:25:46 +1000 Subject: [PATCH 82/98] Address PR feedback --- CMakeLists.txt | 4 ++-- src/offline/cable_iovars.F90 | 2 +- src/science/landuse/casa_ESM15landuse.F90 | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f61d120a0..6a9b43170 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,7 +126,7 @@ if(CABLE_LIBRARY) src/science/soilsnow/cbl_surfbv.F90 src/science/soilsnow/cbl_thermal.F90 src/science/soilsnow/cbl_trimb.F90 - src/science/landuse/landuse3.F90 + src/science/landuse/landuse3.F90 src/science/landuse/landuse_constant.F90 src/params/cable_phys_constants_mod.F90 src/params/grid_constants_cbl.F90 @@ -190,7 +190,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_dimension.F90 src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 - src/offline/cable_surface_types.F90 + src/offline/cable_surface_types.F90 src/offline/cable_iovars.F90 src/science/landuse/casa_ESM15landuse.F90 ) diff --git a/src/offline/cable_iovars.F90 b/src/offline/cable_iovars.F90 index 42ee10be3..049ca9659 100644 --- a/src/offline/cable_iovars.F90 +++ b/src/offline/cable_iovars.F90 @@ -106,7 +106,7 @@ MODULE cable_IO_vars_module max_vegpatches, & ! The maximum # of patches in any grid cell nmetpatches ! size of patch dimension in met file, if exists - INTEGER :: land_decomp_start = 1 + INTEGER :: land_decomp_start !! Starting land point index of this MPI rank in global land array INTEGER :: land_decomp_end !! Ending land point index of this MPI rank in global land array diff --git a/src/science/landuse/casa_ESM15landuse.F90 b/src/science/landuse/casa_ESM15landuse.F90 index 742819d0c..31706c18d 100644 --- a/src/science/landuse/casa_ESM15landuse.F90 +++ b/src/science/landuse/casa_ESM15landuse.F90 @@ -1,5 +1,3 @@ -# define ESM15 YES -#ifdef ESM15 module landuse_mod contains @@ -341,4 +339,3 @@ SUBROUTINE newsoil(nd,csoil_x,frac_x,ifpre_x,csoil_y,frac_y,ifpre_y) END SUBROUTINE newsoil End module landuse_mod -#endif From 4d4c11729e83df7e0e7942330f3b5fca27ce9739 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Wed, 15 Jul 2026 11:34:13 +1000 Subject: [PATCH 83/98] Add files back to ESM1.6 library --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a9b43170..5bf06ba2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,12 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_soilsnow_type_mod.F90 src/coupled/shared/cable_soil_type_mod.F90 src/coupled/shared/cable_veg_type_mod.F90 + # These had to be removed from the generic library section, + # as AM3 provides a different definition for them + src/science/casa-cnp/casa_dimensions.F90 + src/science/casa-cnp/casa_phenology.F90 + src/science/casa-cnp/casa_readbiome.F90 + src/science/casa-cnp/casa_variable.F90 ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) From 9d5714ed770f327f5038d87bb05abfb17011aacb Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Mon, 27 Jul 2026 15:28:05 +1000 Subject: [PATCH 84/98] Modify CI for ACCESS3 --- .github/build-ci/compilers/spack.yaml | 1 + .github/build-ci/data/standard.json | 3 ++ .github/build-ci/manifests/gcc.spack.yaml.j2 | 5 +- .../build-ci/manifests/intel.spack.yaml.j2 | 8 +-- .../library-access3-gcc.spack.yaml.j2 | 17 +++++++ .../library-access3-intel.spack.yaml.j2 | 17 +++++++ .../library-esm1p6-gcc.spack.yaml.j2 | 17 +++++++ .../library-esm1p6-intel.spack.yaml.j2 | 17 +++++++ .../manifests/library-gcc.spack.yaml.j2 | 17 ------- .../manifests/library-intel.spack.yaml.j2 | 17 ------- .../manifests/um7-acces-esm1p6.spack.yaml.j2 | 38 ++++++++++++++ .github/workflows/ci.yml | 49 +++++++++++++------ 12 files changed, 152 insertions(+), 54 deletions(-) create mode 100644 .github/build-ci/manifests/library-access3-gcc.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/library-access3-intel.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/library-esm1p6-gcc.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/library-esm1p6-intel.spack.yaml.j2 delete mode 100644 .github/build-ci/manifests/library-gcc.spack.yaml.j2 delete mode 100644 .github/build-ci/manifests/library-intel.spack.yaml.j2 create mode 100644 .github/build-ci/manifests/um7-acces-esm1p6.spack.yaml.j2 diff --git a/.github/build-ci/compilers/spack.yaml b/.github/build-ci/compilers/spack.yaml index b0d28d596..156bceda7 100644 --- a/.github/build-ci/compilers/spack.yaml +++ b/.github/build-ci/compilers/spack.yaml @@ -2,6 +2,7 @@ spack: specs: - gcc@13.2.0 %gcc@8.5.0 - intel-oneapi-compilers-classic@2021.10.0 + - intel-oneapi-compilers@2025.2.0 view: false concretizer: unify: false diff --git a/.github/build-ci/data/standard.json b/.github/build-ci/data/standard.json index ade7d9e4b..8472c4222 100644 --- a/.github/build-ci/data/standard.json +++ b/.github/build-ci/data/standard.json @@ -1,3 +1,6 @@ { + "gcc_compiler_ver": "13.2.0", + "oneapi_compiler_classic_ver": "2021.10.0", + "oneapi_compiler_ver": "2025.2.0", "target": "x86_64" } diff --git a/.github/build-ci/manifests/gcc.spack.yaml.j2 b/.github/build-ci/manifests/gcc.spack.yaml.j2 index 61ba2e277..8582b3fc3 100644 --- a/.github/build-ci/manifests/gcc.spack.yaml.j2 +++ b/.github/build-ci/manifests/gcc.spack.yaml.j2 @@ -1,14 +1,17 @@ spack: specs: - cable@git.{{ ref }} + packages: gcc: require: - - '@13.2.0' + - '@{{ gcc_compiler_ver }}' + all: require: - '%access_gcc' # https://github.com/ACCESS-NRI/spack-config/blob/main/v1.1/toolchains.yaml - target={{ target }} + concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/intel.spack.yaml.j2 b/.github/build-ci/manifests/intel.spack.yaml.j2 index 35ea9f6b6..960178bf1 100644 --- a/.github/build-ci/manifests/intel.spack.yaml.j2 +++ b/.github/build-ci/manifests/intel.spack.yaml.j2 @@ -1,17 +1,17 @@ spack: specs: - cable@git.{{ ref }} + packages: - python: - require: - - '@3.11.14' intel-oneapi-compilers-classic: require: - - '@2021.10.0' + - '@{{ oneapi_compiler_classic_ver }}' + all: require: - '%access_intel' # https://github.com/ACCESS-NRI/spack-config/blob/main/v1.1/toolchains.yaml - target={{ target }} + concretizer: unify: false view: false diff --git a/.github/build-ci/manifests/library-access3-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-access3-gcc.spack.yaml.j2 new file mode 100644 index 000000000..c7664f332 --- /dev/null +++ b/.github/build-ci/manifests/library-access3-gcc.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + - cable@git.{{ ref }} ~mpi library=access3 + + packages: + gcc: + require: + - '@{{ gcc_compiler_ver }}' + + all: + require: + - '%access_gcc' + - 'target={{ target }}' + + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-access3-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-access3-intel.spack.yaml.j2 new file mode 100644 index 000000000..c64b020e1 --- /dev/null +++ b/.github/build-ci/manifests/library-access3-intel.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + - cable@git.{{ ref }} ~mpi library=access3 + + packages: + intel-oneapi-compilers-classic: + require: + - '@{{ oneapi_compiler_classic_ver }}' + + all: + require: + - '%access_intel' + - 'target={{ target }}' + + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-esm1p6-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-esm1p6-gcc.spack.yaml.j2 new file mode 100644 index 000000000..3b4de6056 --- /dev/null +++ b/.github/build-ci/manifests/library-esm1p6-gcc.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + - cable@git.{{ ref }} ~mpi library=access-esm1.6 + + packages: + gcc: + require: + - '@{{ gcc_compiler_ver }}' + + all: + require: + - '%access_gcc' + - 'target={{ target }}' + + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-esm1p6-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-esm1p6-intel.spack.yaml.j2 new file mode 100644 index 000000000..359fc2c71 --- /dev/null +++ b/.github/build-ci/manifests/library-esm1p6-intel.spack.yaml.j2 @@ -0,0 +1,17 @@ +spack: + specs: + - cable@git.{{ ref }} ~mpi library=access-esm1.6 + + packages: + intel-oneapi-compilers-classic: + require: + - '@{{ oneapi_compiler_classic_ver }}' + + all: + require: + - '%access_intel' + - 'target={{ target }}' + + concretizer: + unify: false + view: false diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 deleted file mode 100644 index a6cda21ee..000000000 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ /dev/null @@ -1,17 +0,0 @@ -spack: - specs: - # package is defined in the workflows inputs.spack-manifest-data-pairs - # gcc_compiler_ver is defined in the standard_definitions.json data file - - cable@git.{{ ref }} +mpi library=access3 - - cable@git.{{ ref }} ~mpi library=access3 - packages: - gcc: - require: - - '@13.2.0' - all: - require: - - '%access_gcc' - - target=x86_64 - concretizer: - unify: false - view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 deleted file mode 100644 index b9c351dca..000000000 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ /dev/null @@ -1,17 +0,0 @@ -spack: - specs: - # package is defined in the workflows inputs.spack-manifest-data-pairs - # intel_compiler_ver is defined in the standard_definitions.json data file - - cable@git.{{ ref }} +mpi library=access3 - - cable@git.{{ ref }} ~mpi library=access3 - packages: - intel-oneapi-compilers-classic: - require: - - '@2021.10.0' - all: - require: - - '%access_intel' - - target=x86_64 - concretizer: - unify: false - view: false diff --git a/.github/build-ci/manifests/um7-acces-esm1p6.spack.yaml.j2 b/.github/build-ci/manifests/um7-acces-esm1p6.spack.yaml.j2 new file mode 100644 index 000000000..e290f3f02 --- /dev/null +++ b/.github/build-ci/manifests/um7-acces-esm1p6.spack.yaml.j2 @@ -0,0 +1,38 @@ +# Building UM7 stand-alone using access-esm1.6 spack version +spack: + specs: + - 'um7' + packages: + dummygrib: + require: + - '@1.0' + oasis3-mct: + require: + - '@git.access-esm1.5-2025.03.001=access-esm1.5' + cable: + require: + - '@{{ ref }}' + - library=access-esm1.6 + openmpi: + require: + - '@5.0.8' + netcdf-c: + require: + - '@4.9.2' + netcdf-fortran: + require: + - '@4.5.2' + fcm: + require: + - '@2021.05.0' + - 'site=nci-gadi' + intel-oneapi-compilers: + require: + - '@{{ oneapi_compiler_ver }}' + all: + require: + - '%access_oneapi' + - 'target={{ target }}' + concretizer: + unify: false + view: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fab4bd51b..0cbebdb88 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,30 +1,49 @@ name: Build on: pull_request: + push: branches: - - main + - '[0-9]*.[0-9]*' # Default branch naming jobs: + pre-ci: + name: Pre-CI + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + + - name: Set up matrix + id: set-matrix + # Find all relevant files under .github/build-ci/manifests + # then output them as a JSON array (minus the last comma) + run: | + files=$(find .github/build-ci/manifests/ -iname '*.j2' -printf '"%p",') + echo "matrix=[${files%,}]" >> $GITHUB_OUTPUT + ci: name: CI + needs: pre-ci strategy: fail-fast: false + max-parallel: 5 matrix: - spack-manifest-path: - - .github/build-ci/manifests/gcc.spack.yaml.j2 - - .github/build-ci/manifests/intel.spack.yaml.j2 - - .github/build-ci/manifests/library-gcc.spack.yaml.j2 - - .github/build-ci/manifests/library-intel.spack.yaml.j2 + file: ${{ fromJson(needs.pre-ci.outputs.matrix) }} uses: access-nri/build-ci/.github/workflows/ci.yml@v3 with: - # For defaults for args not specified here (eg. spack/packages/config refs), see https://github.com/ACCESS-NRI/build-ci/blob/v3/.github/workflows/README.md - spack-manifest-path: ${{ matrix.spack-manifest-path }} + spack-manifest-path: ${{ matrix.file }} + allow-ssh-into-spack-install: false # If true, PR author must ssh into instance to complete job spack-manifest-data-path: .github/build-ci/data/standard.json - # We need to install the compilers manually here because the upstream image is too large to run on GitHub-hosted runners + spack-oci-buildcache-url: oci://ghcr.io/CABLE-LSM/build-ci-buildcache spack-compiler-manifest-path: .github/build-ci/compilers/spack.yaml - access-spack-packages-ref: 1d9acf45c39229ff4e90a9aa49922b1169305476 - allow-ssh-into-spack-install: false - spack-oci-buildcache-url: oci://ghcr.io/CABLE-LSM/build-ci-buildcache # https://github.com/orgs/CABLE-LSM/packages/container/package/build-ci-buildcache - # Since CABLE-LSM can't access ACCESS-NRI's self-hosted runners, we use a GitHub-hosted version + # builtin-spack-packages-ref: develop + # access-spack-packages-ref: api-v2 + # spack-config-ref: main + # spack-ref: releases/v1.1 + + # CABLE isn't part of the ACCESS-NRI org so can't access the runners run-self-hosted: false - permissions: - packages: write + + secrets: + # Needed to access private ACCESS-NRI repos + spack-install-command-pat: ${{ secrets.SPACK_INSTALL_COMMAND_PAT }} From f2acc72f0710b9e94fa96978f96950099bc8a378 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Mon, 27 Jul 2026 19:10:14 +1000 Subject: [PATCH 85/98] File name typo in things moved to ESM1.6 lib --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bf06ba2d..1d8c20f06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,7 +154,7 @@ if(CABLE_LIBRARY) src/coupled/shared/cable_veg_type_mod.F90 # These had to be removed from the generic library section, # as AM3 provides a different definition for them - src/science/casa-cnp/casa_dimensions.F90 + src/science/casa-cnp/casa_dimension.F90 src/science/casa-cnp/casa_phenology.F90 src/science/casa-cnp/casa_readbiome.F90 src/science/casa-cnp/casa_variable.F90 From 1003d02d637e4ed1f784398223024477cfe3eaeb Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Mon, 27 Jul 2026 21:04:01 +1000 Subject: [PATCH 86/98] Move cable_iovars.F90 to core library --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d8c20f06..b8c5281d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,7 @@ if(CABLE_LIBRARY) # Set the core sources set(SOURCES + src/offline/cable_iovars.F90 src/science/albedo/cbl_albedo.F90 src/science/albedo/cbl_snow_albedo.F90 src/science/albedo/cbl_soilColour_albedo.F90 @@ -197,7 +198,6 @@ if(CABLE_LIBRARY) src/coupled/AM3/control/casa/types/casa_inout.F90 src/coupled/AM3/control/casa/types/casa_readbiome.F90 src/offline/cable_surface_types.F90 - src/offline/cable_iovars.F90 src/science/landuse/casa_ESM15landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") From 713372e6157f9e81ded40959b728e926f027fcdf Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 09:10:17 +1000 Subject: [PATCH 87/98] Remove duplicate cable_iovars.F90 --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b8c5281d2..ec70e3f70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,6 @@ if(CABLE_LIBRARY) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") list(APPEND SOURCES - src/coupled/esm/cable_iovars.F90 src/coupled/esm/cable_surface_types.F90 src/coupled/esm/cable_define_types.F90 src/coupled/esm/cable_soil_params_mod.F90 From 49435ab2de2343e28ca2b16accf113b9bc06669f Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 09:47:42 +1000 Subject: [PATCH 88/98] Move type files to more logical location --- CMakeLists.txt | 56 ++++----- .../CM3 => cable/types}/air_type_cbl.F90 | 0 .../CM3 => cable/types}/balances_type_cbl.F90 | 0 .../CM3 => cable/types}/bgc_pool_type.F90 | 0 .../types}/cable_define_types.F90 | 0 .../CM3 => cable/types}/cbl_canopy_type.F90 | 0 .../cable/CM3 => cable/types}/cbl_cbm_mod.F90 | 0 .../CM3 => cable/types}/climate_type.F90 | 0 .../CM3 => cable/types}/met_type_cbl.F90 | 0 .../CM3 => cable/types}/radiation_type.F90 | 0 .../CM3 => cable/types}/roughness_type.F90 | 0 .../CM3 => cable/types}/soil_type_cbl.F90 | 0 .../cable/CM3 => cable/types}/ssnow_type.F90 | 0 .../CM3 => cable/types}/sum_flux_type.F90 | 0 .../cable/CM3 => cable/types}/veg_type.F90 | 0 .../casa/types/casa_balance_type.F90 | 0 .../casa/types/casa_biome_type.F90 | 0 .../casa/types/casa_dimension.F90 | 0 .../casa/types/casa_files_type.F90 | 0 .../casa/types/casa_flux_type.F90 | 0 .../{control => }/casa/types/casa_inout.F90 | 0 .../casa/types/casa_met_type.F90 | 0 .../casa/types/casa_phenology_type.F90 | 0 .../casa/types/casa_pool_type.F90 | 0 .../casa/types/casa_readbiome.F90 | 0 .../casa/types/casa_variable.F90 | 0 .../casa/types/phen_variable.F90 | 0 .../casa/types/sum_casa_flux_type.F90 | 0 .../casa/types/sum_casa_pool_type.F90 | 0 .../cable/CM3/read_cable_namelists_mod.F90 | 116 ------------------ 30 files changed, 28 insertions(+), 144 deletions(-) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/air_type_cbl.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/balances_type_cbl.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/bgc_pool_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/cable_define_types.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/cbl_canopy_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/cbl_cbm_mod.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/climate_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/met_type_cbl.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/radiation_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/roughness_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/soil_type_cbl.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/ssnow_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/sum_flux_type.F90 (100%) rename src/coupled/AM3/{control/cable/CM3 => cable/types}/veg_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_balance_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_biome_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_dimension.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_files_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_flux_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_inout.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_met_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_phenology_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_pool_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_readbiome.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/casa_variable.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/phen_variable.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/sum_casa_flux_type.F90 (100%) rename src/coupled/AM3/{control => }/casa/types/sum_casa_pool_type.F90 (100%) delete mode 100644 src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index ec70e3f70..3d650ed30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,34 +168,34 @@ if(CABLE_LIBRARY) endif() elseif(CABLE_LIBRARY_TARGET STREQUAL "access3") list(APPEND SOURCES - src/coupled/AM3/control/cable/CM3/air_type_cbl.F90 - src/coupled/AM3/control/cable/CM3/balances_type_cbl.F90 - src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 - src/coupled/AM3/control/cable/CM3/cable_define_types.F90 - src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 - src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 - src/coupled/AM3/control/cable/CM3/climate_type.F90 - src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 - src/coupled/AM3/control/cable/CM3/radiation_type.F90 - src/coupled/AM3/control/cable/CM3/roughness_type.F90 - src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 - src/coupled/AM3/control/cable/CM3/ssnow_type.F90 - src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 - src/coupled/AM3/control/cable/CM3/veg_type.F90 - src/coupled/AM3/control/casa/types/casa_balance_type.F90 - src/coupled/AM3/control/casa/types/casa_biome_type.F90 - src/coupled/AM3/control/casa/types/casa_files_type.F90 - src/coupled/AM3/control/casa/types/casa_flux_type.F90 - src/coupled/AM3/control/casa/types/casa_met_type.F90 - src/coupled/AM3/control/casa/types/casa_phenology_type.F90 - src/coupled/AM3/control/casa/types/casa_pool_type.F90 - src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 - src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 - src/coupled/AM3/control/casa/types/casa_variable.F90 - src/coupled/AM3/control/casa/types/phen_variable.F90 - src/coupled/AM3/control/casa/types/casa_dimension.F90 - src/coupled/AM3/control/casa/types/casa_inout.F90 - src/coupled/AM3/control/casa/types/casa_readbiome.F90 + src/coupled/AM3/cable/types/air_type_cbl.F90 + src/coupled/AM3/cable/types/balances_type_cbl.F90 + src/coupled/AM3/cable/types/bgc_pool_type.F90 + src/coupled/AM3/cable/types/cable_define_types.F90 + src/coupled/AM3/cable/types/cbl_canopy_type.F90 + src/coupled/AM3/cable/types/cbl_cbm_mod.F90 + src/coupled/AM3/cable/types/climate_type.F90 + src/coupled/AM3/cable/types/met_type_cbl.F90 + src/coupled/AM3/cable/types/radiation_type.F90 + src/coupled/AM3/cable/types/roughness_type.F90 + src/coupled/AM3/cable/types/soil_type_cbl.F90 + src/coupled/AM3/cable/types/ssnow_type.F90 + src/coupled/AM3/cable/types/sum_flux_type.F90 + src/coupled/AM3/cable/types/veg_type.F90 + src/coupled/AM3/casa/types/casa_balance_type.F90 + src/coupled/AM3/casa/types/casa_biome_type.F90 + src/coupled/AM3/casa/types/casa_files_type.F90 + src/coupled/AM3/casa/types/casa_flux_type.F90 + src/coupled/AM3/casa/types/casa_met_type.F90 + src/coupled/AM3/casa/types/casa_phenology_type.F90 + src/coupled/AM3/casa/types/casa_pool_type.F90 + src/coupled/AM3/casa/types/sum_casa_flux_type.F90 + src/coupled/AM3/casa/types/sum_casa_pool_type.F90 + src/coupled/AM3/casa/types/casa_variable.F90 + src/coupled/AM3/casa/types/phen_variable.F90 + src/coupled/AM3/casa/types/casa_dimension.F90 + src/coupled/AM3/casa/types/casa_inout.F90 + src/coupled/AM3/casa/types/casa_readbiome.F90 src/offline/cable_surface_types.F90 src/science/landuse/casa_ESM15landuse.F90 ) diff --git a/src/coupled/AM3/control/cable/CM3/air_type_cbl.F90 b/src/coupled/AM3/cable/types/air_type_cbl.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/air_type_cbl.F90 rename to src/coupled/AM3/cable/types/air_type_cbl.F90 diff --git a/src/coupled/AM3/control/cable/CM3/balances_type_cbl.F90 b/src/coupled/AM3/cable/types/balances_type_cbl.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/balances_type_cbl.F90 rename to src/coupled/AM3/cable/types/balances_type_cbl.F90 diff --git a/src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 b/src/coupled/AM3/cable/types/bgc_pool_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/bgc_pool_type.F90 rename to src/coupled/AM3/cable/types/bgc_pool_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/cable_define_types.F90 b/src/coupled/AM3/cable/types/cable_define_types.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/cable_define_types.F90 rename to src/coupled/AM3/cable/types/cable_define_types.F90 diff --git a/src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 b/src/coupled/AM3/cable/types/cbl_canopy_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/cbl_canopy_type.F90 rename to src/coupled/AM3/cable/types/cbl_canopy_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 b/src/coupled/AM3/cable/types/cbl_cbm_mod.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 rename to src/coupled/AM3/cable/types/cbl_cbm_mod.F90 diff --git a/src/coupled/AM3/control/cable/CM3/climate_type.F90 b/src/coupled/AM3/cable/types/climate_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/climate_type.F90 rename to src/coupled/AM3/cable/types/climate_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 b/src/coupled/AM3/cable/types/met_type_cbl.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/met_type_cbl.F90 rename to src/coupled/AM3/cable/types/met_type_cbl.F90 diff --git a/src/coupled/AM3/control/cable/CM3/radiation_type.F90 b/src/coupled/AM3/cable/types/radiation_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/radiation_type.F90 rename to src/coupled/AM3/cable/types/radiation_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/roughness_type.F90 b/src/coupled/AM3/cable/types/roughness_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/roughness_type.F90 rename to src/coupled/AM3/cable/types/roughness_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 b/src/coupled/AM3/cable/types/soil_type_cbl.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/soil_type_cbl.F90 rename to src/coupled/AM3/cable/types/soil_type_cbl.F90 diff --git a/src/coupled/AM3/control/cable/CM3/ssnow_type.F90 b/src/coupled/AM3/cable/types/ssnow_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/ssnow_type.F90 rename to src/coupled/AM3/cable/types/ssnow_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 b/src/coupled/AM3/cable/types/sum_flux_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/sum_flux_type.F90 rename to src/coupled/AM3/cable/types/sum_flux_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/veg_type.F90 b/src/coupled/AM3/cable/types/veg_type.F90 similarity index 100% rename from src/coupled/AM3/control/cable/CM3/veg_type.F90 rename to src/coupled/AM3/cable/types/veg_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_balance_type.F90 b/src/coupled/AM3/casa/types/casa_balance_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_balance_type.F90 rename to src/coupled/AM3/casa/types/casa_balance_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_biome_type.F90 b/src/coupled/AM3/casa/types/casa_biome_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_biome_type.F90 rename to src/coupled/AM3/casa/types/casa_biome_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_dimension.F90 b/src/coupled/AM3/casa/types/casa_dimension.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_dimension.F90 rename to src/coupled/AM3/casa/types/casa_dimension.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_files_type.F90 b/src/coupled/AM3/casa/types/casa_files_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_files_type.F90 rename to src/coupled/AM3/casa/types/casa_files_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_flux_type.F90 b/src/coupled/AM3/casa/types/casa_flux_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_flux_type.F90 rename to src/coupled/AM3/casa/types/casa_flux_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_inout.F90 b/src/coupled/AM3/casa/types/casa_inout.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_inout.F90 rename to src/coupled/AM3/casa/types/casa_inout.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_met_type.F90 b/src/coupled/AM3/casa/types/casa_met_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_met_type.F90 rename to src/coupled/AM3/casa/types/casa_met_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_phenology_type.F90 b/src/coupled/AM3/casa/types/casa_phenology_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_phenology_type.F90 rename to src/coupled/AM3/casa/types/casa_phenology_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_pool_type.F90 b/src/coupled/AM3/casa/types/casa_pool_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_pool_type.F90 rename to src/coupled/AM3/casa/types/casa_pool_type.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_readbiome.F90 b/src/coupled/AM3/casa/types/casa_readbiome.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_readbiome.F90 rename to src/coupled/AM3/casa/types/casa_readbiome.F90 diff --git a/src/coupled/AM3/control/casa/types/casa_variable.F90 b/src/coupled/AM3/casa/types/casa_variable.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/casa_variable.F90 rename to src/coupled/AM3/casa/types/casa_variable.F90 diff --git a/src/coupled/AM3/control/casa/types/phen_variable.F90 b/src/coupled/AM3/casa/types/phen_variable.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/phen_variable.F90 rename to src/coupled/AM3/casa/types/phen_variable.F90 diff --git a/src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 b/src/coupled/AM3/casa/types/sum_casa_flux_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/sum_casa_flux_type.F90 rename to src/coupled/AM3/casa/types/sum_casa_flux_type.F90 diff --git a/src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 b/src/coupled/AM3/casa/types/sum_casa_pool_type.F90 similarity index 100% rename from src/coupled/AM3/control/casa/types/sum_casa_pool_type.F90 rename to src/coupled/AM3/casa/types/sum_casa_pool_type.F90 diff --git a/src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 b/src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 deleted file mode 100644 index 6684a35a1..000000000 --- a/src/coupled/AM3/control/cable/CM3/read_cable_namelists_mod.F90 +++ /dev/null @@ -1,116 +0,0 @@ -#if defined(UM_JULES) -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* -! -! Wrapper module containing subroutines for reading cable namelists -! -MODULE read_cable_namelists_mod - -! Description: -! Contains read_cable_ and read_ subroutines -! for reading namelists into cable during a UM-JULES job. -! -! Method: -! The unit number holding the namelist is passed as the sole argument -! to each file. -! -! Code Owner: Please refer to ModuleLeaders.txt and UM file CodeOwners.txt -! This file belongs in section: top_level -! -! Code Description: -! Language: FORTRAN 95. -! This code is written to UMDP3 v8.5 programming standards. - - -USE umPrintMgr , ONLY: & - PrintStatus, PrStatus_Oper - -USE UM_ParCore, ONLY: & - mype - -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -INTEGER(KIND=jpim), PARAMETER, PRIVATE :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER, PRIVATE :: zhook_out = 1 - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='READ_CABLE_NAMELISTS_MOD' - -CONTAINS - -! ********************************************************************* - -SUBROUTINE read_cable_surface_types (unitnumber) - -! Description: -! Read the cable_SURFACE_TYPES namelist - -USE cable_surface_types_mod, ONLY: & - print_nlist_cable_surface_types, & - check_cable_surface_types, read_nml_cable_surface_types, & - set_derived_variables_cable_surface_types - - -USE land_tile_ids_mod, ONLY: surface_type_ids_jls => surface_type_ids -USE land_tile_ids_mod_cbl, ONLY: set_surface_type_ids_cbl -USE land_tile_ids_mod_cbl, ONLY: surface_type_ids_cbl => surface_type_ids - -IMPLICIT NONE - -! Subroutine arguments -INTEGER, INTENT(IN) :: unitnumber - -REAL(KIND=jprb) :: zhook_handle -CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_cable_SURFACE_TYPES' - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL read_nml_cable_surface_types(unitnumber) -CALL set_derived_variables_cable_surface_types() -IF (PrintStatus >= PrStatus_Oper .AND. mype == 0) THEN - CALL print_nlist_cable_surface_types() -END IF -! Set the surface_type_ids array and carry out additional checks -CALL set_surface_type_ids_cbl() -surface_type_ids_jls = surface_type_ids_cbl -CALL check_cable_surface_types() - - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE read_cable_surface_types - -SUBROUTINE read_cable_model_environment(unitnumber) - -! Description: -! Read the cable namelist - -USE cable_model_env_mod, ONLY: read_nml_cable_model_env -USE cable_model_env_mod, ONLY: set_derived_variables_cable_model_env - -IMPLICIT NONE - -! Subroutine arguments -INTEGER, INTENT(IN) :: unitnumber - -REAL(KIND=jprb) :: zhook_handle -CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_CABLE_MODEL_ENVIRONMENT' - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL read_nml_cable_model_env(unitnumber) - -CALL set_derived_variables_cable_model_env() - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE read_cable_model_environment - - -END MODULE read_cable_namelists_mod -#endif From b6c06462c62545d48d3fe58f22917d7df1eaed1e Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 09:56:28 +1000 Subject: [PATCH 89/98] Remove all files that exist in the coupling code --- CMakeLists.txt | 9 + .../explicit/cable_land_sf_explicit_cbl.F90 | 2931 ----------------- .../cable_land/explicit/sf_flux_mod_cbl.F90 | 270 -- .../cable/cable_land/extra/hydrol_mod_cbl.F90 | 1075 ------ .../implicit/cable_land_sf_implicit_cbl.F90 | 931 ------ .../radiation/alloc_rad_albedo_vars_cbl.F90 | 267 -- .../radiation/cable_land_albedo_mod_cbl.F90 | 386 --- .../explicit/cable_explicit_driver.F90 | 272 -- .../explicit/cable_explicit_main.F90 | 385 --- .../explicit/cable_explicit_unpack.F90 | 195 -- .../interface/hydrology/cable_hyd_driver.F90 | 38 - .../interface/hydrology/cable_hyd_main.F90 | 150 - .../interface/hydrology/cable_wblake_fix.F90 | 19 - .../implicit/cable_implicit_driver.F90 | 249 -- .../implicit/cable_implicit_main.F90 | 242 -- .../implicit/cable_implicit_unpack.F90 | 400 --- .../implicit/cbl_prognostic_bank.F90 | 167 - .../interface/radiation/rad_driver_cbl.F90 | 192 -- .../interface/radiation/rad_unpack_cbl.F90 | 137 - .../control/cable/shared/cable_fields_mod.F90 | 61 - .../control/cable/shared/cable_model_env.F90 | 105 - .../cable/shared/land_tile_ids_mod_cbl.F90 | 121 - .../control/cable/shared/params_io_cbl.F90 | 355 -- .../cable/shared/progs_cbl_vars_mod.F90 | 386 --- .../cable/shared/work_vars_mod_cbl.F90 | 361 -- .../cable/util/activeTile_mask_cbl.F90 | 100 - .../cable/util/cable_jules_links_mod.F90 | 196 -- .../cable/util/cable_model_env_opts.F90 | 12 - .../cable/util/init/cable_um_init_bgc.F90 | 35 - .../util/init/cable_um_init_respiration.F90 | 44 - .../cable/util/init/cable_um_init_sumflux.F90 | 35 - .../control/cable/util/init/cbl_um_init.F90 | 134 - .../cable/util/init/cbl_um_init_soil.F90 | 236 -- .../cable/util/init/cbl_um_init_soilsnow.F90 | 157 - .../cable/util/init/cbl_um_init_veg.F90 | 71 - .../control/cable/util/map_paramaters_cbl.F90 | 230 -- .../AM3/control/cable/util/pack_mod_cbl.F90 | 164 - .../cable/util/update/cbl_um_update.F90 | 117 - .../util/update/cbl_um_update_canopy.F90 | 36 - .../cable/util/update/cbl_um_update_met.F90 | 111 - .../util/update/cbl_um_update_radiation.F90 | 88 - .../util/update/cbl_um_update_roughness.F90 | 73 - .../util/update/cbl_um_update_soilsnow.F90 | 48 - .../control/casa/shared/cnp_fields_mod.F90 | 19 - .../casa/shared/progs_cnp_vars_mod.F90 | 188 -- .../control/casa/shared/work_vars_mod_cnp.F90 | 52 - .../AM3/initialisation/cable_pft_params.F90 | 1033 ------ .../AM3/initialisation/cable_soil_params.F90 | 150 - .../init_cable_working_vars.F90 | 63 - .../AM3/initialisation/init_soilin_cbl.inc | 187 -- .../AM3/initialisation/init_vegin_cbl.inc | 479 --- .../prognostics/init_cable_progs.F90 | 65 - .../prognostics/init_cnp_progs.F90 | 33 - .../prognostics/read_cable_progs.F90 | 276 -- 54 files changed, 9 insertions(+), 14127 deletions(-) delete mode 100644 src/coupled/AM3/control/cable/cable_land/explicit/cable_land_sf_explicit_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/cable_land/explicit/sf_flux_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/cable_land/extra/hydrol_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/cable_land/implicit/cable_land_sf_implicit_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/cable_land/radiation/alloc_rad_albedo_vars_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/cable_land/radiation/cable_land_albedo_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/explicit/cable_explicit_driver.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/explicit/cable_explicit_main.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/explicit/cable_explicit_unpack.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_driver.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_main.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/hydrology/cable_wblake_fix.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/implicit/cable_implicit_driver.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/implicit/cable_implicit_main.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/implicit/cable_implicit_unpack.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/implicit/cbl_prognostic_bank.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/radiation/rad_driver_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/interface/radiation/rad_unpack_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/cable_fields_mod.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/cable_model_env.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/land_tile_ids_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/params_io_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/progs_cbl_vars_mod.F90 delete mode 100644 src/coupled/AM3/control/cable/shared/work_vars_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/util/activeTile_mask_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/util/cable_jules_links_mod.F90 delete mode 100644 src/coupled/AM3/control/cable/util/cable_model_env_opts.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cable_um_init_bgc.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cable_um_init_respiration.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cable_um_init_sumflux.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cbl_um_init.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cbl_um_init_soil.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cbl_um_init_soilsnow.F90 delete mode 100644 src/coupled/AM3/control/cable/util/init/cbl_um_init_veg.F90 delete mode 100644 src/coupled/AM3/control/cable/util/map_paramaters_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/util/pack_mod_cbl.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update_canopy.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update_met.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update_radiation.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update_roughness.F90 delete mode 100644 src/coupled/AM3/control/cable/util/update/cbl_um_update_soilsnow.F90 delete mode 100644 src/coupled/AM3/control/casa/shared/cnp_fields_mod.F90 delete mode 100644 src/coupled/AM3/control/casa/shared/progs_cnp_vars_mod.F90 delete mode 100644 src/coupled/AM3/control/casa/shared/work_vars_mod_cnp.F90 delete mode 100644 src/coupled/AM3/initialisation/cable_pft_params.F90 delete mode 100644 src/coupled/AM3/initialisation/cable_soil_params.F90 delete mode 100644 src/coupled/AM3/initialisation/init_cable_working_vars.F90 delete mode 100644 src/coupled/AM3/initialisation/init_soilin_cbl.inc delete mode 100644 src/coupled/AM3/initialisation/init_vegin_cbl.inc delete mode 100644 src/coupled/AM3/initialisation/prognostics/init_cable_progs.F90 delete mode 100644 src/coupled/AM3/initialisation/prognostics/init_cnp_progs.F90 delete mode 100644 src/coupled/AM3/initialisation/prognostics/read_cable_progs.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d650ed30..a672f5b7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,6 +138,15 @@ if(CABLE_LIBRARY) src/util/cable_common.F90 src/util/cable_climate_type_mod.F90 src/util/masks_cbl.F90 + + # These files should in theory be included in the base library + # build, but the AM3 versions had diverged fairly significantly + # from these. The AM3 versions should be brought in sync with + # the offline versions sooner rather than later. + #src/science/casa-cnp/casa_dimension.F90 + #src/science/casa-cnp/casa_phenology.F90 + #src/science/casa-cnp/casa_readbiome.F90 + #src/science/casa-cnp/casa_variable.F90 ) if(CABLE_LIBRARY_TARGET STREQUAL "access-esm1.6") diff --git a/src/coupled/AM3/control/cable/cable_land/explicit/cable_land_sf_explicit_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/explicit/cable_land_sf_explicit_cbl.F90 deleted file mode 100644 index 56fe0626d..000000000 --- a/src/coupled/AM3/control/cable/cable_land/explicit/cable_land_sf_explicit_cbl.F90 +++ /dev/null @@ -1,2931 +0,0 @@ -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* -MODULE cable_land_sf_explicit_mod - -USE um_types, ONLY: real_jlslsm - -IMPLICIT NONE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: & - ModuleName='CABLE_LAND_SF_EXPLICIT_MOD' - -CONTAINS -! SUBROUTINE CABLE_LAND_SF_EXPLICIT --------------------------------- -! -! Purpose: Calculate explicit surface fluxes of heat, moisture and -! momentum over land. Also calculates surface exchange -! coefficients required for implicit update of surface -! fluxes and surface information required by the -! explicit boundary layer routine -! -! -! Documentation: UMDP 24. -! -! !CM3#55 - this routine is derived from jules_land_sf_explicit and -! and modified for the purposes of linking CABLE and JULES together -! in the surf_couple_explicit section - work commencing 6/12/2023 -! -! All edits will be accompanied by comments starting with !CM3#55-x -! referring to the git issue - where possible the included number x will -! refer to sub-issue as per the git discussion -! -!--------------------------------------------------------------------- -! Arguments :- -SUBROUTINE cable_land_sf_explicit ( & -! IN date-related values - curr_day_number, & -! IN values defining field dimensions and subset to be processed : - land_pts, & -! IN parameters for iterative SISL scheme - numcycles, cycleno, & -! IN parameters required from boundary-layer scheme : - bq_1,bt_1,z1_uv,z1_uv_top,z1_tq,z1_tq_top,qw_1,tl_1, & -! IN soil/vegetation/land surface data : - land_index,nsurft,sm_levels,canopy,catch,catch_snow,hcon_soilt, & - ho2r2_orog, flandg, & - snow_surft,sil_orog_land,smvccl_soilt,smvcst_soilt,smvcwt_soilt,sthf_soilt, & - sthu_soilt,z0_surft,z0h_surft_bare, z0m_soil_in, & -! IN input data from the wave model - charnock_w, & -! IN everything not covered so far : - pstar,lw_down,sw_surft,zh,ddmfx, & - co2_mmr,co2_3d,l_co2_interactive,l_phenol, & - asteps_since_triffid,cs_pool_soilt,veg_state,frac,canht_pft, & - photosynth_act_rad,lai_pft, & - l_mr_physics,t_soil_soilt,tsurf_elev_surft,tstar_surft,z_land, & - albsoil_soilt,cos_zenith_angle,l_aero_classic,l_dust,l_dust_diag, & - clay_soilt,o3, l_emis_surft_set, & -! INOUT diagnostics - sf_diag, & -! INOUT data : - emis_surft,gs,gc_corr,g_leaf_acc,npp_pft_acc,resp_w_pft_acc,resp_s_acc_soilt, & - rhostar,fqw_1,ftl_1,t1_sd,q1_sd,vshr,vshr_land, & -! OUT Diagnostic not requiring STASH flags : - ftl_surft, & -! OUT variables for message passing - rhokm_land, cdr10m, & -! OUT data required for mineral dust scheme - u_s_std_surft, & -! OUT data required elsewhere in boundary layer or surface code - alpha1,ashtf_prime_surft,fqw_surft,epot_surft,fraca, & - resfs,resft,rhokh_surft,dtstar_surft,z0h_surft, z0m_surft, & - chr1p5m,smc_soilt,hcons_soilt,gpp,npp,resp_p,g_leaf,gpp_pft,npp_pft, & - resp_p_pft,resp_s_soilt,resp_s_tot_soilt,resp_l_pft,resp_r_pft, & - resp_w_pft,n_leaf,n_root,n_stem,lai_bal,gc_surft,canhc_surft,wt_ext_surft, & - flake,surft_index,surft_pts,tile_frac,fsmc_pft,emis_soil, & -! OUT required for classic aerosols - cd_land,rib_surft,ch_surft_classic,cd_std_classic, & -! OUT required for sea and sea-ice calculations - l_cdr10m_snow, & - !New arguments replacing USE statements - !Fluxes (IN) - t_home_gb, t_growth_gb, & - !urban_param (IN) - emisr_gb, emisw_gb, hwr_gb, & - !jules_mod (IN OUT) - albobs_scaling_surft, & - !jules_chemvars_mod (OUT) - isoprene_gb, isoprene_pft, terpene_gb , terpene_pft, & - methanol_gb, methanol_pft, acetone_gb, acetone_pft, & - !trif_vars_mod (OUT) - fapar_diag_pft, apar_diag_pft, apar_diag_gb, gpp_gb_acc, gpp_pft_acc, & - !crop_vars_mod (IN) - rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & - !crop_vars_mod (IN OUT) - resfs_irr_surft, & - !crop_vars_mod (OUT) - gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & - !p_s_parms (IN) - bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & - !urban_param (IN) - wrr_gb, & - !Fluxes (IN OUT) - anthrop_heat_surft, & - !prognostics (IN) - nsnow_surft, sice_surft, sliq_surft, snowdepth_surft, & - tsnow_surft, ds_surft, & - !c_elevate (OUT) - surf_hgt_surft, lw_down_elevcorr_surft, & - !jules_mod (OUT) - snowdep_surft, & - !urban_param (IN) - hgt_gb, disp_gb, & - !lake_mod (IN) - lake_t_ice_gb,lake_t_mxl_gb, lake_h_ice_gb,lake_depth_gb, & - g_dt_gb, non_lake_frac, & - !lake_mod (OUT) - nusselt_gb, ts1_lake_gb, hcon_lake, & - !ancil_info - l_lice_point, l_soil_point, & - !jules_surface_types (IN) - diff_frac, & - !chemvars (OUT) - flux_o3_pft, fo3_pft, & - !CABLE_LSM:CM3 - progs_cbl, work_cbl, pars_io_cbl, progs_cnp, & - mype, timestep_number, satcon_soilt, & - latitude, longitude, u_s, ls_rain, ls_snow ) - -USE ancil_info, ONLY: dim_cslayer, l_lice_surft, nsoilt, rad_nband -USE atm_fields_bounds_mod, ONLY: pdims_s, pdims, tdims -USE bl_option_mod, ONLY: l_quick_ap2 -USE c_elevate, ONLY: l_elev_absolute_height -USE c_z0h_z0m, ONLY: z0h_z0m, z0h_z0m_classic -USE calc_air_dens_mod, ONLY: calc_air_dens -USE can_drag_mod, ONLY: can_drag_z0, can_drag_phi_m_h -USE csigma, ONLY: sbcon -USE dust_param, ONLY: z0_soil -USE elevate_mod, ONLY: elevate -USE fcdch_mod, ONLY: fcdch -USE gen_anthrop_heat_mod, ONLY: generate_anthropogenic_heat -USE heat_con_mod, ONLY: heat_con -USE physiol_mod, ONLY: physiol -USE planet_constants_mod, ONLY: cp, vkman, r, c_virtual,epsil=>repsilon -USE qsat_mod, ONLY: qsat, qsat_mix -USE sf_diags_mod, ONLY: strnewsfdiag -USE sf_flux_mod_cbl, ONLY: sf_flux_cbl -USE sf_orog_mod, ONLY: sf_orog -USE sf_resist_mod, ONLY: sf_resist -USE sf_rib_mod, ONLY: sf_rib -USE sfl_int_mod, ONLY: sfl_int -USE snowtherm_mod, ONLY: snowtherm -USE solinc_data, ONLY: sky, l_skyview -USE stdev1_mod, ONLY: stdev1 -USE stochastic_physics_run_mod, ONLY: l_rp2, i_rp_scheme, i_rp2b, z0hm_pft_rp -USE theta_field_sizes, ONLY: t_i_length,t_j_length -USE tilepts_mod, ONLY: tilepts -USE timestep_mod, ONLY: timestep -USE urban_param_mod, ONLY: z0m_mat -USE urbanz0_mod, ONLY: urbanz0 -USE veg_param, ONLY: secs_per_360days -USE veg3_field_mod, ONLY: veg_state_type -USE water_constants_mod, ONLY: lc, rho_ice, tm - -USE jules_soil_biogeochem_mod, ONLY: & -! imported scalar parameters - soil_model_rothc, & -! imported scalar variables (IN) - soil_bgc_model - -USE jules_soil_mod, ONLY: dzsoil, dzsoil_elev, hcice, hcwat, hcondeep - -USE jules_surface_types_mod, ONLY: npft, nnpft, ntype, & - urban_canyon, urban_roof, soil, lake, ncpft - -#if defined(UM_JULES) -USE atm_step_local, ONLY: dim_cs1, co2_dim_len,co2_dim_row -#else -USE ancil_info, ONLY: dim_cs1, co2_dim_len, co2_dim_row -#endif - -USE jules_snow_mod, ONLY: cansnowtile & - ,rho_snow_const & - ,snow_hcon & - ,l_snowdep_surf & - ,l_snow_nocan_hc & - ,nsmax & - ,unload_rate_u - -USE jules_surface_mod, ONLY: l_aggregate, formdrag, l_anthrop_heat_src, & - i_aggregate_opt, cor_mo_iter, & - use_correct_ustar, iscrntdiag, & - l_flake_model,l_elev_lw_down, & - l_mo_buoyancy_calc, effective_z0, & - IP_ScrnDecpl2, IP_ScrnDecpl3, & - l_vary_z0m_soil, l_elev_land_ice, ls - -USE jules_vegetation_mod, ONLY: can_model, can_rad_mod, ilayers, l_triffid, & - l_vegdrag_surft - -USE jules_irrig_mod, ONLY: l_irrig_dmd - -USE jules_sea_seaice_mod, ONLY: l_ctile, charnock, ip_ss_solid - -USE jules_urban_mod, ONLY: l_moruses_rough_surft, l_moruses_storage - -USE jules_science_fixes_mod, ONLY: ctile_orog_fix, correct_sea_adjust_land, & - l_fix_wind_snow, l_accurate_rho, & - l_fix_moruses_roof_rad_coupling - -USE ereport_mod, ONLY: ereport -USE errormessagelength_mod, ONLY: errormessagelength - -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type ! CABLE intro-ed progs -USE work_vars_mod_cbl, ONLY: work_vars_type ! some kept thru timestep -USE params_io_mod_cbl, ONLY: params_io_data_type -USE progs_cnp_vars_mod, ONLY: progs_cnp_vars_type ! CASA-CNP intro-ed progs -USE cable_explicit_main_mod, ONLY: cable_explicit_main - -IMPLICIT NONE -!----------------------------------------------------------------------- -! Inputs :- -!----------------------------------------------------------------------- -! (a) Defining horizontal grid and subset thereof to be processed. -! Checked for consistency. -INTEGER, INTENT(IN) :: & - curr_day_number, & - ! IN current day of year - land_pts, & - ! IN No of land points being processed. - numcycles, & - ! Number of cycles (iterations) for iterative SISL. - cycleno - ! Iteration no - -! Defining vertical grid of model atmosphere. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - bq_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN A buoyancy parameter - ! (beta q tilde). -,bt_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN A buoyancy parameter - ! (beta T tilde). -,z1_uv(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Height of lowest uv level (m). -,z1_tq(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Height of lowest tq level (m). - ! Note, if the grid used is - ! staggered in the vertical, - ! Z1_UV and Z1_TQ can be - ! different. -,qw_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Total water content -,tl_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! IN Ice/liquid water temperature - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - charnock_w(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -! Charnock's coefficient from wave model - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - z1_uv_top(tdims%i_start:tdims%i_end, & - tdims%j_start:tdims%j_end) - ! Height of top of lowest uv-layer -REAL(KIND=real_jlslsm), INTENT(IN) :: & - z1_tq_top(tdims%i_start:tdims%i_end, & - tdims%j_start:tdims%j_end) - ! Height of top of lowest Tq-layer - -! (c) Soil/vegetation/land surface parameters (mostly constant). -LOGICAL, INTENT(IN) :: & - l_co2_interactive & - ! IN Switch for 3D CO2 field -,l_phenol - ! IN Indicates whether phenology - ! in use - -INTEGER, INTENT(IN) :: & - land_index(land_pts) ! IN LAND_INDEX(I)=J => the Jth - ! point in ROW_LENGTH,ROWS is the - ! land point. - -INTEGER, INTENT(IN) :: & - sm_levels & - ! IN No. of soil moisture levels -,nsurft & - ! IN No. of land-surface tiles -,asteps_since_triffid - ! IN Number of atmospheric - ! timesteps since last call - ! to TRIFFID. - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - canopy(land_pts,nsurft) & - ! IN Surface/canopy water for - ! snow-free land tiles (kg/m2) -,catch(land_pts,nsurft) & - ! IN Surface/canopy water capacity - ! of snow-free land tiles (kg/m2). -,catch_snow(land_pts,nsurft) & - ! IN Snow interception capacity of - ! tiles (kg/m2). -,hcon_soilt(land_pts,nsoilt) & - ! IN Soil thermal conductivity - ! (W/m/K). -,snow_surft(land_pts,nsurft) & - ! IN Lying snow on tiles (kg/m2) -,smvccl_soilt(land_pts,nsoilt,sm_levels) & - ! IN Critical volumetric SMC - ! (cubic m per cubic m of soil). -,smvcst_soilt(land_pts,nsoilt,sm_levels) & - ! IN Volumetric saturation point - ! (m3/m3 of soil). -,smvcwt_soilt(land_pts,nsoilt,sm_levels) & - ! IN Volumetric wilting point - ! (cubic m per cubic m of soil). -,sthf_soilt(land_pts,nsoilt,sm_levels) & - ! IN Frozen soil moisture content of - ! each layer as a fraction of - ! saturation. -,sthu_soilt(land_pts,nsoilt,sm_levels) & - ! IN Unfrozen soil moisture content - ! of each layer as a fraction of - ! saturation. -,z0_surft(land_pts,nsurft) & - ! IN Tile roughness lengths (m). -,z0h_surft_bare(land_pts,nsurft) & - ! IN Tile thermal roughness lengths - ! without snow cover(m). -,z0m_soil_in(land_pts) & - ! IN bare soil momentum z0 (m). -,sil_orog_land(land_pts) & - ! IN Silhouette area of unresolved - ! orography per unit horizontal - ! area on land points only. -,ho2r2_orog(land_pts) & - ! IN Standard Deviation of orography. - ! equivilent to peak to trough - ! height of unresolved orography -,flandg(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! IN Land fraction on all tiles. - ! divided by 2SQRT(2) on land - ! points only (m) - -! (f) Atmospheric + any other data not covered so far, incl control. - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - pstar(pdims%i_start:pdims%i_end,pdims%j_start:pdims%j_end) & - ! IN Surface pressure (Pascals). -,lw_down(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Surface downward LW radiation - ! (W/m2). -,sw_surft(land_pts,nsurft) & - ! IN Surface net SW radiation on - ! land tiles (W/m2). -,zh(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Height above surface of top of - ! boundary layer (metres). -,ddmfx(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Convective downdraught - ! mass-flux at cloud base -,co2_mmr & - ! IN CO2 Mass Mixing Ratio -,co2_3d(co2_dim_len,co2_dim_row) & - ! IN 3D CO2 field if required. -,cs_pool_soilt(land_pts,nsoilt,dim_cslayer,dim_cs1) & - ! IN Soil carbon (kg C/m2). -,frac(land_pts,ntype) & - ! IN Fractions of surface types. -,canht_pft(land_pts,npft) & - ! IN Canopy height (m) -,photosynth_act_rad(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Net downward shortwave radiation - ! in band 1 (w/m2). -,lai_pft(land_pts,npft) & - ! IN Leaf area index -,t_soil_soilt(land_pts,nsoilt,sm_levels) & - ! IN Soil temperatures (K). -,tsurf_elev_surft(land_pts,nsurft) & - ! IN Tiled ice sub-surface temperature (K) -,z_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Land height (m). -,albsoil_soilt(land_pts,nsoilt) & - ! IN Soil albedo. -, cos_zenith_angle(tdims%i_start:tdims%i_end, & - tdims%j_start:tdims%j_end) & - ! IN Cosine of the zenith angle -,clay_soilt(land_pts,nsoilt,dim_cslayer) & - ! IN Soil clay fraction. -,o3(land_pts) - ! IN Surface ozone concentration (ppb). - -REAL(KIND=real_jlslsm), INTENT(INOUT) :: & -tstar_surft(land_pts,nsurft) - ! IN Surface tile temperatures - -LOGICAL, INTENT(IN) :: & - l_aero_classic & - ! IN switch for using CLASSIC aerosol - ! scheme -,l_dust & - ! IN switch for mineral dust -,l_dust_diag & - ! IN Switch for diagnostic mineral dust - ! lifting -,l_mr_physics & - ! IN Switch for when mixing ratios are used -,l_emis_surft_set(nsurft) - ! IN Switch for varying grey surface emissivity - -!----------------------------------------------------------------------- -! In/outs :- -!----------------------------------------------------------------------- -!Diagnostics -TYPE (strnewsfdiag), INTENT(IN OUT) :: sf_diag - -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - emis_surft(land_pts,nsurft) & - ! INOUT Emissivity for land tiles -,gs(land_pts) & - ! INOUT "Stomatal" conductance to - ! evaporation (m/s). -,g_leaf_acc(land_pts,npft) & - ! INOUT Accumulated G_LEAF -,npp_pft_acc(land_pts,npft) & - ! INOUT Accumulated NPP_pft -,resp_w_pft_acc(land_pts,npft) & - ! INOUT Accum RESP_W_pft -,resp_s_acc_soilt(land_pts,nsoilt,dim_cslayer,dim_cs1) & - ! INOUT Accumulated RESP_S -,rhostar(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! INOUT Surface air density -,fqw_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! INOUT Moisture flux between layers - ! (kg per square metre per sec). - ! FQW(,1) is total water flux - ! from surface, 'E'. -,ftl_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! INOUT FTL(,K) contains net turbulent - ! sensible heat flux into layer K - ! from below; so FTL(,1) is the - ! surface sensible heat, H.(W/m2) -,t1_sd(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Standard deviation of turbulent - ! fluctuations of layer 1 temp; - ! used in initiating convection. -,q1_sd(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Standard deviation of turbulent - ! flucs of layer 1 humidity; - ! used in initiating convection. -,vshr(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Magnitude of surface-to-lowest - ! atm level wind shear (m per s). -,vshr_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! OUT Magnitude of surface-to-lowest - ! atm level wind shear (m per s). - -!----------------------------------------------------------------------- -! Outputs :- -!----------------------------------------------------------------------- -!-1 Diagnostic (or effectively so - includes coupled model requisites):- -INTEGER, INTENT(OUT) :: & - surft_index(land_pts,ntype) & - ! OUT Index of tile points -,surft_pts(ntype) ! OUT Number of tile points - -! (a) Calculated anyway (use STASH space from higher level) :- - -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - ftl_surft(land_pts,nsurft) & - ! OUT Surface FTL for land tiles -,u_s_std_surft(land_pts,nsurft) & - ! OUT Surface friction velocity - ! (standard value) - ! for mineral dust -,emis_soil(land_pts) & - ! OUT Emissivity of underlying soil -,rhokm_land(pdims_s%i_start:pdims_s%i_end, & - pdims_s%j_start:pdims_s%j_end), & - cdr10m(pdims_s%i_start:pdims_s%i_end,pdims_s%j_start:pdims_s%j_end) - -! (b) Not passed between lower-level routines (not in workspace at this -! level) :- - -!-2 Genuinely output, needed by other atmospheric routines :- - -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - alpha1(land_pts,nsurft) & - ! OUT Mean gradient of saturated - ! specific humidity with respect - ! to temperature between the - ! bottom model layer and tile - ! surfaces -,ashtf_prime_surft(land_pts,nsurft) & - ! OUT Coefficient to calculate - ! surface heat flux into land - ! tiles. -,fqw_surft(land_pts,nsurft) & - ! OUT Surface FQW for land tiles -,epot_surft(land_pts,nsurft) & - ! OUT Local EPOT for land tiles. -,fraca(land_pts,nsurft) & - ! OUT Fraction of surface moisture - ! flux with only aerodynamic - ! resistance for snow-free land - ! tiles. -,resfs(land_pts,nsurft) & - ! OUT Combined soil, stomatal - ! and aerodynamic resistance - ! factor for fraction (1-FRACA) - ! of snow-free land tiles. -,resft(land_pts,nsurft) & - ! OUT Total resistance factor. - ! FRACA+(1-FRACA)*RESFS for - ! snow-free land, 1 for snow. -,rhokh_surft(land_pts,nsurft) & - ! OUT Surface exchange coefficients - ! for land tiles -,dtstar_surft(land_pts,nsurft) & - ! OUT Change in TSTAR over timestep - ! for land tiles -,z0h_surft(land_pts,nsurft) & - ! OUT Tile roughness lengths for heat - ! and moisture (m). -,z0m_surft(land_pts,nsurft) & - ! OUT Tile roughness lengths for - ! momentum. -,chr1p5m(land_pts,nsurft) & - ! OUT Ratio of coefffs for - ! calculation of 1.5m temp for - ! land tiles. -,smc_soilt(land_pts,nsoilt) & - ! OUT Available moisture in the - ! soil profile (mm). -,hcons_soilt(land_pts,nsoilt) & - ! OUT Soil thermal conductivity - ! including water and ice -,gpp(land_pts) & - ! OUT Gross primary productivity - ! (kg C/m2/s). -,npp(land_pts) & - ! OUT Net primary productivity - ! (kg C/m2/s). -,resp_p(land_pts) & - ! OUT Plant respiration (kg C/m2/s). -,g_leaf(land_pts,npft) & - ! OUT Leaf turnover rate (/360days). -,gpp_pft(land_pts,npft) & - ! OUT Gross primary productivity - ! on PFTs (kg C/m2/s). -,npp_pft(land_pts,npft) & - ! OUT Net primary productivity - ! (kg C/m2/s). -,resp_p_pft(land_pts,npft) & - ! OUT Plant respiration on PFTs - ! (kg C/m2/s). -,resp_s_soilt(land_pts,nsoilt,dim_cslayer,dim_cs1) & - ! OUT Soil respiration (kg C/m2/s). -,resp_s_tot_soilt(land_pts,nsoilt) & - ! OUT Total soil respiration - ! (kg C/m2/s). -,resp_l_pft(land_pts,npft) & - ! OUT Leaf maintenance respiration - ! (kg C/m2/s). -,resp_r_pft(land_pts,npft) & - ! OUT Root maintenance respiration - ! (kg C/m2/s). -,resp_w_pft(land_pts,npft) & - ! OUT Wood maintenance respiration - ! (kg C/m2/s). -,n_leaf(land_pts,npft) & - ! OUT Leaf N content scaled by LAI - ! (kg N/m2). -,n_root(land_pts,npft) & - ! OUT Root N content scaled by LAI_bal - ! (kg N/m2). -,n_stem(land_pts,npft) & - ! OUT Stem N content scaled by LAI_bal - ! (kg N/m2). -,lai_bal(land_pts,npft) & - ! OUT LAI_bal -,gc_surft(land_pts,nsurft) & - ! OUT "Stomatal" conductance to - ! evaporation for land tiles - ! (m/s). -,canhc_surft(land_pts,nsurft) & - ! OUT Areal heat capacity of canopy - ! for land tiles (J/K/m2). -,wt_ext_surft(land_pts,sm_levels,nsurft) & - ! OUT Fraction of evapotranspiration - ! which is extracted from each - ! soil layer by each tile. -,flake(land_pts,nsurft) & - ! OUT Lake fraction. -,tile_frac(land_pts,nsurft) & - ! OUT Tile fractions including - ! snow cover in the ice tile. -,fsmc_pft(land_pts,npft) & - ! OUT Moisture availability factor. -,gc_corr(land_pts,npft) - ! OUT "Stomatal" conductance - ! without bare soil evaporation - -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - cd_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Bulk transfer coefficient for - ! momentum over land. -,rib_surft(land_pts,nsurft) & - ! OUT RIB for land tiles. -,ch_surft_classic(land_pts,nsurft) & - ! OUT Bulk transfer coefficient for - ! heat for aerosol deposition. -,cd_std_classic(land_pts,nsurft) - ! OUT Bulk transfer coefficient for - ! momentum for aerosol deposition. -LOGICAL, INTENT(OUT) :: & - l_cdr10m_snow - ! OUT Flag indicating if cdr10m - ! (an interpolation coefficient) is - ! to be calculated for use with - ! snow unloading. - -!New arguments replacing USE statements -!urban_param -REAL(KIND=real_jlslsm), INTENT(IN) :: emisr_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(IN) :: emisw_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(IN) :: hwr_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(IN) :: wrr_gb(land_pts) - -!jules_mod -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - albobs_scaling_surft(land_pts,ntype,rad_nband) - -!p_s_parms (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: bexp_soilt(land_pts,nsoilt,sm_levels) -REAL(KIND=real_jlslsm), INTENT(IN) :: sathh_soilt(land_pts,nsoilt,sm_levels) -REAL(KIND=real_jlslsm), INTENT(IN) :: v_close_pft(land_pts,sm_levels,npft) -REAL(KIND=real_jlslsm), INTENT(IN) :: v_open_pft(land_pts,sm_levels,npft) - -!crop_vars_mod (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: rootc_cpft(land_pts,ncpft) -REAL(KIND=real_jlslsm), INTENT(IN) :: sthu_irr_soilt(land_pts,nsoilt,sm_levels) -REAL(KIND=real_jlslsm), INTENT(IN) :: frac_irr_soilt(land_pts,nsoilt) -REAL(KIND=real_jlslsm), INTENT(IN) :: frac_irr_surft(land_pts,nsurft) -REAL(KIND=real_jlslsm), INTENT(IN) :: dvi_cpft(land_pts,ncpft) -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: resfs_irr_surft(land_pts,nsurft) - -!Fluxes (IN OUT) -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: anthrop_heat_surft(land_pts,nsurft) - -!Fluxes -REAL(KIND=real_jlslsm), INTENT(IN) :: t_home_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(IN) :: t_growth_gb(land_pts) - -!veg_state -TYPE(veg_state_type), INTENT(IN OUT) :: veg_state - -!jules_chemvars_mod -REAL(KIND=real_jlslsm), INTENT(OUT) :: isoprene_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: terpene_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: methanol_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: acetone_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: isoprene_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: terpene_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: methanol_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: acetone_pft(land_pts,npft) - -!trif_vars_mod -REAL(KIND=real_jlslsm), INTENT(OUT) :: fapar_diag_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: apar_diag_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: apar_diag_gb(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: gpp_gb_acc(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: gpp_pft_acc(land_pts,npft) - -!crop_vars_mod (OUT) -REAL(KIND=real_jlslsm), INTENT(OUT) :: gs_irr_surft(land_pts,nsurft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: smc_irr_soilt(land_pts,nsoilt) -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - wt_ext_irr_surft(land_pts,sm_levels,nsurft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: gc_irr_surft(land_pts,nsurft) - -!prognostics (IN) -INTEGER, INTENT(IN) :: nsnow_surft(land_pts,nsurft) -REAL(KIND=real_jlslsm), INTENT(IN) :: sice_surft(land_pts,nsurft,nsmax), & - sliq_surft(land_pts,nsurft,nsmax), & - snowdepth_surft(land_pts,nsurft), & - tsnow_surft(land_pts,nsurft,nsmax), & - ds_surft(land_pts,nsurft,nsmax) - -!c_elevate (OUT) -REAL(KIND=real_jlslsm), INTENT(OUT) :: surf_hgt_surft(land_pts,nsurft), & - lw_down_elevcorr_surft(land_pts,nsurft) - -!jules_mod (OUT) -REAL(KIND=real_jlslsm), INTENT(OUT) :: snowdep_surft(land_pts,nsurft) - -!urban_param (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: hgt_gb(land_pts), & - disp_gb(land_pts) - -!lake_mod (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: lake_t_ice_gb(land_pts), & - lake_t_mxl_gb(land_pts), & - lake_h_ice_gb(land_pts), & - lake_depth_gb(land_pts), & - g_dt_gb(land_pts), & - non_lake_frac(land_pts) -REAL(KIND=real_jlslsm), INTENT(OUT) :: ts1_lake_gb(land_pts), & - nusselt_gb(land_pts), & - hcon_lake(land_pts) - -!ancil_info (IN) -LOGICAL, INTENT(IN) :: l_lice_point(land_pts) -LOGICAL, INTENT(IN) :: l_soil_point(land_pts) - -!JULES surface_types_mod (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: diff_frac(t_i_length * t_j_length) - -!chemvars (OUT) -REAL(KIND=real_jlslsm), INTENT(OUT) :: flux_o3_pft(land_pts,npft) -REAL(KIND=real_jlslsm), INTENT(OUT) :: fo3_pft(land_pts,npft) - - -!----------------------------------------------------------------------- -! LOCAL variables -!----------------------------------------------------------------------- -! Workspace :- -REAL(KIND=real_jlslsm) :: work_clay ! working variable - -REAL(KIND=real_jlslsm) :: & - vfrac_surft(land_pts,nsurft) & - ! Fractional canopy coverage for - ! land tiles. -,radnet_surft(land_pts,nsurft) & - ! Surface net radiation on tiles -,csnow(land_pts,nsmax) & - ! Areal heat capacity of snow (J/K/m2) -,ksnow(land_pts,nsmax) & - ! Thermal conductivity of snow (W/m/K) -,hcons_snow(land_pts,nsurft) & - ! Snow thermal conductivity -,resp_frac(land_pts,dim_cslayer) & - ! respired fraction of RESP_S -,gc_stom_surft(land_pts,nsurft) - ! canopy conductance - -REAL(KIND=real_jlslsm) :: & - lh0 ! Latent heat for snow free surface - ! =LS for sea-ice, =LC otherwise - - -! Workspace for sea-ice and marginal ice zone -REAL(KIND=real_jlslsm) :: & - ch_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! Bulk transfer coefficient for - ! het and moisture over land. - -! Workspace for land tiles -REAL(KIND=real_jlslsm) :: & - cd_std(land_pts,nsurft) & - ! Local drag coefficient for calc - ! of interpolation coefficient -,cd_surft(land_pts,nsurft) & - ! Drag coefficient -,ch_surft(land_pts,nsurft) & - ! Transfer coefficient for heat and - ! moisture -,chn(land_pts,nsurft) & - ! Neutral value of CH. -,dq(land_pts) & - ! Sp humidity difference between - ! surface and lowest atmospheric lev -,epdt(land_pts) & - ! "Potential" Evaporation * Timestep -,pstar_land(land_pts) & - ! Surface pressure for land points. -,qstar_surft(land_pts,nsurft) & - !Surface saturated sp humidity. -,rhokh_can(land_pts,nsurft) & - ! Exchange coefficient for canopy - ! air to surface -,rhokm_1_surft(land_pts,nsurft) & - ! Momentum exchange coefficient. -,tsurf(land_pts,nsurft) & - ! Surface layer temp (snow or soil) ( -,lake_ice_mid_temp(land_pts) & - ! Median temperature of the lake ice (K) -,dzsurf(land_pts,nsurft) & - ! Surface layer thickness - ! (snow or soil) (m) -,canhc_surf(land_pts,nsurft) & - ! Surface layer thickness - ! (snow or soil) (m) -,hcons_surf(land_pts,nsurft) & - ! Thermal conductivity - ! (snow or soil) (W/m/K) -,wind_profile_factor(land_pts,nsurft) & - ! For transforming effective surface - ! transfer coefficients to those - ! excluding form drag. -,z0m_eff_surft(land_pts,nsurft) & - ! Effective momentum roughness length -,db_surft(land_pts,nsurft) & - ! Buoyancy difference for surface - ! tile -,v_s_surft(land_pts,nsurft) & - ! Surface layer scaling velocity - ! for tiles (m/s). -,v_s_std(land_pts,nsurft) & - ! Surface layer scaling velocity - ! for tiles excluding orographic - ! form drag (m/s). -,u_s_iter_surft(land_pts,nsurft) & - ! Scaling velocity from middle of - ! MO scheme - picked up in error by - ! dust code! -,recip_l_mo_surft(land_pts,nsurft) & - ! Reciprocal of the Monin-Obukhov - ! length for tiles (m^-1). -,z0m_soil(land_pts,nsurft) & - ! Bare soil momentum roughness length - ! for use in 1 tile dust scheme -,z0h_soil(land_pts,nsurft) & - ! Bare soil roughness length for heat - ! for use in 1 tile dust scheme -,wind_profile_fac_soil(land_pts,nsurft) & - ! Equivalent of wind_profile_factor - ! for use in 1 tile dust scheme -,cd_surft_soil(land_pts,nsurft), ch_surft_soil(land_pts,nsurft) & -,cd_std_soil(land_pts,nsurft), v_s_surft_soil(land_pts,nsurft) & -,recip_l_mo_surft_soil(land_pts,nsurft) & - ! Dummy output variables from extra - ! call to fcdch needed for - ! 1 tile dust scheme -,v_s_std_soil(land_pts,nsurft) & - ! Bare soil surface layer scaling - ! velocity for tiles excluding - ! orographic form drag (m/s) - ! for use in 1 tile dust scheme -,u_s_iter_soil(land_pts,nsurft) & - ! Bare soil scaling velocity from - ! middle of MO scheme for use in - ! 1 tile dust scheme - picked up in - ! error by dust code -,z0h_surft_classic(land_pts,nsurft) & - ! z0h to be used in calculation for - ! CLASSIC aerosol deposition -,cd_surft_classic(land_pts,nsurft) & -,v_s_surft_classic(land_pts,nsurft) & -,recip_l_mo_surft_classic(land_pts,nsurft) & -,v_s_std_classic(land_pts,nsurft) & -,u_s_iter_classic(land_pts,nsurft) & - ! Dummy output variables from extra - ! call to fcdch needed for aerosol - ! deposition with different z0h -,t_elev(land_pts,nsurft) & - ! Temperature at elevated height (k) -,q_elev(land_pts,nsurft) & - ! Specific humidity at elevated - ! height (kg per kg air) -,qs1_elev(land_pts,nsurft) & - ! Saturated specific humidity at elev - ! height (kg per kg air) -,scaling_urban(land_pts,nsurft) & - ! MORUSES: ground heat flux scaling; - ! canyon tile only coupled to soil -,zdt_surft(land_pts,nsurft) & - ! Difference between the canopy height and - ! displacement height (m) -,phi_m(land_pts) & - ! Monin-Obukhov stability function for momentum - ! integrated to the model's lowest wind level. -,phi_h(land_pts) & - ! Monin-Obukhov stability function for scalars - ! integrated to the model's lowest temperature - ! and humidity level. -,rhostar_mom(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! Surface air density for momentum -,ashtf_surft(land_pts,nsurft) & - ! Coefficient to calculate surface - ! heat flux into soil (W/m2/K). -,lw_down_surftsum(land_pts) & - ! Gridbox sum of elevation corrections to - ! downward longwave radiation -,lw_down_surftabs(land_pts) - ! Gridbox sum of absolution changes to downward - ! longwave radiation from elevation corrections - -! dummy arrays required for sea and se-ice to create universal -! routines for all surfaces -REAL(KIND=real_jlslsm) :: & - array_zero(t_i_length * t_j_length) & - ! Array of zeros -,zdt_dummy(t_i_length * t_j_length) - ! Dummy array for zdt - -!Gridbox mean values calculated from soil tiled versions for FLAKE -REAL(KIND=real_jlslsm) :: & - hcons_mean_soil(land_pts), & - tsoil_mean_soil(land_pts) - - -! Local scalars :- - -INTEGER :: & - i,j & - ! Loop counter (horizontal field index). -,k & - ! Loop counter (tile field index). -,l & - ! Loop counter (land point field index). -,n & - ! Loop counter (tile index). -,nn & - ! Loop counter (soil carbon layers) -,m & - ! Index for soil tile -,n_veg - ! Actual or dummy pointer to array - ! defined only on PFTs - -REAL(KIND=real_jlslsm) :: & - ds_ratio & - ! 2 * snowdepth / depth of top soil layer. -,d_t & - ! Temporary in calculation of alpha1. -,zetam & - ! Temporary in calculation of CHN. -,zetah & - ! Temporary in calculation of CHN. -,zeta1 & - ! Work space -,z0 & - ! yet more workspace - - ! Temporary variables for adjustment of downwelling - ! logwave to elevation tiles and correction back to - ! conserve gridbox mean -,t_rad - -LOGICAL :: & - l_vegdrag_active_here & - ! Logical to indicate whether the vegetative drag scheme - ! is active on the current surface tile in cases where - ! l_vegdrag_surft itself may not be applicable -,l_shallow_lake_depth(land_pts) - ! Logical to indicate unsuitable shallow lake depth - -REAL(KIND=real_jlslsm) :: sea_point - -INTEGER :: n_diag - -INTEGER :: errcode -CHARACTER(LEN=errormessagelength) :: cmessage - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='CABLE_LAND_SF_EXPLICIT' - -!CABLE_LSM:CM2 -!CABLE TYPES containing field data (IN OUT) -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs_cbl -TYPE(work_vars_type), INTENT(IN OUT) :: work_cbl -TYPE(params_io_data_type), INTENT(IN OUT) :: pars_io_cbl -TYPE(progs_cnp_vars_type), INTENT(IN OUT) :: progs_cnp - -INTEGER :: mype, timestep_number -REAL :: satcon_soilt(land_pts, sm_levels) !0:sm_levels -REAL :: latitude(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL :: longitude(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL :: u_s(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL :: ls_rain(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL :: ls_snow(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - - -logical, save :: first_call = .true. -!CABLE_LSM: End - -!CM3#55 As of 6/12/2023 no attempt is being made to tidy up the workspace - - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -!CABLE_LSM:initia;lize intent(OUT) - HOWEVER, most of these won't even be req^d in cable_land_expl AND others will get a value from -!CABLE - -IF( first_call ) THEN - dtstar_surft(:,:) = 0.0 - resp_l_pft(:,:) = 0.0 - resp_r_pft(:,:) = 0.0 - resp_w_pft(:,:) = 0.0 - n_leaf(:,:) = 0.0 - n_root(:,:) = 0.0 - n_stem(:,:) = 0.0 - lai_bal(:,:) = 0.0 - wt_ext_surft(:,:,:) = 0.0 - tile_frac(:,:) = 0.0 - fsmc_pft(:,:) = 0.0 - gc_corr(:,:) = 0.0 - isoprene_gb(:) = 0.0 - terpene_gb(:) = 0.0 - methanol_gb(:) = 0.0 - acetone_gb(:) = 0.0 - isoprene_pft(:,:) = 0.0 - terpene_pft(:,:) = 0.0 - methanol_pft(:,:) = 0.0 - acetone_pft(:,:) = 0.0 - fapar_diag_pft(:,:) = 0.0 - apar_diag_pft(:,:) = 0.0 - apar_diag_gb(:) = 0.0 - gpp_gb_acc(:) = 0.0 - gpp_pft_acc(:,:) = 0.0 - gs_irr_surft(:,:) = 0.0 - smc_irr_soilt(:,:) = 0.0 - wt_ext_irr_surft(:,:,:) = 0.0 - gc_irr_surft(:,:) = 0.0 - flux_o3_pft(:,:) = 0.0 - fo3_pft(:,:) = 0.0 - gpp(:) = 0.0 - npp(:) = 0.0 - smc_soilt(:,:) = 0.0 - gpp_pft(:,:) = 0.0 - resp_p(:) = 0.0 - g_leaf(:,:) = 0.0 - first_call = .FALSE. -END IF - -!----------------------------------------------------------------------- -! 0. Initialisations -!----------------------------------------------------------------------- - -!$OMP PARALLEL DEFAULT(NONE) PRIVATE(i, j, l, n) & -!$OMP SHARED(t_i_length, t_j_length, array_zero, tdims, rhokm_land, cd_land, & -!$OMP ch_land, zdt_dummy, land_pts, lake_ice_mid_temp, l_shallow_lake_depth, & -!$OMP zdt_surft, db_surft, rhokh_can, nsurft,ftl_surft,fqw_surft, & -!$OMP rib_surft,z0m_surft,u_s_std_surft,chr1p5m,resfs,alpha1,radnet_surft, & -!$OMP scaling_urban,snowdep_surft,snowdepth_surft,sf_diag) -!$OMP DO SCHEDULE(STATIC) -DO i = 1,t_i_length * t_j_length - array_zero(i) = 0.0 - zdt_dummy(i) = 0.0 -END DO -!$OMP END DO NOWAIT - -!$OMP DO SCHEDULE(STATIC) -DO j = tdims%j_start,tdims%j_end - DO i = tdims%i_start,tdims%i_end - rhokm_land(i,j) = 0.0 - cd_land(i,j) = 0.0 - ch_land(i,j) = 0.0 - END DO -END DO -!$OMP END DO NOWAIT - -!$OMP DO SCHEDULE(STATIC) -DO l = 1,land_pts - lake_ice_mid_temp(l) = 0.0 - l_shallow_lake_depth(l) = .FALSE. -END DO -!$OMP END DO NOWAIT - -!----------------------------------------------------------------------- -! 1. Initialise FTL_SURFT and RIB_SURFT on all tiles at all points, -! to allow STASH to process these as diagnostics. -!----------------------------------------------------------------------- -DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - ! MORUSES Initialise urban roughness array - ftl_surft(l,n) = 0.0 - fqw_surft(l,n) = 0.0 - rib_surft(l,n) = 0.0 - z0m_surft(l,n) = 0.0 !jh:can't 0 this AND cancel roughness - u_s_std_surft(l,n) = 0.0 - chr1p5m(l,n) = 0.0 - resfs(l,n) = 0.0 - alpha1(l,n) = 0.0 - !CN2ish!radnet_surft(l,n) = 0.0 - scaling_urban(l,n) = 1.0 - zdt_surft(l,n) = 0.0 - db_surft(l,n) = 0.0 - rhokh_can(l,n) = 0.0 - ! Equivalent snowdepth for surface calculations. - snowdep_surft(l,n) = snowdepth_surft(l,n) - - IF (sf_diag%l_et_stom .OR. sf_diag%l_et_stom_surft) THEN - sf_diag%resfs_stom(l,n) = 0.0 - END IF - END DO -!$OMP END DO NOWAIT -END DO -IF (sf_diag%l_tau_surft) THEN - DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - sf_diag%tau_surft(l,n) = 0.0 - END DO -!$OMP END DO NOWAIT - END DO -END IF -!$OMP END PARALLEL - -!----------------------------------------------------------------------- -! Call TILEPTS to calculate surft_pts and surft_index for surface types -!----------------------------------------------------------------------- -CALL tilepts(land_pts, frac, surft_pts, surft_index, l_lice_point) - -!CABLE_LSM: following CM2 - dodge OMP here -DO n = 1,nsurft - DO l = 1,land_pts - canhc_surft(l,n) = 0.0 - vfrac_surft(l,n) = 0.0 - IF( frac(l,n) == 0.0 ) THEN - cd_surft(l,n) = 0.0 - ch_surft(l,n) = 0.0 - z0h_surft(l,n) = 0.0 - z0m_eff_surft(l,n) = 0.0 - !not In 7.1!rhokpm(l,n) = 0.0 !doesnt go anywhere - radnet_surft(l,n) = 0.0 - fraca(l,n) = 0.0 - resfs(l,n) = 0.0 - resft(l,n) = 0.0 - END IF - END DO -END DO -!CABLE_LSM: End - -!CM3#55-1 -!!----------------------------------------------------------------------- -!! Generate the anthropogenic heat for surface calculations -!!----------------------------------------------------------------------- -!IF ( l_anthrop_heat_src .AND. .NOT. l_aggregate ) THEN -! CALL generate_anthropogenic_heat( curr_day_number, land_pts, frac, & -! surft_pts, surft_index, & -! !New arguments replacing USE statements -! !urban_param (IN) -! wrr_gb, & -! !Fluxes (IN OUT) -! anthrop_heat_surft) -!END IF - -!CABLE_LSM:CM2! Even if this is left in, crashes immediately in call to alb_pft.. -!CM2! Even if this is left in, crashes immediately in call to alb_pft.. -!CM2!!----------------------------------------------------------------------- -!CM2!! Call physiology routine to calculate surface conductances and carbon -!CM2!! fluxes. -!CM2!!----------------------------------------------------------------------- -!CM2!CALL physiol ( & -!CM2! land_pts,land_index, & -!CM2! sm_levels,nsurft,surft_pts,surft_index, & -!CM2! dim_cs1, & -!CM2! co2_mmr,co2_3d,co2_dim_len, co2_dim_row,l_co2_interactive, & -!CM2! can_model,cs_pool_soilt,veg_state,frac,canht_pft,photosynth_act_rad, & -!CM2! lai_pft,pstar,qw_1,sthu_soilt,sthf_soilt,t_soil_soilt,tstar_surft, & -!CM2! smvccl_soilt,smvcst_soilt,smvcwt_soilt,vshr,z0_surft,z1_uv,o3, & -!CM2! canhc_surft,vfrac_surft,emis_surft,l_emis_surft_set,emis_soil,flake, & -!CM2! g_leaf,gs,gc_surft,gc_stom_surft,gc_corr,gpp,gpp_pft,npp,npp_pft, & -!CM2! resp_p,resp_p_pft,resp_s_soilt,resp_l_pft, & -!CM2! resp_r_pft,resp_w_pft,n_leaf, & -!CM2! n_root,n_stem,lai_bal, & -!CM2! smc_soilt,wt_ext_surft,fsmc_pft, & -!CM2! albsoil_soilt,cos_zenith_angle, & -!CM2! can_rad_mod,ilayers,flux_o3_pft,fo3_pft,sf_diag,asteps_since_triffid, & -!CM2! non_lake_frac, & -!CM2! !New arguments replacing USE statements -!CM2! !Fluxes (IN) -!CM2! t_home_gb,t_growth_gb, & -!CM2! !urban_param (IN) -!CM2! emisr_gb, emisw_gb, hwr_gb, & -!CM2! !jules_mod (IN OUT) -!CM2! albobs_scaling_surft, & -!CM2! !jules_chemvars_mod (OUT) -!CM2! isoprene_gb, isoprene_pft, terpene_gb , terpene_pft, & -!CM2! methanol_gb, methanol_pft, acetone_gb, acetone_pft, & -!CM2! !trif_vars_mod (OUT) -!CM2! fapar_diag_pft, apar_diag_pft, apar_diag_gb, gpp_gb_acc, gpp_pft_acc, & -!CM2! !crop_vars_mod (IN) -!CM2! rootc_cpft, sthu_irr_soilt, frac_irr_soilt, frac_irr_surft, dvi_cpft, & -!CM2! !crop_vars_mod (OUT) -!CM2! gs_irr_surft, smc_irr_soilt, wt_ext_irr_surft, gc_irr_surft, & -!CM2! !p_s_parms (IN) -!CM2! bexp_soilt, sathh_soilt, v_close_pft, v_open_pft, & -!CM2! !ancil_info -!CM2! l_soil_point, & -!CM2! !jules_surface_types (IN) -!CM2! diff_frac) - -!CM3#55-2 -!! Update gc_surft for canopy snow if using the canopy snow scheme -!IF ( .NOT. l_aggregate .AND. can_model == 4) THEN -! DO n = 1,npft -! IF ( cansnowtile(n) ) THEN -!!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & -!!$OMP SHARED(surft_pts, surft_index, land_index, t_i_length, & -!!$OMP snow_surft, gc_surft, catch_snow, tstar_surft, & -!!$OMP vshr_land, n) SCHEDULE(STATIC) -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! IF (snow_surft(l,n) > 0.0) THEN -! j = (land_index(l) - 1) / t_i_length + 1 -! i = land_index(l) - (j-1) * t_i_length -! gc_surft(l,n) = 0.06 * snow_surft(l,n)**0.6 * catch_snow(l,n)**0.4 & -! * 2.06e-5 * (tm / tstar_surft(l,n))**1.75 & -! * (1.79+3 * SQRT(vshr_land(i,j))) & -! / (2 * rho_ice * 5.0e-4**2) -! END IF -! END DO -!!$OMP END PARALLEL DO -! END IF -! END DO -!END IF - -!CM3#55-3 - note that at some point CASA variables need to make their way -! into these TRIFFID vars for output purposes -!!---------------------------------------------------------------------- -!! If TRIFFID is being used apply any correction to the land-atmosphere -!! fluxes on the first timestep after the last TRIFFID call. Such a -!! correction will typically be associated with a total depletion of -!! carbon or with maintanence of the seed fraction. The corrections -!! are stored in the accumulation variables after the call to TRIFFID. -!! The correction is added to the instantaneous land-atmosphere fluxes -!! (so that the atmospheric carbon budget is corrected) but is not -!! included in the accumulation variables which drive TRIFFID, since -!! this has already been dealt with during the last TRIFFID call. -!!---------------------------------------------------------------------- -!IF (l_triffid .AND. (asteps_since_triffid == 1) & -! .AND. ( cycleno == numcycles .OR. l_quick_ap2) ) THEN -!!jhan -! DO n = 1,nnpft -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(land_pts, npp_pft, npp_pft_acc, timestep, resp_p_pft, n) -! DO l = 1,land_pts -! npp_pft(l,n) = npp_pft(l,n) + npp_pft_acc(l,n) / timestep -! resp_p_pft(l,n) = resp_p_pft(l,n) - npp_pft_acc(l,n) / timestep -! npp_pft_acc(l,n)=-npp_pft_acc(l,n) -! END DO -!!$OMP END PARALLEL DO -! END DO -! -! ! Here we have assumed that RothC must be used with TRIFFID, and is called -! ! on the same timestep. -! IF ( soil_bgc_model == soil_model_rothc ) THEN -! DO n = 1,dim_cs1 -! DO nn = 1,dim_cslayer -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(land_pts, resp_s_soilt, resp_s_acc_soilt, timestep, n, nn) -! DO l = 1,land_pts -! !soil tiling is not compatible with triffid. OK to hard-code soil -! !tile index to 1 here -! resp_s_soilt(l,1,nn,n) = resp_s_soilt(l,1,nn,n) & -! + (resp_s_acc_soilt(l,1,nn,n) / timestep) -! resp_s_acc_soilt(l,1,nn,n) = -resp_s_acc_soilt(l,1,nn,n) -! END DO -!!$OMP END PARALLEL DO -! END DO -! END DO -! END IF -! -!END IF - -!CM3#55-4 - note that at some point we need to ensure that CABLE values -! into these JULES vars for output purposes -!!---------------------------------------------------------------------- -!! Increment accumulation of leaf turnover rate. -!! This is required for leaf phenology and/or TRIFFID, either of -!! which can be enabled independently of the other. -!!---------------------------------------------------------------------- -!IF ( cycleno == numcycles .OR. l_quick_ap2 ) THEN -! -! IF (l_phenol .AND. .NOT. l_triffid) THEN -! DO n = 1,nnpft -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(n, land_pts, g_leaf_acc, g_leaf, timestep) -! DO l = 1,land_pts -! g_leaf_acc(l,n) = g_leaf_acc(l,n) + & -! g_leaf(l,n) * ( timestep / secs_per_360days ) -! END DO -!!$OMP END PARALLEL DO -! END DO -! END IF - -!!jhan -! !---------------------------------------------------------------------- -! ! Increment accumulation prognostics for TRIFFID -! !---------------------------------------------------------------------- -! IF (l_triffid) THEN -! DO n = 1,nnpft -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(n, land_pts, g_leaf_acc, g_leaf, timestep, & -!!$OMP npp_pft_acc, npp_pft, resp_w_pft_acc, resp_w_pft) -! DO l = 1,land_pts -! g_leaf_acc(l,n) = g_leaf_acc(l,n) + & -! g_leaf(l,n) * ( timestep / secs_per_360days ) -! npp_pft_acc(l,n) = npp_pft_acc(l,n) + npp_pft(l,n) * timestep -! resp_w_pft_acc(l,n) = resp_w_pft_acc(l,n) & -! + resp_w_pft(l,n) * timestep -! END DO -!!$OMP END PARALLEL DO -! END DO -! END IF -! -!IF ( soil_bgc_model == soil_model_rothc ) THEN -! DO n = 1,dim_cs1 -! DO nn = 1,dim_cslayer -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(n, nn, land_pts,resp_s_soilt, resp_s_acc_soilt, timestep) -! DO l = 1,land_pts -! !soil tiling is not compatible with triffid. OK to hard-code soil -! !tile index to 1 here -! ! calculated before resp_frac applied -! resp_s_acc_soilt(l,1,nn,n) = resp_s_acc_soilt(l,1,nn,n) & -! + resp_s_soilt(l,1,nn,n) * timestep -! END DO -!!$OMP END PARALLEL DO -! END DO -! END DO -! END IF -! -!END IF ! CycleNo == NumCycles - -!CM3#55-5 -!!----------------------------------------------------------------------- -!! calculate CO2:(BIO+HUM) ratio, dependent on soil clay content, and -!! sum soil respiration components -!! (RESP_FRAC here then contains the fraction of soil respiration which -!! is respired to the atmos. the rest is re-partitioned into BIO+HUM) -! -!! resp_s_acc_soilt contains the full amount, and this is carried forward to -!! VEG_CTL for use in updating soil carbon pools. RESP_S_TOT calculated -!! here is passed to BL_TRMIX as the fraction which is respired as CO2 -!! to the atmosphere. RESP_S_TOT, and RESP_S are also passed out for -!! storage in diagnostics 3293, and 3467-470. -! -!!----------------------------------------------------------------------- -!IF ( soil_bgc_model == soil_model_rothc ) THEN -! DO j = 1, nsoilt -! DO i = 1, land_pts -! resp_s_tot_soilt(i,j)=0.0 -! END DO -! END DO -! !soil tiling is not compatible with triffid. OK to hard-code soil tile -! !index to 1 here by setting m = 1 -! m = 1 -! DO nn = 1,dim_cslayer -! DO i = 1,land_pts -! work_clay = EXP(-0.0786 * 100.0 * clay_soilt(i,m,nn)) -! resp_frac(i,nn) = (3.0895+2.672 * work_clay) / & -! (4.0895+2.672 * work_clay) -! resp_s_soilt(i,m,nn,1) = resp_s_soilt(i,m,nn,1) * resp_frac(i,nn) -! resp_s_soilt(i,m,nn,2) = resp_s_soilt(i,m,nn,2) * resp_frac(i,nn) -! resp_s_soilt(i,m,nn,3) = resp_s_soilt(i,m,nn,3) * resp_frac(i,nn) -! resp_s_soilt(i,m,nn,4) = resp_s_soilt(i,m,nn,4) * resp_frac(i,nn) -! resp_s_tot_soilt(i,m) = resp_s_tot_soilt(i,m) & -! + resp_s_soilt(i,m,nn,1) & -! + resp_s_soilt(i,m,nn,2) & -! + resp_s_soilt(i,m,nn,3) & -! + resp_s_soilt(i,m,nn,4) -! END DO ! layers -! END DO ! points -!END IF - -!CM3#55-6 - CABLE always runs with tiles -!!----------------------------------------------------------------------- -!! Reset surft_pts and surft_index and set tile fractions to 1 if aggregate -!! tiles are used (L_AGGREGATE=.T.). -!! Otherwise, set tile fractions to surface type fractions. -!!----------------------------------------------------------------------- -!IF (l_aggregate) THEN -! surft_pts(1) = land_pts -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!!$OMP SHARED(land_pts, tile_frac, surft_index) -! DO l = 1,land_pts -! tile_frac(l,1) = 1.0 -! surft_index(l,1) = l -! END DO -!!$OMP END PARALLEL DO -!ELSE - DO n = 1,ntype -!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!$OMP SHARED(land_pts, tile_frac, frac, n) - DO l = 1, land_pts - tile_frac(l,n) = frac(l,n) - END DO -!$OMP END PARALLEL DO - END DO -!END IF - -IF (land_pts > 0) THEN ! Omit if no land points - - !CM3#55-7 - CABLE needs to provide values for hcons_soilt and hcons_snow - ! retain for now but ideally we'd use CABLE science not JULES science - !----------------------------------------------------------------------- - ! Calculate the thermal conductivity of the top soil layer. - !----------------------------------------------------------------------- - DO m = 1, nsoilt - CALL heat_con (land_pts,hcon_soilt,sthu_soilt(:,m,1), & - sthf_soilt(:,m,1),smvcst_soilt(:,m,1),hcons_soilt(:,m)) - END DO - - ! Thermal conductvity of top snow layer if nsmax > 0 - !CM2!IF (nsmax > 0) THEN - !CM2! DO n = 1,nsurft - !CM2! CALL snowtherm(land_pts,surft_pts(n),nsnow_surft(:,n), & - !CM2! surft_index(:,n),ds_surft(:,n,:),sice_surft(:,n,:), & - !CM2! sliq_surft(:,n,:),csnow,ksnow) - !CM2! DO l = 1,land_pts - !CM2! hcons_snow(l,n) = ksnow(l,1) - !CM2! END DO - !CM2! END DO - !CM2!END IF - -END IF ! End test on land points - -!CM3#55-8 - correctly removed already -!----------------------------------------------------------------------- -! Calculate net radiation on land tiles -!----------------------------------------------------------------------- -!CM2!$OMP PARALLEL & -!CM2!$OMP DEFAULT(NONE) & -!CM2!$OMP PRIVATE(l,k,j,i,n) & -!CM2!$OMP SHARED(surft_pts,surft_index,land_index,pdims,radnet_surft,sw_surft, & -!CM2!$OMP emis_surft,sky,lw_down,tstar_surft,nsurft,l_skyview) -!CABLE_LSM:CM2 -!CM2IF (l_skyview) THEN -!CM2 DO n = 1,nsurft -!CM2!$OMP DO SCHEDULE(STATIC) -!CM2 DO k = 1,surft_pts(n) -!CM2 l = surft_index(k,n) -!CM2 j=(land_index(l) - 1) / pdims%i_end + 1 -!CM2 i = land_index(l) - (j-1) * pdims%i_end -!CM2 radnet_surft(l,n) = sw_surft(l,n) + emis_surft(l,n) * & -!CM2 sky(i,j) * ( lw_down(i,j) - sbcon * tstar_surft(l,n)**4 ) -!CM2 END DO -!CM2!$OMP END DO NOWAIT -!CM2 END DO -!CM2ELSE -!CM2 DO n = 1,nsurft -!CM2!$OMP DO SCHEDULE(STATIC) -!CM2 DO k = 1,surft_pts(n) -!CM2 l = surft_index(k,n) -!CM2 j=(land_index(l) - 1) / pdims%i_end + 1 -!CM2 i = land_index(l) - (j-1) * pdims%i_end -!CM2 radnet_surft(l,n) = sw_surft(l,n) + emis_surft(l,n) * & -!CM2 ( lw_down(i,j) - sbcon * tstar_surft(l,n)**4 ) -!CM2 END DO -!CM2!$OMP END DO NOWAIT -!CM2 END DO -!CM2END IF -!CM2!!$OMP END PARALLEL - - -!----------------------------------------------------------------------- -! 4. Surface turbulent exchange coefficients and "explicit" fluxes -! (P243a, routine SF_EXCH). -! Wind mixing "power" and some values required for other, later, -! diagnostic calculations, are also evaluated if requested. -!----------------------------------------------------------------------- - -!CM3#55-9 -!IF ( l_rp2 .AND. i_rp_scheme == i_rp2b) THEN -! DO n = 1,npft -! z0h_z0m(n) = z0hm_pft_rp(n) -! END DO -!END IF - -!CM3#55-10 - note that snowdep_surft needs to take CABLE value - check - -!$OMP PARALLEL PRIVATE(i,j,l,n) DEFAULT(NONE) IF(land_pts>1) & -!$OMP SHARED(land_pts,nsurft,land_index, flandg,z_land,t_i_length, & -!$OMP can_model,cansnowtile,l_snowdep_surf,snow_surft,rho_snow_const, & -!$OMP snowdep_surft,surf_hgt_surft,ctile_orog_fix,l_ctile) -!DO n = 1,nsurft -! IF ( (can_model == 4) .AND. cansnowtile(n) .AND. l_snowdep_surf ) THEN -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1,land_pts -! snowdep_surft(l,n) = snow_surft(l,n) / rho_snow_const -! END DO -!!$OMP END DO NOWAIT -! END IF -!END DO - -!CM3#55-11 -IF (ctile_orog_fix == correct_sea_adjust_land .AND. l_ctile) THEN -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - IF (flandg(i,j) > 0.0 .AND. flandg(i,j) < 1.0) THEN - ! calculate height of orography relative to grid-box mean - ! limit this to 1000m. z_land already limited to be > 0 - ! in ni_bl_ctl - surf_hgt_surft(l,:) = MIN(z_land(i,j) * (1.0 / flandg(i,j) - 1.0),1000.0) - END IF - END DO -!$OMP END DO NOWAIT -END IF -!$OMP END PARALLEL - -!CM3#55-12 -! Calculate temperature and specific humidity for elevation bands -CALL elevate( & - land_pts,nsurft,surft_pts,land_index,surft_index, & - tl_1,qw_1,pstar,surf_hgt_surft,l_elev_absolute_height,z_land, & - t_elev,q_elev) - - -!----------------------------------------------------------------------- -! 2. Calculate QSAT values required later. -!----------------------------------------------------------------------- -!CM3#55-13 - -!$OMP PARALLEL DO IF(land_pts > 1) DEFAULT(NONE) PRIVATE(i, j, l) & -!$OMP SHARED(land_index, land_pts, pstar, pstar_land, t_i_length) & -!$OMP SCHEDULE(STATIC) -DO l = 1,land_pts - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - pstar_land(l) = pstar(i,j) -END DO -!$OMP END PARALLEL DO - -IF (l_mr_physics) THEN -!$OMP PARALLEL DO IF(nsurft > 1) DEFAULT(NONE) PRIVATE(n) & -!$OMP SHARED(nsurft,qstar_surft,tstar_surft,pstar_land,land_pts, & -!$OMP qs1_elev,t_elev) SCHEDULE(STATIC) - DO n = 1,nsurft - CALL qsat_mix(qstar_surft(:,n),tstar_surft(:,n),pstar_land,land_pts) - CALL qsat_mix(qs1_elev(:,n),t_elev(:,n),pstar_land,land_pts) - END DO -!$OMP END PARALLEL DO -ELSE -!$OMP PARALLEL DO IF(nsurft > 1) DEFAULT(NONE) PRIVATE(n) & -!$OMP SHARED(nsurft,qstar_surft,tstar_surft,pstar_land,land_pts, & -!$OMP qs1_elev,t_elev) SCHEDULE(STATIC) - DO n = 1,nsurft - CALL qsat(qstar_surft(:,n),tstar_surft(:,n),pstar_land,land_pts) - CALL qsat(qs1_elev(:,n),t_elev(:,n),pstar_land,land_pts) - END DO -!$OMP END PARALLEL DO -END IF - -!CM3#55-14 -!----------------------------------------------------------------------- -!! Calculate gradient of saturated specific humidity for use in -!! calculation of surface fluxes -!----------------------------------------------------------------------- -!$OMP PARALLEL DEFAULT(NONE) PRIVATE(k,l,n,d_t, i, j) & -!$OMP SHARED(nsurft,surft_pts,surft_index,tstar_surft,t_elev,alpha1, & -!$OMP qstar_surft,qs1_elev,epsil,c_virtual,r, tdims,rhostar_mom,rhostar) -DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - d_t = tstar_surft(l,n) - t_elev(l,n) - IF (d_t > 0.05 .OR. d_t < -0.05) THEN - alpha1(l,n) = (qstar_surft(l,n) - qs1_elev(l,n)) / d_t - ELSE IF (t_elev(l,n) > tm) THEN - alpha1(l,n) = epsil * lc * qs1_elev(l,n) * & - (1.0 + c_virtual * qs1_elev(l,n)) / & - ( r * t_elev(l,n) * t_elev(l,n)) - ELSE - alpha1(l,n) = epsil * ls * qs1_elev(l,n) * & - (1.0 + c_virtual * qs1_elev(l,n)) / & - ( r * t_elev(l,n) * t_elev(l,n)) - END IF - END DO -!$OMP END DO NOWAIT -END DO - -!----------------------------------------------------------------------- -! If requested, improve accuracy of air density, rhostar -! On input rhostar = pstar/R*Tstar -!----------------------------------------------------------------------- -!$OMP DO SCHEDULE(STATIC) -DO j = tdims%j_start,tdims%j_end - DO i = tdims%i_start,tdims%i_end - ! original approximation for surface air density - rhostar_mom(i,j) = rhostar(i,j) - END DO -END DO -!$OMP END DO -!$OMP END PARALLEL - -IF (l_accurate_rho) THEN - ! More accurate expressions for surface air density. - ! Use bottom level vapour as a better approximation over land - ! than qsat(tstar) - CALL calc_air_dens(l_mr_physics,qw_1,rhostar,rhostar_mom) - -END IF ! l_accurate_rho - -!CM3#55-16 -!! Initialise scaling_urban to 1.0 so that it only affects urban tiles when -!! MORUSES used with no aggregation. -!IF ( .NOT. l_aggregate .AND. l_moruses_storage ) THEN -! n = urban_canyon -!!$OMP PARALLEL DO IF(land_pts > 1) DEFAULT(NONE) PRIVATE(l) SHARED(land_pts, & -!!$OMP n, scaling_urban, tile_frac, urban_roof) SCHEDULE(STATIC) -! DO l = 1, land_pts -! IF ( tile_frac(l,n) > 0.0 ) THEN -! scaling_urban(l,n) = & -! ( tile_frac(l,n) + tile_frac(l,urban_roof) ) / & -! tile_frac(l,n) -! END IF -! END DO -!!$OMP END PARALLEL DO -!END IF - -!CM3#55-17 -!! Calculate average layer temperature and conductivity for lakes. -!! This is a fudge - a layer with average properties won't -!! really behave like a stack of layers with different properties. -!! -!IF ( l_flake_model & -! .AND. ( .NOT. l_aggregate)) THEN -! -! !============================================================================== -! ! *NOTICE REGARDING SOIL TILING** -! ! -! !The following section facilitates the use of soil tiling. As implemented, -! !there are two soil tiling options: -! ! -! !nsoilt == 1 -! !Operate as with a single soil tile, functionally identical to JULES upto -! ! at least vn4.7 (Oct 2016) -! ! This means that a soilt variable being passed 'up' to the surface is -! ! broadcast to the surft variable (with weighting by frac if requred) -! ! -! !nsoilt > 1 -! !Operate with nsoilt = nsurft, with a direct mapping between them -! ! This means that a soilt variable being passed 'up' to the surface is simply -! ! copied into the surft variable -! ! -! ! This will need to be refactored for other tiling approaches. This note -! ! will be replicated elsewhere in the code as required -! ! -! !These comments apply until **END NOTICE REGARDING SOIL TILING** -! !============================================================================== -! -!!$OMP PARALLEL DEFAULT(NONE) PRIVATE(l, m) & -!!$OMP SHARED(l_flake_model, l_aggregate, land_pts, nsoilt, hcon_lake, & -!!$OMP dzsoil, hcons_mean_soil, hcons_soilt, t_soil_soilt, tile_frac, & -!!$OMP lake_h_ice_gb, snow_hcon, lake_depth_gb, nusselt_gb, & -!!$OMP g_dt_gb, ts1_lake_gb, lake_t_mxl_gb, lake_t_ice_gb, & -!!$OMP tsoil_mean_soil, lake_ice_mid_temp, l_shallow_lake_depth) -! -! ! Initialise thermal variables to zero and then set to mean soil values -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1, land_pts -! hcons_mean_soil(l) = 0.0 -! tsoil_mean_soil(l) = 0.0 -! hcon_lake(l) = 0.0 -! ts1_lake_gb(l) = 0.0 -! END DO -!!$OMP END DO -! IF (nsoilt == 1) THEN -! !Just 1 soil tile -! m = 1 -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1, land_pts -! hcons_mean_soil(l) = hcons_soilt(l,m) -! tsoil_mean_soil(l) = t_soil_soilt(l,m,1) -! END DO -!!$OMP END DO -! ELSE -! !Surface tiles map directly on to soil tiles -!!$OMP DO SCHEDULE(STATIC) -! DO m = 1,nsoilt -! DO l = 1, land_pts -! hcons_mean_soil(l) = hcons_mean_soil(l) & -! + (tile_frac(l,m) * hcons_soilt(l,m)) -! tsoil_mean_soil(l) = tsoil_mean_soil(l) & -! + (tile_frac(l,m) * t_soil_soilt(l,m,1)) -! END DO -! END DO -!!$OMP END DO -! END IF -! -! !============================================================================== -! ! *END NOTICE REGARDING SOIL TILING** -! !============================================================================== -! -! IF (dzsoil(1) <= 0.0) THEN -! ! -! ! catch-all for sillies - just use soil value -! ! -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1, land_pts -! hcon_lake(l) = hcons_mean_soil(l) -! ts1_lake_gb(l) = tsoil_mean_soil(l) -! END DO -!!$OMP END DO NOWAIT -! -! ELSE -! -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1, land_pts -! -! IF ( dzsoil(1) <= lake_h_ice_gb(l) ) THEN -! -! ! Near surface layer is entirely within the ice. Set conductivity -! ! to ice value and use piecewise linear interpolation to find -! ! temperature at midpoint of near surface layer. -! hcon_lake(l) = hcice -! ts1_lake_gb(l) = lake_t_ice_gb(l) + (dzsoil(1) / 2.0) * & -! (lake_t_mxl_gb(l) - lake_t_ice_gb(l)) & -! / lake_h_ice_gb(l) -! -! ELSE IF ( (dzsoil(1) > lake_h_ice_gb(l)) & -! .AND. (dzsoil(1) <= (lake_h_ice_gb(l) & -! +lake_depth_gb( l)))) THEN -! -! ! Set conductivity as weighted average of ice and water based upon -! ! realtive thicknesses and the Nusselt number -! nusselt_gb(l) = g_dt_gb(l) * (dzsoil(1) - lake_h_ice_gb(l) ) & -! / ( 2.0 * hcwat ) -! nusselt_gb(l) = MAX( nusselt_gb(l), 1.0 ) -! hcon_lake(l) = ( hcice * lake_h_ice_gb(l) & -! +hcwat * (dzsoil(1) - lake_h_ice_gb(l))) & -! * nusselt_gb(l) & -! / dzsoil(1) -! -! ! Find temperature mid-way through the ice layer -! ! (temperature varies linearly across ice layer) -! lake_ice_mid_temp(l) = lake_t_ice_gb(l) + 0.5 * (lake_t_mxl_gb(l) & -! - lake_t_ice_gb(l)) -! -! ! Calculate temperature as weighted average of temperature in ice layer -! ! and mixed layer temp for near surface water beneath the ice. -! ts1_lake_gb(l) = (lake_ice_mid_temp(l) * lake_h_ice_gb(l) & -! + lake_t_mxl_gb(l) * (dzsoil(1) - lake_h_ice_gb(l))) & -! / dzsoil(1) -! -! ELSE -! -! ! Lake depth is less than first soil layer thickness so set logical -! ! to write our warning message. -! l_shallow_lake_depth(l) = .TRUE. -! -! ! Set conductivity as weighted average of ice and water and soil -! ! based upon realtive thicknesses and the Nusselt number -! ! Use soil value for the temperature -! nusselt_gb(l) = g_dt_gb(l) * lake_depth_gb(l) & -! / ( 2.0 * hcwat ) -! nusselt_gb(l) = MAX( nusselt_gb(l), 1.0 ) -! hcon_lake(l) = ( hcice * lake_h_ice_gb(l) & -! + hcwat * lake_depth_gb(l) * nusselt_gb(l) & -! + hcons_mean_soil(l) * (dzsoil(1) & -! - lake_h_ice_gb(l) - lake_depth_gb(l))) & -! / dzsoil(1) -! ts1_lake_gb(l) = tsoil_mean_soil(l) -! -! END IF -! END DO -!!$OMP END DO NOWAIT -! END IF -!!$OMP END PARALLEL -! -! ! Write out warning message for negative top soil layer thinkness -! ! or lake depth less than first soil layer thinkness -! IF (dzsoil(1) <= 0.0) THEN -! errcode = -1 -! WRITE(cmessage, '(A,F16.4)') 'Negative value of dzsoil = ', dzsoil(1) -! CALL ereport(routinename, errcode, cmessage) -! END IF -! -! IF ( ANY(l_shallow_lake_depth(1:land_pts)) ) THEN -! errcode = -1 -! WRITE(cmessage, '(A,F16.4)') 'Unusual value of lake depth found '// & -! 'when computing hcon_lake. Found ' // & -! 'lake depth comparable to first ' // & -! 'soil layer: dzsoil= ', dzsoil(1) -! CALL ereport(routinename, errcode, cmessage) -! END IF -! -!END IF - -!CM3#55-18 -DO n = 1,nsurft -!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(l) & -!$OMP SHARED(n, land_pts, lw_down_elevcorr_surft) - DO l = 1,land_pts - lw_down_elevcorr_surft(l,n) = 0.0 - END DO -!$OMP END PARALLEL DO -END DO - -!CM3#55-19 - moving the necessary parts to after the call to CABLE -!IF( first_call ) THEN -! emis_surft = 1.0 -! emis_soil = 1.0 -! hcons_snow = hcons_soilt(1,1) -! first_call = .FALSE. -!END IF -!hcons_surf = hcons_soilt(1,1) -!hcons_snow = hcons_soilt(1,1) - -!CM3#55-20 -IF (l_elev_lw_down) THEN - - ! for tiles at different elevations, adjust downwelling longwave - ! according to the anomaly in surface temperature that has been - ! calculated with LW ~ T^4 - DO l = 1,land_pts - lw_down_surftsum(l) = 0.0 - lw_down_surftabs(l) = 0.0 - END DO - - DO n = 1,nsurft - DO l = 1,land_pts - j = (land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - IF (lw_down(i,j) > 0.0) THEN - - ! Adjust radiative temperature and net longwave - t_rad = 0.0 - IF (t_elev(l,n) > 0.0 ) THEN - t_rad = (lw_down(i,j) / sbcon)**(1.0 / 4.0) - t_rad = t_rad + t_elev(l,n) - tl_1(i,j) - lw_down_elevcorr_surft(l,n) = sbcon * (t_rad**4) - lw_down(i,j) - END IF - - ! Keep track of total adjustments to longwave - lw_down_surftsum(l) = lw_down_surftsum(l) + & - lw_down_elevcorr_surft(l,n) * tile_frac(l,n) - lw_down_surftabs(l) = lw_down_surftabs(l) + & - ABS(lw_down_elevcorr_surft(l,n)) * tile_frac(l,n) - END IF - END DO - END DO - - DO l = 1,land_pts - j = (land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - IF (lw_down(i,j) > 0.0) THEN - IF (lw_down_surftabs(l) > EPSILON(0.0)) THEN - ! correct each adjustment to preserve the gridbox mean. - ! size of correction in proportion to the size of adjustment - ! so that unadjusted tiles remain unaffected - DO n = 1,nsurft - lw_down_elevcorr_surft(l,n) = lw_down_elevcorr_surft(l,n) & - - lw_down_surftsum(l) & - * ABS(lw_down_elevcorr_surft(l,n)) & - / lw_down_surftabs(l) - END DO - END IF - END IF - END DO - - !CM3#55-20 - these lines are correctly removed -!CM2! ! Adjust the net radiation -!CM2! DO n = 1,nsurft -!CM2! DO l = 1,land_pts -!CM2! j = (land_index(l) - 1) / t_i_length + 1 -!CM2! i = land_index(l) - (j-1) * t_i_length -!CM2! IF (lw_down(i,j) > 0.0) THEN -!CM2! IF (l_skyview) THEN -!CM2! radnet_surft(l,n) = radnet_surft(l,n) & -!CM2! + sky(i,j) * emis_surft(l,n) & -!CM2! * lw_down_elevcorr_surft(l,n) -!CM2! ELSE -!CM2! radnet_surft(l,n) = radnet_surft(l,n) & -!CM2! + emis_surft(l,n) * lw_down_elevcorr_surft(l,n) -!CM2! END IF -!CM2! END IF -!CM2! END DO -!CM2! END DO -END IF - -!============================================================================= -!CM3#55 - at this point all of the forcing for CABLE has been created - -! so call CABLE and then map remaining values back to JULES variables -! where needed. - -!CABLE_LSM:CM2.5 Oddly tstar_surft is declared as INTENT(IN) above!! -! This is important may need to be followed up as the INTENTs are likely inherited -! - the simplest work around would be to not UNPACK %trad to tstar_surft -! in the explicit section. -! -! However we do NEED to provide a value for dtstar_surft - this is missing -! -! Also we may wish to force cable with lw_down_elevcorr_surft not lw_down -CALL cable_explicit_main( & - ! IN: UM/JULES model/grid parameters, fields, mappings - mype, timestep, timestep_number, tdims%i_end, tdims%j_end, land_pts, & - nsurft, npft, sm_levels, dzsoil, land_index, surft_pts, surft_index, & - cos_zenith_angle, latitude, longitude, Flandg, tile_frac, & - - ! IN: soil parameters !1 is only allowable index in UM - bexp_soilt(:,1,:), hcon_soilt(:,1), satcon_soilt(:,:), & - sathh_soilt(:,1,:), smvcst_soilt(:,1,:), smvcwt_soilt(:,1,:), & - smvccl_soilt(:,1,:), albsoil_soilt(:,1), & - - ! IN: Met forcing: - lw_down, sw_surft, ls_rain, ls_snow, & - tl_1, qw_1, vshr_land, pstar, z1_tq, z1_uv, canopy, & - ! This an outlier IN here. INOUT @ implicit. (was)OUT at extras - ! I think we are dealing with it OK now but confusion could be removed - snow_surft, & - - ! IN: canopy height, LAI seasonally presecribed, potentially prognostic - ! IN: CO2 mass mixing ratio - canht_pft, lai_pft, co2_mmr, & - - ! TYPEs passed from top_level to maintain scope, access to UM STASH - ! IN: tiled soil/snow prognostics - IN here. INOUT @ implicit - ! INOUT: Carries fields needed by CABLE b/n pathways (rad, explicit etc) - ! Currently carrying CABLE TYPEs (canopy%, rad% etc). - ! IN: pars carries vegin/soilin - potentially redundant - progs_cbl, work_cbl, pars_io_cbl, & - - ! OUT: UM fields UNPACKed from CABLE (@ explicit) - ftl_surft, fqw_surft, tstar_surft, dtstar_surft, u_s, u_s_std_surft, & - cd_surft, ch_surft, radnet_surft, fraca, resfs, resft, z0h_surft, & - z0m_surft, recip_l_MO_surft, epot_surft, npp_pft_acc, resp_w_pft_acc ) - -! hard-wire CABLE emissivities into respective JULES vars - CM3#55-19 -! hcons_surf and hcons_snow should not need filling again -DO l=1,land_pts - emis_soil(l) = 1.0 -END DO - -DO n=1,nsurft - DO l=1,land_pts - emis_surft(l,n) = 1.0 - flake(l,n) = 0.0 !CM2-era overwrite - CM#55-24 - END DO -END DO - -!pass CABLE non-topography impacted values for drag & fr velo into JULES variables -DO n=1,nsurft - DO l=1,land_pts - cd_std(l,n) = cd_surft(l,n) - v_s_surft(l,n) = u_s_std_surft(l,n) !estimate of fr vel with topography - v_s_std(l,n) = u_s_std_surft(l,n) !value of fraction velocity no topography - z0m_eff_surft(l,n) = z0m_surft(l,n) !default topograhic roughness (?needed) - END DO -END DO - - -!CM3#55-22 CM3#55-23 -!recip_l_mo_surft = 1.0 !? -!v_s_std = 1.0e-6 !? -!CM3#55-24 - noting the link to resfs -!flake =0.0 !CABLE_LSM:CM2clobbered flake - -!CM3#55 - from here on goes a set of mappings from CABLE to JULES and/or from -! JULES to JULES given a CABLE variable has been given earlier. -! -! variables that need thought are resft, hcons_soilt, hcons_snow, cd_surft, ch_surft, -! other parts of classic aerosol and dust code, ashtf_surft and ashtf_prime_surft -! -! we are looking to avoid any calls to fcdch (the science is complicated and does not -! follow CABLE science) and sf_flux -!CABLE_LSM: End -!============================================================================== - -!============================================================================== -! *NOTICE REGARDING SOIL TILING** -! -!The following section facilitates the use of soil tiling. As implemented, -!there are two soil tiling options: -! -!nsoilt == 1 -!Operate as with a single soil tile, functionally identical to JULES upto -! at least vn4.7 (Oct 2016) -! This means that a soilt variable being passed 'up' to the surface is -! broadcast to the surft variable (with weighting by frac if requred) -! -!nsoilt > 1 -!Operate with nsoilt = nsurft, with a direct mapping between them -! This means that a soilt variable being passed 'up' to the surface is simply -! copied into the surft variable -! -! This will need to be refactored for other tiling approaches. This note -! will be replicated elsewhere in the code as required -! -!These comments apply until **END NOTICE REGARDING SOIL TILING** -!============================================================================== - -!CM3#55-21 - hoping to be able to set ashtf_surft = 1.0 and ahstf_prime_surft=1.0 -! and bypass all of this -!DO n = 1,nsurft -! -! !Set the current soil tile (see notice above) -! IF (nsoilt == 1) THEN -! !There is only 1 soil tile -! m = 1 -! ELSE ! nsoilt == nsurft -! !Soil tiles map directly on to surface tiles -! m = n -! END IF !nsoilt -! -! ! Set up soil and surface thermal properties -!!$OMP PARALLEL DO IF(land_pts > 1) DEFAULT(NONE) & -!!!$OMP PRIVATE(i, j, l, ds_ratio) & -!!$OMP SHARED(land_pts, land_index, t_i_length, tsurf, t_soil_soilt, t_elev, & -!!$OMP tl_1, & -!!$OMP dzsurf, dzsoil, hcons_surf, hcons_soilt, canhc_surf, canhc_surft, & -!!$OMP nsmax, nsnow_surft, tsnow_surft, ds_surft, hcons_snow, & -!!$OMP cansnowtile, snowdepth_surft, snow_hcon, & -!!$OMP l_snow_nocan_hc, l_flake_model, l_aggregate, lake, & -!!$OMP n, m, ts1_lake_gb, hcon_lake, l_elev_land_ice, l_lice_point, & -!!$OMP tsurf_elev_surft, dzsoil_elev, l_lice_surft, hcondeep, & -!!$OMP l_moruses_storage, urban_roof, l_fix_moruses_roof_rad_coupling, & -!!$OMP vfrac_surft, ashtf_surft, scaling_urban, l_soil_point) & -!!$OMP SCHEDULE(STATIC) -! DO l = 1,land_pts -! j = (land_index(l) - 1) / t_i_length + 1 -! i = land_index(l) - (j-1) * t_i_length -! hcons_surf(l,n) = hcons_soilt(l,m) -! IF (l_elev_land_ice .AND. l_lice_point(l)) THEN -! -! ! Land ice -! tsurf(l,n) = tsurf_elev_surft(l,n) -! dzsurf(l,n) = dzsoil_elev -! canhc_surf(l,n) = 0.0 -! IF (l_lice_surft(n)) THEN -! hcons_surf(l,n) = snow_hcon -! ELSE -! hcons_surf(l,n) = hcondeep -! END IF -! ELSE -! -! ! Soil -! tsurf(l,n) = t_soil_soilt(l,m,1) + t_elev(l,n) - tl_1(i,j) -! dzsurf(l,n) = dzsoil(1) -! hcons_surf(l,n) = hcons_soilt(l,m) -! canhc_surf(l,n) = canhc_surft(l,n) -! END IF -! IF ( (l_flake_model ) & -! .AND. ( .NOT. l_aggregate) & -! .AND. (n == lake )) THEN -! -! ! Lake -! tsurf(l,n) = ts1_lake_gb(l) + t_elev(l,n) - tl_1(i,j) -! hcons_surf(l,n) = hcon_lake(l) -! dzsurf(l,n) = dzsoil(1) -! END IF -! IF ((nsmax > 0) .AND. (nsnow_surft(l,n) > 0)) THEN -! -! ! Snow -! tsurf(l,n) = tsnow_surft(l,n,1) -! ! change the effective surface layer thickness for snow -! dzsurf(l,n) = ds_surft(l,n,1) -! hcons_surf(l,n) = hcons_snow(l,n) -! IF ( ( .NOT. cansnowtile(n)) .AND. l_snow_nocan_hc .AND. & -! (nsmax > 0) .AND. (nsnow_surft(l,n) > 0) ) canhc_surf(l,n) = 0.0 -! END IF -! -! ! MORUSES: Uncouple the roof for perfect insulation. hcons should only be zero -! ! to change the "conductive" coupling to "uncoupled" otherwise it is radiatively -! ! coupled. -! IF ( .NOT. l_aggregate .AND. l_moruses_storage .AND. n == urban_roof ) THEN -! IF ( l_fix_moruses_roof_rad_coupling ) THEN -! IF (vfrac_surft(l,n) == 0.0) THEN -! hcons_surf(l,n) = 0.0 -! END IF -! ELSE -! hcons_surf(l,n) = 0.0 -! END IF -! END IF -! -! ! Set up surface soil condictivity -! ashtf_surft(l,n) = 2.0 *hcons_surf(l,n) / MAX( dzsurf(l,n), dzsoil(1) ) -! ! Except when n == urban_canyon when MORUSES is used -! ! scaling_urban(l) = 1.0 -! ashtf_surft(l,n) = ashtf_surft(l,n) * scaling_urban(l,n) -! -! ! Adjust surface soil condictivity for snow -! IF (snowdepth_surft(l,n) > 0.0 .AND. l_soil_point(l) & -! .AND. nsnow_surft(l,n) == 0 ) THEN -! IF ( l_moruses_storage .AND. n == urban_roof ) THEN -! ! This required as HCONS(L) = 0 in this case. -! ashtf_surft(l,n) = 0.0 -! ELSE -! ds_ratio = 2.0 * snowdepth_surft(l,n) / dzsurf(l,n) -! IF (ds_ratio <= 1.0) THEN -! ashtf_surft(l,n) = ashtf_surft(l,n) / & -! (1.0 + ds_ratio * (hcons_surf(l,n) / snow_hcon - 1.0)) -! ELSE -! ashtf_surft(l,n) = ashtf_surft(l,n) * & -! snow_hcon / hcons_surf(l,n) -! END IF -! END IF -! END IF -! -! END DO -!!$OMP END PARALLEL DO -!END DO -!============================================================================== -! *END NOTICE REGARDING SOIL TILING** -!============================================================================== - - -!----------------------------------------------------------------------- -! 3. Calculation of transfer coefficients and surface layer stability -!----------------------------------------------------------------------- - -!----------------------------------------------------------------------- -! 3.1 Calculate neutral roughness lengths -!----------------------------------------------------------------------- - -! Land tiles -!jh:could be able to dodge all these roughness calcs - test re-instating them -!jh!alla CM2 -!jh! Z0_SURFT contains the appropriate value for land-ice points, but has to -!jh! be modified for snow-cover on non-land-ice points. Thermal roughness -!jh! lengths are set to be proportional to the tiled roughness length in -!jh! the case of multiple tiles, but if tiled properties have already -!jh! been aggregated, an adjustment for snow cover is required. In this case -!jh! a ratio of 0.1 between the thermal and momentum roughness lengths over -!jh! snow is assumed; to do otherwise would require reaggregation. In the -!jh! case of multiple tiles, the assignment is delayed until the urban -!jh! options have been considered. -!jh! -!jh!$OMP PARALLEL DO IF(nsurft > 1) DEFAULT(NONE) PRIVATE(k, l, n, z0, zeta1) & -!jh!$OMP SHARED(nsurft, surft_pts, surft_index, snow_surft, & -!jh!$OMP l_soil_point, z0_surft, snowdep_surft, l_aggregate, & -!jh!$OMP i_aggregate_opt, z0h_surft_bare, z0m_surft, & -!jh!$OMP l_moruses_rough_surft, z0h_z0m, z0h_surft, & -!jh!$OMP z0h_surft_classic, & -!jh!$OMP z0h_z0m_classic) SCHEDULE(STATIC) -!jh -!jh!CM3#55-22 - only need to fill a value for classic stuff here -!jh!DO n = 1,nsurft -!jh !! MORUSES parameterises z0m and z0h differently and are not affected by snow -!jh !! in the same way so are dealt with independently -!jh !IF ( .NOT. l_moruses_rough_surft(n) ) THEN -!jh ! DO k = 1,surft_pts(n) -!jh ! l = surft_index(k,n) -!jh !IF ( snow_surft(l,n) > 0.0 .AND. l_soil_point(l) ) THEN -!jh ! z0 = z0_surft(l,n) - 0.1 * snowdep_surft(l,n) -!jh ! zeta1 = MIN( 5.0e-4 , z0_surft(l,n) ) -!jh ! z0m_surft(l,n) = MAX( zeta1 , z0 ) -!jh ! ! Set z0h_surft explicitly if this option is selected, -!jh ! ! otherwise, it will be set for the first tile below. -!jh ! IF (l_aggregate .AND. i_aggregate_opt == 1) THEN -!jh ! z0 = z0h_surft_bare(l,n) - 0.1 * 0.1 * snowdep_surft(l,n) -!jh ! zeta1 = MIN( 5.0e-5 , z0h_surft_bare(l,n) ) -!jh ! z0h_surft(l,n) = MAX( zeta1 , z0 ) -!jh ! END IF -!jh !ELSE -!jh ! z0m_surft(l,n) = z0_surft(l,n) -!jh ! ! Set z0h_surft explicitly if this option is selected, -!jh ! ! otherwise, it will be set for the first tile below. -!jh ! IF (l_aggregate .AND. i_aggregate_opt == 1) & -!jh ! z0h_surft(l,n) = z0h_surft_bare(l,n) -!jh !END IF -!jh -!jh !! Set the thermal roughness length if aggregation is not being -!jh !! carried out, or if the original scheme is being used. -!jh !! It must be done here for consistency with the urban options. -!jh !IF ( ( .NOT. l_aggregate) .OR. & -!jh ! (l_aggregate .AND. i_aggregate_opt == 0) ) & -!jh ! z0h_surft(l,n) = z0h_z0m(n) * z0m_surft(l,n) -!jh -!jh ! Also set additional roughness length for use in CLASSIC aerosol -!jh ! deposition scheme - CM3 retain - now done later -!jh !z0h_surft_classic(l,n) = z0h_z0m_classic(n) * z0m_surft(l,n) -!jh ! END DO -!jh !END IF -!jh!END DO -!jh!$OMP END PARALLEL DO -!jh -!jh!CM3#55-22 -!jh!! MORUSES does not yet contain a parametrisation for snow, which should not -!jh!! affect the behaviour of bluff bodies. It will instead affect the material -!jh!! roughness of the road & roof and not the walls, which are essentially -!jh!! snow-free. Snow could be added to the material roughness length for -!jh!! momentum before passing to urbanz0, which calculates roughness length for heat -!jh!! Two calls are required; one for urban_canyon and one for urban_roof. -!jh!! -!jh!! If l_aggregate MORUSES roughness lengths are set in the usual way above with -!jh!! z0_surft = ztm in sparm -!jh!IF ( .NOT. l_aggregate ) THEN -!jh! IF ( ANY( l_moruses_rough_surft(1:nsurft) ) ) THEN -!jh! n = urban_canyon -!jh!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(k,l,j,i) & -!jh!!$OMP SHARED(surft_pts,n,surft_index,land_index,t_i_length,z1_uv,z1_tq,hgt_gb, & -!jh!!$OMP hwr_gb,disp_gb,z0m_surft,z0_surft,z0h_surft,urban_roof, & -!jh!!$OMP z0h_surft_classic) -!jh! DO k = 1,surft_pts(n) -!jh! l = surft_index(k,n) -!jh! z0m_surft(l,n) = z0_surft(l,n) -!jh! z0m_surft(l,urban_roof) = z0_surft(l,urban_roof) -!jh! j = ( land_index(l) - 1 ) / t_i_length + 1 -!jh! i = land_index(l) - ( j - 1 ) * t_i_length -!jh! CALL urbanz0( & -!jh! n, z1_uv(i,j), z1_tq(i,j), hgt_gb(l), hwr_gb(l), disp_gb(l), & -!jh! z0m_mat, z0m_surft(l,n), z0h_surft(l,n) ) -!jh! CALL urbanz0( & -!jh! urban_roof, z1_uv(i,j), z1_tq(i,j), hgt_gb(l), hwr_gb(l), disp_gb(l), & -!jh! z0m_mat, z0m_surft(l,urban_roof), z0h_surft(l,urban_roof) ) -!jh! ! Make CLASSIC aerosol roughness length for urban tiles consistent -!jh! ! with those for heat and momentum -!jh! z0h_surft_classic(l,n) = z0h_surft(l,n) -!jh! z0h_surft_classic(l,urban_roof) = z0h_surft(l,urban_roof) -!jh! END DO -!jh!!$OMP END PARALLEL DO -!jh! END IF -!jh!END IF -!jh -!jh!CM3#55-22 -!jh!! Calculate roughness length affected by roughness sublayer in neutral -!jh!! conditions. -!jh!DO n = 1,nsurft -!jh! IF (l_vegdrag_surft(n)) THEN -!jh! CALL can_drag_z0( & -!jh! land_pts, surft_pts(n), surft_index(:,n), & -!jh! array_zero, canht_pft(:,n), lai_pft(:,n), & -!jh! z0m_surft(:,n), z0h_surft(:,n), zdt_surft(:,n)) -!jh! END IF -!jh!END DO - -! Calculate orographic effective parameter for neutral conditions -! if using orographic roughness scheme -IF (formdrag == effective_z0) THEN - DO n = 1,nsurft - CALL sf_orog ( & - land_pts,surft_pts(n),land_index,surft_index(:,n), & - ho2r2_orog,rib_surft(:,n),sil_orog_land,z0m_surft(:,n),z1_uv, & - wind_profile_factor(:,n),z0m_eff_surft(:,n) & - ) - END DO -ELSE - wind_profile_factor(:,:) = 1.0 - z0m_eff_surft(:,:) = z0m_surft(:,:) -END IF - - -!CM3#55 - CABLE now called earlier -!!CABLE_LSM:CM2.5 Oddly tstar_surft is declared as INTENT(IN) above!! -!CALL cable_explicit_main( & -! mype, timestep, timestep_number, & -! tdims%i_end,tdims%j_end, land_pts, nsurft, npft, sm_levels, dzsoil, & -! land_index, surft_pts, surft_index, canht_pft, lai_pft, Flandg, & -! co2_mmr, tile_frac, cos_zenith_angle, latitude, longitude, & -! bexp_soilt(:,1,:), hcon_soilt(:,1), satcon_soilt(:,:), & -! sathh_soilt(:,1,:), smvcst_soilt(:,1,:), smvcwt_soilt(:,1,:), & -! smvccl_soilt(:,1,:), sthu_soilt(:,1,:), albsoil_soilt(:,1), & -! lw_down, sw_surft, & -! ls_rain, ls_snow, & -! !not fully checked. iup to here all IN ! unpacked ? -! tl_1, qw_1, vshr_land, pstar, z1_tq, z1_uv, canopy, snow_surft, & -! progs_cbl, work_cbl, pars_io_cbl, & -! ftl_surft, fqw_surft, & -! tstar_surft, u_s, u_s_std_surft, cd_surft, ch_surft, & -! radnet_surft, fraca, resfs, resft, z0h_surft, z0m_surft, & -! recip_l_MO_surft, epot_surft, & -! npp_pft_acc, resp_w_pft_acc ) -! -!CD_STD = CD_surft -!V_S_surft = U_S_STD_surft -!V_S_STD = U_S_STD_surft -!z0m_eff_surft(:,:) = z0m_surft(:,:) -! -!recip_l_mo_surft = 1.0 !? -!v_s_std = 1.0e-6 !? -!flake =0.0 !CABLE_LSM:CM2clobbered flake -!!CABLE_LSM: End - -!----------------------------------------------------------------------- -! Calculate RESFT with neutral CH and EPDT = 0 for use in calculation -! of Richardson number. RESFT=1 for snow and land-ice. -!----------------------------------------------------------------------- - -!CM3#55-25 - noting that ideally we'd move the evaluation of resft to earlier -!DO n = 1,nsurft - !IF (l_vegdrag_surft(n)) THEN - ! CALL can_drag_phi_m_h( & - ! land_pts, surft_pts(n), surft_index(:,n), land_index, & - ! array_zero, z1_uv, z1_tq, canht_pft(:,n), lai_pft(:,n), & - ! z0m_surft(:,n), z0h_surft(:,n), & - ! phi_m, phi_h) - ! -!!$OMP PARALLEL DO IF(surft_pts(n)>1) DEFAULT(NONE) & -!!$OMP PRIVATE(i, j, k, l) & -!!$OMP SHARED(surft_pts, surft_index, t_i_length, land_index, & -!!$OMP phi_m, phi_h, chn, wind_profile_factor, dq, qw_1, & -!!$OMP qstar_surft, epdt, n, resft, resfs, flake, fraca) SCHEDULE(STATIC) -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! j=(land_index(l) - 1) / t_i_length + 1 -! i = land_index(l) - (j-1) * t_i_length -! chn(l,n) = vkman**2 / (phi_m(l) * phi_h(l)) * wind_profile_factor(l,n) -! dq(l) = qw_1(i,j) - qstar_surft(l,n) -! epdt(l) = 0.0 -! !CABLE_LSM:CM2 -! resft(l,n) = MIN(1.,flake(l,n) + (1. - flake(l,n)) * & -! ( fraca(l,n) + (1. - fraca(l,n))*resfs(l,n) )) -! END DO -!!$OMP END PARALLEL DO - -! ELSE ! l_vegdrag_surft = F - -!!$OMP PARALLEL DO IF(surft_pts(n)>1) DEFAULT(NONE) & -!!$OMP PRIVATE(i, j, k, l, zetah, zetam) & -!!$OMP SHARED(surft_pts, surft_index, t_i_length, land_index, z1_uv, resft, & -!!$OMP z0m_surft, z1_tq, z0h_surft, chn, wind_profile_factor, dq, qw_1, & -!!$OMP qstar_surft, epdt,resfs,fraca, flake,n) SCHEDULE(STATIC) - !DO k = 1,surft_pts(n) - ! l = surft_index(k,n) - ! j=(land_index(l) - 1) / t_i_length + 1 - ! i = land_index(l) - (j-1) * t_i_length - ! !zetam = LOG ( (z1_uv(i,j) + z0m_surft(l,n)) / z0m_surft(l,n) ) - ! !zetah = LOG ( (z1_tq(i,j) + z0m_surft(l,n)) / z0h_surft(l,n) ) - ! !chn(l,n) = (vkman / zetah) * (vkman / zetam) * & - ! ! wind_profile_factor(l,n) - ! !dq(l) = qw_1(i,j) - qstar_surft(l,n) - ! !epdt(l) = 0.0 - ! !CABLE_LSM: from 8.5 - ! !CM3#55-25 - now done later - ! !resft(l,n) = MIN(1.,flake(l,n) + (1. - flake(l,n)) * & - ! ! ( fraca(l,n) + (1. - fraca(l,n))*resfs(l,n) )) - ! END DO -!!$OMP END PARALLEL DO - -! END IF - -! ! We should only attempt to access sf_diag%resfs_stom(:,n) if it has -! ! been fully allocated. -! IF (sf_diag%l_et_stom .OR. sf_diag%l_et_stom_surft) THEN -! n_diag = n -! ELSE -! n_diag = 1 -! END IF - -!CABLE_LSM:CM2 -!CM2! CALL sf_resist ( & -!CM2! land_pts,surft_pts(n),land_index,surft_index(:,n),cansnowtile(n), & -!CM2! canopy(:,n),catch(:,n),chn(:,n),dq,epdt,flake(:,n),gc_surft(:,n), & -!CM2! gc_stom_surft(:,n),snowdep_surft(:,n),snow_surft(:,n),vshr_land, & -!CM2! fraca(:,n),resfs(:,n),resft(:,n), & -!CM2! sf_diag%resfs_stom(:,n_diag),sf_diag%l_et_stom,sf_diag%l_et_stom_surft) - -!END DO - -!CM3#55-26 -!----------------------------------------------------------------------- -! 3.2 Calculate bulk Richardson number for the lowest model level. -!----------------------------------------------------------------------- - -! Land tiles -DO n = 1,nsurft - CALL sf_rib ( & - land_pts,surft_pts(n),land_index,surft_index(:,n), & - bq_1,bt_1,qstar_surft(:,n),q_elev(:,n),resft(:,n),t_elev(:,n), & - tstar_surft(:,n),vshr_land,z0h_surft(:,n),z0m_surft(:,n),zdt_surft(:,n), & - z1_tq,z1_uv,l_vegdrag_surft(n), & - rib_surft(:,n),db_surft(:,n) & - ) -END DO - -!----------------------------------------------------------------------- -! 3.3 Calculate stability corrected effective roughness length. -! Stability correction only applies to land points. -!----------------------------------------------------------------------- - -IF (formdrag == effective_z0) THEN - DO n = 1,nsurft - CALL sf_orog ( & - land_pts,surft_pts(n),land_index,surft_index(:,n), & - ho2r2_orog,rib_surft(:,n),sil_orog_land,z0m_surft(:,n),z1_uv, & - wind_profile_factor(:,n),z0m_eff_surft(:,n) & - ) - END DO -END IF - -!CM3#53 - once the roughnesses have been fully evaluated including topograhpic effects -!then cd_surft, driction velocities etc. needs to be revised here -! also do ashtf_surft and ashtf_prime_surft here for readability (could go ealier) -! -!what appears to be needed is -! 1. cd_surft needs to be adjusted to reflect topographic effects. -! 2. cd_std remains unimpacted by topography (may not be needed) -! 3. u_s_std_surft needs to be unimpacted by topgraphic effects -! 4. _classic variables need to use the classic values where -! z0h is replaced by z0h_classic and z0m is replaced by z0m_eff -! -! the equations in fcdch() are that -! v_s = v_s_std / windfactor -! cd_surft = cd_std * v_s/v_s_std * windfactor -! where v_s_std and cd_std are those provided by CABLE (tiled, no topography) -! -! and u_s_std_surft = v_s_std -! -! since we don't know whether z0h from CABLE = z0h_classic we will -! need to recalculate the classic outputs but chose to approximate this as -! cd_std_classic = cd_std = cd_surft (from CABLE) but -! ch_surft_classic = ch_surft * log(z1_tq/z0h_surft) / log(z1_tq/z0h_classic) - -! first, evaluations that are needed regardless of configuration -! - these could go earlier -DO n=1,nsurft - DO l=1,land_pts - !fill ashtf_surft and ashtf_prime with default value - !this needs to be non-zero to function with im_sf_pt2 - ashtf_surft(l,n) = 1.0 - ashtf_prime_surft(l,n) = 1.0 - - !fill in resft - resft(l,n) = MIN(1.,flake(l,n) + (1. - flake(l,n)) * & - ( fraca(l,n) + (1. - fraca(l,n))*resfs(l,n) )) - END DO -END DO - -!if topographic form drag enabled revise the tile drag coefficient -IF (formdrag == effective_z0) THEN - DO n=1,nsurft - DO l=1,land_pts - v_s_surft(l,n) = v_s_std(l,n) / wind_profile_factor(l,n) - cd_surft(l,n) = cd_std(l,n) * v_s_surft(l,n) / v_s_std(l,n) * & - wind_profile_factor(l,n) - END DO - END DO -END IF - -!if classic aerosol scheme used evaluate the tile aerosol deposition coefficients -IF (l_aero_classic) THEN - DO n=1,nsurft - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - z0h_surft_classic(l,n) = z0h_z0m_classic(n) * z0m_surft(l,n) - - !using zetam and zetah as temporary vars - zetam = LOG ( (z1_tq(i,j) + z0m_surft(l,n)) / z0h_surft(l,n) ) - zetah = LOG ( (z1_tq(i,j) + z0m_surft(l,n)) / z0h_surft_classic(l,n) ) - - cd_std_classic(l,n) = cd_std(l,n) - ch_surft_classic(l,n) = ch_surft(l,n) * zetam / zetah - END DO - END DO -END IF - - -!----------------------------------------------------------------------- -! 3.4 Calculate CD, CH via routine FCDCH. -!----------------------------------------------------------------------- - -!CABLE_LSM:CM2 -!CM2!! Land tiles -!CM2!DO n = 1,nsurft -!CM2! IF (l_vegdrag_surft(n)) THEN -!CM2! n_veg = n -!CM2! z0m_eff_surft(:,n) = z0m_surft(:,n) -!CM2! ELSE -!CM2! n_veg = 1 -!CM2! END IF -!CM2! CALL fcdch ( & -!CM2! cor_mo_iter,land_pts,surft_pts(n), & -!CM2! surft_index(:,n),land_index, & -!CM2! db_surft(:,n),vshr_land, & -!CM2! z0m_eff_surft(:,n),z0h_surft(:,n),zdt_surft(:,n),zh, & -!CM2! z1_uv,z1_uv_top,z1_tq,z1_tq_top,wind_profile_factor(:,n), & -!CM2! ddmfx,ip_ss_solid,charnock, & -!CM2! charnock_w, & -!CM2! l_vegdrag_surft(n),canht_pft(:,n_veg),lai_pft(:,n_veg), & -!CM2! nsnow_surft(:,n),n,l_mo_buoyancy_calc,cansnowtile(n),l_soil_point, & -!CM2! canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & -!CM2! snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & -!CM2! dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & -!CM2! snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & -!CM2! vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & -!CM2! scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & -!CM2! rhostar,bq_1,bt_1, & -!CM2! cd_surft(:,n),ch_surft(:,n),cd_std(:,n), & -!CM2! v_s_surft(:,n),v_s_std(:,n),recip_l_mo_surft(:,n), & -!CM2! u_s_iter_surft(:,n) & -!CM2! ) -!CM2!END DO -!CM2! -!CM2!! As roughness length have been changed by vegetation drag effect, effective -!CM2!! roughness length should be updated. -!CM2!DO n = 1,nsurft -!CM2! IF (l_vegdrag_surft(n)) THEN -!CM2! z0m_surft(:,n) = z0m_eff_surft(:,n) -!CM2! IF (formdrag == effective_z0) THEN -!CM2! CALL sf_orog ( & -!CM2! land_pts,surft_pts(n),land_index,surft_index(:,n), & -!CM2! ho2r2_orog,rib_surft(:,n),sil_orog_land,z0m_surft(:,n),z1_uv, & -!CM2! wind_profile_factor(:,n),z0m_eff_surft(:,n) & -!CM2! ) -!CM2! END IF -!CM2! END IF -!CM2!END DO -!CM2! -!CM2!!$OMP PARALLEL IF(nsurft > 1) DEFAULT(NONE) PRIVATE(k, l, n) & -!CM2!!$OMP SHARED(cor_mo_iter, nsurft, surft_pts, surft_index, & -!CM2!!$OMP u_s_iter_surft, u_s_std_surft, v_s_std) -!CM2!IF ( cor_mo_iter >= use_correct_ustar ) THEN -!CM2! ! Use correct "standard" ustar -!CM2!!$OMP DO SCHEDULE(STATIC) -!CM2! DO n = 1,nsurft -!CM2! DO k = 1,surft_pts(n) -!CM2! l = surft_index(k,n) -!CM2! u_s_std_surft(l,n) = v_s_std(l,n) -!CM2! END DO -!CM2! END DO -!CM2!!$OMP END DO -!CM2!ELSE -!CM2! ! Use ustar from mid-iteration -!CM2!!$OMP DO SCHEDULE(STATIC) -!CM2! DO n = 1,nsurft -!CM2! DO k = 1,surft_pts(n) -!CM2! l = surft_index(k,n) -!CM2! u_s_std_surft(l,n) = u_s_iter_surft(l,n) -!CM2! END DO -!CM2! END DO -!CM2!!$OMP END DO -!CM2!END IF -!CM2!!$OMP END PARALLEL - -!----------------------------------------------------------------------- -! 3.5 Recalculate friction velocity for the dust scheme using the -! bare soil roughness length if using only 1 aggregated tile -!----------------------------------------------------------------------- - -!CM3#55-27 -!IF ((l_dust .OR. l_dust_diag) .AND. l_aggregate) THEN -! -! n = 1 -! ! Calculate z0m and z0h for bare soil -! IF (l_vary_z0m_soil) THEN -!!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(k, l) & -!!$OMP SHARED(n, soil, surft_pts, surft_index, z0m_soil_in, & -!!$OMP z0h_soil,z0h_z0m, z0m_soil, wind_profile_fac_soil) & -!!$OMP SCHEDULE(STATIC) -! DO k = 1, surft_pts(n) -! l = surft_index(k,n) -! z0m_soil(l,n) = z0m_soil_in(l) -! z0h_soil(l,n) = z0h_z0m(soil) * z0m_soil(l,n) -! ! Set wind profile factor to 1 as not using orog term in z0m -! wind_profile_fac_soil(l,n) = 1.0 -! END DO -!!$OMP END PARALLEL DO -! ELSE -!!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(k, l) & -!!$OMP SHARED(n, soil, surft_pts, surft_index, z0_soil, z0h_soil, & -!!$OMP z0h_z0m, z0m_soil, wind_profile_fac_soil) & -!!$OMP SCHEDULE(STATIC) -! DO k = 1, surft_pts(n) -! l = surft_index(k,n) -! z0m_soil(l,n) = z0_soil -! z0h_soil(l,n) = z0h_z0m(soil) * z0m_soil(l,n) -! ! Set wind profile factor to 1 as not using orog term in z0m -! wind_profile_fac_soil(l,n) = 1.0 -! END DO -!!$OMP END PARALLEL DO -! END IF - -! ! Call fcdch again to calculate dust friction velocity on bare soil. -! ! The canopy drag scheme is not available on the aggregated tile -! ! and is disabled. -! l_vegdrag_active_here = .FALSE. -! CALL fcdch ( & -! cor_mo_iter,land_pts,surft_pts(n), & -! surft_index(:,n),land_index, & -! db_surft(:,n),vshr_land, & -! z0m_soil(:,n),z0h_soil(:,n),zdt_dummy,zh, & -! z1_uv,z1_uv_top,z1_tq,z1_tq_top,wind_profile_fac_soil(:,n), & -! ddmfx,ip_ss_solid,charnock, & -! charnock_w, & -! l_vegdrag_active_here,array_zero,array_zero, & -! nsnow_surft(:,n),n,.FALSE.,cansnowtile(n),l_soil_point, & -! canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & -! snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & -! dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & -! snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & -! vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & -! scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & -! rhostar,bq_1,bt_1, & -! ! Following tiled outputs (except v_s_std_soil and u_s_iter_soil) -! ! are dummy variables not needed from this call -! cd_surft_soil(:,n),ch_surft_soil(:,n),cd_std_soil(:,n), & -! v_s_surft_soil(:,n),v_s_std_soil(:,n),recip_l_mo_surft_soil(:,n), & -! u_s_iter_soil(:,n) & -! ) - -!!$OMP PARALLEL IF(nsurft > 1) DEFAULT(NONE) PRIVATE(k, l, n) & -!!$OMP SHARED(cor_mo_iter, nsurft, surft_index, surft_pts, & -!!$OMP u_s_iter_soil, u_s_std_surft, v_s_std_soil) -! IF ( cor_mo_iter >= use_correct_ustar ) THEN -! ! Use correct "standard" ustar -!!$OMP DO SCHEDULE(STATIC) -! DO n = 1,nsurft -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! u_s_std_surft(l,n) = v_s_std_soil(l,n) -! END DO -! END DO -!!$OMP END DO -! ELSE -! ! Use ustar from mid-iteration -!!$OMP DO SCHEDULE(STATIC) -! DO n = 1,nsurft -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! u_s_std_surft(l,n) = u_s_iter_soil(l,n) -! END DO -! END DO -!!$OMP END DO -! END IF -!!$OMP END PARALLEL -! -!END IF - -!----------------------------------------------------------------------- -! 3.6 Recalculate cd, ch etc. using z0h=z0h_classic. The parameters -! calculated using this additional roughness length are for -! CLASSIC aerosol deposition only. -!----------------------------------------------------------------------- -!CM3#55-28 - we've implemented CABLE estimates for this earlier -! remove to facilitate simplification of ashtf evaluations -!IF (l_aero_classic) THEN -! ! The canopy drag scheme is not supported for this aerosol scheme and -! ! is turned off. -! l_vegdrag_active_here = .FALSE. -! ! Land tiles -! DO n = 1,nsurft -! CALL fcdch ( & -! ! Input variables identical to main call except using different z0h -! cor_mo_iter,land_pts,surft_pts(n), & -! surft_index(:,n),land_index, & -! db_surft(:,n),vshr_land, & -! z0m_eff_surft(:,n),z0h_surft_classic(:,n),zdt_dummy,zh, & -! z1_uv,z1_uv_top,z1_tq,z1_tq_top, & -! wind_profile_factor(:,n), & -! ddmfx,ip_ss_solid,charnock, & -! charnock_w, & -! l_vegdrag_active_here,array_zero,array_zero, & -! nsnow_surft(:,n),n,.FALSE.,cansnowtile(n),l_soil_point, & -! canopy(:,n),catch(:,n),flake(:,n),gc_surft(:,n), & -! snowdep_surft(:,n),snow_surft(:,n),canhc_surf(:,n), & -! dzsurf(:,n),qstar_surft(:,n),q_elev(:,n),radnet_surft(:,n), & -! snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n),tstar_surft(:,n), & -! vfrac_surft(:,n),emis_surft(:,n),emis_soil,anthrop_heat_surft(:,n), & -! scaling_urban(:,n),alpha1(:,n),hcons_surf(:,n),ashtf_surft(:,n), & -! rhostar,bq_1,bt_1, & -! ! Following tiled outputs (except cd_std_classic and ch_surft_classic) -! ! are dummy variables not needed from this call -! cd_surft_classic(:,n),ch_surft_classic(:,n), & -! cd_std_classic(:,n),v_s_surft_classic(:,n), & -! v_s_std_classic(:,n),recip_l_mo_surft_classic(:,n), & -! u_s_iter_classic(:,n) & -! ) -! END DO -!END IF - -!----------------------------------------------------------------------- -! Calculate gridbox-means of transfer coefficients. -!----------------------------------------------------------------------- - -! Land tiles -DO n = 1,nsurft - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - cd_land(i,j) = cd_land(i,j) + tile_frac(l,n) * cd_surft(l,n) - ch_land(i,j) = ch_land(i,j) + tile_frac(l,n) * ch_surft(l,n) - END DO -END DO - -! aerodynamic resistance diagnostic -IF (sf_diag%l_ra) THEN - DO l = 1,land_pts - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - sf_diag%ra(l) = 1.0 / (ch_land(i,j) * vshr_land(i,j)) - END DO -END IF - -!----------------------------------------------------------------------- -! 4.3 Calculate the surface exchange coefficients RHOK(*) and -! resistances for use in CLASSIC aerosol scheme -! (Note that CD_STD, CH and VSHR should never = 0) -! RHOSTAR * CD * VSHR stored for diagnostic output before -! horizontal interpolation. -!----------------------------------------------------------------------- - -! Land tiles -DO n = 1,nsurft - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - rhokm_1_surft(l,n) = rhostar_mom(i,j) * cd_surft(l,n) * vshr_land(i,j) - ! ! P243.124 - rhokm_land(i,j) = rhokm_land(i,j) + & - tile_frac(l,n) * rhokm_1_surft(l,n) - rhokh_surft(l,n) = rhostar_mom(i,j) * ch_surft(l,n) * vshr_land(i,j) - ! ! P243.125 - END DO -END DO - -!----------------------------------------------------------------------- -! Calculate local and gridbox-average surface fluxes of heat and -! moisture. -!----------------------------------------------------------------------- - -! Adjust ASHTF for sens. heat flux to ground beneath coniferous canopy -!CM3#55-missed in first pass - remove as can_model==4 not relevant to CABLE -!IF ( .NOT. l_aggregate .AND. can_model == 4) THEN -! DO n = 1,npft -! IF ( cansnowtile(n) ) THEN -!!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE( k, l, j, i) & -!!$OMP SHARED(n, cd_surft, land_index, rhokh_can, rhostar, surft_pts, & -!!$OMP surft_index, t_i_length, vshr_land, cp) SCHEDULE(STATIC) -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! j=(land_index(l) - 1) / t_i_length + 1 -! i = land_index(l) - (j-1) * t_i_length -! rhokh_can(l,n) = rhostar(i,j) * cp / & -! (43.0 / (SQRT(cd_surft(l,n)) * vshr_land(i,j))) -! END DO -!!$OMP END PARALLEL DO -! END IF -! END DO -!END IF - -!----------------------------------------------------------------------- -! 4.1 Recalculate RESFT using "true" CH and EPDT for land tiles -!----------------------------------------------------------------------- - -lh0 = lc -sea_point = 0.0 - -DO n = 1,nsurft -!!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & -!!$OMP SHARED(ch_surft, land_index, qstar_surft, qw_1, dq, epdt,n, & -!!$OMP rhostar, surft_pts, surft_index, timestep, t_i_length, & -!!$OMP vshr_land) SCHEDULE(STATIC) - - !CM3#55-29 - we do not need ashtf_surft or ashtf_prime_surft to take a true value - ! only non-zero is needed - see above - remove sf_flux_cbl - !! Calcualte humidity gradient and rate of change of potential evaporation - !! with time - !DO k = 1,surft_pts(n) - ! l = surft_index(k,n) - ! j = (land_index(l) - 1) / t_i_length + 1 - ! i = land_index(l) - (j-1) * t_i_length - ! dq(l) = qw_1(i,j) - qstar_surft(l,n) - ! epdt(l) = - rhostar(i,j) * ch_surft(l,n) * vshr_land(i,j) & - ! *dq(l) * timestep - !END DO -!!$OMP END PARALLEL DO - -! ! We should only attempt to access sf_diag%resfs_stom(:,n) if it has -! ! been fully allocated. -! IF (sf_diag%l_et_stom .OR. sf_diag%l_et_stom_surft) THEN -! n_diag = n -! ELSE -! n_diag = 1 -! END IF - -!CABLE_LSM:CM2{ This is all being done above BUT to ashtf_surft - in CM2 we used -!elements of sf_flux to update ashtf_prime and others, however it seems the -!others were unnecessary -!CM2! CALL sf_resist ( & -!CM2! land_pts,surft_pts(n),land_index,surft_index(:,n),cansnowtile(n), & -!CM2! canopy(:,n),catch(:,n),ch_surft(:,n),dq,epdt,flake(:,n),gc_surft(:,n), & -!CM2! gc_stom_surft(:,n),snowdep_surft(:,n),snow_surft(:,n),vshr_land, & -!CM2! fraca(:,n),resfs(:,n),resft(:,n), & -!CM2! sf_diag%resfs_stom(:,n_diag),sf_diag%l_et_stom,sf_diag%l_et_stom_surft) - -! CALL sf_flux_cbl ( & -! land_pts,surft_pts(n), & -! land_index,surft_index(:,n), & -! nsnow_surft(:,n),n,canhc_surf(:,n),dzsurf(:,n),hcons_surf(:,n), & -! ashtf_surft(:,n),qstar_surft(:,n),q_elev(:,n), & -! radnet_surft(:,n),resft(:,n),rhokh_surft(:,n),l_soil_point, & -! snowdepth_surft(:,n),timestep,t_elev(:,n),tsurf(:,n), & -! tstar_surft(:,n),vfrac_surft(:,n),rhokh_can(:,n),z0h_surft(:,n), & -! z0m_eff_surft(:,n),zdt_surft(:,n),z1_tq,lh0,emis_surft(:,n),emis_soil, & -! 1.0,anthrop_heat_surft(:,n),scaling_urban(:,n),l_vegdrag_surft(n), & -! alpha1(:,n),ashtf_prime_surft(:,n),fqw_surft(:,n), & -! epot_surft(:,n),ftl_surft(:,n),dtstar_surft(:,n),sea_point & -! ) - - ! update gridbox means and diagnostics -!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & -!$OMP SHARED(n, surft_pts, surft_index, land_index, t_i_length, & -!$OMP l_irrig_dmd, l_aggregate, can_model, cansnowtile, & -!$OMP snow_surft, resfs_irr_surft, resfs, gc_irr_surft, & -!$OMP ftl_1, flandg, tile_frac, ftl_surft, fqw_1, fqw_surft, & -!$OMP ch_surft, vshr_land) SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j = (land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - - ! Calculate gridbox mean fluxes of heat and moisture - ftl_1(i,j) = ftl_1(i,j) + flandg(i,j) * tile_frac(l,n) * ftl_surft(l,n) - fqw_1(i,j) = fqw_1(i,j) + flandg(i,j) * tile_frac(l,n) * fqw_surft(l,n) - - !CM3#55-29 - may need the OMP directives changed - !! Calculate surface resistance term for irrigated surfaces - !IF (l_irrig_dmd) THEN - ! IF ( .NOT. l_aggregate .AND. can_model == 4 .AND. cansnowtile(n) .AND. & - ! snow_surft(l,n) > 0.0) THEN - ! resfs_irr_surft(l,n) = resfs(l,n) - ! ELSE - ! resfs_irr_surft(l,n) = gc_irr_surft(l,n) / & - ! ( gc_irr_surft(l,n) + ch_surft(l,n) * vshr_land(i,j) ) - ! END IF - !END IF - END DO -!$OMP END PARALLEL DO - -END DO - -! Calculate surface momentum flux -IF (sf_diag%l_tau_surft) THEN - DO n = 1,nsurft -!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & -!$OMP SHARED(n, surft_pts, surft_index, land_index, t_i_length, & -!$OMP rhokm_1_surft, vshr_land, sf_diag) SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j = (land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - sf_diag%tau_surft(l,n) = rhokm_1_surft(l,n) * vshr_land(i,j) - END DO -!$OMP END PARALLEL DO - END DO -END IF - -! Set surface stress on tiles diagnostic -IF (sf_diag%l_tau_1) THEN - DO n = 1,nsurft -!$OMP PARALLEL DO IF(surft_pts(n) > 1) DEFAULT(NONE) PRIVATE(i, j, k, l) & -!$OMP SHARED(n, surft_pts, surft_index, land_index, t_i_length, & -!$OMP flandg, tile_frac, rhokm_1_surft, vshr_land, & -!$OMP sf_diag) SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - sf_diag%tau_1(i,j) = sf_diag%tau_1(i,j) + & - flandg(i,j) * tile_frac(l,n) * & - rhokm_1_surft(l,n) * vshr_land(i,j) - END DO -!$OMP END PARALLEL DO - END DO -END IF - - -!----------------------------------------------------------------------- -! 4.4 Calculate the standard deviations of layer 1 turbulent -! fluctuations of temperature and humidity using approximate -! formulae from first order closure. -!----------------------------------------------------------------------- - -! Land tiles -DO n = 1,nsurft - CALL stdev1 ( & - land_pts,surft_pts(n),land_index,surft_index(:,n),flandg, & - bq_1,bt_1,fqw_surft(:,n),ftl_surft(:,n),rhokm_1_surft(:,n), & - rhostar,vshr_land,z0m_surft(:,n),z1_tq,tile_frac(:,n), & - q1_sd,t1_sd & - ) -END DO - -!----------------------------------------------------------------------- -! Call SFL_INT to calculate CDR10M and CHR1P5M - interpolation coeffs -! used to calculate screen temperature, humidity and 10m winds. -!----------------------------------------------------------------------- - -! Set flag if cdr10m is to be calculated for use with snow unloading. -! If l_fix_wind_snow=F this calculation will depend on the su10 and sv10 -! switches in sf_diag. -l_cdr10m_snow = .FALSE. -!CM3#55-31 -!IF ( l_fix_wind_snow ) THEN -! DO n = 1,nsurft -! IF ( canSnowTile(n) .AND. unload_rate_u(n) /= 0.0 ) l_cdr10m_snow = .TRUE. -! END DO -!END IF - -IF (sf_diag%suv10m_n) THEN -!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(i,j) & -!$OMP SHARED(pdims,sf_diag) - DO j = pdims%j_start,pdims%j_end - DO i = pdims%i_start,pdims%i_end - sf_diag%cdr10m_n(i,j) = 0.0 - sf_diag%cd10m_n(i,j) = 0.0 - END DO - END DO -!$OMP END PARALLEL DO -END IF - -! Land tiles -IF (sf_diag%su10 .OR. sf_diag%sv10 .OR. sf_diag%sq1p5 .OR. & - sf_diag%st1p5 .OR. sf_diag%suv10m_n .OR. & - l_cdr10m_snow .OR. & - (IScrnTDiag == IP_ScrnDecpl2) .OR. & - (IScrnTDiag == IP_ScrnDecpl3) ) THEN - DO n = 1,nsurft - - !CM2!!CABLE_LSM:land_pts=0 crashes - !CM3#55 - need to look at this in more detail - not convinced this is correct - CALL sfl_int ( & - land_pts,surft_pts(n),l_cdr10m_snow,surft_index(:,n),land_index,flandg, & - vshr_land,cd_std(:,n),cd_surft(:,n),ch_surft(:,n), & - tile_frac(:,n), & - z0m_eff_surft(:,n),z0m_surft(:,n),z0h_surft(:,n), & - recip_l_mo_surft(:,n), & - v_s_surft(:,n),v_s_std(:,n), & - z1_uv,z1_tq,db_surft(:,n), & - sf_diag, & - cdr10m,sf_diag%cdr10m_n,sf_diag%cd10m_n,chr1p5m(:,n) & - ) - END DO - -END IF - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) - -RETURN -END SUBROUTINE cable_land_sf_explicit -END MODULE cable_land_sf_explicit_mod diff --git a/src/coupled/AM3/control/cable/cable_land/explicit/sf_flux_mod_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/explicit/sf_flux_mod_cbl.F90 deleted file mode 100644 index 0cf1d952f..000000000 --- a/src/coupled/AM3/control/cable/cable_land/explicit/sf_flux_mod_cbl.F90 +++ /dev/null @@ -1,270 +0,0 @@ -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* -! SUBROUTINE SF_FLUX ----------------------------------------------- -! Description: -! Subroutines SF_FLUX to calculate explicit surface fluxes of -! heat and moisture -!----------------------------------------------------------------------- -MODULE sf_flux_mod_cbl -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='SF_FLUX_MOD' - -CONTAINS -SUBROUTINE sf_flux_cbl ( & - points,surft_pts,pts_index,surft_index, & - nsnow,n,canhc,dzsurf,hcons,ashtf,qstar,q_elev,radnet,resft, & - rhokh_1,l_soil_point,snowdepth,timestep, & - t_elev,ts1_elev,tstar,vfrac,rhokh_can, & - z0h,z0m_eff,zdt,z1_tq,lh0,emis_surft,emis_soil, & - salinityfactor,anthrop_heat,scaling_urban,l_vegdrag, & - alpha1,ashtf_prime,fqw_1,epot,ftl_1,dtstar,sea_point & - ) - -USE atm_fields_bounds_mod, ONLY: tdims -USE theta_field_sizes, ONLY: t_i_length - -USE csigma, ONLY: sbcon -USE planet_constants_mod, ONLY: grcp, cp -USE jules_snow_mod, ONLY: snow_hcon -USE jules_surface_mod, ONLY: ls -USE jules_surface_types_mod, ONLY: urban_roof -USE jules_vegetation_mod, ONLY: l_vegcan_soilfx -USE jules_urban_mod, ONLY: l_moruses_storage -USE jules_surface_mod, ONLY: l_aggregate, l_epot_corr -USE jules_science_fixes_mod, ONLY: l_fix_moruses_roof_rad_coupling - -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE um_types, ONLY: real_jlslsm - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: & - points & - ! IN Total number of points. -,surft_pts & - ! IN Number of tile points. -,pts_index(points) & - ! IN Index of points. -,surft_index(points) & - ! IN Index of tile points. -,nsnow(points) & - ! IN Number of snow layers -,n ! IN Tile number. - ! For sea and sea-ice this = 0 - -LOGICAL, INTENT(IN) :: & - l_soil_point(points) & - ! IN Boolean to test for soil points -,l_vegdrag - ! IN Option for vegetation canopy drag scheme. - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - canhc(points) & - ! IN Areal heat capacity of canopy (J/K/m2). -,dzsurf(points) & - ! IN Surface layer thickness (m). -,ashtf(points) & - ! IN Coefficient to calculate surface - ! heat flux into soil (W/m2/K). -,qstar(points) & - ! IN Surface qsat. -,q_elev(points) & - ! IN Total water content of lowest - ! atmospheric layer (kg per kg air). -,radnet(points) & - ! IN Net surface radiation (W/m2) positive - ! downwards -,resft(points) & - ! IN Total resistance factor. -,rhokh_1(points) & - ! IN Surface exchange coefficient. -,snowdepth(points) & - ! IN Snow depth (on ground) (m) -,timestep & - ! IN Timestep (s). -,t_elev(points) & - ! IN Liquid/frozen water temperature for - ! lowest atmospheric layer (K). -,ts1_elev(points) & - ! IN Temperature of surface layer (K). -,tstar(points) & - ! IN Surface temperature (K). -,vfrac(points) & - ! IN Fractional canopy coverage. -,rhokh_can(points) & - ! IN Exchange coefficient for canopy air - ! to surface -,z0h(points) & - ! IN Roughness length for heat and moisture -,z0m_eff(points) & - ! IN Effective roughness length for momentum -,zdt(points) & - ! IN Difference between the canopy height and - ! displacement height (m) -,z1_tq(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Height of lowest atmospheric level (m). -,emis_surft(points) & - ! IN Emissivity for land tiles -,emis_soil(points) & - ! IN Emissivity of underlying soil -,lh0 & - ! IN Latent heat for snow free surface - ! =LS for sea-ice, =LC otherwise -,salinityfactor & - ! IN Factor allowing for the effect of the - ! salinity of sea water on the - ! evaporative flux. -,anthrop_heat(points) & - ! IN Anthropogenic contribution to surface - ! heat flux (W/m2). Zero except for - ! urban and L_ANTHROP_HEAT=.true. - ! or for urban_canyon & urban_roof when - ! l_urban2t=.true. -,scaling_urban(points) & - ! IN MORUSES: ground heat flux scaling; - ! canyon tile only coupled to soil. - ! This equals 1.0 except for urban tiles when - ! MORUSES is used. -,alpha1(points) - ! IN Gradient of saturated specific humidity - ! with respect to temperature between the - ! bottom model layer and the surface. - -REAL(KIND=real_jlslsm) :: & - hcons(points) - ! IN Soil thermal conductivity (W/m/K). - -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - ashtf_prime(points) - ! INOUT Adjusted SEB coefficient - -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - fqw_1(points) & - ! OUT Local surface flux of QW (kg/m2/s). -,epot(points) & - ! OUT -,ftl_1(points) & - ! OUT Local surface flux of TL. -,dtstar(points) ! OUT Change in TSTAR over timestep - -REAL(KIND=real_jlslsm) :: & - sea_point ! =1.0 IF SEA POINT, =0.0 OTHERWISE - - -! Workspace -REAL(KIND=real_jlslsm) :: & -dtstar_pot(points) & - ! Change in TSTAR over timestep that is - ! appropriate for the potential evaporation -,surf_ht_flux ! Flux of heat from surface to sub-surface - -! Scalars -INTEGER :: & - i,j & - ! Horizontal field index. -,k & - ! Tile field index. -,l ! Points field index. - -REAL(KIND=real_jlslsm) :: & - lh ! Latent heat (J/K/kg). - -REAL(KIND=real_jlslsm) :: lambda - ! Attenuation factor for influence of soil - ! temperature - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='SF_FLUX' - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -!jh!!$OMP PARALLEL & -!jh!!$OMP DEFAULT(SHARED) & -!jh!!$OMP PRIVATE(l,k,lambda,lh,surf_ht_flux,i,j) - -!----------------------------------------------------------------------- -!! 0 initialise -!----------------------------------------------------------------------- -!jh!!$OMP DO SCHEDULE(STATIC) -!jh!DO l = 1,points -!jh! ftl_1(l) = 0.0 -!jh! epot(l) = 0.0 -!jh!END DO -!jh!!$OMP END DO - -! If conduction in the soil beneath the vegetative canopy is not -! explicitly considered, the attentuation facor may be set equal -! to 1 everywhere. -lambda = 1.0 - -!jh!!$OMP DO SCHEDULE(STATIC) -DO k = 1,surft_pts - l = surft_index(k) - j=(pts_index(l) - 1) / t_i_length + 1 - i = pts_index(l) - (j-1) * t_i_length - - ! Calculate the attenuation factor if different from 1. - IF (l_vegcan_soilfx) & - lambda = 2.0 * hcons(l) / dzsurf(l) / & - ( 2.0 * hcons(l) / dzsurf(l) + rhokh_can(l) + & - 4.0 * emis_soil(l) * emis_surft(l) * sbcon * & - tstar(l)**3 ) - - lh = lh0 - IF (snowdepth(l) > 0.0) lh = ls - - !jh!IF (l_vegdrag) THEN - !jh! ftl_1(l) = rhokh_1(l) * (tstar(l) - t_elev(l) - & - !jh! grcp * (z1_tq(i,j) + zdt(l) - z0h(l))) - !jh!ELSE - !jh! ftl_1(l) = rhokh_1(l) * (tstar(l) - t_elev(l) - & - !jh! grcp * (z1_tq(i,j) + z0m_eff(l) - z0h(l))) - !jh!END IF - !jh!epot(l) = rhokh_1(l) * (salinityfactor * qstar(l) - q_elev(l)) - !jh!fqw_1(l) = resft(l) * epot(l) - - !jh!surf_ht_flux = ((1.0 - vfrac(l)) * ashtf(l) + & - !jh! vfrac(l) * rhokh_can(l) * lambda ) * & - !jh! (tstar(l) - ts1_elev(l)) + & - !jh! vfrac(l) * emis_soil(l) * emis_surft(l) * sbcon * & - !jh! lambda * (tstar(l)**4.0 - ts1_elev(l)**4.0) - - - ashtf_prime(l) = 4.0 * (1.0 + lambda * emis_soil(l) * vfrac(l)) * & - emis_surft(l) * sbcon * tstar(l)**3.0 + & - lambda * vfrac(l) * rhokh_can(l) + & - (1.0 - vfrac(l)) * ashtf(l) + canhc(l) / timestep - - !jh!dtstar(l) = (radnet(l) + anthrop_heat(l) - cp * ftl_1(l) - & - !jh! lh * fqw_1(l) - surf_ht_flux) / & - !jh! ( rhokh_1(l) * (cp + lh * alpha1(l) * resft(l)) + & - !jh! ashtf_prime(l) ) - - !jh!! Correction to surface fluxes due to change in surface temperature - !jh!ftl_1(l) = ftl_1(l) + rhokh_1(l) * dtstar(l) * (1.0 - sea_point) - !jh!fqw_1(l) = fqw_1(l) + resft(l) * rhokh_1(l) * alpha1(l) * & - !jh! dtstar(l) * (1.0 - sea_point) - - !jh!IF (l_epot_corr) THEN - !jh! dtstar_pot(l) = (radnet(l) + anthrop_heat(l) - cp * ftl_1(l) - & - !jh! lh * epot(l) - surf_ht_flux) / & - !jh! ( rhokh_1(l) * (cp + lh * alpha1(l)) + ashtf_prime(l) ) - !jh! epot(l) = epot(l) + rhokh_1(l) * alpha1(l) * dtstar_pot(l) - !jh!ELSE - !jh! epot(l) = epot(l) + rhokh_1(l) * alpha1(l) * dtstar(l) - !jh!END IF - -END DO -!jh!!$OMP END DO -!jh!!$OMP END PARALLEL - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE sf_flux_cbl -END MODULE sf_flux_mod_cbl diff --git a/src/coupled/AM3/control/cable/cable_land/extra/hydrol_mod_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/extra/hydrol_mod_cbl.F90 deleted file mode 100644 index 7545728a0..000000000 --- a/src/coupled/AM3/control/cable/cable_land/extra/hydrol_mod_cbl.F90 +++ /dev/null @@ -1,1075 +0,0 @@ -MODULE hydrol_mod_cbl -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='HYDROL_MOD' - -CONTAINS - -SUBROUTINE hydrol_cbl ( & - land_pts, soil_pts, lice_pts, sm_levels, npft, nsurft, dim_cs1, & - asteps_since_triffid, timestep, & - l_inland, l_pdm, l_soil_sat_down, l_top, stf_sub_surf_roff, & - soil_index, lice_index, & - surft_pts, surft_index, nsnow_surft, & - bexp_soilt, hcap_soilt, hcon_soilt, & - satcon_soilt, sathh_soilt, & - smvcst_soilt, smvcwt_soilt, & - catch_surft, frac_irr_soilt, infil_surft, & - non_lake_frac, slope_gb, tile_frac, & - con_rainfrac_land, con_rain_land, ls_rainfrac_land, ls_rain_land, & - surf_ht_flux_ld, & - ecan_surft, ext_irr_soilt, ext_soilt, & - snowdepth_surft, melt_surft, snow_melt, & - snow_soil_htf, & - a_fsat_soilt, c_fsat_soilt, a_fwet_soilt, c_fwet_soilt, & - fexp_soilt, ti_mean_soilt, & - npp_soilt, inlandout_atm_gb, & - canopy_surft, smcl_soilt, sthf_soilt, & - sthu_soilt, sthu_irr_soilt, tsoil_deep_gb, & - t_soil_soilt, t_soil_soilt_acc, tsurf_elev_surft, & - fsat_soilt, fwetl_soilt, sthzw_soilt, zw_soilt, & - cs_pool_soilt,resp_s_soilt, & - cs_ch4_soilt, fch4_wetl_acc_soilt, & - substr_ch4, mic_ch4, mic_act_ch4, acclim_ch4, & - n_inorg_avail_pft, n_inorg_soilt_lyrs, & - n_leach_gb_acc, & - canopy_gb, smc_soilt, & - drain_soilt, dun_roff_soilt, sub_surf_roff_gb, & - surf_roff_gb, tot_tfall_gb, tot_tfall_surft, & - w_flux_soilt, qbase_soilt, qbase_l_soilt, qbase_zw_soilt, & - fch4_wetl_soilt, fch4_wetl_cs_soilt, & - fch4_wetl_npp_soilt, fch4_wetl_resps_soilt, & - n_leach_soilt, & - progs_snow_surft, snow_mass_gb, work_cbl ) - -!Use in relevant subroutines -USE ancil_info, ONLY: dim_cslayer, nsoilt -USE calc_baseflow_jules_mod, ONLY: calc_baseflow_jules -USE calc_zw_inund_mod, ONLY: calc_zw_inund -USE ch4_wetl_mod, ONLY: ch4_wetl -USE elev_htc_mod, ONLY: elev_htc -USE ereport_mod, ONLY: ereport -USE ice_htc_mod, ONLY: ice_htc -USE n_leach_mod, ONLY: n_leach -USE soil_hyd_wt_mod, ONLY: soil_hyd_wt -USE soil_hyd_update_mod, ONLY: soil_hyd_update -USE soil_hyd_mod, ONLY: soil_hyd -USE soil_htc_mod, ONLY: soil_htc -USE soilmc_mod, ONLY: soilmc -USE soilt_mod, ONLY: soilt -USE surf_hyd_mod, ONLY: surf_hyd -USE um_types, ONLY: real_jlslsm -USE water_constants_mod, ONLY: rho_water ! Density of pure water (kg/m3). - -USE jules_hydrology_mod, ONLY: l_wetland_unfrozen, ti_max, zw_max -USE jules_vegetation_mod, ONLY: l_nitrogen -USE jules_irrig_mod, ONLY: l_irrig_dmd -USE jules_surface_mod, ONLY: l_elev_land_ice - -USE jules_soil_biogeochem_mod, ONLY: & - ! imported scalar parameters - soil_model_ecosse, soil_model_rothc, soil_model_1pool, & - ! imported scalar variables - soil_bgc_model, l_ch4_tlayered, l_layeredc, dim_ch4layer - -USE jules_soil_mod, ONLY: & - dzsoil, & - ! Thicknesses of the soil layers (m). - dzsoil_elev, ns_deep - - -#if !defined(UM_JULES) -USE update_mod, ONLY: l_imogen -USE model_time_mod, ONLY: timestep_len -#endif - -!CABLE_LSM: Make avail CABLE hydrology interface subr to CALL -USE cable_hyd_main_mod, ONLY: cable_hyd_main -USE work_vars_mod_cbl, ONLY: work_vars_type ! and some kept thru timestep - -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!----------------------------------------------------------------------------- -! The order of arguments and declarations should follow UMDP3. -! Within that, where possible variables should be grouped so that related -! variables (e.g. from the same area of science) are together. -!----------------------------------------------------------------------------- - -!----------------------------------------------------------------------------- -! Scalar arguments with INTENT(IN): -!----------------------------------------------------------------------------- -INTEGER, INTENT(IN) :: & - land_pts, & - ! Number of gridpoints. - soil_pts, & - ! Number of soil points. - lice_pts, & - ! Number of land ice points. - sm_levels, & - ! Number of soil moisture levels. - npft, & - ! Number of plant functional types - nsurft, & - ! Number of tiles - dim_cs1, & - ! Number of soil carbon pools - asteps_since_triffid - ! Number of atmospheric timesteps since last call to TRIFFID. - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - timestep - ! Model timestep (s). - -LOGICAL , INTENT(IN) :: & - l_inland, & - ! True if re-routing inland basin flow to soil moisture. - l_pdm, & - ! Flag for PDM hydrology. - l_soil_sat_down, & - ! Switch controlling direction of movement of - ! soil moisture in excess of saturation. - l_top, & - ! Flag for TOPMODEL-based hydrology. - stf_sub_surf_roff - ! Stash flag for sub-surface runoff. - -TYPE(work_vars_type), INTENT(IN) :: work_cbl -!----------------------------------------------------------------------------- -! Array arguments with INTENT(IN): -!----------------------------------------------------------------------------- -INTEGER, INTENT(IN) :: & - soil_index(land_pts), & - ! Array of soil points. - lice_index(land_pts), & - ! Array of land ice points. - surft_pts(nsurft), & - ! Number of tile points. - surft_index(land_pts,nsurft), & - ! Index of tile points. - nsnow_surft(land_pts,nsurft) - ! Number of snow layers - -! Soil characteristics. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - bexp_soilt(land_pts,nsoilt,sm_levels), & - ! Brooks & Corey exponent. - hcap_soilt(land_pts,nsoilt,sm_levels), & - ! Soil heat capacity (J/K/m3). - hcon_soilt(land_pts,nsoilt,0:sm_levels), & - ! Soil thermal conductivity (W/m/K). - satcon_soilt(land_pts,nsoilt,0:sm_levels), & - ! Saturated hydraulic conductivity (kg/m2/s). - sathh_soilt(land_pts,nsoilt,sm_levels), & - ! Saturated soil water pressure (m). - smvcst_soilt(land_pts,nsoilt,sm_levels), & - ! Volumetric soil moisture concentration at saturation (m3 H2O/m3 soil). - smvcwt_soilt(land_pts,nsoilt,sm_levels) - ! Volumetric soil moisture concentration below which - ! stomata close (m3 H2O/m3 soil). - -! Surface characteristics. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - catch_surft(land_pts,nsurft), & - ! Canopy/surface capacity of land tiles (kg/m2). - frac_irr_soilt(land_pts, nsoilt), & - ! Irrigation fraction for each soil tile. - infil_surft(land_pts,nsurft), & - ! Maximum surface infiltration (kg m-2 s-1). - non_lake_frac(land_pts), & - ! Sum of fractions of surface tiles linked to soil (i.e. not using FLake) - slope_gb(land_pts), & - ! Terrain slope. - tile_frac(land_pts,nsurft) - ! Tile fractions. - -! Precipitation variables and heat fluxes. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - con_rainfrac_land(land_pts), & - ! Convective rain fraction - con_rain_land(land_pts), & - ! Convective rain (kg/m2/s). - ls_rain_land(land_pts), & - ! Large-scale rain (kg/m2/s). - ls_rainfrac_land(land_pts), & - ! large scale rain fraction - surf_ht_flux_ld(land_pts) - ! Net downward surface heat flux (W/m2). - -! Evaporation variables. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - ecan_surft(land_pts,nsurft), & - ! Canopy evaporation from land tiles (kg/m2/s). - ext_irr_soilt(land_pts,nsoilt,sm_levels), & - ! Extraction of water from each soil layer over irrigation (kg m-2 s-1). - ext_soilt(land_pts,nsoilt,sm_levels) - ! Extraction of water from each soil layer (kg/m2/s). - -! Snow and melt -REAL(KIND=real_jlslsm), INTENT(IN) :: & - snowdepth_surft(land_pts,nsurft), & - ! Snow depth (on ground) (m). - melt_surft(land_pts,nsurft), & - ! Snowmelt on tiles (kg/m2/s). - !snow_melt(land_pts), & - ! ! Snowmelt (kg/m2/s). - ! ! for CABLE this needs to be an INOUT var - snow_soil_htf(land_pts,nsurft) - ! Tiled snowpack-> soil heat flux. -REAL(KIND=real_jlslsm), INTENT(INOUT) :: & - snow_melt(land_pts) - ! Snowmelt (kg/m2/s) - -! TOPMODEL variables. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - a_fsat_soilt(land_pts,nsoilt), & - ! Fitting parameter for Fsat in LSH model. - c_fsat_soilt(land_pts,nsoilt), & - ! Fitting parameter for Fsat in LSH model. - a_fwet_soilt(land_pts,nsoilt), & - ! Fitting parameter for Fwet in LSH model. - c_fwet_soilt(land_pts,nsoilt), & - ! Fitting parameter for Fwet in LSH model. - fexp_soilt(land_pts,nsoilt), & - ! Decay factor in Sat. Conductivity in deep LSH/TOPMODEL layer. - ti_mean_soilt(land_pts,nsoilt) - ! Mean topographic index. - -! Variables related to methane calculation. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - npp_soilt(land_pts,nsoilt) - ! Gridbox mean net primary productivity (kg C/m2/s). - -! Other variables. -REAL(KIND=real_jlslsm), INTENT(IN) :: & - inlandout_atm_gb(land_pts) - ! IN TRIP INLAND BASIN OUTFLOW FOR LAND POINTS ONLY,kg/m2/s=mm. -!----------------------------------------------------------------------------- -! Array arguments with INTENT(IN OUT): -!----------------------------------------------------------------------------- - -! Canopy water. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - canopy_surft(land_pts,nsurft) - ! Canopy water content for land tiles (kg/m2). - -! Soil water and temperature. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - smcl_soilt(land_pts,nsoilt,sm_levels), & - ! Soil moisture content of each -! ! layer (kg/m2). - sthf_soilt(land_pts,nsoilt,sm_levels), & - ! Frozen soil moisture content of -! ! each layer as a fraction of -! ! saturation. - sthu_soilt(land_pts,nsoilt,sm_levels), & - ! Unfrozen soil moisture content of -! ! each layer as a fraction of -! ! saturation. - sthu_irr_soilt(land_pts, nsoilt, sm_levels), & - ! Unfrozen soil wetness over irrigation. - tsoil_deep_gb(land_pts,ns_deep), & - ! Deep soil temperature (K). - t_soil_soilt(land_pts,nsoilt,sm_levels), & - ! Sub-surface temperatures (K). - t_soil_soilt_acc(land_pts,nsoilt,sm_levels), & - ! Sub-surface temperature on layers and soil tiles - ! accumulated over TRIFFID timestep (K). - tsurf_elev_surft(land_pts,nsurft) - ! Tiled sub-surface temperatures (K). - -! TOPMODEL variables. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - fsat_soilt(land_pts,nsoilt), & - ! Surface saturation fraction. - fwetl_soilt(land_pts,nsoilt), & - ! Wetland fraction. - sthzw_soilt(land_pts,nsoilt), & - ! Soil moisture fraction in deep LSH/TOPMODEL layer. - zw_soilt(land_pts,nsoilt) - ! Water table depth (m). - -! Soil carbon variables. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - cs_pool_soilt(land_pts,nsoilt,dim_cslayer,dim_cs1), & - ! Soil carbon (kg C/m2). -! ! For RothC (dim_cs1=4), the pools -! ! are DPM, RPM, biomass and humus. - resp_s_soilt(land_pts,nsoilt,dim_cslayer,dim_cs1) - ! Soil respiration in pools (kg C/m2/s). - -! Methane variables. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - cs_ch4_soilt(land_pts,nsoilt), & - ! Soil carbon used in CH4 wetlands if TRIFFID is switched off (kg C/m2). - fch4_wetl_acc_soilt(land_pts,nsoilt), & - ! Accumulated scaled wetland methane flux (kg C/m2). - substr_ch4(land_pts,dim_ch4layer), & - ! Dissolved substrate that methaogens consume (kg C/m2) - mic_ch4(land_pts,dim_ch4layer), & - ! Methanogenic biomass (kg C/m2) - mic_act_ch4(land_pts,dim_ch4layer), & - ! Activity level of methanogenic biomass (fraction) - acclim_ch4(land_pts,dim_ch4layer) - ! Acclimation factor for microbial trait adaptation - -! Nitrogen variables. -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - n_inorg_avail_pft(land_pts,npft,dim_cslayer), & - ! Available inorganic N for PFTs (kg N m-2). - n_inorg_soilt_lyrs(land_pts,nsoilt,dim_cslayer), & - ! Inorganic N pool on soil levels (kg N m-2). - n_leach_gb_acc(land_pts) - ! Accumulated leached nitrogen diagnostic on TRIFFID timesteps - ! (kg m-2 (360days)-1). - -!----------------------------------------------------------------------------- -! Array arguments with INTENT(OUT): -!----------------------------------------------------------------------------- -! Canopy water and soil moisture. -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - canopy_gb(land_pts), & - ! Gridbox canopy water content (kg/m2). - smc_soilt(land_pts,nsoilt) - ! Available soil moisture in a layer at the surface (kg/m2) - -REAL(KIND=real_jlslsm), INTENT(INOUT) :: & - tot_tfall_surft(land_pts,nsurft), & - ! Surface-tiled contributions to throughfall. - dun_roff_soilt(land_pts,nsoilt) - ! Dunne part of sfc runoff (kg/m2/s). - -! Water fluxes. -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - drain_soilt(land_pts,nsoilt), & - ! Drainage out of sm_levels'th level (kg/m2/s). - sub_surf_roff_gb(land_pts), & - ! Sub-surface runoff (kg/m2/s). - surf_roff_gb(land_pts), & - ! Surface runoff (kg/m2/s). - tot_tfall_gb(land_pts), & - ! Total throughfall (kg/m2/s). - w_flux_soilt(land_pts,nsoilt,0:sm_levels) - ! Fluxes of water between layers (kg/m2/s). - -! TOPMODEL variables. -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - qbase_soilt(land_pts,nsoilt), & - ! Base flow (kg/m2/s). - qbase_l_soilt(land_pts,nsoilt,sm_levels+1), & - ! Base flow from each level (kg/m2/s). - qbase_zw_soilt(land_pts,nsoilt) - ! Base flow from deep LSH/TOPMODEL layer (kg/m2/s). - -! Methane and nitrigen variables. -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - fch4_wetl_soilt(land_pts,nsoilt), & - ! Scaled wetland methane flux (default substrate) for use in - ! atmos chemistry model (10^-9 kg C/m2/s). - fch4_wetl_cs_soilt(land_pts,nsoilt), & - ! Scaled methane flux (soil carbon substrate) (kg C/m2/s). - fch4_wetl_npp_soilt(land_pts,nsoilt), & - ! Scaled methane flux (npp substrate) (kg C/m2/s). - fch4_wetl_resps_soilt(land_pts,nsoilt), & - ! Scaled methane flux (soil respiration substrate) (kg C/m2/s). - n_leach_soilt(land_pts,nsoilt) - ! Leached N (kg m-2 s-1). - -!CABLE -REAL, INTENT(OUT) :: progs_snow_surft(land_pts,nsurft) -REAL, INTENT(OUT) :: snow_mass_gb(land_pts) ! OUT Gridbox snowmass (kg/m2) -!----------------------------------------------------------------------------- -! Local parameters: -!----------------------------------------------------------------------------- -REAL(KIND=real_jlslsm), PARAMETER :: to_kg_conversion = 1.0e-9 - ! multiplier for converting to kgC for wetland CH4 and IMOGEN - -!----------------------------------------------------------------------------- -! Local scalar variables: -!----------------------------------------------------------------------------- -INTEGER :: & - i, j, & - n, & - ! Counter for soil level. - m, & - ! Counter for soil tile. - errorstatus - -!----------------------------------------------------------------------------- -! Local array variables: -!----------------------------------------------------------------------------- -REAL(KIND=real_jlslsm) :: & - dsmc_dt_soilt(land_pts,nsoilt), & - ! Rate of change of soil moisture due to water falling onto the - ! surface after surface runoff (kg/m2/s). - ksz_soilt(land_pts,nsoilt,0:sm_levels), & - ! Saturated hydraulic conductivity in layer (kg/m2/s). - qbase_unfr_soilt(land_pts,nsoilt), & - ! Base flow in unfrozen soil (kg/m2/s). - qbase_l_unfr_soilt(land_pts,nsoilt,sm_levels+1), & - ! As qbase_l but for unfrozen soil (kg/m2/s). - top_crit_soilt(land_pts,nsoilt), & - ! Critical TI when ZW <=0.0 - dumtop_crit_soilt(land_pts,nsoilt), & - ! Dummy for top_crit_soilt - dumsthf_soilt(land_pts,nsoilt,sm_levels), & - ! Dummy Frozen soil moisture content of each layer as a fraction of - ! saturation (always set to 0). - zdepth(0:sm_levels), & - ! Lower soil layer boundary depth (m). - tsoil_d_soilt(land_pts,nsoilt), & - ! Soil temperature in the top metre - zw_inund_soilt(land_pts,nsoilt), & - ! Water table depth used - wutot_soilt(land_pts,nsoilt), & - ! Ratio of unfrozen to total soil moisture at ZW. - surf_roff_inc_soilt(land_pts,nsoilt), & - ! Increment to tiled surface runoff (kg m-2 s-1). - surf_roff_soilt(land_pts,nsoilt), & - ! Soil-tiled contributions to surface runoff (kg m-2 s-1). - sub_surf_roff_soilt(land_pts,nsoilt), & - ! Soil-tiled contributions to subsurface runoff (kg m-2 s-1). - smcl_old_soilt(land_pts,nsoilt,sm_levels) - ! Retain oriignal soil moisture for leaching code - -! Variables required for irrigation code -REAL(KIND=real_jlslsm) :: & - w_flux_irr_soilt(land_pts,nsoilt,0:sm_levels), & - ! The fluxes of water between layers in irrigated fraction (kg/m2/s). - w_flux_nir_soilt(land_pts,nsoilt,0:sm_levels), & - ! The fluxes of water between layers in non-irrigated fraction (kg/m2/s). - smcl_irr_soilt(land_pts,nsoilt,sm_levels), & - ! Total soil moisture contents of each layer in irrigated - ! fraction (kg/m2). - smcl_nir_soilt(land_pts,nsoilt,sm_levels), & - ! Total soil moisture contents of each layer in non-irrigated - ! fraction (kg/m2). - sthu_nir_soilt(land_pts,nsoilt,sm_levels), & - ! Unfrozen soil moisture content of each layer as a fraction of - ! saturation in irrigated fraction. - ext_nir_soilt(land_pts,nsoilt,sm_levels), & - ! Extraction of water from each soil layer in non-irrigated fraction - ! (kg/m2/s). - smclsat_soilt(land_pts,nsoilt,sm_levels), & - ! The saturation moisture content of each layer (kg/m2). - smclzw_soilt(land_pts,nsoilt), & - ! moisture content in deep layer(kg/m2). - smclsatzw_soilt(land_pts,nsoilt) - ! moisture content in deep layer (kg/m2). - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='HYDROL_cable' - -! End of header-------------------------------------------------------- -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -#if !defined(UM_JULES) - timestep = REAL(timestep_len) -#endif - -canopy_gb = canopy_gb -!CM2.1!!CABLE_LSM: call CABLE hydrology -call cable_hyd_main( land_pts, nsurft, tile_frac, timestep, & - snow_mass_gb, progs_snow_surft, snow_melt, & - surf_roff_gb, sub_surf_roff_gb, & - tot_tfall_gb, work_cbl%snow_surft, melt_surft, & - work_cbl%lying_snow, work_cbl%surf_roff, & - work_cbl%sub_surf_roff, work_cbl%tot_tfall ) - - -! Calculate soil carbon for use in the wetland CH4 scheme only -! (only used if single-pool C model is used): -IF ( soil_bgc_model == soil_model_1pool ) THEN -!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(i,j,m,n) & -!$OMP SHARED(soil_pts, nsoilt, soil_index, cs_ch4_soilt, dim_cslayer, & -!$OMP cs_pool_soilt) - DO m = 1, nsoilt - DO j = 1, soil_pts - i = soil_index(j) - cs_ch4_soilt(i,m) = 0.0 - DO n = 1,dim_cslayer - cs_ch4_soilt(i,m) = cs_ch4_soilt(i,m) + cs_pool_soilt(i,m,n,1) - END DO - END DO - END DO -!$OMP END PARALLEL DO -END IF - -!$OMP PARALLEL DEFAULT(NONE) PRIVATE(i,m,n) & -!$OMP SHARED(sm_levels, nsoilt, smcl_old_soilt, smcl_soilt, w_flux_soilt, & -!$OMP w_flux_irr_soilt, land_pts) -! smcl_old_soilt calculated for leaching code -DO n = 1, sm_levels - DO m = 1, nsoilt -!$OMP DO SCHEDULE(STATIC) - DO i = 1, land_pts - smcl_old_soilt(i,m,n) = smcl_soilt(i,m,n) - END DO -!$OMP END DO NOWAIT - END DO -END DO - -! Initialise w_flux variables that are used in irrigation code -DO n = 0, sm_levels - DO m = 1, nsoilt -!$OMP DO SCHEDULE(STATIC) - DO i = 1, land_pts - w_flux_soilt(i,m,n) = 0.0 - w_flux_irr_soilt(i,m,n) = 0.0 - ! to prevent random values reported over areas - ! that are not included as soil points (i.e. ice points) - END DO -!$OMP END DO NOWAIT - END DO -END DO -!$OMP END PARALLEL -!CABLE_LSM: call CABLE hydrology -!!call cable_hyd_main( npnts, nsurft, lying_snow, snow_surft, surf_roff, & - !! sub_surf_roff, tot_tfall ) - -!CM2 vn starts aboout here -!----------------------------------------------------------------------------- -! Set up variables required for LSH scheme: -!----------------------------------------------------------------------------- -! set level zero depth to 0 -zdepth(0) = 0.0 - -DO n = 1, sm_levels - zdepth(n) = zdepth(n-1) + dzsoil(n) -END DO -!jhan:fudge -dsmc_dt_soilt(:,:) = 0.0 -!----------------------------------------------------------------------------- -! Calculate throughfall and surface runoff, and update the canopy water -! content -!----------------------------------------------------------------------------- -!!CABLE_LSM: omit for CABLE: BUT initialize dsmc_dt for fpe0, otherwise? -!!CALL surf_hyd (land_pts, nsurft, sm_levels, soil_pts, timestep, l_top, l_pdm, & -!! surft_pts, surft_index, soil_index, & -!! catch_surft, ecan_surft, tile_frac, non_lake_frac, infil_surft, & -!! con_rain_land, ls_rain_land, con_rainfrac_land, & -!! ls_rainfrac_land, melt_surft, slope_gb, snow_melt, & -!! fsat_soilt, smvcst_soilt, & -!! sthf_soilt, sthu_soilt, & -!! canopy_surft, canopy_gb, dsmc_dt_soilt, & -!! surf_roff_gb, tot_tfall_gb, tot_tfall_surft, & -!! dun_roff_soilt, surf_roff_soilt) -! -!----------------------------------------------------------------------------- -! Specify the reduction of hydraulic conductivity with depth. -! Initialiase base flow to zero. -!----------------------------------------------------------------------------- -!$OMP PARALLEL DEFAULT(NONE) PRIVATE(i, j, m, n) & -!$OMP SHARED(sm_levels, nsoilt, soil_pts, soil_index, ksz_soilt, satcon_soilt, & -!$OMP smclsat_soilt, qbase_l_soilt, qbase_l_unfr_soilt, dumsthf_soilt, & -!$OMP dzsoil, smvcst_soilt, land_pts, qbase_soilt, & -!$OMP qbase_zw_soilt, wutot_soilt, drain_soilt, qbase_unfr_soilt, & -!$OMP zw_inund_soilt, surf_roff_inc_soilt) -DO n = 0, sm_levels - DO m = 1, nsoilt -!$OMP DO SCHEDULE(STATIC) - DO j = 1, soil_pts - i = soil_index(j) - ksz_soilt(i,m,n) = satcon_soilt(i,m,n) - END DO -!$OMP END DO NOWAIT - END DO -END DO - -DO n = 1, sm_levels - DO m = 1, nsoilt -!$OMP DO SCHEDULE(STATIC) - DO j = 1,soil_pts - i = soil_index(j) - smclsat_soilt(i,m,n) = rho_water * dzsoil(n) * smvcst_soilt(i,m,n) - qbase_l_soilt(i,m,n) = 0.0 - qbase_l_unfr_soilt(i,m,n) = 0.0 - dumsthf_soilt(i,m,n) = 0.0 - END DO -!$OMP END DO NOWAIT - END DO -END DO - -DO m = 1, nsoilt -!$OMP DO SCHEDULE(STATIC) - DO i = 1,land_pts - qbase_soilt(i,m) = 0.0 - qbase_zw_soilt(i,m) = 0.0 - wutot_soilt(i,m) = 0.0 - drain_soilt(i,m) = 0.0 - qbase_unfr_soilt(i,m) = 0.0 - zw_inund_soilt(i,m) = 0.0 - ! Initialise runoff increment. - surf_roff_inc_soilt(i,m) = 0.0 - END DO -!$OMP END DO NOWAIT -END DO -!$OMP END PARALLEL - -!!CABLE_LSM: omit for CABLE -!IF (l_top) THEN -! IF (soil_pts /= 0) THEN -! DO m = 1, nsoilt -! CALL calc_baseflow_jules( & -! land_pts, sm_levels, soil_pts, soil_index, & -! bexp_soilt(:,m,:), fexp_soilt(:,m), sthf_soilt(:,m,:), & -! ti_mean_soilt(:,m), zdepth, zw_soilt(:,m), ksz_soilt(:,m,:), & -! qbase_soilt(:,m), qbase_l_soilt(:,m,:), dumtop_crit_soilt(:,m) ) -! END DO -! -! IF (l_wetland_unfrozen) THEN -! DO m = 1,nsoilt -! CALL calc_zw_inund(land_pts, sm_levels, soil_pts, soil_index, zdepth, & -! bexp_soilt(:,m,:), sathh_soilt(:,m,:), smclsat_soilt(:,m,:), & -! smcl_soilt(:,m,:), sthu_soilt(:,m,:), sthzw_soilt(:,m), & -! zw_soilt(:,m), zw_inund_soilt(:,m), wutot_soilt(:,m)) -! -! ! Now call again to get the unfrozen equivalents to calculate fsat and -! ! fwet: -! CALL calc_baseflow_jules( & -! land_pts, sm_levels, soil_pts, soil_index, & -! bexp_soilt(:,m,:), fexp_soilt(:,m), dumsthf_soilt(:,m,:), & -! ti_mean_soilt(:,m), zdepth, zw_inund_soilt(:,m), ksz_soilt(:,m,:), & -! qbase_unfr_soilt(:,m), qbase_l_unfr_soilt(:,m,:), & -! top_crit_soilt(:,m) ) -! END DO -! ELSE -! DO m = 1, nsoilt -!!$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(NONE) PRIVATE(i) & -!!$OMP SHARED(m, land_pts, top_crit_soilt, dumtop_crit_soilt) -! DO i = 1,land_pts -! top_crit_soilt(i,m) = dumtop_crit_soilt(i,m) -! END DO -!!$OMP END PARALLEL DO -! END DO -! END IF -! -! END IF -!END IF ! l_top -!!CABLE_LSM:End - -IF (l_inland) THEN - DO i = 1,land_pts - - ! Add inland basin outflow to change in soil moisture store. - ! Note for soil tiling- this is only used by the riv_intctl_1a, which is - ! not compatible with nsoilt > 1. - dsmc_dt_soilt(i,1) = dsmc_dt_soilt(i,1) + inlandout_atm_gb(i) - END DO -END IF - -!----------------------------------------------------------------------------- -! Update the layer soil moisture contents and calculate the -! gravitational drainage. -!----------------------------------------------------------------------------- -!!!CABLE_LSM: omit for CABLE -!!!CM2IF (soil_pts /= 0) THEN -!! -!! !CM2IF (l_irrig_dmd) THEN -!! -!! !CM2 !------------------------------------------------------------------------- -!! !CM2 ! If l_irrig_dmd = TRUE, call soil_hyd separately for irrigated and -!! !CM2 ! non-irrigated fraction -!! !CM2 ! afterwards, call soil_hyd ONLY to update water table/drainage with -!! !CM2 ! gridbox total w_flux_soilt, smcl_soilt -!! !CM2 !------------------------------------------------------------------------- -!! -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 ! Split tile values into values for irrigated and non-irrigated fractions. -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 DO n = 1,sm_levels -!! !CM2 DO m = 1, nsoilt -!! !CM2 DO j = 1,soil_pts -!! !CM2 i = soil_index(j) -!! -!! !CM2 ! hadrd - gridbox sthu_soilt is assumed to be combination of -!! !CM2 ! sthu_soilt of non-irrigated fraction and sthu_irr_soilt, i.e. -!! !CM2 ! sthu_soilt = frac_irr_soilt*sthu_irr_soilt + (1-frac_irr_soilt) -!! !CM2 ! *sthu_nir_soilt -!! !CM2 IF ( frac_irr_soilt(i,m) < 1.0 ) THEN -!! !CM2 sthu_nir_soilt(i,m,n) = (sthu_soilt(i,m,n) - frac_irr_soilt(i,m) & -!! !CM2 * sthu_irr_soilt(i,m,n)) & -!! !CM2 / (1.0 - frac_irr_soilt(i,m)) -!! !CM2 ext_nir_soilt(i,m,n) = (ext_soilt(i,m,n) - frac_irr_soilt(i,m) & -!! !CM2 * ext_irr_soilt(i,m,n)) & -!! !CM2 / (1.0 - frac_irr_soilt(i,m)) -!! !CM2 ELSE -!! !CM2 sthu_nir_soilt(i,m,n) = sthu_soilt(i,m,n) -!! !CM2 ext_nir_soilt(i,m,n) = ext_soilt(i,m,n) -!! !CM2 END IF -!! -!! !CM2 smcl_irr_soilt(i,m,n) = smcl_soilt(i,m,n) & -!! !CM2 + (sthu_irr_soilt(i,m,n) & -!! !CM2 - sthu_soilt(i,m,n)) & -!! !CM2 * smclsat_soilt(i,m,n) -!! !CM2 smcl_nir_soilt(i,m,n) = smcl_soilt(i,m,n) & -!! !CM2 + (sthu_nir_soilt(i,m,n) & -!! !CM2 - sthu_soilt(i,m,n)) & -!! !CM2 * smclsat_soilt(i,m,n) -!! !CM2 END DO -!! !CM2 END DO -!! !CM2 END DO -!! -!! !CM2 DO m = 1, nsoilt -!! !CM2 ! First call soil_hyd for non-irrigated fraction. -!! !CM2 ! Note that the values of smclsat_soilt, smclzw_soilt and smclsatzw_soilt -!! !CM2 ! calculated here and in the next call are later replaced by the -!! !CM2 ! recalculated values from soil_hyd_update. -!! !CM2 CALL soil_hyd ( & -!! !CM2 land_pts, sm_levels, soil_pts, timestep, l_top, l_soil_sat_down, & -!! !CM2 soil_index, bexp_soilt(:,m,:), dzsoil, & -!! !CM2 ext_nir_soilt(:,m,:), dsmc_dt_soilt(:,m), ksz_soilt(:,m,:), & -!! !CM2 sathh_soilt(:,m,:), sthzw_soilt(:,m), smvcst_soilt(:,m,:), & -!! !CM2 qbase_l_soilt(:,m,:), zdepth, & -!! !CM2 smcl_nir_soilt(:,m,:), sthu_nir_soilt(:,m,:), smclsat_soilt(:,m,:), & -!! !CM2 w_flux_nir_soilt(:,m,:), smclzw_soilt(:,m), smclsatzw_soilt(:,m)) -!! -!! !CM2 ! Next call soil_hyd for irrigated fraction. -!! !CM2 CALL soil_hyd ( & -!! !CM2 land_pts, sm_levels, soil_pts, timestep, l_top, l_soil_sat_down, & -!! !CM2 soil_index, bexp_soilt(:,m,:), dzsoil, & -!! !CM2 ext_irr_soilt(:,m,:), dsmc_dt_soilt(:,m), ksz_soilt(:,m,:), & -!! !CM2 sathh_soilt(:,m,:), sthzw_soilt(:,m), smvcst_soilt(:,m,:), & -!! !CM2 qbase_l_soilt(:,m,:), zdepth, & -!! !CM2 smcl_irr_soilt(:,m,:), sthu_irr_soilt(:,m,:), smclsat_soilt(:,m,:), & -!! !CM2 w_flux_irr_soilt(:,m,:), smclzw_soilt(:,m), smclsatzw_soilt(:,m)) -!! !CM2 END DO -!! -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 ! Calculate values for the whole soil tile by combining irrigated and -!! !CM2 ! non-irrigated values. -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 DO m = 1,nsoilt -!! !CM2 DO n = 0,sm_levels -!! !CM2 DO j = 1,soil_pts -!! !CM2 i = soil_index(j) -!! -!! !CM2 ! Ensure sensible values if irrigation fraction is very small by -!! !CM2 ! using values from the non-irrigated fraction. -!! !CM2 IF ( frac_irr_soilt(i,m) <= EPSILON(1.0) ) THEN -!! !CM2 w_flux_soilt(i,m,n) = w_flux_nir_soilt(i,m,n) -!! !CM2 IF ( n >= 1 ) THEN -!! !CM2 sthu_irr_soilt(i,m,n) = sthu_nir_soilt(i,m,n) -!! !CM2 smcl_soilt(i,m,n) = smcl_nir_soilt(i,m,n) -!! !CM2 sthu_soilt(i,m,n) = sthu_nir_soilt(i,m,n) -!! !CM2 END IF -!! !CM2 ELSE -!! !CM2 w_flux_soilt(i,m,n) = frac_irr_soilt(i,m) & -!! !CM2 * w_flux_irr_soilt(i,m,n) & -!! !CM2 + ( 1.0 - frac_irr_soilt(i,m) ) & -!! !CM2 * w_flux_nir_soilt(i,m,n) -!! !CM2 IF ( n >= 1 ) THEN -!! !CM2 smcl_soilt(i,m,n) = frac_irr_soilt(i,m) * smcl_irr_soilt(i,m,n) & -!! !CM2 + ( 1.0 - frac_irr_soilt(i,m) ) & -!! !CM2 * smcl_nir_soilt(i,m,n) -!! !CM2 sthu_soilt(i,m,n) = frac_irr_soilt(i,m) * sthu_irr_soilt(i,m,n) & -!! !CM2 + ( 1.0 - frac_irr_soilt(i,m) ) & -!! !CM2 * sthu_nir_soilt(i,m,n) -!! !CM2 END IF -!! !CM2 END IF -!! !CM2 END DO ! soil points -!! !CM2 END DO ! layers -!! !CM2 END DO ! tiles -!! -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 ! Recalculate values for the whole soil tile that were over-written by the -!! !CM2 ! separate calls to soil_hyd above. -!! !CM2 !-------------------------------------------------------------------------- -!! !CM2 DO m = 1, nsoilt -!! !CM2 CALL soil_hyd_update(land_pts, sm_levels, soil_pts, soil_index, dzsoil, & -!! !CM2 smvcst_soilt(:,m,:), zdepth, smclzw_soilt(:,m), & -!! !CM2 sthzw_soilt(:,m), smclsat_soilt(:,m,:), & -!! !CM2 smclsatzw_soilt(:,m)) -!! !CM2 END DO -!! -!! !CM2ELSE -!! ! .NOT. l_irrig_dmd -!! -!! !CM2DO m = 1, nsoilt -!! !CM2 CALL soil_hyd ( & -!! !CM2 land_pts, sm_levels, soil_pts, timestep, l_top, l_soil_sat_down, & -!! !CM2 soil_index, bexp_soilt(:,m,:), dzsoil, & -!! !CM2 ext_soilt(:,m,:), dsmc_dt_soilt(:,m), ksz_soilt(:,m,:), & -!! !CM2 sathh_soilt(:,m,:), sthzw_soilt(:,m), smvcst_soilt(:,m,:), & -!! !CM2 qbase_l_soilt(:,m,:), zdepth, & -!! !CM2 smcl_soilt(:,m,:), sthu_soilt(:,m,:), smclsat_soilt(:,m,:), & -!! !CM2 w_flux_soilt(:,m,:), smclzw_soilt(:,m), smclsatzw_soilt(:,m)) -!! !CM2END DO -!! -!! !CM2END IF ! l_irrig_dmd - - !---------------------------------------------------------------------------- - ! Update further stores and fluxes. - !---------------------------------------------------------------------------- - !!IF (nsoilt == 1) THEN - !! !To maintain bit-comparability, we need to call with the _gb version of - !! !surface runoff. - !! m = 1 - !! CALL soil_hyd_wt ( & - !! land_pts, sm_levels, soil_pts, timestep, stf_sub_surf_roff, & - !! l_top, soil_index, & - !! bexp_soilt(:,m,:), dsmc_dt_soilt(:,m), sathh_soilt(:,m,:), & - !! smclsat_soilt(:,m,:), smclsatzw_soilt(:,m), smvcst_soilt(:,m,:), & - !! w_flux_soilt(:,m,:), smcl_soilt(:,m,:), & - !! surf_roff_gb, & - !! qbase_l_soilt(:,m,:), smclzw_soilt(:,m), zw_soilt(:,m), & - !! sub_surf_roff_soilt(:,m), drain_soilt(:,m), qbase_soilt(:,m), & - !! sthzw_soilt(:,m), surf_roff_inc_soilt(:,m) ) - - !! ! For a single soil tile, simply copy across to the output variable. - !! sub_surf_roff_gb(:) = sub_surf_roff_soilt(:,m) - !! ! Update the tiled surface runoff. - !! surf_roff_soilt(:,m) = surf_roff_soilt(:,m) + surf_roff_inc_soilt(:,m) - !!ELSE - - !! ! Initialise output variable - !! DO i = 1, land_pts - !! sub_surf_roff_gb(i) = 0.0 - !! END DO - !! DO m = 1, nsoilt - !! CALL soil_hyd_wt ( & - !! land_pts, sm_levels, soil_pts, timestep, stf_sub_surf_roff, & - !! l_top, soil_index, & - !! bexp_soilt(:,m,:), dsmc_dt_soilt(:,m), sathh_soilt(:,m,:), & - !! smclsat_soilt(:,m,:), smclsatzw_soilt(:,m), smvcst_soilt(:,m,:), & - !! w_flux_soilt(:,m,:), smcl_soilt(:,m,:), & - !! surf_roff_soilt(:,m), & - !! qbase_l_soilt(:,m,:), smclzw_soilt(:,m), zw_soilt(:,m), & - !! sub_surf_roff_soilt(:,m), drain_soilt(:,m), qbase_soilt(:,m), & - !! sthzw_soilt(:,m), surf_roff_inc_soilt(:,m) ) - - !! ! For multiple soil tiles, add up the contributions, allowing for frac - !! sub_surf_roff_gb(:) = sub_surf_roff_gb(:) & - !! + ( tile_frac(:,m) * sub_surf_roff_soilt(:,m)) - !! surf_roff_gb(:) = surf_roff_gb(:) + tile_frac(:,m) & - !! * surf_roff_inc_soilt(:,m) - - !! END DO - !!END IF !nsoilt == 1 - - !--------------------------------------------------------------------------- - ! Calculate surface saturation and wetland fractions: - !--------------------------------------------------------------------------- - !CM2IF (l_top) THEN - !CM2 DO m = 1, nsoilt - - !CM2 DO i = 1,land_pts - !CM2 fsat_soilt(i,m) = 0.0 - !CM2 fwetl_soilt(i,m) = 0.0 - - !CM2 ! Zero soil porosity over land ice: - !CM2 IF (smvcst_soilt(i,m,sm_levels) <= 0.0) THEN - !CM2 zw_soilt(i,m) = zw_max - !CM2 END IF - !CM2 END DO - - !CM2 DO j = 1,soil_pts - !CM2 i = soil_index(j) - !CM2 qbase_zw_soilt(i,m) = qbase_l_soilt(i,m,sm_levels+1) - - !CM2 !Now use fit for fsat_soilt and fwet: - !CM2 IF (l_wetland_unfrozen) THEN - !CM2 fsat_soilt(i,m) = wutot_soilt(i,m) * a_fsat_soilt(i,m) & - !CM2 * EXP(-c_fsat_soilt(i,m) * top_crit_soilt(i,m)) - !CM2 fwetl_soilt(i,m) = wutot_soilt(i,m) * a_fwet_soilt(i,m) & - !CM2 * EXP(-c_fwet_soilt(i,m) * top_crit_soilt(i,m)) - !CM2 ELSE - !CM2 fsat_soilt(i,m) = a_fsat_soilt(i,m) & - !CM2 * EXP(-c_fsat_soilt(i,m) * top_crit_soilt(i,m)) - !CM2 fwetl_soilt(i,m) = a_fwet_soilt(i,m) & - !CM2 * EXP(-c_fwet_soilt(i,m) * top_crit_soilt(i,m)) - !CM2 END IF - - !CM2 IF (top_crit_soilt(i,m) >= ti_max) THEN - !CM2 fsat_soilt(i,m) = 0.0 - !CM2 fwetl_soilt(i,m) = 0.0 - !CM2 END IF - - !CM2 END DO - !CM2 END DO - !CM2END IF ! l_top - -!CM2ELSE ! soil pts - - !--------------------------------------------------------------------------- - ! If required by STASH flag and there are no soil points, - ! set sub-surface runoff to zero. - !--------------------------------------------------------------------------- - !CM2IF (stf_sub_surf_roff) THEN - !CM2 DO i = 1,land_pts - !CM2 sub_surf_roff_gb(i) = 0.0 - !CM2 END DO - !CM2END IF - -!CM2END IF ! soil_pts - -!----------------------------------------------------------------------------- -! Update the soil temperatures and the frozen moisture fractions -!----------------------------------------------------------------------------- - -!============================================================================= -! *NOTICE REGARDING SOIL TILING** -! -!The following section facilitates the use of soil tiling. As implemented, -!there are two soil tiling options: -! -!nsoilt == 1 -!Operate as with a single soil tile, functionally identical to JULES upto -! at least vn4.7 (Oct 2016) -! This means that a soilt variable being passed 'up' to the surface is -! broadcast to the surft variable (with weighting by frac if requred) -! -!nsoilt > 1 -!Operate with nsoilt = nsurft, with a direct mapping between them -! This means that a soilt variable being passed 'up' to the surface is simply -! copied into the surft variable -! -! This will need to be refactored for other tiling approaches. This note -! will be replicated elsewhere in the code as required -! -!These comments apply until **END NOTICE REGARDING SOIL TILING** -!============================================================================= -!CM2IF (soil_pts /= 0) THEN -!CM2 ! When using soil tiling, we can use the surface tiled version of -!CM2 ! surf_ht_flux_ld, snow_soil_htf. The _ld version is a gridbox mean -!CM2 ! calculated in snow and passed through. -!CM2 IF (nsoilt == 1) THEN -!CM2 m = 1 -!CM2 CALL soil_htc ( & -!CM2 land_pts, sm_levels, nsurft, soil_pts, timestep, soil_index, & -!CM2 surft_pts, surft_index, nsnow_surft, & -!CM2 bexp_soilt(:,m,:), dzsoil, tile_frac, & -!CM2 non_lake_frac, hcap_soilt(:,m,:), hcon_soilt(:,m,:), & -!CM2 sathh_soilt(:,m,:), smcl_soilt(:,m,:), snowdepth_surft, & -!CM2 surf_ht_flux_ld, smvcst_soilt(:,m,:), w_flux_soilt(:,m,:), & -!CM2 sthf_soilt(:,m,:), sthu_soilt(:,m,:), sthu_irr_soilt(:,m,:), & -!CM2 t_soil_soilt(:,m,:), tsoil_deep_gb ) -!CM2 ELSE -!CM2 ! Surface and soil tiles map directly on to each other. -!CM2 DO m = 1, nsoilt -!CM2 n = m -!CM2 CALL soil_htc ( & -!CM2 land_pts, sm_levels, nsurft, soil_pts, timestep, soil_index, & -!CM2 surft_pts, surft_index, nsnow_surft, & -!CM2 bexp_soilt(:,m,:), dzsoil, tile_frac, & -!CM2 non_lake_frac, hcap_soilt(:,m,:), hcon_soilt(:,m,:), & -!CM2 sathh_soilt(:,m,:), smcl_soilt(:,m,:), snowdepth_surft, & -!CM2 snow_soil_htf(:,n), smvcst_soilt(:,m,:), w_flux_soilt(:,m,:), & -!CM2 sthf_soilt(:,m,:), sthu_soilt(:,m,:), sthu_irr_soilt(:,m,:), & -!CM2 t_soil_soilt(:,m,:), tsoil_deep_gb ) -!CM2 END DO -!CM2 END IF -!CM2END IF -!CM2!============================================================================= -!CM2! *END NOTICE REGARDING SOIL TILING** -!CM2!============================================================================= -!CM2 -!CM2!----------------------------------------------------------------------------- -!CM2! Update the sub-surface temperatures for land ice. -!CM2!----------------------------------------------------------------------------- -!CM2IF (lice_pts /= 0) THEN -!CM2 IF ( .NOT. l_elev_land_ice) THEN -!CM2 DO m = 1, nsoilt -!CM2 CALL ice_htc (lice_pts, land_pts, sm_levels, timestep, lice_index, & -!CM2 dzsoil, surf_ht_flux_ld, t_soil_soilt(:,m,:)) -!CM2 END DO -!CM2 ELSE -!CM2 CALL elev_htc (lice_pts, land_pts, nsurft, dzsoil_elev, timestep, & -!CM2 lice_index, snow_soil_htf, tsurf_elev_surft) -!CM2 END IF -!CM2END IF -!CABLE_LSM:End -!jhan:up to here -!----------------------------------------------------------------------------- -! Diagnose the available soil moisture in a layer at the surface. -!----------------------------------------------------------------------------- -DO m = 1, nsoilt - CALL soilmc ( land_pts,sm_levels,soil_pts,soil_index, & - dzsoil,sthu_soilt(:,m,:),smvcst_soilt(:,m,:), & - smvcwt_soilt(:,m,:),smc_soilt(:,m) ) -END DO - -!----------------------------------------------------------------------------- -! Calculate mean soil temperature and scaled CH4 flux: -!----------------------------------------------------------------------------- -DO m = 1, nsoilt - DO i = 1,land_pts - fch4_wetl_soilt(i,m) = 0.0 - fch4_wetl_cs_soilt(i,m) = 0.0 - fch4_wetl_npp_soilt(i,m) = 0.0 - fch4_wetl_resps_soilt(i,m) = 0.0 - END DO -END DO -!!!CABLE_LSM: omit for CABLE -!! IF ( l_top .AND. soil_pts /= 0 ) THEN -!! SELECT CASE ( soil_bgc_model ) -!! CASE ( soil_model_1pool, soil_model_rothc ) -!! IF ( l_ch4_tlayered ) THEN -!! ! This variable is not used with layered CH4 calc. -!! tsoil_d_soilt(:,m) = 0.0 -!! ELSE -!! CALL soilt(land_pts, sm_levels, soil_pts, soil_index, & -!! dzsoil, t_soil_soilt(:,m,:), tsoil_d_soilt(:,m)) -!! END IF -!! CALL ch4_wetl(land_pts, sm_levels, soil_pts, dim_cs1, timestep, & -!! l_ch4_tlayered, soil_index, & -!! t_soil_soilt(:,m,:), tsoil_d_soilt(:,m), cs_ch4_soilt(:,m),& -!! resp_s_soilt(:,m,:,:), npp_soilt(:,m), fwetl_soilt(:,m), & -!! sthu_soilt(:,m,:), bexp_soilt(:,m,:), & -!! fch4_wetl_soilt(:,m), fch4_wetl_cs_soilt(:,m), & -!! fch4_wetl_npp_soilt(:,m), fch4_wetl_resps_soilt(:,m), & -!! substr_ch4, mic_ch4, mic_act_ch4, acclim_ch4, & -!! cs_pool_soilt(:,m,:,:)) -!!#if !defined(UM_JULES) -!! IF (l_imogen) THEN -!! DO i = 1,land_pts -!! ! fch4_wetl_acc_soilt in kg/m2 and fch4_wetl_soilt in 10e9kg/m2/s -!! fch4_wetl_acc_soilt(i,m) = fch4_wetl_acc_soilt(i,m) + & -!! (fch4_wetl_soilt(i,m) * to_kg_conversion * timestep_len) -!! END DO -!! END IF -!!#endif -!! END SELECT -!! END IF -!!END DO ! tiles -!! -!!IF ( (soil_bgc_model == soil_model_rothc .AND. l_layeredc ) & -!! .OR. soil_bgc_model == soil_model_ecosse ) THEN -!! !----------------------------------------------------------------------- -!! !accumulate soil temperature for layered soil carbon and nitrogen -!! !----------------------------------------------------------------------- -!! DO m = 1, nsoilt -!! IF (asteps_since_triffid == 1) THEN -!! t_soil_soilt_acc(:,m,:) = 0.0 -!! END IF -!! DO j = 1,soil_pts -!! i = soil_index(j) -!! t_soil_soilt_acc(i,m,:) = t_soil_soilt_acc(i,m,:) + t_soil_soilt(i,m,:) -!! END DO -!! END DO -!!END IF -!CABLE_LSM: omit for CABLE - -!----------------------------------------------------------------------- -! Calculate Nitrogen Leaching -!----------------------------------------------------------------------- -IF (soil_bgc_model == soil_model_rothc .AND. l_nitrogen) THEN - IF (nsoilt > 1) THEN - errorstatus = 101 - CALL ereport("check hydrol_jls", errorstatus, & - "nsoilt>1 and l_nitrogen - n_leach not currently coded") - END IF - CALL n_leach(land_pts, asteps_since_triffid, dim_cslayer, timestep, & - w_flux_soilt, qbase_l_soilt, sub_surf_roff_gb, smcl_soilt, & - smcl_old_soilt, n_inorg_avail_pft, n_inorg_soilt_lyrs, & - n_leach_gb_acc, n_leach_soilt) -END IF - -!----------------------------------------------------------------------------- -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE hydrol_cbl -END MODULE hydrol_mod_cbl diff --git a/src/coupled/AM3/control/cable/cable_land/implicit/cable_land_sf_implicit_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/implicit/cable_land_sf_implicit_cbl.F90 deleted file mode 100644 index 07626e9b4..000000000 --- a/src/coupled/AM3/control/cable/cable_land/implicit/cable_land_sf_implicit_cbl.F90 +++ /dev/null @@ -1,931 +0,0 @@ -MODULE cable_land_sf_implicit_mod - -USE sf_melt_mod, ONLY: sf_melt -USE screen_tq_mod, ONLY: screen_tq -USE sf_evap_mod, ONLY: sf_evap -USE sice_htf_mod, ONLY: sice_htf - -USE um_types, ONLY: real_jlslsm - -IMPLICIT NONE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: & - ModuleName='CABLE_LAND_SF_IMPLICIT_MOD' - -CONTAINS -! SUBROUTINE CABLE_LAND_SF_IMPLICIT -------------------------------- -! -! Purpose: Calculate implicit correction for land point to surface -! fluxes of heat,moisture and momentum, to be used by -! the unconditionally stable and non-oscillatory BL -! numerical solver. -! -! edits associated with creation of CM3 denoted by CM3#56 -!-------------------------------------------------------------------- -! Arguments :- -SUBROUTINE cable_land_sf_implicit ( & -! IN values defining field dimensions and subset to be processed : - land_pts,land_index,nsurft,surft_index,surft_pts,sm_levels, & - canhc_surft,canopy,flake,smc_soilt,tile_frac,wt_ext_surft,fland,flandg, & -! IN everything not covered so far : - lw_down,sw_surft,t_soil_soilt,r_gamma,alpha1,ashtf_prime_surft, & - dtrdz_charney_grid_1,fraca,resfs,resft,rhokh_surft, & - emis_surft,snow_surft,dtstar_surft, & -! INOUT data : - tstar_surft,fqw_surft,fqw_1,ftl_1,ftl_surft,sf_diag, & -! OUT Diagnostic not requiring STASH flags : - ecan,ei_surft,esoil_surft,surf_ht_flux_land,ei_land,surf_htf_surft, & -! OUT data required elsewhere in UM system : - tstar_land,le_surft,radnet_surft,ecan_surft,esoil_soilt, & - ext_soilt,melt_surft,tstar_surft_old,ERROR, & - !New arguments replacing USE statements - ! lake_mod (IN) - lake_h_ice_gb, & - ! lake_mod (OUT) - surf_ht_flux_lake_ij, non_lake_frac, & - ! fluxes (IN) - anthrop_heat_surft, & - ! fluxes (OUT) - surf_ht_store_surft, & - ! c_elevate (IN) - lw_down_elevcorr_surft, & - ! prognostics (IN) - nsnow_surft, & - ! jules_mod (IN) - snowdep_surft, & - ! JULES Types containing field data (IN OUT) - crop_vars, & -!!!CABLE_LSM: - progs_cbl, work_cbl, progs_cnp, & - !CM3: - cycleno, numcycles, npft, dim_cs1, smvcst, & - ls_rain, ls_snow, con_rain, con_snow, & - tl_1, dtl1_1, qw_1, dqw1_1, ctctq1, & - canopy_gb, canopy_surft, smcl_soilt, sthf_soilt, sthu_soilt, & - gs, gs_surft, & - npp_gb, npp_PFT, npp_acc_pft, gpp_gb, gpp_pft, & - resp_s, resp_s_tot, & !resp_s_tile, !Kathy intro-ed as diag & - resp_p, resp_p_pft, g_leaf_pft ) -!!!CABLE_LSM: End - -!TYPE definitions -USE crop_vars_mod, ONLY: crop_vars_type - -USE csigma, ONLY: sbcon - -USE planet_constants_mod, ONLY: cp - -USE atm_fields_bounds_mod, ONLY: tdims, pdims - -USE theta_field_sizes, ONLY: t_i_length, t_j_length - -USE jules_surface_mod, ONLY: l_aggregate, l_flake_model, ls - -USE jules_snow_mod, ONLY: & - nsmax, rho_snow_const, cansnowtile, l_snow_nocan_hc - -USE jules_surface_types_mod, ONLY: lake - -USE sf_diags_mod, ONLY: strnewsfdiag - -#if defined(UM_JULES) -USE timestep_mod, ONLY: timestep, timestep_number -USE submodel_mod, ONLY: atmos_im -USE UM_parcore, ONLY: mype -#else -USE model_time_mod, ONLY: timestep_number => timestep -USE model_time_mod, ONLY: timestep => timestep_len -USE model_grid_mod, ONLY: latitude, longitude -#endif - -USE ancil_info, ONLY: nsoilt - -USE jules_surface_mod, ONLY: l_neg_tstar - -USE water_constants_mod, ONLY: lc, lf, rho_ice - -USE solinc_data, ONLY: sky, l_skyview - -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -USE jules_print_mgr, ONLY: jules_message, jules_print - -! In general CABLE utilizes a required subset of tbe JULES types, however; -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type ! CABLE requires extra progs -USE work_vars_mod_cbl, ONLY: work_vars_type ! and some kept thru timestep -USE progs_cnp_vars_mod, ONLY: progs_cnp_vars_type ! CASA requires extra progs -!CABLE_LSM:Make avail call to CABLE implicit version -USE cable_implicit_main_mod, ONLY: cable_implicit_main - -IMPLICIT NONE -!-------------------------------------------------------------------- -! Inputs :- -! (a) Defining horizontal grid and subset thereof to be processed. -! Checked for consistency. -!-------------------------------------------------------------------- -INTEGER, INTENT(IN) :: & - land_pts ! IN No of land points - -! (c) Soil/vegetation/land surface parameters (mostly constant). -INTEGER, INTENT(IN) :: & - land_index(land_pts) ! IN LAND_INDEX(I)=J => the Jth - ! point in ROW_LENGTH,ROWS is the - ! Ith land point. - -INTEGER, INTENT(IN) :: & - sm_levels & - ! IN No. of soil moisture levels -,nsurft & - ! IN No. of land tiles -,surft_index(land_pts,nsurft) & - ! IN Index of tile points -,surft_pts(nsurft) - ! IN Number of tile points - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - canhc_surft(land_pts,nsurft) & - ! IN Areal heat capacity of canopy - ! for land tiles (J/K/m2). -,canopy(land_pts,nsurft) & - ! IN Surface/canopy water for - ! snow-free land tiles (kg/m2) -,flake(land_pts,nsurft) & - ! IN Lake fraction. -,smc_soilt(land_pts,nsoilt) & - ! IN Available soil moisture (kg/m2). -,tile_frac(land_pts,nsurft) & - ! IN Tile fractions including - ! snow cover in the ice tile. -,wt_ext_surft(land_pts,sm_levels,nsurft) & - ! IN Fraction of evapotranspiration - ! extracted from each soil layer - ! by each tile. -,fland(land_pts) & - ! IN Land fraction on land pts. -,flandg(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Land fraction on all pts. -,emis_surft(land_pts,nsurft) - ! IN Emissivity for land tiles - ! IN Lying snow on tiles (kg/m2) - - -! (f) Atmospheric + any other data not covered so far, incl control. - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - lw_down(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! IN Surface downward LW radiation - ! (W/m2). -,sw_surft(land_pts,nsurft) - ! IN Surface net SW radiation on - ! land tiles (W/m2). - -REAL(KIND=real_jlslsm), INTENT(IN) :: r_gamma - ! IN implicit weight in level 1 - -REAL(KIND=real_jlslsm), INTENT(IN) :: & - alpha1(land_pts,nsurft) & - ! IN Mean gradient of saturated - ! specific humidity with respect - ! to temperature between the - ! bottom model layer and tile - ! surfaces -,ashtf_prime_surft(land_pts,nsurft) & - ! IN Adjusted SEB coefficient for - ! land tiles. -,dtrdz_charney_grid_1(pdims%i_start:pdims%i_end, & - pdims%j_start:pdims%j_end) & - ! IN -g.dt/dp for model layers. -,fraca(land_pts,nsurft) & - ! IN Fraction of surface moisture - ! flux with only aerodynamic - ! resistance for snow-free land - ! tiles. -,resfs(land_pts,nsurft) & - ! IN Combined soil, stomatal - ! and aerodynamic resistance - ! factor for fraction (1-FRACA) of - ! snow-free land tiles. -,resft(land_pts,nsurft) & - ! IN Total resistance factor. - ! FRACA+(1-FRACA)*RESFS for - ! snow-free land, 1 for snow. -,rhokh_surft(land_pts,nsurft) - ! IN Surface exchange coefficients - ! for land tiles - - -REAL(KIND=real_jlslsm), INTENT(OUT) :: t_soil_soilt(land_pts,nsoilt,sm_levels) - ! Soil temperatures (K). -REAL(KIND=real_jlslsm), INTENT(OUT) :: snow_surft(land_pts,nsurft) -!!!CABLE_LSM: -INTEGER, INTENT(IN) :: npft -INTEGER, INTENT(IN) :: dim_cs1 -INTEGER, INTENT(IN) :: cycleno, numcycles -REAL, INTENT(IN) :: smvcst(land_pts,sm_levels) - ! IN Volumetric saturation point -!forcing -REAL, INTENT(IN) :: ls_rain(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL, INTENT(IN) :: ls_snow(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL, INTENT(IN) :: con_rain(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL, INTENT(IN) :: con_snow(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) -REAL, INTENT(IN) :: tl_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) ! temperature -REAL, INTENT(IN) :: qw_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) ! humidity -REAL, INTENT(IN) :: dtl1_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) ! increment to temp -REAL, INTENT(IN) :: dqw1_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) ! increment to humidity -REAL, INTENT(IN) :: ctctq1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) ! temp/humidity increment -!re-declared as IN OUT as CABLE OUTs dtstar -REAL, INTENT(IN OUT) :: dtstar_surft(land_pts,nsurft) - ! Change in TSTAR over timestep -!!!CABLE_LSM: End - -!-------------------------------------------------------------------- -! In/outs :- -!-------------------------------------------------------------------- -TYPE (strnewsfdiag), INTENT(IN OUT) :: sf_diag -REAL(KIND=real_jlslsm), INTENT(IN OUT) :: & - tstar_surft(land_pts,nsurft) & - ! INOUT Surface tile temperatures -,fqw_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! INOUT Moisture flux between layers - ! (kg per square metre per sec) - ! FQW(,1) is total water flux - ! from surface, 'E'. -,ftl_1(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! INOUT FTL(,K) contains net - ! turbulent sensible heat flux - ! into layer K from below; so - ! FTL(,1) is the surface - ! sensible heat, H.(W/m2) -,ftl_surft(land_pts,nsurft) & - ! INOUT Surface FTL for land tiles -,fqw_surft(land_pts,nsurft) - ! INOUT Surface FQW for land tiles - -!!!CABLE_LSM:CM3 -!CM3#56 Potentially problematically - while these additional variables are available -! some of the CNP vars would not be available in the implicit sectio. This implies -! either partner changes through the UM boundary-layer scheme, USE of data modules -! and/or the work_cbl TYPE to pass stuff around in the longer term. -! -! As of 12/12/2023 - INH thinks it's okay -REAL(KIND=real_jlslsm), INTENT(INOUT) :: smcl_soilt(land_pts,nsoilt,sm_levels) - ! INOUT Soil Moisture -REAL(KIND=real_jlslsm), INTENT(INOUT) :: sthf_soilt(land_pts,nsoilt,sm_levels) - ! INOUT Soil Frozen fraction -REAL(KIND=real_jlslsm), INTENT(INOUT) :: sthu_soilt(land_pts,nsoilt,sm_levels) - ! INOUT Soil Unfrozen -REAL(KIND=real_jlslsm), INTENT(INOUT) ::ext_soilt(land_pts,nsoilt,sm_levels) - ! OUT Extraction of water from each - ! soil layer (kg/m2/s). -REAL, INTENT(OUT) :: canopy_gb(land_pts) -REAL, INTENT(OUT) :: canopy_surft(land_pts, nsurft) -REAL, INTENT(OUT) :: gs( land_pts ) -REAL, INTENT(OUT) :: gs_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: npp_acc_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: npp_gb(land_pts) -REAL, INTENT(OUT) :: npp_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: gpp_gb(land_pts) -REAL, INTENT(OUT) :: gpp_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: resp_s(land_pts, dim_cs1) ! Soil respiration (kg C/m2/s) -REAL, INTENT(OUT) :: resp_s_tot(land_pts) ! Total soil resp'n (kg C/m2/s) -REAL, INTENT(OUT) :: resp_p(land_pts) -REAL, INTENT(OUT) :: resp_p_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: g_leaf_pft(land_pts,npft) -!CABLE TYPES containing field data (IN OUT) -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs_cbl -TYPE(work_vars_type), INTENT(IN OUT) :: work_cbl -TYPE(progs_cnp_vars_type), INTENT(IN OUT) :: progs_cnp -!!!CABLE_LSM: End - -!-------------------------------------------------------------------- -! Outputs :- -!-1 Diagnostic (or effectively so - includes coupled model requisites):- - -! (a) Calculated anyway (use STASH space from higher level) :- -!-------------------------------------------------------------------- -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - ecan(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Gridbox mean evaporation from - ! canopy/surface store (kg/m2/s). - ! Zero over sea. -,esoil_surft(land_pts,nsurft) & - ! OUT ESOIL for snow-free land tiles -,surf_ht_flux_land(tdims%i_start:tdims%i_end, & - tdims%j_start:tdims%j_end) & - ! OUT Net downward heat flux at - ! surface over land - ! fraction of gridbox (W/m2). -,ei_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Sublimation from lying snow - ! (kg/m2/s). -,surf_htf_surft(land_pts,nsurft) - ! OUT Net downward surface heat flux - ! on tiles (W/m2) - -!-2 Genuinely output, needed by other atmospheric routines :- - -REAL(KIND=real_jlslsm), INTENT(OUT) :: & - tstar_land(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) & - ! OUT Land mean sfc temperature (K) -,le_surft(land_pts,nsurft) & - ! OUT Surface latent heat flux for - ! land tiles -,radnet_surft(land_pts,nsurft) & - ! OUT Surface net radiation on - ! land tiles (W/m2) -,ei_surft(land_pts,nsurft) & - ! OUT EI for land tiles. -,ecan_surft(land_pts,nsurft) & - ! OUT ECAN for snow-free land tiles -,esoil_soilt(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end,nsoilt) & - ! OUT Surface evapotranspiration - ! from soil moisture store - ! (kg/m2/s). -,melt_surft(land_pts,nsurft) & - ! OUT Snowmelt on land tiles (kg/m2/s -,tstar_surft_old(land_pts,nsurft) & - ! OUT Tile surface temperatures at - ! beginning of timestep. -,non_lake_frac(land_pts) - ! OUT total tile fraction for surface types - ! other than inland water - -INTEGER, INTENT(OUT) :: & - ERROR ! OUT 0 - AOK; - ! 1 to 7 - bad grid definition detected; - -!New arguments replacing USE statements -! lake_mod (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: lake_h_ice_gb(land_pts) -! lake_mod (OUT) -REAL(KIND=real_jlslsm) :: surf_ht_flux_lake_ij(t_i_length,t_j_length) -! fluxes (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: anthrop_heat_surft(land_pts,nsurft) -! fluxes (OUT) -REAL(KIND=real_jlslsm), INTENT(OUT) :: surf_ht_store_surft(land_pts,nsurft) -! c_elevate (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: lw_down_elevcorr_surft(land_pts,nsurft) -! prognostics (IN) -INTEGER, INTENT(IN) :: nsnow_surft(land_pts,nsurft) -! jules_mod (IN) -REAL(KIND=real_jlslsm), INTENT(IN) :: snowdep_surft(land_pts,nsurft) - -!TYPES containing field data (IN OUT) -TYPE(crop_vars_type), INTENT(IN OUT) :: crop_vars - -!-------------------------------------------------------------------- -! Workspace :- -!-------------------------------------------------------------------- -REAL(KIND=real_jlslsm) :: & - elake_surft(land_pts,nsurft) & - ! Lake evaporation. -,melt_ice_surft(land_pts,nsurft) & - ! Ice melt on FLake lake tile (kg/m2/s) -,lake_ice_mass(land_pts) & - ! areal density equivalent to - ! lake ice of a given depth (kg/m2) -,snowmelt(tdims%i_start:tdims%i_end,tdims%j_start:tdims%j_end) - ! Snowmelt (kg/m2/s). - -REAL(KIND=real_jlslsm) :: & - canhc_surf(land_pts) - ! Areal heat capacity of canopy - ! for land tiles (J/K/m2). - -! Local scalars :- - -INTEGER :: & - i,j & - ! LOCAL Loop counter (horizontal field index). -,k & - ! LOCAL Tile pointer -,l & - ! LOCAL Land pointer -,n & - ! LOCAL Loop counter (tile index). -,m - ! Loop counter for soil tiles - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='CABLE_LAND_SF_IMPLICIT' - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -!----------------------------------------------------------------------- - -! Calculate surface scalar fluxes, temperatures only at the 1st call -! of the subroutine (first stage of the new BL solver) using standard -! MOSES2 physics and equations. These are the final values for this -! timestep and there is no need to repeat the calculation. -!----------------------------------------------------------------------- - -ERROR = 0 - -!----------------------------------------------------------------------- -! 6.1 Convert FTL to sensible heat flux in Watts per square metre. -!----------------------------------------------------------------------- - -DO n = 1,nsurft - DO k = 1,surft_pts(n) - l = surft_index(k,n) - ftl_surft(l,n) = cp * ftl_surft(l,n) - END DO -END DO - -!----------------------------------------------------------------------- -! Land surface calculations -!----------------------------------------------------------------------- -!CABLE_LSM:likely unecessary initialization of radnet_surft -! initialise diagnostics to 0 to avoid packing problems -DO n = 1, nsurft - DO l = 1, land_pts - radnet_surft(l,n) = 0.0 - le_surft(l,n) = 0.0 - END DO -END DO - - - -!----------------------------------------------------------------------- -! Land surface calculations -!----------------------------------------------------------------------- -!CABLE_LSM: -DO N=1,Nsurft - DO L=1,LAND_PTS - MELT_surft(L,N) = 0. - ENDDO -ENDDO -!CABLE_LSM: End - -!CM3#56 - need to take a copy of tstart_surft prior to CABLE -! not needed to evaluate surf_ht_store_surft BUT it is an output needed by the UM -DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - tstar_surft_old(l,n) = tstar_surft(l,n) - END DO -!$OMP END DO NOWAIT -END DO - -!CM3#56 - use of REAL() in the call -! - ideally map %fe to the output le_surft in the unpack -! - check whether dtstar_surft is needed -! - this impacts on the CABLE redeclaration so cannot be a long-term fix -! - at some point we will need to sort out the CASA variables -call cable_implicit_main( tdims%i_end, tdims%j_end, land_pts, nsurft, npft, & - sm_levels, dim_cs1, cycleno, numcycles, & - timestep, timestep_number, land_index, & - surft_pts, surft_index, & - Fland, tile_frac, smvcst, & - ls_rain, ls_snow, con_rain, con_snow, & - tl_1, dtl1_1, qw_1, dqw1_1, ctctq1, & - canopy_gb, canopy_surft, t_soil_soilt(:,1,:), & - smcl_soilt(:,1,:), sthf_soilt(:,1,:), & - sthu_soilt(:,1,:), snow_surft, & - !returned fluxes etc - ftl_1, ftl_surft, fqw_1, fqw_surft, le_surft, & - tstar_surft, dtstar_surft, surf_ht_flux_land, surf_htf_surft, & - ecan_surft, esoil_surft, ei_surft, radnet_surft, & - gs, gs_surft, sf_diag% t1p5m_surft, & - sf_diag% q1p5m_surft, melt_surft, & - npp_gb, npp_pft, npp_acc_pft, gpp_gb, gpp_pft, & - resp_s, resp_s_tot, resp_p, resp_p_pft, g_leaf_pft, & - progs_cbl, work_cbl ) - -!!CABLE_LSM:End - -!$OMP PARALLEL & -!$OMP DEFAULT(NONE) & -!$OMP PRIVATE(l,n,j,i,k) & -!$OMP SHARED(tdims,nsurft,surft_pts,surft_index, & -!$OMP ftl_surft,nsoilt,land_pts,t_soil_soilt, & -!$OMP tstar_surft_old,tstar_surft,dtstar_surft,cp,error,tile_frac, & -!$OMP non_lake_frac,lake,l_flake_model,l_aggregate) - - -!----------------------------------------------------------------------- -! Optional error check : test for negative top soil layer temperature -!----------------------------------------------------------------------- -IF (l_neg_tstar) THEN - DO m = 1,nsoilt -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - IF (t_soil_soilt(l,m,1) < 0) THEN - ERROR = 1 - WRITE(jules_message,*) & - '*** ERROR DETECTED BY ROUTINE JULES_LAND_SF_IMPLICIT ***' - CALL jules_print('jules_land_sf_implicit_jls',jules_message) - WRITE(jules_message,*) 'NEGATIVE TEMPERATURE IN TOP SOIL LAYER AT ' - CALL jules_print('jules_land_sf_implicit_jls',jules_message) - WRITE(jules_message,*) 'LAND POINT ',l - CALL jules_print('jules_land_sf_implicit_jls',jules_message) - END IF - END DO -!$OMP END DO NOWAIT - END DO -END IF - -!----------------------------------------------------------------------- -! Diagnose the land surface temperature -!----------------------------------------------------------------------- - -!CM3#56 - if needed this evaluation of tstart_surft_old should be before cable. -!DO n = 1,nsurft -!!$OMP DO SCHEDULE(STATIC) -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! tstar_surft_old(l,n) = tstar_surft(l,n) -!!CABLE_LSM: use CABLE's tstar_tile -!!C! tstar_surft(l,n) = tstar_surft_old(l,n) + dtstar_surft(l,n) -! END DO -!!$OMP END DO NOWAIT -!END DO - -!----------------------------------------------------------------------- -! Calculate non_lake_frac -!----------------------------------------------------------------------- -!CM3#56 - this needs some thought and follow through as to where non_lake_frac is used -! - this appears to be linked solely to use of FLAKE so should remain as 1.0 -!$OMP DO SCHEDULE(STATIC) -DO l = 1,land_pts - ! initialise the non-lake fraction to one, not zero, - ! in case there should ever be more than one lake tile, see below - non_lake_frac(l) = 1.0 -END DO -!$OMP END DO NOWAIT - -!IF ( ( l_flake_model ) .AND. ( .NOT. l_aggregate) ) THEN -!!$OMP DO SCHEDULE(STATIC) -! DO l = 1,land_pts -! ! Remove FLake tile fraction. -! non_lake_frac(l) = non_lake_frac(l) - tile_frac(l,lake) -! END DO -!!$OMP END DO NOWAIT -!END IF - -!$OMP END PARALLEL - -!----------------------------------------------------------------------- -! 7. Surface evaporation components and updating of surface -! temperature (P245, routine SF_EVAP). -!----------------------------------------------------------------------- -!CABLE_LSM: -!CM2!CALL sf_evap ( & -!CM2! land_pts,nsurft, & -!CM2! land_index,surft_index,surft_pts,sm_levels,fland, & -!CM2! ashtf_prime_surft,canopy,dtrdz_charney_grid_1,flake,fraca, & -!CM2! snow_surft,resfs,resft,rhokh_surft,tile_frac,smc_soilt,wt_ext_surft, & -!CM2! timestep,r_gamma,fqw_1,fqw_surft,ftl_1,ftl_surft,tstar_surft, & -!CM2! ecan,ecan_surft,elake_surft,esoil_soilt,esoil_surft,ei_surft,ext_soilt, & -!CM2! sf_diag, non_lake_frac, & -!CM2! ! crop_vars_mod (IN) -!CM2! crop_vars%frac_irr_soilt, crop_vars%frac_irr_surft, & -!CM2! crop_vars%wt_ext_irr_surft, crop_vars%resfs_irr_surft, & -!CM2! ! crop_vars_mod (IN OUT) -!CM2! crop_vars%smc_irr_soilt, & -!CM2! ! crop_vars_mod (OUT) -!CM2! crop_vars%ext_irr_soilt) - -DO N=1,Nsurft - DO L=1,LAND_PTS - ELAKE_surft(L,N) = 0. - ENDDO -ENDDO - -DO j=tdims%j_start,tdims%j_end - DO i=tdims%i_start,tdims%i_end - ecan(i,j) = 0. - esoil_soilt(i,j,1) = 0. - ENDDO -ENDDO - -DO N=1,Nsurft - DO K=1,surft_PTS(N) - L = surft_INDEX(K,N) - j=(land_index(l)-1)/tdims%i_end + 1 - i = land_index(l) - (j-1)*tdims%i_end - ecan(i,j) = ecan(i,j) + tile_frac(l,n)*ecan_surft(l,n) - esoil_soilt(i,j,1) = esoil_soilt(i,j,1) + tile_frac(l,n)*esoil_surft(l,n) - ENDDO -ENDDO -!CABLE_LSM:End - -!----------------------------------------------------------------------- -! Surface melting of sea-ice and snow on land tiles. -!----------------------------------------------------------------------- - -!$OMP PARALLEL & -!$OMP DEFAULT(NONE) & -!$OMP PRIVATE(l,n,j,i) & -!$OMP SHARED(tdims,ei_land,snowmelt,nsurft,land_pts,melt_ice_surft) - -!$OMP DO SCHEDULE(STATIC) -DO j = tdims%j_start,tdims%j_end - DO i = tdims%i_start,tdims%i_end - ei_land(i,j) = 0.0 - snowmelt(i,j) = 0.0 - END DO -END DO -!$OMP END DO NOWAIT - -! Lake initialisation -DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - melt_ice_surft(l,n) = 0.0 - END DO -!$OMP END DO NOWAIT -END DO - -!$OMP END PARALLEL - -!CABLE_LSM: -DO n = 1,nsurft -!CM2! CALL sf_melt ( & -!CM2! land_pts,land_index, & -!CM2! surft_index(:,n),surft_pts(n),flandg, & -!CM2! alpha1(:,n),ashtf_prime_surft(:,n),dtrdz_charney_grid_1, & -!CM2! resft(:,n),rhokh_surft(:,n),tile_frac(:,n),timestep,r_gamma, & -!CM2! ei_surft(:,n),fqw_1,ftl_1,fqw_surft(:,n),ftl_surft(:,n), & -!CM2! tstar_surft(:,n),snow_surft(:,n),snowdep_surft(:,n), & -!CM2! melt_surft(:,n) & -!CM2! ) -!CM2! -!CM2! !----------------------------------------------------------------------- -!CM2! ! thermodynamic, flux contribution of melting ice on the FLake lake tile -!CM2! !----------------------------------------------------------------------- -!CM2! IF ( (l_flake_model ) & -!CM2! .AND. ( .NOT. l_aggregate) & -!CM2! .AND. (n == lake ) ) THEN -!CM2! -!CM2! ! lake_h_ice_gb is only initialised if FLake is on. -!CM2! -!CM2!!$OMP PARALLEL DO & -!CM2!!$OMP SCHEDULE(STATIC) & -!CM2!!$OMP DEFAULT(NONE) & -!CM2!!$OMP PRIVATE(l) & -!CM2!!$OMP SHARED(land_pts,lake_ice_mass,lake_h_ice_gb) -!CM2! DO l = 1, land_pts -!CM2! lake_ice_mass(l) = lake_h_ice_gb(l) * rho_ice -!CM2! END DO -!CM2!!$OMP END PARALLEL DO -!CM2! -!CM2! CALL sf_melt ( & -!CM2! land_pts,land_index, & -!CM2! surft_index(:,n),surft_pts(n),flandg, & -!CM2! alpha1(:,n),ashtf_prime_surft(:,n),dtrdz_charney_grid_1, & -!CM2! resft(:,n),rhokh_surft(:,n),tile_frac(:,n),timestep,r_gamma, & -!CM2! ei_surft(:,n),fqw_1,ftl_1,fqw_surft(:,n),ftl_surft(:,n), & -!CM2! tstar_surft(:,n),lake_ice_mass,lake_ice_mass / rho_snow_const, & -!CM2! melt_ice_surft(:,n) & -!CM2! ) -!CM2! END IF - - !----------------------------------------------------------------------- - ! Increment snow by sublimation and melt - !----------------------------------------------------------------------- - -!$OMP PARALLEL DO & -!$OMP SCHEDULE(STATIC) & -!$OMP DEFAULT(NONE) & -!$OMP PRIVATE(k,l,j,i) & -!$OMP SHARED(surft_pts,surft_index,land_index,t_i_length,ei_land,tile_frac, & -!$OMP ei_surft,snowmelt,melt_surft,n) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - ei_land(i,j) = ei_land(i,j) + tile_frac(l,n) * ei_surft(l,n) - snowmelt(i,j) = snowmelt(i,j) + & - tile_frac(l,n) * melt_surft(l,n) - END DO -!$OMP END PARALLEL DO - -END DO - -!$OMP PARALLEL & -!$OMP DEFAULT(SHARED) & -!$OMP PRIVATE(l,n,j,i,k) - -IF (sf_diag%smlt) THEN -!$OMP DO SCHEDULE(STATIC) - DO j = tdims%j_start,tdims%j_end - DO i = tdims%i_start,tdims%i_end - sf_diag%snomlt_surf_htf(i,j) = lf * snowmelt(i,j) - END DO - END DO -!$OMP END DO NOWAIT -END IF - -!$OMP DO SCHEDULE(STATIC) -DO j = tdims%j_start,tdims%j_end - DO i = tdims%i_start,tdims%i_end - surf_ht_flux_land(i,j) = 0.0 - END DO -END DO -!$OMP END DO NOWAIT - -!CM3#56 - remove FLAKE model -!IF ( (l_flake_model ) & -! .AND. ( .NOT. l_aggregate) ) THEN -!!$OMP DO SCHEDULE(STATIC) -! DO j = tdims%j_start,tdims%j_end -! DO i = tdims%i_start,tdims%i_end -! surf_ht_flux_lake_ij(i,j) = 0.0 -! END DO -! END DO -!!$OMP END DO NOWAIT -!END IF - -!$OMP DO SCHEDULE(STATIC) -DO l = 1,land_pts - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - tstar_land(i,j) = 0.0 -END DO -!$OMP END DO NOWAIT - -!CABLE_LSM: -! initialise diagnostics to 0 to avoid packing problems -IF (sf_diag%l_lw_surft) THEN - DO n = 1, nsurft -!$OMP DO SCHEDULE(STATIC) - DO l = 1, land_pts - sf_diag%lw_up_surft(l,n) = 0.0 - sf_diag%lw_down_surft(l,n) = 0.0 - END DO -!$OMP END DO NOWAIT - END DO -END IF - -!$OMP BARRIER - -!CM3#56 - remove option for skyview -!IF (l_skyview) THEN -!CABLE_LSM: -!CM2! DO n = 1,nsurft -!CM2!!$OMP DO SCHEDULE(STATIC) -!CM2! DO k = 1,surft_pts(n) -!CM2! l = surft_index(k,n) -!CM2! j=(land_index(l) - 1) / tdims%i_end + 1 -!CM2! i = land_index(l) - (j-1) * tdims%i_end -!CM2! radnet_surft(l,n) = sw_surft(l,n) + emis_surft(l,n) * & -!CM2! sky(i,j) * ( lw_down(i,j) + lw_down_elevcorr_surft(l,n) & -!CM2! - sbcon * tstar_surft(l,n)**4 ) -!CM2! END DO -!CM2!!$OMP END DO -!CM2! END DO -! IF (sf_diag%l_lw_surft) THEN -! DO n = 1,nsurft -!!$OMP DO SCHEDULE(STATIC) -! DO k = 1,surft_pts(n) -! l = surft_index(k,n) -! j=(land_index(l) - 1) / tdims%i_end + 1 -! i = land_index(l) - (j-1) * tdims%i_end -! sf_diag%lw_up_surft(l,n) = emis_surft(l,n) * sky(i,j) * & -! sbcon * tstar_surft(l,n)**4 & -! + (1.0 - emis_surft(l,n)) * & -! sky(i,j) * (lw_down(i,j) + & -! lw_down_elevcorr_surft(l,n)) -! sf_diag%lw_down_surft(l,n) = sky(i,j) * (lw_down(i,j) + & -! lw_down_elevcorr_surft(l,n)) -! END DO -!!$OMP END DO -! END DO -! END IF -!ELSE -!CABLE_LSM: -!! DO n = 1,nsurft -!!!$OMP DO SCHEDULE(STATIC) -!! DO k = 1,surft_pts(n) -!! l = surft_index(k,n) -!! j=(land_index(l) - 1) / tdims%i_end + 1 -!! i = land_index(l) - (j-1) * tdims%i_end -!! radnet_surft(l,n) = sw_surft(l,n) + emis_surft(l,n) * & -!! ( lw_down(i,j) + lw_down_elevcorr_surft(l,n) & -!! - sbcon * tstar_surft(l,n)**4 ) -!! END DO -!!!$OMP END DO -!! END DO - IF (sf_diag%l_lw_surft) THEN - DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / tdims%i_end + 1 - i = land_index(l) - (j-1) * tdims%i_end - sf_diag%lw_up_surft(l,n) = emis_surft(l,n) * sbcon * & - tstar_surft(l,n)**4 & - + (1.0 - emis_surft(l,n)) * & - (lw_down(i,j) + & - lw_down_elevcorr_surft(l,n)) - sf_diag%lw_down_surft(l,n) = lw_down(i,j) + & - lw_down_elevcorr_surft(l,n) - END DO -!$OMP END DO - END DO - END IF -!END IF !CM3#56 - -!CM3#56 - remove surf_ht_store_surft and look to fill inside CABLE if needed -! - remove FLAKE code -! - remove evaluation of any tiled flux and look to fill from CABLE -DO n = 1,nsurft -!$OMP DO SCHEDULE(STATIC) - DO k = 1,surft_pts(n) - l = surft_index(k,n) - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - !canhc_surf(l) = canhc_surft(l,n) - !IF ( ( .NOT. cansnowtile(n)) .AND. l_snow_nocan_hc .AND. & - ! (nsmax > 0) .AND. (nsnow_surft(l,n) > 0) ) canhc_surf(l) = 0.0 - - !CM3#56 - set to zero for now - should be coming from CABLE anyway - surf_ht_store_surft(l,n) = 0.0 -! surf_ht_store_surft(l,n) = (canhc_surf(l) / timestep) * & -! (tstar_surft(l,n) - tstar_surft_old(l,n)) -!!!CABLE_LSM: Replaced with CABLE field -!! surf_htf_surft(l,n) = radnet_surft(l,n) + anthrop_heat_surft(l,n) - & -!! ftl_surft(l,n) - & -!! le_surft(l,n) - & -!! lf * (melt_surft(l,n) + melt_ice_surft(l,n)) - & -!! surf_ht_store_surft(l,n) - ! separate out the lake heat flux for FLake - ! and replace the snow-melt (NSMAX=0 only) and ice-melt heat fluxes - ! so Flake can do its melting - !IF ( (l_flake_model ) & - ! .AND. ( .NOT. l_aggregate) & - ! .AND. (n == lake ) ) THEN - ! IF (nsmax == 0) THEN - ! surf_ht_flux_lake_ij(i,j) = surf_htf_surft(l,n) & - ! + lf * (melt_surft(l,n) + melt_ice_surft(l,n)) - ! ELSE - ! surf_ht_flux_lake_ij(i,j) = surf_htf_surft(l,n) & - ! + lf * melt_ice_surft(l,n) - ! END IF - !ELSE - surf_ht_flux_land(i,j) = surf_ht_flux_land(i,j) & - + tile_frac(l,n) * surf_htf_surft(l,n) - !END IF - tstar_land(i,j) = tstar_land(i,j) & - + tile_frac(l,n) * tstar_surft(l,n) - END DO -!$OMP END DO -END DO - - ! normalise the non-lake surface heat flux -!CABLE_LSM: -!CM2!IF ( l_flake_model .AND. ( .NOT. l_aggregate) ) THEN -!CM2!!$OMP DO SCHEDULE(STATIC) -!CM2! DO l = 1,land_pts -!CM2! j=(land_index(l) - 1) / t_i_length + 1 -!CM2! i = land_index(l) - (j-1) * t_i_length -!CM2! ! be careful about gridboxes that are all lake -!CM2! IF (non_lake_frac(l) > EPSILON(0.0)) THEN -!CM2! surf_ht_flux_land(i,j) = surf_ht_flux_land(i,j) / non_lake_frac(l) -!CM2! END IF -!CM2! END DO -!CM2!!$OMP END DO -!CM2!END IF - -IF (sf_diag%l_lh_land) THEN -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - sf_diag%lh_land(l) = SUM((tile_frac(l,:) * le_surft(l,:))) - END DO -!$OMP END DO -END IF - -!----------------------------------------------------------------------- -! Optional error check : test for negative surface temperature -!----------------------------------------------------------------------- -!CM3#56 revise to refer to CABLE not JULES -IF (l_neg_tstar) THEN -!$OMP DO SCHEDULE(STATIC) - DO l = 1,land_pts - j=(land_index(l) - 1) / t_i_length + 1 - i = land_index(l) - (j-1) * t_i_length - IF (tstar_land(i,j) < 0) THEN - ERROR = 1 - WRITE(jules_message,*) & - '*** ERROR DETECTED BY ROUTINE CABLE_LAND_SF_IMPLICIT ***' - CALL jules_print('cable_land_sf_implicit_cbl',jules_message) - WRITE(jules_message,*) 'NEGATIVE SURFACE TEMPERATURE AT LAND POINT ',l - CALL jules_print('cable_land_sf_implicit_cbl',jules_message) - END IF - END DO -!$OMP END DO -END IF - -!$OMP END PARALLEL - - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE cable_land_sf_implicit -END MODULE cable_land_sf_implicit_mod diff --git a/src/coupled/AM3/control/cable/cable_land/radiation/alloc_rad_albedo_vars_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/radiation/alloc_rad_albedo_vars_cbl.F90 deleted file mode 100644 index 7c30b5c02..000000000 --- a/src/coupled/AM3/control/cable/cable_land/radiation/alloc_rad_albedo_vars_cbl.F90 +++ /dev/null @@ -1,267 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE alloc_rad_albedo_vars_mod - -!----------------------------------------------------------------------------- -! Description: -! Allocate and deallocate variables in the rad structure -! -! This MODULE is USEd in: -! cable_land_albedo_mod_cbl.F90 (JULES) -! -! This MODULE contains 2 public Subroutine: -! alloc_local_vars, -! flush_local_vars -! -! Code owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE -PUBLIC :: alloc_local_vars -PUBLIC :: flush_local_vars -PRIVATE - -CONTAINS - -! Allocate vars in mp format -SUBROUTINE alloc_local_vars( EffSurfRefl_beam, EffSurfRefl_dif, mp, nrb, & - reducedLAIdue2snow, HeightAboveSnow, coszen, & - ExtCoeff_beam, ExtCoeff_dif, EffExtCoeff_beam, & - EffExtCoeff_dif, CanopyTransmit_beam, & - CanopyTransmit_dif, CanopyRefl_beam, & - CanopyRefl_dif, RadFbeam, RadAlbedo, AlbSnow, c1, & - rhoch, xk, metDoY, SnowDepth, SnowDensity, & - SoilTemp, SnowAge, SW_down, veg_mask ) - -! Description: -! Allocate variables in the rad structure - -IMPLICIT NONE - -INTEGER :: mp, nrb -REAL, INTENT(OUT), ALLOCATABLE :: EffSurfRefl_dif(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: EffSurfRefl_beam(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: SnowDepth(:) -REAL, INTENT(OUT), ALLOCATABLE :: SnowDensity(:) -REAL, INTENT(OUT), ALLOCATABLE :: SoilTemp(:) -REAL, INTENT(OUT), ALLOCATABLE :: SnowAge( :) -REAL, INTENT(OUT), ALLOCATABLE :: reducedLAIdue2snow(:) ! Eff. LAI given snow -REAL, INTENT(OUT), ALLOCATABLE :: HeightAboveSnow(:) ! Canopy hgt above snow -REAL, INTENT(OUT), ALLOCATABLE :: coszen(:) -REAL, INTENT(OUT), ALLOCATABLE :: ExtCoeff_beam(:) -REAL, INTENT(OUT), ALLOCATABLE :: ExtCoeff_dif(:) -REAL, INTENT(OUT), ALLOCATABLE :: EffExtCoeff_beam(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: EffExtCoeff_dif(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: CanopyTransmit_dif(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: CanopyTransmit_beam(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: CanopyRefl_dif(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: CanopyRefl_beam(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: AlbSnow(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: c1(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: rhoch(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: xk(:,:) -! these are dummies in JULES rad call but req'd to load arg lists -REAL, INTENT(OUT), ALLOCATABLE :: SW_down(:,:) ! dummy -REAL, INTENT(OUT), ALLOCATABLE :: RadFbeam(:,:) -REAL, INTENT(OUT), ALLOCATABLE :: RadAlbedo(:,:) -INTEGER, INTENT(OUT), ALLOCATABLE :: metDoY(:) ! can pass DoY from current_time -! vegetated mask required on albedo pathway -LOGICAL, INTENT(OUT), ALLOCATABLE :: veg_mask(:) - -IF ( .NOT. ALLOCATED(reducedLAIdue2snow) ) THEN - ALLOCATE( reducedLAIdue2snow(mp) ) -END IF -IF ( .NOT. ALLOCATED(HeightAboveSnow) ) THEN - ALLOCATE( HeightAboveSnow(mp) ) -END IF -IF ( .NOT. ALLOCATED(coszen) ) THEN - ALLOCATE( coszen(mp) ) -END IF -IF ( .NOT. ALLOCATED(EffSurfRefl_dif) ) THEN - ALLOCATE( EffSurfRefl_dif(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(EffSurfRefl_beam) ) THEN - ALLOCATE( EffSurfRefl_beam(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(SnowDepth) ) THEN - ALLOCATE( SnowDepth(mp) ) -END IF -IF ( .NOT. ALLOCATED(SnowDensity) ) THEN - ALLOCATE( SnowDensity(mp) ) -END IF -IF ( .NOT. ALLOCATED(SoilTemp) ) THEN - ALLOCATE( SoilTemp(mp) ) -END IF -IF ( .NOT. ALLOCATED(SnowAge) ) THEN - ALLOCATE( SnowAge(mp) ) -END IF -IF ( .NOT. ALLOCATED(ExtCoeff_beam) ) THEN - ALLOCATE( ExtCoeff_beam(mp) ) -END IF -IF ( .NOT. ALLOCATED(ExtCoeff_dif) ) THEN - ALLOCATE( ExtCoeff_dif(mp) ) -END IF -IF ( .NOT. ALLOCATED(EffExtCoeff_beam) ) THEN - ALLOCATE( EffExtCoeff_beam(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(EffExtCoeff_dif) ) THEN - ALLOCATE( EffExtCoeff_dif(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(CanopyTransmit_dif) ) THEN - ALLOCATE( CanopyTransmit_dif(mp, nrb)) -END IF -IF ( .NOT. ALLOCATED(CanopyTransmit_beam) ) THEN - ALLOCATE( CanopyTransmit_beam(mp,nrb) ) -END IF -IF ( .NOT. ALLOCATED(CanopyRefl_dif) ) THEN - ALLOCATE( CanopyRefl_dif(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(CanopyRefl_beam) ) THEN - ALLOCATE( CanopyRefl_beam(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(AlbSnow) ) THEN - ALLOCATE( AlbSnow(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(c1) ) THEN - ALLOCATE( c1(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(rhoch) ) THEN - ALLOCATE( rhoch(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(xk) ) THEN - ALLOCATE( xk(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(metDoY) ) THEN - ALLOCATE( metDoY(mp) ) -END IF -IF ( .NOT. ALLOCATED(SW_down) ) THEN - ALLOCATE( SW_down(mp,nrb) ) -END IF -IF ( .NOT. ALLOCATED(RadFbeam) ) THEN - ALLOCATE( RadFbeam(mp, nrb) ) -END IF -IF ( .NOT. ALLOCATED(RadAlbedo) ) THEN - ALLOCATE( RadAlbedo(mp, nrb) ) -END IF -IF (.NOT. ALLOCATED(veg_mask) ) THEN - ALLOCATE( veg_mask(mp) ) -END IF - -EffSurfRefl_dif(:,:) = 0.0 -EffSurfRefl_beam(:,:) = 0.0 -SnowDepth = 0.0 -SnowDensity = 0.0 -SoilTemp = 0.0 -SnowAge = 0.0 -coszen(:) = 0.0 -reducedLAIdue2snow(:) = 0.0 -HeightAboveSnow(:) = 0.0 -ExtCoeff_beam(:) = 0.0 -ExtCoeff_dif(:) = 0.0 -EffExtCoeff_beam(:,:) = 0.0 -EffExtCoeff_dif(:,:) = 0.0 -CanopyTransmit_dif(:,:) = 0.0 -CanopyTransmit_beam(:,:) = 0.0 -CanopyRefl_dif(:,:) = 0.0 -CanopyRefl_beam(:,:) = 0.0 -AlbSnow(:,:) = 0.0 -rhoch(:,:) = 0.0 -xk(:,:) = 0.0 -c1(:,:) = 0.0 -RadFbeam(:,:) = 0.0 -RadAlbedo(:,:) = 0.0 -SW_down(:,:) = 0.0 -metDoY(:) = 0 !can pass DoY from current_time% -veg_mask(:) = .FALSE. - -RETURN - -END SUBROUTINE alloc_local_vars - -!flush memory -SUBROUTINE flush_local_vars( EffSurfRefl_beam, EffSurfRefl_dif, SnowDepth, & - SnowDensity, SoilTemp, SnowAge, & - reducedLAIdue2snow, HeightAboveSnow, coszen, & - ExtCoeff_beam, ExtCoeff_dif, EffExtCoeff_beam, & - EffExtCoeff_dif, CanopyTransmit_beam, & - CanopyTransmit_dif, CanopyRefl_beam, & - CanopyRefl_dif, RadFbeam, RadAlbedo, AlbSnow, c1, & - rhoch, xk, metDoY, SW_down, veg_mask ) - -! Description: -! Deallocate variables in the rad structure - -IMPLICIT NONE - -REAL, INTENT(IN OUT), ALLOCATABLE :: EffSurfRefl_dif(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: EffSurfRefl_beam(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: SnowDepth(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: SnowDensity(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: SoilTemp(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: SnowAge( :) -REAL, INTENT(IN OUT), ALLOCATABLE :: reducedLAIdue2snow(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: HeightAboveSnow(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: coszen(:) -!these local to CABLE and can be flushed every timestep -REAL, INTENT(IN OUT), ALLOCATABLE :: ExtCoeff_beam(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: ExtCoeff_dif(:) -REAL, INTENT(IN OUT), ALLOCATABLE :: EffExtCoeff_beam(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: EffExtCoeff_dif(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: CanopyTransmit_dif(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: CanopyTransmit_beam(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: CanopyRefl_dif(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: CanopyRefl_beam(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: RadFbeam(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: RadAlbedo(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: AlbSnow(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: c1(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: rhoch(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: xk(:,:) -REAL, INTENT(IN OUT), ALLOCATABLE :: SW_down(:,:) ! dummy -LOGICAL, INTENT(IN OUT), ALLOCATABLE :: veg_mask(:) -INTEGER, INTENT(IN OUT), ALLOCATABLE :: metDoY(:) ! pass DoY from current_time - -IF ( ALLOCATED(EffSurfRefl_dif) ) DEALLOCATE ( EffSurfRefl_dif ) -IF ( ALLOCATED(EffSurfRefl_beam) ) DEALLOCATE ( EffSurfRefl_beam ) -IF ( ALLOCATED(SnowDepth) ) DEALLOCATE( SnowDepth ) -IF ( ALLOCATED(SnowDensity) ) DEALLOCATE( SnowDensity ) -IF ( ALLOCATED(SoilTemp) ) DEALLOCATE( SoilTemp ) -IF ( ALLOCATED(SnowAge) ) DEALLOCATE( SnowAge ) -IF ( ALLOCATED(reducedLAIdue2snow) ) DEALLOCATE( reducedLAIdue2snow ) -IF ( ALLOCATED(HeightAboveSnow) ) DEALLOCATE( HeightAboveSnow ) -IF ( ALLOCATED(coszen) ) DEALLOCATE( coszen ) -IF ( ALLOCATED (ExtCoeff_beam) ) DEALLOCATE (ExtCoeff_beam ) -IF ( ALLOCATED (ExtCoeff_dif) ) DEALLOCATE (ExtCoeff_dif ) -IF ( ALLOCATED (EffExtCoeff_beam) ) DEALLOCATE (EffExtCoeff_beam ) -IF ( ALLOCATED (EffExtCoeff_dif) ) DEALLOCATE (EffExtCoeff_dif ) -IF ( ALLOCATED (CanopyTransmit_dif) ) DEALLOCATE (CanopyTransmit_dif ) -IF ( ALLOCATED (CanopyTransmit_beam)) DEALLOCATE (CanopyTransmit_beam ) -IF ( ALLOCATED (CanopyRefl_dif) ) DEALLOCATE (CanopyRefl_dif ) -IF ( ALLOCATED (CanopyRefl_beam) ) DEALLOCATE (CanopyRefl_beam ) -IF ( ALLOCATED (RadFbeam) ) DEALLOCATE (RadFbeam ) -IF ( ALLOCATED (RadAlbedo) ) DEALLOCATE (RadAlbedo ) -IF ( ALLOCATED (AlbSnow) ) DEALLOCATE (AlbSnow ) -IF ( ALLOCATED (c1) ) DEALLOCATE (c1 ) -IF ( ALLOCATED (rhoch) ) DEALLOCATE (rhoch ) -IF ( ALLOCATED (xk) ) DEALLOCATE (xk ) -IF ( ALLOCATED (SW_down) ) DEALLOCATE (SW_down ) -IF ( ALLOCATED (MetDoY) ) DEALLOCATE (MetDoY ) -IF ( ALLOCATED (veg_mask) ) DEALLOCATE (veg_mask) - -RETURN -END SUBROUTINE flush_local_vars - -END MODULE alloc_rad_albedo_vars_mod diff --git a/src/coupled/AM3/control/cable/cable_land/radiation/cable_land_albedo_mod_cbl.F90 b/src/coupled/AM3/control/cable/cable_land/radiation/cable_land_albedo_mod_cbl.F90 deleted file mode 100644 index b4ef968e8..000000000 --- a/src/coupled/AM3/control/cable/cable_land/radiation/cable_land_albedo_mod_cbl.F90 +++ /dev/null @@ -1,386 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE cable_land_albedo_mod - -!----------------------------------------------------------------------------- -! Description: -! Computes the albedo for CABLE and returns it to JULES -! -! This MODULE is USEd in: -! surf_couple_radiation_mod.F90 (JULES) -! -! This MODULE contains 1 public Subroutine: -! cable_land_albedo -! Other Subroutines: -! cable_pack_Albsoil, -! cable_pack_progs -! -! Code owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE -PUBLIC :: cable_land_albedo -PRIVATE - -CONTAINS - -SUBROUTINE cable_land_albedo ( & - !OUT: JULES (per rad band) albedos [GridBoxMean & per tile albedo] - land_albedo , alb_surft, & - !IN: JULES dimensions and associated - row_length, rows, land_pts, nsurft, npft, & - surft_pts, surft_index, land_index, & - !IN: JULES Surface descriptions generally parametrized - tile_frac, LAI_pft_um, HGT_pft_um, soil_alb, & - !IN: JULES timestep varying fields - cosine_zenith_angle, snow_tile, & - !IN:CABLE dimensions from grid_constants_cbl - nrb, nrs, mp, & - !IN: CABLE specific surface_type indexes - ICE_Surfacetype, lakes_SurfaceType, ICE_SoilType, & - !IN: CABLE constants - Cz0surf_min, Clai_thresh, Ccoszen_tols, Cgauss_w, Cpi, Cpi180, & - !IN: CABLE prognostics. decl in progs_cbl_vars_mod.F90 - SoilTemp_CABLE, OneLyrSnowDensity_CABLE, SnowAge_CABLE, work, pars & -) -!------------------------------------------------------------------------------- -! Description: -! Provide (return) albedo(s) to JULES [land_albedo , alb_surft] -! per rad stream (VIS/NIR, Direct&Diffuse) [GridBoxMean & per tile albedo] -! Three main sections: -! 1. Pack CABLE variables from those passed from surf_couple_radiation() -! 2. Call CABLE's radiation/albedo scheme -! 3. Unpack albedos to send back to JULES -!------------------------------------------------------------------------------- - -! USE subroutines -! Route into CABLE & UNPACKING what we have computed for JULES -USE cable_rad_driv_mod, ONLY: cable_rad_driver -USE cable_rad_unpack_mod, ONLY: cable_rad_unpack - -! PACKING from JULES array dims to CABLE active tile 1-D vector -USE init_active_tile_mask_mod, ONLY: init_active_tile_mask_cbl -USE cable_pack_mod, ONLY: cable_pack_rr - -! Define CABLE grid, sunlit/veg masks & initialize surface type params -USE map_cable_parms_mod, ONLY: map_cable_parms -USE alloc_rad_albedo_vars_mod, ONLY: alloc_local_vars, flush_local_vars -USE cbl_masks_mod, ONLY: fveg_mask - -!Compute canopy exposed above (potential) snow -USE cbl_LAI_canopy_height_mod, ONLY: limit_HGT_LAI -USE hruff_eff_LAI_mod_cbl, ONLY: HgtAboveSnow, LAI_eff - -USE work_vars_mod_cbl, ONLY: work_vars_type ! and some kept thru timestep - -USE jules_soil_mod, ONLY: dzsoil -USE grid_constants_mod_cbl, ONLY: nsl -USE params_io_mod_cbl, ONLY: params_io_data_type - -IMPLICIT NONE -! re-decl dims necessary to declare OUT fields -!-- IN: JULES model dimensions -INTEGER, INTENT(IN) :: row_length, rows !# grid cell x, y -INTEGER, INTENT(IN) :: nsurft !# surface types, PFTS -INTEGER, INTENT(IN) :: land_pts !# land points on x,y grid -!--- IN: CABLE declared in grid_cell_constants_cbl -INTEGER, INTENT(IN) :: nrs !# rad streams - !(:,:,1) direct beam VIS - !(:,:,2) diffuse visible - !(:,:,3) direct beam NIR - !(:,:,4) diffuse NIR -!--- OUT: JULES (per rad band) albedos [GridBoxMean & per tile albedo] -REAL, INTENT(OUT) :: land_albedo(row_length,rows,nrs) ! [land_albedo_ij] -REAL, INTENT(OUT) :: alb_surft(Land_pts,nsurft,nrs) ! [alb_tile] - -!-- IN: JULES model dimensions -INTEGER, INTENT(IN) :: npft !# surface types, PFTS - -!---IN: JULES model associated -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per PFT -INTEGER, INTENT(IN) :: surft_index(land_pts,nsurft) ! Index in land_pts array -INTEGER, INTENT(IN) :: land_index(land_pts) ! Index in (x,y) array - -!-- IN: JULES Surface descriptions generally parametrized -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) ! fraction of each surf type -REAL, INTENT(IN) :: LAI_pft_um(land_pts, npft) ! Leaf area index. -REAL, INTENT(IN) :: HGT_pft_um(land_pts, npft) ! Canopy height -REAL, INTENT(IN) :: soil_alb(land_pts) ! Snow-free, soil albedo - -!---IN: JULES timestep varying fields -REAL, INTENT(IN) :: cosine_zenith_angle(row_length,rows) ! zenith angle of sun -REAL, INTENT(IN) :: snow_tile(land_pts,nsurft) ! snow depth (units?) - -!--- IN: CABLE declared in grid_cell_constants_cbl -INTEGER, INTENT(IN) :: nrb !# rad bands VIS/NIR + Legacy LW -INTEGER, INTENT(OUT) :: mp ! curr. NOT requ'd OUT, however it likely will - -!--- IN: CABLE specific Surface/Soil type indexes -INTEGER, INTENT(IN) :: ICE_SurfaceType -INTEGER, INTENT(IN) :: lakes_SurfaceType -INTEGER, INTENT(IN) :: ICE_SoilType - -!---IN: CABLE constants -REAL, INTENT(IN) :: Cz0surf_min ! the minimum roughness of bare soil -REAL, INTENT(IN) :: Clai_thresh ! min. LAI signalling a cell is vegetated -REAL, INTENT(IN) :: Cgauss_w(nrb) ! Gaussian integration weights -REAL, INTENT(IN) :: Cpi ! PI -REAL, INTENT(IN) :: Cpi180 ! PI in radians -REAL, INTENT(IN) :: Ccoszen_tols ! sun rise/set threshold for zenith angle - ! signals daylit - -!---IN: CABLE prognostics. decl in progs_cbl_vars_mod.F90 -REAL, INTENT(IN) :: SoilTemp_CABLE(land_pts, nsurft ) -REAL, INTENT(IN) :: OneLyrSnowDensity_CABLE(land_pts, nsurft ) -REAL, INTENT(IN) :: SnowAge_CABLE(land_pts, nsurft ) - -TYPE(work_vars_type), INTENT(IN OUT) :: work -TYPE(params_io_data_type), INTENT(IN) :: pars - - -!--- local vars - Neither IN nor OUT (passed to subrs) - -LOGICAL, ALLOCATABLE :: L_tile_pts(:,:) ! TRUE where tile_frac > 0 - -! Albedos req'd by JULES - Effective Surface Relectance as seen by atmosphere -REAL, ALLOCATABLE :: EffSurfRefl_dif(:,:) -REAL, ALLOCATABLE :: EffSurfRefl_beam(:,:) - -! vegetated mask required on albedo pathway -LOGICAL, ALLOCATABLE :: veg_mask(:) - -! Formerly canopy%vlaiw, rough%hruff SAVEd after explicit call to CABLE -REAL, ALLOCATABLE :: reducedLAIdue2snow(:) ! Eff. LAI IF snow [canopy%vlaiw] -REAL, ALLOCATABLE :: HeightAboveSnow(:) ! Canopy Hgt above snow (rough%hruff) - -! arrays to map IN progs to CABLE vector length -REAL, ALLOCATABLE :: SnowDepth(:) ! Total Snow depth - water eqivalent - - ! ssnow%snowd -REAL, ALLOCATABLE :: SnowDensity(:) ! Total Snow density (assumes 1 layer -REAL, ALLOCATABLE :: SoilTemp(:) ! Soil Temperature of top layer (soil%tgg) -REAL, ALLOCATABLE :: SnowAge(:) ! Snow age (assumes 1 layer describes snow - ! ssnow%isflag - -REAL, ALLOCATABLE :: coszen(:) - -REAL, ALLOCATABLE :: ExtCoeff_beam(:) -REAL, ALLOCATABLE :: ExtCoeff_dif(:) -REAL, ALLOCATABLE :: EffExtCoeff_beam(:,:) -REAL, ALLOCATABLE :: EffExtCoeff_dif(:,:) -REAL, ALLOCATABLE :: CanopyTransmit_dif(:,:) -REAL, ALLOCATABLE :: CanopyTransmit_beam(:,:) -REAL, ALLOCATABLE :: CanopyRefl_dif(:,:) -REAL, ALLOCATABLE :: CanopyRefl_beam(:,:) -REAL, ALLOCATABLE :: RadFbeam(:,:) -REAL, ALLOCATABLE :: RadAlbedo(:,:) -REAL, ALLOCATABLE :: AlbSnow(:,:) -REAL, ALLOCATABLE :: c1(:,:) -REAL, ALLOCATABLE :: rhoch(:,:) -REAL, ALLOCATABLE :: xk(:,:) -! used in Calc of Beam calculation NOT on rad/albedo path. -! However Needed to fulfill arg list with dummy -REAL, ALLOCATABLE :: SW_down(:, :) ! NA at surf_couple_rad layer -INTEGER, ALLOCATABLE :: metDoY(:) ! can pass DoY from current_time - -LOGICAL :: jls_standalone = .FALSE. -LOGICAL :: jls_radiation = .TRUE. !um_radiation = jls_radiation -LOGICAL, SAVE :: first_call = .TRUE. !only initialize params on first call - -INTEGER :: i -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_rad_main" -! End header - -! initialise INTENT(OUT) fields -land_albedo = 0.0; alb_surft = 0.0 - -! Determine the number of active tiles -mp = SUM(surft_pts) - -! Define mapping mask. i.e. l_tile_pts =TRUE (active) , where tile_frac > 0 -CALL init_active_tile_mask_cbl(l_tile_pts, land_pts, nsurft, tile_frac ) - -! alloc/zero each timestep -! metDoY, SW_down, RadFbeaam, RadAlbedo NOT used on rad/albedo path. -! Nevertheless, need to fulfill later arg list(s) with dumies -CALL alloc_local_vars( EffSurfRefl_beam, EffSurfRefl_dif, mp, nrb, & - reducedLAIdue2snow, HeightAboveSnow, coszen, & - ExtCoeff_beam, ExtCoeff_dif, EffExtCoeff_beam, & - EffExtCoeff_dif, CanopyTransmit_beam, & - CanopyTransmit_dif, CanopyRefl_beam, CanopyRefl_dif, & - RadFbeam, RadAlbedo, AlbSnow, c1, rhoch, xk, metDoY, & - SnowDepth, SnowDensity, SoilTemp, SnowAge, & - SW_down, veg_mask ) -! ----------------------------------------------------------------------------- -! 1. PACK CABLE fields -! ----------------------------------------------------------------------------- - -! map PFT/soil parameters to mp format -IF( first_call) THEN - CALL map_cable_parms( mp, nsl, nrb, land_pts, nsurft, l_tile_pts, & - ICE_SurfaceType,ICE_SoilType, dzsoil, work%veg, & - work%soil, pars, tile_frac ) - - ! Pack UM spatial (per landpoint) bare soil albedo to mp vector for CABLE - CALL cable_pack_Albsoil( work%soil%albsoil, soil_alb, mp, nrb, l_tile_pts, & - nsurft, land_pts ) - - first_call = .FALSE. -END IF -! Pack UM spatial (per cell) zenith angle to mp vector for CABLE -CALL cable_pack_rr( coszen, cosine_zenith_angle, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -! Pack UM spatial (per landpoint,ntile) CABLE prognostics to mp vector -CALL cable_pack_progs( SnowDepth, SnowDensity, SoilTemp, SnowAge, mp, & - land_pts, nsurft, l_tile_pts, snow_tile, & - OneLyrSnowDensity_CABLE, SoilTemp_CABLE, SnowAge_CABLE ) -! ----------------------------------------------------------------------------- - -! limit IN height, LAI and initialize some existing cable % types -CALL limit_HGT_LAI( work%veg%vlai, work%veg%hc, mp, land_pts, nsurft, npft, & - surft_pts, surft_index, tile_frac, l_tile_pts, & - LAI_pft_um, HGT_pft_um, CLAI_thresh ) - -! set Height of Canopy above snow (rough%hruff) -CALL HgtAboveSnow( HeightAboveSnow, mp, Cz0surf_min, work%veg%hc, & - SnowDepth, SnowDensity ) - -! set Effective LAI considering potential snow coverage [cabopy%vlaiw] -CALL LAI_eff( mp, work%veg%vlai, work%veg%hc, HeightAboveSnow, reducedLAIdue2snow) - -! Define logical mask for vegetated mp cell -CALL fveg_mask( veg_mask, mp, Clai_thresh, reducedLAIdue2snow ) - -work%reducedLAIdue2snow(1:mp) = reducedLAIdue2snow(:) - -!------------------------------------------------------------------------------ -! 2. Call CABLE_rad_driver to run specific and necessary components of CABLE -!------------------------------------------------------------------------------ -CALL cable_rad_driver( EffSurfRefl_beam, EffSurfRefl_dif, land_pts, & - mp, nrb, ICE_SoilType, lakes_SurfaceType, Clai_thresh, & - Ccoszen_tols, CGauss_w, Cpi, Cpi180, Cz0surf_min, & - veg_mask, jls_standalone, jls_radiation, work%veg%iveg, & - work%soil%isoilm, work%veg%vlai, work%veg%hc, & - SnowDepth, SnowDensity, SoilTemp, SnowAge, & - work%soil%albsoil, coszen, work%veg%Xfang, & - work%veg%Taul, work%veg%Refl, HeightAboveSnow, & - reducedLAIdue2snow, ExtCoeff_beam, ExtCoeff_dif, & - EffExtCoeff_beam, EffExtCoeff_dif, CanopyTransmit_beam,& - CanopyTransmit_dif, CanopyRefl_beam,CanopyRefl_dif, c1, & - rhoch, xk, AlbSnow, RadFbeam, RadAlbedo, metDoY, SW_down) - -!------------------------------------------------------------------------------ -! 3. Unpack variables (CABLE computed albedos) to JULES -!------------------------------------------------------------------------------ -CALL cable_rad_unpack( land_albedo, alb_surft, mp, nrs, row_length, rows, & - land_pts, nsurft, surft_pts, surft_index, & - land_index, tile_frac, l_tile_pts, & - EffSurfRefl_beam, EffSurfRefl_dif ) - -CALL flush_local_vars( EffSurfRefl_beam, EffSurfRefl_dif,SnowDepth, & - SnowDensity, SoilTemp, SnowAge, reducedLAIdue2snow, & - HeightAboveSnow, coszen, ExtCoeff_beam, ExtCoeff_dif, & - EffExtCoeff_beam, EffExtCoeff_dif, CanopyTransmit_beam, & - CanopyTransmit_dif, CanopyRefl_beam, CanopyRefl_dif, & - RadFbeam, RadAlbedo, AlbSnow, c1, rhoch, xk, metDoY, & - SW_down, veg_mask ) - -! for completeness flick switches before leaving -jls_radiation= .FALSE. - -RETURN - -END SUBROUTINE cable_land_albedo - -!============================================================================== -SUBROUTINE cable_pack_Albsoil( AlbSoil, soil_alb, mp, nrb, l_tile_pts, & - nsurft, land_pts ) - -! Description: -! Pack spatial UM bare soil albedo to CABLE dimensions, HOWEVER limited by -! JULES typically has one soil type per cell & no distiction b//n rad bands - -IMPLICIT NONE - -REAL, INTENT(OUT) :: AlbSoil(:, :) -INTEGER, INTENT(IN) :: mp, nsurft, land_pts, nrb -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) -REAL, INTENT(IN) :: soil_alb(land_pts) -!local vars: -REAL :: fvar(land_pts, nsurft) -INTEGER :: n,l - -AlbSoil(:,:) = 0.0 ! albsoil(:,3) stays = 0.0 -fvar(:, :) = 0.0 - -DO n = 1, nsurft - DO l = 1, land_pts - fvar(l,n) = soil_alb(l) - END DO -END DO - -AlbSoil(:,1) = PACK(fvar, l_tile_pts) -AlbSoil(:,2) = AlbSoil(:,1) - -RETURN -END SUBROUTINE cable_pack_Albsoil - -SUBROUTINE cable_pack_progs( SnowDepth, SnowDensity,SoilTemp, SnowAge, & - mp, land_pts, nsurft, l_tile_pts, & - snow_tile, OneLyrSnowDensity_CABLE, & - SoilTemp_CABLE, SnowAge_CABLE ) - -! Description: -! Pack CABLE prognostics n CABLE dimensions from passed JULES vars - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: land_pts, nsurft, mp - -! map IN progs to CABLE veector length -REAL, INTENT(OUT), ALLOCATABLE :: SnowDepth(:) ! Tot Snow depth - water eqiv. -REAL, INTENT(OUT), ALLOCATABLE :: SnowDensity(:) ! Snow density-assumes 1 layer -REAL, INTENT(OUT), ALLOCATABLE :: SoilTemp(:) ! Soil Temp. of top layer -REAL, INTENT(OUT), ALLOCATABLE :: SnowAge(:) ! Snow age (assumes 1 layer) - -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts, nsurft ) - -!---IN: CABLE prognostics. decl in progs_cbl_vars_mod.F90 -REAL, INTENT(IN) :: SoilTemp_CABLE(land_pts, nsurft ) -REAL, INTENT(IN) :: OneLyrSnowDensity_CABLE(land_pts, nsurft ) -REAL, INTENT(IN) :: SnowAge_CABLE(land_pts, nsurft ) -REAL, INTENT(IN) :: snow_tile(land_pts,nsurft) ! snow depth (units?) - -IF ( .NOT. ALLOCATED(SnowDepth) ) ALLOCATE( SnowDepth(mp) ) -IF ( .NOT. ALLOCATED(SnowDensity) ) ALLOCATE( SnowDensity(mp) ) -IF ( .NOT. ALLOCATED(SoilTemp) ) ALLOCATE( SoilTemp(mp) ) -IF ( .NOT. ALLOCATED(SnowAge) ) ALLOCATE( SnowAge(mp) ) - -!Store Snow Depth from previous timestep. Treat differently on 1st timestep -SnowDepth = PACK( snow_tile, l_tile_pts ) -SnowDensity = PACK( OneLyrSnowDensity_CABLE, l_tile_pts ) - -!Surface skin/top layer Soil/Snow temperature -SoilTemp = PACK( SoilTemp_CABLE(:,:), l_tile_pts ) -SnowAge = PACK( SnowAge_CABLE(:,:), l_tile_pts ) - -RETURN - -END SUBROUTINE cable_pack_progs - -END MODULE cable_land_albedo_mod - diff --git a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_driver.F90 b/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_driver.F90 deleted file mode 100644 index a196fe31a..000000000 --- a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_driver.F90 +++ /dev/null @@ -1,272 +0,0 @@ -MODULE cable_explicit_driv_mod - -CONTAINS - -SUBROUTINE cable_explicit_driver( & - ! IN: UM/JULES/CABLE model/grid parameters, fields, mappings - mype, row_length, rows, land_pts, nsurft, npft, sm_levels, dzsoil, & - timestep, timestep_number, mp, nrb, land_index, surft_pts, surft_index, & - l_tile_pts, latitude, longitude, cos_zenith_angle, Fland, tile_frac, & - - ! IN: soil parameters !1 is only allowable index in UM - bexp, hcon, satcon, sathh, smvcst, smvcwt, smvccl, albsoil, & - - ! IN: SW forcing: manipulated for CABLE - sw_down_VIS, sw_down_NIR, beamFrac_VIS, beamFrac_NIR, beamFrac_TOT, & - - ! IN: Met forcing: - lw_down, ls_rain, ls_snow, & - tl_1, qw_1, vshr_land, pstar, z1_tq, z1_uv, canopy_tile, & - ! This an outlier IN here. INOUT @ implicit. (was)OUT at extras - ! I think we are dealing with it OK now but confusion could be removed - snow_tile, & - - ! IN: canopy height, LAI seasonally presecribed, potentially prognostic - ! IN: CO2 mass mixing ratio - canht_pft, lai_pft, CO2_MMR, & - - ! IN: carries vegin/soilin - potentially redundant - pars, & - - ! IN: tiled soil/snow prognostics - IN here. INOUT @ implicit - progs_soiltemp, progs_soilmoisture, progs_FrozenSoilFrac, & - progs_ThreeLayerSnowFlag, progs_SnowDepth, progs_SnowMass, & - progs_SnowTemp, progs_SnowDensity, progs_snowage, progs_snowosurft, & - progs_OneLyrSnowDensity, & - - ! INOUT: CABLE TYPEs roughly grouped fields per module - rad, met, rough, canopy, veg, soil, ssnow, bal, air, bgc, sum_flux, & - - !OUT: currently being passed back to UM in veg%iveg, soil%isoilm - SurfaceType, SoilType, & - !OUT: currently being passed back to UM in veg%hc, veg%vlai - HGT_pft_cbl, LAI_pft_cbl, & - - !IN: currently being passed from prev radiation call through work% - ! jhan:quirky, snow (in turn reduced LAI due to snow) can evolve through a - ! constant rad dt. However reducedLAIdue2snow used ubiquitously as trigger - ! Further, snow does NOT evolve in explicit AND reducedLAIdue2snow absent - ! in implicit - reducedLAIdue2snow, & - - !GW - !visc_sublayer_depth, smgw_tile, slope_avg, slope_std, - !dz_gw, perm_gw, drain_gw, - !casa progs - !CPOOL_TILE, NPOOL_TILE, PPOOL_TILE, SOIL_ORDER, NIDEP, - !NIFIX, PWEA, PDUST, GLAI, PHENPHASE, - - !IN: if not passed a dangling argument would ensue - npp_pft_acc, resp_w_pft_acc ) - -! subrs called -USE cbl_um_init_mod, ONLY: init_data -USE cbl_um_update_mod, ONLY: update_data -USE cable_cbm_module, ONLY: cbm_expl - -! data -USE grid_constants_mod_cbl, ONLY: ICE_SoilType, nsl, nsnl -USE cable_phys_constants_mod, ONLY: density_liq, density_ice, tfrz -USE cable_surface_types_mod, ONLY: ICE_SurfaceType => ICE_cable - - -USE params_io_mod_cbl, ONLY: params_io_data_type -USE params_io_mod_cbl, ONLY: params_io_type - - -USE cable_def_types_mod, ONLY : climate_type -USE cable_def_types_mod, ONLY : met_type, radiation_type, veg_parameter_type, & - soil_parameter_type, roughness_type, & - canopy_type, soil_snow_type, balances_type, & - air_type, bgc_pool_type, sum_flux_type - -!--- processor number, timestep number, timestep width !ultimately get rid of these - pass %runtime through parent -USE cable_common_module, ONLY : knode_gl, ktau_gl, kwidth_gl, cable_runtime, cable_user, redistrb, satuparam,wiltparam -!block!USE casavariable -!block!USE casa_types_mod - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mype -INTEGER, INTENT(IN) :: timestep_number -REAL, INTENT(IN) :: timestep -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -INTEGER, INTENT(IN) :: sm_levels ! # soil layers -REAL, INTENT(IN) :: dzsoil(sm_levels) ! soil layer thicknesses -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: nrb ! # radiation bands -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points on each tile -INTEGER, INTENT(IN) :: land_index(land_pts) ! index of land points -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! index of tile points -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts, nsurft) - -REAL, INTENT(IN) :: canht_pft(land_pts, npft) -REAL, INTENT(IN) :: lai_pft(land_pts, npft) -REAL, INTENT(IN) :: fland(land_pts) - -REAL, INTENT(IN) :: co2_mmr -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -REAL, INTENT(IN) :: cos_zenith_angle(row_length,rows) - -REAL, INTENT(IN) :: latitude(row_length,rows) -REAL, INTENT(IN) :: longitude(row_length,rows) - -REAL, INTENT(IN) :: bexp (land_pts, sm_levels) - ! => parameter b in Campbell equation -REAL, INTENT(IN) :: satcon(land_pts, sm_levels) - ! hydraulic conductivity @ saturation [mm/s] -REAL, INTENT(IN) :: sathh(land_pts, sm_levels) -REAL, INTENT(IN) :: smvcst(land_pts, sm_levels) -REAL, INTENT(IN) :: smvcwt(land_pts, sm_levels) -REAL, INTENT(IN) :: smvccl(land_pts, sm_levels) - -REAL, INTENT(IN) :: hcon(land_pts) ! Soil thermal conductivity (W/m/K). -REAL, INTENT(IN) :: albsoil(land_pts) -REAL, INTENT(IN) :: reducedLAIdue2snow(mp) - -TYPE(params_io_data_type), INTENT(IN) :: pars -TYPE(met_type), INTENT(OUT) :: met -TYPE(radiation_type), INTENT(OUT) :: rad -TYPE(roughness_type), INTENT(OUT) :: rough -TYPE(soil_snow_type), INTENT(OUT) :: ssnow -TYPE(balances_type), INTENT(OUT) :: bal -TYPE(canopy_type), INTENT(OUT) :: canopy -TYPE(air_type), INTENT(OUT) :: air -TYPE(bgc_pool_type), INTENT(OUT) :: bgc -TYPE(sum_flux_type), INTENT(OUT) :: sum_flux -TYPE(veg_parameter_type), INTENT(OUT) :: veg ! vegetation parameters -TYPE(soil_parameter_type), INTENT(OUT) :: soil ! soil parameters - -! "forcing" -REAL, INTENT(IN) :: lw_down(row_length,rows) -REAL, INTENT(IN) :: ls_rain(row_length,rows) -REAL, INTENT(IN) :: ls_snow(row_length,rows) -REAL, INTENT(IN) :: tl_1(row_length,rows) -REAL, INTENT(IN) :: qw_1(row_length,rows) -REAL, INTENT(IN) :: vshr_land(row_length,rows) -REAL, INTENT(IN) :: pstar(row_length,rows) -REAL, INTENT(IN) :: z1_tq(row_length,rows) -REAL, INTENT(IN) :: z1_uv(row_length,rows) - -REAL, INTENT(IN) :: sw_down_VIS(row_length,rows) -REAL, INTENT(IN) :: sw_down_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_VIS(row_length,rows) -REAL, INTENT(IN) :: beamFrac_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_TOT(row_length,rows) - -! prognostics -REAL, INTENT(IN) :: canopy_tile(land_pts, nsurft) -REAL, INTENT(IN) :: snow_tile(land_pts, nsurft) -REAL, INTENT(IN) :: progs_soiltemp(land_pts, nsurft, sm_levels) -REAL, INTENT(IN) :: progs_soilmoisture(land_pts, nsurft, sm_levels) -REAL, INTENT(IN) :: progs_FrozenSoilFrac(land_pts, nsurft, sm_levels) -REAL, INTENT(IN) :: progs_SnowDepth(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: progs_SnowTemp(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: progs_SnowMass(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: progs_SnowDensity(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: progs_snowosurft(land_pts, nsurft) -REAL, INTENT(IN) :: progs_OneLyrSnowDensity(land_pts, nsurft) -REAL, INTENT(IN) :: progs_snowage(land_pts, nsurft) -INTEGER, INTENT(IN) :: progs_ThreeLayerSnowFlag(land_pts, nsurft) - -INTEGER, INTENT(IN) :: SurfaceType(mp) !CABLE surface tile PFT/nveg -INTEGER, INTENT(IN) :: SoilType(mp) !CABLE soil type per tile -REAL, INTENT(OUT) :: HGT_pft_cbl(mp) -REAL, INTENT(OUT) :: LAI_pft_cbl(mp) - -!!jh:8/23 this was a problem BUT was never an issue because it is defined before it is used in soilsnow() -!!snow_cond, & -!GW progs: -!! REAL, DIMENSION(land_pts) :: & -!! slope_avg,& -!! slope_std,& -!! dz_gw,sy_gw,perm_gw,drain_gw -!!REAL :: smgw_tile(land_pts,nsurft) -!!REAL, DIMENSION(land_pts, nsurft) :: & -!! !visc_sublayer_depth -!GW progs: End - -!CASA progs: -!!REAL, DIMENSION(land_pts,nsurft,10) :: & -!! CPOOL_TILE, & ! Carbon Pools -!! NPOOL_TILE ! Nitrogen Pools - -!!REAL, DIMENSION(land_pts,nsurft,12) :: & -!! PPOOL_TILE ! Phosphorus Pools - -!!REAL, DIMENSION(land_pts) :: & -!! SOIL_ORDER, & ! Soil Order (1 to 12) -!! NIDEP, & ! Nitrogen Deposition -!! NIFIX, & ! Nitrogen Fixation -!! PWEA, & ! Phosphorus from Weathering -!! PDUST ! Phosphorus from Dust - -!! GLAI, & ! Leaf Area Index for Prognostics LAI -!! PHENPHASE, & ! Phenology Phase for Casa-CNP -REAL, INTENT(IN) :: npp_pft_acc(land_pts,npft) -REAL, INTENT(IN) :: resp_w_pft_acc(land_pts,npft) -!CASA progs: End - -!___ local vars -!jhan: this can be moved and USEd - needed to pass arg -TYPE (climate_type) :: climate ! climate variables - -LOGICAL, SAVE :: first_call = .TRUE. -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_explicit_driver" - -IF(first_call) THEN - !--- fill CABLE fields from UM ancillaries/fields, CABLE prognostics - CALL init_data( row_length, rows, land_pts, nsurft, npft, sm_levels, & - nsnl, dzsoil, mp, nrb, CO2_MMR, tfrz, ICE_SurfaceType, & - ICE_SoilType, land_index, surft_pts, surft_index, tile_frac, & - L_tile_pts, albsoil, bexp, hcon, satcon, sathh, smvcst, & - smvcwt, smvccl, pars, tl_1, snow_tile, progs_soiltemp, & - progs_soilmoisture, progs_FrozenSoilFrac, & - progs_OneLyrSnowDensity, progs_snowage, & - progs_ThreeLayerSnowFlag, progs_SnowDensity, progs_SnowDepth,& - progs_SnowTemp, progs_SnowMass, rad%trad, met%tk, veg, soil, & - canopy, ssnow, bgc, sum_flux, SurfaceType, SoilType, & - npp_pft_acc,resp_w_pft_acc ) - - !CALL init_data_sci( nsl, nsnl, soil%zse, mp, tfrz, ICE_SoilType, rad%trad, & - ! met%tk, veg, soil, canopy, ssnow ) - - first_call = .FALSE. - -ENDIF - -!--- update CABLE fields from UM forcings and equivalent fields at tis timestep - -CALL update_data( row_length, rows, land_pts, nsurft, npft, sm_levels, & - nsnl, timestep, timestep_number, mp, nrb, CO2_MMR, canht_pft,& - lai_pft, land_index, surft_pts, surft_index, tile_frac, & - L_tile_pts, cos_zenith_angle, latitude, longitude, & - sw_down_VIS, sw_down_NIR, beamFrac_VIS, beamFrac_NIR, & - beamFrac_TOT, lw_down, ls_rain, ls_snow, tl_1, qw_1, & - vshr_land, pstar, z1_tq, z1_uv, canopy_tile, rad, met, & - veg, soil, rough, canopy, ssnow, HGT_pft_cbl, LAI_pft_cbl, & - reducedLAIdue2snow ) - -!CALL update_data_sci( mp, rad, met, veg, soil, canopy, ssnow, & -! canopy%vlaiw ) - -!---------------------------------------------------------------------! -!--- Feedback prognostic vcmax and daily LAI from casaCNP to CABLE ---! -!---------------------------------------------------------------------! -!block!IF(l_vcmaxFeedbk) call casa_feedback(ktau_gl,veg,casabiome,casapool,casamet) -!block!IF(l_laiFeedbk) veg%vlai(:) = casamet%glai(:) - -!---------------------------------------------------------------------! -!--- cbm "mainly" controls the calling of model components ---! -!---------------------------------------------------------------------! -CALL cbm_expl( mp, nrb, timestep_number, timestep, air, bgc, canopy, met, bal, & - rad, rough, soil, ssnow, sum_flux, veg, climate ) - -RETURN -END SUBROUTINE cable_explicit_driver - -END MODULE cable_explicit_driv_mod diff --git a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_main.F90 b/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_main.F90 deleted file mode 100644 index 7c57e032f..000000000 --- a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_main.F90 +++ /dev/null @@ -1,385 +0,0 @@ -MODULE cable_explicit_main_mod - -CONTAINS - -SUBROUTINE cable_explicit_main( & - ! IN: UM/JULES model/grid parameters, fields, mappings - mype, timestep_len, timestep_number, row_length, rows, land_pts, & - nsurft, npft, sm_levels, dzsoil, land_index, surft_pts, surft_index, & - cosine_zenith_angle, latitude, longitude, Fland, tile_frac, & - - ! IN: soil parameters !1 is only allowable index in UM - bexp, hcon, satcon, sathh, smvcst, smvcwt, smvccl, albsoil, & - - ! IN: Met forcing: - lw_down, sw_surft, ls_rain, ls_snow, & - tl_1, qw_1, vshr_land, pstar, z1_tq, z1_uv, canopy_tile, & - ! This an outlier IN here. INOUT @ implicit. (was)OUT at extras - ! I think we are dealing with it OK now but confusion could be removed - snow_tile, & - - ! IN: canopy height, LAI seasonally presecribed, potentially prognostic - ! IN: CO2 mass mixing ratio - canht_pft, lai_pft, CO2_MMR, & - - ! TYPEs passed from top_level to maintain scope, access to UM STASH - ! IN: tiled soil/snow prognostics - IN here. INOUT @ implicit - ! INOUT: Carries fields needed by CABLE b/n pathways (rad, explicit etc) - ! Currently carrying CABLE TYPEs (canopy%, rad% etc). - ! IN: pars carries vegin/soilin - potentially redundant - progs, work, pars, & - - ! OUT: UM fields UNPACKed from CABLE (@ explicit) - ftl_tile, fqw_tile, tstar_tile, dtstar_surft, & - u_s, u_s_std_tile, cd_tile, ch_tile, & - radnet_tile, fraca, resfs, resft, z0h_tile, z0m_tile, & - recip_l_mo_tile, epot_tile, npp_pft_acc, resp_w_pft_acc ) - -! subrs -USE cable_explicit_driv_mod, ONLY: cable_explicit_driver -USE cable_expl_unpack_mod, ONLY: cable_expl_unpack -USE init_active_tile_mask_mod, ONLY: init_active_tile_mask_cbl - -! data: TYPE definitions of passed asarguments -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type ! CABLE requires extra progs -USE work_vars_mod_cbl, ONLY: work_vars_type ! and some kept thru timestep -USE params_io_mod_cbl, ONLY: params_io_data_type -USE params_io_mod_cbl, ONLY: params_io_type - -! data: Scalars -USE grid_constants_mod_cbl, ONLY: nrb, nrs, mp -USE cable_common_module, ONLY: knode_gl, ktau_gl, kwidth_gl, cable_runtime, & - cable_user, redistrb, satuparam, wiltparam, & - l_casacnp_cd => l_casacnp -USE cable_model_env_opts_mod, ONLY: icycle ! 0=No CASA- [1=C,2=CN,3=CNP] -USE cable_model_env_opts_mod, ONLY: l_casacnp -USE casadimension, ONLY: icycle_cd => icycle -!Leave for reference -!! USE atm_fields_real_mod, ONLY : soil_temp_cable, soil_moist_cable, etc & -!! C_pool_casa, N_pool_casa, P_pool_casa, & -!! SOIL_ORDER_casa, N_DEP_casa, N_FIX_casa, & -!! P_DUST_casa, P_weath_casa, LAI_casa, & -!! PHENPHASE_casa, NPP_PFT_ACC, RSP_W_PFT_ACC, & -!! aquifer_moist_cable,aquifer_thickness_cable, & -!! slope_avg_cable,slope_std_cable,& -!! visc_sublayer_depth,aquifer_perm_cable,& -!! aquifer_draindens_cable - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mype ! # processor -REAL, INTENT(IN) :: timestep_len ! # seconds (cucurrently 1200) -INTEGER, INTENT(IN) :: timestep_number ! # timestep (cucurrently 3 per hr) -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -INTEGER, INTENT(IN) :: sm_levels ! # soil layers -REAL, INTENT(IN) :: dzsoil(sm_levels) ! soil layer thicknesses - -INTEGER, INTENT(IN) :: land_index(land_pts) ! land point indices - ! recipe back to (i,j) cell -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! tile points indices - ! recipe back to land_index - -REAL, INTENT(IN) :: canht_pft(land_pts, npft) ! canopy height (seasonal) -REAL, INTENT(IN) :: lai_pft(land_pts, npft) ! LAI (seasonal) -REAL, INTENT(IN) :: fland(land_pts) ! land fraction (<1 for coastal) -REAL, INTENT(IN) :: co2_mmr ! prescribed MMR -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) ! tile fraction - -REAL, INTENT(IN) :: cosine_zenith_angle(row_length,rows) -REAL, INTENT(IN) :: latitude (row_length,rows) -REAL, INTENT(IN) :: longitude(row_length,rows) - -! soil parameters -REAL, INTENT(IN) :: bexp (land_pts, sm_levels) ! parameter b in Campbell eqn -REAL, INTENT(IN) :: sathh(land_pts, sm_levels) ! -REAL, INTENT(IN) :: smvcst(land_pts, sm_levels) ! -REAL, INTENT(IN) :: smvcwt(land_pts, sm_levels) ! -REAL, INTENT(IN) :: smvccl(land_pts, sm_levels) ! -REAL, INTENT(IN) :: hcon(land_pts) ! Soil thermal conductivity (W/m/K). -REAL, INTENT(IN) :: albsoil(land_pts) ! bare soil albedo -REAL, INTENT(IN) :: satcon(land_pts, sm_levels) ! hydraulic conductivity - ! @ saturation [mm/s] - -! "forcing" -REAL, INTENT(IN) :: lw_down(row_length,rows) -REAL, INTENT(IN) :: ls_rain(row_length,rows) -REAL, INTENT(IN) :: ls_snow(row_length,rows) -REAL, INTENT(IN) :: sw_surft(land_pts, nsurft) -REAL, INTENT(IN) :: tl_1(row_length,rows) -REAL, INTENT(IN) :: qw_1(row_length,rows) -REAL, INTENT(IN) :: vshr_land(row_length,rows) -REAL, INTENT(IN) :: pstar(row_length,rows) -REAL, INTENT(IN) :: z1_tq(row_length,rows) -REAL, INTENT(IN) :: z1_uv(row_length,rows) - -! prognostics -REAL, INTENT(IN) :: canopy_tile(land_pts, nsurft) -REAL, INTENT(IN) :: snow_tile(land_pts, nsurft) ! Lying snow [kg/m2] - -! TYPEs passed from top_level to maintain scope, access to UM STASH -! IN: tiled soil/snow prognostics - IN here. INOUT @ implicit -! INOUT: Carries fields needed by CABLE b/n pathways (rad, explicit etc) -! Currently carrying CABLE TYPEs (canopy%, rad% etc). -! IN: pars carries vegin/soilin - potentially redundant -TYPE(progs_cbl_vars_type), INTENT(IN) :: progs -TYPE(params_io_data_type), INTENT(IN) :: pars -TYPE(work_vars_type), INTENT(INOUT) :: work - -! OUT: UM fields UNPACKed from CABLE (@ explicit) -REAL, INTENT(OUT) :: ftl_tile(land_pts,nsurft) ! surface FTL for land tiles -REAL, INTENT(OUT) :: fqw_tile(land_pts,nsurft) ! surface FQW for land tiles -REAL, INTENT(OUT) :: tstar_tile(land_pts,nsurft) ! radiative surf. temperature -REAL, INTENT(OUT) :: dtstar_surft(land_pts,nsurft) ! -REAL, INTENT(OUT) :: u_s(row_length,rows) ! friction velocity (m/s) -REAL, INTENT(OUT) :: u_s_std_tile(land_pts,nsurft)! -REAL, INTENT(OUT) :: cd_tile(land_pts,nsurft) ! Drag coefficient -REAL, INTENT(OUT) :: ch_tile(land_pts,nsurft) ! Transfer coefficient -REAL, INTENT(OUT) :: radnet_tile(land_pts,nsurft) ! Surface net radiation -REAL, INTENT(OUT) :: z0h_tile(land_pts,nsurft) ! roughness -REAL, INTENT(OUT) :: z0m_tile(land_pts,nsurft) ! roughness -REAL, INTENT(OUT) :: epot_tile(land_pts,nsurft) ! -REAL, INTENT(OUT) :: recip_l_mo_tile(land_pts,nsurft) ! Reciprocal:Monin-Obukhov - ! length for tiles (m^-1) -REAL, INTENT(OUT) :: fraca(land_pts,nsurft) ! Fraction - surface moisture -REAL, INTENT(OUT) :: RESFS(land_pts,nsurft) - ! Combined soil, stomatal & aerodynamic resistance - ! factor for fraction (1-FRACA) of snow-free land tiles -REAL, INTENT(OUT) :: RESFT(land_pts,nsurft) - ! Total resistance factor. - ! FRACA+(1-FRACA)*RESFS for snow-free l_tile_pts, - ! 1 for snow. -REAL, INTENT(IN) :: npp_pft_acc(land_pts,npft) -REAL, INTENT(IN) :: resp_w_pft_acc (land_pts,npft) - -!___ local vars, may be passed as args downstream -LOGICAL :: cbl_standalone = .FALSE. !needs to be set from namelist -LOGICAL :: jls_standalone = .FALSE. !needs to be set from namelist -LOGICAL :: jls_radiation = .FALSE. !needs to be set from n amelist - -INTEGER :: isnow_flg_cable(land_pts, nsurft) -REAL :: radians_degrees -REAL :: latitude_deg(row_length,rows) -REAL :: longitude_deg(row_length,rows) -REAL :: sw_down_ij(row_length,rows,nrs) -REAL :: sw_down_TOT(row_length,rows) -REAL :: sw_down_DIR(row_length,rows) -REAL :: sw_down_VIS(row_length,rows) -REAL :: sw_down_NIR(row_length,rows) -REAL :: beamFrac_VIS(row_length,rows) -REAL :: beamFrac_NIR(row_length,rows) -REAL :: beamFrac_TOT(row_length,rows) - -LOGICAL, ALLOCATABLE :: l_tile_pts(:,:) - -INTEGER :: i,j,k,l,n -LOGICAL, SAVE :: zero_points_warning = .TRUE. - -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_explicit_main" - -IF( land_pts == 0 ) THEN - IF( zero_points_warning ) THEN - WRITE(6,*) "Reached CABLE ", subr_name, & - " even though zero land_points on processor ", mype - END IF - zero_points_warning = .FALSE. - RETURN -END IF - -!--- Set up some cable-globals ------------------------------------------------- -cable_runtime%um = .TRUE. -cable_runtime%um_explicit = .TRUE. - -! this done every call (maybe we hould pass this through work%) -!------------------------------------------------------------------------------ -! Determine the number of active tiles -mp = SUM(surft_pts) - -IF( .NOT. ALLOCATED(l_tile_pts) ) ALLOCATE( l_tile_pts(land_pts, nsurft) ) - -! Define mapping mask. i.e. l_tile_pts =TRUE (active) , where tile_frac > 0 -CALL init_active_tile_mask_cbl( l_tile_pts, land_pts, nsurft, tile_frac ) -!------------------------------------------------------------------------------- - -!!extracted from ap/um/rose-app.conf au-aa809@2729 -![namelist:cable] -cable_user%diag_soil_resp='ON' -cable_user%fwsoil_switch='Haverd2013' -cable_user%gs_switch='medlyn' -cable_user%gw_model=.false. -cable_user%l_rev_corr=.true. -cable_user%l_revised_coupling=.true. -cable_user%or_evap=.false. -!cable_user%soil_thermal_fix=.true. -cable_user%soil_thermal_fix=.false.! fudge - worked to dt=4 -cable_user%ssnow_potev='HDM' -redistrb=.false. -satuparam=0.8 -wiltparam=0.5 -! set icycle/lcasacnp seen thru-out model from namelist read version -icycle_cd = icycle -l_casacnp_cd = l_casacnp - -! initialize processor number, timestep len -knode_gl = mype -kwidth_gl = INT(timestep_len) -ktau_gl = timestep_number - -!--- Convert lat/long to degrees -radians_degrees = 180.0 / ( 4.0*atan(1.0) ) ! 180 / PI -latitude_deg = latitude * radians_degrees -longitude_deg = longitude * radians_degrees - -isnow_flg_cable = INT(progs%ThreeLayerSnowFlag_CABLE) - -!--- Fix SW for CABLE ---------------------------------------------------------------------------- -sw_down_ij(:,:,:) = 0.0 -sw_down_TOT(:,:) = 0.0 -sw_down_DIR(:,:) = 0.0 -sw_down_VIS(:,:) = 0.0 -sw_down_NIR(:,:) = 0.0 -beamFrac_VIS(:,:) = 0.0 -beamFrac_NIR(:,:) = 0.0 -beamFrac_TOT(:,:) = 0.0 - -IF(jls_standalone) THEN - - DO n = 1, nsurft - ! loop over number of points per tile - DO k = 1, surft_pts(n) - l = surft_index(k, n) - j = (land_index(l) - 1) / row_length + 1 - i = land_index(l) - (j-1) * row_length - sw_down_VIS(i, j) = sw_surft(l,n) / 2.0 - END DO - END DO - sw_down_NIR(:,:) = sw_down_VIS(:,:) - -ELSE - - ! in all cases zenith angle needs to be applied - DO n = 1, nrs - sw_down_ij(:,:,n) = work%sw_down_ij(:,:,n) * cosine_zenith_angle(:,:) - END DO - - ! SUM over ALL components of sw_down_ij - sw_down_TOT(:,:) = sw_down_ij(:,:,1) + sw_down_ij(:,:,2) + & - sw_down_ij(:,:,3) + sw_down_ij(:,:,4) - - ! SUM DIRect components of sw_down_ij(in VIS & NIR ) - sw_down_DIR(:,:) = sw_down_ij(:,:,1) + sw_down_ij(:,:,3) - - ! SUM VIS components of sw_down_ij(incl DIR & DIF ) - sw_down_VIS(:,:) = sw_down_ij(:,:,1) + sw_down_ij(:,:,2) - - ! SUM NIR components of sw_down_ij(incl DIR & DIF ) - sw_down_NIR(:,:) = sw_down_ij(:,:,3) + sw_down_ij(:,:,4) - - ! beam(DIR) fraction in VISible spectrum - beamFrac_VIS(:,:) = sw_down_ij(:,:,1) / MAX( 0.1, sw_down_VIS(:,:) ) - - ! beam(DIR) fraction in NIR spectrum - beamFrac_NIR(:,:) = sw_down_ij(:,:,3) / MAX( 0.1, sw_down_NIR(:,:) ) - - ! beam(DIR) fraction for all solar - beamFrac_TOT(:,:) = sw_down_DIR(:,:) / MAX( 0.1, sw_down_TOT(:,:) ) - -ENDIF - -!---------------------------------------------------------------------------- -!--- CALL _driver to run specific and necessary components of CABLE with IN - -!--- args PACKED to force CABLE -!------------------------------------------------------------------------------- -CALL cable_explicit_driver( & - ! IN: UM/JULES/CABLE model/grid parameters, fields, mappings - mype, row_length, rows, land_pts, nsurft, npft, sm_levels, dzsoil, & - timestep_len, timestep_number, mp, nrb, land_index, surft_pts, surft_index, & - l_tile_pts, latitude_deg, longitude_deg, cosine_zenith_angle, Fland, & - tile_frac, & - - ! IN: soil parameters !1 is only allowable index in UM - bexp, hcon, satcon, sathh, smvcst, smvcwt, smvccl, albsoil, & - - ! IN: SW forcing: manipulated for CABLE - sw_down_VIS, sw_down_NIR, beamFrac_VIS, beamFrac_NIR, beamFrac_TOT, & - - ! IN: Met forcing: - lw_down, ls_rain, ls_snow, & - tl_1, qw_1, vshr_land, pstar, z1_tq, z1_uv, canopy_tile, & - ! This an outlier IN here. INOUT @ implicit. (was)OUT at extras - ! I think we are dealing with it OK now but confusion could be removed - snow_tile, & - - ! IN: canopy height, LAI seasonally presecribed, potentially prognostic - ! IN: CO2 mass mixing ratio - canht_pft, lai_pft, CO2_MMR, & - - ! IN: carries vegin/soilin - potentially redundant - pars, & - - ! IN: tiled soil/snow prognostics - IN here. INOUT @ implicit - progs%soiltemp_CABLE, progs%soilmoisture_CABLE, progs%FrozenSoilFrac_CABLE, & - isnow_flg_cable, progs%SnowDepth_CABLE, progs%SnowMass_CABLE, & - progs%SnowTemp_CABLE, progs%SnowDensity_CABLE, progs%snowage_CABLE, & - progs%snowosurft, progs%OneLyrSnowDensity_CABLE, & - - ! INOUT: CABLE TYPEs roughly grouped fields per module - work%rad, work%met, work%rough, work%canopy, work%veg, work%soil, & - work%ssnow, work%bal, work%air, work%bgc, work%sum_flux, & - - !IN: persistent veg%iveg, soil%isoilm are initialized on first rad/alb call - work%veg%iveg, work%soil%isoilm, & - !OUT: currently being passed back to UM in veg%hc, veg%vlai - work%veg%hc, work%veg%vlai, & - - !IN: currently being passed from prev radiation call through work% - ! jhan:quirky, snow (in turn reduced LAI due to snow) can evolve through a - ! constant rad dt. However reducedLAIdue2snow used ubiquitously as trigger - ! Further, snow does NOT evolve in explicit AND reducedLAIdue2snow absent - ! in implicit - work%reducedLAIdue2snow, & - - !GW - !visc_sublayer_depth, smgw_tile, slope_avg, slope_std, - !dz_gw, perm_gw, drain_gw, - !casa progs - !CPOOL_TILE, NPOOL_TILE, PPOOL_TILE, SOIL_ORDER, NIDEP, - !NIFIX, PWEA, PDUST, GLAI, PHENPHASE, - - !IN: if not passed a dangling argument would ensue - npp_pft_acc, resp_w_pft_acc ) - -!---------------------------------------------------------------------------- -!--- CALL _unpack to unpack variables from CABLE back to UM format to return -!---------------------------------------------------------------------------- -call cable_expl_unpack( & - ! IN: UM/JULES/CABLE model/grid parameters, fields, mappings - row_length, rows, land_pts, nsurft, npft, mp, land_index, surft_pts, & - surft_index, l_tile_pts, fland, tile_frac, latitude, longitude, & - - !OUT: UM fields to be updated - ftl_tile, fqw_tile, tstar_tile, dtstar_surft , u_s, u_s_std_tile, cd_tile, & - ch_tile, radnet_tile, fraca, resfs, resft, z0h_tile, z0m_tile, & - recip_l_mo_tile, epot_tile, & - - !IN: UM fields to be updated FROM these CABLE fields - work%canopy%fh, work%canopy%fes, work%canopy%fev, work%canopy%us, & - work%canopy%cdtq,work%canopy%fwet, work%canopy%wetfac_cs, & - work%canopy%rnet, work%canopy%zetar, work%canopy%epot, work%rad%trad, & - work%rad%otrad, work%rad%transd, work%rough%z0m, work%rough%zref_tq, & - - !IN: UM fields used in derivation of fields to be updated - work%ssnow%snowd, work%ssnow%cls, work%air%rlam, work%air%rho, work%met%ua ) - -cable_runtime%um_explicit = .FALSE. - -RETURN - -END SUBROUTINE cable_explicit_main - -END MODULE cable_explicit_main_mod - diff --git a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_unpack.F90 b/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_unpack.F90 deleted file mode 100644 index 2a2f650c4..000000000 --- a/src/coupled/AM3/control/cable/interface/explicit/cable_explicit_unpack.F90 +++ /dev/null @@ -1,195 +0,0 @@ -!============================================================================== -! This source code is part of the -! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. -! This work is licensed under the CABLE Academic User Licence Agreement -! (the "Licence"). -! You may not use this file except in compliance with the Licence. -! A copy of the Licence and registration form can be obtained from -! http://www.accessimulator.org.au/cable -! You need to register and read the Licence agreement before use. -! Please contact cable_help@nf.nci.org.au for any questions on -! registration and the Licence. -! -! Unless required by applicable law or agreed to in writing, -! software distributed under the Licence is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the Licence for the specific language governing permissions and -! limitations under the Licence. -! ============================================================================== -! -! Purpose: Passes UM variables to CABLE, calls cbm, passes CABLE variables -! back to UM. 'Explicit' is the first of two routines that call cbm at -! different parts of the UM timestep. -! -! Called from: cable_explicit_driver -! -! Contact: Jhan.Srbinovsky@csiro.au -! -! History: Developed for CABLE v1.8 -! -! -! ============================================================================== - -MODULE cable_expl_unpack_mod - -!---------------------------------------------------------------------! -!--- pass land-surface quantities calc'd by CABLE in explicit call ---! -!--- back to UM. ---! -!---------------------------------------------------------------------! - -IMPLICIT NONE - -CONTAINS - -SUBROUTINE cable_expl_unpack( & - - ! IN: UM/JULES/CABLE model/grid parameters, fields, mappings - row_length, rows, land_pts, nsurft, npft, mp, land_index, surft_pts, & - surft_index, l_tile_pts, fland, tile_frac, latitude, longitude, & - - !OUT: UM fields to be updated - ftl_tile, fqw_tile, tstar_tile, dtstar_tile , u_s, u_s_std_tile, cd_tile, & - ch_tile, radnet_tile, fraca, resfs, resft, z0h_tile, z0m_tile, & - recip_l_mo_tile, epot_tile, & - - !IN: UM fields to be updated FROM these CABLE fields - canopy_fh, canopy_fes, canopy_fev, canopy_us, canopy_cdtq, canopy_fwet, & - canopy_wetfac_cs, canopy_rnet, canopy_zetar, canopy_epot, & - rad_trad, rad_otrad, rad_transd, rough_z0m, rough_zref_tq, & - - !IN: CABLE fields used in derivation of fields to be updated - ssnow_snowd, ssnow_cls, air_rlam, air_rho, met_ua ) - -USE cable_def_types_mod, ONLY : NITER -USE cable_phys_constants_mod, ONLY: CAPP - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: land_index(land_pts) ! land point indices - ! recipe back to (i,j) cell -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! tile points indices - ! recipe back to land_index -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts, nsurft) -REAL, INTENT(IN) :: fland(land_pts) ! Land fraction -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -REAL, INTENT(IN) :: latitude(row_length,rows) -REAL, INTENT(IN) :: longitude(row_length,rows) - -!___ return fluxes UM vars recieve unpacked CABLE vars -REAL, INTENT(OUT) :: tstar_tile(land_pts,nsurft) ! surface temperature -REAL, INTENT(OUT) :: dtstar_tile(land_pts,nsurft) ! surface temperature -REAL, INTENT(OUT) :: ftl_tile(land_pts,nsurft) ! Surface FTL for land tiles -REAL, INTENT(OUT) :: fqw_tile(land_pts,nsurft) ! Surface FQW for land tiles -REAL, INTENT(OUT) :: z0h_tile(land_pts,nsurft) ! roughness -REAL, INTENT(OUT) :: z0m_tile(land_pts,nsurft) ! roughness -REAL, INTENT(OUT) :: cd_tile(land_pts,nsurft) ! Drag coefficient -REAL, INTENT(OUT) :: ch_tile(land_pts,nsurft) ! Transfer coefficient for heat & moisture -REAL, INTENT(OUT) :: u_s_std_tile(land_pts,nsurft) ! Surface friction velocity -REAL, INTENT(OUT) :: radnet_tile(land_pts,nsurft) ! Surface net radiation -REAL, INTENT(OUT) :: resfs(land_pts,nsurft) ! Combined soil, stomatal & aero resistance - ! factor for fraction (1-FRACA) of snow-free land tiles -REAL, INTENT(OUT) :: RESFT(land_pts,nsurft) ! Total resistance factor. - ! FRACA+(1-FRACA)*RESFS where NO snow - ! 1 for snow. -REAL, INTENT(OUT) :: FRACA(land_pts,nsurft) ! Fraction of surface moisture -REAL, INTENT(OUT) :: RECIP_L_MO_TILE(land_pts,nsurft) ! Reciprocal Monin-Obukhov len (m^-1) -REAL, INTENT(OUT) :: EPOT_TILE(land_pts,nsurft) -REAL, INTENT(OUT) :: U_S(row_length,rows) ! Surface friction velocity (m/s) - -!___ CABLE variables to be unpacked -REAL, INTENT(IN) :: rad_trad(mp) ! -REAL, INTENT(IN) :: rad_otrad(mp) ! -REAL, INTENT(IN) :: rad_transd(mp) ! rad. temp. (soil and veg) -REAL, INTENT(IN) :: canopy_fh(mp) ! total sensible heat (W/m2) -REAL, INTENT(IN) :: canopy_fes(mp) ! -REAL, INTENT(IN) :: canopy_fev(mp) ! -REAL, INTENT(IN) :: canopy_fwet(mp) ! fraction of canopy wet -REAL, INTENT(IN) :: canopy_wetfac_cs(mp) ! fraction of canopy wet -REAL, INTENT(IN) :: canopy_us(mp) ! friction velocity -REAL, INTENT(IN) :: canopy_cdtq(mp) ! drag coefficient for momentum -REAL, INTENT(IN) :: canopy_rnet(mp) ! net rad. absorbed by surface (W/m2) -REAL, INTENT(IN) :: canopy_epot(mp) ! total potential evaporation -REAL, INTENT(IN) :: rough_z0m(mp) ! roughness length -REAL, INTENT(IN) :: rough_zref_tq(mp) ! Reference height for met forcing -REAL, INTENT(IN) :: canopy_zetar(mp,niter) ! stability correction - -!IN: CABLE fields used in derivation of fields to be updated -REAL, INTENT(IN) :: ssnow_snowd(mp) ! snow depth (liquid water) -REAL, INTENT(IN) :: ssnow_cls(mp) ! factor for latent heat -REAL, INTENT(IN) :: met_ua(mp) ! surface wind speed (m/s) -REAL, INTENT(IN) :: air_rlam(mp) ! latent heat for water (j/kg) -REAL, INTENT(IN) :: air_rho(mp) ! dry air density (kg m-3) - -!___ local vars -REAL :: u_s_tile(land_pts,nsurft) -REAL :: dtrad(mp) ! change in rad%trad over time step -REAL :: cdcab(mp) -REAL :: thetast(mp) -REAL :: fraca_cab(mp) -REAL :: rfsfs_cab(mp) -REAL :: reciplmotile(mp) -REAL :: fe_dlh(mp) -REAL :: miss = 0.0 -REAL :: miss_tiny = 1.0e-9 -INTEGER :: i,j,k,n,L -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_explicit_unpack" - -!-------- Unique subroutine body ----------- -!___return fluxes -ftl_tile = UNPACK(canopy_fh, l_tile_pts, miss) -ftl_tile = ftl_tile / CAPP -fe_dlh = ( canopy_fes/(air_rlam*ssnow_cls) ) + ( canopy_fev/air_rlam ) -fqw_tile = UNPACK(fe_dlh, l_tile_pts, miss) - -!___return surface temp and roughness -tstar_tile = UNPACK(rad_trad, l_tile_pts, miss ) -dtrad = rad_trad - rad_otrad -dtstar_tile = UNPACK(dtrad, l_tile_pts, miss ) -z0m_tile = UNPACK(rough_z0m, l_tile_pts, miss_tiny) -z0h_tile = z0m_tile - -!___return friction velocities/drags/ etc -u_s_tile = UNPACK( canopy_us, l_tile_pts, miss) -cdcab = canopy_us**2 / met_ua**2 ! met%ua is always above umin = 0.1m/s -cd_tile = UNPACK( cdcab,l_tile_pts, miss) -ch_tile = UNPACK( canopy_cdtq,l_tile_pts, miss) - -u_s_std_tile=u_s_tile - -u_s = 0.0 -DO n=1, nsurft - DO k=1,surft_pts(n) - l = surft_index(K,N) - j = (land_index(l)-1) / row_length + 1 - i = land_index(l) - (j-1)*row_length - u_s(i,j) = u_s(i,j)+fland(l)*tile_frac(l,n)*u_s_tile(l,n) - ENDDO -ENDDO - -!___return miscelaneous -fraca_cab = canopy_fwet * (1.-rad_transd) -WHERE( ssnow_snowd > 1.0 ) fraca_cab = 1.0 - -rfsfs_cab = MIN( 1., MAX( 0.01, canopy_wetfac_cs - fraca_cab ) / & - MAX( 0.01, 1.0 - fraca_cab ) ) -fraca = UNPACK( fraca_cab, l_tile_pts, miss ) -resft = UNPACK( canopy_wetfac_cs,l_tile_pts, miss ) -resfs = UNPACK( rfsfs_cab , l_tile_pts, miss ) -radnet_tile = UNPACK( canopy_rnet , l_tile_pts, miss ) -thetast = ABS( canopy_fh ) / ( air_rho * capp*canopy_us ) -reciplmotile = canopy_zetar(:,niter) / rough_zref_tq -recip_l_mo_tile = UNPACK( reciplmotile, l_tile_pts, miss ) -epot_tile = UNPACK( canopy_epot, l_tile_pts, miss ) - -RETURN - -END SUBROUTINE cable_expl_unpack - -END MODULE cable_expl_unpack_mod diff --git a/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_driver.F90 b/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_driver.F90 deleted file mode 100644 index 63feee8cf..000000000 --- a/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_driver.F90 +++ /dev/null @@ -1,38 +0,0 @@ -MODULE cable_hyd_driv_mod - -CONTAINS - -SUBROUTINE cable_hyd_driver( land_pts, ntiles, tile_frac, lying_snow, SNOW_TILE, SURF_ROFF,& - SUB_SURF_ROFF, TOT_TFALL ) - - implicit none - - !___ re-decl input args - - integer :: land_pts, ntiles - - - REAL, INTENT(OUT), DIMENSION(LAND_PTS,NTILES) :: & - SNOW_TILE ! IN Lying snow on tiles (kg/m2) - - REAL, INTENT(OUT), DIMENSION(LAND_PTS) :: & - LYING_SNOW, & ! OUT Gridbox snowmass (kg/m2) - SUB_SURF_ROFF, & ! - SURF_ROFF, & ! - TOT_TFALL ! - - !___ local vars - - - REAL :: miss =0. - - -return - -END SUBROUTINE cable_hyd_driver - - -End module cable_hyd_driv_mod - - - diff --git a/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_main.F90 b/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_main.F90 deleted file mode 100644 index b13eeed40..000000000 --- a/src/coupled/AM3/control/cable/interface/hydrology/cable_hyd_main.F90 +++ /dev/null @@ -1,150 +0,0 @@ -MODULE Cable_hyd_main_mod - -CONTAINS - -SUBROUTINE cable_hyd_main(land_pts, nsurft, tile_frac, timestep_len, & - lying_snow, snow_surft, & - snow_melt_gb, surf_roff, sub_surf_roff, & - tot_tfall, work_snow_surft, & - melt_surft, work_lying_snow, work_surf_roff, & - work_sub_surf_roff, work_tot_tfall) - -! This routine passes some of CABLE's hydrology variables to JULES for purpose -! of output. - -USE cable_common_module, ONLY : cable_runtime -USE cable_common_module, ONLY : knode_gl - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: land_pts, nsurft -REAL, INTENT(IN) :: timestep_len -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -REAL, INTENT(IN) :: work_snow_surft(land_pts,nsurft) -REAL, INTENT(IN) :: melt_surft(land_pts,nsurft) ! tile snow melt (from implicit) -REAL, INTENT(IN) :: work_lying_snow(land_pts) ! Gridbox snowmass (kg/m2) -REAL, INTENT(IN) :: work_sub_surf_roff(land_pts) ! Sub-surface runoff (kg/m2/s). -REAL, INTENT(IN) :: work_surf_roff(land_pts) ! Surface runoff (kg/m2/s). -REAL, INTENT(IN) :: work_tot_tfall(land_pts) ! Total throughfall (kg/m2/s). - -REAL, INTENT(OUT) :: snow_surft(land_pts,nsurft) -REAL, INTENT(OUT) :: snow_melt_gb(land_pts) ! OUT gridbox snow melt (kg/m2/s) -REAL, INTENT(OUT) :: lying_snow(land_pts) ! OUT Gridbox snowmass (kg/m2) -REAL, INTENT(OUT) :: sub_surf_roff(land_pts) ! OUT Sub-surface runoff (kg/m2/s). -REAL, INTENT(OUT) :: surf_roff(land_pts) ! OUT Surface runoff (kg/m2/s). -REAL, INTENT(OUT) :: tot_tfall(land_pts) ! OUT Total throughfall (kg/m2/s). - -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_hyd_main" -LOGICAL, SAVE :: zero_points_warning = .true. - -IF( land_pts == 0 ) THEN - IF( zero_points_warning ) THEN - WRITE(6,*) "Reached CABLE ", subr_name, & - " even though zero land_points on processor ", knode_gl - END IF - zero_points_warning = .FALSE. - RETURN -END IF - -!--- initialize cable_runtime% switches -cable_runtime%um = .TRUE. -cable_runtime%um_hydrology =.TRUE. - -!jhan:This is all very dubious - mixing up depth and mass -!snow_surft = work_snow_surft !this is overwriting with zero -lying_snow = work_lying_snow - -surf_roff = work_surf_roff -sub_surf_roff = work_sub_surf_roff -tot_tfall = work_tot_tfall - -!CM3 new variables -! melt_surft unpacked in cable_implicit from ssnow%smelt -snow_melt_gb = SUM(tile_frac * melt_surft,2) - -cable_runtime%um_hydrology =.FALSE. - -RETURN - -END SUBROUTINE cable_hyd_main - -!!jhan:we'll have to organize ho we will get the right thigs here -! For CM2 we have to pass mp & %totwblake and TILE_FRAC down through argument list from *extras* -SUBROUTINE cable_lakesrivers(land_pts, nsurft, mp, totwblake, TILE_FRAC, & - TOT_WB_LAKE, L_tile_pts) - - IMPLICIT NONE - - !routine extracts daily integrated ssnow%totwblake - water added to keep - !lake tiles saturated - and grid cell averages (over land fraction) - !for use in river flow scaling routines - - !This routine is called from riv_intcl-riv_ic1a - - INTEGER, INTENT(IN) :: land_pts, nsurft, mp - LOGICAL :: l_tile_pts(land_pts, nsurft) - REAL, INTENT(INOUT), DIMENSION(mp) :: totwblake - REAL, INTENT(IN) :: TILE_FRAC(land_pts, nsurft) - REAL, INTENT(OUT), DIMENSION(land_pts) :: TOT_WB_LAKE - - !working variables - REAL :: miss = 0. - REAL, DIMENSION(LAND_PTS, nsurft) :: TOT_WB_LAKE_TILE - - !CM2 era code - !TOT_WB_LAKE_TILE = UNPACK(ssnow%totwblake, L_TILE_PTS, miss) - - !updated for CM3 - TOT_WB_LAKE_TILE = UNPACK(totwblake, L_TILE_PTS, miss) - TOT_WB_LAKE = SUM(TILE_FRAC * TOT_WB_LAKE_TILE,2) - - !zero the current integration - totwblake = 0. - -END SUBROUTINE cable_lakesrivers - - -End module cable_hyd_main_mod - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/coupled/AM3/control/cable/interface/hydrology/cable_wblake_fix.F90 b/src/coupled/AM3/control/cable/interface/hydrology/cable_wblake_fix.F90 deleted file mode 100644 index e96981671..000000000 --- a/src/coupled/AM3/control/cable/interface/hydrology/cable_wblake_fix.F90 +++ /dev/null @@ -1,19 +0,0 @@ -module cable_wblake_mod - implicit none - - real :: wblake_ratio ! ratio of wblake/subroff - - real, allocatable, save :: & - WBLAKE_cable(:,:), TOT_WBLAKE_cable(:), TOT_SUBRUN_cable(:) - -contains - -subroutine cable_wblake_fix_alloc( land_points, ntiles ) - integer :: land_points, ntiles - - if(.NOT. allocated( wblake_cable ) ) & - allocate ( WBLAKE_cable(land_points,ntiles) ) - -End subroutine cable_wblake_fix_alloc - -End module cable_wblake_mod diff --git a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_driver.F90 b/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_driver.F90 deleted file mode 100644 index af137d28d..000000000 --- a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_driver.F90 +++ /dev/null @@ -1,249 +0,0 @@ -MODULE Cable_implicit_driv_mod - -CONTAINS - -SUBROUTINE cable_implicit_driver( cycleno, numcycles, i_day_number, & - timestep, timestep_number, row_length, & - rows, land_pts, nsurft, npft, sm_levels, & - dim_cs1, mp, nrb, land_index, surft_pts, & - surft_index, l_tile_pts, ls_rain, conv_rain, & - ls_snow, conv_snow, tl_1, qw_1, ftl_1,fqw_1, & - dtl1_1, dqw1_1, ctctq1, rad, met, rough, & - canopy, veg, soil, ssnow, bal, air, bgc, & - sum_flux ) - !CPOOL_TILE, NPOOL_TILE, PPOOL_TILE, & - !GLAI, PHENPHASE) - - -!subrs called -USE cable_pack_mod, ONLY: cable_pack_rr -USE cable_cbm_module, ONLY: cbm_impl - -! data: TYPE definitions of passed asarguments -USE cable_def_types_mod, ONLY : met_type, radiation_type, veg_parameter_type, & - soil_parameter_type, roughness_type, & - canopy_type, soil_snow_type, balances_type, & - air_type, bgc_pool_type, sum_flux_type, & - climate_type - -! data: Scalars -USE cable_def_types_mod, ONLY: msn, ncs, ncp -USE cable_phys_constants_mod, ONLY: TFRZ, CAPP -USE cable_common_module, ONLY: l_casacnp, l_vcmaxFeedbk, knode_gl, & - ktau_gl, kend_gl - -USE cable_common_module, ONLY : cable_runtime, cable_user !jhan:have to sort this out for JAC - -!jhan: Leave for reference -!USE casavariable -!USE phenvariable -!USE casa_types_mod -!USE casa_um_inout_mod -!use POP_TYPES, only : pop_type -!CM3-standaloneUSE river_inputs_mod, ONLY: river_step - -!CM3 - updating CABLE-JULES rivers -USE jules_rivers_mod, ONLY: nstep_rivers - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: cycleno -INTEGER, INTENT(IN) :: numcycles -INTEGER, INTENT(IN) :: i_day_number ! day of year (1:365) counter for CASA-CNP -REAL , INTENT(IN) :: timestep ! timestep length [s] -INTEGER, INTENT(IN) :: timestep_number -INTEGER, INTENT(IN) :: row_length,rows, land_pts, nsurft, npft, sm_levels -INTEGER, INTENT(IN) :: dim_cs1 -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: nrb - -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! tangled cell index of land_pt -LOGICAL, INTENT(IN) :: l_tile_pts(:,:) - -REAL, INTENT(IN) :: ls_rain(row_length,rows) ! Large scale rain -REAL, INTENT(IN) :: ls_snow(row_length,rows) ! Large scale snow -REAL, INTENT(IN) :: conv_rain(row_length,rows) ! Convective rain -REAL, INTENT(IN) :: conv_snow(row_length,rows) ! Convective snow -REAL, INTENT(IN) :: tl_1(row_length,rows) ! -REAL, INTENT(IN) :: qw_1(row_length,rows) ! -REAL, INTENT(IN) :: dtl1_1(row_length,rows) ! Level 1 increment to T field -REAL, INTENT(IN) :: dqw1_1(row_length,rows) ! Level 1 increment to q field -REAL, INTENT(IN) :: ctctq1(row_length,rows) ! information needed for increment to T an q field -REAL, INTENT(IN) :: ftl_1(row_length,rows) ! sensible heat flux to layer 1 H.(W/m2) -REAL, INTENT(IN) :: fqw_1(row_length,rows) ! Moisture flux to layer 1 (kg/m^2/sec). - -TYPE(met_type), INTENT(INOUT) :: met -TYPE(radiation_type), INTENT(INOUT) :: rad -TYPE(roughness_type), INTENT(INOUT) :: rough -TYPE(soil_snow_type), INTENT(INOUT) :: ssnow -TYPE(balances_type), INTENT(INOUT) :: bal -TYPE(canopy_type), INTENT(INOUT) :: canopy -TYPE(air_type), INTENT(INOUT) :: air -TYPE(bgc_pool_type), INTENT(INOUT) :: bgc -TYPE(sum_flux_type), INTENT(INOUT) :: sum_flux -TYPE(veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters -TYPE(soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters -TYPE (climate_type) :: climate ! climate variables - -!jhan: Leave for reference -!REAL, INTENT(OUT) :: CPOOL_TILE(LAND_PTS,nsurft,10) -!REAL, INTENT(OUT) :: NPOOL_TILE(LAND_PTS,nsurft,10) -!REAL, INTENT(OUT) :: PPOOL_TILE(LAND_PTS,nsurft,12) -!REAL, INTENT(OUT) :: GLAI(LAND_PTS,nsurft) -!REAL, INTENT(OUT) :: PHENPHASE(LAND_PTS,nsurft) - -INTEGER :: & - ktauday, & ! day counter for CASA-CNP - idoy ! day of year (1:365) counter for CASA-CNP -INTEGER, SAVE :: & - kstart = 1 - -REAL :: dtl_mp(mp) -REAL :: dqw_mp(mp) -!Ticket 132 - need ctctq1, incoming values of ftl_1 and fqw_1 on tiles -REAL :: ctctq1_mp(mp) ! UM boundary layer coefficient -REAL :: ftl1_mp(mp) ! grid box averaged FTL -REAL :: fqw1_mp(mp) ! gird box averaged FQW - - REAL, DIMENSION(LAND_PTS) :: & - LYING_SNOW, & ! OUT Gridbox snowmass (kg/m2) - SUB_SURF_ROFF, & ! - SURF_ROFF, & ! - TOT_TFALL ! -!this is NA for single-site standalone -INTEGER, parameter :: river_step = 1 - -!___ local vars -!jhan: Leave for reference -!This is a quick fix. These can be organised through namelists -LOGICAL :: spinup=.FALSE., spinconv=.FALSE., & - dump_read=.FALSE., dump_write=.FALSE. -INTEGER :: loy=365, lalloc=0 - -!___ 1st call in RUN (!=ktau_gl -see below) -REAL, ALLOCATABLE:: fwork(:,:,:) -REAL :: dummy_rr(row_length,rows) - -LOGICAL, SAVE :: first_cable_call = .TRUE. -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_implicit_driver" - -!Prog Bank copies all prognostic and other variables whose -!values need to be retain from UM timestep to UM timestep. -!NOTE that canopy%cansto is a prognostic variable but is handled -!differently through the canopy%oldcansto variable - -!-------- Unique subroutine body ----------- - -dtl_mp = 0. ; dqw_mp = 0. - -!--- All these subrs do is pack a CABLE var with a UM var. -!------------------------------------------------------------------- -!--- UM met forcing vars needed by CABLE which have UM dimensions -!---(rowlength,rows)[_rr], which is no good to CABLE. These have to be -!--- re-packed in a single vector of active tiles. Hence we use -!--- conditional "mask" l_tile_pts(land_pts,nsurft) which is .true. -!--- if the land point is/has an active tile -!--- generic format: -!--- cable_pack_rr( UM var, default value for snow tile, CABLE var, mask ) -!--- where mask tells cable_pack_rr whether or not to use default value -!--- for snow tile -!------------------------------------------------------------------- - -dummy_rr(:,:) = 0.0 -dummy_rr(:,:) = ( ls_rain(:,:) + conv_rain(:,:) ) * timestep -CALL cable_pack_rr( met%precip, dummy_rr, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -dummy_rr(:,:) = 0.0 -dummy_rr(:,:) = ( ls_snow(:,:) + conv_snow(:,:) ) * timestep -CALL cable_pack_rr( met%precip_sn, dummy_rr, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%tk, TL_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%qv, QW_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( dtl_mp, dtl1_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( dqw_mp, dqw1_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -!Ticket #132 implementation -!dtl_mp, dqw_mp found on tiles above - these are the corrected dtl_mp and dqw_mp -IF (cable_user%l_revised_coupling) THEN - - CALL cable_pack_rr( ctctq1_mp, ctctq1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - - CALL cable_pack_rr( ftl1_mp, ftl_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - - CALL cable_pack_rr( fqw1_mp, fqw_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - - dtl_mp = dtl_mp - ctctq1_mp * ftl1_mp/CAPP !NB FTL_1 is in W/m2 hence / CAPP - dqw_mp = dqw_mp - ctctq1_mp * fqw1_mp - -ENDIF - -met%precip = met%precip + met%precip_sn -met%tk = met%tk + dtl_mp -met%qv = met%qv + dqw_mp -met%tvair = met%tk -met%tvrad = met%tk - -CALL cbm_impl( cycleno, numcycles, mp, nrb, timestep_number, timestep, & - air, bgc, canopy, met, bal, rad, rough, & - soil, ssnow, sum_flux, veg, climate ) - -! Integrate wb_lake over the river timestep. -! Used to scale river flow within ACCESS -! Zeroed each river step in subroutine cable_lakesriver and on restarts. -! ssnow_wb_lake in kg/m^2 -! CM3 - updated to use JULES7.x vars -if (cycleno == numcycles) THEN - ssnow%totwblake = ssnow%totwblake + ssnow%wb_lake/nstep_rivers -end if - - ! Lestevens - temporary ? - ktauday = int(24.0*3600.0/TIMESTEP) - idoy=i_day_number - - !Jan 2018: Only call carbon cycle prognostics updates on the last call to - !cable_implicit per atmospheric time step - if (cycleno==numcycles) then - !Call CASA-CNP - !CM2!if (l_casacnp) & - !CM2! CALL bgcdriver(ktau_gl,kstart,kend_gl,timestep,met,ssnow,canopy,veg,soil, & - !CM2! climate,casabiome,casapool,casaflux,casamet,casabal,phen, & - !CM2! pop, spinConv,spinup, ktauday, idoy,loy, dump_read, & - !CM2! dump_write, LALLOC) - - !CM2!CALL sumcflux(ktau_gl,kstart,kend_gl,TIMESTEP,bgc,canopy,soil,ssnow, & - !CM2! sum_flux,veg,met,casaflux,l_vcmaxFeedbk) - endif - -!GLAI = 0.0 -!PHENPHASE = 0.0 - ! Only call carbon cycle prognostics updates on the last call to - ! cable_implicit per atmospheric time step - ! Call CASA-CNP collect pools - !block!if (cycleno==numcycles .AND. l_casacnp) & - !block! CALL casa_poolout_unpk(casapool,casaflux,casamet,casabal,phen, & - !block! CPOOL_TILE,NPOOL_TILE,PPOOL_TILE, & - !block! GLAI,PHENPHASE) - - !-------- End Unique subroutine body ----------- - -!End Testing puroses: - -RETURN - -END SUBROUTINE cable_implicit_driver - -END module cable_implicit_driv_mod diff --git a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_main.F90 b/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_main.F90 deleted file mode 100644 index 87e1d3e60..000000000 --- a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_main.F90 +++ /dev/null @@ -1,242 +0,0 @@ -MODULE cable_implicit_main_mod - -CONTAINS - -SUBROUTINE Cable_implicit_main( row_length, rows, land_pts, nsurft, npft, & - sm_levels, dim_cs1, cycleno, numcycles, & - timestep, timestep_number, land_index, & - surft_pts, surft_index, & - Fland, tile_frac, smvcst, & - ls_rain, ls_snow, conv_rain, conv_snow, & - tl_1, dtl1_1, qw_1, dqw1_1, ctctq1, & - canopy_gb, canopy_surft, t_soil, & - smcl, sthf, sthu, snow_surft, & - ftl_1, ftl_surft, fqw_1, fqw_surft, le_surft, & - tstar_surft, dtstar_surft, & - surf_ht_flux_land, surf_htf_surft, & - ecan_surft, esoil_surft, ei_surft, & - radnet_surft, gs, gs_surft, & - t1p5m_surft, q1p5m_surft, melt_surft, & - NPP_gb, NPP_pft, NPP_acc_pft, GPP_gb, GPP_pft, & - resp_s, resp_s_tot, resp_p, resp_p_pft, & - g_leaf_pft, &!RESP_S_TILE, !Kathy-ed as diag - progs, work) - -!subrs called -USE cable_implicit_driv_mod, ONLY: cable_implicit_driver -USE cable_implicit_unpack_mod, ONLY: implicit_unpack -USE prognostic_bank_mod_cbl, ONLY: cable_reinstate_prognostics -USE prognostic_bank_mod_cbl, ONLY: cable_store_prognostics -USE init_active_tile_mask_mod, ONLY: init_active_tile_mask_cbl - -! data: TYPE definitions of passed asarguments -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type ! CABLE's extra progs -USE work_vars_mod_cbl, ONLY: work_vars_type ! CABLE's types etc - ! kept thru timestep -USE prognostic_bank_mod_cbl, ONLY: ProgBank - -! data: Scalars -USE cable_common_module, ONLY: knode_gl -USE grid_constants_mod_cbl, ONLY: nrb, nsnl, mp -USE grid_constants_mod_cbl, ONLY: nsCs ! # soil carbon stores -USE grid_constants_mod_cbl, ONLY: nvCs ! # vegetation carbon stores - -USE cable_common_module, ONLY : cable_runtime !jhan:have to sort this out for JAC -!jhan: Leave for reference -!# if defined(UM_JULES) -! ! CABLE prognostics declared at top_level -! USE atm_fields_real_mod, ONLY : soil_temp_cable, soil_moist_cable, & -! soil_froz_frac_cable, snow_dpth_cable, & -! snow_mass_cable, snow_temp_cable, & -! snow_rho_cable, -! snow_age_cable, snow_flg_cable, & -! aquifer_moist_cable -! ! CASA prognostics declared at top_level -! USE atm_fields_real_mod, ONLY : C_pool_casa, N_pool_casa, P_pool_casa, & -! SOIL_ORDER_casa, N_DEP_casa, N_FIX_casa, & -! P_DUST_casa, P_weath_casa, LAI_casa, & -! PHENPHASE_casa, RSP_W_PFT_ACC -! !UM: time info -! USE model_time_mod, ONLY: target_end_stepim, i_day - -! USE atmos_physics2_alloc_mod, ONLY : resp_s_tile - -# if defined(UM_JULES) -USE model_time_mod, ONLY: i_day_number -#else -USE model_time_mod, ONLY: timesteps_in_day -#endif - -IMPLICIT NONE - -!___ re-decl input args (INTENT?) -INTEGER :: row_length, rows, land_pts, nsurft, npft, sm_levels -INTEGER :: dim_cs1 -INTEGER :: cycleno, numcycles -REAL :: timestep -INTEGER :: timestep_number -INTEGER :: surft_pts(nsurft) ! # land points per tile -INTEGER :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER :: land_index(land_pts) ! tangled cell index of land_pt - -REAL :: tile_frac(land_pts, nsurft) -REAL :: Fland(land_pts) -REAL :: smvcst(land_pts,sm_levels) - ! IN Volumetric saturation point - -REAL :: ls_rain(row_length,rows) !forcing%rain precip: large scale -REAL :: ls_snow(row_length,rows) !forcing%snow precip: large scale -REAL :: conv_rain(row_length,rows) !forcing%rain precip: convective -REAL :: conv_snow(row_length,rows) !forcing%snow precip: convective - -!prog: canopy water stores -REAL :: canopy_gb(land_pts) !prog: aggregate over tiles -REAL :: canopy_surft(land_pts, nsurft) !prog: per tile - -REAL :: tl_1(row_length,rows) !forcing: temp -REAL :: qw_1(row_length,rows) !forcing: humidity -REAL :: dtl1_1(row_length,rows) !forcing: increment to temp -REAL :: dqw1_1(row_length,rows) !forcing: increment to humidity -!Ticket #132 needs ctctq1 -REAL :: ctctq1(row_length,rows) !forcing: temp/humidity increment - -REAL :: ftl_1(row_length,rows) -REAL :: fqw_1(row_length,rows) - -REAL, INTENT(OUT) :: ftl_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: fqw_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: le_surft ( land_pts, nsurft ) ! latent heat flux - -!prog: UM soil quantities, per land_pt -REAL, INTENT(OUT) :: t_soil(land_pts,sm_levels) -REAL, INTENT(OUT) :: smcl(land_pts,sm_levels) -REAL, INTENT(OUT) :: sthf(land_pts,sm_levels) -REAL, INTENT(OUT) :: sthu(land_pts,sm_levels) -REAL, INTENT(OUT) :: snow_surft( land_pts, nsurft ) ! Lying snow [kg/m2] - -REAL, INTENT(OUT) :: tstar_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: dtstar_surft( land_pts, nsurft ) - -REAL, INTENT(OUT) :: surf_htf_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: surf_ht_flux_land(row_length,rows) -REAL, INTENT(OUT) :: ecan_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: esoil_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: ei_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: radnet_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: gs_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: t1p5m_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: q1p5m_surft( land_pts, nsurft ) -REAL, INTENT(OUT) :: melt_surft( land_pts, nsurft ) - -REAL, INTENT(OUT) :: gs( land_pts ) ! conductance for use in dust scheme - -REAL, INTENT(OUT) :: npp_acc_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: npp_gb(land_pts) -REAL, INTENT(OUT) :: npp_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: gpp_gb(land_pts) -REAL, INTENT(OUT) :: gpp_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: resp_s(land_pts, dim_cs1) ! Soil respiration (kg C/m2/s) -REAL, INTENT(OUT) :: resp_s_tot(land_pts) ! Total soil resp'n (kg C/m2/s) -REAL, INTENT(OUT) :: resp_p(land_pts) -REAL, INTENT(OUT) :: resp_p_pft(land_pts,nsurft) -REAL, INTENT(OUT) :: g_leaf_pft(land_pts,npft) - -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs -TYPE(work_vars_type), INTENT(IN OUT) :: work - -!___ local vars -!Instantiate prognostic storage (bank) -TYPE (ProgBank) :: pb - -# if !defined(UM_JULES) -INTEGER :: i_day_number -#endif -REAL, ALLOCATABLE :: dtrad(:) -LOGICAL, ALLOCATABLE :: l_tile_pts(:,:) -LOGICAL, SAVE :: first_call = .true. -LOGICAL, SAVE :: zero_points_warning= .true. -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_implicit_main" - -IF( land_pts == 0 ) THEN - IF( zero_points_warning ) THEN - WRITE(6,*) "Reached CABLE ", subr_name, & - " even though zero land_points on processor ", knode_gl - END IF - zero_points_warning = .FALSE. - RETURN -END IF - -cable_runtime%um = .TRUE. -cable_runtime%um_implicit = .TRUE. - -! this done every call (maybe we hould pass this through work%) -!------------------------------------------------------------------------------ -! Determine the number of active tiles -mp = SUM(surft_pts) - -IF( .NOT. ALLOCATED(l_tile_pts) ) ALLOCATE( l_tile_pts(land_pts, nsurft) ) - -! Define mapping mask. i.e. l_tile_pts =TRUE (active) , where tile_frac > 0 -CALL init_active_tile_mask_cbl(l_tile_pts, land_pts, nsurft, tile_frac ) -!------------------------------------------------------------------------------ - -IF( .NOT. ALLOCATED(dtrad) ) ALLOCATE( dtrad(mp) ) - -# if !defined(UM_JULES) -i_day_number = FLOOR( REAL(timestep_number) / REAL(timesteps_in_day) ) -#endif - -!Due to ENDGAME, CABLE(any LSM) is called twice on implicit step. -CALL cable_store_prognostics( pb, mp, sm_levels, nsCs,nvCs, work%ssnow, & - work%canopy, work%bgc ) - -!jhan:check - in CM2 but left out here? do this closer to evaluation -IF (first_call ) THEN - T1P5M_surft = 0.0 - Q1P5M_surft = 0.0 -ENDIF - -CALL cable_implicit_driver( cycleno, numcycles, i_day_number, & - timestep, timestep_number, & - row_length, rows, land_pts, nsurft, npft, & - sm_levels, dim_cs1, mp, nrb, & - land_index, surft_pts, surft_index, l_tile_pts, & - ls_rain, conv_rain, ls_snow, conv_snow, & - tl_1, qw_1, ftl_1, fqw_1, dtl1_1, dqw1_1, ctctq1, & - work%rad, work%met, work%rough, work%canopy, & - work%veg, work%soil, work%ssnow, work%bal, & - work%air, work%bgc, work%sum_flux ) - !CPOOL_TILE, NPOOL_TILE, PPOOL_TILE, & - !GLAI, PHENPHASE) - -IF (cycleno .NE. numcycles ) THEN - CALL cable_reinstate_prognostics( pb, work%ssnow, work%canopy, work%bgc ) -ENDIF - -CALL implicit_unpack( cycleno, row_length, rows, land_pts, nsurft, npft, & - sm_levels, dim_cs1, timestep, mp, nsnl, land_index, & - surft_pts, surft_index, tile_frac, l_tile_pts, smvcst, & - t_soil, smcl, sthf, sthu, snow_surft, & - FTL_1, FTL_surft, FQW_1, FQW_surft, le_surft, & - TSTAR_surft, SURF_HT_FLUX_LAND, ECAN_surft, & - ESOIL_surft, EI_surft, RADNET_surft, & - canopy_surft, gs, gs_surft, t1p5m_surft, q1p5m_surft, & - canopy_gb, fland, melt_surft, & - NPP_gb, npp_pft, GPP_gb, GPP_pft, resp_s, resp_s_tot, & - RESP_P, resp_p_pft, g_leaf_pft, & - NPP_acc_pft, surf_htf_surft, & - dtstar_surft, progs, work, & - work%rad, work%met, work%rough, work%canopy, & - work%veg, work%soil, work%ssnow, work%bal, & - work%air, work%bgc, work%sum_flux ) - -first_call = .FALSE. -cable_runtime%um_implicit = .FALSE. - -RETURN - -END SUBROUTINE cable_implicit_main - -END MODULE cable_implicit_main_mod - - diff --git a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_unpack.F90 b/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_unpack.F90 deleted file mode 100644 index ff4360a0c..000000000 --- a/src/coupled/AM3/control/cable/interface/implicit/cable_implicit_unpack.F90 +++ /dev/null @@ -1,400 +0,0 @@ -MODULE cable_implicit_unpack_mod - -CONTAINS - -SUBROUTINE implicit_unpack( cycleno, row_length, rows, land_pts, nsurft, npft, & - sm_levels, dim_cs1, timestep, mp, nsnl, land_index,& - surft_pts, surft_index, tile_frac, l_tile_pts, & - smvcst, tsoil, smcl, sthf, sthu, snow_surft, & - ftl_1, ftl_tile, fqw_1, fqw_tile, le_surft, & - tstar_tile, surf_ht_flux_land, ecan_tile, & - esoil_tile, ei_tile, radnet_tile, canopy_tile, & - gs, gs_tile, t1p5m_tile, q1p5m_tile, canopy_gb, & - fland, melt_tile, npp, npp_ft, gpp, gpp_ft, & - resp_s, resp_s_tot, resp_p, resp_p_ft, g_leaf, & - npp_ft_acc, surf_htf_tile, dtstar_tile, & - progs, work, rad, met, rough, canopy, veg, soil, & - ssnow, bal, air, bgc, sum_flux ) - -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type ! CABLE requires extra progs -USE work_vars_mod_cbl, ONLY: work_vars_type ! and some kept thru timestep - -!processor number, timestep number / width, endstep -USE cable_common_module, ONLY : knode_gl, ktau_gl, kwidth_gl, kend_gl -USE cable_common_module, ONLY : cable_runtime -USE cable_common_module!, ONLY : cable_runtime, cable_user, fudge_out, & - ! L_fudge, ktau_gl -USE cable_def_types_mod, ONLY: air_type, bgc_pool_type, met_type, & - balances_type, radiation_type, roughness_type, & - soil_parameter_type, soil_snow_type, & - sum_flux_type, veg_parameter_type, canopy_type - -USE cable_phys_constants_mod, ONLY: density_liq, density_ice, tfrz - -IMPLICIT NONE - -!___ re-decl input args -INTEGER, INTENT(IN) :: cycleno -INTEGER, INTENT(IN) :: row_length,rows, land_pts, nsurft, npft, sm_levels -INTEGER, INTENT(IN) :: dim_cs1 -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: nsnl -REAL, INTENT(IN) :: timestep - -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! tangled cell index of land_pt -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -LOGICAL, INTENT(IN) :: l_tile_pts(:,:) - -TYPE(progs_cbl_vars_type), INTENT(OUT) :: progs -TYPE(work_vars_type), INTENT(INOUT) :: work - -REAL, INTENT(IN) :: smvcst(land_pts,sm_levels) ! IN Volumetric saturation point - -REAL, INTENT(IN) :: fland(land_pts) ! IN Land fraction on land tiles -REAL, INTENT(OUT) :: gs(land_pts) ! OUT "Stomatal" conductance to - -!--- FQW(,1) is total water flux from surface, 'E'. -!--- Moisture flux between layers. (kg/m^2/sec). -REAL, INTENT(OUT) :: fqw_1(row_length,rows) - -!--- FTL(,K) =net turbulent sensible heat flux into layer K -!--- from below; so FTL(,1) = surface sensible heat, H.(W/m2) -REAL, INTENT(OUT) :: ftl_1(row_length,rows) - -!--- Net downward heat flux at surface over land. -!--- fraction of gridbox (W/m2). -REAL :: SURF_HT_FLUX_LAND(ROW_LENGTH,ROWS) - -REAL, INTENT(OUT) :: melt_tile(land_pts,nsurft) -REAL, INTENT(OUT) :: smcl(land_pts,sm_levels) -REAL, INTENT(OUT) :: sthf(land_pts,sm_levels) -REAL, INTENT(OUT) :: sthu(land_pts,sm_levels) -REAL, INTENT(OUT) :: tsoil(land_pts,sm_levels) -REAL, INTENT(OUT) :: snow_surft(land_pts,nsurft) -REAL, INTENT(OUT) :: le_surft( land_pts, nsurft ) ! latent heat flux - - REAL, DIMENSION(land_pts,nsurft) :: & - SURF_HTF_TILE,& - !___Surface FTL, FQL for land tiles - FTL_TILE, FQW_TILE, & - !___(tiled) latent heat flux, melting, stomatatal conductance - GS_TILE, & - RADNET_TILE, & ! INOUT Surface net radiation on tiles (W/m2) - EI_TILE, & ! OUT EI for land tiles. - ECAN_TILE, & ! OUT ECAN for snow-free land tiles - ESOIL_TILE, & ! evapotranspiration from soil moisture store (kg/m2/s) - RESP_P_FT, & ! - G_LEAF, & ! - GPP_FT, & ! - NPP_FT, & ! - NPP_FT_ACC, & ! sresp for CASA-CNP - CANOPY_TILE, & ! - T1P5M_TILE, & - Q1P5M_TILE, & - TSTAR_TILE, & - RESP_S_TILE, & - DTSTAR_TILE !change in tstar_tile over time step - - REAL, dimension(land_pts) :: & - RESP_P, & ! - NPP, & ! - GPP, & ! - SNOW_GRD, & - CANOPY_GB, & - T1P5M - - !___(tiled, 3 layer) Snow depth (m), mass, density, temp., conductivity - REAL, dimension(land_pts,nsurft) :: & - NEE_TILE - - REAL :: & - RESP_S(LAND_PTS,DIM_CS1), & ! - RESP_S_old(LAND_PTS,DIM_CS1), & ! - RESP_S_TOT(land_pts) ! - - !___ local vars - REAL :: DTRAD(mp) ! CABLE change in rad%trad over time step - - INTEGER :: i,j,l,k,n,m - !___(tiled) soil prognostics: as above - REAL :: smcl_tile(land_pts,nsurft,sm_levels) - REAL :: sthu_tile(land_pts,nsurft,sm_levels) - REAL :: sthf_tile(land_pts,nsurft,sm_levels) - REAL :: tsoil_tile(land_pts,nsurft,sm_levels) - REAL :: smcl_ln(land_pts,nsurft,sm_levels) - REAL :: sthu_ln(land_pts,nsurft,sm_levels) - REAL :: sthf_ln(land_pts,nsurft,sm_levels) - REAL :: tsoil_ln(land_pts,nsurft,sm_levels) - REAL :: SNOW_COND(land_pts,nsurft,nsnl) - - REAL :: TOT_ALB(land_pts,nsurft) ! total albedo - REAL :: RESP_W_FT_ACC(land_pts,nsurft) ! presp for CASA-CNP - REAL :: SURF_CAB_ROFF(land_pts,nsurft) - REAL :: canopy_through_UM(land_pts,nsurft) - REAL :: TOT_TFALL_TILE(land_pts,nsurft) - -TYPE(met_type) :: met -TYPE(radiation_type) :: rad -TYPE(roughness_type) :: rough -TYPE(soil_snow_type) :: ssnow -TYPE(balances_type) :: bal -TYPE(canopy_type) :: canopy -TYPE(air_type) :: air -TYPE(bgc_pool_type) :: bgc -TYPE(sum_flux_type) :: sum_flux -TYPE(veg_parameter_type) :: veg ! vegetation parameters -TYPE(soil_parameter_type) :: soil ! soil parameters - -REAL :: fe_dlh(mp) -REAL :: fes_dlh(mp) -REAL :: fev_dlh(mp) - -!--- Local buffer surface FTL, FQL @ prev dt -REAL :: ftl_tile_old(land_pts,nsurft) -REAL :: fqw_tile_old(land_pts,nsurft) - -INTEGER:: i_miss = 0 -REAL :: miss = 0.0 -INTEGER :: isnow_flg_cable(land_pts,nsurft) -REAL :: dmdA_liq -REAL :: dmdA_ice -REAL :: gpp_ft_mp(mp) - -!-------- Unique subroutine body ----------- -!jhan: should fland be applied or not? - maybe we shouldnt even be dealing with -!any i,j fields -smcl = 0.0 -sthf = 0.0 -sthu = 0.0 -tsoil = 0.0 -smcl_tile = 0.0 -sthf_tile = 0.0 -sthu_tile = 0.0 -tsoil_tile = 0.0 -snow_cond = 0.0 -!smgw_tile = 0.0 - -DO j = 1,sm_levels - - tsoil_tile(:,:,j)= UNPACK( ssnow%tgg(:,j), L_tile_pts, miss) - !liquid mass first - smcl_tile(:,:,j) = UNPACK( REAL( ssnow%wbliq(:,j)), L_tile_pts, miss) - smcl_tile(:,:,j) = smcl_tile(:,:,j) * soil%zse(j) * density_liq - !ice volumetric - sthf_tile(:,:,j) = UNPACK( REAL( ssnow%wbice(:,j)), L_tile_pts, miss) - -ENDDO ! SM_LEVELS - -DO j = 1,sm_levels - !calcualte sthu_tilebefore smcl_tile incoudes ice mass - DO N=1,Nsurft - - DO K=1,surft_PTS(N) - - I = surft_INDEX(K,N) - - ! Exclude permanent ice - IF ( SMVCST(I,j) > 0. ) & !liq mass relaative to max - STHU_TILE(I,N,J)= MAX( 0., SMCL_TILE(I,N,J) / & - (soil%zse(j)*SMVCST(I,j)*density_liq ) ) - - !add ice mass to liq mass - SMCL_TILE(I,N,j) = SMCL_TILE(I,N,j) + & - STHF_TILE(I,N,j) * soil%zse(j) * density_ice - !relative ice vol - IF ( SMVCST(I,j) > 0. ) & - STHF_TILE(I,N,j)= STHF_TILE(I,N,j)/SMVCST(I,j) - - ENDDO ! TILE_PTS(N) - - ENDDO ! NTILES - - SMCL(:,j) = SUM(TILE_FRAC * SMCL_TILE(:,:,j),2) - TSOIL(:,j) = SUM(TILE_FRAC * TSOIL_TILE(:,:,j),2) - - STHF(:,J) = SUM(TILE_FRAC * STHF_TILE(:,:,J),2) - STHU(:,J) = SUM(TILE_FRAC * STHU_TILE(:,:,J),2) - -ENDDO ! SM_LEVELS - - -progs%SoilMoisture_CABLE(:,:,:) = smcl_tile(:,:,:) -progs%FrozenSoilFrac_CABLE(:,:,:) = sthf_tile(:,:,:) -progs%SoilTemp_CABLE(:,:,:) = tsoil_tile(:,:,:) - -isnow_flg_cable = UNPACK(ssnow%isflag, L_TILE_PTS, i_miss) -progs%OneLyrSnowDensity_CABLE = UNPACK(ssnow%ssdnn, l_tile_pts, miss) -progs%ThreeLayerSnowFlag_CABLE(:,:) = REAL( isnow_flg_cable(:,:) ) - -!--- unpack layered snow vars -DO k = 1,3 - progs%SnowTemp_CABLE(:,:,k) = UNPACK(ssnow%tggsn(:,k), L_TILE_PTS, miss) - progs%SnowMass_CABLE(:,:,k) = UNPACK(ssnow%smass(:,k), L_TILE_PTS, miss) - progs%SnowDensity_CABLE(:,:,k) = UNPACK(ssnow%ssdn(:,k), L_TILE_PTS, miss) - progs%SnowDepth_CABLE(:,:,k) = UNPACK(ssnow%sdepth(:,k),L_TILE_PTS,miss) - progs%SnowAge_CABLE(:,:) = UNPACK(ssnow%snage, L_TILE_PTS, miss) - !snow_cond(:,:,k) = UNPACK(ssnow%sconds(:,k),L_TILE_PTS,miss)i !this - !doesn't go anywhere -END DO - -!--- unpack snow vars -melt_tile = UNPACK(ssnow%smelt, l_tile_pts, miss) -snow_surft = UNPACK(ssnow%snowd, l_tile_pts, miss) -snow_grd = SUM(tile_frac * snow_surft,2) ! gridbox snow mass & snow below canopy - -work%lying_snow(:) = snow_grd(:) !jh:this sis done twice AND differently -canopy%gswx_T = canopy%gswx_T/air%cmolar -gs_tile = UNPACK(canopy%gswx_T,L_TILE_PTS,miss) -gs = SUM(tile_frac * GS_TILE,2) - -!---preserve fluxes from the explicit step for the coastal grids -ftl_tile_old = ftl_tile -fqw_tile_old = fqw_tile - -fes_dlh = canopy%fes / ( air%rlam * ssnow%cls ) -fev_dlh = canopy%fev / air%rlam -fe_dlh = fev_dlh + fes_dlh - -ftl_tile = UNPACK(canopy%fh, l_tile_pts, miss) -le_surft = UNPACK(canopy%fe, l_tile_pts, miss) -fqw_tile = UNPACK(fe_dlh, l_tile_pts, miss) - -!retain sea/ice contribution and remove land contribution j -!anymore -DO n=1,nsurft - DO k=1,surft_pts(n) - l = surft_index(K,N) - j=(land_index(l)-1)/row_length + 1 - i = land_index(l) - (j-1)*row_length - - IF( fland(l) == 1.0) THEN - ftl_1(i,j) = 0.0 - fqw_1(i,j) = 0.0 - ELSE - ftl_1(i,j) = ftl_1(i,j) - ( fland(l)* tile_frac(l,n) * ftl_tile_old(l,n) ) - fqw_1(i,j) = fqw_1(i,j) - ( fland(l)* tile_frac(l,n) * fqw_tile_old(l,n) ) - ENDIF - - ENDDO !surft_pts(n) -ENDDO !nsurft -!update with this ftl -DO n=1,nsurft - DO k=1,surft_pts(n) - l = surft_index(K,N) - j=(land_index(l)-1)/row_length + 1 - i = land_index(l) - (j-1)*row_length - - ftl_1(i,j) = ftl_1(i,j) + ( fland(l)* tile_frac(l,n) * ftl_tile(l,n) ) - fqw_1(i,j) = fqw_1(i,j) + ( fland(l)* tile_frac(l,n) * fqw_tile(l,n) ) - - ENDDO !surft_pts(n) -ENDDO !nsurft - -tstar_tile = UNPACK(rad%trad, l_tile_pts, miss) -radnet_tile = UNPACK( canopy%rnet , l_tile_pts, miss) -ecan_tile = UNPACK(fev_dlh, L_TILE_PTS, miss) - -! need to split %fes into evaporation and sublimation -fes_dlh = 0. -WHERE (ssnow%cls==1.) fes_dlh = canopy%fes/(air%rlam*ssnow%cls) -esoil_tile = UNPACK(fes_dlh, L_tile_pts, miss) - -fes_dlh = 0. -WHERE (ssnow%cls==1.1335) fes_dlh = canopy%fes/(air%rlam*ssnow%cls) -ei_tile = UNPACK(fes_dlh, L_TILE_PTS, miss) - -dtrad = rad%trad - rad%otrad -dtstar_tile = UNPACK(dtrad, L_tile_pts, miss) - -!CM3 - internal diag only -!CM3 TRANSP_TILE = UNPACK(canopy%fevc, L_TILE_PTS, miss) -tot_alb = UNPACK(rad%albedo_T,L_TILE_PTS, miss) - -!unpack screen level (1.5m) variables - Convert back to K -t1p5m_tile = UNPACK(canopy%tscrn+tfrz, L_TILE_PTS, miss) -q1p5m_tile = UNPACK(canopy%qscrn, L_TILE_PTS, miss) - -canopy_tile = UNPACK(canopy%cansto, L_TILE_PTS, miss) -canopy_gb = SUM(tile_frac * canopy_tile,2) !fland? - - -!initialse full land grids and retain coastal grid fluxes -!initialse full land grids and retain coastal grid fluxes - -surf_htf_tile = UNPACK(canopy%ga,L_TILE_PTS,miss) -surf_ht_flux_land(:,:) = 0. -!fland? -DO n=1,nsurft - DO K=1,surft_pts(N) - - l = surft_index(K,N) - j=(land_index(l)-1)/row_length + 1 - i = land_index(l) - (j-1)*row_length - - surf_ht_flux_land(i,j) = surf_ht_flux_land(i,j) + & - tile_frac(l,n) * surf_htf_tile(l,n) - - ENDDO -ENDDO - -! Initialise grid-cell carbon fields that are accumulated over tiles -resp_p = 0.; npp = 0.; gpp = 0.; resp_s = 0. - -resp_s_tile = UNPACK(canopy%frs, L_tile_pts, miss) !see ISSUE#51 -nee_tile = UNPACK(canopy%fnee, L_tile_pts, miss) -npp_ft = UNPACK(canopy%fnpp, L_tile_pts, miss) -g_leaf = UNPACK(canopy%frday,L_tile_pts, miss) -resp_p_ft = UNPACK(canopy%frp, L_tile_pts, miss) -gpp_ft_mp = canopy%fnpp + canopy%frp + canopy%frday -gpp_ft = UNPACK(gpp_ft_mp, L_tile_pts, miss) - -! convert from CABLE units (gC/m2/s) to UM units (kgC/m2/s) -resp_s_tile = resp_s_tile * 1.e-3 -g_leaf = g_leaf * 1.e-3 -npp_ft = npp_ft * 1.e-3 -gpp_ft = gpp_ft * 1.e-3 -resp_p_ft = resp_p_ft * 1.e-3 - -! If CASA-CNP used, plant and soil resp need to be passed into -! variables that are dumped to restart, because CASA-CNP only run daily -npp_ft_acc = resp_s_tile !see ISSUE#51 -resp_w_ft_acc = resp_p_ft !see ISSUE#51 -!fland ? -DO n=1,nsurft - DO k=1,surft_pts(N) - l = surft_index(K,N) - npp(l)=npp(l)+fland(l)*tile_frac(l,n)*npp_ft(l,n) - gpp(l)=gpp(l)+fland(l)*tile_frac(l,n)*gpp_ft(l,n) - resp_p(l)=resp_p(l)+fland(l)*tile_frac(l,n)*resp_p_ft(l,n) - - !loop for soil resp. although DIM_CS1=1 (not 1 for triffid) - DO i=1,dim_cs1 - resp_s(l,i) = resp_s(l,i) + & - fland(l)*tile_frac(l,n)*resp_s_tile(l,n) - ENDDO - resp_s_tot(l)=SUM(resp_s(l,:)) !in CM2 this doesnt actually do anything !see ISSUE#51 - t1p5m(L)=SUM(t1p5m_tile(L,:)) - ENDDO -ENDDO -!jhan?fland? -work%lying_snow = SUM(TILE_FRAC * snow_surft,2) !gridbox snow mass - -surf_cab_roff = UNPACK(ssnow%rnof1, L_tile_pts, miss) -work%surf_roff = SUM(tile_frac * surf_cab_roff,2) - -surf_cab_roff = UNPACK(ssnow%rnof2, L_TILE_PTS, miss) -work%sub_surf_roff = SUM(tile_frac * surf_cab_roff,2) - -! %through is /dels in UM app. for STASH output -canopy_through_UM = UNPACK(canopy%through, L_tile_pts, miss) -tot_tfall_tile = canopy_through_UM / timestep -work%tot_tfall = SUM(tile_frac * tot_tfall_tile,2) - - -RETURN - -END SUBROUTINE Implicit_unpack - -End module cable_implicit_unpack_mod diff --git a/src/coupled/AM3/control/cable/interface/implicit/cbl_prognostic_bank.F90 b/src/coupled/AM3/control/cable/interface/implicit/cbl_prognostic_bank.F90 deleted file mode 100644 index ec5b0f866..000000000 --- a/src/coupled/AM3/control/cable/interface/implicit/cbl_prognostic_bank.F90 +++ /dev/null @@ -1,167 +0,0 @@ -MODULE prognostic_bank_mod_cbl - -TYPE ProgBank - - REAL, DIMENSION(:,:), ALLOCATABLE :: & - tsoil, smcl, sthf, & - snow_depth, & - snow_mass, snow_tmp, snow_rho , & - sli_s, sli_tsoil, sli_sconds, sli_snowliq, & - cplant, csoil !carbon variables - - REAL, DIMENSION(:), ALLOCATABLE :: & - snow_rho1l, snow_age, snow_tile, & - ocanopy, & - fes_cor,fhs_cor, osnowd,owetfac,otss,gwwb,tss0, & - puddle, rtsoil, wblake, gwaq, & - sli_h0, sli_tsurf - - INTEGER, DIMENSION(:), ALLOCATABLE :: & - snow_flg3l, sli_nsnow - -END TYPE ProgBank - -CONTAINS - -SUBROUTINE cable_store_prognostics( pb, mp, nsl, nsCs,nvCs, ssnow, canopy, bgc ) - -USE cable_common_module, ONLY: cable_user -USE cable_def_types_mod, ONLY: soil_snow_type, bgc_pool_type -USE cable_canopy_type_mod, ONLY: canopy_type - -IMPLICIT NONE -INTEGER, INTENT(IN) :: mp ! # active tiles -INTEGER, INTENT(IN) :: nsl ! # soil layers -INTEGER, INTENT(IN) :: nsCs ! # soil carbon stores -INTEGER, INTENT(IN) :: nvCs ! # vegetation carbon stores - -TYPE (ProgBank), INTENT(INOUT):: pb -TYPE(soil_snow_type), INTENT(INOUT) :: ssnow -TYPE(canopy_type), INTENT(INOUT) :: canopy -TYPE(bgc_pool_type), INTENT(INOUT) :: bgc - -IF (.NOT. ALLOCATED(pb%tsoil) ) then - - ALLOCATE( pb%tsoil(mp,nsl) ) - ALLOCATE( pb%smcl(mp,nsl) ) - ALLOCATE( pb%sthf(mp,nsl) ) - ALLOCATE( pb%snow_depth(mp,3) ) - ALLOCATE( pb%snow_mass(mp,3) ) - ALLOCATE( pb%snow_tmp(mp,3) ) - ALLOCATE( pb%snow_rho(mp,3) ) - ALLOCATE( pb%snow_rho1l(mp) ) - ALLOCATE( pb%snow_age(mp) ) - ALLOCATE( pb%snow_flg3l(mp) ) - ALLOCATE( pb%snow_tile(mp) ) - ALLOCATE( pb%puddle(mp) ) - ALLOCATE( pb%owetfac(mp) ) - ALLOCATE( pb%rtsoil(mp) ) - ALLOCATE( pb%wblake(mp) ) - ALLOCATE(pb%tss0(mp) ) - ALLOCATE( pb%ocanopy(mp) ) - ALLOCATE( pb%fes_cor(mp) ) - !carbon variables - may not be needed unless CASA - ALLOCATE( pb%cplant(mp,nvcs) ) - ALLOCATE( pb%csoil(mp,nscs) ) - !GW model variables no need to test always has a value - !so do not introduce issues with restarting a GW run - ALLOCATE (pb%GWaq(mp) ) - - !SLI variables - Jhan please check the second dimension - IF (cable_user%soil_struc=='sli') THEN - ALLOCATE(pb%sli_nsnow(mp) ) - ALLOCATE(pb%sli_s(mp,nsl) ) - ALLOCATE(pb%sli_tsoil(mp,nsl) ) - ALLOCATE(pb%sli_sconds(mp,3) ) - ALLOCATE(pb%sli_h0(mp) ) - ALLOCATE(pb%sli_tsurf(mp) ) - ALLOCATE(pb%sli_snowliq(mp,3) ) - ENDIF - -ENDIF !.NOT. allocated - -pb%tsoil = ssnow%tgg -pb%smcl = ssnow%wb -pb%sthf = ssnow%wbice -pb%snow_depth = ssnow%sdepth -pb%snow_mass = ssnow%smass -pb%snow_tmp = ssnow%tggsn -pb%snow_rho = ssnow%ssdn -pb%snow_rho1l = ssnow%ssdnn -pb%snow_age = ssnow%snage -pb%snow_flg3l = ssnow%isflag -pb%snow_tile = ssnow%snowd -pb%puddle = ssnow%pudsto -pb%rtsoil = ssnow%rtsoil !?needed in restart? -pb%owetfac = ssnow%owetfac -pb%wblake = ssnow%wb_lake -pb%tss0 = ssnow%tss -pb%ocanopy = canopy%oldcansto -pb%fes_cor = canopy%fes_cor -pb%cplant = bgc%cplant ! may not be needed unless CASA -pb%csoil = bgc%csoil ! may not be needed unless CASA -pb%gwaq = ssnow%gwwb !GW model ?issues with restarting? - -!SLI variables -IF (cable_user%soil_struc=='sli') THEN - pb%sli_nsnow = ssnow%nsnow - pb%sli_s = ssnow%s - pb%tsoil = ssnow%tsoil - pb%sli_sconds = ssnow%sconds - pb%sli_h0 = ssnow%h0 - pb%sli_Tsurf = ssnow%tsurface - pb%sli_snowliq = ssnow%snowliq -ENDIF - -RETURN -END SUBROUTINE cable_store_prognostics - -SUBROUTINE cable_reinstate_prognostics( pb, ssnow, canopy, bgc ) - -USE cable_def_types_mod, ONLY: soil_snow_type, bgc_pool_type -USE cable_canopy_type_mod, ONLY: canopy_type -USE cable_common_module, ONLY: cable_user - -IMPLICIT NONE -TYPE (ProgBank), INTENT(INOUT) :: pb -TYPE(soil_snow_type), INTENT(INOUT) :: ssnow -TYPE(canopy_type), INTENT(INOUT) :: canopy -TYPE(bgc_pool_type), INTENT(INOUT) :: bgc - -ssnow%tgg = pb%tsoil -ssnow%wb = pb%smcl -ssnow%wbice = pb%sthf -ssnow%sdepth = pb%snow_depth -ssnow%smass = pb%snow_mass -ssnow%tggsn = pb%snow_tmp -ssnow%ssdn = pb%snow_rho -ssnow%ssdnn = pb%snow_rho1l -ssnow%snage = pb%snow_age -ssnow%isflag = pb%snow_flg3l -ssnow%snowd = pb%snow_tile -ssnow%pudsto = pb%puddle -ssnow%rtsoil = pb%rtsoil !?needed -ssnow%owetfac = pb%owetfac -ssnow%wb_lake = pb%wblake -ssnow%tss = pb%tss0 -canopy%oldcansto = pb%ocanopy -canopy%fes_cor = pb%fes_cor -bgc%cplant = pb%cplant ! may not be needed unless CASA -bgc%csoil = pb%csoil ! may not be needed unless CASA -ssnow%GWwb = pb%GWaq! GW model variables - -!SLI variables -IF (cable_user%soil_struc=='sli') THEN - ssnow%nsnow = pb%sli_nsnow - ssnow%S = pb%sli_s - ssnow%Tsoil = pb%sli_tsoil - ssnow%sconds = pb%sli_sconds - ssnow%h0 = pb%sli_h0 - ssnow%Tsurface = pb%sli_tsurf - ssnow%snowliq = pb%sli_snowliq -ENDIF - -RETURN -END SUBROUTINE cable_reinstate_prognostics - -END MODULE prognostic_bank_mod_cbl diff --git a/src/coupled/AM3/control/cable/interface/radiation/rad_driver_cbl.F90 b/src/coupled/AM3/control/cable/interface/radiation/rad_driver_cbl.F90 deleted file mode 100644 index 29befd375..000000000 --- a/src/coupled/AM3/control/cable/interface/radiation/rad_driver_cbl.F90 +++ /dev/null @@ -1,192 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE cable_rad_driv_mod - -!----------------------------------------------------------------------------- -! Description: -! Initialises radiation specific variables and computes the albedo for -! CABLE. -! -! This MODULE is USEd in: -! cable_land_albedo_mod_cbl.F90 (JULES) -! -! This MODULE contains 1 public Subroutine: -! cable_rad_driver -! -! Code owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE -PUBLIC :: cable_rad_driver - -CONTAINS - -SUBROUTINE cable_rad_driver( EffSurfRefl_beam, EffSurfRefl_dif, land_pts, & - mp, nrb, ICE_SoilType, lakes_type, Clai_thresh, & - Ccoszen_tols, CGauss_w, Cpi, Cpi180, z0surf_min, & - veg_mask, jls_standalone, jls_radiation, & - SurfaceType, SoilType, & - LAI_pft_cbl, HGT_pft_cbl, SnowDepth, & - SnowDensity, SoilTemp, SnowAge, AlbSoil, & - coszen, VegXfang, VegTaul, VegRefl, & - HeightAboveSnow, reducedLAIdue2snow, & - ExtCoeff_beam, ExtCoeff_dif, EffExtCoeff_beam, & - EffExtCoeff_dif, CanopyTransmit_beam, & - CanopyTransmit_dif, CanopyRefl_beam, & - CanopyRefl_dif, c1, rhoch, xk, AlbSnow, RadFbeam, & - RadAlbedo, metDoY, SW_down ) - -! Description: -! Nothing further to add to module description. - -!subrs: -USE cbl_albedo_mod, ONLY: albedo -USE cbl_init_radiation_module, ONLY: init_radiation -USE cable_common_module, ONLY : cable_runtime -USE UM_ParCore, ONLY: mype - -IMPLICIT NONE - -!model dimensions -INTEGER, INTENT(IN) :: land_pts !# land points on x,y grid -INTEGER, INTENT(IN) :: mp ! total number of "tiles" (calc. in cable_land) -INTEGER, INTENT(IN) :: nrb ! # radiation bands[ 1=VIS,2=NIR,3=LW(legacy) - -! Albedos req'd by JULES - Effective Surface Relectance as seen by atmosphere -REAL, INTENT(OUT) :: EffSurfRefl_dif(mp,nrb) ! Refl to Diffuse component of rad - ! formerly rad%reffdf -REAL, INTENT(OUT) :: EffSurfRefl_beam(mp,nrb) ! Refl to Beam component of rad - ! formerly rad%reffbm - -!--- IN: CABLE specific surface_type indexes -INTEGER, INTENT(IN) :: ICE_SoilType -INTEGER, INTENT(IN) :: lakes_type - -!constants -REAL, INTENT(IN) :: Ccoszen_tols ! threshold cosine of sun's zenith angle, - ! below which considered SUNLIT -REAL, INTENT(IN) :: Cgauss_w(nrb) ! Gaussian integration weights -REAL, INTENT(IN) :: Clai_thresh ! The minimum LAI below which a "cell" is - ! considred NOT vegetated -REAL, INTENT(IN) :: Cpi ! PI -REAL, INTENT(IN) :: Cpi180 ! PI in radians -REAL, INTENT(IN) :: z0surf_min ! the minimum roughness of bare soil - -LOGICAL, INTENT(IN) :: jls_standalone ! local runtime switch for JULES(/UM) run -LOGICAL, INTENT(IN) :: jls_radiation ! local runtime switch for radiation path - -!masks -LOGICAL, INTENT(IN) :: veg_mask(:) ! vegetated (uses min LAI) - -!recieved as spatial maps from the UM. remapped to "mp" -REAL, INTENT(IN) :: LAI_pft_cbl(mp) ! LAI - "limited" and remapped -REAL, INTENT(IN) :: HGT_pft_cbl(mp) ! canopy height - "limited", remapped -REAL, INTENT(IN) :: coszen(mp) ! cosine zenith angle (met%coszen) -REAL, INTENT(IN) :: AlbSoil(mp, nrb) ! soil%AlbSoil - -!computed for CABLE model -REAL, INTENT(IN):: HeightAboveSnow(mp) ! Height of Canopy above snow - ! (rough%hruff) computed from - ! z0surf_min, HGT_pft_cbl, - ! SnowDepth, SnowDensity -REAL, INTENT(IN) :: reducedLAIdue2snow(mp) ! Reduced LAI given snow coverage - -!Prognostics !recieved as spatial maps from the UM. remapped to "mp" -REAL, INTENT(IN) :: SnowDepth(mp) ! Total Snow depth - water eqivalent - - ! packed from snow_surft (ssnow%snowd) - ! this timestep (ssnow%Osnowd) -REAL, INTENT(IN) :: SnowDensity(mp) ! Total Snow density (assumes 1 layer - ! describes snow cover) (ssnow%ssdnn) -REAL, INTENT(IN) :: SoilTemp(mp) ! Soil Temperature of top layer (soil%tgg) -REAL, INTENT(IN) :: SnowAge(mp) ! Snow age (assumes 1 layer describes snow - ! cover) (ssnow%snage) - -!Vegetation parameters !recieved as per PFT params from the UM. remapped to "mp" -INTEGER, INTENT(IN) :: SurfaceType(mp) -INTEGER, INTENT(IN) :: SoilType(mp) -REAL, INTENT(IN) :: VegXfang(mp) ! leaf angle PARAMETER (veg%xfang) -REAL, INTENT(IN) :: VegTaul(mp,nrb) ! PARAM leaf transmisivity (veg%taul) -REAL, INTENT(IN) :: VegRefl(mp,nrb) ! PARAM leaf reflectivity (veg%refl) - -!local to Rad/Albedo pathway: -REAL, INTENT(IN OUT) :: ExtCoeff_beam(mp) ! nee. rad%extkb, -REAL, INTENT(IN OUT) :: ExtCoeff_dif(mp) ! nee. rad%extkd -REAL, INTENT(IN OUT) :: EffExtCoeff_beam(mp, nrb) ! nee. rad%extkbm -REAL, INTENT(IN OUT) :: EffExtCoeff_dif(mp, nrb) ! nee. rad%extkdm, -REAL, INTENT(IN OUT) :: CanopyTransmit_dif(mp, nrb) ! nee. rad%cexpkdm -REAL, INTENT(IN OUT) :: CanopyTransmit_beam(mp, nrb) ! nee. rad%cexpkbm -REAL, INTENT(IN OUT) :: CanopyRefl_dif(mp, nrb) ! nee. rad%rhocdf -REAL, INTENT(IN OUT) :: CanopyRefl_beam(mp, nrb) ! nee. rad%rhocbm -REAL, INTENT(IN OUT) :: RadFbeam(mp, nrb) ! nee. rad%fbeam -REAL, INTENT(IN OUT) :: RadAlbedo(mp, nrb) ! nee. rad%albedo -REAL, INTENT(IN OUT) :: AlbSnow(mp, nrb) ! nee. ssnow%AlbSoilsn -REAL, INTENT(IN OUT) :: c1(mp, nrb) ! common rad scalings -REAL, INTENT(IN OUT) :: rhoch(mp, nrb) ! common rad scalings -REAL, INTENT(IN OUT) :: xk(mp, nrb) ! common rad scalings -! used in Calc of Beam calculation NOT on rad/albedo path. -! However Needed to fulfill arg list with dummy -INTEGER, INTENT(IN OUT) :: metDoY(mp) ! can pass DoY from current_time -REAL, INTENT(IN OUT) :: SW_down(mp, nrb) ! NA at surf_couple_rad layer - -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_rad_driver" -LOGICAL :: cbl_standalone = .FALSE. -LOGICAL, SAVE :: zero_points_warning = .true. - -IF( land_pts == 0 ) THEN - IF( zero_points_warning ) THEN - WRITE(6,*) "Reached CABLE ", subr_name, & - " even though zero land_points on processor ", mype - END IF - zero_points_warning = .FALSE. - RETURN -END IF - -cable_runtime%um = .TRUE. -cable_runtime%um_radiation = .TRUE. - -!Defines Extinction Coefficients to use in calculation of Canopy -!Reflectance/Transmitance. -CALL init_radiation( ExtCoeff_beam, ExtCoeff_dif, EffExtCoeff_beam, & - EffExtCoeff_dif, RadFbeam, c1, rhoch, xk, & - mp,nrb, Clai_thresh, Ccoszen_tols, CGauss_w, Cpi, Cpi180, & - cbl_standalone, jls_standalone, jls_radiation, subr_name, & - veg_mask, VegXfang, VegTaul, VegRefl, coszen, metDoY, & - SW_down, reducedLAIdue2snow ) - -!Finally call albedo to get what we really need to fulfill contract with JULES -!Defines 4-stream albedos [VIS/NIR bands. direct beam/diffuse components] from -!considering albedo of Ground (snow?) and Canopy Reflectance/Transmitance. -CALL Albedo( AlbSnow, AlbSoil, & - mp, nrb, ICE_SoilType, lakes_type, jls_radiation, veg_mask, & - Ccoszen_tols, cgauss_w, & - SurfaceType, SoilType ,VegRefl, VegTaul, & - coszen, reducedLAIdue2snow, & - SnowDepth, SnowDensity, SoilTemp, SnowAge, & - xk, c1, rhoch, & - RadFbeam, RadAlbedo, & - ExtCoeff_beam, ExtCoeff_dif, & - EffExtCoeff_beam, EffExtCoeff_dif, & - CanopyRefl_beam, CanopyRefl_dif, & - CanopyTransmit_beam, CanopyTransmit_dif, & - EffSurfRefl_beam, EffSurfRefl_dif) - -cable_runtime%um_radiation = .FALSE. -RETURN - -END SUBROUTINE cable_rad_driver - -END MODULE cable_rad_driv_mod - diff --git a/src/coupled/AM3/control/cable/interface/radiation/rad_unpack_cbl.F90 b/src/coupled/AM3/control/cable/interface/radiation/rad_unpack_cbl.F90 deleted file mode 100644 index 5bbe78c9b..000000000 --- a/src/coupled/AM3/control/cable/interface/radiation/rad_unpack_cbl.F90 +++ /dev/null @@ -1,137 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE cable_rad_unpack_mod - -!----------------------------------------------------------------------------- -! Description: -! Unpack JULES variables into CABLE variables as needed for the -! radiation calculations. -! -! This MODULE is USEd in: -! cable_land_albedo_mod_cbl.F90 (JULES) -! -! This MODULE contains 1 public Subroutine: -! cable_rad_unpack -! -! Code owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE -PUBLIC :: cable_rad_unpack - -CONTAINS - -SUBROUTINE cable_rad_unpack( land_albedo, alb_surft, & - mp, nrs, row_length, rows, land_pts, & - nsurft, tile_pts, tile_index, & - land_index, tile_frac, L_tile_pts, & - EffSurfRefl_beam, EffSurfRefl_dif) - -! Description: -! Nothing further to add to module description. - -IMPLICIT NONE - -! Model(field) dimensions -INTEGER, INTENT(IN) :: mp !total number of "tiles" -INTEGER, INTENT(IN) :: nrs !# rad bands VIS,NIR. 3rd WAS LW -INTEGER, INTENT(IN) :: row_length !grid cell x -INTEGER, INTENT(IN) :: rows !grid cell y -INTEGER, INTENT(IN) :: land_pts !grid cell land points -x,y grid -INTEGER, INTENT(IN) :: nsurft !grid cell # surface types - -! Return Albedos CABLE to fulfill contract with JULES -REAL, INTENT(OUT) :: land_albedo(row_length,rows,nrs) -REAL, INTENT(OUT) :: alb_surft(land_pts,nsurft,nrs) - -! Inherited dimensions from JULES -INTEGER, INTENT(IN) :: tile_pts(nsurft) !Number of land points per PFT -INTEGER, INTENT(IN) :: land_index(land_pts) !land point Index in (x,y) array -INTEGER, INTENT(IN) :: tile_index(land_pts,nsurft) !Index of land point in (land_pts) array - -!recieved as spatial maps from the UM. -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) !fraction of each surface type per land point -LOGICAL, INTENT(IN) :: L_tile_pts( land_pts, nsurft ) !mask:=TRUE where tile_frac>0, else FALSE. pack mp according to this mask - -! Albedos -REAL, INTENT(IN) :: EffSurfRefl_beam(mp,nrs) !Effective Surface Relectance as seen by atmosphere [Direct Beam SW] (rad%reffbm) -REAL, INTENT(IN) :: EffSurfRefl_dif(mp,nrs) !Effective Surface Relectance as seen by atmosphere [Diffuse SW] (rad%reffdf) - -!___ local vars -INTEGER :: i,j,k,l,n -REAL :: miss = 0.0 - -! std template args -CHARACTER(LEN=*), PARAMETER :: subr_name = "cable_rad_unpack" -REAL :: Sumreffbm(mp) -REAL :: Sumreffdf(mp) - -! UNPACK Albedo (per rad stream) per surface tile -alb_surft(:,:,:) = 0.0 ! guarantee flushed -! Direct beam, visible / near-IR -alb_surft(:,:,1) = UNPACK(EffSurfRefl_beam(:,1),l_tile_pts, miss) -alb_surft(:,:,3) = UNPACK(EffSurfRefl_beam(:,2),l_tile_pts, miss) -! Diffuse, visible / near-IR -alb_surft(:,:,2) = UNPACK(EffSurfRefl_dif(:,1),l_tile_pts, miss) -alb_surft(:,:,4) = UNPACK(EffSurfRefl_dif(:,2),l_tile_pts, miss) - -! ERROR trap: Model stopped as albedo is unphysical -DO i = 1,land_pts - DO j = 1,nsurft - - IF ( alb_surft(i,j,1) > 1.0 .OR. alb_surft(i,j,1) < 0.0) THEN - WRITE(6,*) 'albedo(i,j,1) is unphysical ',alb_surft(i,j,1) - STOP 'CABLE ERROR' - ELSE IF ( alb_surft(i,j,2) > 1.0 .OR. alb_surft(i,j,2) < 0.0) THEN - WRITE(6,*) 'albedo(i,j,2) is unphysical ',alb_surft(i,j,2) - STOP 'CABLE ERROR' - ELSE IF ( alb_surft(i,j,3) > 1.0 .OR. alb_surft(i,j,3) < 0.0) THEN - WRITE(6,*) 'albedo(i,j,3) is unphysical ',alb_surft(i,j,3) - STOP 'CABLE ERROR' - ELSE IF ( alb_surft(i,j,4) > 1.0 .OR. alb_surft(i,j,4) < 0.0) THEN - WRITE(6,*) 'albedo(i,j,4) is unphysical ',alb_surft(i,j,4) - STOP 'CABLE ERROR' - END IF - - END DO -END DO - -! Aggregate albedo (per rad stream) OVER surface tiles to get per cell value -land_albedo(:,:,:) = 0.0 ! guarantee flushed -DO n = 1,nsurft - DO k = 1,tile_pts(n) - - l = tile_index(k,n) - j=(land_index(l) - 1) / row_length + 1 - i = land_index(l) - (j-1) * row_length - - ! Direct beam, visible - land_albedo(i,j,1) = land_albedo(i,j,1) + tile_frac(l,n) * ALB_surft(l,n,1) - ! Diffuse, visible - land_albedo(i,j,2) = land_albedo(i,j,2) + tile_frac(l,n) * ALB_surft(l,n,2) - ! Direct beam, nearinfrared - land_albedo(i,j,3) = land_albedo(i,j,3) + tile_frac(l,n) * ALB_surft(l,n,3) - ! Diffuse, nearinfrared - land_albedo(i,j,4) = land_albedo(i,j,4) + tile_frac(l,n) * ALB_surft(l,n,4) - - END DO -END DO - -RETURN - -END SUBROUTINE cable_rad_unpack - -END MODULE cable_rad_unpack_mod diff --git a/src/coupled/AM3/control/cable/shared/cable_fields_mod.F90 b/src/coupled/AM3/control/cable/shared/cable_fields_mod.F90 deleted file mode 100644 index 323b211fd..000000000 --- a/src/coupled/AM3/control/cable/shared/cable_fields_mod.F90 +++ /dev/null @@ -1,61 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE cable_fields_mod - -!------------------------------------------------------------------------------ -! Description: -! Module containing instances of the data types for CABLE in jules standalone -! analagous to jules_fields_mod. This is the central place where ubiquitous -! fields are distributed and USEd from throughout the model are instantiated. -! Currently only prognostic fields are here but many more are on the way -! -! This MODULE is USEd by: -! surf_couple_radiation_mod.F90, -! jules.F90, -! init_soilin_cbl.inc, -! init_vegin_cbl.inc, -! populate_var.inc -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!------------------------------------------------------------------------------ - - -!type definitions -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type, & - progs_cbl_vars_data_type -USE work_vars_mod_cbl, ONLY: work_vars_data_type, & - work_vars_type -!These are dimensionally in per PFT format -USE params_io_mod_cbl, ONLY: params_io_type, & - params_io_data_type - -PUBLIC - -!TYPES to hold the data -TYPE(progs_cbl_vars_data_type), TARGET :: progs_cbl_vars_data -TYPE(work_vars_data_type), TARGET :: work_vars_data_cbl -!These are dimensionally in per PFT format -TYPE(params_io_data_type), TARGET :: pars_io_data_cbl - -!TYPES we pass around. These happen to be pointers to the data types above -!but this should be transparent -TYPE(progs_cbl_vars_type) :: progs_cbl_vars -TYPE(work_vars_type) :: work_vars_cbl -!These are dimensionally in per PFT format -TYPE(params_io_type) :: pars_io_cbl - -END MODULE cable_fields_mod diff --git a/src/coupled/AM3/control/cable/shared/cable_model_env.F90 b/src/coupled/AM3/control/cable/shared/cable_model_env.F90 deleted file mode 100644 index 66b47fb43..000000000 --- a/src/coupled/AM3/control/cable/shared/cable_model_env.F90 +++ /dev/null @@ -1,105 +0,0 @@ -MODULE cable_model_env_mod - -USE cable_model_env_opts_mod, ONLY: icycle - -IMPLICIT NONE - -NAMELIST / cable_model_environment / & - icycle - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='CABLE_MODEL_ENV_MOD' - -CONTAINS - -SUBROUTINE set_derived_variables_cable_model_env - -USE cable_model_env_opts_mod, ONLY: l_casacnp - -IMPLICIT NONE - -IF( icycle == 1 ) THEN - l_casacnp = .TRUE. - WRITE(6,*) "CABLE-CASA-CNP configured for Carbon cycle" -ELSEIF( icycle == 2 ) THEN - l_casacnp = .TRUE. - WRITE(6,*) "CABLE-CASA-CNP configured for Carbon, Nitrogen cycle" -ELSEIF( icycle == 3 ) THEN - l_casacnp = .TRUE. - WRITE(6,*) "CABLE-CASA-CNP configured for Carbon, Nitrogen, Phosphorus cycle" -ELSE - l_casacnp = .FALSE. - WRITE(6,*) "CABLE-CASA-CNP configured for NO biogeochemical cycle" -ENDIF - -RETURN - -END SUBROUTINE set_derived_variables_cable_model_env - -SUBROUTINE read_nml_cable_model_env(unitnumber) - -! Description: -! Read the cable_model_env namelist - -USE setup_namelist, ONLY: setup_nml_type -USE check_iostat_mod, ONLY: check_iostat -USE UM_parcore, ONLY: mype -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE errormessagelength_mod, ONLY: errormessagelength - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: unitnumber -INTEGER :: my_comm -INTEGER :: mpl_nml_type -INTEGER :: ErrorStatus -INTEGER :: icode -CHARACTER(LEN=errormessagelength) :: iomessage -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='READ_NML_CABLE_MODEL_ENV' -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 - -! set number of each type of variable in my_namelist type -INTEGER, PARAMETER :: no_of_types = 1 -INTEGER, PARAMETER :: n_int = 1 - -TYPE my_namelist - !!SEQUENCE - INTEGER :: icycle -END TYPE my_namelist - -TYPE (my_namelist) :: my_nml - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL gc_get_communicator(my_comm, icode) - -CALL setup_nml_type(no_of_types, mpl_nml_type, n_int_in = n_int) - -IF (mype == 0) THEN - - READ (UNIT = unitnumber, NML = cable_model_environment, IOSTAT = errorstatus, & - IOMSG = iomessage) - CALL check_iostat(errorstatus, "namelist cable_model_environment",iomessage) - - my_nml % icycle = icycle -END IF - -CALL mpl_bcast(my_nml,1,mpl_nml_type,0,my_comm,icode) - -IF (mype /= 0) THEN - - icycle = my_nml % icycle - -END IF - -CALL mpl_type_free(mpl_nml_type,icode) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE read_nml_cable_model_env - -END MODULE cable_model_env_mod - diff --git a/src/coupled/AM3/control/cable/shared/land_tile_ids_mod_cbl.F90 b/src/coupled/AM3/control/cable/shared/land_tile_ids_mod_cbl.F90 deleted file mode 100644 index 7d9f0f80d..000000000 --- a/src/coupled/AM3/control/cable/shared/land_tile_ids_mod_cbl.F90 +++ /dev/null @@ -1,121 +0,0 @@ -! *****************************COPYRIGHT******************************* -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT******************************* -! -! Module setting Tile ID numbers, which are used to identify which land -! surface tiles are present. - -! Code Description: -! Language: FORTRAN 90 -! This code is written to UMDP3 v8.2 programming standards. - -MODULE land_tile_ids_mod_cbl - -USE max_dimensions, ONLY: & - ntype_max, & - snow_layers_max, & - elev_tile_max - -USE missing_data_mod, ONLY: imdi - -IMPLICIT NONE - -!----------------------------------------------------------------------- - -INTEGER, PRIVATE :: i ! Loop counter - -INTEGER :: surface_type_ids(ntype_max) = imdi - ! Array which maps pseudo levels to tile types - -INTEGER :: ml_snow_type_ids(ntype_max * snow_layers_max) = imdi - ! Array which maps pseudo levels to tile types - -INTEGER :: tile_ids_in(ntype_max * snow_layers_max) = imdi - ! Tile IDs in the input header - -CONTAINS - -SUBROUTINE set_surface_type_ids_cbl( ) -USE ereport_mod, ONLY: ereport - -USE jules_print_mgr, ONLY: & - jules_message, & - jules_print, & - jules_format - -USE errormessagelength_mod, ONLY: errormessagelength - -USE cable_surface_types_mod, ONLY: & - ntype, & - evergreen_needleleaf, & - evergreen_broadleaf, & - deciduous_needleleaf, & - deciduous_broadleaf, & - shrub_cable, & - c3_grassland, & - c4_grassland, & - tundra, & - c3_cropland, & - c4_cropland, & - wetland, & - empty1, & - empty2, & - barren_cable, & - urban_cable, & - lakes_cable, & - ice_cable - -IMPLICIT NONE - -INTEGER :: i ! Loop counter -INTEGER :: errorstatus -CHARACTER(LEN=18), PARAMETER :: routinename='set_tile_id_arrays' - -!There is presently no other option for CABLE surface type indexing -surface_type_ids( evergreen_needleleaf ) = 1 -surface_type_ids( evergreen_broadleaf ) = 2 -surface_type_ids( deciduous_needleleaf ) = 3 -surface_type_ids( deciduous_broadleaf ) = 4 -surface_type_ids( shrub_cable ) = 5 -surface_type_ids( c3_grassland ) = 6 -surface_type_ids( c4_grassland ) = 7 -surface_type_ids( tundra ) = 8 -surface_type_ids( c3_cropland ) = 9 -surface_type_ids( c4_cropland ) = 10 -surface_type_ids( wetland ) = 11 -surface_type_ids( empty1 ) = 12 -surface_type_ids( empty2 ) = 13 -surface_type_ids( barren_cable ) = 14 -surface_type_ids( urban_cable ) = 15 -surface_type_ids( lakes_cable ) = 16 -surface_type_ids( ice_cable ) = 17 - -! Print the surface types that are present -WRITE(jules_format,'(a3,i3,a8)') '(a,',ntype,'(1x,i6))' -WRITE(jules_message,jules_format) ' Surface types present =', & - surface_type_ids(1:ntype) -CALL jules_print(routinename, jules_message) - -! Check that all surface types have been specified -IF ( ANY( surface_type_ids(1:ntype) == imdi ) ) THEN - errorstatus = 30 - WRITE(jules_message, '(A,I6)') & - ' All surface types need to be specified. Please see job.out.' - CALL ereport ( routinename, errorstatus, jules_message ) -END IF - -! Check that tile IDs are unique -DO i = 1, ntype - IF ( COUNT( surface_type_ids(:) == surface_type_ids(i) ) /= 1 ) THEN - errorstatus = 30 - WRITE(jules_message, '(A,I6)') & - ' Surface type ID not unique :', surface_type_ids(i) - CALL ereport ( routinename, errorstatus, jules_message ) - END IF -END DO - -END SUBROUTINE set_surface_type_ids_cbl - -END MODULE land_tile_ids_mod_cbl diff --git a/src/coupled/AM3/control/cable/shared/params_io_cbl.F90 b/src/coupled/AM3/control/cable/shared/params_io_cbl.F90 deleted file mode 100644 index 68e206a4f..000000000 --- a/src/coupled/AM3/control/cable/shared/params_io_cbl.F90 +++ /dev/null @@ -1,355 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE params_io_mod_cbl - -!----------------------------------------------------------------------------- -! Description: -! Defines variable types and variables for veg and soil parameters. -! We only define the pointer associations relevant to TYPES to be parssed -! around (following JULES params*_io). The allocation is unecessary as these -! input parameters are read in from namelist (following JULES params *_io), -! these are initialized in corresponding section -! Based on cable_def_types_mod.F90 from the CABLE trunk. -! -! This MODULE is USEd by: -! cable_fields_mod.F90, -! init_vegin_cbl.inc -! -! This MODULE contains 2 public Subroutines: -! params_io_assoc_cbl, -! params_io_nullify_cbl -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -USE grid_constants_mod_cbl, ONLY: & - ntype_max, & ! # veg types [13],non-veg=4,ntiles=17 - nsoil_max, & ! # of soil types [9] - nrb, & ! # spectral bANDS VIS/NIR/(LW-not used) - nsl, & ! # soil layers - nscs, & ! # soil carbon stores - nvcs ! # vegetation carbon stores - -PUBLIC :: params_io_data_type -PUBLIC :: params_io_type -PUBLIC :: params_io_assoc_cbl - -PRIVATE -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='PARAMS_IO_MOD_CBL' - -! Vegetation/Soil parameters I/O: -TYPE :: params_io_data_type - - ! Veg parameters I/O: - REAL :: & - vegin_canst1(ntype_max), & - vegin_dleaf(ntype_max), & - vegin_length(ntype_max), & - vegin_width(ntype_max), & - vegin_vcmax(ntype_max), & - vegin_ejmax(ntype_max), & - vegin_hc(ntype_max), & - vegin_xfang(ntype_max), & - vegin_rp20(ntype_max), & - vegin_rpcoef(ntype_max), & - vegin_rs20(ntype_max), & - vegin_wai(ntype_max), & - vegin_rootbeta(ntype_max), & - vegin_shelrb(ntype_max), & - vegin_vegcf(ntype_max), & - vegin_frac4(ntype_max), & - vegin_xalbnir(ntype_max), & - vegin_extkn(ntype_max), & - vegin_tminvj(ntype_max), & - vegin_tmaxvj(ntype_max), & - vegin_vbeta(ntype_max), & - vegin_a1gs(ntype_max), & - vegin_d0gs(ntype_max), & - vegin_alpha(ntype_max), & - vegin_convex(ntype_max), & - vegin_cfrd(ntype_max), & - vegin_gswmin(ntype_max), & - vegin_conkc0(ntype_max), & - vegin_conko0(ntype_max), & - vegin_ekc(ntype_max), & - vegin_eko(ntype_max), & - vegin_g0(ntype_max), & - vegin_g1(ntype_max), & - vegin_zr(ntype_max), & - vegin_clitt(ntype_max), & - vegin_froot(nsl,ntype_max), & - vegin_csoil(nscs,ntype_max), & - vegin_ratecs(nscs,ntype_max), & - vegin_cplant(nvcs,ntype_max), & - vegin_ratecp(nvcs,ntype_max), & - vegin_refl(nrb,ntype_max), & - vegin_taul(nrb,ntype_max) - - ! Soil parameters I/O: - REAL :: & - soilin_silt(nsoil_max), & - soilin_clay(nsoil_max), & - soilin_sand(nsoil_max), & - soilin_swilt(nsoil_max), & - soilin_sfc(nsoil_max), & - soilin_ssat(nsoil_max), & - soilin_bch(nsoil_max), & - soilin_hyds(nsoil_max), & - soilin_sucs(nsoil_max), & - soilin_rhosoil(nsoil_max), & - soilin_css(nsoil_max) - -END TYPE params_io_data_type - -TYPE :: params_io_type - - ! Veg parameters I/O: - REAL, POINTER, PUBLIC :: & - vegin_canst1(:), & - vegin_dleaf(:), & - vegin_length(:), & - vegin_width(:), & - vegin_vcmax(:), & - vegin_ejmax(:), & - vegin_hc(:), & - vegin_xfang(:), & - vegin_rp20(:), & - vegin_rpcoef(:), & - vegin_rs20(:), & - vegin_wai(:), & - vegin_rootbeta(:), & - vegin_shelrb(:), & - vegin_vegcf(:), & - vegin_frac4(:), & - vegin_xalbnir(:), & - vegin_extkn(:), & - vegin_tminvj(:), & - vegin_tmaxvj(:), & - vegin_vbeta(:), & - vegin_a1gs(:), & - vegin_d0gs(:), & - vegin_alpha(:), & - vegin_convex(:), & - vegin_cfrd(:), & - vegin_gswmin(:), & - vegin_conkc0(:), & - vegin_conko0(:), & - vegin_ekc(:), & - vegin_eko(:), & - vegin_g0(:), & - vegin_g1(:), & - vegin_zr(:), & - vegin_clitt(:), & - vegin_froot(:,:), & - vegin_csoil(:,:), & - vegin_ratecs(:,:), & - vegin_cplant(:,:), & - vegin_ratecp(:,:), & - vegin_refl(:,:), & - vegin_taul(:,:) - - ! Soil parameters I/O: - REAL, POINTER, PUBLIC :: & - soilin_silt(:), & - soilin_clay(:), & - soilin_sand(:), & - soilin_swilt(:), & - soilin_sfc(:), & - soilin_ssat(:), & - soilin_bch(:), & - soilin_hyds(:), & - soilin_sucs(:), & - soilin_rhosoil(:), & - soilin_css(:) - -END TYPE params_io_type - -CONTAINS -!============================================================================== -SUBROUTINE params_io_assoc_cbl(pars_io, pars_io_data) - -! Description: -! Associate veg. and soil parameters pointer types - - !No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(params_io_type), INTENT(IN OUT) :: pars_io -TYPE(params_io_data_type), INTENT(IN OUT), TARGET :: pars_io_data -!local:needed by dr_hook -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle -CHARACTER(LEN=*), PARAMETER :: RoutineName='PARAMS_IO_ASSOC_CBL' -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL params_io_nullify_cbl(pars_io) - -! Veg parameters I/O: -pars_io % vegin_canst1 => pars_io_data % vegin_canst1 -pars_io % vegin_dleaf => pars_io_data % vegin_dleaf -pars_io % vegin_length => pars_io_data % vegin_length -pars_io % vegin_width => pars_io_data % vegin_width -pars_io % vegin_vcmax => pars_io_data % vegin_vcmax -pars_io % vegin_ejmax => pars_io_data % vegin_ejmax -pars_io % vegin_hc => pars_io_data % vegin_hc -pars_io % vegin_xfang => pars_io_data % vegin_xfang -pars_io % vegin_rp20 => pars_io_data % vegin_rp20 -pars_io % vegin_rpcoef => pars_io_data % vegin_rpcoef -pars_io % vegin_rs20 => pars_io_data % vegin_rs20 -pars_io % vegin_wai => pars_io_data % vegin_wai -pars_io % vegin_rootbeta => pars_io_data % vegin_rootbeta -pars_io % vegin_shelrb => pars_io_data % vegin_shelrb -pars_io % vegin_vegcf => pars_io_data % vegin_vegcf -pars_io % vegin_frac4 => pars_io_data % vegin_frac4 -pars_io % vegin_xalbnir => pars_io_data % vegin_xalbnir -pars_io % vegin_extkn => pars_io_data % vegin_extkn -pars_io % vegin_tminvj => pars_io_data % vegin_tminvj -pars_io % vegin_tmaxvj => pars_io_data % vegin_tmaxvj -pars_io % vegin_vbeta => pars_io_data % vegin_vbeta -pars_io % vegin_a1gs => pars_io_data % vegin_a1gs -pars_io % vegin_d0gs => pars_io_data % vegin_d0gs -pars_io % vegin_alpha => pars_io_data % vegin_alpha -pars_io % vegin_convex => pars_io_data % vegin_convex -pars_io % vegin_cfrd => pars_io_data % vegin_cfrd -pars_io % vegin_gswmin => pars_io_data % vegin_gswmin -pars_io % vegin_conkc0 => pars_io_data % vegin_conkc0 -pars_io % vegin_conko0 => pars_io_data % vegin_conko0 -pars_io % vegin_ekc => pars_io_data % vegin_ekc -pars_io % vegin_eko => pars_io_data % vegin_eko -pars_io % vegin_g0 => pars_io_data % vegin_g0 -pars_io % vegin_g1 => pars_io_data % vegin_g1 -pars_io % vegin_zr => pars_io_data % vegin_zr -pars_io % vegin_clitt => pars_io_data % vegin_clitt -pars_io % vegin_froot => pars_io_data % vegin_froot -pars_io % vegin_csoil => pars_io_data % vegin_csoil -pars_io % vegin_ratecs => pars_io_data % vegin_ratecs -pars_io % vegin_cplant => pars_io_data % vegin_cplant -pars_io % vegin_ratecp => pars_io_data % vegin_ratecp -pars_io % vegin_refl => pars_io_data % vegin_refl -pars_io % vegin_taul => pars_io_data % vegin_taul - -! Soil params_io_type % parameters I/O: -pars_io % soilin_silt => pars_io_data % soilin_silt -pars_io % soilin_clay => pars_io_data % soilin_clay -pars_io % soilin_sand => pars_io_data % soilin_sand -pars_io % soilin_swilt => pars_io_data % soilin_swilt -pars_io % soilin_sfc => pars_io_data % soilin_sfc -pars_io % soilin_ssat => pars_io_data % soilin_ssat -pars_io % soilin_bch => pars_io_data % soilin_bch -pars_io % soilin_hyds => pars_io_data % soilin_hyds -pars_io % soilin_sucs => pars_io_data % soilin_sucs -pars_io % soilin_rhosoil => pars_io_data % soilin_rhosoil -pars_io % soilin_css => pars_io_data % soilin_css - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) - -RETURN -END SUBROUTINE params_io_assoc_cbl - -SUBROUTINE params_io_nullify_cbl(pars_io) - -! Description: -! Nullify veg. and soil parameters pointer types - -!No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(params_io_type), INTENT(IN OUT) :: pars_io -!local:needed by dr_hook -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle -CHARACTER(LEN=*), PARAMETER :: RoutineName='PARAMS_IO_NULLIFY_CBL' -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -! Veg parameters I/O: -NULLIFY( pars_io%vegin_canst1 ) -NULLIFY( pars_io%vegin_dleaf ) -NULLIFY( pars_io%vegin_length ) -NULLIFY( pars_io%vegin_width ) -NULLIFY( pars_io%vegin_vcmax ) -NULLIFY( pars_io%vegin_ejmax ) -NULLIFY( pars_io%vegin_hc ) -NULLIFY( pars_io%vegin_xfang ) -NULLIFY( pars_io%vegin_rp20 ) -NULLIFY( pars_io%vegin_rpcoef ) -NULLIFY( pars_io%vegin_rs20 ) -NULLIFY( pars_io%vegin_wai ) -NULLIFY( pars_io%vegin_rootbeta ) -NULLIFY( pars_io%vegin_shelrb ) -NULLIFY( pars_io%vegin_vegcf ) -NULLIFY( pars_io%vegin_frac4 ) -NULLIFY( pars_io%vegin_xalbnir ) -NULLIFY( pars_io%vegin_extkn ) -NULLIFY( pars_io%vegin_tminvj ) -NULLIFY( pars_io%vegin_tmaxvj ) -NULLIFY( pars_io%vegin_vbeta ) -NULLIFY( pars_io%vegin_a1gs ) -NULLIFY( pars_io%vegin_d0gs ) -NULLIFY( pars_io%vegin_alpha ) -NULLIFY( pars_io%vegin_convex ) -NULLIFY( pars_io%vegin_cfrd ) -NULLIFY( pars_io%vegin_gswmin ) -NULLIFY( pars_io%vegin_conkc0 ) -NULLIFY( pars_io%vegin_conko0 ) -NULLIFY( pars_io%vegin_ekc ) -NULLIFY( pars_io%vegin_eko ) -NULLIFY( pars_io%vegin_g0 ) -NULLIFY( pars_io%vegin_g1 ) -NULLIFY( pars_io%vegin_zr ) -NULLIFY( pars_io%vegin_clitt ) -NULLIFY( pars_io%vegin_froot ) -NULLIFY( pars_io%vegin_csoil ) -NULLIFY( pars_io%vegin_ratecs ) -NULLIFY( pars_io%vegin_cplant ) -NULLIFY( pars_io%vegin_ratecp ) -NULLIFY( pars_io%vegin_refl ) -NULLIFY( pars_io%vegin_taul ) - -! Soil parameters I/O: -NULLIFY( pars_io%soilin_silt ) -NULLIFY( pars_io%soilin_clay ) -NULLIFY( pars_io%soilin_sand ) -NULLIFY( pars_io%soilin_swilt ) -NULLIFY( pars_io%soilin_sfc ) -NULLIFY( pars_io%soilin_ssat ) -NULLIFY( pars_io%soilin_bch ) -NULLIFY( pars_io%soilin_hyds ) -NULLIFY( pars_io%soilin_sucs ) -NULLIFY( pars_io%soilin_rhosoil ) -NULLIFY( pars_io%soilin_css ) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) - -RETURN -END SUBROUTINE params_io_nullify_cbl - -END MODULE params_io_mod_cbl - - diff --git a/src/coupled/AM3/control/cable/shared/progs_cbl_vars_mod.F90 b/src/coupled/AM3/control/cable/shared/progs_cbl_vars_mod.F90 deleted file mode 100644 index 2dcd3f7d3..000000000 --- a/src/coupled/AM3/control/cable/shared/progs_cbl_vars_mod.F90 +++ /dev/null @@ -1,386 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE progs_cbl_vars_mod - -!------------------------------------------------------------------------------ -! Description: -! Declares/(de)allocates/assigns CABLE prognostic variables -! -! This MODULE is USEd by: -! cable_fields_mod.F90, -! surf_couple_explicit_mod.F90, -! surf_couple_implicit_mod.F90, -! surf_couple_radiation_mod.F90, -! control.F90, -! init_cable_progs.F90, -! init.F90 -! -! This MODULE contains 4 public Subroutines: -! progs_cbl_vars_alloc, -! progs_cbl_vars_dealloc, -! progs_cbl_vars_assoc, -! progs_cbl_vars_nullify -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!------------------------------------------------------------------------------ - -IMPLICIT NONE - -PUBLIC :: progs_cbl_vars_alloc -PUBLIC :: progs_cbl_vars_assoc -PUBLIC :: progs_cbl_vars_data_type -PUBLIC :: progs_cbl_vars_type -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='PROGS_CBL_VARS_MOD' -! Tiled soil prognostics to be initialized from IO -TYPE :: progs_cbl_vars_data_type - - REAL, ALLOCATABLE, PUBLIC :: & - SoilTemp_CABLE(:,:,:), & - SoilMoisture_CABLE(:,:,:), & - FrozenSoilFrac_CABLE(:,:,:), & - SnowDepth_CABLE(:,:,:), & - SnowMass_CABLE(:,:,:), & - SnowTemp_CABLE(:,:,:), & - SnowDensity_CABLE(:,:,:), & - ThreeLayerSnowFlag_CABLE(:,:), & - OneLyrSnowDensity_CABLE(:,:), & - SnowAge_CABLE(:,:), & - snowOsurft(:,:) - -END TYPE progs_cbl_vars_data_type - -TYPE :: progs_cbl_vars_type - - REAL, POINTER, PUBLIC :: & - SoilTemp_CABLE(:,:,:), & - SoilMoisture_CABLE(:,:,:), & - FrozenSoilFrac_CABLE(:,:,:), & - SnowDepth_CABLE(:,:,:), & - SnowMass_CABLE(:,:,:), & - SnowTemp_CABLE(:,:,:), & - SnowDensity_CABLE(:,:,:), & - ThreeLayerSnowFlag_CABLE(:,:), & - OneLyrSnowDensity_CABLE(:,:), & - SnowAge_CABLE(:,:), & - snowOsurft(:,:) -END TYPE progs_cbl_vars_type - -CONTAINS - -!=============================================================================== -SUBROUTINE progs_cbl_vars_alloc(land_pts, nsurft, sm_levels, lsm_id, cable, & - progs_cbl_vars_data ) - -! Description: -! Allocate the CABLE prognostic data variables in the derived type structure - -!Replacements for the argument list -USE grid_constants_mod_cbl, ONLY: nsnl - -!Common Non-science modules -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE jules_print_mgr, ONLY: jules_message, jules_print, PrNorm -USE ereport_mod, ONLY: ereport - -IMPLICIT NONE - -!Arguments -INTEGER, INTENT(IN) :: land_pts, nsurft,sm_levels -INTEGER, INTENT(IN) :: lsm_id, cable - -TYPE(progs_cbl_vars_data_type), INTENT(IN OUT) :: progs_cbl_vars_data - -!----------------------------------------------------------------------- -! Local variables for error trapping -!----------------------------------------------------------------------- -INTEGER :: & - ERROR = 0, & - ! Variable for trapping the error from each - ! individual call to allocate - error_sum = 0, & - - ! Variable to track the sum of all errors - ! resulting from calls to allocate. Hence we - ! know that everything was successful if and - ! only if this is zero at the end - errcode - ! Variable to use in error report - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='PROGS_CBL_VARS_ALLOC' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -! CABLE vars to be initialized via JULES i/o -IF ( lsm_id == cable ) THEN - - ALLOCATE( progs_cbl_vars_data%SoilTemp_CABLE(land_pts, nsurft, sm_levels), & - STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SoilMoisture_CABLE(land_pts, nsurft, & - sm_levels), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%FrozenSoilFrac_CABLE(land_pts, nsurft, & - sm_levels), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowDepth_CABLE(land_pts, nsurft, nsnl), & - STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowMass_CABLE(land_pts,nsurft, nsnl), & - STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowTemp_CABLE(land_pts, nsurft, nsnl), & - STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowDensity_CABLE(land_pts,nsurft,nsnl), & - STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%ThreeLayerSnowFlag_CABLE(land_pts,nsurft), & - STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%OneLyrSnowDensity_CABLE(land_pts,nsurft), & - STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowAge_CABLE(land_pts, nsurft), & - STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%snowOsurft(land_pts, nsurft), STAT = ERROR ) - error_sum = error_sum + ERROR - - !----------------------------------------------------------------------- - ! Write out an error if there was one - !----------------------------------------------------------------------- - IF ( error_sum /= 0 ) & - CALL ereport(RoutineName, errcode, & - "Error allocating CABLE prognostic array") - -ELSE - - ALLOCATE( progs_cbl_vars_data%SoilTemp_CABLE(1, 1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SoilMoisture_CABLE(1, 1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%FrozenSoilFrac_CABLE(1, 1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowDepth_CABLE(1, 1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowMass_CABLE(1,1, 1),STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowTemp_CABLE(1, 1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowDensity_CABLE(1,1,1),STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%ThreeLayerSnowFlag_CABLE(1,1),STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%OneLyrSnowDensity_CABLE(1,1),STAT = ERROR) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%SnowAge_CABLE(1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - ALLOCATE( progs_cbl_vars_data%snowOsurft(1, 1), STAT = ERROR ) - error_sum = error_sum + ERROR - - !----------------------------------------------------------------------- - ! Write out an error if there was one - !----------------------------------------------------------------------- - IF ( error_sum /= 0 ) & - CALL ereport(RoutineName, errcode, & - "Error allocating CABLE prognostic array") - -END IF - -progs_cbl_vars_data%SoilTemp_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SoilMoisture_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%FrozenSoilFrac_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SnowDepth_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SnowMass_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SnowTemp_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SnowDensity_CABLE(:,:,:) = 0.0 -progs_cbl_vars_data%SnowAge_CABLE(:,:) = 0.0 -progs_cbl_vars_data%snowOsurft(:,:) = 0.0 -progs_cbl_vars_data%ThreeLayerSnowFlag_CABLE(:,:) = 0.0 -progs_cbl_vars_data%OneLyrSnowDensity_CABLE(:,:) = 0.0 - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE progs_cbl_vars_alloc - -!=============================================================================== -SUBROUTINE progs_cbl_vars_dealloc(progs_cbl_vars_data ) - -! Description: -! Deallocate the CABLE prognostic data variables in the derived type structure - - !Common Non-science modules -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(progs_cbl_vars_data_type), INTENT(IN OUT) :: progs_cbl_vars_data - -!----------------------------------------------------------------------- -! Local variables -!----------------------------------------------------------------------- -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='PROGS_CBL_VARS_DEALLOC' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - - -! CABLE vars to be initialized via JULES i/o -DEALLOCATE( progs_cbl_vars_data%snowOsurft) -DEALLOCATE( progs_cbl_vars_data%SnowAge_CABLE) -DEALLOCATE( progs_cbl_vars_data%OneLyrSnowDensity_CABLE) -DEALLOCATE( progs_cbl_vars_data%ThreeLayerSnowFlag_CABLE) -DEALLOCATE( progs_cbl_vars_data%SnowDensity_CABLE) -DEALLOCATE( progs_cbl_vars_data%SnowTemp_CABLE) -DEALLOCATE( progs_cbl_vars_data%SnowMass_CABLE) -DEALLOCATE( progs_cbl_vars_data%SnowDepth_CABLE) -DEALLOCATE( progs_cbl_vars_data%FrozenSoilFrac_CABLE) -DEALLOCATE( progs_cbl_vars_data%SoilMoisture_CABLE) -DEALLOCATE( progs_cbl_vars_data%SoilTemp_CABLE) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE progs_cbl_vars_dealloc - -!=============================================================================== -SUBROUTINE progs_cbl_vars_assoc(progs_cbl_vars, progs_cbl_vars_data ) - -! Description: -! Associate the CABLE prognostic pointers in the derived type structure - -!No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs_cbl_vars -TYPE(progs_cbl_vars_data_type), INTENT(IN OUT), TARGET :: progs_cbl_vars_data - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='PROGS_CBL_VARS_ASSOC' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL progs_cbl_vars_nullify(progs_cbl_vars) - -progs_cbl_vars%SoilTemp_CABLE => progs_cbl_vars_data%SoilTemp_CABLE -progs_cbl_vars%SoilMoisture_CABLE => & - progs_cbl_vars_data%SoilMoisture_CABLE -progs_cbl_vars%FrozenSoilFrac_CABLE => & - progs_cbl_vars_data%FrozenSoilFrac_CABLE -progs_cbl_vars%SnowDepth_CABLE => progs_cbl_vars_data%SnowDepth_CABLE -progs_cbl_vars%SnowMass_CABLE => progs_cbl_vars_data%SnowMass_CABLE -progs_cbl_vars%SnowTemp_CABLE => progs_cbl_vars_data%SnowTemp_CABLE -progs_cbl_vars%SnowDensity_CABLE => & - progs_cbl_vars_data%SnowDensity_CABLE -progs_cbl_vars%SnowAge_CABLE => progs_cbl_vars_data%SnowAge_CABLE -progs_cbl_vars%snowOsurft => progs_cbl_vars_data%snowOsurft -progs_cbl_vars%ThreeLayerSnowFlag_CABLE => & - progs_cbl_vars_data%ThreeLayerSnowFlag_CABLE -progs_cbl_vars%OneLyrSnowDensity_CABLE => & - progs_cbl_vars_data%OneLyrSnowDensity_CABLE - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE progs_cbl_vars_assoc - -!=============================================================================== -SUBROUTINE progs_cbl_vars_nullify(progs_cbl_vars) - -! Description: -! Nullify the CABLE prognostic pointers in the derived type structure - - !No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs_cbl_vars - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='PROGS_CBL_VARS_NULLIFY' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -NULLIFY(progs_cbl_vars%SoilTemp_CABLE) -NULLIFY(progs_cbl_vars%SoilMoisture_CABLE) -NULLIFY(progs_cbl_vars%FrozenSoilFrac_CABLE) -NULLIFY(progs_cbl_vars%SnowDepth_CABLE) -NULLIFY(progs_cbl_vars%SnowMass_CABLE) -NULLIFY(progs_cbl_vars%SnowTemp_CABLE) -NULLIFY(progs_cbl_vars%SnowDensity_CABLE) -NULLIFY(progs_cbl_vars%SnowAge_CABLE) -NULLIFY(progs_cbl_vars%snowOsurft) -NULLIFY(progs_cbl_vars%ThreeLayerSnowFlag_CABLE) -NULLIFY(progs_cbl_vars%OneLyrSnowDensity_CABLE) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN - -END SUBROUTINE progs_cbl_vars_nullify - -END MODULE progs_cbl_vars_mod - diff --git a/src/coupled/AM3/control/cable/shared/work_vars_mod_cbl.F90 b/src/coupled/AM3/control/cable/shared/work_vars_mod_cbl.F90 deleted file mode 100644 index c342950ee..000000000 --- a/src/coupled/AM3/control/cable/shared/work_vars_mod_cbl.F90 +++ /dev/null @@ -1,361 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** -MODULE work_vars_mod_cbl - -!------------------------------------------------------------------------------ -! Description: -! Declares/(de)allocates/assigns CABLE "working" variables -! These are vars reqested to be kept across the surf_couple* pathways -! and/or timesteps. Some will be elevated to prognostics, others will be -! removed via rewriting of the algorithm where requested -! -! This MODULE is USEd by: -! cable_fields_mod.F90, -! surf_couple_explicit_mod.F90, -! surf_couple_extra_mod.F90, -! surf_couple_implicit_mod.F90, -! control.F90, -! init_cable_working_vars.F90, -! init.F90 -! -! This MODULE contains 4 public Subroutines: -! alloc_work_vars_cbl, -! dealloc_work_vars_cbl, -! assoc_work_vars_cbl, -! nullify_assoc_work_vars_cbl -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!------------------------------------------------------------------------------ - -USE cable_canopy_type_mod, ONLY: canopy_type -USE cable_canopy_type_mod, ONLY: canopy_data_type -USE cable_air_type_mod, ONLY: air_type -USE cable_air_type_mod, ONLY: air_data_type -USE cable_met_type_mod, ONLY: met_type -USE cable_met_type_mod, ONLY: met_data_type -USE cable_balances_type_mod, ONLY: balances_type -USE cable_balances_type_mod, ONLY: balances_data_type -USE cable_soil_type_mod, ONLY: soil_type -USE cable_soil_type_mod, ONLY: soil_data_type -USE cable_veg_type_mod, ONLY: veg_type -USE cable_veg_type_mod, ONLY: veg_data_type -USE cable_soil_snow_type_mod, ONLY: soil_snow_type -USE cable_soil_snow_type_mod, ONLY: soil_snow_data_type -USE cable_radiation_type_mod, ONLY: radiation_type -USE cable_radiation_type_mod, ONLY: radiation_data_type -USE cable_roughness_type_mod, ONLY: roughness_type -USE cable_roughness_type_mod, ONLY: roughness_data_type -USE cable_climate_type_mod, ONLY: climate_type -USE cable_climate_type_mod, ONLY: climate_data_type -USE cable_bgc_pool_type_mod, ONLY: bgc_pool_type -USE cable_bgc_pool_type_mod, ONLY: bgc_pool_data_type -USE cable_sum_flux_type_mod, ONLY: sum_flux_type -USE cable_sum_flux_type_mod, ONLY: sum_flux_data_type - -IMPLICIT NONE - -PUBLIC :: alloc_work_vars_cbl -PUBLIC :: assoc_work_vars_cbl -PUBLIC :: work_vars_data_type -PUBLIC :: work_vars_type -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='WORK_VARS_MOD_CBL' - -TYPE :: work_vars_data_type - - !fields returned @ hydrology (surf_couple_extra) level of JULES - !computed in CABLE @ implicit (surf_couple_implicit) level - REAL, ALLOCATABLE, PUBLIC :: snow_surft(:,:) - REAL, ALLOCATABLE, PUBLIC :: lying_snow(:) - REAL, ALLOCATABLE, PUBLIC :: surf_roff(:) - REAL, ALLOCATABLE, PUBLIC :: sub_surf_roff(:) - REAL, ALLOCATABLE, PUBLIC :: tot_tfall(:) - REAL, ALLOCATABLE, PUBLIC :: sw_down_ij(:,:,:) - REAL, ALLOCATABLE, PUBLIC :: reducedLAIdue2snow(:) -!check dims -REAL, ALLOCATABLE, PUBLIC :: tot_wb_lake(:) - -END TYPE work_vars_data_type - -TYPE :: work_vars_type - - !fields returned @ hydrology (surf_couple_extra) level of JULES - !computed in CABLE @ implicit (surf_couple_implicit) level - REAL, POINTER, PUBLIC :: snow_surft(:,:) - REAL, POINTER, PUBLIC :: lying_snow(:) - REAL, POINTER, PUBLIC :: surf_roff(:) - REAL, POINTER, PUBLIC :: sub_surf_roff(:) - REAL, POINTER, PUBLIC :: tot_tfall(:) - REAL, POINTER, PUBLIC :: sw_down_ij(:,:,:) - REAL, POINTER, PUBLIC :: reducedLAIdue2snow(:) - - TYPE(canopy_type) :: canopy - TYPE(air_type) :: air - TYPE(met_type) :: met - TYPE(balances_type) :: bal - TYPE(soil_type) :: soil - TYPE(veg_type) :: veg - TYPE(soil_snow_type) :: ssnow - TYPE(radiation_type) :: rad - TYPE(roughness_type) :: rough - TYPE(climate_type) :: climate - TYPE(bgc_pool_type) :: bgc - TYPE(sum_flux_type) :: sum_flux - -END TYPE work_vars_type - -! data arrays need to be declared outside of the work% TYPE -TYPE(canopy_data_type), PUBLIC, TARGET :: canopy_data -TYPE(air_data_type), PUBLIC, TARGET :: air_data -TYPE(met_data_type), PUBLIC, TARGET :: met_data -TYPE(balances_data_type), PUBLIC, TARGET :: bal_data -TYPE(veg_data_type), PUBLIC, TARGET :: veg_data -TYPE(soil_data_type), PUBLIC, TARGET :: soil_data -TYPE(soil_snow_data_type), PUBLIC, TARGET :: soil_snow_data -TYPE(radiation_data_type), PUBLIC, TARGET :: rad_data -TYPE(roughness_data_type), PUBLIC, TARGET :: rough_data -TYPE(climate_data_type), PUBLIC, TARGET :: climate_data -TYPE(bgc_pool_data_type), PUBLIC, TARGET :: bgc_data -TYPE(sum_flux_data_type), PUBLIC, TARGET :: sum_flux_data - -CONTAINS - -!=============================================================================== -SUBROUTINE alloc_work_vars_cbl( row_length, rows, land_pts, nsurft, sm_levels, & - lsm_id, cable, work_data_cbl ) - -! Description: -! Allocate the CABLE work data variables in the derived type structure - -!Replacements for the argument list -USE grid_constants_mod_cbl, ONLY: nsnl - -!Common Non-science modules -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook -USE jules_print_mgr, ONLY: jules_message, jules_print, PrNorm -USE ereport_mod, ONLY: ereport - -IMPLICIT NONE - -!Arguments -INTEGER, INTENT(IN) :: row_length, rows -INTEGER, INTENT(IN) :: land_pts, nsurft,sm_levels -INTEGER, INTENT(IN) :: lsm_id, cable - -TYPE(work_vars_data_type), INTENT(IN OUT) :: work_data_cbl - -!----------------------------------------------------------------------- -! Local variables for error trapping -!----------------------------------------------------------------------- -INTEGER :: & - ERROR = 0, & - ! Variable for trapping the error from each - ! individual call to allocate - error_sum = 0, & - - ! Variable to track the sum of all errors - ! resulting from calls to allocate. Hence we - ! know that everything was successful if and - ! only if this is zero at the end - errcode - ! Variable to use in error report - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='ALLOC_WORK_VARS_CBL' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -! CABLE vars to be initialized -IF ( lsm_id == cable ) THEN - - ALLOCATE( work_data_cbl%snow_surft(land_pts, nsurft), STAT = ERROR ) - ALLOCATE( work_data_cbl%lying_snow(land_pts), STAT = ERROR ) - ALLOCATE( work_data_cbl%surf_roff(land_pts), STAT = ERROR ) - ALLOCATE( work_data_cbl%tot_tfall(land_pts), STAT = ERROR ) - ALLOCATE( work_data_cbl%sub_surf_roff(land_pts), STAT = ERROR ) - !CM3 - ALLOCATE( work_data_cbl%sw_down_ij(row_length, rows,4), STAT = ERROR ) - ALLOCATE( work_data_cbl%reducedLAIdue2snow(land_pts * nsurft), STAT = ERROR ) - !mp=sum(surft_pts) would do it - error_sum = error_sum + ERROR - - !----------------------------------------------------------------------- - ! Write out an error if there was one - !----------------------------------------------------------------------- - IF ( error_sum /= 0 ) & - CALL ereport(RoutineName, errcode, & - "Error allocating CABLE work type") - -ELSE - - ALLOCATE( work_data_cbl%snow_surft(1,1), STAT = ERROR ) - ALLOCATE( work_data_cbl%lying_snow(1), STAT = ERROR ) - ALLOCATE( work_data_cbl%surf_roff(1), STAT = ERROR ) - ALLOCATE( work_data_cbl%tot_tfall(1), STAT = ERROR ) - ALLOCATE( work_data_cbl%sub_surf_roff(1), STAT = ERROR ) - !CM3 - ALLOCATE( work_data_cbl%sw_down_ij(1,1,1), STAT = ERROR ) - error_sum = error_sum + ERROR - - !----------------------------------------------------------------------- - ! Write out an error if there was one - !----------------------------------------------------------------------- - IF ( error_sum /= 0 ) & - CALL ereport(RoutineName, errcode, & - "Error allocating CABLE work type") - -END IF - -work_data_cbl% snow_surft (:,:) = 0.0 -work_data_cbl% lying_snow (:) = 0.0 -work_data_cbl% surf_roff (:) = 0.0 -work_data_cbl% sub_surf_roff (:) = 0.0 -work_data_cbl% tot_tfall (:) = 0.0 -work_data_cbl% sw_down_ij(:,:,:) = 0.0 -work_data_cbl%reducedLAIdue2snow(:) = 0.0 - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE alloc_work_vars_cbl - -!=============================================================================== -SUBROUTINE dealloc_work_vars_cbl(work_data_cbl ) - -! Description: -! Deallocate the CABLE work data variables in the derived type structure - -!Common Non-science modules -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(work_vars_data_type), INTENT(IN OUT) :: work_data_cbl - -!----------------------------------------------------------------------- -! Local variables -!----------------------------------------------------------------------- -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='DEALLOC_WORK_VARS_CBL' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -! CABLE vars to be initialized via JULES i/o -DEALLOCATE( work_data_cbl %snow_surft ) -DEALLOCATE( work_data_cbl %lying_snow ) -DEALLOCATE( work_data_cbl %surf_roff ) -DEALLOCATE( work_data_cbl %sub_surf_roff ) -DEALLOCATE( work_data_cbl %tot_tfall ) -DEALLOCATE( work_data_cbl %sw_down_ij ) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE dealloc_work_vars_cbl - -!=============================================================================== -SUBROUTINE assoc_work_vars_cbl(work_cbl, work_data_cbl ) - -! Description: -! Associate the CABLE work pointers in the derived type structure - -!No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(work_vars_type), INTENT(IN OUT) :: work_cbl -TYPE(work_vars_data_type), INTENT(IN OUT), TARGET :: work_data_cbl - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='ASSOC_WORK_VARS_CBL' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -CALL nullify_assoc_work_vars_cbl(work_cbl) - -work_cbl% snow_surft => work_data_cbl% snow_surft -work_cbl% lying_snow => work_data_cbl% lying_snow -work_cbl% surf_roff => work_data_cbl% surf_roff -work_cbl% sub_surf_roff => work_data_cbl% sub_surf_roff -work_cbl% tot_tfall => work_data_cbl% tot_tfall -work_cbl% sw_down_ij => work_data_cbl% sw_down_ij -work_cbl% reducedLAIdue2snow => work_data_cbl% reducedLAIdue2snow - - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN -END SUBROUTINE assoc_work_vars_cbl - -!=============================================================================== -SUBROUTINE nullify_assoc_work_vars_cbl(work_cbl) - -! Description: -! Nullify the CABLE work pointers in the derived type structure - - !No USE statements other than Dr Hook -USE parkind1, ONLY: jprb, jpim -USE yomhook, ONLY: lhook, dr_hook - -IMPLICIT NONE - -!Arguments -TYPE(work_vars_type), INTENT(IN OUT) :: work_cbl - -INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 -INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 -REAL(KIND=jprb) :: zhook_handle - -CHARACTER(LEN=*), PARAMETER :: RoutineName='NULLIFY_ASSOC_WORK_VARS_CBL' - -!End of header - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) - -NULLIFY( work_cbl% snow_surft ) -NULLIFY( work_cbl% lying_snow ) -NULLIFY( work_cbl% surf_roff ) -NULLIFY( work_cbl% sub_surf_roff ) -NULLIFY( work_cbl% tot_tfall ) -NULLIFY( work_cbl% sw_down_ij ) -NULLIFY( work_cbl% reducedLAIdue2snow ) - -IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) -RETURN - -END SUBROUTINE nullify_assoc_work_vars_cbl - -END MODULE work_vars_mod_cbl - diff --git a/src/coupled/AM3/control/cable/util/activeTile_mask_cbl.F90 b/src/coupled/AM3/control/cable/util/activeTile_mask_cbl.F90 deleted file mode 100644 index f294bf6a0..000000000 --- a/src/coupled/AM3/control/cable/util/activeTile_mask_cbl.F90 +++ /dev/null @@ -1,100 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE init_active_tile_mask_mod - -!------------------------------------------------------------------------------ -! Description: -! Initialises the JULES/CABLE grid array, which aligns JULES grid points -! with CABLE land points -! -! This MODULE is USEd by: -! cable_land_albedo_mod.F90 -! -! This MODULE contains 1 public Subroutine: -! init_active_tile_mask_cbl -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!------------------------------------------------------------------------------ - -IMPLICIT NONE -PUBLIC :: cable_mp -PUBLIC :: init_active_tile_mask_cbl -PRIVATE - -CONTAINS - -SUBROUTINE cable_mp(mp, land_pts, nsurft, tile_frac ) - -! Description: -! Nothing further to add to module description. - -IMPLICIT NONE - -INTEGER, INTENT(OUT) :: mp -INTEGER, INTENT(IN) :: land_pts, nsurft -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) !fraction of each surf type - -!Local vars: -INTEGER :: i, j, k - -k=0 -DO j = 1, nsurft - DO i = 1, land_pts - IF ( tile_frac(i,j) > 0.0 ) THEN - k = k + 1 - END IF - END DO -END DO -mp = k - -RETURN - -END SUBROUTINE cable_mp - - -SUBROUTINE init_active_tile_mask_cbl(l_tile_pts, land_pts, nsurft, tile_frac ) - -! Description: -! Nothing further to add to module description. - -IMPLICIT NONE - -LOGICAL, INTENT(OUT), ALLOCATABLE :: L_tile_pts(:,:) -INTEGER, INTENT(IN) :: land_pts, nsurft -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) !fraction of each surf type - -!Local vars: -INTEGER :: i, j - -! Determine active tiles map -IF ( .NOT. ALLOCATED(l_tile_pts)) ALLOCATE( l_tile_pts(land_pts, nsurft) ) - -l_tile_pts(:,:) = .FALSE. - -DO j = 1, nsurft - DO i = 1, land_pts - IF ( tile_frac(i,j) > 0.0 ) THEN - l_tile_pts(i,j) = .TRUE. - END IF - END DO -END DO - -RETURN - -END SUBROUTINE init_active_tile_mask_cbl - -END MODULE init_active_tile_mask_mod diff --git a/src/coupled/AM3/control/cable/util/cable_jules_links_mod.F90 b/src/coupled/AM3/control/cable/util/cable_jules_links_mod.F90 deleted file mode 100644 index d45b9fd67..000000000 --- a/src/coupled/AM3/control/cable/util/cable_jules_links_mod.F90 +++ /dev/null @@ -1,196 +0,0 @@ -!============================================================================== -! This source code is part of the -! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. -! This work is licensed under the CSIRO Open Source Software License -! Agreement (variation of the BSD / MIT License). -! -! You may not use this file except in compliance with this License. -! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) is located -! in each directory containing CABLE code. -! -! ============================================================================== -! Purpose: Reorders JULES and Unified Model tiled parameters to an order -! appropriate for CABLE and ACCESS-CM2 -! -! assumes input from JULES/UM is on 17 tiles with order: -! (1) dec broadlf, (2) evgn broadlf tropics, (3) evgn broadlf temp, -! (4) dec needlelf, (5) evgn needlelf, (6) grass c3, (7)crop c3, -! (8) pasture c3, (9) grass c4, (10) crop c4, (11) pasture c4, -! (12) dec shrub, (13) evgn shrub, (14) urban, (15) lakes, -! (16) baresoil, (17) permanent ice -! -! mapping at time of writing is: -! -! CABLE egnneedle tile 1 -> ndl_leaf_eg tile 5 JULES -! egnbroad 2 -> brd_leaf_evg_ 0.5*(2+3) [special case] -! decneedle 3 -> ndl_leaf_dec 4 -! decbroad 4 -> brd_leaf_dec 1 -! shrub 5 -> shrub_dec/evg 12 or 13 -! grass c3 6 -> c3_grass 6 -! grass c4 7 -> c4_grass 9 -! tundra 8 -> c3_grass 6 or evg shrub 13 -! crop c3 9 -> c3_crop 7 -! crop_c4 10 -> c4_crop 10 -! wetland 11 -> lake 15 or c3 grass 6 or c4 grass 9 -! empty 12 -> c3_grass 6 -! empty 13 -> c3_grass 6 -! bare soil 14 -> soil 16 -! urban 15 -> urban 14 -! lakes 16 -> lakes 15 -! ice 17 -> ice 17 -! -! CABLE shrub map largely coincides with JULES tile 12 map -! CABLE tundra map largely conincides with JULES tile 13 map -! -! integer switch shrub permits CABLE shrub to take another value -! -! integer switch tundra permits CABLE tundra to take another value -! -! integer switch wetland13/17 permits CABLE wetlands to take another value e.g. -! lake (15), c3 grass (6) or c4 grass (9) (ideally it depends on the process) -! note cannot take a lake value if only veg pfts are available. -! -! Future development needed to permit external/namelist prescription of the -! integer switches for shrub, tundra, wetland13/17 -! -! Called from: ukca routines surfddr, ddepaer & ddepaer_inc_sedi -! -! 2024-04-22 Edits for 27 tile configuration of CABLE -! As of coding - we will assume the current 17 tile ordering applies for tiles -! 1:13 of the 27 tile configuration, with the 4 non-veg tiles appended into -! tiles 24:27. The additional tiles are filled with bare soil values. -! -! The current hard-wired ordering is retained in all other aspects. -! -! =============================================================================== - -MODULE cable_jules_links_mod - - IMPLICIT NONE - - PUBLIC tile_resort_1D, tile_resort_2D - PRIVATE tile_order - -CONTAINS - SUBROUTINE tile_order(ntiles,t_sort) - !sets new order of tiles - - IMPLICIT NONE - - INTEGER, INTENT(IN) :: ntiles !number of tiles - should be 4, 13 or 17 - INTEGER, DIMENSION(ntiles), INTENT(OUT) :: t_sort - - INTEGER :: shrub !switch to specify shrub tile values - INTEGER :: tundra !switch to specify tundra tile values - INTEGER :: wetland13 !switch to specify wetland tile values - INTEGER :: wetland17 !switch to specify wetland tile values - - !edit shrub, tundra and wetland mapping - other tile mapping is hard-wired - shrub = 12 !to be 12 (default) or 13 - tundra = 13 !to be 6, 12 or 13 (default) - wetland13 = 6 !to be 6 (default for 13 tiles) or 9 - wetland17 = 15 !to be 6, 9 or 15 (default for 13 tiles) - - !set the tile order ----------------------------------------------------- - IF (ntiles == 27) THEN !all tiles 27 tile version (CM3) - t_sort = (/5,2,4,1,shrub,6,9,tundra,7,10,wetland17,6,6, & - 16,16,16,16,16,16,16,16,16,16, 16,14,15,17/) - - ELSEIF (ntiles == 17) THEN !all tiles 17 tile version (CM2) - t_sort = (/5,2,4,1,shrub,6,9,tundra,7,10,wetland17,6,6,16,14,15,17/) - - ELSEIF (ntiles == 13) THEN !veg tiles only (17 or 27 tiles) - t_sort = (/5,2,4,1,shrub,6,9,tundra,7,10,wetland13,6,6/) - - ELSEIF (ntiles == 4) THEN !non-veg tiles only - t_sort = (/3,1,2,4/) - - ELSE - !error message - t_sort(:) = MAX(1,MIN(ntiles-1,6)) !catch all as c3 grass, bare soil - ENDIF - - RETURN - END SUBROUTINE - - SUBROUTINE tile_resort_2D(ntiles, nvar, t_params) - !2D array case - - IMPLICIT NONE - - INTEGER, INTENT(IN) :: ntiles !number of tiles - should be 13 or 17 - INTEGER, INTENT(IN) :: nvar !number of variables in array to sort - - REAL, DIMENSION(ntiles,nvar), INTENT (INOUT) :: t_params - !variable array to resort - - INTEGER :: i !looping variable - INTEGER, DIMENSION(:), ALLOCATABLE :: t_sort - !ordering of tiles - REAL, DIMENSION(:,:), ALLOCATABLE :: t_params_new - !resorted variable array - !END header - ALLOCATE(t_sort(ntiles)) - ALLOCATE(t_params_new(ntiles,nvar)) - - !set the tile order ----------------------------------------------------- - CALL tile_order(ntiles, t_sort) - - !reorder ---------------------------------------------------------------- - - DO i = 1,ntiles - t_params_new(i,:) = t_params(t_sort(i),:) - !special cases - IF ((ntiles==13) .or. (ntiles==17) .or. (ntiles==27)) THEN - t_params_new(2,:) = 0.5*(t_params(2,:)+t_params(3,:)) - END IF - END DO - t_params(:,:) = t_params_new(:,:) - - DEALLOCATE(t_sort,t_params_new) - - RETURN - - END SUBROUTINE tile_resort_2D - - SUBROUTINE tile_resort_1D(ntiles, t_params) - !1D array case - - IMPLICIT NONE - - INTEGER, INTENT(IN) :: ntiles !number of tiles - should be 13 or 17 - - REAL, DIMENSION(ntiles), INTENT (INOUT) :: t_params - !variable array to resort - - !working variables - INTEGER :: i !looping variable - INTEGER, DIMENSION(:), ALLOCATABLE :: t_sort - !ordering of tiles - REAL, DIMENSION(:), ALLOCATABLE :: t_params_new - !resorted variable array - !END header - ALLOCATE(t_sort(ntiles)) - ALLOCATE(t_params_new(ntiles)) - - !set the tile order ----------------------------------------------------- - CALL tile_order(ntiles, t_sort) - - !reordering ------------------------------------------------------------- - DO i = 1,ntiles - t_params_new(i) = t_params(t_sort(i)) - !special cases - IF ((ntiles==13) .or. (ntiles==17) .or. (ntiles==27)) THEN - t_params_new(2) = 0.5*(t_params(2)+t_params(3)) - END IF - END DO - t_params(:) = t_params_new(:) - - DEALLOCATE(t_sort,t_params_new) - - RETURN - - END SUBROUTINE tile_resort_1D -END MODULE - - \ No newline at end of file diff --git a/src/coupled/AM3/control/cable/util/cable_model_env_opts.F90 b/src/coupled/AM3/control/cable/util/cable_model_env_opts.F90 deleted file mode 100644 index 64eb45b96..000000000 --- a/src/coupled/AM3/control/cable/util/cable_model_env_opts.F90 +++ /dev/null @@ -1,12 +0,0 @@ -MODULE cable_model_env_opts_mod - -USE missing_data_mod, ONLY: imdi - -IMPLICIT NONE - -INTEGER :: icycle = imdi -LOGICAL :: l_casacnp = .FALSE. - -END MODULE cable_model_env_opts_mod - - diff --git a/src/coupled/AM3/control/cable/util/init/cable_um_init_bgc.F90 b/src/coupled/AM3/control/cable/util/init/cable_um_init_bgc.F90 deleted file mode 100644 index 88256659c..000000000 --- a/src/coupled/AM3/control/cable/util/init/cable_um_init_bgc.F90 +++ /dev/null @@ -1,35 +0,0 @@ -MODULE cable_um_init_bgc_mod - -IMPLICIT NONE -PUBLIC init_bgc_vars - -CONTAINS - -SUBROUTINE init_bgc_vars( pars, bgc, veg ) -USE cable_def_types_mod, ONLY : ncs, ncp -USE cable_def_types_mod, ONLY: bgc_pool_type, veg_parameter_type -USE params_io_mod_cbl, ONLY: params_io_data_type -IMPLICIT NONE -TYPE(params_io_data_type), INTENT(IN) :: pars -TYPE(veg_parameter_type), INTENT(IN) :: veg ! vegetation parameters -TYPE(bgc_pool_type), INTENT(OUT) :: bgc - -INTEGER :: k - -! note that ratecp and ratecs are the same for all veg at the moment. (BP) -DO k=1,ncp - bgc%cplant(:,k) = pars%vegin_cplant(k,veg%iveg) - bgc%ratecp(k) = pars%vegin_ratecp(k,1) -ENDDO -DO k=1,ncs - bgc%csoil(:,k) = pars%vegin_csoil(k,veg%iveg) - bgc%ratecs(k) = pars%vegin_ratecs(k,1) -ENDDO - -END SUBROUTINE init_bgc_vars - -END MODULE cable_um_init_bgc_mod - - - - diff --git a/src/coupled/AM3/control/cable/util/init/cable_um_init_respiration.F90 b/src/coupled/AM3/control/cable/util/init/cable_um_init_respiration.F90 deleted file mode 100644 index 78b2f843c..000000000 --- a/src/coupled/AM3/control/cable/util/init/cable_um_init_respiration.F90 +++ /dev/null @@ -1,44 +0,0 @@ -MODULE cable_um_init_respiration_mod - -IMPLICIT NONE -PUBLIC init_respiration - -CONTAINS - -SUBROUTINE init_respiration( land_pts, ntiles, npft, l_tilepts, & - npp_pft_acc, resp_w_pft_acc, canopy ) -USE cable_def_types_mod, ONLY: canopy_type - -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: ntiles ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -LOGICAL, INTENT(IN) :: L_tilepts(land_pts, ntiles) ! TRUE if active tile -TYPE(canopy_type), INTENT(OUT) :: canopy -REAL, INTENT(IN) :: npp_pft_acc(land_pts, npft) -REAL, INTENT(IN) :: resp_w_pft_acc(land_pts, npft) - -REAL :: fnpp_pft_acc(land_pts, ntiles) -REAL :: fresp_w_pft_acc(land_pts, ntiles) - -! make ntile versions of npp_pft_acc/resp_w_pft_acc -fnpp_pft_acc(:,1:ntiles) = 0.0 -fresp_w_pft_acc(:,1:ntiles) = 0.0 -fnpp_pft_acc(:,1:npft) = npp_pft_acc(:,1:npft) -fresp_w_pft_acc(:,1:npft) = resp_w_pft_acc(:,1:npft) - -!---set soil & plant respiration (now in dim(land_pts,ntiles)) -canopy%frs = PACK(fnpp_pft_acc , l_tilepts) -canopy%frp = PACK(fresp_w_pft_acc, l_tilepts) - -!---convert units to g C m-2 s-1 -canopy%frs = canopy%frs * 1000. -canopy%frp = canopy%frp * 1000. - -RETURN -END SUBROUTINE init_respiration - -END MODULE cable_um_init_respiration_mod - - - - diff --git a/src/coupled/AM3/control/cable/util/init/cable_um_init_sumflux.F90 b/src/coupled/AM3/control/cable/util/init/cable_um_init_sumflux.F90 deleted file mode 100644 index 3eb1f681f..000000000 --- a/src/coupled/AM3/control/cable/util/init/cable_um_init_sumflux.F90 +++ /dev/null @@ -1,35 +0,0 @@ -MODULE cable_um_init_sumflux_mod - -IMPLICIT NONE -PUBLIC init_sumflux_zero - -CONTAINS - -SUBROUTINE init_sumflux_zero( sum_flux ) - -USE cable_def_types_mod, ONLY: sum_flux_type - -IMPLICIT NONE - -TYPE(sum_flux_type), INTENT(OUT) :: sum_flux - -sum_flux%sumpn = 0.0 -sum_flux%sumrp = 0.0 -sum_flux%sumrpw = 0.0 -sum_flux%sumrpr = 0.0 -sum_flux%sumrs = 0.0 -sum_flux%sumrd = 0.0 -sum_flux%dsumpn = 0.0 -sum_flux%dsumrp = 0.0 -sum_flux%dsumrs = 0.0 -sum_flux%dsumrd = 0.0 -sum_flux%sumxrp = 0.0 -sum_flux%sumxrs = 0.0 -RETURN -END SUBROUTINE init_sumflux_zero - -END MODULE cable_um_init_sumflux_mod - - - - diff --git a/src/coupled/AM3/control/cable/util/init/cbl_um_init.F90 b/src/coupled/AM3/control/cable/util/init/cbl_um_init.F90 deleted file mode 100644 index be07a734c..000000000 --- a/src/coupled/AM3/control/cable/util/init/cbl_um_init.F90 +++ /dev/null @@ -1,134 +0,0 @@ -MODULE cbl_um_init_mod - -IMPLICIT NONE -PUBLIC :: init_data -PRIVATE - -CONTAINS - -SUBROUTINE init_data( row_length, rows, land_pts, nsurft, npft, ms, msn, & - soil_zse, mp, nrb, CO2_MMR, tfrz, ICE_SurfaceType, & - ICE_SoilType, land_index, surft_pts, surft_index, & - tile_frac, L_tile_pts, albsoil, bexp, hcon, satcon, & - sathh, smvcst, smvcwt, smvccl, pars, tl_1, snow_tile, & - SoilTemp, SoilMoisture, FrozenSoilFrac, & - OneLyrSnowDensity, SnowAge, ThreeLayerSnowFlag, & - SnowDensity, SnowDepth, SnowTemp, SnowMass, rad_trad, & - met_tk, veg, soil, canopy, ssnow, bgc, sum_flux, & - SurfaceType, SoilType, npp_pft_acc, resp_w_pft_acc ) -! subrs -USE cbl_um_init_veg_mod, ONLY: initialize_veg -USE cbl_um_init_soil_mod, ONLY: initialize_soil -USE cbl_um_init_soilsnow_mod, ONLY: initialize_soilsnow -USE cable_um_init_respiration_mod, ONLY: init_respiration -USE cable_um_init_bgc_mod, ONLY: init_bgc_vars -USE cable_um_init_sumflux_mod, ONLY: init_sumflux_zero -USE cable_pack_mod, ONLY: cable_pack_rr - -! data -USE cable_other_constants_mod, ONLY: LAI_THRESH -USE grid_constants_mod_cbl, ONLY: nsnl, nsoil_max -USE cable_def_types_mod, ONLY: veg_parameter_type, canopy_type, & - soil_parameter_type, soil_snow_type, & - bgc_pool_type, sum_flux_type -USE params_io_mod_cbl, ONLY: params_io_data_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -INTEGER, INTENT(IN) :: ms ! # soil layers -INTEGER, INTENT(IN) :: msn ! # snow layers -REAL, INTENT(IN) :: soil_zse(ms) ! soil layer thicknesses -REAL, INTENT(IN) :: tfrz -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: nrb -INTEGER, INTENT(IN) :: ICE_SoilType -REAL, INTENT(IN) :: co2_mmr -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! cell index of land_pt -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -REAL, INTENT(IN) :: bexp (land_pts, ms) ! b in Campbell equation -REAL, INTENT(IN) :: satcon(land_pts, ms) - ! hydraulic conductivity @ saturation [mm/s] -REAL, INTENT(IN) :: sathh(land_pts, ms) -REAL, INTENT(IN) :: smvcst(land_pts, ms) -REAL, INTENT(IN) :: smvcwt(land_pts, ms) -REAL, INTENT(IN) :: smvccl(land_pts, ms) -REAL, INTENT(IN) :: hcon(land_pts) ! Soil thermal conductivity (W/m/K). -REAL, INTENT(IN) :: albsoil(land_pts) -REAL, INTENT(IN) :: tl_1(row_length,rows) -REAL, INTENT(IN) :: snow_tile(land_pts, nsurft) -REAL, INTENT(IN) :: SoilTemp(land_pts, nsurft, ms) -REAL, INTENT(IN) :: SoilMoisture(land_pts, nsurft, ms) -REAL, INTENT(IN) :: FrozenSoilFrac(land_pts, nsurft, ms) -REAL, INTENT(IN) :: SnowDepth(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: SnowTemp(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: SnowMass(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: SnowDensity(land_pts, nsurft,nsnl) -REAL, INTENT(IN) :: OneLyrSnowDensity(land_pts, nsurft) -REAL, INTENT(IN) :: SnowAge(land_pts, nsurft) -REAL, INTENT(IN) :: npp_pft_acc(land_pts,npft) -REAL, INTENT(IN) :: resp_w_pft_acc(land_pts,npft) -INTEGER, INTENT(IN) :: ThreeLayerSnowFlag(land_pts, nsurft) -INTEGER, INTENT(IN) :: ICE_SurfaceType !CABLE surface tile PFT/nveg -INTEGER, INTENT(IN) :: SurfaceType(mp) ! surface tile PFT/nveg -INTEGER, INTENT(IN) :: SoilType(mp) ! soil type per tile -REAL, INTENT(OUT) :: rad_trad(mp) -REAL, INTENT(OUT) :: met_tk(mp) - -TYPE(canopy_type), INTENT(OUT) :: canopy -TYPE(veg_parameter_type), INTENT(OUT) :: veg ! vegetation parameters -TYPE(soil_parameter_type), INTENT(OUT) :: soil ! soil parameters -TYPE(soil_snow_type), INTENT(OUT) :: ssnow ! -TYPE(params_io_data_type), INTENT(IN) :: pars -TYPE(bgc_pool_type), INTENT(OUT) :: bgc -TYPE(sum_flux_type), INTENT(OUT) :: sum_flux - -! only needed to set rad%otrad on the first timestep. -canopy%ga = 0.0 -canopy%fes_cor = 0.0 -canopy%fhs_cor = 0.0 -canopy%us = 0.01 -canopy%fwsoil = 1.0 - -CALL initialize_veg( SurfaceType, SoilType, mp, ms, & - nrb, npft, nsurft, land_pts, l_tile_pts, ICE_SurfaceType, & - ICE_SoilType, LAI_thresh, soil_zse, surft_pts, & - surft_index, tile_frac, & - veg, soil, pars ) - - -CALL initialize_soil( nsurft, land_pts, ms, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, soiltype, & - bexp, hcon, satcon, sathh, smvcst, smvcwt, & - smvccl, albsoil, soil_zse, pars, soil ) - -! def met_tk on first call as is needed in wetfac calc ( which should be -! replaced with tss) approximating surface temp of lake and to init trad below -CALL cable_pack_rr( met_tk, tl_1, mp, l_tile_pts, row_length, rows, nsurft, & - land_pts, land_index, surft_pts, surft_index ) - -CALL initialize_soilsnow( mp, msn, ms, TFRZ, land_pts, nsurft, row_length, & - rows, ICE_SoilType, l_tile_pts, surft_pts, & - surft_index, smvcst, SoilTemp, FrozenSoilFrac, & - SoilMoisture, snow_tile, OneLyrSnowDensity, SnowAge, & - ThreeLayerSnowFlag, SnowDensity, SnowDepth, & - SnowMass, SnowTemp, soil, ssnow, veg%iveg, met_tk ) - -CALL init_bgc_vars( pars, bgc, veg ) -CALL init_sumflux_zero( sum_flux ) -CALL init_respiration( land_pts, nsurft, npft, L_tile_pts, & - npp_pft_acc, resp_w_pft_acc, canopy ) - -rad_trad = met_tk - -RETURN -END SUBROUTINE init_data - -END MODULE cbl_um_init_mod diff --git a/src/coupled/AM3/control/cable/util/init/cbl_um_init_soil.F90 b/src/coupled/AM3/control/cable/util/init/cbl_um_init_soil.F90 deleted file mode 100644 index 78d5ea2b5..000000000 --- a/src/coupled/AM3/control/cable/util/init/cbl_um_init_soil.F90 +++ /dev/null @@ -1,236 +0,0 @@ -MODULE cbl_um_init_soil_mod - -IMPLICIT NONE -PUBLIC initialize_soil - -CONTAINS - -SUBROUTINE initialize_soil( nsurft, land_pts, ms, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, soiltype, & - bexp, hcon, satcon, sathh, smvcst, smvcwt, & - smvccl, albsoil, dzsoil, pars, soil ) - -! subrs -USE cable_pack_mod, ONLY: pack_landpts2mp_ICE, pack_landpts2mp - -! data -USE cable_def_types_mod, ONLY: soil_parameter_type, r_2 -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_common_module, ONLY : cable_user, gw_params -IMPLICIT NONE - -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: ms -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: nsoil_max -REAL, INTENT(IN) :: dzsoil(ms) ! soil layer thicknesses -INTEGER, INTENT(IN) :: ICE_soiltype -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points on each tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! index of tile points -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) -INTEGER, INTENT(IN) :: SoilType(mp) !CABLE soil type per tile -REAL, INTENT(IN) :: bexp(land_pts) -REAL, INTENT(IN) :: hcon(land_pts) -REAL, INTENT(IN) :: satcon(land_pts) -REAL, INTENT(IN) :: sathh(land_pts) -REAL, INTENT(IN) :: smvcst(land_pts) -REAL, INTENT(IN) :: smvcwt(land_pts) -REAL, INTENT(IN) :: smvccl(land_pts) -REAL, INTENT(IN) :: albsoil(land_pts) - -TYPE(soil_parameter_type), INTENT(INOUT) :: soil ! soil parameters -TYPE(params_io_data_type), INTENT(IN) :: pars - -!__ local vars -INTEGER :: i,j,k -REAL :: hcon_ICE(nsoil_max) -REAL :: soilCnsd_real(mp) -REAL :: sucs_sign_factor, hyds_unit_factor, sucs_min_magnitude -REAL, PARAMETER :: ssat_lo = 0.15 -REAL, PARAMETER :: ssat_hi = 0.65 -REAL, PARAMETER :: rhob_lo = 810.0 -REAL, PARAMETER :: rhob_hi = 2300.0 -REAL, ALLOCATABLE :: znode(:), ssat_bounded(:,:),rho_soil_bulk(:,:) - -! defined in namelist in UM - -soil%zse_vec = spread(dzsoil,1,mp) -soil%watr(:,:) = 0.05 -soil%GWwatr(:) = 0.05 - -! distance between consecutive layer midpoints -soil%zshh(1) = 0.5 * soil%zse(1) -soil%zshh(ms+1) = 0.5 * soil%zse(ms) -soil%zshh(2:ms) = 0.5 * (soil%zse(1:ms-1) + soil%zse(2:ms)) - -! albsoil -> soil%albsoil -CALL pack_landpts2mp( nsurft, land_pts, mp, surft_pts, surft_index, & - L_tile_pts, albsoil, soil%albsoil(:,1) ) - -! bexp -> soil%bch: parameter b in Campbell equation -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, BEXP, SoilType, & - pars%soilin_bch, soil%bch ) - -hcon_ICE(:) = ( pars%soilin_sand(ICE_SoilType) * 0.3 ) & - + ( pars%soilin_clay(ICE_SoilType) * 0.25 ) & - + ( pars%soilin_silt(ICE_SoilType) * 0.265 ) - -! hcon -> soil%cnsd -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, hcon, soiltype, & - hcon_ICE, soilCnsd_real ) - -soil%cnsd = REAL( soilCnsd_real, r_2 ) - -! CABLE soil parameters are in general PACKed from UM spatial fields -! *EXCEPT* for permanent ice points where we overwrite with parametrs read from -! cable_soil_params (pars%) - -! soil%hyds = hydraulic conductivity @saturation is PACKed from satcon[mm/s] -! *EXCEPT* at permanent ice points where we overwrite with parametrs read from -! pars%soilin_hyds[m/s] which are already in correct units. Dividing by 1000 -! soil%hyds is correct for tiles 1:8. Would be 1000* too small, hence *1000 first -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, satcon, soiltype,& - pars%soilin_hyds * 1000.0, soil%hyds ) -soil%hyds = soil%hyds / 1000.0 - -! sathh -> soil%sucs -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, sathh, soiltype, & - pars%soilin_sucs, soil%sucs ) - -! smvcst -> soil%ssat -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, smvcst, soiltype,& - pars%soilin_ssat, soil%ssat ) - -! smvcwt -> soil%swilt -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, smvcwt, soiltype,& - pars%soilin_swilt, soil%swilt ) - -! smvccl -> soil%sfc -CALL pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - surft_pts, surft_index, L_tile_pts, smvccl, soiltype,& - pars%soilin_sfc, soil%sfc ) - -!--- (re)set values for CABLE -soil%ibp2 = NINT(soil%bch) + 2 -soil%i2bp3 = 2 * NINT(soil%bch) + 3 - -soil%ssat = MAX( soil%ssat, soil%sfc + 0.01 ) -soil%sucs = ABS( soil%sucs ) -WHERE( soil%ssat > 0. ) - soil%pwb_min = (soil%swilt / soil%ssat )**soil%ibp2 -END WHERE -sucs_min_magnitude = 106.0/1000.0 -soil%sucs = MAX(sucs_min_magnitude,soil%sucs) -soil%hsbh = soil%hyds * ABS(soil%sucs) * soil%bch - -!from CM2 - BUT i don't think even necessary here. CM2 has a LOT of GW -!stuff here and cable_user%soil_thermal_fix stuff -DO k=1,ms - soil%ssat_vec(:,k) = real(soil%ssat(:) ,r_2) - soil%sucs_vec(:,k) = real(soil%sucs(:) ,r_2) - soil%hyds_vec(:,k) = real(soil%hyds(:) ,r_2) - soil%swilt_vec(:,k) = real(soil%swilt(:) ,r_2) - soil%bch_vec(:,k) = real(soil%bch(:) ,r_2) - soil%sfc_vec(:,k) = real(soil%sfc(:) ,r_2) - soil%rhosoil_vec(:,k) = real(soil%rhosoil(:),r_2) - soil%cnsd_vec(:,k) = real(soil%cnsd ,r_2) - soil%css_vec(:,k) = real(soil%css ,r_2) - soil%watr(:,k) = 0.001_r_2 -END DO - -WHERE (soil%ssat_vec .LE. 0.0 .AND. soil%sfc_vec .GT. 0.0) - soil%ssat_vec = soil%sfc_vec + 0.05 -END WHERE - -! review:: good chance we want some of this is CM3 -!jhan!IF (cable_user%soil_thermal_fix) THEN -!jhan! -!jhan!if (allocated(ssat_bounded)) deallocate(ssat_bounded) -!jhan!if (allocated(rho_soil_bulk)) deallocate(rho_soil_bulk) -!jhan! -!jhan!allocate(ssat_bounded(size(soil%ssat_vec,dim=1),& -!jhan! size(soil%ssat_vec,dim=2) ) ) -!jhan! -!jhan!ssat_bounded(:,:) = min( ssat_hi, max(ssat_lo, & -!jhan! soil%ssat_vec(:,:) ) ) -!jhan! -!jhan!allocate(rho_soil_bulk(size(soil%rhosoil_vec,dim=1),& -!jhan! size(soil%rhosoil_vec,dim=2) ) ) -!jhan! -!jhan!rho_soil_bulk(:,:) = min(rhob_hi, max(rhob_lo , & -!jhan! (2700.0*(1.0 - ssat_bounded(:,:)) ) ) ) -!jhan! -!jhan! -!jhan!do k=1,ms -!jhan! do i=1,mp -!jhan! -!jhan! -!jhan! if (soil%isoilm(i) .ne. 9) then -!jhan! -!jhan! soil%rhosoil_vec(i,k) = 2700.0 -!jhan! -!jhan! soil%cnsd_vec(i,k) = ( (0.135*(1.0-ssat_bounded(i,k))) +& -!jhan! (64.7/rho_soil_bulk(i,k)) ) / & -!jhan! (1.0 - 0.947*(1.0-ssat_bounded(i,k))) -!jhan! -!jhan! end if -!jhan! -!jhan! end do -!jhan!end do -!jhan! -!jhan!k=1 -!jhan!do i=1,mp -!jhan! if (soil%isoilm(i) .ne. 9) then -!jhan! soil%rhosoil(i) = soil%rhosoil_vec(i,1) -!jhan! soil%cnsd(i) = soil%cnsd_vec(i,1) -!jhan! end if -!jhan!end do -!jhan! -!jhan! if (allocated(ssat_bounded)) deallocate(ssat_bounded) -!jhan! if (allocated(rho_soil_bulk)) deallocate(rho_soil_bulk) -!jhan! -!jhan!END IF -!jhan! -!jhan!!node depths -!jhan!IF (allocated(znode)) deallocate(znode) -!jhan!allocate(znode(ms)) -!jhan! -!jhan!znode(1) = soil%zshh(1) -!jhan!do k=2,ms -!jhan! znode(k) = znode(k-1) * 0.5*(soil%zse(k-1)+soil%zse(k)) -!jhan!end do -!jhan! -!jhan!IF (cable_user%gw_model) THEN -!jhan! -!jhan! DO k=1,ms -!jhan! -!jhan! do i=1,mp !from reversing pedotransfer functions -!jhan! !,ay cause io issues because not passed into um -!jhan! -!jhan! if (soil%isoilm(i) .ne. 9) then -!jhan! -!jhan! soil%hyds_vec(i,k) = soil%hyds_vec(i,k) * & !change in hyds -!jhan! exp(-gw_params%hkrz*( znode(k)-gw_params%zdepth) ) -!jhan! -!jhan! end if -!jhan! -!jhan! -!jhan! end do -!jhan! end do -!jhan! -!jhan! k=1 -!jhan! soil%hyds(:) = soil%hyds_vec(:,k) -!jhan! -!jhan!END IF - -RETURN -END SUBROUTINE initialize_soil - -END MODULE cbl_um_init_soil_mod diff --git a/src/coupled/AM3/control/cable/util/init/cbl_um_init_soilsnow.F90 b/src/coupled/AM3/control/cable/util/init/cbl_um_init_soilsnow.F90 deleted file mode 100644 index c199527ca..000000000 --- a/src/coupled/AM3/control/cable/util/init/cbl_um_init_soilsnow.F90 +++ /dev/null @@ -1,157 +0,0 @@ -MODULE cbl_um_init_soilsnow_mod - -IMPLICIT NONE - -CONTAINS - -SUBROUTINE initialize_soilsnow( mp, msn, ms, TFRZ, land_pts, nsurft, & - row_length, rows, ICE_SoilType,l_surft_pts, & - surft_pts, surft_index, smvcst, tsoil_tile, & - sthf_tile, smcl_tile, snow_tile, snow_rho1l, & - snow_age, isnow_flg3l, snow_rho3l, & - snow_depth3l, snow_mass3l, snow_tmp3l, soil, & - ssnow, veg_iveg, met_tk ) - -! subrs -USE cable_init_wetfac_mod, ONLY: initialize_wetfac - -! data -USE cable_def_types_mod, ONLY : r_2 -USE cable_def_types_mod, ONLY: soil_parameter_type, veg_parameter_type -USE cable_def_types_mod, ONLY: met_type, soil_snow_type -USE cable_phys_constants_mod, ONLY: density_ice, density_liq - -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: ms ! # soil layers -INTEGER, INTENT(IN) :: msn ! # snow layers -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: ICE_SoilType ! ice soil type index -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -LOGICAL, INTENT(IN) :: l_surft_pts(land_pts, nsurft) -REAL, INTENT(IN) :: smvcst(land_pts) -REAL, INTENT(IN) :: sthf_tile(land_pts, nsurft, ms) -REAL, INTENT(IN) :: smcl_tile(land_pts, nsurft, ms) -REAL, INTENT(IN) :: tsoil_tile(land_pts, nsurft, ms) -REAL, INTENT(IN) :: snow_rho1l(land_pts, nsurft) -REAL, INTENT(IN) :: snow_tile(land_pts, nsurft) -REAL, INTENT(IN) :: snow_age(land_pts, nsurft) -REAL, INTENT(IN) :: snow_rho3l(land_pts, nsurft, msn) -REAL, INTENT(IN) :: snow_depth3l(land_pts, nsurft, msn) -REAL, INTENT(IN) :: snow_mass3l(land_pts, nsurft, msn) -REAL, INTENT(IN) :: snow_tmp3l(land_pts, nsurft, msn) -INTEGER, INTENT(IN) :: isnow_flg3l(land_pts, nsurft) -REAL, INTENT(IN) :: TFRZ -INTEGER, INTENT(IN) :: veg_iveg(mp) -REAL, INTENT(IN) :: met_tk(mp) - -TYPE(soil_parameter_type), INTENT(IN) :: soil ! soil parameters -TYPE(soil_snow_type), INTENT(OUT) :: ssnow ! - -!local vars -INTEGER :: i,j,k,L,n -REAL :: zsetot -REAL :: ice_vol_tmp(land_pts, nsurft, ms) -REAL :: wbtot_mp(mp, ms) -REAL :: wbice_mp(mp, ms) - -ssnow%pudsto = 0.0 -ssnow%pudsmx = 0.0 -ssnow%wbtot = 0.0 -ssnow%totwblake = 0.0 ! wb_lake integrated over river timestep -ssnow%tggav = 0.0 -ssnow%qhz = 0.0 -ssnow%qhlev = 0.0 -ssnow%qrecharge = 0.0 -ssnow%rtevap_sat = 0.0 -ssnow%rtevap_unsat = 0.0 - -! identify module parameters here and recast (NOT ssnow% state variables) -ssnow%t_snwlr = 0.05 -ssnow%rtsoil = 50.0 -ssnow%satfrac = 0.5 -ssnow%wtd = 1.0 - -ssnow%snowd = PACK( snow_tile, l_surft_pts ) -ssnow%snage = PACK( snow_age, l_surft_pts ) -ssnow%ssdnn = PACK( snow_rho1l, l_surft_pts ) -ssnow%isflag = PACK( isnow_flg3L, l_surft_pts ) -ssnow%ssdnn = PACK( snow_rho1l, l_surft_pts ) -ssnow%isflag = PACK( isnow_flg3l, l_surft_pts ) - -! over snow layers -DO j=1, msn - ssnow%sdepth(:,j)= PACK( snow_depth3l(:,:,j), l_surft_pts ) - ssnow%smass(:,j) = PACK( snow_mass3l(:,:,j), l_surft_pts ) - ssnow%ssdn(:,j) = PACK( snow_rho3l(:,:,j), l_surft_pts ) - ssnow%tggsn(:,j) = PACK( snow_tmp3l(:,:,j), l_surft_pts ) -ENDDO - -! over soil layers -DO j=1, ms - ssnow%tgg(:,j) = PACK( tsoil_tile(:,:,j), l_surft_pts ) -ENDDO - -ssnow%osnowd = ssnow%snowd - -zsetot = sum(soil%zse) -DO k = 1, ms - ssnow%tggav = ssnow%tggav + soil%zse(k)*ssnow%tgg(:,k)/zsetot -END DO - -ice_vol_tmp(:,:,:) = 0.0 -DO n=1,nsurft - DO k=1,surft_pts(n) - i = surft_index(k,n) - DO j = 1, ms - ice_vol_tmp(i,n,j) = sthf_tile(i,n,j) * smvcst(i) - ENDDO ! J - ENDDO -ENDDO - -DO j = 1, ms - !liq volume from (tot_mass - ice_mass) / (dz*rho_liq) - wbtot_mp(:,j) = PACK( smcl_tile(:,:,j), l_surft_pts ) - - ssnow%wbice(:,J) = PACK( ice_vol_tmp(:,:,j), l_surft_pts ) - ssnow%wbice(:,J) = MAX ( 0.0 , ssnow%wbice(:,j) ) - wbice_mp(:,j) = ssnow%wbice(:,j) * ( soil%zse(j) * density_ice ) - - ssnow%wbliq(:,j) = ( wbtot_mp(:,j) - wbice_mp(:,j) ) / ( soil%zse(j) * density_liq ) - ssnow%wb(:,j) = ssnow%wbice(:,j) + ssnow%wbliq(:,j) -END DO - -! wetfac initialized here as used to init owetfac on firstimestep in cbm -! add to startdump? includes Temporay fix for accounting for reduction of -! soil evaporation due to freezing. Also includes specific lakes case -! Prevents divide by zero at glaciated points where both wb and wbice=0. -CALL initialize_wetfac( mp, ssnow%wetfac, soil%swilt, soil%sfc, & - ssnow%wb(:,1), ssnow%wbice(:,1), ssnow%snowd, & - veg_iveg, met_tk, tfrz ) - -! initialized here on first call -ssnow%tss=(1-ssnow%isflag)*ssnow%tgg(:,1) + ssnow%isflag*ssnow%tggsn(:,1) - -!jhan: do we want to do this before %owetfac is set -DO J = 1, ms - !should be removed!!!!!!!! This cannot conserve if there are any - !dynamics - WHERE( soil%isoilm == ICE_SoilType) - ssnow%wb(:,j) = 0.95 * soil%ssat - ssnow%wbice(:,j) = 0.85 * ssnow%wb(:,j) - ENDWHERE - - !no not force rho_water==rho_ice==1000.0 - ssnow%wbtot = ssnow%wbtot + soil%zse(j) * & - ( ssnow%wbliq(:,j) * density_liq + & - ssnow%wbice(:,j) * density_ice ) -ENDDO - -RETURN -END SUBROUTINE initialize_soilsnow - -END MODULE cbl_um_init_soilsnow_mod - diff --git a/src/coupled/AM3/control/cable/util/init/cbl_um_init_veg.F90 b/src/coupled/AM3/control/cable/util/init/cbl_um_init_veg.F90 deleted file mode 100644 index fe1fe67b9..000000000 --- a/src/coupled/AM3/control/cable/util/init/cbl_um_init_veg.F90 +++ /dev/null @@ -1,71 +0,0 @@ -MODULE cbl_um_init_veg_mod - -IMPLICIT NONE - -PUBLIC initialize_veg - -CONTAINS - -SUBROUTINE initialize_veg( SurfaceType, SoilType, mp,& - ms, nrb, npft, nsurft, land_pts, l_tile_pts, & - ICE_SurfaceType, ICE_SoilType, LAI_thresh, & - soil_zse, surft_pts, surft_index, tile_frac, & - veg, soil, pars ) - -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_def_types_mod, ONLY: veg_parameter_type -USE cable_def_types_mod, ONLY: soil_parameter_type, r_2 - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: ms -INTEGER, INTENT(IN) :: nrb -INTEGER, INTENT(IN) :: nsurft -INTEGER, INTENT(IN) :: npft -INTEGER, INTENT(IN) :: land_pts -INTEGER, INTENT(IN) :: ICE_SurfaceType ! index ICE surface type -INTEGER, INTENT(IN) :: ICE_SoilType ! index soil type -REAL, INTENT(IN) :: lai_thresh -REAL, INTENT(IN) :: soil_zse(ms) ! soil depth per layer -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) - -INTEGER, INTENT(IN) :: SurfaceType(mp) ! surface tile PFT/nveg -INTEGER, INTENT(IN) :: SoilType(mp) ! soil type per tile - -TYPE(veg_parameter_type), INTENT(OUT) :: veg ! vegetation parameters -TYPE(soil_parameter_type), INTENT(OUT) :: soil ! soil parameters -TYPE(params_io_data_type), INTENT(IN) :: pars - -! local vars -INTEGER :: i -REAL :: totdepth - -veg%meth = 1 ! review !should be namelist config if even used -veg%ejmax = 2.0 * veg%vcmax -veg%gamma = 3.e-2 ! for Haverd2013 switch ! offline init _parameters -veg%F10 = 0.85 ! offline set init _parameters - -! calculate veg%froot from using rootbeta and soil depth -! (Jackson et al. 1996, Oceologica, 108:389-411) -totdepth = 0.0 -DO i = 1, ms-1 - totdepth = totdepth + soil_zse(i) * 100.0 ! unit in centimetres - veg%froot(:, i) = MIN( 1.0_r_2, 1.0-veg%rootbeta(:)**totdepth ) -END DO -veg%froot(:, ms) = 1.0 - veg%froot(:, ms-1) -DO i = ms-1, 2, -1 - veg%froot(:, i) = veg%froot(:, i)-veg%froot(:,i-1) -END DO - -RETURN -END SUBROUTINE initialize_veg - -END MODULE cbl_um_init_veg_mod - - - - diff --git a/src/coupled/AM3/control/cable/util/map_paramaters_cbl.F90 b/src/coupled/AM3/control/cable/util/map_paramaters_cbl.F90 deleted file mode 100644 index 2f7219516..000000000 --- a/src/coupled/AM3/control/cable/util/map_paramaters_cbl.F90 +++ /dev/null @@ -1,230 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE map_cable_parms_mod - -!------------------------------------------------------------------------------ -! Description: -! Initialises CABLE parameter variables from values read in namelist -! -! This MODULE is USEd in: -! cable_land_albedo_mod_cbl.F90 -! -! This MODULE contains 1 public Subroutine: -! map_cable_parms_rad -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -!------------------------------------------------------------------------------ - -IMPLICIT NONE - -PUBLIC map_cable_parms - -CONTAINS - -SUBROUTINE map_cable_parms( mp, ms, nrb, land_pts, nsurft, l_tile_pts, & - ICE_SurfaceType, ICE_SoilType, soil_zse, veg, & - soil, pars, tile_frac ) - -! Description: -! Nothing further to add to the module description. - -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_def_types_mod, ONLY: veg_parameter_type -USE cable_def_types_mod, ONLY: soil_parameter_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: ms -INTEGER, INTENT(IN) :: nrb -INTEGER, INTENT(IN) :: nsurft -INTEGER, INTENT(IN) :: land_pts -INTEGER, INTENT(IN) :: ICE_SurfaceType !index ICE surface type -INTEGER, INTENT(IN) :: ICE_SoilType !index soil type -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts,nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: soil_zse(ms) ! soil depth per layer -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) - -TYPE(veg_parameter_type), INTENT(OUT) :: veg ! vegetation parameters -TYPE(soil_parameter_type), INTENT(OUT) :: soil ! soil parameters -TYPE(params_io_data_type), INTENT(IN) :: pars - - -!local vars -INTEGER :: JSurfaceTypeID(land_pts,nsurft) -INTEGER :: i, j, h - -CALL DefinePatchType( veg%iveg, soil%isoilm, mp, land_pts, nsurft, & - ICE_SurfaceType, ICE_SoilType, tile_frac, L_tile_pts ) - -CALL init_ALLveg( veg%iveg, mp, ms, nrb, veg, pars ) - -CALL init_ALLsoil( soil%isoilm, mp, ms, soil_zse, soil, pars ) - -RETURN -END SUBROUTINE map_cable_parms - -SUBROUTINE DefinePatchType( SurfaceType, SoilType, mp, land_pts, nsurft, & - ICE_SurfaceType, ICE_SoilType, tile_frac, L_tile_pts) - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(OUT) :: SurfaceType(mp) !CABLE surface tile PFT/nveg -INTEGER, INTENT(OUT) :: SoilType(mp) !CABLE soil type per tile - -INTEGER, INTENT(IN) :: nsurft -INTEGER, INTENT(IN) :: land_pts -INTEGER, INTENT(IN) :: ICE_SurfaceType ! index ICE surface type -INTEGER, INTENT(IN) :: ICE_SoilType ! index soil type -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts,nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: tile_frac(land_pts,nsurft) - -!local vars -INTEGER :: JSurfaceTypeID(land_pts,nsurft) -INTEGER :: i, j - -!local var to pack surface type: -JSurfaceTypeID = 0 -DO j = 1, land_pts - DO i = 1, nsurft - IF ( tile_frac(j,i) > 0 ) JSurfaceTypeID(j,i) = i - END DO -END DO - -SurfaceType = 0 -SurfaceType = PACK( JSurfaceTypeID, L_tile_pts) - -SoilType(:)=2 -DO j=1,mp - IF (SurfaceType(j) == ICE_SurfaceType) THEN - SoilType(j)= ICE_SoilType - END IF -END DO - -END SUBROUTINE DefinePatchType - -SUBROUTINE init_ALLveg( SurfaceType, mp, ms, nrb, veg, pars ) - -! Description: Map per PFT parameters onto CABLE vectors of length mp -! Note: Canopy height (%hc) & LAI (%vlai) are clobbered by -! range limited UM/JULES spatial fields in limit_HGT_LAI() - -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_def_types_mod, ONLY: veg_parameter_type, r_2 - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: SurfaceType(mp) ! CABLE surface tile PFT/nveg -INTEGER, INTENT(IN) :: ms -INTEGER, INTENT(IN) :: nrb - -TYPE(veg_parameter_type), INTENT(OUT) :: veg ! vegetation parameters -TYPE(params_io_data_type), INTENT(IN) :: pars - -!local vars -INTEGER :: i, h - -DO h = 1, mp ! over each patch in current grid - - veg%frac4(h) = pars%vegin_frac4(SurfaceType(h)) - veg%taul(h,1) = pars%vegin_taul(1,SurfaceType(h)) - veg%taul(h,2) = pars%vegin_taul(2,SurfaceType(h)) - veg%refl(h,1) = pars%vegin_refl(1,SurfaceType(h)) - veg%refl(h,2) = pars%vegin_refl(2,SurfaceType(h)) - veg%canst1(h) = pars%vegin_canst1(SurfaceType(h)) - veg%dleaf(h) = pars%vegin_dleaf(SurfaceType(h)) - veg%vcmax(h) = pars%vegin_vcmax(SurfaceType(h)) - veg%ejmax(h) = pars%vegin_ejmax(SurfaceType(h)) - veg%hc(h) = pars%vegin_hc(SurfaceType(h)) - veg%xfang(h) = pars%vegin_xfang(SurfaceType(h)) - veg%vbeta(h) = pars%vegin_vbeta(SurfaceType(h)) - veg%xalbnir(h) = pars%vegin_xalbnir(SurfaceType(h)) - veg%rp20(h) = pars%vegin_rp20(SurfaceType(h)) - veg%rpcoef(h) = pars%vegin_rpcoef(SurfaceType(h)) - veg%rs20(h) = pars%vegin_rs20(SurfaceType(h)) - veg%shelrb(h) = pars%vegin_shelrb(SurfaceType(h)) - veg%wai(h) = pars%vegin_wai(SurfaceType(h)) - veg%a1gs(h) = pars%vegin_a1gs(SurfaceType(h)) - veg%d0gs(h) = pars%vegin_d0gs(SurfaceType(h)) - veg%vegcf(h) = pars%vegin_vegcf(SurfaceType(h)) - veg%extkn(h) = pars%vegin_extkn(SurfaceType(h)) - veg%tminvj(h) = pars%vegin_tminvj(SurfaceType(h)) - veg%tmaxvj(h) = pars%vegin_tmaxvj(SurfaceType(h)) - veg%g0(h) = pars%vegin_g0(SurfaceType(h)) ! Ticket #56 - veg%g1(h) = pars%vegin_g1(SurfaceType(h)) ! Ticket #56 - veg%a1gs(h) = pars%vegin_a1gs(SurfaceType(h)) - veg%d0gs(h) = pars%vegin_d0gs(SurfaceType(h)) - veg%alpha(h) = pars%vegin_alpha(SurfaceType(h)) - veg%convex(h) = pars%vegin_convex(SurfaceType(h)) - veg%cfrd(h) = pars%vegin_cfrd(SurfaceType(h)) - veg%gswmin(h) = pars%vegin_gswmin(SurfaceType(h)) - veg%conkc0(h) = pars%vegin_conkc0(SurfaceType(h)) - veg%conko0(h) = pars%vegin_conko0(SurfaceType(h)) - veg%ekc(h) = pars%vegin_ekc(SurfaceType(h)) - veg%eko(h) = pars%vegin_eko(SurfaceType(h)) - veg%rootbeta(h) = pars%vegin_rootbeta(SurfaceType(h)) - veg%zr(h) = pars%vegin_zr(SurfaceType(h)) - veg%clitt(h) = pars%vegin_clitt(SurfaceType(h)) - -END DO ! over each veg patch in land point - -RETURN -END SUBROUTINE init_ALLveg - -SUBROUTINE init_ALLsoil( SoilType, mp, ms, soil_zse, soil, pars ) - -! Description: UM/JULES spatial fields are used later in initialize_soil() to -! define soil properties. However note these are per landpoint as -! JULES doesn't have soil per tile. We use PFT=ICE to define -! Soil=ICE and use values from here. Also, there is no soil density -! field in the UM, we effectively use density @ soil%isoilm=2 - -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_def_types_mod, ONLY: soil_parameter_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: ms -INTEGER, INTENT(IN) :: SoilType(mp) !CABLE soil type per tile -REAL, INTENT(IN) :: soil_zse(ms) ! soil depth per layer - -TYPE(soil_parameter_type), INTENT(OUT) :: soil ! vegetation parameters -TYPE(params_io_data_type), INTENT(IN) :: pars - -!local vars -INTEGER :: h - -soil%zse(:) = soil_zse(:) - -DO h = 1, mp ! over each patch in current grid - - soil%swilt(h) = pars%soilin_swilt(SoilType(h)) - soil%sfc(h) = pars%soilin_sfc(SoilType(h)) - soil%ssat(h) = pars%soilin_ssat(SoilType(h)) - soil%bch(h) = pars%soilin_bch(SoilType(h)) - soil%hyds(h) = pars%soilin_hyds(SoilType(h)) - soil%sucs(h) = pars%soilin_sucs(SoilType(h)) - soil%rhosoil(h) = pars%soilin_rhosoil(SoilType(h)) - soil%css(h) = pars%soilin_css(SoilType(h)) - soil%silt(h) = pars%soilin_silt(SoilType(h)) - soil%clay(h) = pars%soilin_clay(SoilType(h)) - soil%sand(h) = pars%soilin_sand(SoilType(h)) - -END DO - -END SUBROUTINE init_ALLsoil - -END MODULE map_cable_parms_mod diff --git a/src/coupled/AM3/control/cable/util/pack_mod_cbl.F90 b/src/coupled/AM3/control/cable/util/pack_mod_cbl.F90 deleted file mode 100644 index eec8c407f..000000000 --- a/src/coupled/AM3/control/cable/util/pack_mod_cbl.F90 +++ /dev/null @@ -1,164 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE cable_pack_mod - -!----------------------------------------------------------------------------- -! Description: -! JULES met forcing vars needed by CABLE commonly have JULES dimensions -! (row_length,rows), which are no good for CABLE. These have to be -! re-packed in a single vector of active tiles. Hence we use -! conditional "mask" l_tile_pts(land_pts,ntiles) which is .true. -! if the land point is/has an active tile. A packing routine for -! land_point dimensioned JULES fields is to be included as required on the -! subsequent (e.g. explicit) CALLs to CABLE -! -! This MODULE is USEd by: -! cable_land_albedo_mod.F90 -! -! This MODULE contains 1 public Subroutine: -! cable_pack_rr, -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -IMPLICIT NONE -PUBLIC :: cable_pack_rr, pack_landpts2mp_ICE, pack_landpts2mp -PRIVATE - -CONTAINS - -SUBROUTINE cable_pack_rr( cable_var, jules_var, mp, l_tile_pts, row_length, & - rows, ntype, land_pts, land_index, surft_pts, & - surft_index ) - -! Description: -! Nothing further to add to module description. - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp, row_length, rows, ntype, land_pts -REAL, INTENT(OUT) :: cable_var(mp) -LOGICAL, INTENT(IN) :: l_tile_pts(land_pts, ntype) -INTEGER, INTENT(IN) :: land_index(land_pts) !Index in (x,y) array -INTEGER, INTENT(IN) :: surft_pts(ntype) !# land points per PFT -INTEGER, INTENT(IN) :: surft_index(land_pts,ntype) !Index in land_pts array -REAL, INTENT(IN) :: jules_var(row_length, rows) -!local vars -REAL :: fvar(land_pts, ntype) -INTEGER :: n, k, l, j, i - -fvar(:, :) = 0.0 -DO n = 1, ntype - ! loop over number of points per tile - DO k = 1, surft_pts(n) - l = surft_index(k, n) - j = (land_index(l) - 1) / row_length + 1 - i = land_index(l) - (j-1) * row_length - fvar(l, n) = jules_var(i, j) - END DO -END DO -cable_var = PACK(fvar, l_tile_pts) - -RETURN -END SUBROUTINE cable_pack_rr - -!--- UM met forcing vars needed by CABLE which have UM dimensions -!---(land_points)[_lp], which is no good to cable. These have to be -!--- re-packed in a single vector of active tiles. Hence we use -!--- conditional "mask" l_tile_pts(land_pts,ntiles) which is .true. -!--- if the land point is/has an active tile -SUBROUTINE pack_landpts2mp_ICE( nsurft, land_pts, mp, nsoil_max, ICE_soiltype, & - tile_pts, tile_index, L_tile_pts, umvar, & - soiltype, ICE_value, cablevar ) - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: nsurft -INTEGER, INTENT(IN) :: land_pts -INTEGER, INTENT(IN) :: mp -INTEGER, INTENT(IN) :: nsoil_max -INTEGER, INTENT(IN) :: ICE_soiltype -INTEGER, INTENT(IN) :: soiltype(mp) -INTEGER, INTENT(IN) :: tile_pts(nsurft) -INTEGER, INTENT(IN) :: tile_index(land_pts, nsurft) -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) -REAL, INTENT(IN) :: umvar(land_pts) -REAL, INTENT(IN) :: ICE_value(nsoil_max) -REAL, INTENT(INOUT) :: cablevar(mp) -!local vars -REAL :: fvar(land_pts, nsurft) -INTEGER :: n,k,l,i - -fvar(:,:) = 0.0 -DO n=1, nsurft - - ! loop over number of points per nth tile - DO k=1,tile_pts(n) - ! land pt index of point - L = tile_index(k,n) - ! at this point fvar=umvar, ELSE=0.0 - fvar(l,n) = umvar(l) - ENDDO - -ENDDO - -cablevar = PACK(fvar,L_tile_pts) - -DO i=1,mp - - IF(soiltype(i)==ICE_soiltype) THEN - cablevar(i) = ICE_value(ICE_soiltype) - END IF - -ENDDO - -END SUBROUTINE pack_landpts2mp_ICE - -SUBROUTINE pack_landpts2mp( nsurft, land_pts, mp, tile_pts, tile_index, & - L_tile_pts, umvar, cablevar ) - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: nsurft -INTEGER, INTENT(IN) :: land_pts -INTEGER, INTENT(IN) :: mp -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) -INTEGER, INTENT(IN) :: tile_pts(nsurft) -INTEGER, INTENT(IN) :: tile_index(land_pts, nsurft) -REAL, INTENT(IN) :: umvar(land_pts) -REAL, INTENT(INOUT) :: cablevar(mp) -!local vars -REAL :: fvar(land_pts, nsurft) -INTEGER :: n,k,l - -fvar(:,:) = 0.0 -DO n=1, nsurft - ! loop over number of points per nth tile - DO k=1,tile_pts(n) - ! land pt index of point - l = tile_index(k,n) - ! at this point fvar=umvar, ELSE=0.0 - fvar(l,n) = umvar(l) - ENDDO -ENDDO - -cablevar = PACK(fvar,L_tile_pts) - -END SUBROUTINE pack_landpts2mp - - -END MODULE cable_pack_mod diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update.F90 deleted file mode 100644 index a290eed7d..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update.F90 +++ /dev/null @@ -1,117 +0,0 @@ -MODULE cbl_um_update_mod - -IMPLICIT NONE -PUBLIC :: update_data -PRIVATE - -CONTAINS - -SUBROUTINE update_data( row_length, rows, land_pts, nsurft, npft, ms, msn, & - timestep, timestep_number, mp, nrb, CO2_MMR, & - HGT_pft_um, lai_pft_um, land_index, surft_pts, & - surft_index, tile_frac, L_tile_pts, cos_zenith_angle, & - latitude, longitude, sw_down_VIS, sw_down_NIR, & - beamFrac_VIS, beamFrac_NIR, beamFrac_TOT, lw_down, & - ls_rain, ls_snow, tl_1, qw_1, vshr_land, pstar, z1_tq, & - z1_uv, canopy_tile, rad, met, veg, soil, rough,canopy, & - ssnow, HGT_pft_cbl, LAI_pft_cbl, reducedLAIdue2snow ) - -USE cbl_um_update_met_mod, ONLY: update_met -USE cbl_um_update_radiation_mod, ONLY: update_radiation -USE cbl_um_update_roughness_mod, ONLY: update_roughness -USE cbl_um_update_canopy_mod, ONLY: update_canopy -USE cbl_um_update_soilsnow_mod, ONLY: update_soilsnow -USE cbl_LAI_canopy_height_mod, ONLY: limit_HGT_LAI -USE params_io_mod_cbl, ONLY: params_io_data_type -USE cable_other_constants_mod, ONLY: LAI_THRESH -USE cable_def_types_mod, ONLY: radiation_type, met_type, & - veg_parameter_type, & - soil_parameter_type, roughness_type, & - canopy_type, soil_snow_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft ! # plant functional types -INTEGER, INTENT(IN) :: ms ! # soil layers -INTEGER, INTENT(IN) :: msn ! # snow layers -REAL, INTENT(IN) :: timestep -INTEGER, INTENT(IN) :: timestep_number -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: nrb -REAL, INTENT(IN) :: co2_mmr -REAL, INTENT(IN) :: HGT_pft_um(land_pts, npft) -REAL, INTENT(IN) :: lai_pft_um(land_pts, npft) -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! tangled cell index of land_pt -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: tile_frac(land_pts, nsurft) -REAL, INTENT(IN) :: cos_zenith_angle(row_length,rows) -REAL, INTENT(IN) :: latitude(row_length,rows) -REAL, INTENT(IN) :: longitude(row_length,rows) -REAL, INTENT(IN) :: lw_down(row_length,rows) -REAL, INTENT(IN) :: ls_rain(row_length,rows) -REAL, INTENT(IN) :: ls_snow(row_length,rows) -REAL, INTENT(IN) :: tl_1(row_length,rows) -REAL, INTENT(IN) :: qw_1(row_length,rows) -REAL, INTENT(IN) :: vshr_land(row_length,rows) -REAL, INTENT(IN) :: pstar(row_length,rows) -REAL, INTENT(IN) :: z1_tq(row_length,rows) -REAL, INTENT(IN) :: z1_uv(row_length,rows) -REAL, INTENT(IN) :: sw_down_VIS(row_length,rows) -REAL, INTENT(IN) :: sw_down_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_VIS(row_length,rows) -REAL, INTENT(IN) :: beamFrac_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_TOT(row_length,rows) -REAL, INTENT(IN) :: canopy_tile(land_pts, nsurft) -REAL, INTENT(IN) :: reducedLAIdue2snow(mp) -REAL, INTENT(OUT) :: HGT_pft_cbl(mp) -REAL, INTENT(OUT) :: LAI_pft_cbl(mp) - -TYPE(soil_parameter_type), INTENT(IN) :: soil ! soil parameters -TYPE(radiation_type), INTENT(OUT) :: rad -TYPE(met_type), INTENT(OUT) :: met -TYPE(roughness_type), INTENT(OUT) :: rough -TYPE(canopy_type), INTENT(OUT) :: canopy -TYPE(soil_snow_type), INTENT(INOUT) :: ssnow ! -TYPE(veg_parameter_type), INTENT(INOUT) :: veg ! vegetation parameters - -! Even when prescribed LAI, canopy height are seasonal so this cant be done ONLY -! on first call limit IN height, LAI and initialize veg% equivalents -CALL limit_HGT_LAI( LAI_pft_cbl, HGT_pft_cbl, mp, land_pts, nsurft, npft, & - surft_pts, surft_index, tile_frac, l_tile_pts, LAI_pft_um, & - HGT_pft_um, LAI_thresh ) - -! def veg% as they are what is USEd used in core science code -veg%vlai = LAI_pft_cbl -veg%hc = HGT_pft_cbl - -!--- Met. forcing -CALL update_met( mp, row_length, rows, timestep, land_pts, nsurft, & - surft_pts, surft_index,land_index,L_tile_pts, co2_mmr, & - ls_rain, ls_snow, tl_1, qw_1, vshr_land, pstar, met ) - -CALL update_radiation( mp, row_length, rows, timestep, land_pts, nsurft, & - surft_pts, surft_index,land_index, L_tile_pts, & - latitude, longitude, cos_zenith_angle, sw_down_VIS, & - sw_down_NIR, beamFrac_VIS, beamFrac_NIR, & - beamFrac_TOT, lw_down, rad, met ) - -CALL update_roughness( row_length, rows, mp, land_pts, nsurft, npft, & - lai_thresh, surft_pts, surft_index, land_index, & - L_tile_pts, z1_tq, z1_uv, HGT_pft_um, HGT_pft_cbl, & - rough, veg ) - -CALL update_canopy( mp, land_pts, nsurft, L_tile_pts, canopy_tile, & - reducedLAIdue2snow, canopy ) - -CALL update_soilsnow( mp, soil, ssnow, veg%iveg ) - -RETURN -END SUBROUTINE update_data - -END MODULE cbl_um_update_mod diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update_canopy.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update_canopy.F90 deleted file mode 100644 index dc5de2c3d..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update_canopy.F90 +++ /dev/null @@ -1,36 +0,0 @@ -MODULE cbl_um_update_canopy_mod - -IMPLICIT NONE - -PUBLIC update_canopy - -CONTAINS - -SUBROUTINE update_canopy( mp, land_pts, nsurft, L_tile_pts, canopy_tile, & - reducedLAIdue2snow, canopy ) - -USE cable_def_types_mod, ONLY: canopy_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: land_pts ! # land points -INTEGER, INTENT(IN) :: nsurft ! # tiles -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) -REAL, INTENT(IN) :: canopy_tile(land_pts, nsurft) -REAL, INTENT(IN) :: reducedLAIdue2snow(mp) -TYPE(canopy_type), INTENT(OUT) :: canopy - -!---set canopy storage (already in dim(land_pts,ntiles) ) -canopy%cansto = PACK(CANOPY_TILE, l_tile_pts) -canopy%oldcansto = canopy%cansto -canopy%vlaiw = reducedLAIdue2snow - -RETURN -END SUBROUTINE update_canopy - -END MODULE cbl_um_update_canopy_mod - - - - diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update_met.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update_met.F90 deleted file mode 100644 index 39576370c..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update_met.F90 +++ /dev/null @@ -1,111 +0,0 @@ -MODULE cbl_um_update_met_mod - - IMPLICIT NONE - -CONTAINS - -SUBROUTINE update_met( mp, row_length, rows, timestep, land_pts, nsurft, & - surft_pts, surft_index, land_index, L_tile_pts, co2_mmr,& - ls_rain, ls_snow, tl_1, qw_1, vshr_land, pstar, met ) - !block!CO2_MMR,CO2_3D,CO2_DIM_LEN,CO2_DIM_ROW, - !block!L_CO2_INTERACTIVE ) - -USE cable_pack_mod, ONLY: cable_pack_rr -USE cable_phys_constants_mod, ONLY: UMIN -USE cable_def_types_mod, ONLY: met_type - -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles -REAL, INTENT(IN) :: timestep -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # points on each tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! index of tile points -INTEGER, INTENT(IN) :: land_index(land_pts) ! index of land points -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) - -! "forcing" -REAL, INTENT(IN) :: co2_mmr -REAL, INTENT(IN) :: ls_rain(row_length,rows) -REAL, INTENT(IN) :: ls_snow(row_length,rows) -REAL, INTENT(IN) :: tl_1(row_length,rows) -REAL, INTENT(IN) :: qw_1(row_length,rows) -REAL, INTENT(IN) :: vshr_land(row_length,rows) -REAL, INTENT(IN) :: pstar(row_length,rows) - -TYPE(met_type), INTENT(OUT) :: met - -!local decs -REAL :: ls_rain_dt(row_length,rows) -REAL :: ls_snow_dt(row_length,rows) -REAL :: precip_dt(row_length,rows) -REAL :: CO2_3D(row_length,rows) ! co2 mass mixing ratio -LOGICAL :: L_CO2_INTERACTIVE = .FALSE. ! namelist? - -!block!! rml 2/7/13 Extra atmospheric co2 variables -!block! LOGICAL, INTENT(IN) :: L_CO2_INTERACTIVE -!block! INTEGER, INTENT(IN) :: CO2_DIM_LEN, CO2_DIM_ROW -!block! REAL, INTENT(IN) :: CO2_3D(:,:) ! co2 mass mixing ratio - -met%DoY = 1.0 !jhan: fudged initialization to prevent dangling arg to init_rad - -!jhan:implies precip is given as per second -ls_rain_dt = ls_rain * timestep -ls_snow_dt = ls_snow * timestep -precip_dt = ls_rain_dt + ls_snow_dt -CALL cable_pack_rr( met%precip, precip_dt, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%precip_sn, ls_snow_dt, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%tk, tl_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%qv, qw_1, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%ua, vshr_land, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -met%ua = MAX( UMIN, met%ua ) !---this is necessary cloberring at present - -CALL cable_pack_rr( met%pmb, pstar, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -met%pmb = 0.01 * met%pmb ! what is this .01? Units conversion? - -!block!IF( .NOT. ALLOCATED( conv_rain_prevstep(mp) ) ) THEN -!block! ALLOCATE( conv_rain_prevstep(mp ) -!block! ALLOCATE( conv_snow_prevstep(mp) ) -!block! conv_rain_prevstep = 0. -!block! conv_snow_prevstep = 0. -!block!ENDIF -!block!we would need to get conv_*_from prev step for a start -!block!met%precip = (met%precip + conv_rain_prevstep) & -!block! + (met%precip_sn + conv_snow_prevstep) -!block! + (met%precip_sn + conv_rain_prevstep) - -!jhan:This might be peculiar to the UM? and if so presents a problem -met%tvair = met%tk -met%tvrad = met%tk - -!******************clobbered by a hard-wired number ********************! -! rml 24/2/11 Set atmospheric CO2 seen by cable to CO2_MMR (value seen -! by radiation scheme). Option in future to have cable see interactive -! (3d) CO2 field Convert CO2 from kg/kg to mol/mol ( m_air, -! 28.966 taken from include/constant/ccarbon.h file ) -! r935 rml 2/7/13 Add in co2_interactive option -IF (L_CO2_INTERACTIVE) THEN - CALL cable_pack_rr( met%ca, CO2_3D, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) -ELSE - met%ca = CO2_MMR -ENDIF -!jhan:WTF -met%ca = met%ca * 28.966/44. - -END SUBROUTINE update_met - -END MODULE cbl_um_update_met_mod diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update_radiation.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update_radiation.F90 deleted file mode 100644 index 5d4e0af80..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update_radiation.F90 +++ /dev/null @@ -1,88 +0,0 @@ -MODULE cbl_um_update_radiation_mod - -IMPLICIT NONE - -CONTAINS - -SUBROUTINE update_radiation( mp, row_length, rows, timestep, land_pts, nsurft, & - surft_pts, surft_index, land_index, L_tile_pts, & - latitude, longitude, cos_zenith_angle, & - sw_down_VIS, sw_down_NIR, beamFrac_VIS, & - beamFrac_NIR, beamFrac_TOT, lw_down, rad, met ) - -USE cable_pack_mod, ONLY: cable_pack_rr -USE cable_other_constants_mod, ONLY: RAD_THRESH -USE cable_def_types_mod, ONLY: radiation_type, met_type -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: row_length ! # columns in spatial grid -INTEGER, INTENT(IN) :: rows ! # rows in spatial grid -REAL, INTENT(IN) :: timestep -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -INTEGER, INTENT(IN) :: nsurft ! # tiles - -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! tangled cell index of land_pt -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: cos_zenith_angle(row_length,rows) -REAL, INTENT(IN) :: latitude(row_length,rows) -REAL, INTENT(IN) :: longitude(row_length,rows) - -! radiation streams -REAL, INTENT(IN) :: sw_down_VIS(row_length,rows) -REAL, INTENT(IN) :: sw_down_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_VIS(row_length,rows) -REAL, INTENT(IN) :: beamFrac_NIR(row_length,rows) -REAL, INTENT(IN) :: beamFrac_TOT(row_length,rows) -REAL, INTENT(IN) :: lw_down(row_length,rows) - -TYPE(radiation_type), INTENT(OUT) :: rad -TYPE(met_type), INTENT(OUT) :: met - -!local vars -INTEGER :: i - -rad%otrad = rad%trad - -CALL cable_pack_rr( met%coszen, cos_zenith_angle, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -met%coszen = max(met%coszen,1e-8) ! is this really required now - -CALL cable_pack_rr( met%fsd(:,1), sw_down_VIS, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( met%fsd(:,2), sw_down_NIR, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rad%fbeam(:,1), beamFrac_VIS, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rad%fbeam(:,2), beamFrac_NIR, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rad%fbeam(:,3), beamFrac_TOT, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) -DO i=1,mp - IF( met%coszen(i) < RAD_THRESH ) THEN - rad%fbeam(i,1) = REAL(0) - rad%fbeam(i,2) = REAL(0) - rad%fbeam(i,3) = REAL(0) - END IF -END DO - -CALL cable_pack_rr( met%fld, lw_down, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rad%latitude, latitude, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rad%longitude, longitude, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -RETURN -END SUBROUTINE update_radiation - -END MODULE cbl_um_update_radiation_mod diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update_roughness.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update_roughness.F90 deleted file mode 100644 index d8ef7221f..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update_roughness.F90 +++ /dev/null @@ -1,73 +0,0 @@ -MODULE cbl_um_update_roughness_mod - -IMPLICIT NONE - -CONTAINS - -SUBROUTINE update_roughness( row_length, rows, mp, land_pts, nsurft, npft, & - lai_thresh, surft_pts, surft_index, land_index, & - L_tile_pts, z1_tq, z1_uv, HGT_pft_um, HGT_pft_cbl,& - rough, veg ) - -USE cable_pack_mod, ONLY: cable_pack_rr -USE cable_def_types_mod, ONLY: roughness_type, veg_parameter_type - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: row_length -INTEGER, INTENT(IN) :: rows -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: nsurft ! # tiles -INTEGER, INTENT(IN) :: npft -INTEGER, INTENT(IN) :: land_pts ! # land points being processed -REAL, INTENT(IN) :: lai_thresh -INTEGER, INTENT(IN) :: surft_pts(nsurft) ! # land points per tile -INTEGER, INTENT(IN) :: surft_index(land_pts, nsurft) ! land_pt index of point -INTEGER, INTENT(IN) :: land_index(land_pts) ! tangled cell index of land_pt -LOGICAL, INTENT(IN) :: L_tile_pts(land_pts, nsurft) ! TRUE if active tile -REAL, INTENT(IN) :: z1_tq(row_length, rows) -REAL, INTENT(IN) :: z1_uv(row_length, rows) -REAL, INTENT(IN) :: HGT_pft_um(land_pts,nsurft) -REAL, INTENT(IN) :: HGT_pft_cbl(mp) - -TYPE(roughness_type), INTENT(OUT) :: rough -TYPE(veg_parameter_type), INTENT(IN) :: veg ! vegetation parameters - -!local vars -INTEGER :: i,j,k,L,n -REAL :: jhruff(land_pts,nsurft) -REAL :: jhwork(land_pts,nsurft) - -!--- CABLE roughness type forcings -CALL cable_pack_rr( rough%za_tq, z1_tq, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -CALL cable_pack_rr( rough%za_uv, z1_uv, mp, l_tile_pts, row_length, & - rows, nsurft, land_pts, land_index, surft_pts, surft_index ) - -!Veg height changes seasonally in MOSES hence no updates here due to snow -jhwork = 0. -DO n=1,nsurft - DO k=1,surft_pts(n) - l = surft_index(k,n) - jhwork(l,n) = MAX( .01, HGT_pft_um(L,N) ) - ENDDO -ENDDO - -jhruff= 0.01 -DO l=1,land_pts - DO n=1,nsurft - IF( jhruff(L,N) .lt. jhwork(l,n)) THEN - jhruff(L,:) = jhwork(l,n) - END IF - ENDDO -ENDDO - -! CM2 set hruff from veg%hc - will require review with POP implementation -rough%hruff= MAX( 0.01, HGT_pft_cbl ) -rough%hruff_grmx = PACK(jhruff, l_tile_pts) - -RETURN -END SUBROUTINE update_roughness - -END MODULE cbl_um_update_roughness_mod diff --git a/src/coupled/AM3/control/cable/util/update/cbl_um_update_soilsnow.F90 b/src/coupled/AM3/control/cable/util/update/cbl_um_update_soilsnow.F90 deleted file mode 100644 index 31b607802..000000000 --- a/src/coupled/AM3/control/cable/util/update/cbl_um_update_soilsnow.F90 +++ /dev/null @@ -1,48 +0,0 @@ -MODULE cbl_um_update_soilsnow_mod - -IMPLICIT NONE - -CONTAINS - -SUBROUTINE update_soilsnow( mp, soil, ssnow, veg_iveg ) - - -USE cable_def_types_mod, ONLY: soil_parameter_type -USE cable_def_types_mod, ONLY: soil_snow_type -USE cable_phys_constants_mod, ONLY: density_liq -USE cable_surface_types_mod, ONLY: lakes_cable -IMPLICIT NONE - -INTEGER, INTENT(IN) :: mp ! # active land points -INTEGER, INTENT(IN) :: veg_iveg(mp) -!jhan:build fudge inOUT -TYPE(soil_snow_type), INTENT(inOUT) :: ssnow ! -TYPE(soil_parameter_type), INTENT(IN) :: soil ! soil parameters - -INTEGER :: j - -ssnow%wb_lake = 0.0 -ssnow%wbtot1 = 0.0 -ssnow%wbtot2 = 0.0 - -ssnow%wbliq = ssnow%wb - ssnow%wbice - -!jhan:this was in a do loop from 1:1 -! lakes: remove hard-wired number in future version -WHERE( veg_iveg == lakes_cable .AND. ssnow%wb(:,1) < soil%sfc ) - - ssnow%wbtot1 = ssnow%wbtot1 + REAL( ssnow%wb(:,1) ) * 1000.0 * & - soil%zse(1) - ssnow%wb(:,1) = soil%sfc - ssnow%wbtot2 = ssnow%wbtot2 + REAL( ssnow%wb(:,1) ) * 1000.0 * & - soil%zse(1) -ENDWHERE - -ssnow%wb_lake = MAX( ssnow%wbtot2 - ssnow%wbtot1, 0.) - -RETURN -END SUBROUTINE update_soilsnow - -END MODULE cbl_um_update_soilsnow_mod - - diff --git a/src/coupled/AM3/control/casa/shared/cnp_fields_mod.F90 b/src/coupled/AM3/control/casa/shared/cnp_fields_mod.F90 deleted file mode 100644 index 122a7aebe..000000000 --- a/src/coupled/AM3/control/casa/shared/cnp_fields_mod.F90 +++ /dev/null @@ -1,19 +0,0 @@ -MODULE cnp_fields_mod - -! TYPE definitions -USE progs_cnp_vars_mod, ONLY: progs_cnp_vars_type, & - progs_cnp_vars_data_type - -USE work_vars_mod_cnp, ONLY: work_vars_type - -PUBLIC - -! instantiated TYPES to hold the data -TYPE(progs_cnp_vars_data_type), TARGET :: progs_cnp_vars_data - -! instantiated TYPES we pass around. These happen to be pointers to the data -! types above but this should be transparent -TYPE(progs_cnp_vars_type) :: progs_cnp_vars -TYPE(work_vars_type) :: work_vars_cnp - -END MODULE cnp_fields_mod diff --git a/src/coupled/AM3/control/casa/shared/progs_cnp_vars_mod.F90 b/src/coupled/AM3/control/casa/shared/progs_cnp_vars_mod.F90 deleted file mode 100644 index 2575901fb..000000000 --- a/src/coupled/AM3/control/casa/shared/progs_cnp_vars_mod.F90 +++ /dev/null @@ -1,188 +0,0 @@ -MODULE progs_cnp_vars_mod - -IMPLICIT NONE - -PUBLIC :: progs_cnp_vars_alloc -PUBLIC :: progs_cnp_vars_assoc -PUBLIC :: progs_cnp_vars_data_type -PUBLIC :: progs_cnp_vars_type -PUBLIC :: nCpool_casa -PUBLIC :: nNpool_casa -PUBLIC :: nPPool_casa -PRIVATE - -INTEGER, PARAMETER :: nCpool_casa = 10 -INTEGER, PARAMETER :: nNpool_casa = 10 -INTEGER, PARAMETER :: nPPool_casa = 12 - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='PROGS_CNP_VARS_MOD' -! Prognostic Fields for CASA-CNP to be initialized from IO -TYPE :: progs_cnp_vars_data_type - - REAL, ALLOCATABLE :: C_pool_casa(:,:,:) - REAL, ALLOCATABLE :: N_pool_casa(:,:,:) - REAL, ALLOCATABLE :: P_pool_casa(:,:,:) - REAL, ALLOCATABLE :: soil_order_casa(:) - REAL, ALLOCATABLE :: N_dep_casa(:) - REAL, ALLOCATABLE :: N_fix_casa(:) - REAL, ALLOCATABLE :: P_dust_casa(:) - REAL, ALLOCATABLE :: P_weath_casa(:) - REAL, ALLOCATABLE :: LAI_casa(:,:) - REAL, ALLOCATABLE :: phenphase_casa(:,:) - REAL, ALLOCATABLE :: wood_hvest_C(:,:,:) - REAL, ALLOCATABLE :: wood_hvest_N(:,:,:) - REAL, ALLOCATABLE :: wood_hvest_P(:,:,:) - REAL, ALLOCATABLE :: thinning(:,:) - REAL, ALLOCATABLE :: prev_yr_sfrac(:,:) - -END TYPE progs_cnp_vars_data_type - -TYPE :: progs_cnp_vars_type - - REAL, POINTER, PUBLIC :: C_pool_casa(:,:,:) - REAL, POINTER, PUBLIC :: N_pool_casa(:,:,:) - REAL, POINTER, PUBLIC :: P_pool_casa(:,:,:) - REAL, POINTER, PUBLIC :: soil_order_casa(:) - REAL, POINTER, PUBLIC :: N_dep_casa(:) - REAL, POINTER, PUBLIC :: N_fix_casa(:) - REAL, POINTER, PUBLIC :: P_dust_casa(:) - REAL, POINTER, PUBLIC :: P_weath_casa(:) - REAL, POINTER, PUBLIC :: LAI_casa(:,:) - REAL, POINTER, PUBLIC :: phenphase_casa(:,:) - REAL, POINTER, PUBLIC :: wood_hvest_C(:,:,:) - REAL, POINTER, PUBLIC :: wood_hvest_N(:,:,:) - REAL, POINTER, PUBLIC :: wood_hvest_P(:,:,:) - REAL, POINTER, PUBLIC :: thinning(:,:) - REAL, POINTER, PUBLIC :: prev_yr_sfrac(:,:) - -END TYPE progs_cnp_vars_type - -CONTAINS - -SUBROUTINE progs_cnp_vars_alloc(land_pts, nsurft, progs_cnp_vars_data ) - -USE casadimension, ONLY: mwood - -IMPLICIT NONE - -!Arguments -INTEGER, INTENT(IN) :: land_pts, nsurft - -TYPE(progs_cnp_vars_data_type), INTENT(OUT) :: progs_cnp_vars_data - -ALLOCATE ( progs_cnp_vars_data % C_pool_casa ( land_pts, nsurft, nCpool_casa ) ) -ALLOCATE ( progs_cnp_vars_data % N_pool_casa ( land_pts, nsurft, nNpool_casa ) ) -ALLOCATE ( progs_cnp_vars_data % P_pool_casa ( land_pts, nsurft, nPpool_casa ) ) -ALLOCATE ( progs_cnp_vars_data % soil_order_casa ( land_pts ) ) -ALLOCATE ( progs_cnp_vars_data % N_dep_casa ( land_pts ) ) -ALLOCATE ( progs_cnp_vars_data % N_fix_casa ( land_pts ) ) -ALLOCATE ( progs_cnp_vars_data % P_dust_casa ( land_pts ) ) -ALLOCATE ( progs_cnp_vars_data % P_weath_casa ( land_pts ) ) -ALLOCATE ( progs_cnp_vars_data % LAI_casa ( land_pts, nsurft ) ) -ALLOCATE ( progs_cnp_vars_data % phenphase_casa ( land_pts, nsurft ) ) -ALLOCATE ( progs_cnp_vars_data % wood_hvest_C ( land_pts, nsurft, mwood ) ) -ALLOCATE ( progs_cnp_vars_data % wood_hvest_N ( land_pts, nsurft, mwood ) ) -ALLOCATE ( progs_cnp_vars_data % wood_hvest_P ( land_pts, nsurft, mwood ) ) -ALLOCATE ( progs_cnp_vars_data % thinning ( land_pts, nsurft ) ) -ALLOCATE ( progs_cnp_vars_data % prev_yr_sfrac ( land_pts, nsurft ) ) - -progs_cnp_vars_data % C_pool_casa(:,:,:) = 0.0 -progs_cnp_vars_data % N_pool_casa(:,:,:) = 0.0 -progs_cnp_vars_data % P_pool_casa(:,:,:) = 0.0 -progs_cnp_vars_data % soil_order_casa(:) = 0.0 -progs_cnp_vars_data % N_dep_casa(:) = 0.0 -progs_cnp_vars_data % N_fix_casa(:) = 0.0 -progs_cnp_vars_data % P_dust_casa(:) = 0.0 -progs_cnp_vars_data % P_weath_casa(:) = 0.0 -progs_cnp_vars_data % LAI_casa(:,:) = 0.0 -progs_cnp_vars_data % phenphase_casa(:,:) = 0.0 -progs_cnp_vars_data % wood_hvest_C(:,:,:) = 0.0 -progs_cnp_vars_data % wood_hvest_N(:,:,:) = 0.0 -progs_cnp_vars_data % wood_hvest_P(:,:,:) = 0.0 -progs_cnp_vars_data % thinning(:,:) = 0.0 -progs_cnp_vars_data % prev_yr_sfrac(:,:) = 0.0 - -RETURN -END SUBROUTINE progs_cnp_vars_alloc - -SUBROUTINE progs_cnp_vars_dealloc(progs_cnp_vars_data ) - -IMPLICIT NONE - -!Arguments -TYPE(progs_cnp_vars_data_type) :: progs_cnp_vars_data - -DEALLOCATE ( progs_cnp_vars_data % C_pool_casa ) -DEALLOCATE ( progs_cnp_vars_data % N_pool_casa ) -DEALLOCATE ( progs_cnp_vars_data % P_pool_casa ) -DEALLOCATE ( progs_cnp_vars_data % soil_order_casa ) -DEALLOCATE ( progs_cnp_vars_data % N_dep_casa ) -DEALLOCATE ( progs_cnp_vars_data % N_fix_casa ) -DEALLOCATE ( progs_cnp_vars_data % P_dust_casa ) -DEALLOCATE ( progs_cnp_vars_data % P_weath_casa ) -DEALLOCATE ( progs_cnp_vars_data % LAI_casa ) -DEALLOCATE ( progs_cnp_vars_data % phenphase_casa ) -DEALLOCATE ( progs_cnp_vars_data % wood_hvest_C ) -DEALLOCATE ( progs_cnp_vars_data % wood_hvest_N ) -DEALLOCATE ( progs_cnp_vars_data % wood_hvest_P ) -DEALLOCATE ( progs_cnp_vars_data % thinning ) -DEALLOCATE ( progs_cnp_vars_data % prev_yr_sfrac ) - -RETURN -END SUBROUTINE progs_cnp_vars_dealloc - -SUBROUTINE progs_cnp_vars_assoc(progs_cnp_vars, progs_cnp_vars_data ) - -IMPLICIT NONE - -!Arguments -TYPE(progs_cnp_vars_type), INTENT(IN OUT) :: progs_cnp_vars -TYPE(progs_cnp_vars_data_type), INTENT(IN OUT), TARGET :: progs_cnp_vars_data - -progs_cnp_vars % C_pool_casa => progs_cnp_vars_data % C_pool_casa -progs_cnp_vars % N_pool_casa => progs_cnp_vars_data % N_pool_casa -progs_cnp_vars % P_pool_casa => progs_cnp_vars_data % P_pool_casa -progs_cnp_vars % soil_order_casa => progs_cnp_vars_data % soil_order_casa -progs_cnp_vars % N_dep_casa => progs_cnp_vars_data % N_dep_casa -progs_cnp_vars % N_fix_casa => progs_cnp_vars_data % N_fix_casa -progs_cnp_vars % P_dust_casa => progs_cnp_vars_data % P_dust_casa -progs_cnp_vars % P_weath_casa => progs_cnp_vars_data % P_weath_casa -progs_cnp_vars % LAI_casa => progs_cnp_vars_data % LAI_casa -progs_cnp_vars % phenphase_casa => progs_cnp_vars_data % phenphase_casa -progs_cnp_vars % wood_hvest_C => progs_cnp_vars_data % wood_hvest_C -progs_cnp_vars % wood_hvest_N => progs_cnp_vars_data % wood_hvest_N -progs_cnp_vars % wood_hvest_P => progs_cnp_vars_data % wood_hvest_P -progs_cnp_vars % thinning => progs_cnp_vars_data % thinning -progs_cnp_vars % prev_yr_sfrac => progs_cnp_vars_data % prev_yr_sfrac - -RETURN -END SUBROUTINE progs_cnp_vars_assoc - -SUBROUTINE progs_cnp_vars_nullify(progs_cnp_vars) - -IMPLICIT NONE - -!Arguments -TYPE(progs_cnp_vars_type) :: progs_cnp_vars - -NULLIFY ( progs_cnp_vars % C_pool_casa ) -NULLIFY ( progs_cnp_vars % N_pool_casa ) -NULLIFY ( progs_cnp_vars % P_pool_casa ) -NULLIFY ( progs_cnp_vars % soil_order_casa ) -NULLIFY ( progs_cnp_vars % N_dep_casa ) -NULLIFY ( progs_cnp_vars % N_fix_casa ) -NULLIFY ( progs_cnp_vars % P_dust_casa ) -NULLIFY ( progs_cnp_vars % P_weath_casa ) -NULLIFY ( progs_cnp_vars % LAI_casa ) -NULLIFY ( progs_cnp_vars % phenphase_casa ) -NULLIFY ( progs_cnp_vars % wood_hvest_C ) -NULLIFY ( progs_cnp_vars % wood_hvest_N ) -NULLIFY ( progs_cnp_vars % wood_hvest_P ) -NULLIFY ( progs_cnp_vars % thinning ) -NULLIFY ( progs_cnp_vars % prev_yr_sfrac ) - -RETURN - -END SUBROUTINE progs_cnp_vars_nullify - -END MODULE progs_cnp_vars_mod diff --git a/src/coupled/AM3/control/casa/shared/work_vars_mod_cnp.F90 b/src/coupled/AM3/control/casa/shared/work_vars_mod_cnp.F90 deleted file mode 100644 index 360ba2777..000000000 --- a/src/coupled/AM3/control/casa/shared/work_vars_mod_cnp.F90 +++ /dev/null @@ -1,52 +0,0 @@ -MODULE work_vars_mod_cnp - -!!USE cable_bgc_pool_type_mod, ONLY: bgc_pool_type -!!USE cable_bgc_pool_type_mod, ONLY: bgc_pool_data_type -!!USE cable_sum_flux_type_mod, ONLY: sum_flux_type -!!USE cable_sum_flux_type_mod, ONLY: sum_flux_data_type - -USE casa_biome_type_mod, ONLY: casa_biome_data_type -USE casa_biome_type_mod, ONLY: casa_biome_type -USE casa_pool_type_mod, ONLY: casa_pool_data_type -USE casa_pool_type_mod, ONLY: casa_pool_type -USE casa_flux_type_mod, ONLY: casa_flux_data_type -USE casa_flux_type_mod, ONLY: casa_flux_type -USE casa_met_type_mod, ONLY: casa_met_data_type -USE casa_met_type_mod, ONLY: casa_met_type -USE casa_balance_type_mod, ONLY: casa_bal_data_type -USE casa_balance_type_mod, ONLY: casa_bal_type -USE phenology_type_mod, ONLY: phenology_data_type -USE phenology_type_mod, ONLY: phenology_type - -IMPLICIT NONE - -PUBLIC :: work_vars_type -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='WORK_VARS_MOD_CNP' - -TYPE :: work_vars_type - - TYPE( casa_biome_type ) :: casabiome - TYPE( casa_pool_type ) :: casapool - TYPE( casa_pool_type ) :: sum_casapool - TYPE( casa_flux_type ) :: casaflux - TYPE( casa_flux_type ) :: sum_casaflux - TYPE( casa_met_type ) :: casamet - TYPE( casa_bal_type ) :: casabal - TYPE( phenology_type ) :: phen - -END TYPE work_vars_type - -! data arrays need to be declared outside of the work% TYPE -TYPE( casa_biome_data_type ), PUBLIC, TARGET :: casabiome_data -TYPE( casa_pool_data_type ), PUBLIC, TARGET :: casapool_data -TYPE( casa_pool_data_type ), PUBLIC, TARGET :: sum_casapool_data -TYPE( casa_flux_data_type ), PUBLIC, TARGET :: casaflux_data -TYPE( casa_flux_data_type ), PUBLIC, TARGET :: sum_casaflux_data -TYPE( casa_met_data_type ), PUBLIC, TARGET :: casamet_data -TYPE( casa_bal_data_type ), PUBLIC, TARGET :: casabal_data -TYPE( phenology_data_type ), PUBLIC, TARGET :: phen_data - -END MODULE work_vars_mod_cnp - diff --git a/src/coupled/AM3/initialisation/cable_pft_params.F90 b/src/coupled/AM3/initialisation/cable_pft_params.F90 deleted file mode 100644 index 81cb6fa8e..000000000 --- a/src/coupled/AM3/initialisation/cable_pft_params.F90 +++ /dev/null @@ -1,1033 +0,0 @@ -MODULE cable_pft_params_mod - - IMPLICIT NONE - -CONTAINS - -subroutine cable_pft_params(pars_io_data_cbl) - - ! Gets parameter values for each vegetation type -USE grid_constants_mod_cbl, ONLY : ms => nsl, nrb -USE grid_constants_mod_cbl, ONLY : ncs => nsCs, ncp => nvCs -USE params_io_mod_cbl, ONLY: params_io_data_type - - IMPLICIT NONE - - TYPE(params_io_data_type), TARGET :: pars_io_data_cbl - - INTEGER :: a, jveg ! do loop counter - - !PFT parameters: description and corresponding variable name in code. - !PFT parameters are assigned as TYPE pars_io_data_cbl%vegin_ but later used as veg% - - !PFT: evergreen_needleleaf - !========================================================= - - pars_io_data_cbl%vegin_canst1(1) = 0.100000 - pars_io_data_cbl%vegin_length(1) = 0.055000 - pars_io_data_cbl%vegin_width(1) = 0.001000 - pars_io_data_cbl%vegin_vcmax(1) = 0.000040 - pars_io_data_cbl%vegin_ejmax(1) = 0.000000 - pars_io_data_cbl%vegin_hc(1) = 17.000000 - pars_io_data_cbl%vegin_xfang(1) = 0.010000 - pars_io_data_cbl%vegin_rp20(1) = 3.000000 - pars_io_data_cbl%vegin_rpcoef(1) = 0.083200 - pars_io_data_cbl%vegin_rs20(1) = 1.000000 - pars_io_data_cbl%vegin_wai(1) = 1.000000 - pars_io_data_cbl%vegin_rootbeta(1) = 0.943000 - pars_io_data_cbl%vegin_shelrb(1) = 2.000000 - pars_io_data_cbl%vegin_vegcf(1) = 9.000000 - pars_io_data_cbl%vegin_frac4(1) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(1) = 1.000000 - pars_io_data_cbl%vegin_extkn(1) = 0.001000 - pars_io_data_cbl%vegin_tminvj(1) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(1) = -10.000000 - pars_io_data_cbl%vegin_vbeta(1) = 2.000000 - pars_io_data_cbl%vegin_froot(1,1) = 0.050000 - pars_io_data_cbl%vegin_froot(2,1) = 0.050000 - pars_io_data_cbl%vegin_froot(3,1) = 0.050000 - pars_io_data_cbl%vegin_froot(4,1) = 0.050000 - pars_io_data_cbl%vegin_froot(5,1) = 0.050000 - pars_io_data_cbl%vegin_froot(6,1) = 0.050000 - pars_io_data_cbl%vegin_refl(1,1) = 0.090000 - pars_io_data_cbl%vegin_taul(1,1) = 0.090000 - pars_io_data_cbl%vegin_refl(2,1) = 0.300000 - pars_io_data_cbl%vegin_taul(2,1) = 0.300000 - pars_io_data_cbl%vegin_refl(3,1) = 0.010000 - pars_io_data_cbl%vegin_taul(3,1) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,1) = 184.000000 - pars_io_data_cbl%vegin_ratecs(1,1) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,1) = 367.000000 - pars_io_data_cbl%vegin_ratecs(2,1) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,1) = 200.000000 - pars_io_data_cbl%vegin_ratecp(1,1) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,1) = 10217.000000 - pars_io_data_cbl%vegin_ratecp(2,1) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,1) = 876.000000 - pars_io_data_cbl%vegin_ratecp(3,1) = 0.140000 - pars_io_data_cbl%vegin_a1gs(1) = 9.000000 - pars_io_data_cbl%vegin_d0gs(1) = 1500.000000 - pars_io_data_cbl%vegin_alpha(1) = 0.200000 - pars_io_data_cbl%vegin_convex(1) = 0.700000 - pars_io_data_cbl%vegin_cfrd(1) = 0.015000 - pars_io_data_cbl%vegin_gswmin(1) = 0.010000 - pars_io_data_cbl%vegin_conkc0(1) = 0.000302 - pars_io_data_cbl%vegin_conko0(1) = 0.256000 - pars_io_data_cbl%vegin_ekc(1) = 59430.000000 - pars_io_data_cbl%vegin_eko(1) = 36000.000000 - pars_io_data_cbl%vegin_g0(1) = 0.000000 - pars_io_data_cbl%vegin_g1(1) = 2.346064 - pars_io_data_cbl%vegin_zr(1) = 1.800000 - pars_io_data_cbl%vegin_clitt(1) = 20.000000 - - !PFT: evergreen_broadleaf - !========================================================= - pars_io_data_cbl%vegin_canst1(2) = 0.100000 - pars_io_data_cbl%vegin_length(2) = 0.100000 - pars_io_data_cbl%vegin_width(2) = 0.050000 - pars_io_data_cbl%vegin_vcmax(2) = 0.000055 - pars_io_data_cbl%vegin_ejmax(2) = 0.000000 - pars_io_data_cbl%vegin_hc(2) = 35.000000 - pars_io_data_cbl%vegin_xfang(2) = 0.100000 - pars_io_data_cbl%vegin_rp20(2) = 0.600000 - pars_io_data_cbl%vegin_rpcoef(2) = 0.083200 - pars_io_data_cbl%vegin_rs20(2) = 1.000000 - pars_io_data_cbl%vegin_wai(2) = 1.000000 - pars_io_data_cbl%vegin_rootbeta(2) = 0.962000 - pars_io_data_cbl%vegin_shelrb(2) = 2.000000 - pars_io_data_cbl%vegin_vegcf(2) = 14.000000 - pars_io_data_cbl%vegin_frac4(2) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(2) = 1.000000 - pars_io_data_cbl%vegin_extkn(2) = 0.001000 - pars_io_data_cbl%vegin_tminvj(2) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(2) = -10.000000 - pars_io_data_cbl%vegin_vbeta(2) = 2.000000 - pars_io_data_cbl%vegin_froot(1,2) = 0.200000 - pars_io_data_cbl%vegin_froot(2,2) = 0.200000 - pars_io_data_cbl%vegin_froot(3,2) = 0.200000 - pars_io_data_cbl%vegin_froot(4,2) = 0.200000 - pars_io_data_cbl%vegin_froot(5,2) = 0.200000 - pars_io_data_cbl%vegin_froot(6,2) = 0.200000 - pars_io_data_cbl%vegin_refl(1,2) = 0.090000 - pars_io_data_cbl%vegin_taul(1,2) = 0.090000 - pars_io_data_cbl%vegin_refl(2,2) = 0.290000 - pars_io_data_cbl%vegin_taul(2,2) = 0.290000 - pars_io_data_cbl%vegin_refl(3,2) = 0.010000 - pars_io_data_cbl%vegin_taul(3,2) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,2) = 303.000000 - pars_io_data_cbl%vegin_ratecs(1,2) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,2) = 606.000000 - pars_io_data_cbl%vegin_ratecs(2,2) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,2) = 300.000000 - pars_io_data_cbl%vegin_ratecp(1,2) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,2) = 16833.000000 - pars_io_data_cbl%vegin_ratecp(2,2) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,2) = 1443.000000 - pars_io_data_cbl%vegin_ratecp(3,2) = 0.140000 - pars_io_data_cbl%vegin_a1gs(2) = 9.000000 - pars_io_data_cbl%vegin_d0gs(2) = 1500.000000 - pars_io_data_cbl%vegin_alpha(2) = 0.200000 - pars_io_data_cbl%vegin_convex(2) = 0.700000 - pars_io_data_cbl%vegin_cfrd(2) = 0.015000 - pars_io_data_cbl%vegin_gswmin(2) = 0.010000 - pars_io_data_cbl%vegin_conkc0(2) = 0.000302 - pars_io_data_cbl%vegin_conko0(2) = 0.256000 - pars_io_data_cbl%vegin_ekc(2) = 59430.000000 - pars_io_data_cbl%vegin_eko(2) = 36000.000000 - pars_io_data_cbl%vegin_g0(2) = 0.000000 - pars_io_data_cbl%vegin_g1(2) = 4.114762 - pars_io_data_cbl%vegin_zr(2) = 3.000000 - pars_io_data_cbl%vegin_clitt(2) = 6.000000 - - !PFT: deciduous_needleleaf - !========================================================= - pars_io_data_cbl%vegin_canst1(3) = 0.100000 - pars_io_data_cbl%vegin_length(3) = 0.040000 - pars_io_data_cbl%vegin_width(3) = 0.001000 - pars_io_data_cbl%vegin_vcmax(3) = 0.000040 - pars_io_data_cbl%vegin_ejmax(3) = 0.000000 - pars_io_data_cbl%vegin_hc(3) = 15.500000 - pars_io_data_cbl%vegin_xfang(3) = 0.010000 - pars_io_data_cbl%vegin_rp20(3) = 3.000000 - pars_io_data_cbl%vegin_rpcoef(3) = 0.083200 - pars_io_data_cbl%vegin_rs20(3) = 1.000000 - pars_io_data_cbl%vegin_wai(3) = 1.000000 - pars_io_data_cbl%vegin_rootbeta(3) = 0.966000 - pars_io_data_cbl%vegin_shelrb(3) = 2.000000 - pars_io_data_cbl%vegin_vegcf(3) = 9.000000 - pars_io_data_cbl%vegin_frac4(3) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(3) = 1.000000 - pars_io_data_cbl%vegin_extkn(3) = 0.001000 - pars_io_data_cbl%vegin_tminvj(3) = 5.000000 - pars_io_data_cbl%vegin_tmaxvj(3) = 10.000000 - pars_io_data_cbl%vegin_vbeta(3) = 2.000000 - pars_io_data_cbl%vegin_froot(1,3) = 0.200000 - pars_io_data_cbl%vegin_froot(2,3) = 0.200000 - pars_io_data_cbl%vegin_froot(3,3) = 0.200000 - pars_io_data_cbl%vegin_froot(4,3) = 0.200000 - pars_io_data_cbl%vegin_froot(5,3) = 0.200000 - pars_io_data_cbl%vegin_froot(6,3) = 0.200000 - pars_io_data_cbl%vegin_refl(1,3) = 0.075000 - pars_io_data_cbl%vegin_taul(1,3) = 0.075000 - pars_io_data_cbl%vegin_refl(2,3) = 0.300000 - pars_io_data_cbl%vegin_taul(2,3) = 0.300000 - pars_io_data_cbl%vegin_refl(3,3) = 0.010000 - pars_io_data_cbl%vegin_taul(3,3) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,3) = 107.000000 - pars_io_data_cbl%vegin_ratecs(1,3) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,3) = 214.000000 - pars_io_data_cbl%vegin_ratecs(2,3) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,3) = 200.000000 - pars_io_data_cbl%vegin_ratecp(1,3) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,3) = 5967.000000 - pars_io_data_cbl%vegin_ratecp(2,3) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,3) = 511.000000 - pars_io_data_cbl%vegin_ratecp(3,3) = 0.140000 - pars_io_data_cbl%vegin_a1gs(3) = 9.000000 - pars_io_data_cbl%vegin_d0gs(3) = 1500.000000 - pars_io_data_cbl%vegin_alpha(3) = 0.200000 - pars_io_data_cbl%vegin_convex(3) = 0.700000 - pars_io_data_cbl%vegin_cfrd(3) = 0.015000 - pars_io_data_cbl%vegin_gswmin(3) = 0.010000 - pars_io_data_cbl%vegin_conkc0(3) = 0.000302 - pars_io_data_cbl%vegin_conko0(3) = 0.256000 - pars_io_data_cbl%vegin_ekc(3) = 59430.000000 - pars_io_data_cbl%vegin_eko(3) = 36000.000000 - pars_io_data_cbl%vegin_g0(3) = 0.000000 - pars_io_data_cbl%vegin_g1(3) = 2.346064 - pars_io_data_cbl%vegin_zr(3) = 2.000000 - pars_io_data_cbl%vegin_clitt(3) = 10.000000 - - !PFT: deciduous_broadleaf - !========================================================= - pars_io_data_cbl%vegin_canst1(4) = 0.100000 - pars_io_data_cbl%vegin_length(4) = 0.150000 - pars_io_data_cbl%vegin_width(4) = 0.080000 - pars_io_data_cbl%vegin_vcmax(4) = 0.000060 - pars_io_data_cbl%vegin_ejmax(4) = 0.000000 - pars_io_data_cbl%vegin_hc(4) = 20.000000 - pars_io_data_cbl%vegin_xfang(4) = 0.250000 - pars_io_data_cbl%vegin_rp20(4) = 2.200000 - pars_io_data_cbl%vegin_rpcoef(4) = 0.083200 - pars_io_data_cbl%vegin_rs20(4) = 1.000000 - pars_io_data_cbl%vegin_wai(4) = 1.000000 - pars_io_data_cbl%vegin_rootbeta(4) = 0.961000 - pars_io_data_cbl%vegin_shelrb(4) = 2.000000 - pars_io_data_cbl%vegin_vegcf(4) = 8.000000 - pars_io_data_cbl%vegin_frac4(4) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(4) = 1.000000 - pars_io_data_cbl%vegin_extkn(4) = 0.001000 - pars_io_data_cbl%vegin_tminvj(4) = 5.000000 - pars_io_data_cbl%vegin_tmaxvj(4) = 15.000000 - pars_io_data_cbl%vegin_vbeta(4) = 2.000000 - pars_io_data_cbl%vegin_froot(1,4) = 0.200000 - pars_io_data_cbl%vegin_froot(2,4) = 0.200000 - pars_io_data_cbl%vegin_froot(3,4) = 0.200000 - pars_io_data_cbl%vegin_froot(4,4) = 0.200000 - pars_io_data_cbl%vegin_froot(5,4) = 0.200000 - pars_io_data_cbl%vegin_froot(6,4) = 0.200000 - pars_io_data_cbl%vegin_refl(1,4) = 0.090000 - pars_io_data_cbl%vegin_taul(1,4) = 0.090000 - pars_io_data_cbl%vegin_refl(2,4) = 0.290000 - pars_io_data_cbl%vegin_taul(2,4) = 0.290000 - pars_io_data_cbl%vegin_refl(3,4) = 0.010000 - pars_io_data_cbl%vegin_taul(3,4) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,4) = 216.000000 - pars_io_data_cbl%vegin_ratecs(1,4) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,4) = 432.000000 - pars_io_data_cbl%vegin_ratecs(2,4) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,4) = 300.000000 - pars_io_data_cbl%vegin_ratecp(1,4) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,4) = 12000.000000 - pars_io_data_cbl%vegin_ratecp(2,4) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,4) = 1029.000000 - pars_io_data_cbl%vegin_ratecp(3,4) = 0.140000 - pars_io_data_cbl%vegin_a1gs(4) = 9.000000 - pars_io_data_cbl%vegin_d0gs(4) = 1500.000000 - pars_io_data_cbl%vegin_alpha(4) = 0.200000 - pars_io_data_cbl%vegin_convex(4) = 0.700000 - pars_io_data_cbl%vegin_cfrd(4) = 0.015000 - pars_io_data_cbl%vegin_gswmin(4) = 0.010000 - pars_io_data_cbl%vegin_conkc0(4) = 0.000302 - pars_io_data_cbl%vegin_conko0(4) = 0.256000 - pars_io_data_cbl%vegin_ekc(4) = 59430.000000 - pars_io_data_cbl%vegin_eko(4) = 36000.000000 - pars_io_data_cbl%vegin_g0(4) = 0.000000 - pars_io_data_cbl%vegin_g1(4) = 4.447321 - pars_io_data_cbl%vegin_zr(4) = 2.000000 - pars_io_data_cbl%vegin_clitt(4) = 13.000000 - - !PFT: shrub - !========================================================= - pars_io_data_cbl%vegin_canst1(5) = 0.100000 - pars_io_data_cbl%vegin_length(5) = 0.100000 - pars_io_data_cbl%vegin_width(5) = 0.005000 - pars_io_data_cbl%vegin_vcmax(5) = 0.000040 - pars_io_data_cbl%vegin_ejmax(5) = 0.000000 - pars_io_data_cbl%vegin_hc(5) = 0.600000 - pars_io_data_cbl%vegin_xfang(5) = 0.010000 - pars_io_data_cbl%vegin_rp20(5) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(5) = 0.083200 - pars_io_data_cbl%vegin_rs20(5) = 1.000000 - pars_io_data_cbl%vegin_wai(5) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(5) = 0.964000 - pars_io_data_cbl%vegin_shelrb(5) = 2.000000 - pars_io_data_cbl%vegin_vegcf(5) = 5.000000 - pars_io_data_cbl%vegin_frac4(5) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(5) = 1.000000 - pars_io_data_cbl%vegin_extkn(5) = 0.001000 - pars_io_data_cbl%vegin_tminvj(5) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(5) = -10.000000 - pars_io_data_cbl%vegin_vbeta(5) = 4.000000 - pars_io_data_cbl%vegin_froot(1,5) = 0.200000 - pars_io_data_cbl%vegin_froot(2,5) = 0.200000 - pars_io_data_cbl%vegin_froot(3,5) = 0.200000 - pars_io_data_cbl%vegin_froot(4,5) = 0.200000 - pars_io_data_cbl%vegin_froot(5,5) = 0.200000 - pars_io_data_cbl%vegin_froot(6,5) = 0.200000 - pars_io_data_cbl%vegin_refl(1,5) = 0.090000 - pars_io_data_cbl%vegin_taul(1,5) = 0.090000 - pars_io_data_cbl%vegin_refl(2,5) = 0.300000 - pars_io_data_cbl%vegin_taul(2,5) = 0.300000 - pars_io_data_cbl%vegin_refl(3,5) = 0.010000 - pars_io_data_cbl%vegin_taul(3,5) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,5) = 100.000000 - pars_io_data_cbl%vegin_ratecs(1,5) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,5) = 250.000000 - pars_io_data_cbl%vegin_ratecs(2,5) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,5) = 159.000000 - pars_io_data_cbl%vegin_ratecp(1,5) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,5) = 5000.000000 - pars_io_data_cbl%vegin_ratecp(2,5) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,5) = 500.000000 - pars_io_data_cbl%vegin_ratecp(3,5) = 0.140000 - pars_io_data_cbl%vegin_a1gs(5) = 9.000000 - pars_io_data_cbl%vegin_d0gs(5) = 1500.000000 - pars_io_data_cbl%vegin_alpha(5) = 0.200000 - pars_io_data_cbl%vegin_convex(5) = 0.700000 - pars_io_data_cbl%vegin_cfrd(5) = 0.015000 - pars_io_data_cbl%vegin_gswmin(5) = 0.010000 - pars_io_data_cbl%vegin_conkc0(5) = 0.000302 - pars_io_data_cbl%vegin_conko0(5) = 0.256000 - pars_io_data_cbl%vegin_ekc(5) = 59430.000000 - pars_io_data_cbl%vegin_eko(5) = 36000.000000 - pars_io_data_cbl%vegin_g0(5) = 0.000000 - pars_io_data_cbl%vegin_g1(5) = 4.694803 - pars_io_data_cbl%vegin_zr(5) = 2.500000 - pars_io_data_cbl%vegin_clitt(5) = 2.000000 - - !PFT: C3 - !========================================================= - pars_io_data_cbl%vegin_canst1(6) = 0.100000 - pars_io_data_cbl%vegin_length(6) = 0.300000 - pars_io_data_cbl%vegin_width(6) = 0.010000 - pars_io_data_cbl%vegin_vcmax(6) = 0.000060 - pars_io_data_cbl%vegin_ejmax(6) = 0.000000 - pars_io_data_cbl%vegin_hc(6) = 0.567000 - pars_io_data_cbl%vegin_xfang(6) = -0.300000 - pars_io_data_cbl%vegin_rp20(6) = 1.500000 - pars_io_data_cbl%vegin_rpcoef(6) = 0.083200 - pars_io_data_cbl%vegin_rs20(6) = 1.000000 - pars_io_data_cbl%vegin_wai(6) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(6) = 0.943000 - pars_io_data_cbl%vegin_shelrb(6) = 2.000000 - pars_io_data_cbl%vegin_vegcf(6) = 7.000000 - pars_io_data_cbl%vegin_frac4(6) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(6) = 1.000000 - pars_io_data_cbl%vegin_extkn(6) = 0.001000 - pars_io_data_cbl%vegin_tminvj(6) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(6) = -10.000000 - pars_io_data_cbl%vegin_vbeta(6) = 4.000000 - pars_io_data_cbl%vegin_froot(1,6) = 0.150000 - pars_io_data_cbl%vegin_froot(2,6) = 0.150000 - pars_io_data_cbl%vegin_froot(3,6) = 0.150000 - pars_io_data_cbl%vegin_froot(4,6) = 0.150000 - pars_io_data_cbl%vegin_froot(5,6) = 0.150000 - pars_io_data_cbl%vegin_froot(6,6) = 0.150000 - pars_io_data_cbl%vegin_refl(1,6) = 0.110000 - pars_io_data_cbl%vegin_taul(1,6) = 0.110000 - pars_io_data_cbl%vegin_refl(2,6) = 0.340000 - pars_io_data_cbl%vegin_taul(2,6) = 0.340000 - pars_io_data_cbl%vegin_refl(3,6) = 0.010000 - pars_io_data_cbl%vegin_taul(3,6) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,6) = 275.000000 - pars_io_data_cbl%vegin_ratecs(1,6) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,6) = 314.000000 - pars_io_data_cbl%vegin_ratecs(2,6) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,6) = 250.000000 - pars_io_data_cbl%vegin_ratecp(1,6) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,6) = 0.000000 - pars_io_data_cbl%vegin_ratecp(2,6) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,6) = 500.000000 - pars_io_data_cbl%vegin_ratecp(3,6) = 0.140000 - pars_io_data_cbl%vegin_a1gs(6) = 9.000000 - pars_io_data_cbl%vegin_d0gs(6) = 1500.000000 - pars_io_data_cbl%vegin_alpha(6) = 0.200000 - pars_io_data_cbl%vegin_convex(6) = 0.700000 - pars_io_data_cbl%vegin_cfrd(6) = 0.015000 - pars_io_data_cbl%vegin_gswmin(6) = 0.010000 - pars_io_data_cbl%vegin_conkc0(6) = 0.000302 - pars_io_data_cbl%vegin_conko0(6) = 0.256000 - pars_io_data_cbl%vegin_ekc(6) = 59430.000000 - pars_io_data_cbl%vegin_eko(6) = 36000.000000 - pars_io_data_cbl%vegin_g0(6) = 0.000000 - pars_io_data_cbl%vegin_g1(6) = 5.248500 - pars_io_data_cbl%vegin_zr(6) = 0.500000 !1.5 in Haverd et al. (2016) - pars_io_data_cbl%vegin_clitt(6) = 2.000000 - - !PFT: C4 - !========================================================= - pars_io_data_cbl%vegin_canst1(7) = 0.100000 - pars_io_data_cbl%vegin_length(7) = 0.300000 - pars_io_data_cbl%vegin_width(7) = 0.010000 - pars_io_data_cbl%vegin_vcmax(7) = 0.000010 - pars_io_data_cbl%vegin_ejmax(7) = 0.000000 - pars_io_data_cbl%vegin_hc(7) = 0.567000 - pars_io_data_cbl%vegin_xfang(7) = -0.300000 - pars_io_data_cbl%vegin_rp20(7) = 2.800000 - pars_io_data_cbl%vegin_rpcoef(7) = 0.083200 - pars_io_data_cbl%vegin_rs20(7) = 1.000000 - pars_io_data_cbl%vegin_wai(7) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(7) = 0.943000 - pars_io_data_cbl%vegin_shelrb(7) = 2.000000 - pars_io_data_cbl%vegin_vegcf(7) = 7.000000 - pars_io_data_cbl%vegin_frac4(7) = 1.000000 - pars_io_data_cbl%vegin_xalbnir(7) = 1.000000 - pars_io_data_cbl%vegin_extkn(7) = 0.001000 - pars_io_data_cbl%vegin_tminvj(7) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(7) = -10.000000 - pars_io_data_cbl%vegin_vbeta(7) = 4.000000 - pars_io_data_cbl%vegin_froot(1,7) = 0.000000 - pars_io_data_cbl%vegin_froot(2,7) = 0.000000 - pars_io_data_cbl%vegin_froot(3,7) = 0.000000 - pars_io_data_cbl%vegin_froot(4,7) = 0.000000 - pars_io_data_cbl%vegin_froot(5,7) = 0.000000 - pars_io_data_cbl%vegin_froot(6,7) = 0.000000 - pars_io_data_cbl%vegin_refl(1,7) = 0.110000 - pars_io_data_cbl%vegin_taul(1,7) = 0.110000 - pars_io_data_cbl%vegin_refl(2,7) = 0.340000 - pars_io_data_cbl%vegin_taul(2,7) = 0.340000 - pars_io_data_cbl%vegin_refl(3,7) = 0.010000 - pars_io_data_cbl%vegin_taul(3,7) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,7) = 275.000000 - pars_io_data_cbl%vegin_ratecs(1,7) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,7) = 314.000000 - pars_io_data_cbl%vegin_ratecs(2,7) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,7) = 250.000000 - pars_io_data_cbl%vegin_ratecp(1,7) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,7) = 0.000000 - pars_io_data_cbl%vegin_ratecp(2,7) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,7) = 500.000000 - pars_io_data_cbl%vegin_ratecp(3,7) = 0.140000 - pars_io_data_cbl%vegin_a1gs(7) = 4.000000 - pars_io_data_cbl%vegin_d0gs(7) = 1500.000000 - pars_io_data_cbl%vegin_alpha(7) = 0.050000 - pars_io_data_cbl%vegin_convex(7) = 0.800000 - pars_io_data_cbl%vegin_cfrd(7) = 0.025000 - pars_io_data_cbl%vegin_gswmin(7) = 0.040000 - pars_io_data_cbl%vegin_conkc0(7) = 0.000302 - pars_io_data_cbl%vegin_conko0(7) = 0.256000 - pars_io_data_cbl%vegin_ekc(7) = 59430.000000 - pars_io_data_cbl%vegin_eko(7) = 36000.000000 - pars_io_data_cbl%vegin_g0(7) = 0.000000 - pars_io_data_cbl%vegin_g1(7) = 1.616178 - pars_io_data_cbl%vegin_zr(7) = 0.500000 !2.4 in Haverd et al. (2016) - pars_io_data_cbl%vegin_clitt(7) = 0.300000 - - !PFT: Tundra - !========================================================= - pars_io_data_cbl%vegin_canst1(8) = 0.100000 - pars_io_data_cbl%vegin_length(8) = 0.300000 - pars_io_data_cbl%vegin_width(8) = 0.010000 - pars_io_data_cbl%vegin_vcmax(8) = 0.000040 - pars_io_data_cbl%vegin_ejmax(8) = 0.000000 - pars_io_data_cbl%vegin_hc(8) = 0.567000 - pars_io_data_cbl%vegin_xfang(8) = -0.300000 - pars_io_data_cbl%vegin_rp20(8) = 2.500000 - pars_io_data_cbl%vegin_rpcoef(8) = 0.083200 - pars_io_data_cbl%vegin_rs20(8) = 1.000000 - pars_io_data_cbl%vegin_wai(8) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(8) = 0.943000 - pars_io_data_cbl%vegin_shelrb(8) = 2.000000 - pars_io_data_cbl%vegin_vegcf(8) = 5.000000 - pars_io_data_cbl%vegin_frac4(8) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(8) = 1.000000 - pars_io_data_cbl%vegin_extkn(8) = 0.001000 - pars_io_data_cbl%vegin_tminvj(8) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(8) = -10.000000 - pars_io_data_cbl%vegin_vbeta(8) = 4.000000 - pars_io_data_cbl%vegin_froot(1,8) = 0.000000 - pars_io_data_cbl%vegin_froot(2,8) = 0.000000 - pars_io_data_cbl%vegin_froot(3,8) = 0.000000 - pars_io_data_cbl%vegin_froot(4,8) = 0.000000 - pars_io_data_cbl%vegin_froot(5,8) = 0.000000 - pars_io_data_cbl%vegin_froot(6,8) = 0.000000 - pars_io_data_cbl%vegin_refl(1,8) = 0.075000 - pars_io_data_cbl%vegin_taul(1,8) = 0.075000 - pars_io_data_cbl%vegin_refl(2,8) = 0.320000 - pars_io_data_cbl%vegin_taul(2,8) = 0.320000 - pars_io_data_cbl%vegin_refl(3,8) = 0.010000 - pars_io_data_cbl%vegin_taul(3,8) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,8) = 275.000000 - pars_io_data_cbl%vegin_ratecs(1,8) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,8) = 314.000000 - pars_io_data_cbl%vegin_ratecs(2,8) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,8) = 250.000000 - pars_io_data_cbl%vegin_ratecp(1,8) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,8) = 0.000000 - pars_io_data_cbl%vegin_ratecp(2,8) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,8) = 500.000000 - pars_io_data_cbl%vegin_ratecp(3,8) = 0.140000 - pars_io_data_cbl%vegin_a1gs(8) = 9.000000 - pars_io_data_cbl%vegin_d0gs(8) = 1500.000000 - pars_io_data_cbl%vegin_alpha(8) = 0.200000 - pars_io_data_cbl%vegin_convex(8) = 0.700000 - pars_io_data_cbl%vegin_cfrd(8) = 0.015000 - pars_io_data_cbl%vegin_gswmin(8) = 0.010000 - pars_io_data_cbl%vegin_conkc0(8) = 0.000302 - pars_io_data_cbl%vegin_conko0(8) = 0.256000 - pars_io_data_cbl%vegin_ekc(8) = 59430.000000 - pars_io_data_cbl%vegin_eko(8) = 36000.000000 - pars_io_data_cbl%vegin_g0(8) = 0.000000 - pars_io_data_cbl%vegin_g1(8) = 2.222156 - pars_io_data_cbl%vegin_zr(8) = 0.500000 - pars_io_data_cbl%vegin_clitt(8) = 0.300000 - - !PFT: C3 - !========================================================= - pars_io_data_cbl%vegin_canst1(9) = 0.100000 - pars_io_data_cbl%vegin_length(9) = 0.300000 - pars_io_data_cbl%vegin_width(9) = 0.010000 - pars_io_data_cbl%vegin_vcmax(9) = 0.000080 - pars_io_data_cbl%vegin_ejmax(9) = 0.000000 - pars_io_data_cbl%vegin_hc(9) = 0.550000 - pars_io_data_cbl%vegin_xfang(9) = -0.300000 - pars_io_data_cbl%vegin_rp20(9) = 1.500000 - pars_io_data_cbl%vegin_rpcoef(9) = 0.083200 - pars_io_data_cbl%vegin_rs20(9) = 1.000000 - pars_io_data_cbl%vegin_wai(9) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(9) = 0.961000 - pars_io_data_cbl%vegin_shelrb(9) = 2.000000 - pars_io_data_cbl%vegin_vegcf(9) = 7.000000 - pars_io_data_cbl%vegin_frac4(9) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(9) = 1.000000 - pars_io_data_cbl%vegin_extkn(9) = 0.001000 - pars_io_data_cbl%vegin_tminvj(9) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(9) = -10.000000 - pars_io_data_cbl%vegin_vbeta(9) = 2.000000 - pars_io_data_cbl%vegin_froot(1,9) = 0.000000 - pars_io_data_cbl%vegin_froot(2,9) = 0.000000 - pars_io_data_cbl%vegin_froot(3,9) = 0.000000 - pars_io_data_cbl%vegin_froot(4,9) = 0.000000 - pars_io_data_cbl%vegin_froot(5,9) = 0.000000 - pars_io_data_cbl%vegin_froot(6,9) = 0.000000 - pars_io_data_cbl%vegin_refl(1,9) = 0.110000 - pars_io_data_cbl%vegin_taul(1,9) = 0.110000 - pars_io_data_cbl%vegin_refl(2,9) = 0.340000 - pars_io_data_cbl%vegin_taul(2,9) = 0.340000 - pars_io_data_cbl%vegin_refl(3,9) = 0.010000 - pars_io_data_cbl%vegin_taul(3,9) = 0.010000 - pars_io_data_cbl%vegin_csoil(1,9) = 149.000000 - pars_io_data_cbl%vegin_ratecs(1,9) = 2.000000 - pars_io_data_cbl%vegin_csoil(2,9) = 300.000000 - pars_io_data_cbl%vegin_ratecs(2,9) = 0.500000 - pars_io_data_cbl%vegin_cplant(1,9) = 150.000000 - pars_io_data_cbl%vegin_ratecp(1,9) = 1.000000 - pars_io_data_cbl%vegin_cplant(2,9) = 0.000000 - pars_io_data_cbl%vegin_ratecp(2,9) = 0.030000 - pars_io_data_cbl%vegin_cplant(3,9) = 607.000000 - pars_io_data_cbl%vegin_ratecp(3,9) = 0.140000 - pars_io_data_cbl%vegin_a1gs(9) = 9.000000 - pars_io_data_cbl%vegin_d0gs(9) = 1500.000000 - pars_io_data_cbl%vegin_alpha(9) = 0.200000 - pars_io_data_cbl%vegin_convex(9) = 0.700000 - pars_io_data_cbl%vegin_cfrd(9) = 0.015000 - pars_io_data_cbl%vegin_gswmin(9) = 0.010000 - pars_io_data_cbl%vegin_conkc0(9) = 0.000302 - pars_io_data_cbl%vegin_conko0(9) = 0.256000 - pars_io_data_cbl%vegin_ekc(9) = 59430.000000 - pars_io_data_cbl%vegin_eko(9) = 36000.000000 - pars_io_data_cbl%vegin_g0(9) = 0.000000 - pars_io_data_cbl%vegin_g1(9) = 5.789377 - pars_io_data_cbl%vegin_zr(9) = 0.500000 !1.5 in Haverd et al. (2016) - pars_io_data_cbl%vegin_clitt(9) = 0.000000 - - !PFT: C4 - !========================================================= - pars_io_data_cbl%vegin_canst1(10) = 0.100000 - pars_io_data_cbl%vegin_length(10) = 0.300000 - pars_io_data_cbl%vegin_width(10) = 0.010000 - pars_io_data_cbl%vegin_vcmax(10) = 0.000080 - pars_io_data_cbl%vegin_ejmax(10) = 0.000000 - pars_io_data_cbl%vegin_hc(10) = 0.550000 - pars_io_data_cbl%vegin_xfang(10) = -0.300000 - pars_io_data_cbl%vegin_rp20(10) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(10) = 0.083200 - pars_io_data_cbl%vegin_rs20(10) = 1.000000 - pars_io_data_cbl%vegin_wai(10) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(10) = 0.961000 - pars_io_data_cbl%vegin_shelrb(10) = 2.000000 - pars_io_data_cbl%vegin_vegcf(10) = 1.000000 - pars_io_data_cbl%vegin_frac4(10) = 1.000000 - pars_io_data_cbl%vegin_xalbnir(10) = 1.000000 - pars_io_data_cbl%vegin_extkn(10) = 0.001000 - pars_io_data_cbl%vegin_tminvj(10) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(10) = -10.000000 - pars_io_data_cbl%vegin_vbeta(10) = 2.000000 - pars_io_data_cbl%vegin_froot( 1,10) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,10) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,10) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,10) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,10) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,10) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,10) = 0.110000 - pars_io_data_cbl%vegin_taul( 1,10) = 0.110000 - pars_io_data_cbl%vegin_refl( 2,10) = 0.340000 - pars_io_data_cbl%vegin_taul( 2,10) = 0.340000 - pars_io_data_cbl%vegin_refl( 3,10) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,10) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,10) = 149.000000 - pars_io_data_cbl%vegin_ratecs( 1,10) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,10) = 300.000000 - pars_io_data_cbl%vegin_ratecs( 2,10) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,10) = 150.000000 - pars_io_data_cbl%vegin_ratecp( 1,10) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,10) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,10) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,10) = 607.000000 - pars_io_data_cbl%vegin_ratecp( 3,10) = 0.140000 - pars_io_data_cbl%vegin_a1gs(10) = 4.000000 - pars_io_data_cbl%vegin_d0gs(10) = 1500.000000 - pars_io_data_cbl%vegin_alpha(10) = 0.050000 - pars_io_data_cbl%vegin_convex(10) = 0.800000 - pars_io_data_cbl%vegin_cfrd(10) = 0.025000 - pars_io_data_cbl%vegin_gswmin(10) = 0.040000 - pars_io_data_cbl%vegin_conkc0(10) = 0.000302 - pars_io_data_cbl%vegin_conko0(10) = 0.256000 - pars_io_data_cbl%vegin_ekc(10) = 59430.000000 - pars_io_data_cbl%vegin_eko(10) = 36000.000000 - pars_io_data_cbl%vegin_g0(10) = 0.000000 - pars_io_data_cbl%vegin_g1(10) = 1.616178 - pars_io_data_cbl%vegin_zr(10) = 0.500000 !1.5 in Haverd et al. (2016) - pars_io_data_cbl%vegin_clitt(10) = 0.000000 - - !PFT: wetland - !========================================================= - pars_io_data_cbl%vegin_canst1(11) = 0.100000 - pars_io_data_cbl%vegin_length(11) = 0.300000 - pars_io_data_cbl%vegin_width(11) = 0.010000 - pars_io_data_cbl%vegin_vcmax(11) = 0.000060 - pars_io_data_cbl%vegin_ejmax(11) = 0.000000 - pars_io_data_cbl%vegin_hc(11) = 0.567000 - pars_io_data_cbl%vegin_xfang(11) = -0.300000 - pars_io_data_cbl%vegin_rp20(11) = 1.500000 - pars_io_data_cbl%vegin_rpcoef(11) = 0.083200 - pars_io_data_cbl%vegin_rs20(11) = 1.000000 - pars_io_data_cbl%vegin_wai(11) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(11) = 0.943000 - pars_io_data_cbl%vegin_shelrb(11) = 2.000000 - pars_io_data_cbl%vegin_vegcf(11) = 7.000000 - pars_io_data_cbl%vegin_frac4(11) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(11) = 1.000000 - pars_io_data_cbl%vegin_extkn(11) = 0.001000 - pars_io_data_cbl%vegin_tminvj(11) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(11) = -10.000000 - pars_io_data_cbl%vegin_vbeta(11) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,11) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,11) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,11) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,11) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,11) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,11) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,11) = 0.108000 - pars_io_data_cbl%vegin_taul( 1,11) = 0.075000 - pars_io_data_cbl%vegin_refl( 2,11) = 0.343000 - pars_io_data_cbl%vegin_taul( 2,11) = 0.146000 - pars_io_data_cbl%vegin_refl( 3,11) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,11) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,11) = 275.000000 - pars_io_data_cbl%vegin_ratecs( 1,11) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,11) = 314.000000 - pars_io_data_cbl%vegin_ratecs( 2,11) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,11) = 250.000000 - pars_io_data_cbl%vegin_ratecp( 1,11) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,11) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,11) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,11) = 500.000000 - pars_io_data_cbl%vegin_ratecp( 3,11) = 0.140000 - pars_io_data_cbl%vegin_a1gs(11) = 9.000000 - pars_io_data_cbl%vegin_d0gs(11) = 1500.000000 - pars_io_data_cbl%vegin_alpha(11) = 0.200000 - pars_io_data_cbl%vegin_convex(11) = 0.700000 - pars_io_data_cbl%vegin_cfrd(11) = 0.015000 - pars_io_data_cbl%vegin_gswmin(11) = 0.010000 - pars_io_data_cbl%vegin_conkc0(11) = 0.000302 - pars_io_data_cbl%vegin_conko0(11) = 0.256000 - pars_io_data_cbl%vegin_ekc(11) = 59430.000000 - pars_io_data_cbl%vegin_eko(11) = 36000.000000 - pars_io_data_cbl%vegin_g0(11) = 0.000000 - pars_io_data_cbl%vegin_g1(11) = 5.248500 - pars_io_data_cbl%vegin_zr(11) = 1.800000 - pars_io_data_cbl%vegin_clitt(11) = 2.000000 - - !PFT: empty - !========================================================= - pars_io_data_cbl%vegin_canst1(12) = 0.100000 - pars_io_data_cbl%vegin_length(12) = 0.030000 - pars_io_data_cbl%vegin_width(12) = 0.003000 - pars_io_data_cbl%vegin_vcmax(12) = 0.000017 - pars_io_data_cbl%vegin_ejmax(12) = 0.000000 - pars_io_data_cbl%vegin_hc(12) = 0.200000 - pars_io_data_cbl%vegin_xfang(12) = 0.100000 - pars_io_data_cbl%vegin_rp20(12) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(12) = 0.083200 - pars_io_data_cbl%vegin_rs20(12) = 0.000000 - pars_io_data_cbl%vegin_wai(12) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(12) = 0.975000 - pars_io_data_cbl%vegin_shelrb(12) = 2.000000 - pars_io_data_cbl%vegin_vegcf(12) = 1.000000 - pars_io_data_cbl%vegin_frac4(12) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(12) = 1.000000 - pars_io_data_cbl%vegin_extkn(12) = 0.001000 - pars_io_data_cbl%vegin_tminvj(12) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(12) = -10.000000 - pars_io_data_cbl%vegin_vbeta(12) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,12) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,12) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,12) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,12) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,12) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,12) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,12) = 0.055000 - pars_io_data_cbl%vegin_taul( 1,12) = 0.023000 - pars_io_data_cbl%vegin_refl( 2,12) = 0.190000 - pars_io_data_cbl%vegin_taul( 2,12) = 0.198000 - pars_io_data_cbl%vegin_refl( 3,12) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,12) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,12) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 1,12) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,12) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 2,12) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,12) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 1,12) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,12) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,12) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,12) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 3,12) = 0.140000 - pars_io_data_cbl%vegin_a1gs(12) = 9.000000 - pars_io_data_cbl%vegin_d0gs(12) = 1500.000000 - pars_io_data_cbl%vegin_alpha(12) = 0.200000 - pars_io_data_cbl%vegin_convex(12) = 0.700000 - pars_io_data_cbl%vegin_cfrd(12) = 0.015000 - pars_io_data_cbl%vegin_gswmin(12) = 0.010000 - pars_io_data_cbl%vegin_conkc0(12) = 0.000302 - pars_io_data_cbl%vegin_conko0(12) = 0.256000 - pars_io_data_cbl%vegin_ekc(12) = 59430.000000 - pars_io_data_cbl%vegin_eko(12) = 36000.000000 - pars_io_data_cbl%vegin_g0(12) = 0.000000 - pars_io_data_cbl%vegin_g1(12) = 5.248500 - pars_io_data_cbl%vegin_zr(12) = 3.100000 - pars_io_data_cbl%vegin_clitt(12) = 2.000000 - - !PFT: empty - !========================================================= - pars_io_data_cbl%vegin_canst1(13) = 0.100000 - pars_io_data_cbl%vegin_length(13) = 0.242000 - pars_io_data_cbl%vegin_width(13) = 0.015000 - pars_io_data_cbl%vegin_vcmax(13) = 0.000001 - pars_io_data_cbl%vegin_ejmax(13) = 0.000000 - pars_io_data_cbl%vegin_hc(13) = 6.017000 - pars_io_data_cbl%vegin_xfang(13) = 0.000000 - pars_io_data_cbl%vegin_rp20(13) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(13) = 0.083200 - pars_io_data_cbl%vegin_rs20(13) = 1.000000 - pars_io_data_cbl%vegin_wai(13) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(13) = 0.961000 - pars_io_data_cbl%vegin_shelrb(13) = 2.000000 - pars_io_data_cbl%vegin_vegcf(13) = 1.000000 - pars_io_data_cbl%vegin_frac4(13) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(13) = 1.000000 - pars_io_data_cbl%vegin_extkn(13) = 0.001000 - pars_io_data_cbl%vegin_tminvj(13) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(13) = -10.000000 - pars_io_data_cbl%vegin_vbeta(13) = 2.000000 - pars_io_data_cbl%vegin_froot( 1,13) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,13) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,13) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,13) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,13) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,13) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,13) = 0.091000 - pars_io_data_cbl%vegin_taul( 1,13) = 0.059000 - pars_io_data_cbl%vegin_refl( 2,13) = 0.310000 - pars_io_data_cbl%vegin_taul( 2,13) = 0.163000 - pars_io_data_cbl%vegin_refl( 3,13) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,13) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,13) = 0.100000 - pars_io_data_cbl%vegin_ratecs( 1,13) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,13) = 0.100000 - pars_io_data_cbl%vegin_ratecs( 2,13) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,13) = 0.100000 - pars_io_data_cbl%vegin_ratecp( 1,13) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,13) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,13) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,13) = 0.100000 - pars_io_data_cbl%vegin_ratecp( 3,13) = 0.140000 - pars_io_data_cbl%vegin_a1gs(13) = 9.000000 - pars_io_data_cbl%vegin_d0gs(13) = 1500.000000 - pars_io_data_cbl%vegin_alpha(13) = 0.200000 - pars_io_data_cbl%vegin_convex(13) = 0.700000 - pars_io_data_cbl%vegin_cfrd(13) = 0.015000 - pars_io_data_cbl%vegin_gswmin(13) = 0.010000 - pars_io_data_cbl%vegin_conkc0(13) = 0.000302 - pars_io_data_cbl%vegin_conko0(13) = 0.256000 - pars_io_data_cbl%vegin_ekc(13) = 59430.000000 - pars_io_data_cbl%vegin_eko(13) = 36000.000000 - pars_io_data_cbl%vegin_g0(13) = 0.000000 - pars_io_data_cbl%vegin_g1(13) = 0.000000 - pars_io_data_cbl%vegin_zr(13) = 3.000000 - pars_io_data_cbl%vegin_clitt(13) = 0.000000 - - !PFT: barren - !========================================================= - pars_io_data_cbl%vegin_canst1(14) = 0.100000 - pars_io_data_cbl%vegin_length(14) = 0.030000 - pars_io_data_cbl%vegin_width(14) = 0.001000 - pars_io_data_cbl%vegin_vcmax(14) = 0.000017 - pars_io_data_cbl%vegin_ejmax(14) = 0.000000 - pars_io_data_cbl%vegin_hc(14) = 0.200000 - pars_io_data_cbl%vegin_xfang(14) = 0.000000 - pars_io_data_cbl%vegin_rp20(14) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(14) = 0.083200 - pars_io_data_cbl%vegin_rs20(14) = 0.000000 - pars_io_data_cbl%vegin_wai(14) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(14) = 0.961000 - pars_io_data_cbl%vegin_shelrb(14) = 2.000000 - pars_io_data_cbl%vegin_vegcf(14) = 1.000000 - pars_io_data_cbl%vegin_frac4(14) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(14) = 1.000000 - pars_io_data_cbl%vegin_extkn(14) = 0.001000 - pars_io_data_cbl%vegin_tminvj(14) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(14) = -10.000000 - pars_io_data_cbl%vegin_vbeta(14) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,14) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,14) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,14) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,14) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,14) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,14) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,14) = 0.238000 - pars_io_data_cbl%vegin_taul( 1,14) = 0.039000 - pars_io_data_cbl%vegin_refl( 2,14) = 0.457000 - pars_io_data_cbl%vegin_taul( 2,14) = 0.189000 - pars_io_data_cbl%vegin_refl( 3,14) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,14) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,14) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 1,14) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,14) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 2,14) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,14) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 1,14) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,14) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,14) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,14) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 3,14) = 0.140000 - pars_io_data_cbl%vegin_a1gs(14) = 9.000000 - pars_io_data_cbl%vegin_d0gs(14) = 1500.000000 - pars_io_data_cbl%vegin_alpha(14) = 0.200000 - pars_io_data_cbl%vegin_convex(14) = 0.700000 - pars_io_data_cbl%vegin_cfrd(14) = 0.015000 - pars_io_data_cbl%vegin_gswmin(14) = 0.010000 - pars_io_data_cbl%vegin_conkc0(14) = 0.000302 - pars_io_data_cbl%vegin_conko0(14) = 0.256000 - pars_io_data_cbl%vegin_ekc(14) = 59430.000000 - pars_io_data_cbl%vegin_eko(14) = 36000.000000 - pars_io_data_cbl%vegin_g0(14) = 0.000000 - pars_io_data_cbl%vegin_g1(14) = 5.248500 - pars_io_data_cbl%vegin_zr(14) = 1.000000 - pars_io_data_cbl%vegin_clitt(14) = 0.000000 - - !PFT: urban - !========================================================= - pars_io_data_cbl%vegin_canst1(15) = 0.100000 - pars_io_data_cbl%vegin_length(15) = 0.030000 - pars_io_data_cbl%vegin_width(15) = 0.001000 - pars_io_data_cbl%vegin_vcmax(15) = 0.000017 - pars_io_data_cbl%vegin_ejmax(15) = 0.000000 - pars_io_data_cbl%vegin_hc(15) = 0.200000 - pars_io_data_cbl%vegin_xfang(15) = 0.000000 - pars_io_data_cbl%vegin_rp20(15) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(15) = 0.083200 - pars_io_data_cbl%vegin_rs20(15) = 0.000000 - pars_io_data_cbl%vegin_wai(15) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(15) = 0.961000 - pars_io_data_cbl%vegin_shelrb(15) = 2.000000 - pars_io_data_cbl%vegin_vegcf(15) = 1.000000 - pars_io_data_cbl%vegin_frac4(15) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(15) = 1.000000 - pars_io_data_cbl%vegin_extkn(15) = 0.001000 - pars_io_data_cbl%vegin_tminvj(15) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(15) = -10.000000 - pars_io_data_cbl%vegin_vbeta(15) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,15) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,15) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,15) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,15) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,15) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,15) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,15) = 0.143000 - pars_io_data_cbl%vegin_taul( 1,15) = 0.023000 - pars_io_data_cbl%vegin_refl( 2,15) = 0.275000 - pars_io_data_cbl%vegin_taul( 2,15) = 0.113000 - pars_io_data_cbl%vegin_refl( 3,15) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,15) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,15) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 1,15) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,15) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 2,15) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,15) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 1,15) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,15) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,15) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,15) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 3,15) = 0.140000 - pars_io_data_cbl%vegin_a1gs(15) = 9.000000 - pars_io_data_cbl%vegin_d0gs(15) = 1500.000000 - pars_io_data_cbl%vegin_alpha(15) = 0.200000 - pars_io_data_cbl%vegin_convex(15) = 0.700000 - pars_io_data_cbl%vegin_cfrd(15) = 0.015000 - pars_io_data_cbl%vegin_gswmin(15) = 0.010000 - pars_io_data_cbl%vegin_conkc0(15) = 0.000302 - pars_io_data_cbl%vegin_conko0(15) = 0.256000 - pars_io_data_cbl%vegin_ekc(15) = 59430.000000 - pars_io_data_cbl%vegin_eko(15) = 36000.000000 - pars_io_data_cbl%vegin_g0(15) = 0.000000 - pars_io_data_cbl%vegin_g1(15) = 5.248500 - pars_io_data_cbl%vegin_zr(15) = 1.000000 - pars_io_data_cbl%vegin_clitt(15) = 0.000000 - - !PFT: lakes - !========================================================= - pars_io_data_cbl%vegin_canst1(16) = 0.100000 - pars_io_data_cbl%vegin_length(16) = 0.030000 - pars_io_data_cbl%vegin_width(16) = 0.001000 - pars_io_data_cbl%vegin_vcmax(16) = 0.000017 - pars_io_data_cbl%vegin_ejmax(16) = 0.000000 - pars_io_data_cbl%vegin_hc(16) = 0.200000 - pars_io_data_cbl%vegin_xfang(16) = 0.000000 - pars_io_data_cbl%vegin_rp20(16) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(16) = 0.083200 - pars_io_data_cbl%vegin_rs20(16) = 0.000000 - pars_io_data_cbl%vegin_wai(16) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(16) = 0.961000 - pars_io_data_cbl%vegin_shelrb(16) = 2.000000 - pars_io_data_cbl%vegin_vegcf(16) = 1.000000 - pars_io_data_cbl%vegin_frac4(16) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(16) = 1.000000 - pars_io_data_cbl%vegin_extkn(16) = 0.001000 - pars_io_data_cbl%vegin_tminvj(16) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(16) = -10.000000 - pars_io_data_cbl%vegin_vbeta(16) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,16) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,16) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,16) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,16) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,16) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,16) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,16) = 0.143000 - pars_io_data_cbl%vegin_taul( 1,16) = 0.023000 - pars_io_data_cbl%vegin_refl( 2,16) = 0.275000 - pars_io_data_cbl%vegin_taul( 2,16) = 0.113000 - pars_io_data_cbl%vegin_refl( 3,16) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,16) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,16) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 1,16) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,16) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 2,16) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,16) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 1,16) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,16) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,16) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,16) = 1.000000 - pars_io_data_cbl%vegin_ratecp( 3,16) = 0.140000 - pars_io_data_cbl%vegin_a1gs(16) = 9.000000 - pars_io_data_cbl%vegin_d0gs(16) = 1500.000000 - pars_io_data_cbl%vegin_alpha(16) = 0.200000 - pars_io_data_cbl%vegin_convex(16) = 0.700000 - pars_io_data_cbl%vegin_cfrd(16) = 0.015000 - pars_io_data_cbl%vegin_gswmin(16) = 0.010000 - pars_io_data_cbl%vegin_conkc0(16) = 0.000302 - pars_io_data_cbl%vegin_conko0(16) = 0.256000 - pars_io_data_cbl%vegin_ekc(16) = 59430.000000 - pars_io_data_cbl%vegin_eko(16) = 36000.000000 - pars_io_data_cbl%vegin_g0(16) = 0.000000 - pars_io_data_cbl%vegin_g1(16) = 5.248500 - pars_io_data_cbl%vegin_zr(16) = 1.000000 - pars_io_data_cbl%vegin_clitt(16) = 0.000000 - - !PFT: ice - !========================================================= - pars_io_data_cbl%vegin_canst1(17) = 0.100000 - pars_io_data_cbl%vegin_length(17) = 0.030000 - pars_io_data_cbl%vegin_width(17) = 0.001000 - pars_io_data_cbl%vegin_vcmax(17) = 0.000017 - pars_io_data_cbl%vegin_ejmax(17) = 0.000000 - pars_io_data_cbl%vegin_hc(17) = 0.200000 - pars_io_data_cbl%vegin_xfang(17) = 0.000000 - pars_io_data_cbl%vegin_rp20(17) = 1.000000 - pars_io_data_cbl%vegin_rpcoef(17) = 0.083200 - pars_io_data_cbl%vegin_rs20(17) = 0.000000 - pars_io_data_cbl%vegin_wai(17) = 0.000000 - pars_io_data_cbl%vegin_rootbeta(17) = 0.961000 - pars_io_data_cbl%vegin_shelrb(17) = 2.000000 - pars_io_data_cbl%vegin_vegcf(17) = 1.000000 - pars_io_data_cbl%vegin_frac4(17) = 0.000000 - pars_io_data_cbl%vegin_xalbnir(17) = 1.000000 - pars_io_data_cbl%vegin_extkn(17) = 0.001000 - pars_io_data_cbl%vegin_tminvj(17) = -15.000000 - pars_io_data_cbl%vegin_tmaxvj(17) = -10.000000 - pars_io_data_cbl%vegin_vbeta(17) = 4.000000 - pars_io_data_cbl%vegin_froot( 1,17) = 0.000000 - pars_io_data_cbl%vegin_froot( 2,17) = 0.000000 - pars_io_data_cbl%vegin_froot( 3,17) = 0.000000 - pars_io_data_cbl%vegin_froot( 4,17) = 0.000000 - pars_io_data_cbl%vegin_froot( 5,17) = 0.000000 - pars_io_data_cbl%vegin_froot( 6,17) = 0.000000 - pars_io_data_cbl%vegin_refl( 1,17) = 0.159000 - pars_io_data_cbl%vegin_taul( 1,17) = 0.026000 - pars_io_data_cbl%vegin_refl( 2,17) = 0.305000 - pars_io_data_cbl%vegin_taul( 2,17) = 0.113000 - pars_io_data_cbl%vegin_refl( 3,17) = 0.010000 - pars_io_data_cbl%vegin_taul( 3,17) = 0.010000 - pars_io_data_cbl%vegin_csoil( 1,17) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 1,17) = 2.000000 - pars_io_data_cbl%vegin_csoil( 2,17) = 1.000000 - pars_io_data_cbl%vegin_ratecs( 2,17) = 0.500000 - pars_io_data_cbl%vegin_cplant( 1,17) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 1,17) = 1.000000 - pars_io_data_cbl%vegin_cplant( 2,17) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 2,17) = 0.030000 - pars_io_data_cbl%vegin_cplant( 3,17) = 0.000000 - pars_io_data_cbl%vegin_ratecp( 3,17) = 0.140000 - pars_io_data_cbl%vegin_a1gs(17) = 9.000000 - pars_io_data_cbl%vegin_d0gs(17) = 1500.000000 - pars_io_data_cbl%vegin_alpha(17) = 0.200000 - pars_io_data_cbl%vegin_convex(17) = 0.700000 - pars_io_data_cbl%vegin_cfrd(17) = 0.015000 - pars_io_data_cbl%vegin_gswmin(17) = 0.010000 - pars_io_data_cbl%vegin_conkc0(17) = 0.000302 - pars_io_data_cbl%vegin_conko0(17) = 0.256000 - pars_io_data_cbl%vegin_ekc(17) = 59430.000000 - pars_io_data_cbl%vegin_eko(17) = 36000.000000 - pars_io_data_cbl%vegin_g0(17) = 0.000000 - pars_io_data_cbl%vegin_g1(17) = 5.248500 - pars_io_data_cbl%vegin_zr(17) = 1.000000 - pars_io_data_cbl%vegin_clitt(17) = 0.000000 - - ! new calculation dleaf since April 2012 (cable v1.8 did not use width) - pars_io_data_cbl%vegin_dleaf = SQRT(pars_io_data_cbl%vegin_width * pars_io_data_cbl%vegin_length) - -End subroutine cable_pft_params - -END MODULE cable_pft_params_mod - diff --git a/src/coupled/AM3/initialisation/cable_soil_params.F90 b/src/coupled/AM3/initialisation/cable_soil_params.F90 deleted file mode 100644 index 9372e1f92..000000000 --- a/src/coupled/AM3/initialisation/cable_soil_params.F90 +++ /dev/null @@ -1,150 +0,0 @@ -MODULE cable_soil_params_mod - - IMPLICIT NONE - -CONTAINS - -subroutine cable_soil_params(pars_io_cbl) - - ! Gets parameter values for each vegetation type and soil type. - -USE params_io_mod_cbl, ONLY: params_io_data_type - - IMPLICIT NONE - - TYPE(params_io_data_type), TARGET :: pars_io_cbl - - - !SOIL parameters: description and corresponding variable name in code. - !SOIL parameters are assigned as TYPE pars_io_cbl%soilin_ but later used as soil% - -!SOIL: Coarse sand/Loamy sand -! ========================================================= - pars_io_cbl%soilin_silt( 1) = 0.080000 - pars_io_cbl%soilin_clay( 1) = 0.090000 - pars_io_cbl%soilin_sand( 1) = 0.830000 - pars_io_cbl%soilin_swilt( 1) = 0.072000 - pars_io_cbl%soilin_sfc( 1) = 0.143000 - pars_io_cbl%soilin_ssat( 1) = 0.398000 - pars_io_cbl%soilin_bch( 1) = 4.200000 - pars_io_cbl%soilin_hyds( 1) = 0.000166 - pars_io_cbl%soilin_sucs( 1) = -0.106000 - pars_io_cbl%soilin_rhosoil( 1) = 1600.000000 - pars_io_cbl%soilin_css( 1) = 850.000000 - - !SOIL: Medium clay loam/silty clay loam/silt loam - !========================================================= - pars_io_cbl%soilin_silt( 2) = 0.330000 - pars_io_cbl%soilin_clay( 2) = 0.300000 - pars_io_cbl%soilin_sand( 2) = 0.370000 - pars_io_cbl%soilin_swilt( 2) = 0.216000 - pars_io_cbl%soilin_sfc( 2) = 0.301000 - pars_io_cbl%soilin_ssat( 2) = 0.479000 - pars_io_cbl%soilin_bch( 2) = 7.100000 - pars_io_cbl%soilin_hyds( 2) = 0.000004 - pars_io_cbl%soilin_sucs( 2) = -0.591000 - pars_io_cbl%soilin_rhosoil( 2) = 1600.000000 - pars_io_cbl%soilin_css( 2) = 850.000000 - - !SOIL: Fine clay - !========================================================= - pars_io_cbl%soilin_silt( 3) = 0.170000 - pars_io_cbl%soilin_clay( 3) = 0.670000 - pars_io_cbl%soilin_sand( 3) = 0.160000 - pars_io_cbl%soilin_swilt( 3) = 0.286000 - pars_io_cbl%soilin_sfc( 3) = 0.367000 - pars_io_cbl%soilin_ssat( 3) = 0.482000 - pars_io_cbl%soilin_bch( 3) = 11.400000 - pars_io_cbl%soilin_hyds( 3) = 0.000001 - pars_io_cbl%soilin_sucs( 3) = -0.405000 - pars_io_cbl%soilin_rhosoil( 3) = 1381.000000 - pars_io_cbl%soilin_css( 3) = 850.000000 - - !SOIL: Coarse-medium sandy loam/loam - !========================================================= - pars_io_cbl%soilin_silt( 4) = 0.200000 - pars_io_cbl%soilin_clay( 4) = 0.200000 - pars_io_cbl%soilin_sand( 4) = 0.600000 - pars_io_cbl%soilin_swilt( 4) = 0.135000 - pars_io_cbl%soilin_sfc( 4) = 0.218000 - pars_io_cbl%soilin_ssat( 4) = 0.443000 - pars_io_cbl%soilin_bch( 4) = 5.150000 - pars_io_cbl%soilin_hyds( 4) = 0.000021 - pars_io_cbl%soilin_sucs( 4) = -0.348000 - pars_io_cbl%soilin_rhosoil( 4) = 1373.000000 - pars_io_cbl%soilin_css( 4) = 850.000000 - - !SOIL: Coarse-fine sandy clay - !========================================================= - pars_io_cbl%soilin_silt( 5) = 0.060000 - pars_io_cbl%soilin_clay( 5) = 0.420000 - pars_io_cbl%soilin_sand( 5) = 0.520000 - pars_io_cbl%soilin_swilt( 5) = 0.219000 - pars_io_cbl%soilin_sfc( 5) = 0.310000 - pars_io_cbl%soilin_ssat( 5) = 0.426000 - pars_io_cbl%soilin_bch( 5) = 10.400000 - pars_io_cbl%soilin_hyds( 5) = 0.000002 - pars_io_cbl%soilin_sucs( 5) = -0.153000 - pars_io_cbl%soilin_rhosoil( 5) = 1476.000000 - pars_io_cbl%soilin_css( 5) = 850.000000 - - !SOIL: Medium-fine silty clay - !========================================================= - pars_io_cbl%soilin_silt( 6) = 0.250000 - pars_io_cbl%soilin_clay( 6) = 0.480000 - pars_io_cbl%soilin_sand( 6) = 0.270000 - pars_io_cbl%soilin_swilt( 6) = 0.283000 - pars_io_cbl%soilin_sfc( 6) = 0.370000 - pars_io_cbl%soilin_ssat( 6) = 0.482000 - pars_io_cbl%soilin_bch( 6) = 10.400000 - pars_io_cbl%soilin_hyds( 6) = 0.000001 - pars_io_cbl%soilin_sucs( 6) = -0.490000 - pars_io_cbl%soilin_rhosoil( 6) = 1521.000000 - pars_io_cbl%soilin_css( 6) = 850.000000 - - !SOIL: Coarse-medium-fine sandy clay loam - !========================================================= - pars_io_cbl%soilin_silt( 7) = 0.150000 - pars_io_cbl%soilin_clay( 7) = 0.270000 - pars_io_cbl%soilin_sand( 7) = 0.580000 - pars_io_cbl%soilin_swilt( 7) = 0.175000 - pars_io_cbl%soilin_sfc( 7) = 0.255000 - pars_io_cbl%soilin_ssat( 7) = 0.420000 - pars_io_cbl%soilin_bch( 7) = 7.120000 - pars_io_cbl%soilin_hyds( 7) = 0.000006 - pars_io_cbl%soilin_sucs( 7) = -0.299000 - pars_io_cbl%soilin_rhosoil( 7) = 1373.000000 - pars_io_cbl%soilin_css( 7) = 850.000000 - - !SOIL: Organic peat - !========================================================= - pars_io_cbl%soilin_silt( 8) = 0.700000 - pars_io_cbl%soilin_clay( 8) = 0.170000 - pars_io_cbl%soilin_sand( 8) = 0.130000 - pars_io_cbl%soilin_swilt( 8) = 0.395000 - pars_io_cbl%soilin_sfc( 8) = 0.450000 - pars_io_cbl%soilin_ssat( 8) = 0.451000 - pars_io_cbl%soilin_bch( 8) = 5.830000 - pars_io_cbl%soilin_hyds( 8) = 0.000800 - pars_io_cbl%soilin_sucs( 8) = -0.356000 - pars_io_cbl%soilin_rhosoil( 8) = 1537.000000 - pars_io_cbl%soilin_css( 8) = 1920.000000 - - !SOIL: Permanent ice - !========================================================= - pars_io_cbl%soilin_silt( 9) = 0.330000 - pars_io_cbl%soilin_clay( 9) = 0.300000 - pars_io_cbl%soilin_sand( 9) = 0.370000 - pars_io_cbl%soilin_swilt( 9) = 0.216000 - pars_io_cbl%soilin_sfc( 9) = 0.301000 - pars_io_cbl%soilin_ssat( 9) = 0.479000 - pars_io_cbl%soilin_bch( 9) = 7.100000 - pars_io_cbl%soilin_hyds( 9) = 0.000001 - pars_io_cbl%soilin_sucs( 9) = -0.153000 - pars_io_cbl%soilin_rhosoil( 9) = 917.000000 - pars_io_cbl%soilin_css( 9) = 2100.000000 - -End subroutine cable_soil_params - -END MODULE cable_soil_params_mod - diff --git a/src/coupled/AM3/initialisation/init_cable_working_vars.F90 b/src/coupled/AM3/initialisation/init_cable_working_vars.F90 deleted file mode 100644 index 5053cbba4..000000000 --- a/src/coupled/AM3/initialisation/init_cable_working_vars.F90 +++ /dev/null @@ -1,63 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE init_cable_work_mod - -!------------------------------------------------------------------------------ -! Description: -! Main driver to dec/alloc/initialize CABLE prognostic variables -! -! This MODULE is USEd in: -! init.F90 -! -! This MODULE contains 1 public Subroutine: -! init_cable_work -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -!------------------------------------------------------------------------------ - -IMPLICIT NONE - -PUBLIC :: init_cable_work -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='INIT_CABLE_WORK_MOD' - -CONTAINS - -SUBROUTINE init_cable_work(row_length, rows, land_pts, nsurft, sm_levels, lsm_id, cable, & - work_cbl, work_cbl_data ) - -! Description: -! Nothing further to add to the module description. - -USE work_vars_mod_cbl, ONLY: work_vars_type, & - work_vars_data_type, & - alloc_work_vars_cbl, & - assoc_work_vars_cbl - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: row_length, rows, land_pts, nsurft,sm_levels -INTEGER, INTENT(IN) :: lsm_id, cable -TYPE(work_vars_data_type), INTENT(IN OUT) :: work_cbl_data -TYPE(work_vars_type), INTENT(IN OUT) :: work_cbl - -CALL alloc_work_vars_cbl(row_length, rows, land_pts, nsurft, sm_levels, & - lsm_id, cable, work_cbl_data ) -CALL assoc_work_vars_cbl(work_cbl, work_cbl_data ) - -RETURN - -END SUBROUTINE init_cable_work - -END MODULE init_cable_work_mod diff --git a/src/coupled/AM3/initialisation/init_soilin_cbl.inc b/src/coupled/AM3/initialisation/init_soilin_cbl.inc deleted file mode 100644 index 13b2efbc3..000000000 --- a/src/coupled/AM3/initialisation/init_soilin_cbl.inc +++ /dev/null @@ -1,187 +0,0 @@ -! *****************************COPYRIGHT************************************** -! (C) Crown copyright Met Office. All rights reserved. -! For further details please refer to the file COPYRIGHT.txt -! which you should have received as part of this distribution. -! *****************************COPYRIGHT************************************** - -SUBROUTINE init_soilin_cbl(nml_dir) - -!----------------------------------------------------------------------------- -! Description: -! Initialises the non-vegetation parameters -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -USE missing_data_mod, ONLY: & -! imported scalar parameters - rmdi - -USE io_constants, ONLY: namelist_unit - -USE string_utils_mod, ONLY: to_string -USE errormessagelength_mod, ONLY: errormessagelength - -USE grid_constants_mod_cbl, ONLY: nsoil_max ! # of soil types [9] -USE cable_fields_mod, ONLY: pars_io_data_cbl - -IMPLICIT NONE - -! Arguments -CHARACTER(LEN=*), INTENT(IN) :: nml_dir ! The directory containing the - ! namelists -! Work variables -INTEGER :: ERROR ! Error indicator -CHARACTER(LEN=errormessagelength) :: iomessage - -CHARACTER(LEN=*), PARAMETER :: routinename='INIT_SOILIN_CABLE' - -!----------------------------------------------------------------------------- - -REAL :: & - silt_io(nsoil_max), & - clay_io(nsoil_max), & - sand_io(nsoil_max), & - swilt_io(nsoil_max), & - sfc_io(nsoil_max), & - ssat_io(nsoil_max), & - bch_io(nsoil_max), & - hyds_io(nsoil_max), & - sucs_io(nsoil_max), & - rhosoil_io(nsoil_max), & - css_io(nsoil_max) - -!----------------------------------------------------------------------------- -! Namelist definition -!----------------------------------------------------------------------------- -NAMELIST / cable_soilparm/ silt_io, clay_io, sand_io, swilt_io, & - sfc_io, ssat_io, bch_io, hyds_io, sucs_io, rhosoil_io, css_io - -!----------------------------------------------------------------------------- -! Initialise namelist values before reading them -!----------------------------------------------------------------------------- -silt_io(:nsoil_max) = rmdi -clay_io(:nsoil_max) = rmdi -sand_io(:nsoil_max) = rmdi -swilt_io(:nsoil_max) = rmdi -sfc_io(:nsoil_max) = rmdi -ssat_io(:nsoil_max) = rmdi -bch_io(:nsoil_max) = rmdi -hyds_io(:nsoil_max) = rmdi -sucs_io(:nsoil_max) = rmdi -rhosoil_io(:nsoil_max) = rmdi -css_io(:nsoil_max) = rmdi - -!----------------------------------------------------------------------------- -! Read namelist -!----------------------------------------------------------------------------- -CALL log_info(routinename, "Reading CABLE_SOILPARM namelist...") - -! Open the CABLE soil parameters namelist file -OPEN(namelist_unit, FILE=(TRIM(nml_dir) // '/' // & - 'cable_soilparm.nml'), & - STATUS='old', POSITION='rewind', ACTION='read', IOSTAT = ERROR, & - IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error opening namelist file cable_soilparm.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -READ(namelist_unit, NML = cable_soilparm, IOSTAT = ERROR, & - IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error reading namelist CABLE_SOILPARM " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -! Close the namelist file -CLOSE(namelist_unit, IOSTAT = ERROR, IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error closing namelist file cable_soilparm.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - - -!----------------------------------------------------------------------------- -! Process the namelist values -!----------------------------------------------------------------------------- -! Copy values from dedicated I/O arrays into the soil parameter data type -pars_io_data_cbl%soilin_silt(1:nsoil_max) = silt_io(1:nsoil_max) -pars_io_data_cbl%soilin_clay(1:nsoil_max) = clay_io(1:nsoil_max) -pars_io_data_cbl%soilin_sand(1:nsoil_max) = sand_io(1:nsoil_max) -pars_io_data_cbl%soilin_swilt(1:nsoil_max) = swilt_io(1:nsoil_max) -pars_io_data_cbl%soilin_sfc(1:nsoil_max) = sfc_io(1:nsoil_max) -pars_io_data_cbl%soilin_ssat(1:nsoil_max) = ssat_io(1:nsoil_max) -pars_io_data_cbl%soilin_bch(1:nsoil_max) = bch_io(1:nsoil_max) -pars_io_data_cbl%soilin_hyds(1:nsoil_max) = hyds_io(1:nsoil_max) -pars_io_data_cbl%soilin_sucs(1:nsoil_max) = sucs_io(1:nsoil_max) -pars_io_data_cbl%soilin_rhosoil(1:nsoil_max) = rhosoil_io(1:nsoil_max) -pars_io_data_cbl%soilin_css(1:nsoil_max) = css_io(1:nsoil_max) - -!----------------------------------------------------------------------------- -! Check that all variables were present in the namelist. -! The namelist variables were initialised to rmdi. -!----------------------------------------------------------------------------- -ERROR = 0 -IF ( ANY( ABS( pars_io_data_cbl%soilin_silt(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for silt") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_clay(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for clay") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_sand(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for sand") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_swilt(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for swilt") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_sfc(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for sfc") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_ssat(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for ssat") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_bch(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for bch") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_hyds(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for hyds") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_sucs(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for sucs") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_rhosoil(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for rhosoil") -END IF -IF ( ANY( ABS( pars_io_data_cbl%soilin_css(1:nsoil_max) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for css") -END IF - -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Variable(s) missing from namelist - see earlier " // & - "error message(s)") - -RETURN - -END SUBROUTINE init_soilin_cbl - diff --git a/src/coupled/AM3/initialisation/init_vegin_cbl.inc b/src/coupled/AM3/initialisation/init_vegin_cbl.inc deleted file mode 100644 index 4ab1b9a7e..000000000 --- a/src/coupled/AM3/initialisation/init_vegin_cbl.inc +++ /dev/null @@ -1,479 +0,0 @@ - -SUBROUTINE init_vegin_cbl(nml_dir,progs) - -!----------------------------------------------------------------------------- -! Description: -! Reads the JULES_PFT_PARAMS_CABLE namelist for standalone runs -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in TECHNICAL -! -! Code Description: -! Language: Fortran 90. -! This code is written to JULES coding standards v1. -!----------------------------------------------------------------------------- - -USE missing_data_mod, ONLY: & -! imported scalar parameters - rmdi -USE io_constants, ONLY: namelist_unit - -USE string_utils_mod, ONLY: to_string - -USE errormessagelength_mod, ONLY: errormessagelength - -USE logging_mod, ONLY: log_info, log_fatal - -USE jules_surface_types_mod, ONLY: ntype, npft - -USE ancil_info, ONLY: land_pts - -USE grid_constants_mod_cbl, ONLY: nsl, nscs, nvcs, nrb - -USE max_dimensions, ONLY: ntype_max - -USE prognostics, ONLY: progs_type -USE cable_fields_mod, ONLY: pars_io_data_cbl, pars_io_cbl - -USE params_io_mod_cbl, ONLY: params_io_assoc_cbl - -IMPLICIT NONE - -! Arguments -CHARACTER(LEN=*), INTENT(IN) :: nml_dir ! The directory containing the - ! namelists -!TYPES containing the data -TYPE(progs_type), INTENT(IN OUT) :: progs - -! Work variables -INTEGER :: ERROR ! Error indicator -CHARACTER(LEN=errormessagelength) :: iomessage - -CHARACTER(LEN=*), PARAMETER :: routinename='INIT_VEGIN_CABLE' - -! With some compilers, namelists cannot contain multidimensional arrays. -! Therefore, an input type without multidimensional arrays is used to read -! in the the values from the namelist, and these values will then be -! transferred to the desired data type which does contain multidimensional -! arrays - -! Whereas in JULES PFT parameters are only used for veg types, in CABLE they -! are used for both. Therefore CABLE PFT arrays need to be allocated ntype_max, -! which equals (npft_max + nvg_max). - -REAL :: & - canst1_io(ntype_max), & - length_io(ntype_max), & - width_io(ntype_max), & - vcmax_io(ntype_max), & - ejmax_io(ntype_max), & - hc_io(ntype_max), & - xfang_io(ntype_max), & - rp20_io(ntype_max), & - rpcoef_io(ntype_max), & - rs20_io(ntype_max), & - wai_io(ntype_max), & - rootbeta_io(ntype_max), & - shelrb_io(ntype_max), & - vegcf_io(ntype_max), & - frac4_io(ntype_max), & - xalbnir_io(ntype_max), & - extkn_io(ntype_max), & - tminvj_io(ntype_max), & - tmaxvj_io(ntype_max), & - vbeta_io(ntype_max), & - a1gs_io(ntype_max), & - d0gs_io(ntype_max), & - alpha_io(ntype_max), & - convex_io(ntype_max), & - cfrd_io(ntype_max), & - gswmin_io(ntype_max), & - conkc0_io(ntype_max), & - conko0_io(ntype_max), & - ekc_io(ntype_max), & - eko_io(ntype_max), & - g0_io(ntype_max), & - g1_io(ntype_max), & - zr_io(ntype_max), & - clitt_io(ntype_max), & - froot1_io(ntype_max), & - froot2_io(ntype_max), & - froot3_io(ntype_max), & - froot4_io(ntype_max), & - froot5_io(ntype_max), & - froot6_io(ntype_max), & - csoil1_io(ntype_max), & - csoil2_io(ntype_max), & - ratecs1_io(ntype_max), & - ratecs2_io(ntype_max), & - cplant1_io(ntype_max), & - cplant2_io(ntype_max), & - cplant3_io(ntype_max), & - ratecp1_io(ntype_max), & - ratecp2_io(ntype_max), & - ratecp3_io(ntype_max), & - refl1_io(ntype_max), & - refl2_io(ntype_max), & - refl3_io(ntype_max), & - taul1_io(ntype_max), & - taul2_io(ntype_max), & - taul3_io(ntype_max), & - lai_io(ntype_max) - -!----------------------------------------------------------------------------- -! Namelist definition -!----------------------------------------------------------------------------- -NAMELIST / cable_pftparm/ canst1_io, length_io, width_io, vcmax_io, & - ejmax_io, hc_io, xfang_io, rp20_io, rpcoef_io, rs20_io, wai_io, & - rootbeta_io, shelrb_io, vegcf_io, frac4_io, xalbnir_io, extkn_io, & - tminvj_io, tmaxvj_io, vbeta_io, a1gs_io, d0gs_io, alpha_io, & - convex_io, cfrd_io, gswmin_io, conkc0_io, conko0_io, ekc_io, & - eko_io, g0_io, g1_io, zr_io, clitt_io, froot1_io, froot2_io, & - froot3_io, froot4_io, froot5_io, froot6_io, cplant1_io, & - cplant2_io, cplant3_io, csoil1_io, csoil2_io, ratecp1_io, & - ratecp2_io, ratecp3_io, ratecs1_io, ratecs2_io, refl1_io, & - refl2_io, refl3_io, taul1_io, taul2_io, taul3_io, lai_io - -!----------------------------------------------------------------------------- -! Initialise namelist values before reading them -!----------------------------------------------------------------------------- -canst1_io(:ntype) = rmdi -length_io(:ntype) = rmdi -width_io(:ntype) = rmdi -vcmax_io(:ntype) = rmdi -ejmax_io(:ntype) = rmdi -hc_io(:ntype) = rmdi -xfang_io(:ntype) = rmdi -rp20_io(:ntype) = rmdi -rpcoef_io(:ntype) = rmdi -rs20_io(:ntype) = rmdi -wai_io(:ntype) = rmdi -rootbeta_io(:ntype) = rmdi -shelrb_io(:ntype) = rmdi -vegcf_io(:ntype) = rmdi -frac4_io(:ntype) = rmdi -xalbnir_io(:ntype) = rmdi -extkn_io(:ntype) = rmdi -tminvj_io(:ntype) = rmdi -tmaxvj_io(:ntype) = rmdi -vbeta_io(:ntype) = rmdi -a1gs_io(:ntype) = rmdi -d0gs_io(:ntype) = rmdi -alpha_io(:ntype) = rmdi -convex_io(:ntype) = rmdi -cfrd_io(:ntype) = rmdi -gswmin_io(:ntype) = rmdi -conkc0_io(:ntype) = rmdi -conko0_io(:ntype) = rmdi -ekc_io(:ntype) = rmdi -eko_io(:ntype) = rmdi -g0_io(:ntype) = rmdi -g1_io(:ntype) = rmdi -zr_io(:ntype) = rmdi -clitt_io(:ntype) = rmdi -froot1_io(:ntype) = rmdi -froot2_io(:ntype) = rmdi -froot3_io(:ntype) = rmdi -froot4_io(:ntype) = rmdi -froot5_io(:ntype) = rmdi -froot6_io(:ntype) = rmdi -cplant1_io(:ntype) = rmdi -cplant2_io(:ntype) = rmdi -cplant3_io(:ntype) = rmdi -csoil1_io(:ntype) = rmdi -csoil2_io(:ntype) = rmdi -ratecp1_io(:ntype) = rmdi -ratecp2_io(:ntype) = rmdi -ratecp3_io(:ntype) = rmdi -ratecs1_io(:ntype) = rmdi -ratecs2_io(:ntype) = rmdi -refl1_io(:ntype) = rmdi -refl2_io(:ntype) = rmdi -refl3_io(:ntype) = rmdi -taul1_io(:ntype) = rmdi -taul2_io(:ntype) = rmdi -taul3_io(:ntype) = rmdi -lai_io(:ntype) = rmdi - -!----------------------------------------------------------------------------- -! Read namelist -!----------------------------------------------------------------------------- -CALL log_info(routinename, "Reading CABLE_PFTPARM namelist...") - -OPEN(namelist_unit, FILE=(TRIM(nml_dir) // '/' // 'pft_params.nml'), & - STATUS='old', POSITION='rewind', ACTION='read', IOSTAT = ERROR,& - IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error opening namelist file pft_params.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -READ(namelist_unit, NML = cable_pftparm, IOSTAT = ERROR, IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error reading namelist CABLE_PFTPARM " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -CLOSE(namelist_unit, IOSTAT = ERROR, IOMSG = iomessage) -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Error closing namelist file pft_params.nml " // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -!----------------------------------------------------------------------------- -! Transfer values from io values to vegin -!----------------------------------------------------------------------------- - -pars_io_data_cbl%vegin_canst1(:ntype) = canst1_io(:ntype) -pars_io_data_cbl%vegin_length(:ntype) = length_io(:ntype) -pars_io_data_cbl%vegin_width(:ntype) = width_io(:ntype) -pars_io_data_cbl%vegin_vcmax(:ntype) = vcmax_io(:ntype) -pars_io_data_cbl%vegin_ejmax(:ntype) = ejmax_io(:ntype) -pars_io_data_cbl%vegin_hc(:ntype) = hc_io(:ntype) -pars_io_data_cbl%vegin_xfang(:ntype) = xfang_io(:ntype) -pars_io_data_cbl%vegin_rp20(:ntype) = rp20_io(:ntype) -pars_io_data_cbl%vegin_rpcoef(:ntype) = rpcoef_io(:ntype) -pars_io_data_cbl%vegin_rs20(:ntype) = rs20_io(:ntype) -pars_io_data_cbl%vegin_wai(:ntype) = wai_io(:ntype) -pars_io_data_cbl%vegin_rootbeta(:ntype) = rootbeta_io(:ntype) -pars_io_data_cbl%vegin_shelrb(:ntype) = shelrb_io(:ntype) -pars_io_data_cbl%vegin_vegcf(:ntype) = vegcf_io(:ntype) -pars_io_data_cbl%vegin_frac4(:ntype) = frac4_io(:ntype) -pars_io_data_cbl%vegin_xalbnir(:ntype) = xalbnir_io(:ntype) -pars_io_data_cbl%vegin_extkn(:ntype) = extkn_io(:ntype) -pars_io_data_cbl%vegin_tminvj(:ntype) = tminvj_io(:ntype) -pars_io_data_cbl%vegin_tmaxvj(:ntype) = tmaxvj_io(:ntype) -pars_io_data_cbl%vegin_vbeta(:ntype) = vbeta_io(:ntype) -pars_io_data_cbl%vegin_a1gs(:ntype) = a1gs_io(:ntype) -pars_io_data_cbl%vegin_d0gs(:ntype) = d0gs_io(:ntype) -pars_io_data_cbl%vegin_alpha(:ntype) = alpha_io(:ntype) -pars_io_data_cbl%vegin_convex(:ntype) = convex_io(:ntype) -pars_io_data_cbl%vegin_cfrd(:ntype) = cfrd_io(:ntype) -pars_io_data_cbl%vegin_gswmin(:ntype) = gswmin_io(:ntype) -pars_io_data_cbl%vegin_conkc0(:ntype) = conkc0_io(:ntype) -pars_io_data_cbl%vegin_conko0(:ntype) = conko0_io(:ntype) -pars_io_data_cbl%vegin_ekc(:ntype) = ekc_io(:ntype) -pars_io_data_cbl%vegin_eko(:ntype) = eko_io(:ntype) -pars_io_data_cbl%vegin_g0(:ntype) = g0_io(:ntype) -pars_io_data_cbl%vegin_g1(:ntype) = g1_io(:ntype) -pars_io_data_cbl%vegin_zr(:ntype) = zr_io(:ntype) -pars_io_data_cbl%vegin_clitt(:ntype) = clitt_io(:ntype) -pars_io_data_cbl%vegin_froot(1,:ntype) = froot1_io(:ntype) -pars_io_data_cbl%vegin_froot(2,:ntype) = froot2_io(:ntype) -pars_io_data_cbl%vegin_froot(3,:ntype) = froot3_io(:ntype) -pars_io_data_cbl%vegin_froot(4,:ntype) = froot4_io(:ntype) -pars_io_data_cbl%vegin_froot(5,:ntype) = froot5_io(:ntype) -pars_io_data_cbl%vegin_froot(6,:ntype) = froot6_io(:ntype) -pars_io_data_cbl%vegin_cplant(1,:ntype) = cplant1_io(:ntype) -pars_io_data_cbl%vegin_cplant(2,:ntype) = cplant2_io(:ntype) -pars_io_data_cbl%vegin_cplant(3,:ntype) = cplant3_io(:ntype) -pars_io_data_cbl%vegin_csoil(1,:ntype) = csoil1_io(:ntype) -pars_io_data_cbl%vegin_csoil(2,:ntype) = csoil2_io(:ntype) -pars_io_data_cbl%vegin_ratecp(1,:ntype) = ratecp1_io(:ntype) -pars_io_data_cbl%vegin_ratecp(2,:ntype) = ratecp2_io(:ntype) -pars_io_data_cbl%vegin_ratecp(3,:ntype) = ratecp3_io(:ntype) -pars_io_data_cbl%vegin_ratecs(1,:ntype) = ratecs1_io(:ntype) -pars_io_data_cbl%vegin_ratecs(2,:ntype) = ratecs2_io(:ntype) -pars_io_data_cbl%vegin_refl(1,:ntype) = refl1_io(:ntype) -pars_io_data_cbl%vegin_refl(2,:ntype) = refl2_io(:ntype) -pars_io_data_cbl%vegin_refl(3,:ntype) = refl3_io(:ntype) -pars_io_data_cbl%vegin_taul(1,:ntype) = taul1_io(:ntype) -pars_io_data_cbl%vegin_taul(2,:ntype) = taul2_io(:ntype) -pars_io_data_cbl%vegin_taul(3,:ntype) = taul3_io(:ntype) -progs%canht_pft(:,:npft) = SPREAD(hc_io(1:npft), 1, land_pts) -progs%lai_pft(:,:npft) = SPREAD(lai_io(1:npft), 1, land_pts) - -!----------------------------------------------------------------------------- -! Check that all required variables were present in the namelist. -! The namelist variables were initialised to rmdi. -! Some configurations don't need all parameters but for now we insist on -! getting all parameters (and that there are not rmdi!). -!----------------------------------------------------------------------------- -ERROR = 0 -IF ( ANY( ABS( pars_io_data_cbl%vegin_canst1(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for canst1") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_length(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for length") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_width(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for width") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_vcmax(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for vcmax") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_ejmax(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for ejmax") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_hc(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for hc") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_xfang(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for xfang") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_rp20(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for rp20") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_rpcoef(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for rpcoef") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_rs20(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for rs20") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_wai(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for wai") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_rootbeta(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for rootbeta") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_shelrb(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for shelrb") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_vegcf(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for vegcf") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_frac4(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for frac4") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_xalbnir(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for xalbnir") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_extkn(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for extkni") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_tminvj(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for tminvj") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_tmaxvj(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for tmaxvj") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_vbeta(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for vbeta") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_a1gs(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for a1hs") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_d0gs(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for d0gs") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_alpha(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for alpha") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_convex(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for convex") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_cfrd(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for cfrd") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_gswmin(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for gswmin") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_conkc0(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for conkc0") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_conko0(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for conko0") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_ekc(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for ekc") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_eko(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for eko") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_g0(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for g0") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_g1(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for g1") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_zr(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for zr") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_clitt(:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for clitt") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_froot(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for froot") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_cplant(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for cplant") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_csoil(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for csoil") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_ratecp(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for ratecp") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_ratecs(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for ratecs") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_refl(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for refl") -END IF -IF ( ANY( ABS( pars_io_data_cbl%vegin_taul(:,:ntype) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for taul") -END IF -IF ( ANY( ABS( progs%canht_pft(:,:) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for hc") -END IF -IF ( ANY( ABS( progs%lai_pft(:,:) - rmdi ) < EPSILON(1.0) ) ) THEN - ERROR = 1 - CALL log_error(routinename, "No value for lai") -END IF - -IF ( ERROR /= 0 ) & - CALL log_fatal(routinename, & - "Variable(s) missing from namelist - see earlier " // & - "error message(s)") - -pars_io_data_cbl%vegin_dleaf(:) = SQRT(pars_io_data_cbl%vegin_width(:) * pars_io_data_cbl%vegin_length(:)) - -CALL params_io_assoc_cbl(pars_io_cbl,pars_io_data_cbl) - -END SUBROUTINE init_vegin_cbl - diff --git a/src/coupled/AM3/initialisation/prognostics/init_cable_progs.F90 b/src/coupled/AM3/initialisation/prognostics/init_cable_progs.F90 deleted file mode 100644 index d06626097..000000000 --- a/src/coupled/AM3/initialisation/prognostics/init_cable_progs.F90 +++ /dev/null @@ -1,65 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE init_cable_progs_mod - -!------------------------------------------------------------------------------ -! Description: -! Main driver to dec/alloc/initialize CABLE prognostic variables -! -! This MODULE is USEd: -! init.F90 -! -! This MODULE contains 1 public Subroutine: -! init_cable_progs -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -!------------------------------------------------------------------------------ - -IMPLICIT NONE - -PUBLIC :: init_cable_progs -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='INIT_CABLE_PROGS_MOD' - -CONTAINS - -SUBROUTINE init_cable_progs( land_pts, nsurft, sm_levels, lsm_id, cable, & - progs_cbl_vars, progs_cbl_vars_data ) - -! Description: -! Nothing further to add to the module description - -!USE read_cable_progs_mod, ONLY: read_cable_progs -USE progs_cbl_vars_mod, ONLY: progs_cbl_vars_type, & - progs_cbl_vars_data_type, & - progs_cbl_vars_alloc, & - progs_cbl_vars_assoc - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: land_pts, nsurft,sm_levels -INTEGER, INTENT(IN) :: lsm_id, cable -TYPE(progs_cbl_vars_data_type), INTENT(IN OUT) :: progs_cbl_vars_data -TYPE(progs_cbl_vars_type), INTENT(IN OUT) :: progs_cbl_vars - -CALL progs_cbl_vars_alloc(land_pts, nsurft, sm_levels, lsm_id, cable, & - progs_cbl_vars_data ) -CALL progs_cbl_vars_assoc(progs_cbl_vars, progs_cbl_vars_data ) -!CALL read_cable_progs() - -RETURN - -END SUBROUTINE init_cable_progs - -END MODULE init_cable_progs_mod diff --git a/src/coupled/AM3/initialisation/prognostics/init_cnp_progs.F90 b/src/coupled/AM3/initialisation/prognostics/init_cnp_progs.F90 deleted file mode 100644 index 773df3779..000000000 --- a/src/coupled/AM3/initialisation/prognostics/init_cnp_progs.F90 +++ /dev/null @@ -1,33 +0,0 @@ -MODULE init_cnp_progs_mod - -IMPLICIT NONE - -PUBLIC :: init_cnp_progs -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='INIT_CNP_PROGS_MOD' - -CONTAINS - -SUBROUTINE init_cnp_progs( land_pts, nsurft, progs_cnp_vars, & - progs_cnp_vars_data ) - -USE progs_cnp_vars_mod, ONLY: progs_cnp_vars_type, & - progs_cnp_vars_data_type, & - progs_cnp_vars_alloc, & - progs_cnp_vars_assoc - -IMPLICIT NONE - -INTEGER, INTENT(IN) :: land_pts, nsurft -TYPE(progs_cnp_vars_data_type), INTENT(OUT) :: progs_cnp_vars_data -TYPE(progs_cnp_vars_type), INTENT(OUT) :: progs_cnp_vars - -CALL progs_cnp_vars_alloc(land_pts, nsurft, progs_cnp_vars_data ) -CALL progs_cnp_vars_assoc(progs_cnp_vars, progs_cnp_vars_data ) - -RETURN - -END SUBROUTINE init_cnp_progs - -END MODULE init_cnp_progs_mod diff --git a/src/coupled/AM3/initialisation/prognostics/read_cable_progs.F90 b/src/coupled/AM3/initialisation/prognostics/read_cable_progs.F90 deleted file mode 100644 index ad06b4cc1..000000000 --- a/src/coupled/AM3/initialisation/prognostics/read_cable_progs.F90 +++ /dev/null @@ -1,276 +0,0 @@ -!******************************COPYRIGHT******************************************** -! (c) CSIRO 2022. -! All rights reserved. -! -! This routine has been licensed to the other JULES partners for use and -! distribution under the JULES collaboration agreement, subject to the terms and -! conditions set out therein. -! -! [Met Office Ref SC0237] -!******************************COPYRIGHT******************************************** - -MODULE read_cable_progs_mod - -!------------------------------------------------------------------------------ -! Description: -! Reads in information about CABLE prognostic variables for their -! initialisation -! -! This MODULE is USEd in: -! init_cable_progs.F90 -! -! This MODULE contains 1 public Subroutine: -! read_cable_progs -! -! Code Owner: Please refer to ModuleLeaders.txt -! This file belongs in CABLE SCIENCE -!------------------------------------------------------------------------------ - -IMPLICIT NONE - -PUBLIC :: read_cable_progs -PRIVATE - -CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='INIT_CABLE_PROGS_MOD' - -CONTAINS - -SUBROUTINE read_cable_progs() - -! Description: -! Nothing further to add to the module description - -USE errormessagelength_mod, ONLY: errormessagelength - -USE fill_variables_from_file_mod, ONLY: fill_variables_from_file - -USE io_constants, ONLY: max_sdf_name_len, max_file_name_len, namelist_unit - -USE string_utils_mod, ONLY: to_string - -USE templating_mod, ONLY: tpl_has_var_name, tpl_substitute_var - -USE model_interface_mod, ONLY: identifier_len, populate_var, get_var_id - -USE ancil_info, ONLY: land_pts - -USE missing_data_mod, ONLY: rmdi - -USE logging_mod, ONLY: log_info, log_warn, log_fatal - -IMPLICIT NONE - -! Work variables -INTEGER, PARAMETER :: max_cable_vars = 10 - ! The maximum number of CABLE model variables that can be given - -INTEGER :: nvars_required ! The number of prognostic variables that are - ! required in this configuration - -CHARACTER(LEN=identifier_len) :: required_vars(max_cable_vars) - ! The variable identifiers of the required - ! variables - -INTEGER :: nvars_file ! The number of variables that will be set - ! from the given file (template?) - -INTEGER :: i,l ! Index variables - -INTEGER :: ERROR ! Error indicator - -!! Variables passed to fill_variables_from_file -!CHARACTER(LEN=identifier_len) :: file_var(max_cable_vars) -! ! The variable identifiers of the variables to set -! ! from file -!CHARACTER(LEN=max_sdf_name_len) :: file_var_name(max_cable_vars) -! ! The name of each variable in the file -! -!CHARACTER(LEN=max_sdf_name_len) :: file_tpl_name(max_cable_vars) -! ! The name to substitute in a template for each -! ! variable - - -!----------------------------------------------------------------------------- -! Definition of the cable_progs namelist -!----------------------------------------------------------------------------- -CHARACTER(LEN=max_file_name_len) :: FILE - ! The name of the file (or variable name template) to - ! use for variables that need to be filled from file - -INTEGER :: nvars ! The number of variables in this section - -CHARACTER(LEN=identifier_len) :: var(max_cable_vars) - ! The variable identifiers of the variables -CHARACTER(LEN=max_sdf_name_len) :: var_name(max_cable_vars) - ! The name of each variable in the file -CHARACTER(LEN=max_sdf_name_len) :: tpl_name(max_cable_vars) - ! The name to substitute in a template for each - ! variable -LOGICAL :: use_file(max_cable_vars) - ! T - the variable uses the file - ! F - the variable is set using a constant value -CHARACTER(LEN=errormessagelength) :: iomessage - ! I/O error message string -REAL :: const_val(max_cable_vars) -!INTEGER:: iconst_val(max_cable_vars) - ! The constant value to use for each variable if - ! use_file = F for that variable -NAMELIST / cable_progs/ FILE, nvars, var, var_name, use_file, tpl_name, & - const_val - -!----------------------------------------------------------------------------- - - -!----------------------------------------------------------------------------- -! Initialise -!----------------------------------------------------------------------------- -nvars_required = 0 -nvars_file = 0 -nvars = 0 -use_file(:) = .TRUE. ! Default is for every variable to be read from file -FILE(:) = '' ! Empty file names -var_name(:) = '' ! Empty variable names -tpl_name(:) = '' ! Empty template string -const_val(:) = rmdi - -!----------------------------------------------------------------------------- -! Read namelist -!----------------------------------------------------------------------------- -CALL log_info("init_cable_progs", "Reading CABLE_PROGS namelist...") -OPEN(namelist_unit, FILE=('cable_prognostics.nml'), & - STATUS='old', POSITION='rewind', ACTION='read', IOSTAT = ERROR, & - IOMSG = iomessage) - - -! First, we read the cable_progs namelist -READ(namelist_unit, NML = cable_progs, IOSTAT = ERROR) - -IF ( ERROR /= 0 ) & - CALL log_fatal("init_cable_progs", & - "Error reading namelist CABLE_PROGS" // & - "(IOSTAT=" // TRIM(to_string(ERROR)) // " IOMSG=" // & - TRIM(iomessage) // ")") - -!----------------------------------------------------------------------------- -! Set up CABLE prognostics using namelist values -!----------------------------------------------------------------------------- -! Set up the required variables -! All the CABLE variables are always required for CABLE runs -nvars_required = max_cable_vars -required_vars(:) = [ & - 'ThreeLayerSnowFlag_CABLE', & - 'OneLyrSnowDensity_CABLE ', & - 'SnowAge_CABLE ', & - 'SnowDensity_CABLE ', & - 'SnowMass_CABLE ', & - 'SnowDepth_CABLE ', & - 'SnowTemp_CABLE ', & - 'FrozenSoilFrac_CABLE ', & - 'SoilMoisture_CABLE ', & - 'SoilTemp_CABLE ' & - ] -!------------------------------------------------------------------------- -! Check that variable identifiers are not empty. -! Although we might later decide that the identifier is not required, for -! clarity we check here whether the claimed amount of information was -! provided. -!------------------------------------------------------------------------- -DO i = 1,nvars - IF ( LEN_TRIM(var(i)) == 0 ) & - CALL log_fatal("init_cable_progs", & - "Insufficient values for var. " // & - "No name provided for var at position #" // & - TRIM(to_string(i)) ) -END DO - -!----------------------------------------------------------------------------- -! Check that all the required variables are there -!----------------------------------------------------------------------------- - -DO i = 1,nvars_required - IF ( .NOT. ANY(var(1:nvars) == TRIM(required_vars(i))) ) & - CALL log_fatal("init_cable_progs", & - "No value given for required variable '" // & - TRIM(required_vars(i)) // "'") -END DO - - -!----------------------------------------------------------------------------- -! Check which variables we will be using and partition them into variables -! set to constant values and variables set from file -!----------------------------------------------------------------------------- -DO i = 1,nvars - !----------------------------------------------------------------------------- - ! If the variable is one of the required vars, then we will be using it - !----------------------------------------------------------------------------- - IF ( ANY(required_vars(1:nvars_required) == var(i)) ) THEN - IF ( use_file(i) ) THEN - CALL log_info("init_cable_progs", & - "'" // TRIM(var(i)) // "' will be read from file") - - ! If the variable will be filled from file, register it here - nvars_file = nvars_file + 1 - var(nvars_file) = var(i) - var_name(nvars_file) = var_name(i) - tpl_name(nvars_file) = tpl_name(i) - ELSE - ! If the variable is being set as a constant, just populate it here - ! First check that a value has been provided. - IF ( ABS( const_val(i) - rmdi ) < EPSILON(1.0) ) & - CALL log_fatal("init_cable_progs", & - "No constant value provided for variable '" & - // TRIM(var(i)) // "'" ) - - CALL log_info("init_cable_progs", & - "'" // TRIM(var(i)) // "' will be set to a " // & - "constant = " // to_string(const_val(i))) - - CALL populate_var(get_var_id(var(i)), const_val = const_val(i)) - END IF - ELSE - ! If the variable is not a required variable, warn about not using it - CALL log_warn("init_cable_progs", & - "Provided variable '" // TRIM(var(i)) // & - "' is not required, so will be ignored") - END IF -END DO - -!----------------------------------------------------------------------------- -! Set variables from file -!----------------------------------------------------------------------------- -IF ( nvars_file > 0 ) THEN - ! Check that a file name was provided. - IF ( LEN_TRIM(FILE) == 0 ) & - CALL log_fatal("init_cable_progs", "No file name provided") - - IF ( tpl_has_var_name(FILE) ) THEN - ! We are using a file name template, so loop through the variables setting - ! one from each file - DO i = 1,nvars_file - ! If using a variable name template, check that a template string was - !provided for the current variable - IF ( LEN_TRIM(tpl_name(i)) == 0 ) & - CALL log_fatal("init_cable_progs", & - "No variable name template substitution " // & - "(tpl_name) provided for " // TRIM(var(i))) - - - CALL fill_variables_from_file( & - tpl_substitute_var(FILE, tpl_name(i)), & - [ var(i) ], [ var_name(i) ] & - ) - END DO - ELSE - ! We are not using a file name template, so set all variables from the same - ! file - - CALL fill_variables_from_file( & - FILE,var(1:nvars_file), var_name(1:nvars_file) & - ) - END IF -END IF - -RETURN - -END SUBROUTINE read_cable_progs -END MODULE read_cable_progs_mod From f11d99c541aa5162323d041f1ec045efe6656298 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 10:01:39 +1000 Subject: [PATCH 90/98] Move the ESM1.5 landuse file --- CMakeLists.txt | 2 +- .../AM3/cable}/landuse/casa_ESM15landuse.F90 | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{science => coupled/AM3/cable}/landuse/casa_ESM15landuse.F90 (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a672f5b7a..ab640e4e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,7 +206,7 @@ if(CABLE_LIBRARY) src/coupled/AM3/casa/types/casa_inout.F90 src/coupled/AM3/casa/types/casa_readbiome.F90 src/offline/cable_surface_types.F90 - src/science/landuse/casa_ESM15landuse.F90 + src/coupled/AM3/cable/landuse/casa_ESM15landuse.F90 ) if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options(-r8 -i8) diff --git a/src/science/landuse/casa_ESM15landuse.F90 b/src/coupled/AM3/cable/landuse/casa_ESM15landuse.F90 similarity index 100% rename from src/science/landuse/casa_ESM15landuse.F90 rename to src/coupled/AM3/cable/landuse/casa_ESM15landuse.F90 From d7f4be8224578664fe7b2afb7c0069cf7cc366b0 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 10:04:53 +1000 Subject: [PATCH 91/98] Somehow the old CI manifests came back --- .../manifests/library-gcc.spack.yaml.j2 | 17 ----------------- .../manifests/library-intel.spack.yaml.j2 | 17 ----------------- 2 files changed, 34 deletions(-) delete mode 100644 .github/build-ci/manifests/library-gcc.spack.yaml.j2 delete mode 100644 .github/build-ci/manifests/library-intel.spack.yaml.j2 diff --git a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 b/.github/build-ci/manifests/library-gcc.spack.yaml.j2 deleted file mode 100644 index 3b4de6056..000000000 --- a/.github/build-ci/manifests/library-gcc.spack.yaml.j2 +++ /dev/null @@ -1,17 +0,0 @@ -spack: - specs: - - cable@git.{{ ref }} ~mpi library=access-esm1.6 - - packages: - gcc: - require: - - '@{{ gcc_compiler_ver }}' - - all: - require: - - '%access_gcc' - - 'target={{ target }}' - - concretizer: - unify: false - view: false diff --git a/.github/build-ci/manifests/library-intel.spack.yaml.j2 b/.github/build-ci/manifests/library-intel.spack.yaml.j2 deleted file mode 100644 index 359fc2c71..000000000 --- a/.github/build-ci/manifests/library-intel.spack.yaml.j2 +++ /dev/null @@ -1,17 +0,0 @@ -spack: - specs: - - cable@git.{{ ref }} ~mpi library=access-esm1.6 - - packages: - intel-oneapi-compilers-classic: - require: - - '@{{ oneapi_compiler_classic_ver }}' - - all: - require: - - '%access_intel' - - 'target={{ target }}' - - concretizer: - unify: false - view: false From a9c333141376c92a2c4bf680e2f8266e45ead93e Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 12:18:51 +1000 Subject: [PATCH 92/98] Add CI for UM in ACCESS3 --- .../manifests/um-access3.spack.yaml.j2 | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/build-ci/manifests/um-access3.spack.yaml.j2 diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 new file mode 100644 index 000000000..d7c7dff7d --- /dev/null +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -0,0 +1,23 @@ +spack: + specs: + - um@13.0 model=vn13.0 jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" + + packages: + cable: + require: + - '@git.{{ ref }}' + - '~mpi' + - 'library=access3' + + intel-oneapi-compilers-classic: + require: + - '{{ oneapi_compiler_classic_ver }}' + + all: + require: + - '%access_intel' + - 'target={{ target }}' + + view: false + concretizer: + unify: false From 360c0ae751aca2c95d8fdfc3431eb80ffcac9c7e Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 12:33:16 +1000 Subject: [PATCH 93/98] Bad indenting --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index d7c7dff7d..e02b75ed3 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -4,7 +4,7 @@ spack: packages: cable: - require: + require: - '@git.{{ ref }}' - '~mpi' - 'library=access3' From 1f63ec56279012a1f0acfb101fe8937d159b9352 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 12:43:39 +1000 Subject: [PATCH 94/98] Fix model variant spec --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index e02b75ed3..41a3079c8 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -1,6 +1,6 @@ spack: specs: - - um@13.0 model=vn13.0 jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" + - um@13.0 model=vn13 jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" packages: cable: From 5a6d286296a1335b3e90ed14062707e39b0d0a3a Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 13:37:53 +1000 Subject: [PATCH 95/98] Try adding python dep --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index 41a3079c8..1f825fd04 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -9,6 +9,10 @@ spack: - '~mpi' - 'library=access3' + python: + require: + - '@3.11.14' + intel-oneapi-compilers-classic: require: - '{{ oneapi_compiler_classic_ver }}' From 2548615d4e99cf357f0aa77973ccbe6edabacc4f Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 13:50:36 +1000 Subject: [PATCH 96/98] Add @ for compiler spec --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index 1f825fd04..cfe13e356 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -1,6 +1,6 @@ spack: specs: - - um@13.0 model=vn13 jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" + - um@13.0 model=vn13 um_ref="AM3-dev" jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" packages: cable: @@ -9,13 +9,9 @@ spack: - '~mpi' - 'library=access3' - python: - require: - - '@3.11.14' - intel-oneapi-compilers-classic: require: - - '{{ oneapi_compiler_classic_ver }}' + - '@{{ oneapi_compiler_classic_ver }}' all: require: From def2a99a2bd901207d5afe7b63f40b0ca16476b3 Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Tue, 28 Jul 2026 14:36:59 +1000 Subject: [PATCH 97/98] For some reason this needs Python? --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index cfe13e356..32e8ba0d8 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -9,6 +9,10 @@ spack: - '~mpi' - 'library=access3' + python: + require: + - '@3.11.14' + intel-oneapi-compilers-classic: require: - '@{{ oneapi_compiler_classic_ver }}' From 65214fbdddaab7638721645b630904223a3528ae Mon Sep 17 00:00:00 2001 From: Lachlan Whyborn Date: Thu, 30 Jul 2026 17:43:51 +1000 Subject: [PATCH 98/98] Add +cable to um CI spec --- .github/build-ci/manifests/um-access3.spack.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/build-ci/manifests/um-access3.spack.yaml.j2 b/.github/build-ci/manifests/um-access3.spack.yaml.j2 index 32e8ba0d8..7ff94ff52 100644 --- a/.github/build-ci/manifests/um-access3.spack.yaml.j2 +++ b/.github/build-ci/manifests/um-access3.spack.yaml.j2 @@ -1,6 +1,6 @@ spack: specs: - - um@13.0 model=vn13 um_ref="AM3-dev" jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" + - um@13.0 +cable model=vn13 um_ref="AM3-dev" jules_ref="AM3-dev" ukca_ref="AM3-2026.03.0" packages: cable: