From f68d81df350887de114ae35c25f8662e6495155c Mon Sep 17 00:00:00 2001 From: "Victor Correal (MN5)" Date: Mon, 30 Dec 2024 14:09:34 +0100 Subject: [PATCH] =?UTF-8?q?=C3=82Fix=20XIOS=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 28 +- xios_2311_src/arch/arch-X64_IRENE.env | 12 +- xios_2311_src/arch/arch-X64_IRENE_GNU.env | 11 - xios_2311_src/arch/arch-X64_IRENE_GNU.fcm | 26 - xios_2311_src/arch/arch-X64_IRENE_GNU.path | 28 - xios_2311_src/arch/arch-X64_JEANZAY.env | 11 +- .../arch/arch-X64_JEANZAY_OPENMPI.env | 7 - .../arch/arch-X64_JEANZAY_OPENMPI.fcm | 25 - .../arch/arch-X64_JEANZAY_OPENMPI.path | 15 - xios_2311_src/arch/arch-X64_ZEUS.path | 1 - xios_2311_src/arch/arch-ifort_CICLAD.fcm | 16 +- xios_2311_src/arch/arch-ifort_CICLAD.path | 7 +- xios_2311_src/arch/arch-ifort_LSCE.fcm | 2 +- .../arch/arch-mn5-gpp-intel-openmpi.env | 4 - .../arch/arch-mn5-gpp-intel-openmpi.fcm | 25 - .../arch/arch-mn5-gpp-intel-openmpi.path | 8 - xios_2311_src/bld.cfg | 38 +- xios_2311_src/bld_dir.cfg | 7 +- xios_2311_src/doc/XIOS_reference_guide.lyx | 22594 ++++++++-------- xios_2311_src/doc/XIOS_reference_guide.pdf | Bin 336691 -> 317091 bytes xios_2311_src/extern/netcdf4 | 2 +- xios_2311_src/extern/remap/src/circle.cpp | 4 +- xios_2311_src/extern/remap/src/circle.hpp | 2 +- xios_2311_src/extern/remap/src/earcut.hpp | 2 +- .../extern/remap/src/intersection_ym.cpp | 22 +- xios_2311_src/extern/remap/src/mapper.cpp | 60 +- xios_2311_src/extern/remap/src/mapper.hpp | 9 +- xios_2311_src/extern/remap/src/meshutil.cpp | 1 - .../extern/remap/src/mpi_routing.cpp | 3 +- xios_2311_src/extern/remap/src/node.cpp | 45 +- xios_2311_src/extern/remap/src/node.hpp | 11 +- .../extern/remap/src/parallel_tree.cpp | 62 +- .../extern/remap/src/parallel_tree.hpp | 12 +- xios_2311_src/extern/remap/src/polyg.cpp | 3 - xios_2311_src/extern/remap/src/timerRemap.cpp | 7 - xios_2311_src/extern/remap/src/timerRemap.hpp | 9 +- xios_2311_src/extern/remap/src/tree.cpp | 33 +- xios_2311_src/extern/remap/src/tree.hpp | 14 +- xios_2311_src/extern/remap/src/triple.hpp | 8 +- .../extern/tv_data_display/tv_data_display.c | 298 - .../extern/tv_data_display/tv_data_display.h | 91 - .../generic_testcase/context_atm.xml | 337 +- .../context_grid_dynamico.xml | 4 +- .../generic_testcase/context_oce.xml | 478 - xios_2311_src/generic_testcase/iodef.xml | 62 +- xios_2311_src/generic_testcase/param.def | 5 +- .../inputs/COMPLETE/context_atmosphere.xml | 6 +- .../inputs/COMPLETE/context_surface.xml | 10 +- xios_2311_src/inputs/iodef.xml | 48 +- xios_2311_src/make_xios | 8 +- xios_2311_src/src/addr2line.hpp | 109 - xios_2311_src/src/array_new.cpp | 8 - xios_2311_src/src/array_new.hpp | 152 +- xios_2311_src/src/attribute.hpp | 2 +- xios_2311_src/src/attribute_array.hpp | 11 +- xios_2311_src/src/attribute_array_decl.cpp | 1 - xios_2311_src/src/attribute_array_impl.hpp | 15 +- xios_2311_src/src/attribute_enum.hpp | 4 +- xios_2311_src/src/attribute_enum_impl.hpp | 27 +- xios_2311_src/src/attribute_map.cpp | 22 +- xios_2311_src/src/attribute_map.hpp | 2 +- xios_2311_src/src/attribute_template.hpp | 7 +- xios_2311_src/src/attribute_template_decl.cpp | 1 - xios_2311_src/src/attribute_template_impl.hpp | 13 +- xios_2311_src/src/buffer_client.cpp | 355 +- xios_2311_src/src/buffer_client.hpp | 53 +- xios_2311_src/src/buffer_cs_base.hpp | 24 - xios_2311_src/src/buffer_decl.cpp | 2 - xios_2311_src/src/buffer_impl.hpp | 12 - xios_2311_src/src/buffer_in_decl.cpp | 2 - xios_2311_src/src/buffer_in_impl.hpp | 6 - xios_2311_src/src/buffer_out_decl.cpp | 2 - xios_2311_src/src/buffer_out_impl.hpp | 6 - xios_2311_src/src/buffer_server.cpp | 164 +- xios_2311_src/src/buffer_server.hpp | 27 +- xios_2311_src/src/calendar_util.cpp | 71 + xios_2311_src/src/calendar_util.hpp | 3 + xios_2311_src/src/client.cpp | 560 +- xios_2311_src/src/client.hpp | 14 +- xios_2311_src/src/config/axis_attribute.conf | 23 +- .../src/config/context_attribute.conf | 1 - .../src/config/coupler_in_attribute.conf | 2 - .../src/config/coupler_out_attribute.conf | 2 - .../src/config/domain_attribute.conf | 16 +- xios_2311_src/src/config/field_attribute.conf | 7 +- .../config/interpolate_axis_attribute.conf | 2 + xios_2311_src/src/config/node_type.conf | 9 - .../reduce_axis_to_scalar_attribute.conf | 2 - .../src/config/scalar_attribute.conf | 7 +- xios_2311_src/src/context_client.cpp | 388 +- xios_2311_src/src/context_client.hpp | 67 +- xios_2311_src/src/context_server.cpp | 334 +- xios_2311_src/src/context_server.hpp | 38 +- xios_2311_src/src/cxios.cpp | 243 +- xios_2311_src/src/cxios.hpp | 53 - xios_2311_src/src/data_input.cpp | 4 +- xios_2311_src/src/data_input.hpp | 4 +- xios_2311_src/src/data_output.cpp | 7 +- xios_2311_src/src/data_output.hpp | 4 +- xios_2311_src/src/declare_attribute.hpp | 1 - xios_2311_src/src/declare_ref_func.hpp | 3 +- .../distribution/client_client_dht_decl.cpp | 19 - .../client_client_dht_template.hpp | 132 - .../client_client_dht_template_impl.hpp | 737 - .../distribution/client_server_mapping.cpp | 104 - .../distribution/client_server_mapping.hpp | 52 - .../client_server_mapping_distributed.cpp | 68 - .../client_server_mapping_distributed.hpp | 50 - .../src/distribution/dht_auto_indexing.cpp | 115 - .../src/distribution/dht_auto_indexing.hpp | 47 - .../src/distribution/dht_data_types.hpp | 77 - .../src/distribution/distributed_view.cpp | 36 - .../src/distribution/distributed_view.hpp | 85 - .../src/distribution/distribution.cpp | 38 - .../src/distribution/distribution.hpp | 49 - .../src/distribution/distribution_client.cpp | 610 - .../src/distribution/distribution_client.hpp | 186 - .../src/distribution/distribution_server.cpp | 223 - .../src/distribution/distribution_server.hpp | 68 - .../src/distribution/distribution_type.hpp | 9 - xios_2311_src/src/distribution/element.cpp | 158 - xios_2311_src/src/distribution/element.hpp | 83 - .../src/distribution/element_view.cpp | 0 .../src/distribution/element_view.hpp | 20 - .../src/distribution/gatherer_connector.cpp | 47 - .../src/distribution/gatherer_connector.hpp | 371 - .../grid_client_server_remote_connector.cpp | 41 - .../grid_client_server_remote_connector.hpp | 21 - .../src/distribution/grid_elements.cpp | 25 - .../src/distribution/grid_elements.hpp | 34 - .../distribution/grid_gatherer_connector.hpp | 117 - .../src/distribution/grid_local_connector.cpp | 57 - .../src/distribution/grid_local_connector.hpp | 61 - .../src/distribution/grid_local_view.cpp | 17 - .../src/distribution/grid_local_view.hpp | 27 - .../src/distribution/grid_mask_connector.cpp | 19 - .../src/distribution/grid_mask_connector.hpp | 60 - .../distribution/grid_remote_connector.cpp | 711 - .../distribution/grid_remote_connector.hpp | 94 - .../distribution/grid_scatterer_connector.hpp | 99 - .../distribution/grid_transform_connector.cpp | 87 - .../distribution/grid_transform_connector.hpp | 74 - .../src/distribution/leader_process.cpp | 79 - .../src/distribution/leader_process.hpp | 13 - .../src/distribution/local_connector.cpp | 50 - .../src/distribution/local_connector.hpp | 135 - xios_2311_src/src/distribution/local_view.cpp | 42 - xios_2311_src/src/distribution/local_view.hpp | 69 - .../reduce_transform_connector.cpp | 57 - .../reduce_transform_connector.hpp | 379 - .../src/distribution/remote_connector.cpp | 77 - .../src/distribution/remote_connector.hpp | 78 - .../src/distribution/scatterer_connector.cpp | 60 - .../src/distribution/scatterer_connector.hpp | 210 - .../server_distribution_description.cpp | 525 - .../server_distribution_description.hpp | 88 - .../transfer_transform_connector.cpp | 36 - .../transfer_transform_connector.hpp | 70 - .../src/distribution/transform_connector.cpp | 106 - .../src/distribution/transform_connector.hpp | 80 - .../weight_transform_connector.cpp | 41 - .../weight_transform_connector.hpp | 69 - xios_2311_src/src/event_scheduler.cpp | 13 +- xios_2311_src/src/event_scheduler.hpp | 1 - xios_2311_src/src/event_server.hpp | 8 +- xios_2311_src/src/exception.hpp | 8 - .../src/filter/binary_arithmetic_filter.cpp | 274 +- .../src/filter/binary_arithmetic_filter.hpp | 16 +- .../client_from_client_source_filter.cpp | 60 - .../client_from_client_source_filter.hpp | 49 - .../client_from_server_source_filter.cpp | 175 - .../client_from_server_source_filter.hpp | 61 - .../filter/client_to_model_store_filter.cpp | 139 - .../filter/client_to_model_store_filter.hpp | 98 - .../filter/client_to_server_store_filter.cpp | 66 - .../filter/client_to_server_store_filter.hpp | 66 - xios_2311_src/src/filter/data_packet.hpp | 18 +- .../src/filter/file_reader_source_filter.cpp | 83 - .../src/filter/file_reader_source_filter.hpp | 54 - .../src/filter/file_writer_store_filter.cpp | 100 - .../src/filter/file_writer_store_filter.hpp | 73 - xios_2311_src/src/filter/filter.cpp | 4 +- xios_2311_src/src/filter/filter.hpp | 8 + .../src/filter/garbage_collector.cpp | 6 + .../src/filter/garbage_collector.hpp | 11 + xios_2311_src/src/filter/input_pin.cpp | 8 +- xios_2311_src/src/filter/input_pin.hpp | 2 + .../filter/model_to_client_source_filter.cpp | 78 - .../filter/model_to_client_source_filter.hpp | 58 - xios_2311_src/src/filter/output_pin.cpp | 32 +- xios_2311_src/src/filter/output_pin.hpp | 23 +- .../src/filter/pass_through_filter.cpp | 77 +- .../src/filter/pass_through_filter.hpp | 5 +- .../server_from_client_source_filter.cpp | 42 - .../server_from_client_source_filter.hpp | 47 - .../filter/server_to_client_store_filter.cpp | 67 - .../filter/server_to_client_store_filter.hpp | 69 - xios_2311_src/src/filter/temporal_filter.cpp | 89 +- xios_2311_src/src/filter/temporal_filter.hpp | 12 +- .../src/filter/temporal_transform_filter.cpp | 81 - .../src/filter/temporal_transform_filter.hpp | 42 - .../src/filter/ternary_arithmetic_filter.cpp | 566 +- .../src/filter/ternary_arithmetic_filter.hpp | 8 + xios_2311_src/src/filter/transform_filter.cpp | 72 - xios_2311_src/src/filter/transform_filter.hpp | 37 - .../src/filter/unary_arithmetic_filter.cpp | 87 +- .../src/filter/unary_arithmetic_filter.hpp | 2 +- xios_2311_src/src/graph_package.hpp | 32 - xios_2311_src/src/group_factory.hpp | 1 - xios_2311_src/src/group_factory_decl.cpp | 2 - xios_2311_src/src/group_template.hpp | 5 +- xios_2311_src/src/group_template_decl.cpp | 2 - xios_2311_src/src/group_template_impl.hpp | 82 +- xios_2311_src/src/interface/c/iccalendar.cpp | 6 +- xios_2311_src/src/interface/c/icdata.cpp | 186 +- xios_2311_src/src/interface/c/icfield.cpp | 6 +- .../src/interface/c_attr/iccontext_attr.cpp | 23 - .../src/interface/c_attr/icdomain_attr.cpp | 223 + .../interface/c_attr/icdomaingroup_attr.cpp | 223 + .../src/interface/c_attr/icscalar_attr.cpp | 23 - .../interface/c_attr/icscalargroup_attr.cpp | 23 - xios_2311_src/src/interface/fortran/idata.F90 | 309 +- .../interface/fortran/ixios_interfaces.F90 | 14 +- .../fortran_attr/context_interface_attr.F90 | 19 - .../fortran_attr/domain_interface_attr.F90 | 187 + .../domaingroup_interface_attr.F90 | 187 + .../extract_axis_interface_attr.F90 | 72 - .../interface/fortran_attr/icontext_attr.F90 | 66 +- .../interface/fortran_attr/idomain_attr.F90 | 303 +- .../fortran_attr/idomaingroup_attr.F90 | 315 +- .../interface/fortran_attr/iscalar_attr.F90 | 96 +- .../fortran_attr/iscalargroup_attr.F90 | 90 +- .../fortran_attr/scalar_interface_attr.F90 | 19 - .../scalargroup_interface_attr.F90 | 19 - xios_2311_src/src/io/inetcdf4.cpp | 93 +- xios_2311_src/src/io/inetcdf4.hpp | 7 +- xios_2311_src/src/io/inetcdf4_impl.hpp | 9 +- xios_2311_src/src/io/nc4_data_input.cpp | 57 +- xios_2311_src/src/io/nc4_data_input.hpp | 2 +- xios_2311_src/src/io/nc4_data_output.cpp | 965 +- xios_2311_src/src/io/nc4_data_output.hpp | 2 +- xios_2311_src/src/io/netCdfInterface.cpp | 25 - xios_2311_src/src/io/netCdfInterface_decl.cpp | 3 - xios_2311_src/src/io/netCdf_cf_constant.cpp | 11 - xios_2311_src/src/io/netCdf_cf_constant.hpp | 28 +- xios_2311_src/src/io/onetcdf4.cpp | 33 +- xios_2311_src/src/io/onetcdf4_decl.cpp | 2 - xios_2311_src/src/io/onetcdf4_impl.hpp | 21 +- .../src/manager/contexts_manager.cpp | 353 - .../src/manager/contexts_manager.hpp | 96 - xios_2311_src/src/manager/coupler_manager.cpp | 131 - xios_2311_src/src/manager/coupler_manager.hpp | 52 - xios_2311_src/src/manager/daemons_manager.cpp | 74 - xios_2311_src/src/manager/daemons_manager.hpp | 30 - xios_2311_src/src/manager/pool_ressource.cpp | 206 - xios_2311_src/src/manager/pool_ressource.hpp | 56 - .../src/manager/register_context_info.hpp | 21 - .../src/manager/registry_manager.cpp | 28 - .../src/manager/registry_manager.hpp | 35 - .../src/manager/ressources_manager.cpp | 274 - .../src/manager/ressources_manager.hpp | 81 - xios_2311_src/src/manager/server_context.cpp | 326 - xios_2311_src/src/manager/server_context.hpp | 72 - .../src/manager/servers_ressource.cpp | 196 - .../src/manager/servers_ressource.hpp | 63 - xios_2311_src/src/manager/services.cpp | 268 - xios_2311_src/src/manager/services.hpp | 84 - .../src/manager/services_manager.cpp | 266 - .../src/manager/services_manager.hpp | 73 - xios_2311_src/src/manager/window_manager.cpp | 11 - xios_2311_src/src/manager/window_manager.hpp | 376 - xios_2311_src/src/mem_checker.cpp | 105 - xios_2311_src/src/mem_checker.hpp | 39 - xios_2311_src/src/memtrack.cpp | 115 +- xios_2311_src/src/memtrack.hpp | 3 +- xios_2311_src/src/mpi.hpp | 18 - xios_2311_src/src/mpi_garbage_collector.hpp | 34 - xios_2311_src/src/mpi_tag.hpp | 3 +- xios_2311_src/src/mpi_tools.cpp | 50 - xios_2311_src/src/mpi_tools.hpp | 37 - xios_2311_src/src/node/axis.cpp | 1680 +- xios_2311_src/src/node/axis.hpp | 250 +- xios_2311_src/src/node/calendar_wrapper.hpp | 1 - .../src/node/compute_connectivity_domain.cpp | 17 +- .../src/node/compute_connectivity_domain.hpp | 20 +- xios_2311_src/src/node/context.cpp | 2323 +- xios_2311_src/src/node/context.hpp | 202 +- xios_2311_src/src/node/coupler_in.cpp | 187 - xios_2311_src/src/node/coupler_in.hpp | 132 - xios_2311_src/src/node/coupler_out.cpp | 204 - xios_2311_src/src/node/coupler_out.hpp | 126 - xios_2311_src/src/node/domain.cpp | 2044 +- xios_2311_src/src/node/domain.hpp | 272 +- .../src/node/duplicate_scalar_to_axis.cpp | 19 +- .../src/node/duplicate_scalar_to_axis.hpp | 17 - xios_2311_src/src/node/element_type.hpp | 9 - xios_2311_src/src/node/expand_domain.cpp | 19 +- xios_2311_src/src/node/expand_domain.hpp | 17 - xios_2311_src/src/node/extract_axis.cpp | 17 +- xios_2311_src/src/node/extract_axis.hpp | 18 +- .../src/node/extract_axis_to_scalar.cpp | 18 +- .../src/node/extract_axis_to_scalar.hpp | 18 +- xios_2311_src/src/node/extract_domain.cpp | 17 +- xios_2311_src/src/node/extract_domain.hpp | 22 +- .../src/node/extract_domain_to_axis.cpp | 28 +- .../src/node/extract_domain_to_axis.hpp | 20 +- xios_2311_src/src/node/field.cpp | 3066 ++- xios_2311_src/src/node/field.hpp | 281 +- xios_2311_src/src/node/field_decl.cpp | 14 +- xios_2311_src/src/node/field_impl.hpp | 15 +- xios_2311_src/src/node/file.cpp | 234 +- xios_2311_src/src/node/file.hpp | 27 +- .../src/node/generate_rectilinear_domain.cpp | 17 +- .../src/node/generate_rectilinear_domain.hpp | 18 +- xios_2311_src/src/node/grid.cpp | 4347 +-- xios_2311_src/src/node/grid.hpp | 571 +- xios_2311_src/src/node/interpolate_axis.cpp | 74 +- xios_2311_src/src/node/interpolate_axis.hpp | 18 +- xios_2311_src/src/node/interpolate_domain.cpp | 17 +- xios_2311_src/src/node/interpolate_domain.hpp | 18 +- xios_2311_src/src/node/inverse_axis.cpp | 17 +- xios_2311_src/src/node/inverse_axis.hpp | 18 +- xios_2311_src/src/node/mesh.cpp | 79 +- xios_2311_src/src/node/node_enum.hpp | 2 - xios_2311_src/src/node/node_type.hpp | 2 - .../src/node/reduce_axis_to_axis.cpp | 17 +- .../src/node/reduce_axis_to_axis.hpp | 20 +- .../src/node/reduce_axis_to_scalar.cpp | 17 +- .../src/node/reduce_axis_to_scalar.hpp | 18 +- .../src/node/reduce_domain_to_axis.cpp | 42 +- .../src/node/reduce_domain_to_axis.hpp | 20 +- .../src/node/reduce_domain_to_scalar.cpp | 17 +- .../src/node/reduce_domain_to_scalar.hpp | 18 +- .../src/node/reduce_scalar_to_scalar.cpp | 17 +- .../src/node/reduce_scalar_to_scalar.hpp | 18 +- xios_2311_src/src/node/reorder_domain.cpp | 17 +- xios_2311_src/src/node/reorder_domain.hpp | 20 +- xios_2311_src/src/node/scalar.cpp | 522 +- xios_2311_src/src/node/scalar.hpp | 300 +- xios_2311_src/src/node/temporal_splitting.cpp | 17 +- xios_2311_src/src/node/temporal_splitting.hpp | 17 - xios_2311_src/src/node/variable.cpp | 32 +- xios_2311_src/src/node/variable.hpp | 3 +- xios_2311_src/src/node/zoom_axis.cpp | 17 +- xios_2311_src/src/node/zoom_axis.hpp | 18 +- xios_2311_src/src/node/zoom_domain.cpp | 17 +- xios_2311_src/src/node/zoom_domain.hpp | 19 +- xios_2311_src/src/object.cpp | 5 + xios_2311_src/src/object.hpp | 1 + xios_2311_src/src/object_factory.hpp | 12 +- xios_2311_src/src/object_factory_decl1.cpp | 2 - xios_2311_src/src/object_factory_decl3.cpp | 2 - .../src/object_factory_decl_macro.hpp | 10 +- xios_2311_src/src/object_factory_impl.hpp | 67 +- xios_2311_src/src/object_template.hpp | 55 +- xios_2311_src/src/object_template_decl.cpp | 4 - xios_2311_src/src/object_template_impl.hpp | 194 +- .../src/parse_expr/filter_expr_node.cpp | 276 +- .../src/parse_expr/filter_expr_node.hpp | 30 +- .../src/parse_expr/operator_expr.hpp | 18 - xios_2311_src/src/parse_expr/yacc_parser.cpp | 8 + xios_2311_src/src/registry.cpp | 15 +- xios_2311_src/src/registry.hpp | 6 +- .../src/release_static_allocation.cpp | 20 - .../src/release_static_allocation.hpp | 11 - xios_2311_src/src/server.cpp | 1037 +- xios_2311_src/src/server.hpp | 24 +- xios_2311_src/src/test/generic_testcase.f90 | 303 +- xios_2311_src/src/test/test_client.f90 | 10 +- xios_2311_src/src/test/test_complete.f90 | 4 +- xios_2311_src/src/timeline_events.hpp | 14 - xios_2311_src/src/timer.cpp | 11 +- xios_2311_src/src/timer.hpp | 6 +- xios_2311_src/src/tracer.cpp | 14 +- .../Functions/average_reduction.hpp | 2 + .../src/transformation/Functions/extract.hpp | 2 + .../Functions/max_reduction.hpp | 2 + .../Functions/min_reduction.hpp | 2 + .../transformation/Functions/reduction.cpp | 1 + .../transformation/Functions/reduction.hpp | 2 + .../Functions/reduction_types.hpp | 20 +- .../Functions/sum_reduction.hpp | 2 + .../src/transformation/algo_types.cpp | 42 - .../src/transformation/algo_types.hpp | 16 +- ...hm_transformation_no_data_modification.cpp | 18 - ...hm_transformation_no_data_modification.hpp | 21 - .../algorithm_transformation_reduce.cpp | 33 - .../algorithm_transformation_reduce.hpp | 33 - .../algorithm_transformation_transfer.cpp | 34 - .../algorithm_transformation_transfer.hpp | 30 - .../algorithm_transformation_weight.cpp | 33 - .../algorithm_transformation_weight.hpp | 33 - .../axis_algorithm_duplicate_scalar.cpp | 68 - .../axis_algorithm_duplicate_scalar.hpp | 49 - .../axis_algorithm/axis_algorithm_extract.cpp | 171 - .../axis_algorithm/axis_algorithm_extract.hpp | 63 - .../axis_algorithm_extract_domain.cpp | 197 - .../axis_algorithm_extract_domain.hpp | 64 - .../axis_algorithm_interpolate.cpp | 406 - .../axis_algorithm_interpolate.hpp | 68 - .../axis_algorithm_interpolate_coordinate.cpp | 349 - .../axis_algorithm_interpolate_coordinate.hpp | 75 - .../axis_algorithm/axis_algorithm_inverse.cpp | 149 - .../axis_algorithm/axis_algorithm_inverse.hpp | 53 - .../axis_algorithm_reduce_axis.cpp | 121 - .../axis_algorithm_reduce_axis.hpp | 52 - .../axis_algorithm_reduce_domain.cpp | 324 - .../axis_algorithm_reduce_domain.hpp | 63 - .../axis_algorithm_temporal_splitting.cpp | 61 - .../axis_algorithm_temporal_splitting.hpp | 50 - .../axis_algorithm/axis_algorithm_zoom.cpp | 116 - .../axis_algorithm/axis_algorithm_zoom.hpp | 63 - .../domain_algorithm_compute_connectivity.cpp | 105 - .../domain_algorithm_compute_connectivity.hpp | 53 - .../domain_algorithm_expand.cpp | 694 - .../domain_algorithm_expand.hpp | 61 - .../domain_algorithm_extract.cpp | 301 - .../domain_algorithm_extract.hpp | 58 - .../domain_algorithm_generate_rectilinear.cpp | 176 - .../domain_algorithm_generate_rectilinear.hpp | 64 - .../domain_algorithm_interpolate.cpp | 1012 - .../domain_algorithm_interpolate.hpp | 109 - .../domain_algorithm_reorder.cpp | 238 - .../domain_algorithm_reorder.hpp | 45 - .../domain_algorithm_zoom.cpp | 280 - .../domain_algorithm_zoom.hpp | 61 - .../generic_algorithm_transformation.cpp | 1126 +- .../generic_algorithm_transformation.hpp | 173 +- .../src/transformation/grid_algorithm.cpp | 22 - .../src/transformation/grid_algorithm.hpp | 37 - .../transformation/grid_algorithm_generic.cpp | 76 - .../transformation/grid_algorithm_generic.hpp | 44 - .../grid_algorithm_no_data_modification.cpp | 10 - .../grid_algorithm_no_data_modification.hpp | 28 - .../transformation/grid_algorithm_reduce.cpp | 13 - .../transformation/grid_algorithm_reduce.hpp | 40 - .../grid_transformation_factory_impl.hpp | 21 +- .../scalar_algorithm_extract_axis.cpp | 124 - .../scalar_algorithm_extract_axis.hpp | 54 - .../scalar_algorithm_reduce_axis.cpp | 128 - .../scalar_algorithm_reduce_axis.hpp | 52 - .../scalar_algorithm_reduce_domain.cpp | 124 - .../scalar_algorithm_reduce_domain.hpp | 55 - .../scalar_algorithm_reduce_scalar.cpp | 111 - .../scalar_algorithm_reduce_scalar.hpp | 49 - .../src/transformation/transformation.hpp | 129 - .../transformation/transformation_enum.hpp | 33 - .../transformation/transformation_path.cpp | 163 - .../transformation/transformation_path.hpp | 40 - xios_2311_src/src/type/message.cpp | 6 - xios_2311_src/src/type/message.hpp | 2 - xios_2311_src/src/type/type_decl.cpp | 8 +- xios_2311_src/src/type/type_util.hpp | 10 - xios_2311_src/src/utils.hpp | 15 +- xios_2311_src/src/workflow_graph.cpp | 432 +- xios_2311_src/src/workflow_graph.hpp | 77 +- xios_2311_src/src/xios_spl.hpp | 21 +- xios_2311_src/src/xml_parser_decl.cpp | 2 - xios_2311_src/tools/archive/boost.tar | Bin 17336320 -> 59392000 bytes xios_2311_src/trunk/.svn/entries | 1 - xios_2311_src/trunk/.svn/format | 1 - ...702346a7735783c40c3c5d7dc9f061f48.svn-base | 71 - ...4f2685a36d67ee488f80e0432497ce34c.svn-base | 104 - ...ee28d2511414161f64f086497532d706d.svn-base | 2560 -- ...f3e30c69b485c32b184bda5192a21d103.svn-base | 73 - ...e330b418c0bb3bc589b10b4a6020bcf2f.svn-base | Bin 2514116 -> 0 bytes ...b3267602e50d7132407425f8e004c988c.svn-base | 138 - ...bc73c2f4dd411424f56d5f91d5431e765.svn-base | 176 - ...707a316fbb435e21ce1792cf26a092b78.svn-base | 167 - ...b62d54b462672e461520f00a745ec7bf1.svn-base | 198 - ...1dbb8fa1d2e76d860b901065c7a64b5f5.svn-base | 333 - ...d5f5f2ef6e578ede836f7b433c5f10bf3.svn-base | 30 - ...79eed33640034cd71bea063c5173bc065.svn-base | 121 - ...77c8b8bc34c5ac25eaa652d51e613fa84.svn-base | 40 - ...efb88d4a8c04f8e9b33f381681bd217a6.svn-base | 15 - ...587a061ed4b0e0d231ecb090254f8b17a.svn-base | 22 - ...076c89810ea11ba184078a577728cd3d3.svn-base | 57 - ...495f59756f325a366de7e3f704287927c.svn-base | 34 - ...3f1159578dfbbe9c828440250066e4256.svn-base | 244 - ...a861f3b86ca0d28adbfc93004eadec3f9.svn-base | 741 - ...9aa1d47b05b43d73237e33f24ff3085e1.svn-base | 410 - ...ab019de8827c1b42a80621b7f706dbb8b.svn-base | 8 - ...a7635bb99931c00ef8ab48d1156669775.svn-base | 110 - ...7d5657ce2db2bf02d25f3da52192b7075.svn-base | 192 - ...413d84e0fd8caab1eedd0fdf1ade9f88c.svn-base | 297 - ...da9c1c09cf8f252895b39e7c5910c6007.svn-base | 50 - ...c60ab2fba3374c2680620d7f967754230.svn-base | 129 - ...e986921ee8584c2ea38500065d769cd96.svn-base | 1116 - ...0600cbe87d36865c339bf0549f927afeb.svn-base | 69 - ...b5cb1cf2fa11eaac688f7754cd10c8191.svn-base | 51 - ...3b506de6604f7893f20a3e55324110cd7.svn-base | 77 - ...9f417a46ac04551d647353e3775942a0a.svn-base | 753 - ...ce9f206980ba38a2a70d0ea01093ad565.svn-base | 71 - ...73233f7b35015c0a0b52af22c4e12e575.svn-base | 24 - ...bef1c755bf2062e6be9931af073213aa4.svn-base | 37 - ...8bb3c3f22bc6f36013bd68c2d97c7ef8d.svn-base | 41 - ...64c77428e5ec400f8a10cf617b21d3df3.svn-base | 8 - ...bf552f86fbe7bd59177c5591fd66081c6.svn-base | 1144 - ...7857d0c4814b866bbfe5113d89a527198.svn-base | 33 - ...fd77e6e090706b8c0a74b760aa61cbdd3.svn-base | 51 - ...65988e3b01a64f458e355159a70528f38.svn-base | 422 - ...f151c62c183cc3ad49a661b86460d813b.svn-base | 206 - ...ec82fd40cd3620a7f09d5c9d26a1e5271.svn-base | 66 - ...cc4e7b6a35a29077e46f8f4e7285b2be4.svn-base | 10 - ...f942ac889b66ddc28936ce858929c8918.svn-base | 32 - ...558bf202b4b4e6c7be37ed8d270d90ff5.svn-base | 80 - ...8b70605823bfb5dbf206e820891b9c6cc.svn-base | 379 - ...580311eed6c01e940724241896bfd037d.svn-base | Bin 3110992 -> 0 bytes ...11e350e622a8dd1c99cdc1930bec2157b.svn-base | 711 - ...be983ae91cd829c3bee6b4c22c3234dc6.svn-base | 61 - ...50ea240dcbe814b56cb51a831a29769d8.svn-base | 90 - ...d18cae94c032330026f944e8bc8f7e696.svn-base | 434 - ...fd2353f6b1e5e58444a2653c61564cf71.svn-base | 10 - ...28ffd1022354f6b6813dd153be96f626e.svn-base | 34 - ...01e46effc4f4dd5051b220ea9d4231350.svn-base | 493 - ...da7903aa8b3d4a867a2e675fddefc5ef4.svn-base | 2448 -- ...13a742d02b1dc4d36842bdbf3a598a48b.svn-base | 11 - ...0e5ede7692c8b2f5e88ec8773ab0e5eb7.svn-base | 67 - ...65225bcde3284eb146c5e84c6e036c513.svn-base | 58 - ...bfbd8ee7669a384043de4f5cbe890a0c8.svn-base | 440 - ...c7e26c911b3aad59eea0504625dfaa1a0.svn-base | 8 - ...00bc0229eb8269a832b8230ea1a56a7ae.svn-base | 57 - ...711e73155bbec19c782e8f77e76de3a5b.svn-base | 112 - ...e0f03e0deef14aecaeb33df0540f4261f.svn-base | 2349 -- ...c09a8afd7eacae367ddcad1276e66f70e.svn-base | 166 - ...367deb566298778b2248924c0b67f703d.svn-base | 106 - ...8b3b85f4643d98e4f1ed08acae4b55302.svn-base | 92 - ...746676b0183d0c967ee5c80f335535ccb.svn-base | 799 - ...94cfdda4f40ec60aa9aa8575015f7bf5e.svn-base | 11 - ...1428f8463d53c257e34a5e0c6832421c4.svn-base | 23 - ...0a206ee5fb7c8bb3e20129408caea47a0.svn-base | 511 - ...860c535b9a0a6c97b6de152eb3660eefe.svn-base | 42 - ...1c51bd0ec97516575d302b9f19c48b7e6.svn-base | 419 - ...56fc9c31b4459e173e944c530201c314b.svn-base | 31 - ...84e6a213cf5e904842b9b0b64f86d6c77.svn-base | 24 - ...8e17a9431a0870c422605e74a8d96468e.svn-base | 1725 -- ...c6b843d4f32ec8303ec59d8368bb03cc7.svn-base | 83 - ...89cea33ba230ef4f090badf13ece6743a.svn-base | Bin 1803845 -> 0 bytes ...0e9c9195d3b84d1e745afc2eff5c2bd89.svn-base | 83 - ...38eb0bd09cb71bb5209673974042909ef.svn-base | 25 - ...a62c42ad11f830d2082e3258393ebbab4.svn-base | 374 - ...05805962bddaa7becd69b0359ebe2a45a.svn-base | 22 - ...9c79f80dd1c1acb16cb129087e08af7b9.svn-base | 156 - ...85be37be329a1d5142cc3c2053aeadf50.svn-base | 10613 -------- ...f52a9741b046c64c5386d5519c2780c22.svn-base | 22 - ...9607dfad0b66d6a8957932e0557b7f118.svn-base | 1026 - ...1ae2f116c4651b6c45d9e87325a85bf52.svn-base | 25 - ...e02ea366675f47d88fd9828eaeedb76f2.svn-base | 84 - ...0c8d331bd66430c3a710419df64cdb868.svn-base | 6 - ...1d446b7f56d19c4e954ee6fad2512cfd8.svn-base | 186 - ...30d8a3084d37c9d204c01464f6d8f4515.svn-base | 26 - ...d5ad63af45f1cdd4f060578cb2c7857e3.svn-base | 19 - ...bed1f93515c05fb139713e99a19598632.svn-base | 224 - ...5bbc2bfbf12e715c5e581f184e3525dbf.svn-base | 81 - ...78e31023bc1d764eb23533b29299c3977.svn-base | 30 - ...b79ceee6e2748b050d6cf9800855633e0.svn-base | 82 - ...1ba609edb305de7e2bcf510df2434f107.svn-base | 26 - ...fd27d0ecf7c7af4e9d4cde4a416a31b28.svn-base | 8 - ...e107ac5b0c60240f09c1c31ddfd13fe39.svn-base | 21 - ...358bf9d952c3aadf7eab20caac1ce775e.svn-base | 26 - ...c0c3ee896045050282b0cc66909c2a45e.svn-base | 71 - ...9195ae66db453a7ef922ac61376aca05d.svn-base | 58 - ...50050b4546c3decff15b4df34ba57abc4.svn-base | 40 - ...d692a0cff2749314b7de7481ae8172291.svn-base | 68 - ...4720723592faeaa8d7e3d7cd1d6771606.svn-base | 4 - ...466211b82387e8d071522e5c79a63af81.svn-base | 113 - ...6c9f6fa786e6966240c217fb4ca817101.svn-base | 27 - ...b35e034158676aaca387a584acf3e17c2.svn-base | 26 - ...771be50a04d1ac4748991399b01133f85.svn-base | 176 - ...7daa1cc2f16ec7e5d14bbf9e2c436d9dd.svn-base | 83 - ...19b0a740ffdf07c82e85ca99225b5d71c.svn-base | 224 - ...5a1131b647ea53f78fc38ca22a756c35b.svn-base | 661 - ...92bd838a17acc34a1bb75e421f2a52112.svn-base | 444 - ...826255a7fa8834c149666ec628aa79ed3.svn-base | 557 - ...ef40edf69e2e633457ebbe9236a98676f.svn-base | 12 - ...b373ae58030c90fc4d65f40158302d83f.svn-base | 40 - ...f1ab05acae745f566dbdbdf82cba13cbe.svn-base | 49 - ...1b93cdb83fde1926155080666bf0eb141.svn-base | 29 - ...bae1a1f7ed52d1b5a537e4e78d006f667.svn-base | 397 - ...699125da9cbf0021aceb89235105b91fb.svn-base | 142 - ...623bf30642f1d397b475544cf26ea28b1.svn-base | 187 - ...4e53fd1f4f956abac018abd5870a6ac75.svn-base | 112 - ...6f01d832f8c6f79502886622811a5a252.svn-base | 30 - ...1aa9a21dd33c94f6af2c6726d87617dca.svn-base | Bin 2062 -> 0 bytes ...12b77deba982c3238aa58e84740e254b1.svn-base | 98 - ...efa9ddbeabd48e4f936aef184387fc2e8.svn-base | 216 - ...40d3a276aaa858eea95d4400b9a950aae.svn-base | 30 - ...ecef3a3fddfdc33b40ad3be45af28c89d.svn-base | 7 - ...074b3e95de931cddd5acb90dc2ef45214.svn-base | 22 - ...2963205daaeffa9654b4bd0df0c91e4a0.svn-base | 127 - ...3d2b90b612f9ceba0a200601b7374a887.svn-base | 613 - ...1ed88d6cb4d42e8193fc7cf9289f233a0.svn-base | 51 - ...bba9b4290f31454383b23ef17fc53ba6a.svn-base | 12 - ...700d92ecea8af73ba5344daeb74d7f7ad.svn-base | 10 - ...a0e9698bee61755d32b59e1be50d4af3a.svn-base | 69 - ...f357646bff693409423c90904953938f7.svn-base | 5 - ...bf24fdc78aceaf014e67b4582b279b8d6.svn-base | Bin 1726336 -> 0 bytes ...d8d6d7391808aa4698d2749bbeb10175a.svn-base | 184 - ...d0a1b301782e16d4b69a672042b16110c.svn-base | 607 - ...caf3129290db0985c6a0479f5335f105e.svn-base | 173 - ...3549dfa1f35c62a3401e9f97e79e8074c.svn-base | 112 - ...d2a5f506b060c9830c54670a0a509c16f.svn-base | 66 - ...94be239156ed224769276f5f9944c3547.svn-base | 47 - ...49a34cb20cbd970c55f041189a01c86c4.svn-base | 24 - ...a0b1635c2ad2e86ff0e3dcbd7ec180cac.svn-base | 100 - ...58f8663eea10b1b022efc28e4b62e6560.svn-base | 15 - ...7d290d0c5fb81a61dcb6179164ba3ee93.svn-base | 40 - ...5dfed7373ce0dceda8883f51714600cd6.svn-base | 82 - ...85dd99684aeb129d5b6a127e7e41b5d29.svn-base | 506 - ...22adcb3f2ed985a2fd639a5cd17c9162d.svn-base | 60 - ...66e2d6ea26a8d6405ac03549db1e150f6.svn-base | 23 - ...8d3c4f9644073ddc8c49e11170d84fa2d.svn-base | 22 - ...3877460067789a56e7a60d25d3a1bd899.svn-base | 22 - ...0ff4cccf41c2a0ff32a0f62b79e888ebb.svn-base | 1203 - ...eb977f4e09f76ea125885571118bc319c.svn-base | 1187 - ...2f0165e455703299f8aa9d24e0cbc6cd0.svn-base | 9 - ...7c9577ac1ef1bd87395f6f9e4dc7bd314.svn-base | 76 - ...6189993558ad3b606509d53db901754aa.svn-base | 35 - ...8cd76bfd5eaadef9d4a8c1d52894483fa.svn-base | 9 - ...093b325526a569ca62d99c36c54de26dc.svn-base | 15 - ...b8e0640a26f20672d172a138004f9e7c8.svn-base | 37 - ...b32983b08beab3cbd70756ffa9ebf29bc.svn-base | 52 - ...0cc1122ac27776c9e7b0b91e8e871aa6a.svn-base | 33 - ...ceedf7a611209fa5fcd63657bb5542985.svn-base | 264 - ...9c393a7c343b8ec2bb0cd46750cd39f62.svn-base | 79 - ...09955ceedc0e67030ed223de8f4000b73.svn-base | 435 - ...07624ad9f56be8b877d5a783a4f9bb037.svn-base | 44 - ...0fa00b02dbf5e5097a308cc3f91c86b8e.svn-base | 506 - ...61f3e185840152878eced04f17e24fc17.svn-base | 15 - ...fbd3d262871418a40b6161cf91db9e70a.svn-base | 27 - ...082de1a9c56d4abb21fbc8237f820faac.svn-base | 1048 - ...cd2d987907b282d393d49bd18d1fb08e0.svn-base | 47 - ...faaeb21db80b4f6eab5ec67d89b3b9f28.svn-base | 116 - ...78edeedb227772eedda155aedafbfbe2e.svn-base | 89 - ...534aac11cda28ac96224a7ce92a752620.svn-base | 218 - ...363f61bac843ea5b684ec2dc18a3cb6df.svn-base | 130 - ...656a2a21e1b076276c20a4d615f715d11.svn-base | 152 - ...3b096138f2edc5e33a8d5a8a27b1fbe54.svn-base | 100 - ...647052d754af0606f36ae2e892bffb245.svn-base | 34 - ...8b470a1bfef6102c77aef38a298d22798.svn-base | 28 - ...ef92a9057083ebe69448319cc55e9ede0.svn-base | 49 - ...0f65b005c1f2c2383cebc8c2e807f0405.svn-base | 11 - ...d5cbf42b3274b9301f49ca39c422f2f10.svn-base | 41 - ...aaf26422b49b194765da998941827e100.svn-base | 58 - ...8a9e2d1642cc97ade11392beac35b6d39.svn-base | 397 - ...44c2181a65e7a4b4dc2acc2fc9b4ce7cc.svn-base | 88 - ...f49a279082f0ba5a02ffc6d1dabf75476.svn-base | 62 - ...2b43602f718726ee22eb50cdd82f8ddbd.svn-base | 15 - ...01dc9b564d7556a8f7b0eaad6bf799d3f.svn-base | 15 - ...649e1310e5c448f43243cf31622144a75.svn-base | 43 - ...f935e5b2b868b13e7ad9d10e5ab0408eb.svn-base | 512 - ...37c296247e45e684bf9a29b49aae1a054.svn-base | 99 - ...12ff94298a348b0e795a93d910bb7639b.svn-base | 737 - ...08de6d508527e89fde103b0c7d875f604.svn-base | 610 - ...88aa7d12c0f8e75e077d6ee19439e5200.svn-base | 389 - ...f68377d8bdf7bdea3d47f457e5c0f5e3f.svn-base | 20 - ...c035eb79a97802bf0912ca3fea5de579c.svn-base | 40 - ...fa126529663a87e2e01f3477a285b0d67.svn-base | 128 - ...6c2cf7eacdd21ae0fa4d45e2c7c28b39f.svn-base | 53 - ...2218f38e590c1a49b358cd88670798314.svn-base | 72 - ...516bd604168063fb94703431b8064ff4f.svn-base | Bin 1326882 -> 0 bytes ...07166b9703b62b0a46538d23af19cc928.svn-base | 207 - ...58c82e48cdf2883829c41a96bf3197853.svn-base | 328 - ...4d095d5225e6737dd7f91bc6f8a525bca.svn-base | 87 - ...c7735ea6822f1c1962ddb3062dc5e4d1b.svn-base | 111 - ...28ab3c0bb75d03e72b1a43b9ea3440fa2.svn-base | 171 - ...0a7e09fd853eca5f6be8f3a498c32bf3b.svn-base | 11 - ...4aa20a37ff74203a40b8d323ebaa8f507.svn-base | 503 - ...312805bb76f7eb61f1abd5e169b73074a.svn-base | 24 - ...879965649cafbb5feb3d537f1cf0542fb.svn-base | 134 - ...1ff3b3dc7309a6826580512ea895a86d9.svn-base | 8 - ...49ac35b0650aaa803970a5bbd123e86ac.svn-base | 6 - ...7968c37499e2e8d7660ed3734f3396a4e.svn-base | 52 - ...c5e13a53ee411054e67a9f384da3499d2.svn-base | 35 - ...a6dbc9f265c5365f117ce9e19bfb8beda.svn-base | 24 - ...010f161a682e04ae398d97cba7607324f.svn-base | 69 - ...efa36ad2ba600d94fa02125de7402e02b.svn-base | Bin 3651 -> 0 bytes ...b1729564105c9e29f0bf6627ae5df372c.svn-base | 379 - ...9ade0d2b65b39b8787adc7cf3487f5848.svn-base | 25 - ...5f2507be97169b29c8fd04b6abe25dabb.svn-base | 54 - ...bc2f66243d77b29d8cf5bbf7b2d466f1e.svn-base | 657 - ...9f08d66796cb358c1c9d48f578f61dbe9.svn-base | 60 - ...b0231da6ed50e5d0031da759ff0d4e3bc.svn-base | 256 - ...785f9075e8ad4b7a2f19213d42ed991f6.svn-base | 79 - ...d4db67fa50ee815187edace141739514e.svn-base | 42 - ...372f5e38213d4e00b2691b8c5c5ff62e2.svn-base | 26 - ...3302db57a8c541d536a6f7c3ea6f0d8cd.svn-base | 74 - ...7e67484610186e47852800ff6476d6761.svn-base | 116 - ...adc6be00a4ba4ae5389319e3ae284066f.svn-base | 715 - ...afa9177a9ed6c7ec65f21beab01bd67e9.svn-base | 522 - ...5e3ce53e6c8d90ac551a2a0b13cf334af.svn-base | 129 - ...c50378f5b65640fc47e720c1e2b47ce83.svn-base | 937 - ...0605292c453d50babdefbdc99e5b17a01.svn-base | 30 - ...5ccac44089ba89acb2b8de7eee02c9309.svn-base | 49 - ...6274e1f77bf9896598fad3fba7787e7a8.svn-base | 79 - ...1d8a308a31f6d5c179ad06c4a83aa816d.svn-base | 86 - ...08bb6d5e0ff37c2ea4e7319d1b343a480.svn-base | 225 - ...0adb3d502f99637a562a7009fa32ac9b4.svn-base | 27 - ...9461ade3cc91f51b41d9124eadfb94314.svn-base | 76 - ...b22f5beb72c06e27a3f135fdfd2260888.svn-base | 139 - ...3b65ac0ab3a20bea54626bc23adb3e173.svn-base | 22 - ...f96f450693bea2f235851a0ecc772dc9b.svn-base | 268 - ...e4bf8660004e11aa31682a37429582f93.svn-base | 25 - ...21d84a9820b73e256809b21cd183a8c4d.svn-base | 94 - ...10fa46532863b7697b4d398bb46fcd7a6.svn-base | 30 - ...f995279333b469156564381829215f4e7.svn-base | 542 - ...393ba13b0bf57de140ce99f495ca81ccc.svn-base | 237 - ...21a34d992ef70b49f5502d32df39a61da.svn-base | 28 - ...aef28bc43047067c702bc58ccbcabe6d8.svn-base | 91 - ...c00e5215970fa0aa45b082be12db51da9.svn-base | 115 - ...871bb158cc7ec215074b904e04070de14.svn-base | 319 - ...e46f3e2e753b956b755a5de648bbd4a9a.svn-base | 24 - ...e33db8371d8a35514b525de0abf086c37.svn-base | 56 - ...a30968145bfe70ae7a03e2dff88aa7af4.svn-base | 22 - ...92553e0762d862ff984a03037146fa2b5.svn-base | 6 - ...3defc4f6e1ae57a942644af81a2f69ba6.svn-base | Bin 50742 -> 0 bytes ...4f1d00081f04f11444876a62bda3f1526.svn-base | 40 - ...9c7f599cbc8f1093d0bcece0c2aea1eee.svn-base | 44 - ...78bad89a7f717e689e2b715c1a097bb5f.svn-base | 22 - ...23b149f6a03d6cb92861d161303933d01.svn-base | 482 - ...b97f9192191e2b474afbaf12894513226.svn-base | 23 - ...a4440366d6f08698f9f22a1fb06fe9981.svn-base | 35 - ...691ceb2a17e6d4c221d1a4e5f4f08c55c.svn-base | 90 - ...eb89b34688b1bbd65b52c1146571ce83b.svn-base | 3 - ...435868d5f79cdf6f64b9ffae906f61f0e.svn-base | 83 - ...1443c4fda3190650d2939147c868a1adf.svn-base | 1169 - ...5d83aa19ad9d473d26d3c858faa86391f.svn-base | 757 - ...0f8c8a642606941dc1204991a24b76f76.svn-base | 117 - ...a1fe49d560c672af7c267e459ca1bf62c.svn-base | 42 - ...347d9852f0d5ebdd7afcf8cf64d0de2a8.svn-base | 4 - ...277101bdb5d4a9abb38208816ca2a15e2.svn-base | 22 - ...f8b5002e146b369044d0534d9e867d2d8.svn-base | 130 - ...83737469eb4d260958fa5c9dad8f8ada9.svn-base | Bin 430188 -> 0 bytes ...8365515a5fe783a8dcba59229cfca1b7f.svn-base | 240 - ...5239e6d2e3f296a267827c72397ea5419.svn-base | 13 - ...96d3d7053a3f0db8f821f4d6dc6c3feec.svn-base | 26 - ...a613e11e2ac1a413b116c29ebe85b3f7b.svn-base | 41 - ...39a90f7eb197dfab5d5f4a965e1d26871.svn-base | 100 - ...61f6ec201161ea9d07d4a3f3ad1a24476.svn-base | 169 - ...30af91ab00c5c958d297c0161c435b57e.svn-base | 17 - ...8e3d80d7112812376de5c92c966ec7c20.svn-base | 13 - ...4689926e9a6988c13357ec43bc37c54f2.svn-base | 26 - ...f4573eb76926c7760ee06b9313afc27d0.svn-base | 369 - ...359d75e413405b216328606e92cb2a4c9.svn-base | 56 - ...b275911074d7f59e68db8daccda37fd7f.svn-base | 22 - ...fb8a477cd60b75444310c00df87d4d360.svn-base | 159 - ...534905774bc6c98c9e17977246b6ab182.svn-base | 266 - ...a575dabf66be0e2a77e86173fe6a59060.svn-base | 21 - ...4ff7a8f486ca747ecba2c563306bda175.svn-base | 371 - ...d869aeee08eb87c12d936288870122887.svn-base | 22 - ...17278bf30c7a772ca814c493208065c4f.svn-base | 51 - ...ae43150b40e8654289388c1e127523aea.svn-base | 69 - ...7e8b62fad32bc757eb39c05ffabaccc46.svn-base | 17 - ...48d7c091bd0bcdb6dd2f06f70bcb77302.svn-base | 77 - ...2fdc6f0250b3f7b179d46895ea4be6fbe.svn-base | 68 - ...1992073ef37efe8d4935ea29dd9082993.svn-base | 196 - ...cf29b5072911b5770da855a9a0857c35c.svn-base | 304 - ...5a910aa5c668132b5406faaac4702ee58.svn-base | 461 - ...5d9401834396fa231a50c9eb246426a9e.svn-base | 423 - ...00ebde9cf5a01dee83ba6afd1aed61688.svn-base | 81 - ...85ce28bc0397bddd3458dfd82b3a3f68c.svn-base | 22 - ...987e4a56c75aa7eb3a377ed87a28a74dc.svn-base | 38 - ...c05f51466b08d73149d7f58a735b6dd29.svn-base | 132 - ...606d2575b4e88394f4ffe257f6d5f77b6.svn-base | 14 - ...3cbb8f40c93fec333d269859f2e584df3.svn-base | 22 - ...91bfcbcdab3ff254a675c2b12795c28f4.svn-base | 52 - ...d9200a67c398b5924489835d0ea0b3c15.svn-base | 147 - ...4e4ed460f239445cbedf5dacacb577173.svn-base | 3203 --- ...83f482f43e9b56c73e6b07bc9bfba3633.svn-base | 19 - ...ed265c63391c3c3c10cdcdcbf55dcabfb.svn-base | 34 - ...3c99f8cd5ee01ae3d4740f58b09b37c02.svn-base | 22 - ...e8567250567b1a1766f52419bbe199214.svn-base | 71 - ...4208fe913f5c43839d1590b4a1db6d3a3.svn-base | 34 - ...0787c76b878cddd4bd35d4d55b29fbf32.svn-base | 89 - ...0b4a6a48dc24f0859aaf1a61cdb192b58.svn-base | 187 - ...8566d1f1c6d773defb411fc3d71b63fc8.svn-base | 1485 - ...e602dad4d262ce9b1e8d59585813c7e95.svn-base | 187 - ...59318cba29d33b05c25db7799f0e044b4.svn-base | 14 - ...b59e543f730f2f99323c06bfc4ee0985d.svn-base | 274 - ...b8bbe0104d39b75b80790228701a6a4f9.svn-base | 525 - ...ea552e07f6bf528f9691a6d73a4fa953a.svn-base | 28 - ...4a30c19bcdb93ee13d1e45d981bf0a882.svn-base | 66 - ...e65b763cb5cceee6e20b1dfe371d67fda.svn-base | 867 - ...c6b3ff8d062e8105197f4ad4265a5bfda.svn-base | 11 - ...c831fd24c56d1655119075183e0e6e0ce.svn-base | 78 - ...07701d53ab5543eb81417c6e067db95a8.svn-base | 94 - ...9807ddbb12a04ef9564e03b729ad80c23.svn-base | 7 - ...3999f62a5b3ba3acb3e066ef7abf789cc.svn-base | 30 - ...fb5983fa6ea3a6b52554cf92dbaa4cb9a.svn-base | 366 - ...9f895ed156d13ea13bb352b1491145729.svn-base | 76 - ...6339bb1b1c3fd522ac982aae3c945b0bb.svn-base | 10 - ...cca96cb18ec8512626637cceb9c7e5e6b.svn-base | 27 - ...dccf6e5254f65ed191497cd3278d9e44c.svn-base | 7 - ...34c55dff0aa3e80d49619bc8951ee19c9.svn-base | 36 - ...b97f8a3133612c1ae1abee0511396cadc.svn-base | 11 - ...c037ee79ae80b7e9271be93b5a2a3c594.svn-base | 19 - ...394f64ecd84b65f1928d457c2fedebe04.svn-base | 301 - ...f415ad7111b5c84ef18e024635b7d2cf5.svn-base | 265 - ...d86a11969a8236763e1df8fa6fa3da94e.svn-base | 595 - ...576709ddffdb4fe541973534614801692.svn-base | 54 - ...135555408f37508ff4dede0a6ddd4bb4c.svn-base | 52 - ...ca68f88db0b1677be2f1a5fb5c37d70b6.svn-base | 6 - ...28277c5ba3139e8f66f21c9ad28c528b8.svn-base | 126 - ...899eacf91b1b8e36b324080ac591671cf.svn-base | 15 - ...7b111e83f0ec6a63ca45d8b8565e286fb.svn-base | 88 - ...83beeca935332a745c30dac87c421196a.svn-base | 41 - ...02f69e728878ce1bc64e0e32bfec330c7.svn-base | 34 - ...344b834dc5bfeab5a43c74a4c8516e775.svn-base | 600 - ...0a7112e15823cd1db2475380363ae9d48.svn-base | 11 - ...267de862bd2543d87b6ce6cc46c62da83.svn-base | 268 - ...3be53e2fe5bf54aff715946b3ddbee201.svn-base | 332 - ...8e89fbd734f5cf3d07b00f81c35fc0c2c.svn-base | 83 - ...4b2bb0642671f2376b00381b33549402d.svn-base | 96 - ...e0c35a9ed82c706d3ec68b89e10585200.svn-base | 62 - ...5f08fbd6f8b80e302ded8466a2628a376.svn-base | 20 - ...2d3d17b38b349c9e4ef87b11c7403ad7e.svn-base | 132 - ...aab1ab8b4bbfb70bf0308eb1726ba4aaa.svn-base | 73 - ...dda46933b41ef680153e895fd3085753e.svn-base | 165 - ...ac92d5f04877f47881d92064e81fb51ab.svn-base | 63 - ...b1906d79bffa23b341f54c8514b5895b5.svn-base | 14 - ...f86ec14e1151e6047bb784f8ebcd16c0d.svn-base | 68 - ...3d6dc5a9dfbe2fc3fa8760dae625f063c.svn-base | Bin 7724 -> 0 bytes ...3c2ae060588e650070ac7c5bdf3a055ef.svn-base | 149 - ...9f2893952e6c2481c40c3a8ad69f3e508.svn-base | 11 - ...7283b2d7cb3acfaf7f7b6b67f4bc15311.svn-base | 302 - ...1ca513746afc05b9e19322b292e3496c3.svn-base | 163 - ...1207e22dbaf23e13571114b12a21baae6.svn-base | 265 - ...05bc427315ed4f89c5c4e6946dc1126ba.svn-base | 164 - ...f085da5156d2db4776a5c0d4c037272e3.svn-base | 204 - ...e8e5241715d6eeedc8461ad924f3af463.svn-base | 50 - ...e3cb04f1c2b0d15f981b07d38950e5d7d.svn-base | 191 - ...df10813c2c9c4067799398737e502a218.svn-base | 33 - ...ac771df8c7ea703c22ca43d48c4924f9b.svn-base | 406 - ...9e2c6eca643ef5c94baf580baa4980ba5.svn-base | 41 - ...d13b6da02c7bb8d98860aca8ff1fa38b5.svn-base | 11 - ...b3ff4a555426a1ba0b6c0a8d866522abb.svn-base | 13 - ...f2d56a3b7ab8d720fb2ff1fc3e9deea0d.svn-base | 87 - ...f601c46058d2133051e9f0bd3f5b0b943.svn-base | 89 - ...eb922778755bc6133a172fb0411de993c.svn-base | 390 - ...8b8d6dc6ad16c8ae97c76096bb40653a4.svn-base | 80 - ...cd303b503815ee98252bcfb63c32f06b8.svn-base | 5583 ---- ...059bf05aa1e0b5a4cd4cf09d16a6b34e7.svn-base | 50 - ...64ac8afb0e0314666b0b4481bd650a6d9.svn-base | 555 - ...100fc1dc12a9286748c75d6407055be01.svn-base | 122 - ...0de94412efb4f38120e11dc0b6e83cc60.svn-base | 24 - ...ebec7433bbbdece20097345824ce3d3b7.svn-base | 7 - ...b9796f5bc1dfdf80d490c908b1c425be3.svn-base | 678 - ...5b9ced48732d2bcae863e0c66676181ad.svn-base | 8 - ...80e7c7097be01915ad026ba339f2af256.svn-base | 39 - ...0e119766d0762dd92d4f679cb16082f98.svn-base | 59 - ...e201e444006a7a067a4aafb892a743813.svn-base | 569 - ...578a4fc3c67754ee2376a907ba869b8fc.svn-base | 187 - ...35d5c9f1f69a08e3b7271ecba8732145d.svn-base | 128 - ...2ecf9efbcc55c78e12707ed84d6412799.svn-base | 1343 - ...64b652e30064132f19204cb76c0afd249.svn-base | 2 - ...1b92b17ac611899e03f7b03f8b85af0a4.svn-base | 154 - ...371074d946855006582ccfa1300f0136c.svn-base | 22 - ...ebf4b8312ff7ace4596177de8053f73be.svn-base | 26 - ...e58f2b75944c7e553151be609fc565649.svn-base | 25 - ...a91ddc5af2f67fca4016b7a579f19946d.svn-base | 800 - ...ccf7b07d557cdc75051a2b6e0b106615b.svn-base | 51 - ...2544305a7f16848655293757c1ea230b0.svn-base | 213 - ...6f79d42f68a0211567cfbc6adc052f9c7.svn-base | 22 - ...93dcb4a90fe5e668dea41121ef869b368.svn-base | 29 - ...684ec56398fd1614df98c102fb16aae74.svn-base | 66 - ...3424b57cac4f7be3414537c5d06a1c5be.svn-base | 49 - ...255694c5b8be1c7d75c6591a7c7c9a86d.svn-base | 154 - ...972ab5f34d5321eadcd6097eef1c930e8.svn-base | 474 - ...a83be210f1ca4915f7feaa7a75b59d94c.svn-base | 298 - ...44633d9fe1f2f5660a10f3e8d840c5a7c.svn-base | 41 - ...4fa4b910fe48f258f5c9518ae059d2cfd.svn-base | 2137 -- ...9c47d96a80f523b4a4d97c06ca566d537.svn-base | 221 - ...eb57179b74c13b812c207997d32605ad3.svn-base | 721 - ...d8201c7fec58bc8e42fe718fac62571a8.svn-base | 58 - ...c9844724e938ed52db01937730a2e7cc7.svn-base | 5 - ...06c446e66bc0938e5e9a5d8d45b11d89f.svn-base | 497 - ...b9583a971e694c0947dc7a1c020b8e04d.svn-base | 397 - ...555037b31161dadbc2deedb89e48a883a.svn-base | 83 - ...15ce00274c09d383c0f28852015a71592.svn-base | 229 - ...0d54912f3ce08c334fa103786d40c6fc1.svn-base | 1883 -- ...999ebf12fb274478e69e29ecb1ba4beee.svn-base | 70 - ...7aa8168d0226da944e21fea448e88b29a.svn-base | 254 - ...8e04bff7d2322e89cbcaa3f3be59fc980.svn-base | 15 - ...861864e43afc4c6208c4dd7aaa097928d.svn-base | 43 - ...c5c4a705657069707bb34813a0304812f.svn-base | 94 - ...073759c8153c678747ff82acfbbd6625d.svn-base | 206 - ...976637d0b246a0eeec6ead84e44740481.svn-base | 89 - ...5b10252e940fe17a2d02b531d7bcf9318.svn-base | 103 - ...cc73543fc21ccc76eaad2ca113e69ccf4.svn-base | 299 - ...d36bc1d7612348eb8dcd646e6a42efd9b.svn-base | 107 - ...cba683bf63dd58b4675601c28eb00caa7.svn-base | 22 - ...f3e58b172ff5dc033bff11e8eee0a17ab.svn-base | 1464 - ...b836869623347ef7c51f90b2c198b74be.svn-base | 2895 -- ...3a81261791f380dda193764a8efb1b5fa.svn-base | 46 - ...0a95306cc0da013724f5e99d6be4e631b.svn-base | 199 - ...fb5970051aaccb632e4ce2545b2f37516.svn-base | 100 - ...c0d568408fa60d760915158cb462de6ea.svn-base | 15 - ...f186cb1d269c3507c38920179fce24d6b.svn-base | 30 - ...39ca3650fb670df8b2e2c798a3987df62.svn-base | 140 - ...7127a48c22d797778799e9d9be83233d5.svn-base | 22 - ...7b02018f90f93909cc638dd14a0168b5e.svn-base | 191 - ...d1c0b6047f4243e7e7c6b1562252bb08f.svn-base | 957 - ...36e26c2cda6c0db1156c221c43cbb178f.svn-base | 83 - ...c5e8fb952828c6dbd94593b9163a2a842.svn-base | 32 - ...e8254474ac5cb2ba9b5c7e702b80395f3.svn-base | 3 - ...551523fa25a7c0a7a083d4d8ef14f6128.svn-base | 61 - ...26097eb5f9885c44f7143abc6712652bc.svn-base | 105 - ...a02e0cbcc35a41c880bcce01813a885db.svn-base | 319 - ...1073581011d2cce35684c4f64ebb29c36.svn-base | 51 - ...ee051d4ab60fa2c51192c1a76c963e891.svn-base | 121 - ...8f65b5b313a21e9876916d5bdbbcebea1.svn-base | 101 - ...14d24624ce6e18b2e50907294ab153c9f.svn-base | 223 - ...dfe263fb13e5c5b636be1a6a34414b5d4.svn-base | 363 - ...5b380f1b0e94ac8396f319e3c3c0402cf.svn-base | 527 - ...348c4b5cf224e8e6e6dcbcaa1ca3616ed.svn-base | 30 - ...7f4488bb3fedfd32141994c0e11b89433.svn-base | 11 - ...f4de8849fcc9537c1efaaadb0c0836274.svn-base | 80 - ...5ca11dcaa470a4823f11e4fef420a509e.svn-base | 19 - ...831ef197f8a33d70b8c41ad3dd3707f32.svn-base | 97 - ...f9d347064ec40bcc1826f21eb83bdbce3.svn-base | 23 - ...8f364fa7febfee49fc8501af67a663871.svn-base | 56 - ...0bc78efb98b8cf240f57be6f7673a59a9.svn-base | 41 - ...642f366bcca1d411f06d5ff4ab0915a91.svn-base | 76 - ...0b8972738fdfa61209f1e95477629cf54.svn-base | 10 - ...b0c2f855f1e4c7b01562e99f8874edfee.svn-base | 127 - ...56512f07a9695e3989bd2729f647cccd4.svn-base | 55 - ...1b69c550a2f56b62e5b91003de0ab1ec6.svn-base | 146 - ...4bd37c0d968c19be874dcfc6318df99ea.svn-base | 466 - ...edab54a59d6fbf4fdc94a580b98dcee18.svn-base | 68 - ...b4e2ef52cc759de7cde8720401ab25a8e.svn-base | 28 - ...9875af59be28ed0705ed31dc9f070d48a.svn-base | 11 - ...b53600a098f3a16ac600d52d7eedc5e46.svn-base | 73 - ...5025c3ce1c6a99d822d22a1c8bf14c1a5.svn-base | 20 - ...9c606409b087758f1d6b1fde15575d141.svn-base | 22 - ...6e5b842a127eee32622f905eb51e593f5.svn-base | 127 - ...c109158c9175a04eaa8695410c90ba0f6.svn-base | 224 - ...c7bd4f072afe370ffb59edb7be08fcff1.svn-base | 30 - ...d37d845452daedbbc71d41dae9897efaf.svn-base | 22 - ...a049e631a5d0f0b61c89cf6677406c935.svn-base | 60 - ...05bb07a54ce22e08301d9522d2979624e.svn-base | 52 - ...ea7fd9b9f1726bddd0508ae3818a66309.svn-base | 105 - ...5ecbce3984012bfd4b80716b0e59bf412.svn-base | 9 - ...e890b03543a0fd453f6dcc2bcc720c086.svn-base | 52 - ...9d0ee18fcc1c91e6b453d77171b8984d1.svn-base | 85 - ...d3337caaca61f3541a29c7fc7178a6ef9.svn-base | 36 - ...787495bc076e49811700c9863d9ef3613.svn-base | 40 - ...a36f6252c59f9541cf589c03e915d3f63.svn-base | 5362 ---- ...0ab50543b9f2df079260ded9fdd496d19.svn-base | 60 - ...683dd51c631db9f68d1df10469d44c22c.svn-base | 42 - ...e6a64e139e8ec87fcbf8047d2427626f4.svn-base | 126 - ...97473171d5fe4d19208740bf0766d4920.svn-base | 924 - ...dd9e136b75f7fd6da5dce35a79050196d.svn-base | 34 - ...12022172e7acedf72a934842792b12bd9.svn-base | 2303 -- ...c8fedfe823055682882498135d9767733.svn-base | 770 - ...d227d0a14de14c73feb5def8f9ea023a9.svn-base | 12 - ...3d24118c301b23612a34b08c07346efe4.svn-base | Bin 1056636 -> 0 bytes ...1c110d55ae63794b6832448867c1e0f05.svn-base | 23 - ...72eac7404fa67b41177dd66f627876745.svn-base | 269 - ...acce446363d547d1ff26dd1dd7c6bf84a.svn-base | 42 - ...0100c6e280b23fb5f6722e93fdf33742d.svn-base | 1650 -- ...d1bae5d91c64ec9da31801b4e2656438a.svn-base | 6 - ...b67f0a7a26346c062021c6ef6129c676c.svn-base | 76 - ...e8728d20e3269237a0cf6f51275ac3d5a.svn-base | 776 - ...c9dd03995ca4c1d68597f7bb3991aa639.svn-base | 705 - ...4fe23393d9ab24ecdc4ba47694dd6f503.svn-base | 42 - ...c502ef2210eb4bc485f1c381b0e7606a0.svn-base | 44 - ...356abc6ae098e78738bd64d66a491144e.svn-base | 1428 - ...5d936d198f3c079840cc3df6972d12b6d.svn-base | 404 - ...638147f9131e8763d8c4cb78e023baa9e.svn-base | 55 - ...5f84667c4789a6501dc8400aa8b7f3bd2.svn-base | 53 - ...bb1b9c497f33f0cdb340c7c35b1dd90ed.svn-base | 73 - ...390827ded327b9f6d59e1daacb9dbed69.svn-base | 91 - ...2d33f9fbec9642d55af940f6c368a25c9.svn-base | 762 - ...4eed66e479b5cea464ab6060f77c7074c.svn-base | 80 - ...62ccd8485d0090f89e37fbba04b615bef.svn-base | 329 - ...57c371a752c41d6fd904b7d1834c96302.svn-base | 50 - ...fa85d006b227ac7712a59d48aa5dd2cb4.svn-base | 43 - ...2af9c4d3536e64cb339e77196ac272b63.svn-base | 146 - ...497501ff27f65cb03b416f5f6564ac4bd.svn-base | 130 - ...387e3a52b4a65bb574a6801b1ded6d4ab.svn-base | 33 - ...454838b192086023a84c58400e577bdfe.svn-base | 255 - ...0f5d833b59c868d16921ee5c1ea68ee09.svn-base | 207 - ...6b8798388e71fa424a53009f7f907a3ca.svn-base | 22 - ...32d86bcac9e85f059f8b089204af718fc.svn-base | 58 - ...709b087e5fc54a653f9dd47bdcb15d6a0.svn-base | 1802 -- ...d9440ce6e1ef86715c79e81e13d5de866.svn-base | 6 - ...9fac46a1c9876a1ebbc220449d4b4927c.svn-base | 52 - ...c0c06aaa08da66e5b7d843893f80587ae.svn-base | 12 - ...5ecd63062bbb6c91a4dc0421e0a7246eb.svn-base | 692 - ...037c3ac4e62c8ce64e2c5c58e9d608848.svn-base | 45 - ...66313bb0e7bfad8b6d62ba2ec5c9eb36b.svn-base | 17 - ...064b8337ac34120c416d1da114b027596.svn-base | 25 - ...f7477944d00612dbe0761f8a766574873.svn-base | 4041 --- ...cbd4a519b3c0ef2b297b99a15d0ca48a9.svn-base | 73 - ...93e28a8b7a9bb59b2f9668f4ce093a288.svn-base | 64 - ...dc9375624171042f227d77660ecb2f028.svn-base | 274 - ...a1c4313f81e9b7a9c73c0c91813fa533b.svn-base | 1 - ...6f9b8627ec6f61a9cddcf449dd850aee7.svn-base | 915 - ...ce720277bfc8a1852c2d01bcb15fe966a.svn-base | 19 - ...3182b79116bec3fa03c233e598acb01bd.svn-base | 35 - ...5a44a126f6023ede5e1f129498be1c3cb.svn-base | 78 - ...ed7b937c13668881a1ce36c4f1eb1dc66.svn-base | 17 - ...75fe3604e7887025fbb0a32c813761455.svn-base | 42 - ...5d9a0c9ce56d80630daec0b92f94e8e3d.svn-base | 26 - ...652e8833aa5ec2c304a20f9d819bc4207.svn-base | 853 - ...9caa93fb40ad71e72d84d6ca9135be95f.svn-base | 68 - ...a742d8f93fe0e88d04dee57455842c26f.svn-base | 43 - ...528c7cbeaca78375ec34102e41792d57d.svn-base | 302 - ...d719c330870ca4a37d6124ddd60452165.svn-base | 83 - ...92f2b7a29bfa115c9e312c4eee302c195.svn-base | 25 - ...6620520fa59058456a03bd08900254446.svn-base | 21 - ...dec1679ac22c460d95de37e442b449161.svn-base | 10 - ...c52d641ca0d37a9b1d62e9a25a685fb54.svn-base | 590 - ...8ccb9b20e66cf9cde0e17bf9d4ec92386.svn-base | 2442 -- ...e6666927ee0053db7900334e45d76ff58.svn-base | 79 - ...63797cec63f0e02dfb016a40fdbfa7b37.svn-base | 35 - ...cca128fc2eec197ef33187225f1cb00ca.svn-base | 648 - ...85d487d847ac1424b6f4eea6a0db5d5fd.svn-base | 77 - ...a7a66c7d287ce1ebee14ffc077d161ddc.svn-base | 963 - ...adfad1e21d2800f7b063cf8f2d8e0df82.svn-base | 19 - ...f0e4ac78627c6e6c29af05fe710d8189b.svn-base | 15 - ...e5358ed0572106b931c8c40405df5d468.svn-base | 235 - ...2b66d0c232766843e0062e45b0afcad09.svn-base | 16 - ...ba9681a38a291786b6b0a46a7c766e9fd.svn-base | 12 - ...0dc6a6ec79429fe29f39725bc6016c57e.svn-base | 51 - ...4a21d4165d1c413ab110ad40e3f5bd33b.svn-base | 8 - ...57d1b0db42a1a6e115b1879d5934ac095.svn-base | 1052 - ...7fa17f31798c8c98560d9727a4f5bcd9d.svn-base | 2011 -- ...9761e89d5564d65e70c99ca0080be11b7.svn-base | 843 - ...22f62920d1ed4a4031b0be4158c032ad0.svn-base | 24 - ...c0b97b92133185301ab815ddf84ba608c.svn-base | 22 - ...190da9014bddaafebcbc5f19b718e5793.svn-base | 443 - ...f1250b8c15074456ae9cbf88991417bfc.svn-base | 26 - ...e545e809cf09287dcb17f72301659fee0.svn-base | 737 - ...5a4ad865bf780190c5e1aee4a75dc07f6.svn-base | 7 - ...1b488f837a11f0b954d9ba9751e2ed313.svn-base | 72 - ...b375e2cd621b0c303c279e72a3206633b.svn-base | 15 - ...bcb608459fa92a2ab30ec3ff195610707.svn-base | 5 - ...8495e9bc405b0f5f6f8b3c496e31db87c.svn-base | 18 - ...8a912270c9a5a8b5fc3816c6e500d670c.svn-base | 49 - ...8f723cd5e216b57b4ff21a1981b0b6873.svn-base | 321 - ...ab48b1af750b3b3832d6ffa021a440afc.svn-base | 23 - ...c70ccba4821d402744d61f9fca85399af.svn-base | 88 - ...48bf4ced2ecd221df0ff0b2364260fdb6.svn-base | 14 - ...1f0ff3a4a879774f9a87d80539d9410db.svn-base | 341 - ...25cd062cfb51e1ff471ce71cb3fbe12f1.svn-base | 53 - ...846a3f320939d76ff90f2dc6a44ba7c6f.svn-base | 118 - ...ecabfccb9f35ecb2fcffeb79abc49824a.svn-base | 424 - ...37e0c7cb356ac6b318f9e52ac8e90304e.svn-base | 14 - ...7ce10541789903e44bc6580112c5d2b82.svn-base | 93 - ...1f37195ce4bd0a32eada79a5e6e71a08c.svn-base | 40 - ...4b61ddaf3783b934555b857e58b75627a.svn-base | 77 - ...29845b6c9aaba8cde4f87c033151e1602.svn-base | 361 - ...8ca8650279a5806eb8487867f265714ec.svn-base | 12 - ...c3ba34e2d930f309616a1fd75ee9d2ab6.svn-base | 1017 - ...f1e43c2aadf97cca089f3912429fce8fc.svn-base | 53 - ...cf40b734ddc4f7f81904cff7f6594047f.svn-base | 168 - ...263b9b72325e6ba011c28206ed631c617.svn-base | 711 - ...7c1261ba729a645f25704a71bd3f316c0.svn-base | 458 - ...eae9a5e5d781cd68000b09a44779cd332.svn-base | 354 - ...8230e8682e7bd978d3123c067756fd189.svn-base | 190 - ...e7fe1cd4b365a3d4605b8454f0de65288.svn-base | 140 - ...d025c1b13904a2dcffceaef23a1488a26.svn-base | 51 - ...8948946f9e4b377809afc4fff3db9d054.svn-base | 1164 - ...0cf8c2286aa5ca3fc067a612a5a4a275e.svn-base | 63 - ...2b58032861868f1b79eefcb1f9d86915c.svn-base | 62 - ...ec142e5dc893ae4cdb8b497ba1bfdf3c8.svn-base | 43 - ...48f3651d715c9cf9a36364891fb447d77.svn-base | 171 - ...61c8681f33dc143686943a84ccad3e32a.svn-base | 30 - ...d9e4b67ff66d41357e4ff555c258873dd.svn-base | 27 - ...5cc953c3f157ba2eb5f22aca6cd348614.svn-base | 11 - ...3648598afba262f23a7ddfac650e0a1c6.svn-base | 36 - ...b6874fd04d609fddc7531afc63766ee1b.svn-base | 489 - ...140dcbd0af04bf4efa83608ace2facced.svn-base | 15 - ...ccaaf7cf28fd205c10cd470ac0579ed25.svn-base | 25 - ...205667745d4d958ed692800e7df658422.svn-base | 525 - ...99e027f2ad2dfd6eb268b30af295788e0.svn-base | 157 - ...d06ef7b0ca3ec98244a2070295295fac2.svn-base | 50 - ...8af6728026a77db853b3aee47035af036.svn-base | 41 - ...cbecf6ea269686acdfe121c4c5364e539.svn-base | 21 - ...8a3e4797c608600e1207686142a26a208.svn-base | 75 - ...c0685688f88d5f0831a1c0f83abbc5dc3.svn-base | 33 - ...b36d430f34ce0c8dc5597d71cf28f5e49.svn-base | 121 - ...386bf0ba49132e2dcfdd073e5e2b05bf5.svn-base | 15 - ...2ccd5e37ad89b16eeb8e232a65608bc51.svn-base | 252 - ...f88a91a20cbc8c6f17999d4ab8d07a3b0.svn-base | 463 - ...d54c4c7b1a1b7663733c5099fca5576b1.svn-base | 249 - ...0fc95438246ade5753ef5085972d0c8c9.svn-base | 67 - ...158efe08fb8d7ba9097935951cca000eb.svn-base | 15 - ...af7cd99daf25004d168979c317f858af2.svn-base | 140 - ...0541fe35357545bd9286d8f56dd14c5a6.svn-base | 202 - ...2cc5df470fcf87aa0a7e4ef6c274bc68f.svn-base | 7 - ...4e035a035ee302ead6664360430930ae0.svn-base | 82 - ...5d31b6acd3a8da464b191cd90754ee043.svn-base | 61 - ...24b9b3f518a16d075d3dfd96704ea084b.svn-base | 61 - ...a1810a17d2ae3dffc9716f8bc55ffe16d.svn-base | 371 - ...c904f6c6c613e4c9ff3e7d908bf375b1a.svn-base | 29 - ...1447e0550ef50c6da8e3189c47d2e5968.svn-base | 53 - ...05e987893a64cc6bba544bf94f94111f9.svn-base | 4572 ---- ...28f8ef760b8c7abd75a699313595ded25.svn-base | 196 - ...3b7968b56eccfe68998d5c5c1c496aa4b.svn-base | 38 - ...1565f06678e15f880633b1d4d41495be0.svn-base | Bin 336691 -> 0 bytes ...0f29a7b7163d827fb21db32404e6be150.svn-base | 52 - ...e29e66fe02ffd25b1e68e82b0f24888da.svn-base | 1374 - ...31c18acbb7b11791780bf99937f5801b3.svn-base | 52 - ...7bd0057282fc3b77faa2c9bd2a0bdd2f3.svn-base | 5 - ...9b7d16d4ca323cd06f4a1a3f0410d6687.svn-base | 30 - ...2f13da38d891ad0c0f71b7240d63d3254.svn-base | 87 - ...f4e56bb5322f960f76e89b4be12ec47cd.svn-base | 13 - ...f1eaaf62994acb28e4bca67e7f755407d.svn-base | 79 - ...8f6cf409cf6f9da919843822b5594cd07.svn-base | 62 - ...7d73cb875c576533b2e2554a530462acc.svn-base | 14 - ...e2cacde1b1a4eebda31eb94ee7f5d387e.svn-base | 232 - ...46d50a3ae81fa1306a07706979ed5f501.svn-base | 5 - ...1d58f16dfded9a101f5f564fd4a7bedfe.svn-base | 7 - ...f3ffcd93949e7cc918fca95de419c75b5.svn-base | 84 - ...0704f022c105dde97b8a25dfaec0f9860.svn-base | 786 - ...42430a4c386b55504b3e2bd18f076db02.svn-base | 22 - ...f4d161e57bdfdb44a9116a9c818490f69.svn-base | 34 - ...927031239da6d83c2c773d11062f64ee6.svn-base | 573 - ...dd8769078f37b1353f2ee6b7129993fd2.svn-base | 7 - ...4832ce65698c47d69c10d0a61489d70d9.svn-base | 280 - ...1def10583d4b58ba73ae9df11f1a740fe.svn-base | 64 - ...c14601809c5283f22b8ddc1ce569ea2b4.svn-base | 8 - ...316c35b6629195d20926644669ae1a2a7.svn-base | 91 - ...703a7adc495795ace07071b1fdef9e187.svn-base | 40 - ...56786042d2e62f479e791c5352f2cc8be.svn-base | 39 - ...b7f2042880bda8c148725a38add40616c.svn-base | 68 - ...447cb7b187736c833b1bc3b9cb7a406a0.svn-base | 732 - ...cb5858f9aeb1d1669a1254996f67da962.svn-base | 60 - ...40cc923468a0f6c1813295ca7cbd476ea.svn-base | 88 - ...a5a534a1d479c464f7ad0745f3cbfc068.svn-base | 9 - ...5c4911e87fdaeaecda4d9e23ec2ed8b77.svn-base | 8 - ...77349eb585d5435d2e3d54f39955e087e.svn-base | 95 - ...69d867e0ec9133487f2555cc8844fc8f9.svn-base | 94 - ...56b369e6d46e05c45fc40b795eb2dba55.svn-base | 61 - ...04b0a92fabc24e92319cac3a9a4677cde.svn-base | 8 - ...2e803aec5009e7b1eceda2f5c476183ae.svn-base | 30 - ...cb391416b894f398c43857b5bdb19d75b.svn-base | 141 - ...da19e452b53400753b02b798a3dc42168.svn-base | 95 - ...7745ee9dd4ea11de7d693c9f5f970f96f.svn-base | 850 - ...09b8ddde666450913350d60f8a23926af.svn-base | 42 - ...2e23f1aa84939e594f5543ac5b51ef162.svn-base | 78 - ...0a0b459dd80cf265db0ce832c7400ab64.svn-base | 208 - ...7c4a4b70ba2c461660f855ae700cca79a.svn-base | 157 - ...08e204a02d8af4e963c729a612f64926a.svn-base | 28 - ...b590632e27b562d059dbe4588abd86a3b.svn-base | 1476 - ...36b7bace6513c3542729f25086ecf51d9.svn-base | 69 - ...b0d547b7019e66f41eb6cb58fc21629ca.svn-base | 120 - ...4e1b3caec61e8c462897989f684bf0c6b.svn-base | Bin 23977 -> 0 bytes ...0d8b4cf29d197fa2875660007505c42e1.svn-base | 4 - ...11adfcf0da42e3f2688a4fff3b47f30c5.svn-base | 14 - ...81073fc0327ea2453d7e466f6cc249481.svn-base | 199 - ...3ae27b80217b605edb67097e18866def6.svn-base | 1165 - ...bcaade5dd2b2d146af780ec500ee574c0.svn-base | 30 - ...98b661f265445b4d6daf6275327bbfc9d.svn-base | 44 - ...2a3d434fb14d07188603984b7733227c8.svn-base | 485 - ...b2c3a925bde9b244c107d54d5daa91d05.svn-base | 22 - ...968510f930a0f0add27ff586da4df5a21.svn-base | 135 - ...0a0cf9c893c6605841e397abe39593cad.svn-base | 58 - ...d828bd23a45d39e634f1d1b5aedc7e29a.svn-base | 27 - ...0fc6a5906b94a2ca655996e1d2ab03c4a.svn-base | 7 - ...842cc119322cb557f115c70e6b255045d.svn-base | 128 - ...f617546fc0201fd11bdcdfe88145ea5a2.svn-base | 22 - ...34c84f0942654acc8f7d22648905c919e.svn-base | 45 - ...70b4456eda91320d28f2f4ffaec987bac.svn-base | 21 - ...37937db882d64bb3d7ab0314939b9a98d.svn-base | 322 - ...a0dc90f58e7344d7cb33eb2de615f05bc.svn-base | 124 - ...9e86815cd3f2c2c154352c7fb7cc4cc68.svn-base | 214 - ...25220444f3c30400ed434e0f7a95fdb45.svn-base | 9 - ...4993d5d1a3cc47fdd10887983f4cfafba.svn-base | 384 - ...9d653f977bf74f3eaec8b5176da87b8fc.svn-base | 12 - ...701886e5f0ee0d26d5a322bcb5532b526.svn-base | 350 - ...f4477eaafe1dfd9d80d630ac3af6b4895.svn-base | 4 - ...1edc3804735a21739dc85c70ae810baed.svn-base | 4 - ...416bca5b78ab794f3ef432560604f8792.svn-base | 41 - ...0d3958b8d66d336aca579ccd5255fd918.svn-base | 22 - ...c8105c0234ed64b7af03affc5441f3bfb.svn-base | 218 - ...4ee12159e98724c141f26a2eda1ce8a6a.svn-base | 81 - ...282313916ab7c6481d6e32f2ac7883f3f.svn-base | 23 - ...799f919b3985884a981a4cd28a4cc8e10.svn-base | 131 - ...1dd2492bbe9b1a9d95d1f5ae9f0eecd76.svn-base | 78 - ...ee8111d762f5a186a1612a93e198c9b59.svn-base | 57 - ...19b38c8cc13e26831db362f2184b4b47d.svn-base | 1174 - ...782a7603e397555266c0c46b108a297ba.svn-base | 2 - ...529f950169c2815a68f28f669681630b4.svn-base | 67 - ...52fcbcf53893aed0c4caa4bd355628542.svn-base | 256 - ...fdf8b118e8ea98381aa952a0eaaa24164.svn-base | 82 - ...064ddf22bfe0382b6cd8f8eb0af3f011e.svn-base | 58 - ...6df4eb362321ce704ddb3d99a22309c96.svn-base | 30 - ...1ca82f0a43ee692f90c208d7bc25abbd7.svn-base | 32 - ...b985cb8e4780382505f9c49f7bd574d1b.svn-base | 169 - ...b6b1800bf9c2dd149d3f814a6d50ed7c1.svn-base | 192 - ...2fc293a8fa7cbb0cae5337eadb46e7110.svn-base | 171 - ...6319a643d12bfecad2ff078962c8ed160.svn-base | 56 - ...678ffe46f2311573cecbb7ba326c746fb.svn-base | 75 - ...0b5a32e725cddc5b2a025d8e45077c81b.svn-base | 9 - ...a37e9ea83bd5fac5199d7f24a4dc810d1.svn-base | 11 - ...64c2e021aa41ef2d3613a2b16fabf8eb2.svn-base | 5 - ...d34ee3eb53f7b6e71bf235c195804e66f.svn-base | 24 - ...aa1fe46d63157932d63e6788fa1ff1fca.svn-base | 109 - ...71738de283040aa98de7b40d4a20f62bb.svn-base | 506 - ...333b30b4abf97dea28b341eec2761e14e.svn-base | 4 - ...fb060240dbe849e6dcb70a4800a63a660.svn-base | 85 - ...d7e6e6a5ad250f109974538d26b633fcc.svn-base | 64 - ...9b629b6d170a615cbf9b0241a3b8b4742.svn-base | 112 - ...0a2e12f97af1877f5ab0f6203db735418.svn-base | 24 - ...4b3829d6718d42b50b0832836f7b8817a.svn-base | 1559 -- ...ba4b4dc6e0f4d02442f36c92308b3bc35.svn-base | 83 - ...e928db5609157c50687fd7bff1f889e44.svn-base | 37 - ...71875b9aa6a317062f954b560bb601042.svn-base | 19 - ...74e5e5d8dcc9c9b2ab67fb58bc9be6afa.svn-base | 18 - ...bd3b38ad0a4f7f64202201cf3195d92d6.svn-base | 12 - ...1960f378a12220a679c3e310dee742623.svn-base | 89 - ...44c2955868030f49952b38b5e2b2452d1.svn-base | 376 - ...14d38edf8589c4febe504692101afef0f.svn-base | 224 - ...3142dfe7782ad217c324af150449fb80b.svn-base | 159 - ...734aa81e3814e7b32a9e916ee7c15c747.svn-base | 23 - ...0686d4079c6a1e5f5aee748da68ce97d5.svn-base | 179 - ...6551a767a9522bb474a2d51dcba23bed9.svn-base | 61 - ...d08b025c454808c494bcf1ae786d00397.svn-base | 59 - ...b7bf73d45d4cfa26a00e9f7e5f9a36efc.svn-base | 52 - ...42d2fe6e141fec7884b24731e1ddd1581.svn-base | 83 - ...cc481156dbf4deaf90be492b2eb45fa06.svn-base | 238 - ...00957070c3e7b70571576adc3fc410200.svn-base | 52 - ...9b7a8dba88c05eb0718bbbb6ae75291c2.svn-base | 506 - ...55ee2cedccc58bec710b622a7bd698bf9.svn-base | 3 - ...1362029da520239e0e432eb78fe4e1327.svn-base | 11 - ...dc983e977af033154347ed42055e09eb6.svn-base | 20 - ...33f359175e9b2721a9140a5277072f3da.svn-base | 326 - ...ecd5c17a9c71ddc3a4d18f0f2208fed16.svn-base | 20 - ...96f8bd09a9ede42dce03e58dd4a672e7f.svn-base | 37 - ...4e2e9e8d00a31bb27b58f9de677c521ae.svn-base | 196 - ...18a2197ba8a6b6c5716fcf1f201c69487.svn-base | 24 - ...c1fc08a7fbc0d979c32e572d52dc8c9f8.svn-base | 233 - ...7727a56bafa89ebc26e05c297e3324d33.svn-base | 67 - ...c313e51cf1a10c5e201ccd435fc2c2d06.svn-base | 125 - ...bc566f000ea0fba78969d54f868e8ca59.svn-base | 25 - ...0ab04706972e90325af241ec01cd0d17d.svn-base | 84 - ...5cbb9e230f957ba6838036cd0448278c8.svn-base | 83 - ...7c86b5644931223c085419c5b3baa26e7.svn-base | 57 - ...9ef60ff8f6be796797b43044d63b1792d.svn-base | 6 - ...fd4577e1ffff7b55f0d00b05ca97b4679.svn-base | 43 - ...91c913774a9392b14b0924dec5317fd3d.svn-base | 46 - ...dfd05300b25d15a15f8fa75f87a8eafbb.svn-base | 66 - ...9a4fc5154f3a04df2d18e3caed1ece3e4.svn-base | 50 - ...8b01fdb78c73a1b2c6ecd8c0924a22ca6.svn-base | 279 - ...4c2c07e92869a6b66e510e5bb78b56237.svn-base | 211 - ...8d1c3dba39e3dadd5114118bf87a4cd6d.svn-base | 61 - ...b0ff651d9bb98dbd67d2b3e50d4e400ea.svn-base | 376 - ...feed364b3460af58108558c02a3e4c3ee.svn-base | 37 - ...d60fd91198ee35b7d046bc7aa0247b908.svn-base | 77 - ...af50eeb5a042f92baa2bc0742d02802bf.svn-base | 104 - ...35021bcb757677114499044309ed78446.svn-base | 1012 - ...8fcfb9dddd926f2e34c96b2156315cbbc.svn-base | 68 - ...c9b5ce8073c7ef0d52ee0cd8fd21637fd.svn-base | 11 - ...a16357136d352c15b6842e1ba69f7401a.svn-base | 196 - ...a9d82ddf0e34166e6702fd7188465ff7d.svn-base | 43 - ...fda9c23612d3f6f73fd513117441c6e00.svn-base | 51 - ...fd9eec8e9ec309d82b9b9e10ac2cb8003.svn-base | 78 - ...ac5cfd9e03f7768240cf510419b613ac3.svn-base | 238 - ...8d17496d8e6c7a5ccf463657a652c6632.svn-base | 17 - ...6e8567bb36787bc7211d451ec3fd68c75.svn-base | 81 - ...716fa3997e76336b62d940f1931527e77.svn-base | 69 - ...1e0dadaa99c2b394dbfff854c5e6e3059.svn-base | 30 - ...5b439f6764383dbfa9411239ec2b26115.svn-base | 134 - ...12aa2293bd6f279a638763f45981d46ba.svn-base | 2 - ...8ee07719eaffa73985b8965a4f5c178eb.svn-base | 7 - ...d333fde2296651ba1a77d06bce61d8dba.svn-base | 17 - ...f02c5523eb761d78fa89cbc047fddfb65.svn-base | 73 - ...70d686d71ac93022a8ced36af4d46f077.svn-base | 1 - ...eadb42920bdc3e212bfef89bc5e28dd42.svn-base | 478 - ...04a43c98bd11fbfc5e0a2fbd22052bba5.svn-base | 2 - ...1493f1f18ea14fd7f58d0b5b47ac67488.svn-base | 548 - ...29cb7c284270277c99da4b1f85cf3d58e.svn-base | 100 - ...327fd91180de168dbbb2b9a14cbe1eeb6.svn-base | 204 - ...35c5c4f9c7fdd3620cd2fa06d4ab36c7f.svn-base | Bin 11749 -> 0 bytes ...3fbb0b606dca6d4daaeb5ff40bb8720cc.svn-base | 20 - ...848563a908a24bb7796acad43ced06aa6.svn-base | 132 - ...321ff7fbf90ef09c36d9ecb627a4d0918.svn-base | 31 - ...852372ab4e02b2f4e6398a05085468771.svn-base | 5 - ...220ad188d4e8e71f594c845c388a8ed37.svn-base | 186 - ...6e0122c63b601c01452691f60d9391faa.svn-base | 44 - ...637fc33d3ec5c728f75875d5a18949633.svn-base | 407 - ...8858a4a6fcf968b43781d8e9e8a491d9e.svn-base | 11 - ...77bb0bfe861ee29b221926ffaf99fb44d.svn-base | 339 - ...2ff927fbc857f7679cd69ff0d91cf3500.svn-base | 66 - ...49a68ff48b6cc459a4e2c8aa9f22fe5f7.svn-base | 923 - ...7b01e9521e790e361c1da9a1ca5cef1fd.svn-base | 20 - ...d2748fe47f2d5b89cb6109da4161cdce1.svn-base | 116 - ...c84894433677942671f28a56774ca7e08.svn-base | 95 - ...7fbb2e2dc317325170e510b3253b6fc72.svn-base | 500 - ...536e2d5928b0c6b5af6f6bdb8111b9e5d.svn-base | 132 - ...2edadee6f51acf6c9e69b51866468d608.svn-base | 317 - ...a6d2553217207f4b80c954467c293f97e.svn-base | 85 - ...122a6111f71a4f8abf2a18bf932aa243e.svn-base | 26 - ...3bf8bb846dcdf70a9ffbb9744f224831e.svn-base | 20 - ...a538d9f2572f64fa33a8236450995b72f.svn-base | 252 - ...4d54fe82e8e27e191c3be1aef10208c22.svn-base | 34 - ...e4532f2376f778d3213a7f2ee318a839f.svn-base | 445 - ...8ddc2863af153e4bd78f3016b0277addf.svn-base | 83 - ...fb8cabcae6997b7884e53cebe1708cb5a.svn-base | 295 - ...de9ad5ad0517fd442a904740103f01562.svn-base | 4 - ...1e8e17322f103a879542649f788034761.svn-base | 45 - ...5292418c24bc5765fd0f6f60e164504c8.svn-base | 66 - ...a3ce4ceb35a2ea6e6d0b1cc6499d44a17.svn-base | 49 - ...f34a70ec2f7a15bdb8220ef6d73357d1d.svn-base | 83 - ...a9868ee8492ea9793b45d695280a2a44a.svn-base | 18 - ...40992d329368fa7402201469cf54cb305.svn-base | 24 - ...a5fb5e39a764d6ae2135f6e56feb8c6f2.svn-base | 59 - ...e13c8cc1fc578e065248bfd7a27d85e44.svn-base | 109 - ...51384e37fde7941f83a1f2a7881ab080e.svn-base | 39 - ...caabfff721b028a6c19fd6d70530d6b33.svn-base | 57 - ...4cd152af9efe17e340d916a471e21b8e4.svn-base | 63 - ...da82669e6acd490ad07dee1541f7121d2.svn-base | 30 - ...5c704b1345e339947d32b6d84d15a28a0.svn-base | 21 - ...a2a37de29b85bc6cd9d77d93c3f8c9602.svn-base | 72 - ...4bd7f46c29d39573082fa69bb9a268e69.svn-base | 67 - ...eabf14d7520b0d79f354a530807944d1a.svn-base | 585 - ...c8cf768f145365a978f04abadcfd5038b.svn-base | 6 - ...b2933304d2ce1b2bd968668b3a3d3da75.svn-base | 42 - ...f3f95e51b542fe234a0b8c84a5e431561.svn-base | 31 - ...434618a96a9a97a8323f1be65df630d57.svn-base | 177 - ...49155831b1f671b20ec2560bee20d0fbc.svn-base | 41 - ...8dcd8ef569d682f54064f0d05a94d63bd.svn-base | Bin 66591 -> 0 bytes ...af3e96510309467e71051bcc927af2d43.svn-base | 64 - ...fcd64fb8eeae4b5fddb1adeb4b8cd6c88.svn-base | 25 - ...6c5f12c6160c1a71308f608511ca9efb1.svn-base | 30 - ...9d515df6b2d38c5068ca8b8ea5caec831.svn-base | 162 - ...fca89028b3daae7d5dfab6f497f0fa6ed.svn-base | 22 - ...ce9cc86bdf3739f55f510658d5b3c3289.svn-base | 149 - ...b58516b9dabab1fbf76d8a81fa67a9cbb.svn-base | 77 - ...1ce490e19b5803dfd87f23bd244e5e1ca.svn-base | 26 - ...aad19a8cdede6172bc7406f80fd7aeec8.svn-base | 85 - ...94d8ffc66aadc89de5315e2dcc2f90bfc.svn-base | 23 - ...ee96ea40f271c52c890b1bfb0e79cdbac.svn-base | 79 - ...f6a89161b79a473419df080f2fb66cf4a.svn-base | 33 - ...8f00549c8055e8cd76c772bbe1c556927.svn-base | 77 - ...986f71fb8e00e0472b2d0c62bbbd5b9ee.svn-base | 337 - ...80d83cfc33660a2d42c309483919dbdef.svn-base | 77 - ...fb4da30b80fdb270630aea2b77bc40731.svn-base | 425 - ...787766692653fc192b0f073aab6c4753a.svn-base | 1 - ...a01ca6fc55cf53e4b605a1eb7b0f97ecc.svn-base | 22 - ...8779b2e0085138fb638127c32008b55d9.svn-base | 353 - ...ea4689b2228345ac01c12d45c923d983d.svn-base | 23 - ...2df807beeec7cc0a37cbd61222b26fff1.svn-base | 9 - ...b3e6ac443647bd7d3f0d89afddcf9dee9.svn-base | 30 - ...c8b34a8afa5b6f142982383980ad505db.svn-base | 47 - ...cdadbe702b4e487182d90891bd3076d88.svn-base | 47 - ...44953622213811ef7b82655a7a0f825b1.svn-base | 53 - ...d9f0fd259d7a94717e8b6dce49640aa01.svn-base | 111 - ...830f5340c38a12f8e36214150b6641ec0.svn-base | 67 - ...7ba634e31b9ac47aaa708c93b711ac761.svn-base | 158 - ...aab51a405b4998f351d9522cc5627d0da.svn-base | 604 - ...cb9853253ba7be8a350271195344ac811.svn-base | 1156 - ...d0b85f229f35432c67d5d21784fe2c13b.svn-base | 56 - ...79decc9c0f81452ce6085dc92d705eb35.svn-base | 303 - ...236fb93d53453acb3ee0bfeafb44b54ba.svn-base | 134 - ...34e603c1a68384c717eb830c43dd38563.svn-base | 192 - ...0d8ab300981926e16bee1861ba88a6f4c.svn-base | 58 - ...c26c77514c1d495583615c242e444f8f2.svn-base | 248 - ...daa5b2268d5f86ed4d8534f4f3abf47b8.svn-base | 30 - ...d00cb88df3f6c45495a39dfd6f7260fb5.svn-base | 218 - ...357a81f68f66c5411222d9517e25e6792.svn-base | 44 - ...de70463e4793eb1ddb584402d45139d6a.svn-base | 53 - ...f5d4fcca452548bbcff77929ec79e60df.svn-base | 351 - ...f6fc5c9d7e1b89b4d5a8242d9db737eee.svn-base | 10 - ...5ac8b3cec902fa3334f2e084a7108f429.svn-base | 73 - ...1922b28f35a916eecca0e9a2a0842f871.svn-base | 13 - ...0ecc551e2e32025b648e64edbec013471.svn-base | 3 - ...ed00a07c6bdc8f8351ac2d017ea6c87f0.svn-base | 54 - ...cc6654e1a2b2ec54012464b5c5306bc58.svn-base | 694 - ...38205c63b66e617adc1cfad215043826c.svn-base | 968 - ...9a32e6933bf2c8a333c5efd13bdbc497c.svn-base | 73 - ...5a35b085b6a6427ffba3064387edd3b11.svn-base | 41 - ...b72db3ca8f96a07e9e3aacb21c3808426.svn-base | 59 - ...2d18ce0c0098cb6595491ca5580446420.svn-base | 51 - ...07414c70f6b6ca35fb2aaf973d6a28227.svn-base | 20 - ...ef2d9bb8d565be6f29b9200ee41d32871.svn-base | 63 - ...b434d91147feb40bae187d244a46f44fc.svn-base | 386 - ...230f894fd2ac1a1cb86acc3eb868c86b1.svn-base | 1244 - ...0b0f27f5d118331e5f241ce8bd8352e48.svn-base | 165 - ...70ed93a0430e65a1d3431eef351ea8e6f.svn-base | 111 - ...cccc6c751877074db45b3ec5a152677a7.svn-base | 166 - ...a66adda54a12b0de7c5dc1c0f732d2aff.svn-base | 21 - ...380e66e30e109c55b16c5794f5baf3c55.svn-base | 92 - ...b16c4843a3f62482468e9dc706cf8d83d.svn-base | 22 - ...9ad635a8d1ca9b607b3ea6a6290c1406e.svn-base | 421 - ...c24a95a1c9e8ea68c772827a4a2a5d130.svn-base | 366 - ...ad5b30c17bbb1057a8b29a67611edaba9.svn-base | 49 - ...a4d53833fd5686c4c13026f51b0c7398e.svn-base | 61 - ...ad3d7c1574e734e03a5f6b2485bc465b1.svn-base | 89 - ...cd55c43d92c27481b92f3d7cc7477bffe.svn-base | 12 - ...66d23c06467ffa148bfff9d68e7d9a60c.svn-base | 32 - ...d557af8d47ef9bc97b098c0a1ec498977.svn-base | 15 - ...1245a3ef4b1ac5d45e64dc251beb67345.svn-base | 15 - ...6b954cbb49a0a9335799148b51714226b.svn-base | 217 - ...f2d4d94b81f26c7754fbd1e81d1ca4d47.svn-base | 132 - ...e40db0289b4a5b0a8dfb375af76fabe6a.svn-base | 57 - ...4b01bebb3ac64b152345659658f4fe5c2.svn-base | 103 - ...7c436bc4b20a9ea6ad612df76fe101ee6.svn-base | 695 - ...36a6303f3804f11c51da6e3468d87f615.svn-base | 19 - ...2496f389338c62cc2379b945778640d6a.svn-base | 124 - ...39835c855d93b20bda8238a66a6b323b8.svn-base | 22 - ...4135ff07f846ac665bb14514f3e262ddc.svn-base | 15 - ...9cfde1b8d508b32100090ba850c002e38.svn-base | 8 - ...846274e8de9cb22af833108f5cc1f5393.svn-base | 163 - ...8e9a1dff43587dfac80d0b9821448ece0.svn-base | 37 - ...ed88e71c91f81b108da177ee1a2b4efe4.svn-base | 480 - ...b9c76f664d16736ff8ec17ca937645f12.svn-base | 40 - ...29cc5a11a399e4ca8a9bbe2fa807a1a6f.svn-base | 175 - ...a7d879a1c62cf78569f83dd1d419c85b6.svn-base | 590 - ...ca016759fddfbee426afadc0ce93e7f1b.svn-base | 40 - ...979ec61210228e252844374016d1ce6ce.svn-base | 52 - ...049462591050d27e22cfd529eb0d183fc.svn-base | 13 - ...c7582439026aa6ee1f1afc044a0b2b1ee.svn-base | 26 - ...21905bbf9b6079b9dff6b80e2d9a35092.svn-base | 12 - ...0934088fbc66d1acb3480295aa2aef941.svn-base | 132 - ...91a7be01c2d679e5e951fcd8428718c04.svn-base | 42 - ...27d60f6d9ebe6ceb34f512c8b80e9e8e4.svn-base | 22 - ...6da177305967617a87d4b45ef6af5e3d9.svn-base | 271 - ...deb0fb3e8d9c243ce11d7202dbefd1ab3.svn-base | 3 - ...5e9685e8c361456008184b7c252437cd3.svn-base | 71 - ...51de788f41e05bd9ad61c9e44a37dba07.svn-base | 553 - ...b3375446b335460effba54222bc33160b.svn-base | 8 - ...787efbef9ad849a9077624fd9e2633230.svn-base | 109 - ...a7ea779b5f2dd18c7f613eae3dc88c441.svn-base | 155 - ...bdfa8b8f264d7d9591b760c14c22c3dfd.svn-base | 1997 -- ...3cff6e5a65ed7adbfc575d5d914f99b0f.svn-base | 63 - ...75e1f4d5b55de345c200d8943b05537ef.svn-base | 1451 - ...95af92626e75e8de65d624bccc197a489.svn-base | 36 - ...95c78cf29c696dd8a77d435d751a13c28.svn-base | 67 - ...ac6677c1e3739aaecd0b38822fbc80b86.svn-base | 15 - ...a92e996fd6f78d4c7cacaa7bac689b64a.svn-base | 783 - ...4a0e2beb80d2167dee178d0a23af5d97c.svn-base | 80 - ...3abfcbfbbb64b68cfcd1430ac15a3cb95.svn-base | 81 - ...6ec1bb73a60835b09176d095e26d3a682.svn-base | 139 - ...b6c0ff4d7f23292c9ee688db9a7b3c041.svn-base | 619 - ...9b362a5b781808aaa58278786456a5b6b.svn-base | 124 - ...b0314db436852a81d5760a139a490ae0d.svn-base | 401 - ...2f71fbeb834eb3ad59650e0562607dbb7.svn-base | 19 - ...051287706c008a09faef010076e17ba9e.svn-base | 1696 -- ...6bc7da26906e03d846cc6e06c0c991d5e.svn-base | 27 - ...a03ad6fe534d934b09013f77bd567ed17.svn-base | 360 - ...7059d8b19b4bb166303bc2a7cd97b6684.svn-base | 8 - ...772296432de01845aaf0526739756af44.svn-base | 83 - ...428088f7f0d02820079d959f0e83333d0.svn-base | 846 - ...593ccc6cb1c270e968603c2b0d944b039.svn-base | 62 - ...9d4fa84b968d821c0d714fadc2359f97b.svn-base | 111 - ...9f90f03fe65da50b950be4dac5ff80a8f.svn-base | 15 - ...1c042a05511e5c6d3daeedabaca377154.svn-base | 7 - ...4f75e3c4204c983d97bb196b2fdc1bd84.svn-base | 5 - ...eb6a81c89139eed5b14796cbd80afc137.svn-base | 224 - ...032755679c230f18fe49a3fbaac49fbee.svn-base | 210 - ...0aacdf799cfbd734fa9fc90030392810a.svn-base | 169 - ...469124b3b0fb017b1aad572f6dbc88d03.svn-base | 58 - ...5f624595f90e2fb76ff17b14abe639319.svn-base | 52 - ...c6eda87fddbd0ea9b6325c7fd2dbaf8e0.svn-base | 39 - ...f3ab386a0af9cb8d35f4595edc208d4c7.svn-base | 42 - ...f923a75e96faa34663eb86edf25acd49d.svn-base | 11 - ...7987f941604234834dc693ac44d9f57e3.svn-base | 39 - ...404c37e56066ca8df4dc042b03e7fd445.svn-base | 51 - ...2d7121810d7c52405e7274bf9640b33bd.svn-base | 58 - ...dba224c921df5afd70441a3d611e68ac9.svn-base | 197 - ...980a43b81ecca46a3ce6b0c3c5867ac6c.svn-base | 951 - ...973d1730104c81c7a0a334785b7d7b3a9.svn-base | 60 - ...053464e92a1be12d8eabf38623ab86447.svn-base | 155 - ...3f242e38b79d7d171ccbfd7ff4673c2ab.svn-base | 75 - ...9fd3067490f7532979b183375ab3010b3.svn-base | 247 - ...a1ce862bc682fdf99992ac4f050b76e96.svn-base | 30 - ...7da94e03573f73672132985760b6b1e6d.svn-base | 54 - ...8c8437f67467fac230f7c8c1dee0432be.svn-base | 2522 -- ...0ad3be16974dc3cc79b9c1772d41155b8.svn-base | 48 - ...3384ed4154daee09c94c2f377ea3e4d08.svn-base | 100 - ...50753cd2b0f043c2e53d73a8a925da051.svn-base | 22 - ...852490e73d02fc3f2079a0589d3e04f46.svn-base | 194 - ...14df485affd339759f0e00affd6d5ffd8.svn-base | 574 - ...1341f5717b8afa276fc4b06cc52e2be03.svn-base | 3 - ...6e45d957b824d0f53a7b17e5036c2cd4c.svn-base | 67 - ...e11862a1aaa538a0276248c27d797af55.svn-base | 234 - ...f271f6e8cb3e3c872dfa30ef33058a571.svn-base | 89 - ...400db2bf5b9b7755fadc3a5b51a330904.svn-base | 17 - ...a1121931f1c3fae972bb07f4dcb8aad59.svn-base | 20 - ...e5e6b4b0d3255bfef95601890afd80709.svn-base | 0 ...85b3c222c2ee602156afeb0c9ecf167f4.svn-base | 56 - ...aea5197eded2c57a6c7634b6f44a4e172.svn-base | 1160 - ...b58e0f1ab0206b623f34d10f1e6954035.svn-base | 30 - ...c7b282f37a7121fbc0d6cb9db793d68b1.svn-base | 105 - ...b2c5a06966d03b0110c98ace9869e8054.svn-base | 338 - ...10094a3eb6113f7bbec120ec7c358c7f3.svn-base | 83 - ...a58b7b8831be48e8867cc105de5c5add4.svn-base | 73 - ...399aa20835185f75854e2bd7f9ae4ebba.svn-base | 20 - ...f07d2f86cd374279c6bb59a8a3c3217c7.svn-base | 1358 - ...c2fd8f19818c74843b0c9aaba3e8b4ab2.svn-base | 85 - ...c62c76126422bb7c2c40c7aabaa1e9869.svn-base | 26 - ...fdfe43f509eccbc1a64d15999bbe404bb.svn-base | 1432 - ...f6dde8d9e9a4800399c7913c7a1051e19.svn-base | 40 - ...2bb078aec4db2e450ab368bce6d41a491.svn-base | 1092 - ...f02b7f535923c8a8b2efe9c0884a93822.svn-base | 50 - ...3c006dff8800e3cc0220eaed067dcdabd.svn-base | 606 - ...f2bb070870739179a57d9625481cbaabd.svn-base | 117 - ...cefde41dcf5a2df5c52efad65bbee5dff.svn-base | 60 - ...cd61d1c33a874f920e6df173c3f798cb5.svn-base | 358 - ...529aaf779fbd4b4fcc1b2292a67d6d8f9.svn-base | 104 - ...35876c16fcf6dffbb8ce3287873ba941c.svn-base | 93 - ...8a9b3412cd3863f0a192ca6204510eb05.svn-base | 5 - ...1ec8c3377609391b08eb3f231e46553ab.svn-base | 220 - ...ea93d61105821b503024863065d0f2467.svn-base | 175 - ...c3de4a05c7352710423ea7efd4f150848.svn-base | 171 - ...a8f1341f13026cecd03724e8821cee52e.svn-base | 109 - ...b3f93cb43004d062986fece989d1e0c1f.svn-base | 740 - ...8f2c7250ab046b2b7ed8235d65857cacf.svn-base | 353 - ...5c2a656d6ee53235f87a646dda701290b.svn-base | 33 - ...8afece9e61a3764229a6a6de935623196.svn-base | Bin 581527 -> 0 bytes ...be36a8ab554f94a0bbad602b158658c9c.svn-base | 15 - ...2ca9f178ae96863b69c0d3ded52b03d61.svn-base | 74 - ...6cdf9e8abdab18d1eadde482c45224e0e.svn-base | 359 - ...0943b4dc8a4f7182eb3ce34c2c17f5581.svn-base | 9 - ...79e47562321fb73b38476ed44a10b48ef.svn-base | 30 - ...ab33f8bb9cf2fd4302d8898032665624a.svn-base | 417 - ...8bdc099a8e429f7ff84a5f8a3e094701a.svn-base | 30 - ...26bf65486d24cad025538de8221fca370.svn-base | 77 - ...4f01bdfd49bd0ade9bf540890fef7cc5c.svn-base | 5 - ...9cb1fdaadea21f5e2ddd40c524a82c476.svn-base | 176 - ...17d0ba8e6b7f065dd4b74f1444a457fc9.svn-base | 58 - ...03a5299ec5c445335d58549ce844e817f.svn-base | 266 - ...32f850e1575bf1327184f9721eeb93e45.svn-base | 73 - ...edbe3cae55d22b931b2f598b6830d4e7b.svn-base | 38 - ...1bd087ce0c2a3196087eb9cbac15a2afc.svn-base | 56 - ...260a4e30083764a7622edf1c0ca4a6d0a.svn-base | 55 - ...a4e3507cb8936a72fb1c3555a27bdde49.svn-base | 7 - ...57510e7d3504e08de883f8dc2494d524e.svn-base | 26 - ...c1a2fde2f0e7f2248b8eef44b27213a73.svn-base | 64 - ...d1c35cfb5967bd94be6c5f98b180b4733.svn-base | 3 - ...ad18fd0124c624e35d44823a464737920.svn-base | 694 - ...4ac3a933e638b0ee748db46b5b52e8027.svn-base | 89 - ...408cd396d235f00e24a690c3de7d98e64.svn-base | 18 - ...735108ec78905cc7517d383aef2f9ec43.svn-base | 140 - ...ea3599f340d78deee9fb4e48a4bab7256.svn-base | 50 - ...9fa42d1494405561a4a16b19740c1cef0.svn-base | 36 - ...78ceb48c54c52c4f58ffa81c7fc3328bc.svn-base | 74 - ...f7b192a2312f917e80dd6addf88945f48.svn-base | 37 - ...12dc635fab4bc78af4e89fb1286695447.svn-base | 1112 - ...d9a66bfc3a437c519b10540e83bc87eb3.svn-base | 110 - ...2dcfa882df906ada34a27cb6198f9a44a.svn-base | 30 - ...dab7557063572c2fc50b0d86ae3a57f63.svn-base | 5 - ...12607f520981e02785ef2bffcb462a9fe.svn-base | 13 - ...0bfbdf3cae887962ed021065e8711b445.svn-base | 28 - ...bdfdf5fb4127dc58caaff759bff331393.svn-base | 83 - ...0dce195f92b651f110ad0c21c336808f1.svn-base | 22 - ...4a299e76bf16a300daf5503b095771520.svn-base | 585 - ...63ca4678820938bdd409020afd5137e02.svn-base | 381 - ...e096fe2440d66b3fd84f9049f84bba7f2.svn-base | 15 - ...9ae86bc3a2f411aea766ed205074ad099.svn-base | 72 - ...97038f3f423dc1ad0b9c2f8b14ae121e1.svn-base | 74 - ...295a4471fc6f67a9722557d399582f720.svn-base | 84 - ...aa790db4882b3085cef88f377e0c5d440.svn-base | 429 - ...e884f91b9a819670e7d7b86cbe83d3b3b.svn-base | 49 - ...b28d26f4d72774023ddcdbe6e5e0ca67e.svn-base | 15 - ...01179a3b67ec64e09e05b89f6a88bb485.svn-base | 13383 --------- ...79192e0757fae4958a540c0ebd4db9a1c.svn-base | 70 - ...c77d9f64a9576dd5d7132230514a2f13e.svn-base | 2 - ...e264f282a8a3752c7a7b1531e05c5699d.svn-base | 24 - ...9ad574e787062f93616472c448942b2e8.svn-base | 146 - ...36999a20931e1c0664c147665e025df4d.svn-base | 206 - ...134fcb88b7e8d2f3e485f9398b3a98f8f.svn-base | 24 - ...0f377d4863b029e225aa944a57acbec11.svn-base | 71 - ...63cdc89869fff21158c439b19735cdf5e.svn-base | 47 - ...6e00d7086684a6e1cdf8c1553f3ba60bb.svn-base | 307 - ...107b468dd80d5cac54c6f797cf9b9a6fa.svn-base | 42 - ...197b682bb05b39d3f64ff54eab5942eba.svn-base | 72 - ...f4e360477453e1d23f788e4e3ba435b12.svn-base | 72 - ...7bd764529518dacf64f5920ec9440b9dc.svn-base | 19 - ...413ec0ec0fb4e840f731f6b526e7316ea.svn-base | 372 - ...90be246a90206afc28dcf986860968031.svn-base | 14 - ...93ecf2e39d9e3053b1ec8bb3417515ef6.svn-base | 324 - ...24f744844afdde569d40ad4a384ad9428.svn-base | 442 - ...f2b26fae5f5a7caec275e5489e229fffe.svn-base | 14 - ...66f8a2a2adf1f2dc3504f3f3b5e63b754.svn-base | 16 - ...789f5d8e26230dd2594ec37d26b5b7d98.svn-base | 65 - ...37b3928abf7403c066206c96d1bb4b73b.svn-base | 40 - ...54013eaa773093914ce06b93a5989075f.svn-base | 22 - ...ece982cd89bed55d2f203fe259a03161b.svn-base | 51 - ...d88400923118dde01478f30a6737a8c16.svn-base | Bin 444420 -> 0 bytes ...f886d36f537e4175c3f6132ffb92b5031.svn-base | 10 - ...eb44f15949ffd806545db76e065d27cd4.svn-base | 19 - ...aeb22a08301754155fca7884ce1fc2003.svn-base | 869 - ...cf94ef0ec1e0e84e762590ed9b6230313.svn-base | 183 - ...40157d2311e8674c156a2b5a162b3e417.svn-base | 60 - ...f1e9174949649c904a0336ff8e586088a.svn-base | 19 - ...f06f99ff3ac40da02e3d45c0bf588cd48.svn-base | 74 - ...debdd8f951b70dccb8b9024d75f7ce78e.svn-base | 119 - ...bc99b8061be6a0efa6af454add459673a.svn-base | 109 - ...003310bf4110bb86ad4a5e99744373dd9.svn-base | 44 - ...71fa50f70b374564842879b2942084883.svn-base | 24 - ...be447157ba820b7b4259690d1c67ad8d9.svn-base | 23 - ...5c1d2b9245d504074a8334564e67733b9.svn-base | 1371 - ...a3126fa2019f1e41b977cae90a7714cb6.svn-base | 30 - ...fabf26be2390569890d8a0448aa6c4aea.svn-base | 25 - ...fc632a5930822762e68780987cca126a2.svn-base | 49 - ...1a433b5ffe5158002cac40b99f0e37e8a.svn-base | 2 - ...01537dcd4d8a3ca3bdf582e6f792230d8.svn-base | 10 - ...4193030d1b1cf678728d7a18b0c6102c0.svn-base | 140 - ...7396563804b336d555fc7e75556f09498.svn-base | 9 - ...3faf2cfd0f74a313f454962388a186cdb.svn-base | 2 - ...358d7e5e994d9c32f360ccb66fef77cc2.svn-base | 455 - ...0bc1539a43b3cb3124acb2f6fe497e165.svn-base | 201 - ...c6f5f5ae59da440cc2b610d63a7d4270b.svn-base | 613 - ...f2d770e5d22488b5e8fbe56b168708ab7.svn-base | 50 - ...e5f487994f1e75c44805710fc0ed5b7cb.svn-base | 58 - ...57aa65aa9ef046b82dae658913078d8bf.svn-base | 98 - ...bffc7b764721782552c15597835e92dec.svn-base | 92 - ...f0802edf013cb0effaac51794fd2b8805.svn-base | 26 - ...62b7c4fbda1bb60809d10c60a19a9caaf.svn-base | 349 - ...103fb95765ca27bc336e1fc157ea7c262.svn-base | 82 - ...455c3999eb33891c2b18eddba7935a8eb.svn-base | 16 - ...b39b7eacccd360247076a188cbff73a3b.svn-base | 52 - ...a9b15973574acc0aa70e58c6071be765f.svn-base | 50 - ...c14facc5a13d2851474dd0cd327491132.svn-base | 67 - ...5873537039c1a498e7e97039d702a18bf.svn-base | 295 - ...ab0118f67ae8699a5f3bf96746a6712ee.svn-base | 90 - ...6193665335f1a2f0b5f90ccb187e65f5f.svn-base | 301 - ...b40e7c5a284f2abb974a8e580c13c6230.svn-base | 58 - ...3d908fcd5fde4aa95af762fec95b4b650.svn-base | 178 - ...c095f55039f1c5443df67e6c70ff23da8.svn-base | 43 - ...4f2eaccb20d16b769e1a6651f530fa676.svn-base | 630 - ...7144df0bde0c697d47a1d4186591f8784.svn-base | 94 - ...fa4a3ad58bc187b34c4b62a8621f496c8.svn-base | 24 - ...d6e7a476ab5f0ef7007ca0609243a11ac.svn-base | 78 - ...6725e4dc8f65c77f72a770ab02bc03c1f.svn-base | 66 - ...b3712693221d8e274544bcba84ac07eea.svn-base | 22 - ...5feabaa059bd64d6ce413f966852ba083.svn-base | 8385 ------ ...b7634fe0cd030b1378bd748a331b7847f.svn-base | 23 - ...6d1b57c6a740bc1a1f0842b3d7574eb75.svn-base | 1400 - ...606b7974c36f4f4a679e9c46a3d1a6471.svn-base | 176 - ...d17da293fa06f093c706dfe375c52daf7.svn-base | 131 - ...6aa47f3f74a9af743d1017cb2a2ddf5bb.svn-base | 893 - ...346f02df1dfea12c43f47e0e1151f6b25.svn-base | 140 - ...e43b1696ff06d409d5948763e2c95388a.svn-base | 8 - ...685144e127a9308ebbba9f48a011b2fc7.svn-base | 2493 -- ...9808a0ea994eb4faf7cfb038397145746.svn-base | 13 - ...cd9606aa7253faf56208384b6d976958d.svn-base | 10 - ...45c826e47068805e027ad64e2a7293e71.svn-base | 132 - ...68cc73554afb6cd811f6f298d819b45d0.svn-base | 25 - ...87b34c000a79e3f1beceb1521377f8cbf.svn-base | 176 - ...d5c797053a04bda9c384f3840a8ebe205.svn-base | 866 - ...fea44f1139edfd393c9ce07b3d3b54a67.svn-base | 24 - ...82ed6dad5501484a46ba651132a434607.svn-base | 897 - ...06626b6ba9b7fbbd89112a561022ec97d.svn-base | Bin 321189 -> 0 bytes ...3e8e23bc3b543210a7d72bb218bf98f1c.svn-base | 70 - xios_2311_src/trunk/.svn/wc.db | Bin 1261568 -> 0 bytes xios_2311_src/trunk/.svn/wc.db-journal | 0 xios_2311_src/trunk/.void_file | 1 - .../xios_test_suite/ARCH/arch-X64_IRENE.env | 21 +- .../xios_test_suite/ARCH/arch-X64_IRENE.fcm | 8 +- .../ARCH/arch-X64_IRENE_GNU.env | 11 - .../ARCH/arch-X64_IRENE_GNU.fcm | 26 - .../ARCH/arch-X64_IRENE_GNU.path | 28 - .../ARCH/arch-X64_IRENE_LLVM.env | 13 - .../ARCH/arch-X64_IRENE_LLVM.fcm | 26 - .../ARCH/arch-X64_IRENE_LLVM.path | 28 - .../xios_test_suite/ARCH/arch-X64_JEANZAY.env | 11 +- .../ARCH/arch-X64_JEANZAY_PGI.env | 17 - .../ARCH/arch-X64_JEANZAY_PGI.fcm | 25 - .../ARCH/arch-X64_JEANZAY_PGI.path | 15 - .../COMPILE/compile_param_irene.def | 4 +- .../COMPILE/compile_param_jeanzay.def | 4 +- .../xios_test_suite/COMPILE/config_compile.py | 10 +- xios_2311_src/xios_test_suite/ENV/irene.env | 11 +- xios_2311_src/xios_test_suite/ENV/jeanzay.env | 8 +- .../TEST_SUITE/context_atm.xml | 363 +- .../TEST_SUITE/context_grid_dynamico.xml | 4 +- .../TEST_SUITE/default_param.json | 3 +- .../xios_test_suite/TEST_SUITE/iodef.xml | 2 - .../xios_test_suite/TEST_SUITE/my_run.sh | 43 +- .../xios_test_suite/TEST_SUITE/run_test | 24 +- .../xios_test_suite/TEST_SUITE/run_test_irene | 16 +- .../TEST_SUITE/run_test_jeanzay | 4 +- .../xios_test_suite/TEST_SUITE/step1.py | 45 +- .../xios_test_suite/TEST_SUITE/step2.py | 109 +- .../TEST_SUITE/test_axis_algo/context_atm.xml | 14 +- .../test_axis_algo/user_param_advanced.json | 9 - .../test_axis_algo/user_param_basic.json | 9 - .../test_domain_algo/context_atm.xml | 9 +- .../test_domain_algo/user_param_advanced.json | 8 - .../test_domain_algo/user_param_basic.json | 8 - .../test_dynamico_algo/checkfile.def | 7 - .../test_dynamico_algo/context_atm.xml | 417 - .../user_param_advanced.json | 8 - .../test_dynamico_algo/user_param_basic.json | 8 - .../TEST_SUITE/test_function/context_atm.xml | 1 - .../test_function/user_param_advanced.json | 7 - .../test_function/user_param_basic.json | 7 - .../TEST_SUITE/test_grid_algo/checkfile.def | 1 - .../TEST_SUITE/test_grid_algo/context_atm.xml | 30 +- .../test_grid_algo/user_param_advanced.json | 7 - .../test_grid_algo/user_param_basic.json | 6 - .../TEST_SUITE/test_memory/checkfile.def | 7 - .../TEST_SUITE/test_memory/context_atm.xml | 506 - .../test_memory/user_param_advanced.json | 9 - .../test_memory/user_param_basic.json | 9 - .../TEST_SUITE/test_nemo_algo/checkfile.def | 3 - .../TEST_SUITE/test_nemo_algo/context_atm.xml | 384 - .../test_nemo_algo/user_param_advanced.json | 8 - .../test_nemo_algo/user_param_basic.json | 8 - .../test_scalar_algo/context_atm.xml | 1 - .../test_scalar_algo/user_param_advanced.json | 8 - .../test_scalar_algo/user_param_basic.json | 8 - xios_2311_src/xios_test_suite/generate_ref.sh | 3 +- xios_2311_src/xios_test_suite/launch_all | 7 +- 1710 files changed, 28636 insertions(+), 330210 deletions(-) delete mode 100644 xios_2311_src/arch/arch-X64_IRENE_GNU.env delete mode 100644 xios_2311_src/arch/arch-X64_IRENE_GNU.fcm delete mode 100644 xios_2311_src/arch/arch-X64_IRENE_GNU.path delete mode 100644 xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env delete mode 100644 xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm delete mode 100644 xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path delete mode 100644 xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env delete mode 100644 xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm delete mode 100644 xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path delete mode 100644 xios_2311_src/extern/tv_data_display/tv_data_display.c delete mode 100644 xios_2311_src/extern/tv_data_display/tv_data_display.h delete mode 100644 xios_2311_src/generic_testcase/context_oce.xml delete mode 100755 xios_2311_src/src/addr2line.hpp delete mode 100755 xios_2311_src/src/array_new.cpp delete mode 100755 xios_2311_src/src/buffer_cs_base.hpp delete mode 100755 xios_2311_src/src/config/coupler_in_attribute.conf delete mode 100755 xios_2311_src/src/config/coupler_out_attribute.conf delete mode 100644 xios_2311_src/src/distribution/client_client_dht_decl.cpp delete mode 100644 xios_2311_src/src/distribution/client_client_dht_template.hpp delete mode 100644 xios_2311_src/src/distribution/client_client_dht_template_impl.hpp delete mode 100644 xios_2311_src/src/distribution/client_server_mapping.cpp delete mode 100644 xios_2311_src/src/distribution/client_server_mapping.hpp delete mode 100644 xios_2311_src/src/distribution/client_server_mapping_distributed.cpp delete mode 100644 xios_2311_src/src/distribution/client_server_mapping_distributed.hpp delete mode 100644 xios_2311_src/src/distribution/dht_auto_indexing.cpp delete mode 100644 xios_2311_src/src/distribution/dht_auto_indexing.hpp delete mode 100644 xios_2311_src/src/distribution/dht_data_types.hpp delete mode 100755 xios_2311_src/src/distribution/distributed_view.cpp delete mode 100755 xios_2311_src/src/distribution/distributed_view.hpp delete mode 100644 xios_2311_src/src/distribution/distribution.cpp delete mode 100644 xios_2311_src/src/distribution/distribution.hpp delete mode 100644 xios_2311_src/src/distribution/distribution_client.cpp delete mode 100644 xios_2311_src/src/distribution/distribution_client.hpp delete mode 100644 xios_2311_src/src/distribution/distribution_server.cpp delete mode 100644 xios_2311_src/src/distribution/distribution_server.hpp delete mode 100755 xios_2311_src/src/distribution/distribution_type.hpp delete mode 100755 xios_2311_src/src/distribution/element.cpp delete mode 100755 xios_2311_src/src/distribution/element.hpp delete mode 100755 xios_2311_src/src/distribution/element_view.cpp delete mode 100755 xios_2311_src/src/distribution/element_view.hpp delete mode 100755 xios_2311_src/src/distribution/gatherer_connector.cpp delete mode 100755 xios_2311_src/src/distribution/gatherer_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_client_server_remote_connector.cpp delete mode 100755 xios_2311_src/src/distribution/grid_client_server_remote_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_elements.cpp delete mode 100755 xios_2311_src/src/distribution/grid_elements.hpp delete mode 100755 xios_2311_src/src/distribution/grid_gatherer_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_local_connector.cpp delete mode 100755 xios_2311_src/src/distribution/grid_local_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_local_view.cpp delete mode 100755 xios_2311_src/src/distribution/grid_local_view.hpp delete mode 100755 xios_2311_src/src/distribution/grid_mask_connector.cpp delete mode 100755 xios_2311_src/src/distribution/grid_mask_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_remote_connector.cpp delete mode 100755 xios_2311_src/src/distribution/grid_remote_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_scatterer_connector.hpp delete mode 100755 xios_2311_src/src/distribution/grid_transform_connector.cpp delete mode 100755 xios_2311_src/src/distribution/grid_transform_connector.hpp delete mode 100755 xios_2311_src/src/distribution/leader_process.cpp delete mode 100755 xios_2311_src/src/distribution/leader_process.hpp delete mode 100755 xios_2311_src/src/distribution/local_connector.cpp delete mode 100755 xios_2311_src/src/distribution/local_connector.hpp delete mode 100755 xios_2311_src/src/distribution/local_view.cpp delete mode 100755 xios_2311_src/src/distribution/local_view.hpp delete mode 100755 xios_2311_src/src/distribution/reduce_transform_connector.cpp delete mode 100755 xios_2311_src/src/distribution/reduce_transform_connector.hpp delete mode 100755 xios_2311_src/src/distribution/remote_connector.cpp delete mode 100755 xios_2311_src/src/distribution/remote_connector.hpp delete mode 100755 xios_2311_src/src/distribution/scatterer_connector.cpp delete mode 100755 xios_2311_src/src/distribution/scatterer_connector.hpp delete mode 100644 xios_2311_src/src/distribution/server_distribution_description.cpp delete mode 100755 xios_2311_src/src/distribution/server_distribution_description.hpp delete mode 100755 xios_2311_src/src/distribution/transfer_transform_connector.cpp delete mode 100755 xios_2311_src/src/distribution/transfer_transform_connector.hpp delete mode 100755 xios_2311_src/src/distribution/transform_connector.cpp delete mode 100755 xios_2311_src/src/distribution/transform_connector.hpp delete mode 100755 xios_2311_src/src/distribution/weight_transform_connector.cpp delete mode 100755 xios_2311_src/src/distribution/weight_transform_connector.hpp delete mode 100755 xios_2311_src/src/filter/client_from_client_source_filter.cpp delete mode 100755 xios_2311_src/src/filter/client_from_client_source_filter.hpp delete mode 100755 xios_2311_src/src/filter/client_from_server_source_filter.cpp delete mode 100755 xios_2311_src/src/filter/client_from_server_source_filter.hpp delete mode 100755 xios_2311_src/src/filter/client_to_model_store_filter.cpp delete mode 100755 xios_2311_src/src/filter/client_to_model_store_filter.hpp delete mode 100755 xios_2311_src/src/filter/client_to_server_store_filter.cpp delete mode 100755 xios_2311_src/src/filter/client_to_server_store_filter.hpp delete mode 100755 xios_2311_src/src/filter/file_reader_source_filter.cpp delete mode 100755 xios_2311_src/src/filter/file_reader_source_filter.hpp delete mode 100755 xios_2311_src/src/filter/file_writer_store_filter.cpp delete mode 100755 xios_2311_src/src/filter/file_writer_store_filter.hpp delete mode 100755 xios_2311_src/src/filter/model_to_client_source_filter.cpp delete mode 100755 xios_2311_src/src/filter/model_to_client_source_filter.hpp delete mode 100755 xios_2311_src/src/filter/server_from_client_source_filter.cpp delete mode 100755 xios_2311_src/src/filter/server_from_client_source_filter.hpp delete mode 100755 xios_2311_src/src/filter/server_to_client_store_filter.cpp delete mode 100755 xios_2311_src/src/filter/server_to_client_store_filter.hpp delete mode 100755 xios_2311_src/src/filter/temporal_transform_filter.cpp delete mode 100755 xios_2311_src/src/filter/temporal_transform_filter.hpp delete mode 100755 xios_2311_src/src/filter/transform_filter.cpp delete mode 100755 xios_2311_src/src/filter/transform_filter.hpp delete mode 100644 xios_2311_src/src/graph_package.hpp delete mode 100644 xios_2311_src/src/interface/fortran_attr/extract_axis_interface_attr.F90 delete mode 100755 xios_2311_src/src/io/netCdf_cf_constant.cpp delete mode 100755 xios_2311_src/src/manager/contexts_manager.cpp delete mode 100755 xios_2311_src/src/manager/contexts_manager.hpp delete mode 100755 xios_2311_src/src/manager/coupler_manager.cpp delete mode 100755 xios_2311_src/src/manager/coupler_manager.hpp delete mode 100755 xios_2311_src/src/manager/daemons_manager.cpp delete mode 100755 xios_2311_src/src/manager/daemons_manager.hpp delete mode 100755 xios_2311_src/src/manager/pool_ressource.cpp delete mode 100755 xios_2311_src/src/manager/pool_ressource.hpp delete mode 100755 xios_2311_src/src/manager/register_context_info.hpp delete mode 100755 xios_2311_src/src/manager/registry_manager.cpp delete mode 100755 xios_2311_src/src/manager/registry_manager.hpp delete mode 100755 xios_2311_src/src/manager/ressources_manager.cpp delete mode 100755 xios_2311_src/src/manager/ressources_manager.hpp delete mode 100755 xios_2311_src/src/manager/server_context.cpp delete mode 100755 xios_2311_src/src/manager/server_context.hpp delete mode 100755 xios_2311_src/src/manager/servers_ressource.cpp delete mode 100755 xios_2311_src/src/manager/servers_ressource.hpp delete mode 100755 xios_2311_src/src/manager/services.cpp delete mode 100755 xios_2311_src/src/manager/services.hpp delete mode 100755 xios_2311_src/src/manager/services_manager.cpp delete mode 100755 xios_2311_src/src/manager/services_manager.hpp delete mode 100755 xios_2311_src/src/manager/window_manager.cpp delete mode 100755 xios_2311_src/src/manager/window_manager.hpp delete mode 100755 xios_2311_src/src/mem_checker.cpp delete mode 100755 xios_2311_src/src/mem_checker.hpp delete mode 100755 xios_2311_src/src/mpi_garbage_collector.hpp delete mode 100755 xios_2311_src/src/mpi_tools.cpp delete mode 100755 xios_2311_src/src/mpi_tools.hpp delete mode 100755 xios_2311_src/src/node/coupler_in.cpp delete mode 100755 xios_2311_src/src/node/coupler_in.hpp delete mode 100755 xios_2311_src/src/node/coupler_out.cpp delete mode 100755 xios_2311_src/src/node/coupler_out.hpp delete mode 100755 xios_2311_src/src/node/element_type.hpp delete mode 100755 xios_2311_src/src/release_static_allocation.cpp delete mode 100755 xios_2311_src/src/release_static_allocation.hpp mode change 100755 => 100644 xios_2311_src/src/test/generic_testcase.f90 delete mode 100755 xios_2311_src/src/timeline_events.hpp delete mode 100755 xios_2311_src/src/transformation/algo_types.cpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_no_data_modification.cpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_no_data_modification.hpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_reduce.cpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_reduce.hpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_transfer.cpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_transfer.hpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_weight.cpp delete mode 100755 xios_2311_src/src/transformation/algorithm_transformation_weight.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp delete mode 100755 xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp delete mode 100755 xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm.cpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm.hpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_generic.cpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_generic.hpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_no_data_modification.cpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_no_data_modification.hpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_reduce.cpp delete mode 100755 xios_2311_src/src/transformation/grid_algorithm_reduce.hpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp delete mode 100755 xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp delete mode 100755 xios_2311_src/src/transformation/transformation.hpp delete mode 100644 xios_2311_src/src/transformation/transformation_enum.hpp delete mode 100755 xios_2311_src/src/transformation/transformation_path.cpp delete mode 100755 xios_2311_src/src/transformation/transformation_path.hpp delete mode 100644 xios_2311_src/trunk/.svn/entries delete mode 100644 xios_2311_src/trunk/.svn/format delete mode 100644 xios_2311_src/trunk/.svn/pristine/00/001664a702346a7735783c40c3c5d7dc9f061f48.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/00/00bb56d4f2685a36d67ee488f80e0432497ce34c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/00/00c00a6ee28d2511414161f64f086497532d706d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/00/00e647ef3e30c69b485c32b184bda5192a21d103.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/01/01b7937e330b418c0bb3bc589b10b4a6020bcf2f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/01/01c82c8b3267602e50d7132407425f8e004c988c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/01/01e3437bc73c2f4dd411424f56d5f91d5431e765.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/02/020285d707a316fbb435e21ce1792cf26a092b78.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/02/023613fb62d54b462672e461520f00a745ec7bf1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/02/025664f1dbb8fa1d2e76d860b901065c7a64b5f5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/02/02bfcb8d5f5f2ef6e578ede836f7b433c5f10bf3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/03/0300a8579eed33640034cd71bea063c5173bc065.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/03/0331aaa77c8b8bc34c5ac25eaa652d51e613fa84.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/03/034adcdefb88d4a8c04f8e9b33f381681bd217a6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/03/0390aad587a061ed4b0e0d231ecb090254f8b17a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/03/03a2c14076c89810ea11ba184078a577728cd3d3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/04/04f0c59495f59756f325a366de7e3f704287927c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/04/04f13843f1159578dfbbe9c828440250066e4256.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/054b907a861f3b86ca0d28adbfc93004eadec3f9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/054eef59aa1d47b05b43d73237e33f24ff3085e1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/054f4feab019de8827c1b42a80621b7f706dbb8b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/055649da7635bb99931c00ef8ab48d1156669775.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/05b75e37d5657ce2db2bf02d25f3da52192b7075.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/05dd067413d84e0fd8caab1eedd0fdf1ade9f88c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/05de388da9c1c09cf8f252895b39e7c5910c6007.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/05/05f43d3c60ab2fba3374c2680620d7f967754230.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/061abb6e986921ee8584c2ea38500065d769cd96.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/0644f1b0600cbe87d36865c339bf0549f927afeb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/068658eb5cb1cf2fa11eaac688f7754cd10c8191.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/069fc563b506de6604f7893f20a3e55324110cd7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/06abb9b9f417a46ac04551d647353e3775942a0a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/06ae221ce9f206980ba38a2a70d0ea01093ad565.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/06c098773233f7b35015c0a0b52af22c4e12e575.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/06/06e22b3bef1c755bf2062e6be9931af073213aa4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/07/07d09b28bb3c3f22bc6f36013bd68c2d97c7ef8d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/08/084ec5864c77428e5ec400f8a10cf617b21d3df3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/08/086ca47bf552f86fbe7bd59177c5591fd66081c6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/08/089c3277857d0c4814b866bbfe5113d89a527198.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/08/08ba91dfd77e6e090706b8c0a74b760aa61cbdd3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/08/08ebbd565988e3b01a64f458e355159a70528f38.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/09/0963f7df151c62c183cc3ad49a661b86460d813b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/09/097fdccec82fd40cd3620a7f09d5c9d26a1e5271.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/09/09b2bfccc4e7b6a35a29077e46f8f4e7285b2be4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/09/09ba537f942ac889b66ddc28936ce858929c8918.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/09/09eeff6558bf202b4b4e6c7be37ed8d270d90ff5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0a53b978b70605823bfb5dbf206e820891b9c6cc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0a8aff6580311eed6c01e940724241896bfd037d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0aa66ae11e350e622a8dd1c99cdc1930bec2157b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0ab5feebe983ae91cd829c3bee6b4c22c3234dc6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0ac4b8f50ea240dcbe814b56cb51a831a29769d8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0af6195d18cae94c032330026f944e8bc8f7e696.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0af792afd2353f6b1e5e58444a2653c61564cf71.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0af980428ffd1022354f6b6813dd153be96f626e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0a/0affe6201e46effc4f4dd5051b220ea9d4231350.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b0add2da7903aa8b3d4a867a2e675fddefc5ef4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b1d8d613a742d02b1dc4d36842bdbf3a598a48b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b21c090e5ede7692c8b2f5e88ec8773ab0e5eb7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b2b6b865225bcde3284eb146c5e84c6e036c513.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b9992fbfbd8ee7669a384043de4f5cbe890a0c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b9ab46c7e26c911b3aad59eea0504625dfaa1a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0b/0b9ddc800bc0229eb8269a832b8230ea1a56a7ae.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c13852711e73155bbec19c782e8f77e76de3a5b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c1b53fe0f03e0deef14aecaeb33df0540f4261f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c4a28ac09a8afd7eacae367ddcad1276e66f70e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c51b61367deb566298778b2248924c0b67f703d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c7d7d58b3b85f4643d98e4f1ed08acae4b55302.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0c/0c992e6746676b0183d0c967ee5c80f335535ccb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0d/0d364f894cfdda4f40ec60aa9aa8575015f7bf5e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0d/0db62b41428f8463d53c257e34a5e0c6832421c4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0e/0e349060a206ee5fb7c8bb3e20129408caea47a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0e/0e6e410860c535b9a0a6c97b6de152eb3660eefe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0e/0e917691c51bd0ec97516575d302b9f19c48b7e6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0e/0e9ce7c56fc9c31b4459e173e944c530201c314b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0f0d39d84e6a213cf5e904842b9b0b64f86d6c77.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0f13cab8e17a9431a0870c422605e74a8d96468e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0f2f156c6b843d4f32ec8303ec59d8368bb03cc7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0f3dad789cea33ba230ef4f090badf13ece6743a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0f428130e9c9195d3b84d1e745afc2eff5c2bd89.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0fb844d38eb0bd09cb71bb5209673974042909ef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/0f/0ff2e82a62c42ad11f830d2082e3258393ebbab4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/10/107c4cb05805962bddaa7becd69b0359ebe2a45a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/10/10c41619c79f80dd1c1acb16cb129087e08af7b9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/10/10c5c4085be37be329a1d5142cc3c2053aeadf50.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/10/10d9f9df52a9741b046c64c5386d5519c2780c22.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/10/10dfa619607dfad0b66d6a8957932e0557b7f118.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/11/1110ac81ae2f116c4651b6c45d9e87325a85bf52.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/11/114e20de02ea366675f47d88fd9828eaeedb76f2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/11/116422c0c8d331bd66430c3a710419df64cdb868.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/11/117ceaf1d446b7f56d19c4e954ee6fad2512cfd8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/11/11af44e30d8a3084d37c9d204c01464f6d8f4515.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/1232b14d5ad63af45f1cdd4f060578cb2c7857e3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/129fcc1bed1f93515c05fb139713e99a19598632.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/12a5fbc5bbc2bfbf12e715c5e581f184e3525dbf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/12ed39e78e31023bc1d764eb23533b29299c3977.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/12f21d8b79ceee6e2748b050d6cf9800855633e0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/12/12fd2fb1ba609edb305de7e2bcf510df2434f107.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/13/13912e4fd27d0ecf7c7af4e9d4cde4a416a31b28.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/13/13a3702e107ac5b0c60240f09c1c31ddfd13fe39.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/13/13e3658358bf9d952c3aadf7eab20caac1ce775e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/146015bc0c3ee896045050282b0cc66909c2a45e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/14888fa9195ae66db453a7ef922ac61376aca05d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/14b0fd250050b4546c3decff15b4df34ba57abc4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/14b8508d692a0cff2749314b7de7481ae8172291.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/14e31f84720723592faeaa8d7e3d7cd1d6771606.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/14/14e55f4466211b82387e8d071522e5c79a63af81.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/15/1525e466c9f6fa786e6966240c217fb4ca817101.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/15/156faa9b35e034158676aaca387a584acf3e17c2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/15/1574cda771be50a04d1ac4748991399b01133f85.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/15/15adfb87daa1cc2f16ec7e5d14bbf9e2c436d9dd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/160c05e19b0a740ffdf07c82e85ca99225b5d71c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/1620d5f5a1131b647ea53f78fc38ca22a756c35b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/162105392bd838a17acc34a1bb75e421f2a52112.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/167b317826255a7fa8834c149666ec628aa79ed3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/168ba4eef40edf69e2e633457ebbe9236a98676f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/16/16f07c6b373ae58030c90fc4d65f40158302d83f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17064f9f1ab05acae745f566dbdbdf82cba13cbe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/170aee81b93cdb83fde1926155080666bf0eb141.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/174407dbae1a1f7ed52d1b5a537e4e78d006f667.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/1764267699125da9cbf0021aceb89235105b91fb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17ae47a623bf30642f1d397b475544cf26ea28b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17c0a454e53fd1f4f956abac018abd5870a6ac75.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17e687f6f01d832f8c6f79502886622811a5a252.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17f34111aa9a21dd33c94f6af2c6726d87617dca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/17/17f7d0f12b77deba982c3238aa58e84740e254b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/18/1815c03efa9ddbeabd48e4f936aef184387fc2e8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/18/1861e1c40d3a276aaa858eea95d4400b9a950aae.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/18/189f6d4ecef3a3fddfdc33b40ad3be45af28c89d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/18/18e4a2e074b3e95de931cddd5acb90dc2ef45214.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/18/18fcf9d2963205daaeffa9654b4bd0df0c91e4a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/19/19692e13d2b90b612f9ceba0a200601b7374a887.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/19/1983abd1ed88d6cb4d42e8193fc7cf9289f233a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1a/1aa1b75bba9b4290f31454383b23ef17fc53ba6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1a/1abb89a700d92ecea8af73ba5344daeb74d7f7ad.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1a/1ac98cea0e9698bee61755d32b59e1be50d4af3a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1a/1af8f90f357646bff693409423c90904953938f7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1b/1b7a541bf24fdc78aceaf014e67b4582b279b8d6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1c/1c4b744d8d6d7391808aa4698d2749bbeb10175a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1c/1c968c9d0a1b301782e16d4b69a672042b16110c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1d/1d1424ecaf3129290db0985c6a0479f5335f105e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1d/1d5015b3549dfa1f35c62a3401e9f97e79e8074c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1d/1de3180d2a5f506b060c9830c54670a0a509c16f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1e/1e579f694be239156ed224769276f5f9944c3547.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1e/1edd09149a34cb20cbd970c55f041189a01c86c4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1f/1f1b12da0b1635c2ad2e86ff0e3dcbd7ec180cac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1f/1f8585c58f8663eea10b1b022efc28e4b62e6560.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1f/1f8f88a7d290d0c5fb81a61dcb6179164ba3ee93.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1f/1f94d295dfed7373ce0dceda8883f51714600cd6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/1f/1fe732e85dd99684aeb129d5b6a127e7e41b5d29.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/20/201e7d522adcb3f2ed985a2fd639a5cd17c9162d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/20/2098f2566e2d6ea26a8d6405ac03549db1e150f6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/20/209c9508d3c4f9644073ddc8c49e11170d84fa2d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/20/20dc7ec3877460067789a56e7a60d25d3a1bd899.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/20/20f18760ff4cccf41c2a0ff32a0f62b79e888ebb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/21/2101d90eb977f4e09f76ea125885571118bc319c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/22/22395f92f0165e455703299f8aa9d24e0cbc6cd0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/22/22667d77c9577ac1ef1bd87395f6f9e4dc7bd314.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/22/22d7fde6189993558ad3b606509d53db901754aa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/23/23098078cd76bfd5eaadef9d4a8c1d52894483fa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/2420099093b325526a569ca62d99c36c54de26dc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/244403db8e0640a26f20672d172a138004f9e7c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/245017ab32983b08beab3cbd70756ffa9ebf29bc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/245d5540cc1122ac27776c9e7b0b91e8e871aa6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/2477620ceedf7a611209fa5fcd63657bb5542985.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/248190e9c393a7c343b8ec2bb0cd46750cd39f62.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/24bd96a09955ceedc0e67030ed223de8f4000b73.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/24d85b707624ad9f56be8b877d5a783a4f9bb037.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/24deaaa0fa00b02dbf5e5097a308cc3f91c86b8e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/24/24eadca61f3e185840152878eced04f17e24fc17.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/25/253dcb4fbd3d262871418a40b6161cf91db9e70a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/25/2554149082de1a9c56d4abb21fbc8237f820faac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/25/25aee44cd2d987907b282d393d49bd18d1fb08e0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/25/25f2999faaeb21db80b4f6eab5ec67d89b3b9f28.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/2616a0b78edeedb227772eedda155aedafbfbe2e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/2629b1a534aac11cda28ac96224a7ce92a752620.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/26428ad363f61bac843ea5b684ec2dc18a3cb6df.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/265493f656a2a21e1b076276c20a4d615f715d11.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/2684ecd3b096138f2edc5e33a8d5a8a27b1fbe54.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/2691a37647052d754af0606f36ae2e892bffb245.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/269270c8b470a1bfef6102c77aef38a298d22798.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/26e3b6eef92a9057083ebe69448319cc55e9ede0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/26/26ef59c0f65b005c1f2c2383cebc8c2e807f0405.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/27/2710693d5cbf42b3274b9301f49ca39c422f2f10.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/27/27bb2c5aaf26422b49b194765da998941827e100.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/282461a8a9e2d1642cc97ade11392beac35b6d39.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/2859e3444c2181a65e7a4b4dc2acc2fc9b4ce7cc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/2861b94f49a279082f0ba5a02ffc6d1dabf75476.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/28696442b43602f718726ee22eb50cdd82f8ddbd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/287f4ca01dc9b564d7556a8f7b0eaad6bf799d3f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/2883cf1649e1310e5c448f43243cf31622144a75.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/28/28de57cf935e5b2b868b13e7ad9d10e5ab0408eb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/29/296b1c337c296247e45e684bf9a29b49aae1a054.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/29/298163d12ff94298a348b0e795a93d910bb7639b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/29/29ea7e508de6d508527e89fde103b0c7d875f604.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a12eab88aa7d12c0f8e75e077d6ee19439e5200.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a29a0ef68377d8bdf7bdea3d47f457e5c0f5e3f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a64e63c035eb79a97802bf0912ca3fea5de579c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a73a97fa126529663a87e2e01f3477a285b0d67.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a7c7226c2cf7eacdd21ae0fa4d45e2c7c28b39f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2a80cd82218f38e590c1a49b358cd88670798314.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2ab3116516bd604168063fb94703431b8064ff4f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2a/2aea34d07166b9703b62b0a46538d23af19cc928.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2b/2b737d758c82e48cdf2883829c41a96bf3197853.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2b/2b73d9a4d095d5225e6737dd7f91bc6f8a525bca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2b/2b9cb93c7735ea6822f1c1962ddb3062dc5e4d1b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2b/2bb9e0e28ab3c0bb75d03e72b1a43b9ea3440fa2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2d/2d06cce0a7e09fd853eca5f6be8f3a498c32bf3b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2d/2d141f94aa20a37ff74203a40b8d323ebaa8f507.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2d/2d3be14312805bb76f7eb61f1abd5e169b73074a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2e/2e404a3879965649cafbb5feb3d537f1cf0542fb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2e/2e4684a1ff3b3dc7309a6826580512ea895a86d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2e/2e744b949ac35b0650aaa803970a5bbd123e86ac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2e/2ec76e17968c37499e2e8d7660ed3734f3396a4e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2f/2f0d536c5e13a53ee411054e67a9f384da3499d2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2f/2f1611ba6dbc9f265c5365f117ce9e19bfb8beda.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2f/2f78a1b010f161a682e04ae398d97cba7607324f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/2f/2fda88cefa36ad2ba600d94fa02125de7402e02b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/30/306d8edb1729564105c9e29f0bf6627ae5df372c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/30/309fad69ade0d2b65b39b8787adc7cf3487f5848.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/31/3134bdc5f2507be97169b29c8fd04b6abe25dabb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/31/31367eebc2f66243d77b29d8cf5bbf7b2d466f1e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/31/319a6009f08d66796cb358c1c9d48f578f61dbe9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/31/319f147b0231da6ed50e5d0031da759ff0d4e3bc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/32/327817f785f9075e8ad4b7a2f19213d42ed991f6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/32/328a47ed4db67fa50ee815187edace141739514e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/32/32ef6c8372f5e38213d4e00b2691b8c5c5ff62e2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/32/32fec2e3302db57a8c541d536a6f7c3ea6f0d8cd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/331d2477e67484610186e47852800ff6476d6761.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/3333ea5adc6be00a4ba4ae5389319e3ae284066f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/3335d3cafa9177a9ed6c7ec65f21beab01bd67e9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/33ab6b25e3ce53e6c8d90ac551a2a0b13cf334af.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/33eafddc50378f5b65640fc47e720c1e2b47ce83.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/33/33f18990605292c453d50babdefbdc99e5b17a01.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/34/340a3bf5ccac44089ba89acb2b8de7eee02c9309.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/34/344ca666274e1f77bf9896598fad3fba7787e7a8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/34/34695ea1d8a308a31f6d5c179ad06c4a83aa816d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/34/34e3d0f08bb6d5e0ff37c2ea4e7319d1b343a480.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/35/355718a0adb3d502f99637a562a7009fa32ac9b4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/35/35597f19461ade3cc91f51b41d9124eadfb94314.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/35/357b299b22f5beb72c06e27a3f135fdfd2260888.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/35/35af6523b65ac0ab3a20bea54626bc23adb3e173.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/35/35e8fe9f96f450693bea2f235851a0ecc772dc9b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/36/361eacde4bf8660004e11aa31682a37429582f93.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/36/366ffb221d84a9820b73e256809b21cd183a8c4d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/36/36967a710fa46532863b7697b4d398bb46fcd7a6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/36/369bd30f995279333b469156564381829215f4e7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/36/36c3e98393ba13b0bf57de140ce99f495ca81ccc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/37/375684821a34d992ef70b49f5502d32df39a61da.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/37/3779b77aef28bc43047067c702bc58ccbcabe6d8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/37/37a0ec0c00e5215970fa0aa45b082be12db51da9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/37/37b437e871bb158cc7ec215074b904e04070de14.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/37/37ee878e46f3e2e753b956b755a5de648bbd4a9a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/382c9bfe33db8371d8a35514b525de0abf086c37.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/3844dc8a30968145bfe70ae7a03e2dff88aa7af4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/385a37092553e0762d862ff984a03037146fa2b5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/3872d293defc4f6e1ae57a942644af81a2f69ba6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/38bebde4f1d00081f04f11444876a62bda3f1526.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/38bf24c9c7f599cbc8f1093d0bcece0c2aea1eee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/38/38ef48a78bad89a7f717e689e2b715c1a097bb5f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/39/393415323b149f6a03d6cb92861d161303933d01.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/39/3938784b97f9192191e2b474afbaf12894513226.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/39/395d252a4440366d6f08698f9f22a1fb06fe9981.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/39/397dedd691ceb2a17e6d4c221d1a4e5f4f08c55c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/39/39e3322eb89b34688b1bbd65b52c1146571ce83b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3a/3a102c7435868d5f79cdf6f64b9ffae906f61f0e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3a/3a485c51443c4fda3190650d2939147c868a1adf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3a/3a6bc485d83aa19ad9d473d26d3c858faa86391f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3a/3a8f9b70f8c8a642606941dc1204991a24b76f76.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3a/3ad3259a1fe49d560c672af7c267e459ca1bf62c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3b40367347d9852f0d5ebdd7afcf8cf64d0de2a8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3b697db277101bdb5d4a9abb38208816ca2a15e2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3b8a8f6f8b5002e146b369044d0534d9e867d2d8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3baefd583737469eb4d260958fa5c9dad8f8ada9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3bb53908365515a5fe783a8dcba59229cfca1b7f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3b/3bfd1c85239e6d2e3f296a267827c72397ea5419.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3c/3ca3c2e96d3d7053a3f0db8f821f4d6dc6c3feec.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3d/3d0e075a613e11e2ac1a413b116c29ebe85b3f7b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3d/3d2ed9039a90f7eb197dfab5d5f4a965e1d26871.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3d/3d9ac4961f6ec201161ea9d07d4a3f3ad1a24476.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3d/3db0b8c30af91ab00c5c958d297c0161c435b57e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3e/3e293c78e3d80d7112812376de5c92c966ec7c20.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3e/3e33e724689926e9a6988c13357ec43bc37c54f2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3e/3eb98adf4573eb76926c7760ee06b9313afc27d0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3f/3f17701359d75e413405b216328606e92cb2a4c9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3f/3f1acb1b275911074d7f59e68db8daccda37fd7f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/3f/3fa1ef2fb8a477cd60b75444310c00df87d4d360.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/40007b9534905774bc6c98c9e17977246b6ab182.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/401ec81a575dabf66be0e2a77e86173fe6a59060.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/40289ac4ff7a8f486ca747ecba2c563306bda175.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/404d919d869aeee08eb87c12d936288870122887.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/408d45f17278bf30c7a772ca814c493208065c4f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/409aea5ae43150b40e8654289388c1e127523aea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/40/40ffc067e8b62fad32bc757eb39c05ffabaccc46.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/4101e7748d7c091bd0bcdb6dd2f06f70bcb77302.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/414dcff2fdc6f0250b3f7b179d46895ea4be6fbe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/4164e861992073ef37efe8d4935ea29dd9082993.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/4192d78cf29b5072911b5770da855a9a0857c35c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/41b88925a910aa5c668132b5406faaac4702ee58.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/41/41efba05d9401834396fa231a50c9eb246426a9e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/42441e500ebde9cf5a01dee83ba6afd1aed61688.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/4261f4685ce28bc0397bddd3458dfd82b3a3f68c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/426647e987e4a56c75aa7eb3a377ed87a28a74dc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/42a76c7c05f51466b08d73149d7f58a735b6dd29.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/42b8d35606d2575b4e88394f4ffe257f6d5f77b6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/42/42f64e03cbb8f40c93fec333d269859f2e584df3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/43/432863891bfcbcdab3ff254a675c2b12795c28f4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/43/432dd39d9200a67c398b5924489835d0ea0b3c15.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/43/4349e184e4ed460f239445cbedf5dacacb577173.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/43/43df9aa83f482f43e9b56c73e6b07bc9bfba3633.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/44/445f8fced265c63391c3c3c10cdcdcbf55dcabfb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/44/44782703c99f8cd5ee01ae3d4740f58b09b37c02.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/44/44db7a9e8567250567b1a1766f52419bbe199214.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/44/44e70434208fe913f5c43839d1590b4a1db6d3a3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/45461fc0787c76b878cddd4bd35d4d55b29fbf32.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/456bb290b4a6a48dc24f0859aaf1a61cdb192b58.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/45a6c818566d1f1c6d773defb411fc3d71b63fc8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/45c8775e602dad4d262ce9b1e8d59585813c7e95.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/45e659d59318cba29d33b05c25db7799f0e044b4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/45/45f7731b59e543f730f2f99323c06bfc4ee0985d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/460139db8bbe0104d39b75b80790228701a6a4f9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/4622e46ea552e07f6bf528f9691a6d73a4fa953a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/46406524a30c19bcdb93ee13d1e45d981bf0a882.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/4666cc1e65b763cb5cceee6e20b1dfe371d67fda.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/4678787c6b3ff8d062e8105197f4ad4265a5bfda.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/4681e3fc831fd24c56d1655119075183e0e6e0ce.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/468ccdb07701d53ab5543eb81417c6e067db95a8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/46a0d889807ddbb12a04ef9564e03b729ad80c23.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/46/46b9f433999f62a5b3ba3acb3e066ef7abf789cc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/47/473818dfb5983fa6ea3a6b52554cf92dbaa4cb9a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/47/4778d7d9f895ed156d13ea13bb352b1491145729.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/47/47944676339bb1b1c3fd522ac982aae3c945b0bb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/47/47a7202cca96cb18ec8512626637cceb9c7e5e6b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/48/481777edccf6e5254f65ed191497cd3278d9e44c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/48/486ae2034c55dff0aa3e80d49619bc8951ee19c9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/49/4955ffab97f8a3133612c1ae1abee0511396cadc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/49/496e600c037ee79ae80b7e9271be93b5a2a3c594.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/49/49b40d9394f64ecd84b65f1928d457c2fedebe04.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/49/49e51a0f415ad7111b5c84ef18e024635b7d2cf5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/49/49ee4eed86a11969a8236763e1df8fa6fa3da94e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4a/4a7eede576709ddffdb4fe541973534614801692.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4a/4a7f905135555408f37508ff4dede0a6ddd4bb4c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4a/4ad9b2bca68f88db0b1677be2f1a5fb5c37d70b6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4a/4aed1c228277c5ba3139e8f66f21c9ad28c528b8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4b/4b2b8f5899eacf91b1b8e36b324080ac591671cf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4b/4b5d7117b111e83f0ec6a63ca45d8b8565e286fb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4b/4ba80c783beeca935332a745c30dac87c421196a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4b/4ba8d2302f69e728878ce1bc64e0e32bfec330c7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4b/4bd8f49344b834dc5bfeab5a43c74a4c8516e775.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4c/4cdd2e80a7112e15823cd1db2475380363ae9d48.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4d/4d324e5267de862bd2543d87b6ce6cc46c62da83.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4d/4d3f05c3be53e2fe5bf54aff715946b3ddbee201.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4d/4d6a4468e89fbd734f5cf3d07b00f81c35fc0c2c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4d/4dc266f4b2bb0642671f2376b00381b33549402d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4e0ecdee0c35a9ed82c706d3ec68b89e10585200.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4e16bda5f08fbd6f8b80e302ded8466a2628a376.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4e3ea922d3d17b38b349c9e4ef87b11c7403ad7e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4e715c6aab1ab8b4bbfb70bf0308eb1726ba4aaa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4e747c8dda46933b41ef680153e895fd3085753e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ea7a28ac92d5f04877f47881d92064e81fb51ab.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ec6fd0b1906d79bffa23b341f54c8514b5895b5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ed454ef86ec14e1151e6047bb784f8ebcd16c0d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ed916f3d6dc5a9dfbe2fc3fa8760dae625f063c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ed9a163c2ae060588e650070ac7c5bdf3a055ef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4e/4ef2fbe9f2893952e6c2481c40c3a8ad69f3e508.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4f0c91e7283b2d7cb3acfaf7f7b6b67f4bc15311.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4f2718a1ca513746afc05b9e19322b292e3496c3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4f3ec4a1207e22dbaf23e13571114b12a21baae6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4f52d1505bc427315ed4f89c5c4e6946dc1126ba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4f5dffff085da5156d2db4776a5c0d4c037272e3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4fa89b7e8e5241715d6eeedc8461ad924f3af463.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4faf596e3cb04f1c2b0d15f981b07d38950e5d7d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/4f/4fb5ca9df10813c2c9c4067799398737e502a218.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/50/503d530ac771df8c7ea703c22ca43d48c4924f9b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/50/50402a49e2c6eca643ef5c94baf580baa4980ba5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/50/50443f2d13b6da02c7bb8d98860aca8ff1fa38b5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/513715ab3ff4a555426a1ba0b6c0a8d866522abb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/5147b66f2d56a3b7ab8d720fb2ff1fc3e9deea0d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/5152521f601c46058d2133051e9f0bd3f5b0b943.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/51b4a2deb922778755bc6133a172fb0411de993c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/51ec5788b8d6dc6ad16c8ae97c76096bb40653a4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/51/51fedadcd303b503815ee98252bcfb63c32f06b8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/52/5282457059bf05aa1e0b5a4cd4cf09d16a6b34e7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/52/5285d5264ac8afb0e0314666b0b4481bd650a6d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/52/52e62af100fc1dc12a9286748c75d6407055be01.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/53/5315f5d0de94412efb4f38120e11dc0b6e83cc60.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/53/533d863ebec7433bbbdece20097345824ce3d3b7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/53/53de6f0b9796f5bc1dfdf80d490c908b1c425be3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/5401a615b9ced48732d2bcae863e0c66676181ad.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/541a40580e7c7097be01915ad026ba339f2af256.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/542931d0e119766d0762dd92d4f679cb16082f98.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/543e926e201e444006a7a067a4aafb892a743813.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/547c94e578a4fc3c67754ee2376a907ba869b8fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/549b29c35d5c9f1f69a08e3b7271ecba8732145d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/54c1eef2ecf9efbcc55c78e12707ed84d6412799.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/54/54dfe3664b652e30064132f19204cb76c0afd249.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/550a2a31b92b17ac611899e03f7b03f8b85af0a4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/550a3fd371074d946855006582ccfa1300f0136c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/55a422eebf4b8312ff7ace4596177de8053f73be.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/55bbdbee58f2b75944c7e553151be609fc565649.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/55c3a0ca91ddc5af2f67fca4016b7a579f19946d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/55d72a1ccf7b07d557cdc75051a2b6e0b106615b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/55/55ef1792544305a7f16848655293757c1ea230b0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/563840d6f79d42f68a0211567cfbc6adc052f9c7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/5655a9593dcb4a90fe5e668dea41121ef869b368.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/5694146684ec56398fd1614df98c102fb16aae74.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/56b49933424b57cac4f7be3414537c5d06a1c5be.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/56d515a255694c5b8be1c7d75c6591a7c7c9a86d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/56/56e9cd3972ab5f34d5321eadcd6097eef1c930e8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/57/5737db4a83be210f1ca4915f7feaa7a75b59d94c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/57/57590b844633d9fe1f2f5660a10f3e8d840c5a7c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/57/5799ca54fa4b910fe48f258f5c9518ae059d2cfd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/57/57ae73b9c47d96a80f523b4a4d97c06ca566d537.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/58/588aa86eb57179b74c13b812c207997d32605ad3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/58/589df8bd8201c7fec58bc8e42fe718fac62571a8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/58/589ee09c9844724e938ed52db01937730a2e7cc7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/58/58e2f5206c446e66bc0938e5e9a5d8d45b11d89f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/59/59062ecb9583a971e694c0947dc7a1c020b8e04d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/59/59223bb555037b31161dadbc2deedb89e48a883a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/59/5933f7815ce00274c09d383c0f28852015a71592.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/59/59e60120d54912f3ce08c334fa103786d40c6fc1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/59/59ec775999ebf12fb274478e69e29ecb1ba4beee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5a/5a4ee7a7aa8168d0226da944e21fea448e88b29a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5a/5aa9f4e8e04bff7d2322e89cbcaa3f3be59fc980.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5a/5ac803f861864e43afc4c6208c4dd7aaa097928d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5b/5b8c91ec5c4a705657069707bb34813a0304812f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5c08373073759c8153c678747ff82acfbbd6625d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5c0eb3f976637d0b246a0eeec6ead84e44740481.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5c4ccd55b10252e940fe17a2d02b531d7bcf9318.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5c54d34cc73543fc21ccc76eaad2ca113e69ccf4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5c6d997d36bc1d7612348eb8dcd646e6a42efd9b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5cbae77cba683bf63dd58b4675601c28eb00caa7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5c/5cfaf33f3e58b172ff5dc033bff11e8eee0a17ab.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5d/5d14d9db836869623347ef7c51f90b2c198b74be.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5d/5d27fc93a81261791f380dda193764a8efb1b5fa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5d/5d5369e0a95306cc0da013724f5e99d6be4e631b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5d/5d5580afb5970051aaccb632e4ce2545b2f37516.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5e/5e171f6c0d568408fa60d760915158cb462de6ea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5e/5e898eef186cb1d269c3507c38920179fce24d6b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5e/5e9d8d839ca3650fb670df8b2e2c798a3987df62.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5e/5ef3dd07127a48c22d797778799e9d9be83233d5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5f/5f4bf697b02018f90f93909cc638dd14a0168b5e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5f/5f576f1d1c0b6047f4243e7e7c6b1562252bb08f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5f/5f6d2a536e26c2cda6c0db1156c221c43cbb178f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5f/5f83b68c5e8fb952828c6dbd94593b9163a2a842.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/5f/5ffd51ae8254474ac5cb2ba9b5c7e702b80395f3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/60/60690ba551523fa25a7c0a7a083d4d8ef14f6128.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/60/6084ae026097eb5f9885c44f7143abc6712652bc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/60/60a0f2aa02e0cbcc35a41c880bcce01813a885db.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/60/60c55e31073581011d2cce35684c4f64ebb29c36.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/6109863ee051d4ab60fa2c51192c1a76c963e891.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/61169398f65b5b313a21e9876916d5bdbbcebea1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/612211714d24624ce6e18b2e50907294ab153c9f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/612e06edfe263fb13e5c5b636be1a6a34414b5d4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/618c8c05b380f1b0e94ac8396f319e3c3c0402cf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/61defa0348c4b5cf224e8e6e6dcbcaa1ca3616ed.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/61/61e5dcb7f4488bb3fedfd32141994c0e11b89433.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/62/62680ecf4de8849fcc9537c1efaaadb0c0836274.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/62/628c5835ca11dcaa470a4823f11e4fef420a509e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/62/628e817831ef197f8a33d70b8c41ad3dd3707f32.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/62/62df2faf9d347064ec40bcc1826f21eb83bdbce3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/62/62e746f8f364fa7febfee49fc8501af67a663871.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/63/635092d0bc78efb98b8cf240f57be6f7673a59a9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/63/636ceed642f366bcca1d411f06d5ff4ab0915a91.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/63/63f12df0b8972738fdfa61209f1e95477629cf54.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/63/63f434bb0c2f855f1e4c7b01562e99f8874edfee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/64/6412adb56512f07a9695e3989bd2729f647cccd4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/64/64180ec1b69c550a2f56b62e5b91003de0ab1ec6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/64/64570aa4bd37c0d968c19be874dcfc6318df99ea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/64/64fe927edab54a59d6fbf4fdc94a580b98dcee18.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/6529abfb4e2ef52cc759de7cde8720401ab25a8e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/654a8579875af59be28ed0705ed31dc9f070d48a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/657b63cb53600a098f3a16ac600d52d7eedc5e46.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/65a5f725025c3ce1c6a99d822d22a1c8bf14c1a5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/65b5c889c606409b087758f1d6b1fde15575d141.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/65/65d5ef56e5b842a127eee32622f905eb51e593f5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/66/668085cc109158c9175a04eaa8695410c90ba0f6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/66/66b4a22c7bd4f072afe370ffb59edb7be08fcff1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/67/670cf5fd37d845452daedbbc71d41dae9897efaf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/67/6715ffda049e631a5d0f0b61c89cf6677406c935.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/67/679ace105bb07a54ce22e08301d9522d2979624e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/68/681ef83ea7fd9b9f1726bddd0508ae3818a66309.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/68/684e2625ecbce3984012bfd4b80716b0e59bf412.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/68/68dcce4e890b03543a0fd453f6dcc2bcc720c086.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/68/68ea43c9d0ee18fcc1c91e6b453d77171b8984d1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/69/690f11ad3337caaca61f3541a29c7fc7178a6ef9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/69/6932187787495bc076e49811700c9863d9ef3613.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/69/695978ea36f6252c59f9541cf589c03e915d3f63.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/69/696f16f0ab50543b9f2df079260ded9fdd496d19.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6a/6a39286683dd51c631db9f68d1df10469d44c22c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6a/6a3d063e6a64e139e8ec87fcbf8047d2427626f4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6a/6a7a1f097473171d5fe4d19208740bf0766d4920.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6a/6adfd85dd9e136b75f7fd6da5dce35a79050196d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6b/6b95cc112022172e7acedf72a934842792b12bd9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6b/6ba3828c8fedfe823055682882498135d9767733.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6b/6bc15f4d227d0a14de14c73feb5def8f9ea023a9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6c1599e3d24118c301b23612a34b08c07346efe4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6c337731c110d55ae63794b6832448867c1e0f05.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6c4a85872eac7404fa67b41177dd66f627876745.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6cc8466acce446363d547d1ff26dd1dd7c6bf84a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6cca87b0100c6e280b23fb5f6722e93fdf33742d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6c/6ce5aa4d1bae5d91c64ec9da31801b4e2656438a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6d/6d6db30b67f0a7a26346c062021c6ef6129c676c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6d/6d795d9e8728d20e3269237a0cf6f51275ac3d5a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6d/6d9b61dc9dd03995ca4c1d68597f7bb3991aa639.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6e/6e221434fe23393d9ab24ecdc4ba47694dd6f503.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6e/6e28dcbc502ef2210eb4bc485f1c381b0e7606a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6e/6e4d908356abc6ae098e78738bd64d66a491144e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6f2f84b5d936d198f3c079840cc3df6972d12b6d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6f422c0638147f9131e8763d8c4cb78e023baa9e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6f787265f84667c4789a6501dc8400aa8b7f3bd2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6f86f03bb1b9c497f33f0cdb340c7c35b1dd90ed.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6fa4a70390827ded327b9f6d59e1daacb9dbed69.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6feb1a32d33f9fbec9642d55af940f6c368a25c9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6ff5bea4eed66e479b5cea464ab6060f77c7074c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/6f/6ffac0662ccd8485d0090f89e37fbba04b615bef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/70220f957c371a752c41d6fd904b7d1834c96302.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/7063e09fa85d006b227ac7712a59d48aa5dd2cb4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/7064fe32af9c4d3536e64cb339e77196ac272b63.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/707599c497501ff27f65cb03b416f5f6564ac4bd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/708cf80387e3a52b4a65bb574a6801b1ded6d4ab.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/70/70bc6fc454838b192086023a84c58400e577bdfe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/712e43b0f5d833b59c868d16921ee5c1ea68ee09.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/712fed36b8798388e71fa424a53009f7f907a3ca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/714d3ff32d86bcac9e85f059f8b089204af718fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/71520c3709b087e5fc54a653f9dd47bdcb15d6a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/7197e1dd9440ce6e1ef86715c79e81e13d5de866.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/719f6469fac46a1c9876a1ebbc220449d4b4927c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/71/71de21dc0c06aaa08da66e5b7d843893f80587ae.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/72/720b07b5ecd63062bbb6c91a4dc0421e0a7246eb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/72/72662e5037c3ac4e62c8ce64e2c5c58e9d608848.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/72/72909ec66313bb0e7bfad8b6d62ba2ec5c9eb36b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/72/72a318e064b8337ac34120c416d1da114b027596.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/7300cf8f7477944d00612dbe0761f8a766574873.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/730f732cbd4a519b3c0ef2b297b99a15d0ca48a9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/737b74293e28a8b7a9bb59b2f9668f4ce093a288.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/739b935dc9375624171042f227d77660ecb2f028.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/73c93eaa1c4313f81e9b7a9c73c0c91813fa533b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/73d8d2e6f9b8627ec6f61a9cddcf449dd850aee7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/73db69cce720277bfc8a1852c2d01bcb15fe966a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/73/73e4c2f3182b79116bec3fa03c233e598acb01bd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/74/747a4bc5a44a126f6023ede5e1f129498be1c3cb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/74/7487780ed7b937c13668881a1ce36c4f1eb1dc66.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/75/751bad375fe3604e7887025fbb0a32c813761455.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/75/752092f5d9a0c9ce56d80630daec0b92f94e8e3d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/75/7531c9a652e8833aa5ec2c304a20f9d819bc4207.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/75/7545c8b9caa93fb40ad71e72d84d6ca9135be95f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/7608a22a742d8f93fe0e88d04dee57455842c26f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/765b9bf528c7cbeaca78375ec34102e41792d57d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/76621f4d719c330870ca4a37d6124ddd60452165.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/76b4a7f92f2b7a29bfa115c9e312c4eee302c195.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/76dfb466620520fa59058456a03bd08900254446.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/76/76f59dbdec1679ac22c460d95de37e442b449161.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/77/775542ec52d641ca0d37a9b1d62e9a25a685fb54.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/780bde98ccb9b20e66cf9cde0e17bf9d4ec92386.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/781c220e6666927ee0053db7900334e45d76ff58.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/781f98f63797cec63f0e02dfb016a40fdbfa7b37.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/78901c7cca128fc2eec197ef33187225f1cb00ca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/78a592185d487d847ac1424b6f4eea6a0db5d5fd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/78/78a7855a7a66c7d287ce1ebee14ffc077d161ddc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/795cd2dadfad1e21d2800f7b063cf8f2d8e0df82.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/79732d2f0e4ac78627c6e6c29af05fe710d8189b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/798d94ce5358ed0572106b931c8c40405df5d468.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/79d084e2b66d0c232766843e0062e45b0afcad09.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/79e7da8ba9681a38a291786b6b0a46a7c766e9fd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/79/79fd4610dc6a6ec79429fe29f39725bc6016c57e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7a/7a26c9d4a21d4165d1c413ab110ad40e3f5bd33b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7a/7a6079457d1b0db42a1a6e115b1879d5934ac095.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7a/7a816977fa17f31798c8c98560d9727a4f5bcd9d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7a/7a979b49761e89d5564d65e70c99ca0080be11b7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7b/7b467ae22f62920d1ed4a4031b0be4158c032ad0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7b/7b80ec0c0b97b92133185301ab815ddf84ba608c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7b/7b8a234190da9014bddaafebcbc5f19b718e5793.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7b/7be9527f1250b8c15074456ae9cbf88991417bfc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7c/7c2a64be545e809cf09287dcb17f72301659fee0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7c/7c5931d5a4ad865bf780190c5e1aee4a75dc07f6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7c/7c807281b488f837a11f0b954d9ba9751e2ed313.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7c/7cc83f8b375e2cd621b0c303c279e72a3206633b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7c/7ce5a5cbcb608459fa92a2ab30ec3ff195610707.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7d/7d098148495e9bc405b0f5f6f8b3c496e31db87c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7d/7d63a3e8a912270c9a5a8b5fc3816c6e500d670c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7e/7e276cf8f723cd5e216b57b4ff21a1981b0b6873.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7e/7e77b90ab48b1af750b3b3832d6ffa021a440afc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7e/7ea137ac70ccba4821d402744d61f9fca85399af.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7f/7f6422a48bf4ced2ecd221df0ff0b2364260fdb6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7f/7f990ac1f0ff3a4a879774f9a87d80539d9410db.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/7f/7fb693a25cd062cfb51e1ff471ce71cb3fbe12f1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/80/805c4ae846a3f320939d76ff90f2dc6a44ba7c6f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/80/8067eb5ecabfccb9f35ecb2fcffeb79abc49824a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/80/80d3d6b37e0c7cb356ac6b318f9e52ac8e90304e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/80/80f9e2d7ce10541789903e44bc6580112c5d2b82.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/81/810c6a51f37195ce4bd0a32eada79a5e6e71a08c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/81/81297ad4b61ddaf3783b934555b857e58b75627a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/81/81ab97829845b6c9aaba8cde4f87c033151e1602.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/82/827e8f88ca8650279a5806eb8487867f265714ec.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/82/829fc3fc3ba34e2d930f309616a1fd75ee9d2ab6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/83/83030e3f1e43c2aadf97cca089f3912429fce8fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/83/8326948cf40b734ddc4f7f81904cff7f6594047f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/83/833154c263b9b72325e6ba011c28206ed631c617.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/83/83d636d7c1261ba729a645f25704a71bd3f316c0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/84/8490dcceae9a5e5d781cd68000b09a44779cd332.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/84/849467b8230e8682e7bd978d3123c067756fd189.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/84/84e0831e7fe1cd4b365a3d4605b8454f0de65288.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/84/84efad8d025c1b13904a2dcffceaef23a1488a26.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/85/8506b968948946f9e4b377809afc4fff3db9d054.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/85/85213b00cf8c2286aa5ca3fc067a612a5a4a275e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/85/857d39b2b58032861868f1b79eefcb1f9d86915c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/85/85c4858ec142e5dc893ae4cdb8b497ba1bfdf3c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/85/85ec19148f3651d715c9cf9a36364891fb447d77.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/8656a1761c8681f33dc143686943a84ccad3e32a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/866e643d9e4b67ff66d41357e4ff555c258873dd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/868d2925cc953c3f157ba2eb5f22aca6cd348614.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/86963913648598afba262f23a7ddfac650e0a1c6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/86d9061b6874fd04d609fddc7531afc63766ee1b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/86d92c2140dcbd0af04bf4efa83608ace2facced.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/86/86eef7accaaf7cf28fd205c10cd470ac0579ed25.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/87/8757dc3205667745d4d958ed692800e7df658422.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/87/87c762299e027f2ad2dfd6eb268b30af295788e0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/88/8800cb3d06ef7b0ca3ec98244a2070295295fac2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/88/880727a8af6728026a77db853b3aee47035af036.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/88/880e919cbecf6ea269686acdfe121c4c5364e539.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/88/8816d4c8a3e4797c608600e1207686142a26a208.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/88/88dfd8cc0685688f88d5f0831a1c0f83abbc5dc3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/8933b1eb36d430f34ce0c8dc5597d71cf28f5e49.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/8959e7a386bf0ba49132e2dcfdd073e5e2b05bf5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/89608792ccd5e37ad89b16eeb8e232a65608bc51.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/8962f4bf88a91a20cbc8c6f17999d4ab8d07a3b0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/898a7b2d54c4c7b1a1b7663733c5099fca5576b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/898e8560fc95438246ade5753ef5085972d0c8c9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/89/89f55ea158efe08fb8d7ba9097935951cca000eb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8a/8a32040af7cd99daf25004d168979c317f858af2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b074dd0541fe35357545bd9286d8f56dd14c5a6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b08b0f2cc5df470fcf87aa0a7e4ef6c274bc68f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b0a2f04e035a035ee302ead6664360430930ae0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b20c6d5d31b6acd3a8da464b191cd90754ee043.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b4007524b9b3f518a16d075d3dfd96704ea084b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8b41350a1810a17d2ae3dffc9716f8bc55ffe16d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8bc4b0dc904f6c6c613e4c9ff3e7d908bf375b1a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8bce7d51447e0550ef50c6da8e3189c47d2e5968.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8bd0cba05e987893a64cc6bba544bf94f94111f9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8bdf29228f8ef760b8c7abd75a699313595ded25.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8be16d03b7968b56eccfe68998d5c5c1c496aa4b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8b/8bf60af1565f06678e15f880633b1d4d41495be0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8c/8c3e9090f29a7b7163d827fb21db32404e6be150.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8c/8c69828e29e66fe02ffd25b1e68e82b0f24888da.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8c/8c6e84831c18acbb7b11791780bf99937f5801b3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8c/8c8d7937bd0057282fc3b77faa2c9bd2a0bdd2f3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8d/8dd08059b7d16d4ca323cd06f4a1a3f0410d6687.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8d/8dd83d12f13da38d891ad0c0f71b7240d63d3254.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8e08d74f4e56bb5322f960f76e89b4be12ec47cd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8e0da24f1eaaf62994acb28e4bca67e7f755407d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8e271278f6cf409cf6f9da919843822b5594cd07.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8e2abca7d73cb875c576533b2e2554a530462acc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8e88febe2cacde1b1a4eebda31eb94ee7f5d387e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8e/8ea212346d50a3ae81fa1306a07706979ed5f501.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8f/8f7f4241d58f16dfded9a101f5f564fd4a7bedfe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8f/8f8c2f6f3ffcd93949e7cc918fca95de419c75b5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8f/8fc370a0704f022c105dde97b8a25dfaec0f9860.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/8f/8ffd14a42430a4c386b55504b3e2bd18f076db02.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/900c928f4d161e57bdfdb44a9116a9c818490f69.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/90394ec927031239da6d83c2c773d11062f64ee6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/904414add8769078f37b1353f2ee6b7129993fd2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/9062ada4832ce65698c47d69c10d0a61489d70d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/90706d51def10583d4b58ba73ae9df11f1a740fe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/90d7fb5c14601809c5283f22b8ddc1ce569ea2b4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/90/90f0fda316c35b6629195d20926644669ae1a2a7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/91/919946e703a7adc495795ace07071b1fdef9e187.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/91/919f6ea56786042d2e62f479e791c5352f2cc8be.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/91/91c0101b7f2042880bda8c148725a38add40616c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/92/923d887447cb7b187736c833b1bc3b9cb7a406a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/92/9240117cb5858f9aeb1d1669a1254996f67da962.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/92/925a67240cc923468a0f6c1813295ca7cbd476ea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/92/92aeb22a5a534a1d479c464f7ad0745f3cbfc068.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/92/92e82065c4911e87fdaeaecda4d9e23ec2ed8b77.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/931075177349eb585d5435d2e3d54f39955e087e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/9320b7169d867e0ec9133487f2555cc8844fc8f9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/933a05556b369e6d46e05c45fc40b795eb2dba55.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/935732504b0a92fabc24e92319cac3a9a4677cde.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/93871052e803aec5009e7b1eceda2f5c476183ae.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/938abaccb391416b894f398c43857b5bdb19d75b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/939683ada19e452b53400753b02b798a3dc42168.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/93/939aec77745ee9dd4ea11de7d693c9f5f970f96f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/94/941013409b8ddde666450913350d60f8a23926af.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/94/94798ba2e23f1aa84939e594f5543ac5b51ef162.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/94/94bbb5a0a0b459dd80cf265db0ce832c7400ab64.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/94/94ca3767c4a4b70ba2c461660f855ae700cca79a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/95/956f5cb08e204a02d8af4e963c729a612f64926a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/95/95c76c9b590632e27b562d059dbe4588abd86a3b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/95/95f5f4236b7bace6513c3542729f25086ecf51d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/95/95f98f9b0d547b7019e66f41eb6cb58fc21629ca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/95/95ff4f24e1b3caec61e8c462897989f684bf0c6b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/96/96d75ca0d8b4cf29d197fa2875660007505c42e1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/96/96e165b11adfcf0da42e3f2688a4fff3b47f30c5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/96/96e353781073fc0327ea2453d7e466f6cc249481.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/9700d573ae27b80217b605edb67097e18866def6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/9794c8bbcaade5dd2b2d146af780ec500ee574c0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/9795f6b98b661f265445b4d6daf6275327bbfc9d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/9796ef52a3d434fb14d07188603984b7733227c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/97a2970b2c3a925bde9b244c107d54d5daa91d05.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/97/97a6fdc968510f930a0f0add27ff586da4df5a21.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/98053d50a0cf9c893c6605841e397abe39593cad.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/9812af0d828bd23a45d39e634f1d1b5aedc7e29a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/984583e0fc6a5906b94a2ca655996e1d2ab03c4a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/9881cc9842cc119322cb557f115c70e6b255045d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/98862c0f617546fc0201fd11bdcdfe88145ea5a2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/98/98f4d8434c84f0942654acc8f7d22648905c919e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/99/995729170b4456eda91320d28f2f4ffaec987bac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9a/9a3588a37937db882d64bb3d7ab0314939b9a98d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9a/9a5b74fa0dc90f58e7344d7cb33eb2de615f05bc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9a/9a731c19e86815cd3f2c2c154352c7fb7cc4cc68.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9a/9a7fc6025220444f3c30400ed434e0f7a95fdb45.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9b/9b0ec0e4993d5d1a3cc47fdd10887983f4cfafba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9b/9b375929d653f977bf74f3eaec8b5176da87b8fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9b/9bd84e7701886e5f0ee0d26d5a322bcb5532b526.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9c/9c4059af4477eaafe1dfd9d80d630ac3af6b4895.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9c/9c5798c1edc3804735a21739dc85c70ae810baed.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9d299de416bca5b78ab794f3ef432560604f8792.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9d36d7e0d3958b8d66d336aca579ccd5255fd918.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9de506bc8105c0234ed64b7af03affc5441f3bfb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9dece734ee12159e98724c141f26a2eda1ce8a6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9deda28282313916ab7c6481d6e32f2ac7883f3f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9d/9dfbfb0799f919b3985884a981a4cd28a4cc8e10.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9e0660e1dd2492bbe9b1a9d95d1f5ae9f0eecd76.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9e0f4a9ee8111d762f5a186a1612a93e198c9b59.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9e21a8a19b38c8cc13e26831db362f2184b4b47d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9e8ea9e782a7603e397555266c0c46b108a297ba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9e97368529f950169c2815a68f28f669681630b4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9e/9ef634a52fcbcf53893aed0c4caa4bd355628542.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9f/9f847effdf8b118e8ea98381aa952a0eaaa24164.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9f/9f8bccd064ddf22bfe0382b6cd8f8eb0af3f011e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9f/9f8ffcd6df4eb362321ce704ddb3d99a22309c96.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9f/9fb6d3d1ca82f0a43ee692f90c208d7bc25abbd7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/9f/9ff2fadb985cb8e4780382505f9c49f7bd574d1b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a0224eab6b1800bf9c2dd149d3f814a6d50ed7c1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a05d3da2fc293a8fa7cbb0cae5337eadb46e7110.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a05f06c6319a643d12bfecad2ff078962c8ed160.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a076d6c678ffe46f2311573cecbb7ba326c746fb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a09d13f0b5a32e725cddc5b2a025d8e45077c81b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a0c1b86a37e9ea83bd5fac5199d7f24a4dc810d1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a0/a0de63764c2e021aa41ef2d3613a2b16fabf8eb2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a1/a14d5c5d34ee3eb53f7b6e71bf235c195804e66f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a1/a16a842aa1fe46d63157932d63e6788fa1ff1fca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a1/a1bf44e71738de283040aa98de7b40d4a20f62bb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a1/a1c7647333b30b4abf97dea28b341eec2761e14e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a1/a1f1dbcfb060240dbe849e6dcb70a4800a63a660.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a2/a239dadd7e6e6a5ad250f109974538d26b633fcc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a2/a24d8e09b629b6d170a615cbf9b0241a3b8b4742.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a2/a2515d30a2e12f97af1877f5ab0f6203db735418.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a2/a2598a54b3829d6718d42b50b0832836f7b8817a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a2/a295f37ba4b4dc6e0f4d02442f36c92308b3bc35.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a3048afe928db5609157c50687fd7bff1f889e44.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a30801671875b9aa6a317062f954b560bb601042.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a30f72074e5e5d8dcc9c9b2ab67fb58bc9be6afa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a38cd81bd3b38ad0a4f7f64202201cf3195d92d6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a3d17641960f378a12220a679c3e310dee742623.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a3e3c1c44c2955868030f49952b38b5e2b2452d1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a3/a3f77c514d38edf8589c4febe504692101afef0f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a4/a4129703142dfe7782ad217c324af150449fb80b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a4/a469fbb734aa81e3814e7b32a9e916ee7c15c747.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a4/a4703410686d4079c6a1e5f5aee748da68ce97d5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a4/a4a1f796551a767a9522bb474a2d51dcba23bed9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a5202ebd08b025c454808c494bcf1ae786d00397.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a534db8b7bf73d45d4cfa26a00e9f7e5f9a36efc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a53d8d142d2fe6e141fec7884b24731e1ddd1581.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a545a5ccc481156dbf4deaf90be492b2eb45fa06.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a5870f200957070c3e7b70571576adc3fc410200.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a5/a5987d39b7a8dba88c05eb0718bbbb6ae75291c2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a6/a643d2955ee2cedccc58bec710b622a7bd698bf9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a6/a6b24c01362029da520239e0e432eb78fe4e1327.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a6/a6be45adc983e977af033154347ed42055e09eb6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a6/a6fe32333f359175e9b2721a9140a5277072f3da.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a7/a74fe00ecd5c17a9c71ddc3a4d18f0f2208fed16.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a7/a76f17996f8bd09a9ede42dce03e58dd4a672e7f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a7/a7f8ff74e2e9e8d00a31bb27b58f9de677c521ae.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a7/a7fd8a918a2197ba8a6b6c5716fcf1f201c69487.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a8/a80d717c1fc08a7fbc0d979c32e572d52dc8c9f8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a8/a81d1257727a56bafa89ebc26e05c297e3324d33.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a8/a86c2e7c313e51cf1a10c5e201ccd435fc2c2d06.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a8/a87af21bc566f000ea0fba78969d54f868e8ca59.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a9643eb0ab04706972e90325af241ec01cd0d17d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a96e8065cbb9e230f957ba6838036cd0448278c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a9846df7c86b5644931223c085419c5b3baa26e7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a9b96989ef60ff8f6be796797b43044d63b1792d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a9de04dfd4577e1ffff7b55f0d00b05ca97b4679.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/a9/a9f7cfe91c913774a9392b14b0924dec5317fd3d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aa774a0dfd05300b25d15a15f8fa75f87a8eafbb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aa848119a4fc5154f3a04df2d18e3caed1ece3e4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aa94cdb8b01fdb78c73a1b2c6ecd8c0924a22ca6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aab7be44c2c07e92869a6b66e510e5bb78b56237.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aac7c568d1c3dba39e3dadd5114118bf87a4cd6d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/aa/aaf54abb0ff651d9bb98dbd67d2b3e50d4e400ea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ab/abe9ba5feed364b3460af58108558c02a3e4c3ee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ac/ac27dc6d60fd91198ee35b7d046bc7aa0247b908.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ac/ac3c542af50eeb5a042f92baa2bc0742d02802bf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ac/ac5d8e435021bcb757677114499044309ed78446.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ac/acd90508fcfb9dddd926f2e34c96b2156315cbbc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ad/ad301edc9b5ce8073c7ef0d52ee0cd8fd21637fd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ad/ad6eb90a16357136d352c15b6842e1ba69f7401a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ad/ad8bdcba9d82ddf0e34166e6702fd7188465ff7d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ad/ada5887fda9c23612d3f6f73fd513117441c6e00.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ae/ae0197efd9eec8e9ec309d82b9b9e10ac2cb8003.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ae/ae4d9d8ac5cfd9e03f7768240cf510419b613ac3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ae/aed6f398d17496d8e6c7a5ccf463657a652c6632.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/af/af3339a6e8567bb36787bc7211d451ec3fd68c75.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/af/af3a0b4716fa3997e76336b62d940f1931527e77.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/af/af8d1441e0dadaa99c2b394dbfff854c5e6e3059.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/af/afae9cd5b439f6764383dbfa9411239ec2b26115.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/af/aff35ff12aa2293bd6f279a638763f45981d46ba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b0050a58ee07719eaffa73985b8965a4f5c178eb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b00cbe3d333fde2296651ba1a77d06bce61d8dba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b0111e9f02c5523eb761d78fa89cbc047fddfb65.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b01712570d686d71ac93022a8ced36af4d46f077.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b058101eadb42920bdc3e212bfef89bc5e28dd42.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b0652f304a43c98bd11fbfc5e0a2fbd22052bba5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b097c701493f1f18ea14fd7f58d0b5b47ac67488.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b0c872829cb7c284270277c99da4b1f85cf3d58e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b0/b0e1b08327fd91180de168dbbb2b9a14cbe1eeb6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b1/b1c9af535c5c4f9c7fdd3620cd2fa06d4ab36c7f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b1/b1dd44a3fbb0b606dca6d4daaeb5ff40bb8720cc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b1/b1e2414848563a908a24bb7796acad43ced06aa6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b20bab4321ff7fbf90ef09c36d9ecb627a4d0918.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b2210f4852372ab4e02b2f4e6398a05085468771.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b222dc7220ad188d4e8e71f594c845c388a8ed37.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b23e6b96e0122c63b601c01452691f60d9391faa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b26b68d637fc33d3ec5c728f75875d5a18949633.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b2a37198858a4a6fcf968b43781d8e9e8a491d9e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b2a40e677bb0bfe861ee29b221926ffaf99fb44d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b2/b2e101b2ff927fbc857f7679cd69ff0d91cf3500.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b3/b36743e49a68ff48b6cc459a4e2c8aa9f22fe5f7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b3/b36a3877b01e9521e790e361c1da9a1ca5cef1fd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b4120b2d2748fe47f2d5b89cb6109da4161cdce1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b421d1ac84894433677942671f28a56774ca7e08.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b4237487fbb2e2dc317325170e510b3253b6fc72.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b424535536e2d5928b0c6b5af6f6bdb8111b9e5d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b4470cc2edadee6f51acf6c9e69b51866468d608.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b4cd385a6d2553217207f4b80c954467c293f97e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b4/b4f19aa122a6111f71a4f8abf2a18bf932aa243e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b50c9883bf8bb846dcdf70a9ffbb9744f224831e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b52df86a538d9f2572f64fa33a8236450995b72f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b55138d4d54fe82e8e27e191c3be1aef10208c22.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b557ffee4532f2376f778d3213a7f2ee318a839f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b5afb408ddc2863af153e4bd78f3016b0277addf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b5afc8efb8cabcae6997b7884e53cebe1708cb5a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b5bfc08de9ad5ad0517fd442a904740103f01562.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b5/b5e32711e8e17322f103a879542649f788034761.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b6/b6293d35292418c24bc5765fd0f6f60e164504c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b6/b64bd53a3ce4ceb35a2ea6e6d0b1cc6499d44a17.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b6/b679033f34a70ec2f7a15bdb8220ef6d73357d1d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b6/b6d9adfa9868ee8492ea9793b45d695280a2a44a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b6/b6e56c240992d329368fa7402201469cf54cb305.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b7/b739f5fa5fb5e39a764d6ae2135f6e56feb8c6f2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b7/b75c886e13c8cc1fc578e065248bfd7a27d85e44.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b7/b7eb5a251384e37fde7941f83a1f2a7881ab080e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b7/b7f2846caabfff721b028a6c19fd6d70530d6b33.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b8/b80f30d4cd152af9efe17e340d916a471e21b8e4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b8/b84e4c0da82669e6acd490ad07dee1541f7121d2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b8/b8520235c704b1345e339947d32b6d84d15a28a0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b8/b8a727ba2a37de29b85bc6cd9d77d93c3f8c9602.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b9/b9934d24bd7f46c29d39573082fa69bb9a268e69.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b9/b9ad2dbeabf14d7520b0d79f354a530807944d1a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b9/b9b38b2c8cf768f145365a978f04abadcfd5038b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/b9/b9c62fbb2933304d2ce1b2bd968668b3a3d3da75.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ba/ba3f2d8f3f95e51b542fe234a0b8c84a5e431561.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ba/ba6011c434618a96a9a97a8323f1be65df630d57.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ba/ba7de9949155831b1f671b20ec2560bee20d0fbc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ba/bae17e18dcd8ef569d682f54064f0d05a94d63bd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bb3902baf3e96510309467e71051bcc927af2d43.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bb5ca35fcd64fb8eeae4b5fddb1adeb4b8cd6c88.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bb662776c5f12c6160c1a71308f608511ca9efb1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bbd21029d515df6b2d38c5068ca8b8ea5caec831.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bbf26d4fca89028b3daae7d5dfab6f497f0fa6ed.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bbf7c39ce9cc86bdf3739f55f510658d5b3c3289.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bb/bbfa660b58516b9dabab1fbf76d8a81fa67a9cbb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc01bf91ce490e19b5803dfd87f23bd244e5e1ca.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc1b174aad19a8cdede6172bc7406f80fd7aeec8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc3224094d8ffc66aadc89de5315e2dcc2f90bfc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc4afeeee96ea40f271c52c890b1bfb0e79cdbac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc5e35ef6a89161b79a473419df080f2fb66cf4a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bc9620b8f00549c8055e8cd76c772bbe1c556927.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bc/bcc10c6986f71fb8e00e0472b2d0c62bbbd5b9ee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bd/bd1d88880d83cfc33660a2d42c309483919dbdef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bd/bd66137fb4da30b80fdb270630aea2b77bc40731.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bd/bddbec8787766692653fc192b0f073aab6c4753a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/be/be2c6cda01ca6fc55cf53e4b605a1eb7b0f97ecc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/be/be3b88a8779b2e0085138fb638127c32008b55d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/be/be69eebea4689b2228345ac01c12d45c923d983d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/be/be8d5b92df807beeec7cc0a37cbd61222b26fff1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/be/bef3c7bb3e6ac443647bd7d3f0d89afddcf9dee9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bf/bf38e57c8b34a8afa5b6f142982383980ad505db.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bf/bf8c1cecdadbe702b4e487182d90891bd3076d88.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bf/bf8f27e44953622213811ef7b82655a7a0f825b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bf/bf919a2d9f0fd259d7a94717e8b6dce49640aa01.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/bf/bfec548830f5340c38a12f8e36214150b6641ec0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c0/c04705f7ba634e31b9ac47aaa708c93b711ac761.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c0/c081774aab51a405b4998f351d9522cc5627d0da.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c0/c09fb91cb9853253ba7be8a350271195344ac811.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c0/c0a770ad0b85f229f35432c67d5d21784fe2c13b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c1/c10dec679decc9c0f81452ce6085dc92d705eb35.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c1/c1b8d73236fb93d53453acb3ee0bfeafb44b54ba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c1/c1c7c5734e603c1a68384c717eb830c43dd38563.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c2077b50d8ab300981926e16bee1861ba88a6f4c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c20efcbc26c77514c1d495583615c242e444f8f2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c21188bdaa5b2268d5f86ed4d8534f4f3abf47b8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c247bc1d00cb88df3f6c45495a39dfd6f7260fb5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c2762c7357a81f68f66c5411222d9517e25e6792.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c2d41e3de70463e4793eb1ddb584402d45139d6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c2/c2f00c1f5d4fcca452548bbcff77929ec79e60df.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c301859f6fc5c9d7e1b89b4d5a8242d9db737eee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c301fdf5ac8b3cec902fa3334f2e084a7108f429.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c302e801922b28f35a916eecca0e9a2a0842f871.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c32e07e0ecc551e2e32025b648e64edbec013471.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c346013ed00a07c6bdc8f8351ac2d017ea6c87f0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c34da5bcc6654e1a2b2ec54012464b5c5306bc58.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c3/c3b272538205c63b66e617adc1cfad215043826c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4065839a32e6933bf2c8a333c5efd13bdbc497c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4343ce5a35b085b6a6427ffba3064387edd3b11.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4576f2b72db3ca8f96a07e9e3aacb21c3808426.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4ba5f52d18ce0c0098cb6595491ca5580446420.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4eb0e207414c70f6b6ca35fb2aaf973d6a28227.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c4/c4f066def2d9bb8d565be6f29b9200ee41d32871.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c5/c522977b434d91147feb40bae187d244a46f44fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c5/c58255f230f894fd2ac1a1cb86acc3eb868c86b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c5/c5894df0b0f27f5d118331e5f241ce8bd8352e48.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c5/c5e71e370ed93a0430e65a1d3431eef351ea8e6f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c5/c5f1250cccc6c751877074db45b3ec5a152677a7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c6/c64c386a66adda54a12b0de7c5dc1c0f732d2aff.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c6/c69768c380e66e30e109c55b16c5794f5baf3c55.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c717b3bb16c4843a3f62482468e9dc706cf8d83d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c71f56f9ad635a8d1ca9b607b3ea6a6290c1406e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c733494c24a95a1c9e8ea68c772827a4a2a5d130.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c79ed00ad5b30c17bbb1057a8b29a67611edaba9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c7e3a60a4d53833fd5686c4c13026f51b0c7398e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c7/c7f1d50ad3d7c1574e734e03a5f6b2485bc465b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c811c23cd55c43d92c27481b92f3d7cc7477bffe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c82cd3a66d23c06467ffa148bfff9d68e7d9a60c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c8332d8d557af8d47ef9bc97b098c0a1ec498977.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c84ff461245a3ef4b1ac5d45e64dc251beb67345.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c8b58866b954cbb49a0a9335799148b51714226b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c8/c8d0f5cf2d4d94b81f26c7754fbd1e81d1ca4d47.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c9/c930bcae40db0289b4a5b0a8dfb375af76fabe6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/c9/c96ca174b01bebb3ac64b152345659658f4fe5c2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/ca0d0c97c436bc4b20a9ea6ad612df76fe101ee6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/ca38a2536a6303f3804f11c51da6e3468d87f615.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/ca69c242496f389338c62cc2379b945778640d6a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/ca978f139835c855d93b20bda8238a66a6b323b8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/cab2f544135ff07f846ac665bb14514f3e262ddc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ca/cac25559cfde1b8d508b32100090ba850c002e38.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cb/cb321cc846274e8de9cb22af833108f5cc1f5393.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cb/cb334728e9a1dff43587dfac80d0b9821448ece0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cb/cb3c521ed88e71c91f81b108da177ee1a2b4efe4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cb/cb44617b9c76f664d16736ff8ec17ca937645f12.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cb/cbe8b2129cc5a11a399e4ca8a9bbe2fa807a1a6f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/cc325afa7d879a1c62cf78569f83dd1d419c85b6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/cc5e54eca016759fddfbee426afadc0ce93e7f1b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/cc6db4e979ec61210228e252844374016d1ce6ce.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/ccadf82049462591050d27e22cfd529eb0d183fc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/ccb05cec7582439026aa6ee1f1afc044a0b2b1ee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/cccac6021905bbf9b6079b9dff6b80e2d9a35092.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cc/cce27140934088fbc66d1acb3480295aa2aef941.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cd/cd0498991a7be01c2d679e5e951fcd8428718c04.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cd/cd565a727d60f6d9ebe6ceb34f512c8b80e9e8e4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cd/cd6671f6da177305967617a87d4b45ef6af5e3d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cd/cd75346deb0fb3e8d9c243ce11d7202dbefd1ab3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cd/cd9cc035e9685e8c361456008184b7c252437cd3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce0946451de788f41e05bd9ad61c9e44a37dba07.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce35ee5b3375446b335460effba54222bc33160b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce4685b787efbef9ad849a9077624fd9e2633230.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce5df3fa7ea779b5f2dd18c7f613eae3dc88c441.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce61672bdfa8b8f264d7d9591b760c14c22c3dfd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ce6f28d3cff6e5a65ed7adbfc575d5d914f99b0f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/cea81e175e1f4d5b55de345c200d8943b05537ef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/cee1f3295af92626e75e8de65d624bccc197a489.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ceec65295c78cf29c696dd8a77d435d751a13c28.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ce/ceee68aac6677c1e3739aaecd0b38822fbc80b86.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cf/cf12bb1a92e996fd6f78d4c7cacaa7bac689b64a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cf/cf37b774a0e2beb80d2167dee178d0a23af5d97c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cf/cf7f8ae3abfcbfbbb64b68cfcd1430ac15a3cb95.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cf/cff54ce6ec1bb73a60835b09176d095e26d3a682.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/cf/cff87d3b6c0ff4d7f23292c9ee688db9a7b3c041.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d01830a9b362a5b781808aaa58278786456a5b6b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d01f750b0314db436852a81d5760a139a490ae0d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d04f4782f71fbeb834eb3ad59650e0562607dbb7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d06e7b1051287706c008a09faef010076e17ba9e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d0ad1176bc7da26906e03d846cc6e06c0c991d5e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d0/d0c8b98a03ad6fe534d934b09013f77bd567ed17.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d1/d1482a47059d8b19b4bb166303bc2a7cd97b6684.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d1/d165dfd772296432de01845aaf0526739756af44.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d1/d16f3ab428088f7f0d02820079d959f0e83333d0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d1/d17a583593ccc6cb1c270e968603c2b0d944b039.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d1/d1ca2ff9d4fa84b968d821c0d714fadc2359f97b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d2/d2469e19f90f03fe65da50b950be4dac5ff80a8f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d2/d24eff61c042a05511e5c6d3daeedabaca377154.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d2/d2d1c314f75e3c4204c983d97bb196b2fdc1bd84.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d3/d35d967eb6a81c89139eed5b14796cbd80afc137.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d3/d393d66032755679c230f18fe49a3fbaac49fbee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d3/d3b8e030aacdf799cfbd734fa9fc90030392810a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d3/d3f3ab1469124b3b0fb017b1aad572f6dbc88d03.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d4/d46a4085f624595f90e2fb76ff17b14abe639319.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d4/d47ed34c6eda87fddbd0ea9b6325c7fd2dbaf8e0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d5/d5b574ef3ab386a0af9cb8d35f4595edc208d4c7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d5/d5b8da2f923a75e96faa34663eb86edf25acd49d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d5/d5bbb997987f941604234834dc693ac44d9f57e3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d6/d65965d404c37e56066ca8df4dc042b03e7fd445.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d6/d6880542d7121810d7c52405e7274bf9640b33bd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d6/d68e9afdba224c921df5afd70441a3d611e68ac9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d6/d6e02d9980a43b81ecca46a3ce6b0c3c5867ac6c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d6/d6f1017973d1730104c81c7a0a334785b7d7b3a9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d7/d72dc69053464e92a1be12d8eabf38623ab86447.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d7/d7324043f242e38b79d7d171ccbfd7ff4673c2ab.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d7/d7499ad9fd3067490f7532979b183375ab3010b3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d7/d75a29aa1ce862bc682fdf99992ac4f050b76e96.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d7/d7808747da94e03573f73672132985760b6b1e6d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d81c2a18c8437f67467fac230f7c8c1dee0432be.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d83beb20ad3be16974dc3cc79b9c1772d41155b8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d88e8c43384ed4154daee09c94c2f377ea3e4d08.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d8b69ab50753cd2b0f043c2e53d73a8a925da051.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d8beedc852490e73d02fc3f2079a0589d3e04f46.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d8/d8fecb714df485affd339759f0e00affd6d5ffd8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d9/d9334c61341f5717b8afa276fc4b06cc52e2be03.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d9/d95a40b6e45d957b824d0f53a7b17e5036c2cd4c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d9/d9b765be11862a1aaa538a0276248c27d797af55.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d9/d9d5526f271f6e8cb3e3c872dfa30ef33058a571.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/d9/d9f7ef1400db2bf5b9b7755fadc3a5b51a330904.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/da/da1c75aa1121931f1c3fae972bb07f4dcb8aad59.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/da/dac87b585b3c222c2ee602156afeb0c9ecf167f4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/db/db104b1aea5197eded2c57a6c7634b6f44a4e172.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/db/db5b573b58e0f1ab0206b623f34d10f1e6954035.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/db/db7e3dfc7b282f37a7121fbc0d6cb9db793d68b1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/db/db8cd28b2c5a06966d03b0110c98ace9869e8054.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/db/dbf943910094a3eb6113f7bbec120ec7c358c7f3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dc1eceaa58b7b8831be48e8867cc105de5c5add4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dc3a3a2399aa20835185f75854e2bd7f9ae4ebba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dc4c0edf07d2f86cd374279c6bb59a8a3c3217c7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dc52606c2fd8f19818c74843b0c9aaba3e8b4ab2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dc68018c62c76126422bb7c2c40c7aabaa1e9869.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dc/dcc7356fdfe43f509eccbc1a64d15999bbe404bb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dd/dd379c7f6dde8d9e9a4800399c7913c7a1051e19.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dd/dd42afd2bb078aec4db2e450ab368bce6d41a491.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dd/ddac251f02b7f535923c8a8b2efe9c0884a93822.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/dd/ddc31da3c006dff8800e3cc0220eaed067dcdabd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/de/de1085ef2bb070870739179a57d9625481cbaabd.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/de/de46370cefde41dcf5a2df5c52efad65bbee5dff.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/de/dede703cd61d1c33a874f920e6df173c3f798cb5.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/df/df4e6e7529aaf779fbd4b4fcc1b2292a67d6d8f9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/df/df5eea235876c16fcf6dffbb8ce3287873ba941c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/df/df6bbbf8a9b3412cd3863f0a192ca6204510eb05.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/df/df6de6c1ec8c3377609391b08eb3f231e46553ab.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/df/dfada8dea93d61105821b503024863065d0f2467.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e0/e017c95c3de4a05c7352710423ea7efd4f150848.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e0/e034392a8f1341f13026cecd03724e8821cee52e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e0/e07c8bcb3f93cb43004d062986fece989d1e0c1f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e0/e0eeab08f2c7250ab046b2b7ed8235d65857cacf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e0/e0fe0db5c2a656d6ee53235f87a646dda701290b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e1/e12bd0d8afece9e61a3764229a6a6de935623196.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e1/e156200be36a8ab554f94a0bbad602b158658c9c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e1/e16658c2ca9f178ae96863b69c0d3ded52b03d61.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e1/e18f41c6cdf9e8abdab18d1eadde482c45224e0e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e1/e1b32930943b4dc8a4f7182eb3ce34c2c17f5581.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e214f8e79e47562321fb73b38476ed44a10b48ef.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e22cfd7ab33f8bb9cf2fd4302d8898032665624a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e237b638bdc099a8e429f7ff84a5f8a3e094701a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e23cfee26bf65486d24cad025538de8221fca370.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e2a4bd24f01bdfd49bd0ade9bf540890fef7cc5c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e2/e2fea9d9cb1fdaadea21f5e2ddd40c524a82c476.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e3/e3f0b3817d0ba8e6b7f065dd4b74f1444a457fc9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e4/e422ed903a5299ec5c445335d58549ce844e817f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e4/e44ad6732f850e1575bf1327184f9721eeb93e45.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e4/e492b9bedbe3cae55d22b931b2f598b6830d4e7b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e4/e4d7e881bd087ce0c2a3196087eb9cbac15a2afc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e5/e51e006260a4e30083764a7622edf1c0ca4a6d0a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e5/e5412cea4e3507cb8936a72fb1c3555a27bdde49.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e5/e558fa157510e7d3504e08de883f8dc2494d524e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e5/e56e891c1a2fde2f0e7f2248b8eef44b27213a73.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e5/e5a0789d1c35cfb5967bd94be6c5f98b180b4733.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e6/e612e5fad18fd0124c624e35d44823a464737920.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e6/e64a58f4ac3a933e638b0ee748db46b5b52e8027.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e6/e659d29408cd396d235f00e24a690c3de7d98e64.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e6/e6801f9735108ec78905cc7517d383aef2f9ec43.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e7/e74f5a3ea3599f340d78deee9fb4e48a4bab7256.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e7/e76000e9fa42d1494405561a4a16b19740c1cef0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e7/e776ca078ceb48c54c52c4f58ffa81c7fc3328bc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e7/e7e00e0f7b192a2312f917e80dd6addf88945f48.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e801f2e12dc635fab4bc78af4e89fb1286695447.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e807f42d9a66bfc3a437c519b10540e83bc87eb3.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e8107022dcfa882df906ada34a27cb6198f9a44a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e859014dab7557063572c2fc50b0d86ae3a57f63.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e86830712607f520981e02785ef2bffcb462a9fe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e8737a60bfbdf3cae887962ed021065e8711b445.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e896ffebdfdf5fb4127dc58caaff759bff331393.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e8/e8cd8c80dce195f92b651f110ad0c21c336808f1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e9/e93d93b4a299e76bf16a300daf5503b095771520.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/e9/e9f6c8963ca4678820938bdd409020afd5137e02.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ea/ea788e9e096fe2440d66b3fd84f9049f84bba7f2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ea/ea84d9b9ae86bc3a2f411aea766ed205074ad099.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ea/eaf258797038f3f423dc1ad0b9c2f8b14ae121e1.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ea/eafc98f295a4471fc6f67a9722557d399582f720.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb36607aa790db4882b3085cef88f377e0c5d440.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb3e00ee884f91b9a819670e7d7b86cbe83d3b3b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb460edb28d26f4d72774023ddcdbe6e5e0ca67e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb5345901179a3b67ec64e09e05b89f6a88bb485.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb67f9b79192e0757fae4958a540c0ebd4db9a1c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/eb9122dc77d9f64a9576dd5d7132230514a2f13e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/ebe0a09e264f282a8a3752c7a7b1531e05c5699d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/eb/ebfe7059ad574e787062f93616472c448942b2e8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ec/ec316b036999a20931e1c0664c147665e025df4d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ec/ec32160134fcb88b7e8d2f3e485f9398b3a98f8f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ec/ec5d49d0f377d4863b029e225aa944a57acbec11.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed1c69b63cdc89869fff21158c439b19735cdf5e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed1fb346e00d7086684a6e1cdf8c1553f3ba60bb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed3f3e6107b468dd80d5cac54c6f797cf9b9a6fa.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed504ec197b682bb05b39d3f64ff54eab5942eba.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed80ed9f4e360477453e1d23f788e4e3ba435b12.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ed/ed875467bd764529518dacf64f5920ec9440b9dc.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/ee2c577413ec0ec0fb4e840f731f6b526e7316ea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/ee8b5e590be246a90206afc28dcf986860968031.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/ee9778693ecf2e39d9e3053b1ec8bb3417515ef6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/eea6fab24f744844afdde569d40ad4a384ad9428.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/eebed5ef2b26fae5f5a7caec275e5489e229fffe.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/eecaa4366f8a2a2adf1f2dc3504f3f3b5e63b754.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ee/eece930789f5d8e26230dd2594ec37d26b5b7d98.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/ef1dccb37b3928abf7403c066206c96d1bb4b73b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/ef61f0054013eaa773093914ce06b93a5989075f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/ef728adece982cd89bed55d2f203fe259a03161b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/ef732cdd88400923118dde01478f30a6737a8c16.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/efa39a2f886d36f537e4175c3f6132ffb92b5031.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ef/efdf4e0eb44f15949ffd806545db76e065d27cd4.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f0/f05a648aeb22a08301754155fca7884ce1fc2003.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f0/f05d466cf94ef0ec1e0e84e762590ed9b6230313.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f1/f1cb80d40157d2311e8674c156a2b5a162b3e417.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f1/f1e5725f1e9174949649c904a0336ff8e586088a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f2/f239936f06f99ff3ac40da02e3d45c0bf588cd48.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f2/f27c241debdd8f951b70dccb8b9024d75f7ce78e.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f2/f28934ebc99b8061be6a0efa6af454add459673a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f2/f2bdd24003310bf4110bb86ad4a5e99744373dd9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f3/f382aa671fa50f70b374564842879b2942084883.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f3/f3abe65be447157ba820b7b4259690d1c67ad8d9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f3/f3e7c905c1d2b9245d504074a8334564e67733b9.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f4/f4da4eca3126fa2019f1e41b977cae90a7714cb6.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f4/f4ea558fabf26be2390569890d8a0448aa6c4aea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f5/f505d27fc632a5930822762e68780987cca126a2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f5/f52477f1a433b5ffe5158002cac40b99f0e37e8a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f5/f55433201537dcd4d8a3ca3bdf582e6f792230d8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f6/f604ebc4193030d1b1cf678728d7a18b0c6102c0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f6/f68fb687396563804b336d555fc7e75556f09498.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f6/f6c14a03faf2cfd0f74a313f454962388a186cdb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f7/f70efbf358d7e5e994d9c32f360ccb66fef77cc2.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f7/f79e2f30bc1539a43b3cb3124acb2f6fe497e165.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f7/f7bdc9ec6f5f5ae59da440cc2b610d63a7d4270b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f8423dbf2d770e5d22488b5e8fbe56b168708ab7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f84fa6fe5f487994f1e75c44805710fc0ed5b7cb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f8767ab57aa65aa9ef046b82dae658913078d8bf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f8c0962bffc7b764721782552c15597835e92dec.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f8c26e9f0802edf013cb0effaac51794fd2b8805.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f8/f8d21eb62b7c4fbda1bb60809d10c60a19a9caaf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f9/f98173a103fb95765ca27bc336e1fc157ea7c262.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f9/f9862b2455c3999eb33891c2b18eddba7935a8eb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/f9/f99912fb39b7eacccd360247076a188cbff73a3b.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fa0fc5ea9b15973574acc0aa70e58c6071be765f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fa17f91c14facc5a13d2851474dd0cd327491132.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fa2cc595873537039c1a498e7e97039d702a18bf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fa463b1ab0118f67ae8699a5f3bf96746a6712ee.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fa9ab606193665335f1a2f0b5f90ccb187e65f5f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fac6dcbb40e7c5a284f2abb974a8e580c13c6230.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fad2f1a3d908fcd5fde4aa95af762fec95b4b650.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fa/fae902cc095f55039f1c5443df67e6c70ff23da8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fb/fb150a74f2eaccb20d16b769e1a6651f530fa676.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fb/fb294837144df0bde0c697d47a1d4186591f8784.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fb/fb59885fa4a3ad58bc187b34c4b62a8621f496c8.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fc/fc54aa5d6e7a476ab5f0ef7007ca0609243a11ac.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fc/fcb4e3d6725e4dc8f65c77f72a770ab02bc03c1f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd090aeb3712693221d8e274544bcba84ac07eea.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd090dd5feabaa059bd64d6ce413f966852ba083.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd120bab7634fe0cd030b1378bd748a331b7847f.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd1a8046d1b57c6a740bc1a1f0842b3d7574eb75.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd38c8b606b7974c36f4f4a679e9c46a3d1a6471.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fd52e34d17da293fa06f093c706dfe375c52daf7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fdbaec46aa47f3f74a9af743d1017cb2a2ddf5bb.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fdc8fcb346f02df1dfea12c43f47e0e1151f6b25.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fd/fde9355e43b1696ff06d409d5948763e2c95388a.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fe/fe2141f685144e127a9308ebbba9f48a011b2fc7.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fe/fe28a189808a0ea994eb4faf7cfb038397145746.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fe/fec4222cd9606aa7253faf56208384b6d976958d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/fe/fee501045c826e47068805e027ad64e2a7293e71.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ff093d968cc73554afb6cd811f6f298d819b45d0.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ff7c17387b34c000a79e3f1beceb1521377f8cbf.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ffa7d06d5c797053a04bda9c384f3840a8ebe205.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ffda769fea44f1139edfd393c9ce07b3d3b54a67.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ffdd80382ed6dad5501484a46ba651132a434607.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/fff7b5506626b6ba9b7fbbd89112a561022ec97d.svn-base delete mode 100644 xios_2311_src/trunk/.svn/pristine/ff/ffffbb23e8e23bc3b543210a7d72bb218bf98f1c.svn-base delete mode 100644 xios_2311_src/trunk/.svn/wc.db delete mode 100644 xios_2311_src/trunk/.svn/wc.db-journal delete mode 100644 xios_2311_src/trunk/.void_file delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_GNU.env delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_GNU.fcm delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_GNU.path delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_LLVM.env delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_LLVM.fcm delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_IRENE_LLVM.path delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_JEANZAY_PGI.env delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_JEANZAY_PGI.fcm delete mode 100644 xios_2311_src/xios_test_suite/ARCH/arch-X64_JEANZAY_PGI.path delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_axis_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_axis_algo/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_domain_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_domain_algo/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_dynamico_algo/checkfile.def delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_dynamico_algo/context_atm.xml delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_dynamico_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_dynamico_algo/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_function/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_function/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_grid_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_grid_algo/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_memory/checkfile.def delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_memory/context_atm.xml delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_memory/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_memory/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_nemo_algo/checkfile.def delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_nemo_algo/context_atm.xml delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_nemo_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_nemo_algo/user_param_basic.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_scalar_algo/user_param_advanced.json delete mode 100644 xios_2311_src/xios_test_suite/TEST_SUITE/test_scalar_algo/user_param_basic.json diff --git a/readme.md b/readme.md index 121b3850..39e594d6 100644 --- a/readme.md +++ b/readme.md @@ -5,10 +5,36 @@ Contains a plyground to run NEMO5 (ver. ) with XIOS TRUNK (ver. 2311). ## Structure +* **nemo5_src** and **xios_2311_src** contain the sources for build the applications. +* The **inputs** are `reference rundirs` with the required namelists and all required files for each resolution. +* **scripts** contains utils to compile and execute, expected to be used as boilerplates. ## Usage +1. Compile XIOS +````bash +# At xios_3211_src dir: +./make_xios --arch mn5_gpp_intel --job 10 --build_dir xios_impi +./make_xios --arch mn5_gpp_intel_openmpi --job 10 --build_dir xios_ompi +```` +> If you need to recompile XIOS, use `--full`. -## Example +2. Compile NEMO5: + + 2.1. Change the ARCH file with the XIOS build dir (nemo5_src/arch/arch-mn5_gpp_intel*) + ````bash + %XIOS_INC -I/your/path/to/xios_2311_src/inc + %XIOS_LIB -L/your/path/to/xios_2311_src/lib -lxios -lstdc++ + ```` + 2.2. Submit the compilations, several options available + ````bash + # At nemo5_src dir: + + ```` +3. Execute the model: + + 3.1. Untar inputs + + 3.2. Check the boilerplate to execute the model. diff --git a/xios_2311_src/arch/arch-X64_IRENE.env b/xios_2311_src/arch/arch-X64_IRENE.env index f461b930..20d65b16 100644 --- a/xios_2311_src/arch/arch-X64_IRENE.env +++ b/xios_2311_src/arch/arch-X64_IRENE.env @@ -1,11 +1,9 @@ -module purge -module load flavor/buildcompiler/intel/20 -module load mpi/openmpi/4.0.2 - +module unload netcdf-c netcdf-fortran hdf5 flavor perl hdf5 boost blitz mpi gnu +#module purge module load flavor/hdf5/parallel module load netcdf-fortran/4.4.4 module load hdf5/1.8.20 module load gnu/7.3.0 - -module load totalview -module load perl/5.30.2 +module load boost +module load blitz +module load feature/bridge/heterogenous_mpmd diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.env b/xios_2311_src/arch/arch-X64_IRENE_GNU.env deleted file mode 100644 index 816db148..00000000 --- a/xios_2311_src/arch/arch-X64_IRENE_GNU.env +++ /dev/null @@ -1,11 +0,0 @@ -module purge -module load flavor/buildcompiler/gcc/8 -module load mpi/openmpi/4.0.2 - -module load flavor/hdf5/parallel -module load netcdf-fortran/4.4.4 -module load hdf5/1.8.20 -module load gnu/8.3.0 - -module load totalview -module load perl/5.30.2 diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm b/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm deleted file mode 100644 index baf55422..00000000 --- a/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm +++ /dev/null @@ -1,26 +0,0 @@ -################################################################################ -################### Projet XIOS ################### -################################################################################ - -%CCOMPILER mpicc -%FCOMPILER mpif90 -%LINKER mpif90 - -%BASE_CFLAGS -std=c++11 -w -fpermissive -D__XIOS_EXCEPTION -%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS -#%DEV_CFLAGS -g -fbacktrace -%DEV_CFLAGS -g -%DEBUG_CFLAGS -DBZ_DEBUG -g -fbacktrace -fno-inline - -%BASE_FFLAGS -D__NONE__ --free-form -ffree-line-length-0 -%PROD_FFLAGS -O3 -#%DEV_FFLAGS -g -fbacktrace -%DEV_FFLAGS -g -%DEBUG_FFLAGS -g -fbacktrace - -%BASE_INC -D__NONE__ -%BASE_LD -lstdc++ - -%CPP cpp -%FPP cpp -P -%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.path b/xios_2311_src/arch/arch-X64_IRENE_GNU.path deleted file mode 100644 index 4e9e3a2b..00000000 --- a/xios_2311_src/arch/arch-X64_IRENE_GNU.path +++ /dev/null @@ -1,28 +0,0 @@ -NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR" -NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR" -NETCDF_LIB="-lnetcdf -lnetcdff" - -MPI_INCDIR="" -MPI_LIBDIR="" -MPI_LIB="" - -HDF5_INCDIR="-I$HDF5_INCDIR" -HDF5_LIBDIR="-L$HDF5_LIBDIR" -HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" - -BOOST_INCDIR="-I $BOOST_INCDIR" -BOOST_LIBDIR="-L $BOOST_LIBDIR" -BOOST_LIB="" - -BLITZ_INCDIR="-I $BLITZ_INCDIR" -BLITZ_LIBDIR="-L $BLITZ_LIBDIR" -BLITZ_LIB="" - -OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" -OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" -OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" - - -#only for MEMTRACK debuging : developper only -ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" -ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_JEANZAY.env b/xios_2311_src/arch/arch-X64_JEANZAY.env index 52cc2b31..0dd276ba 100644 --- a/xios_2311_src/arch/arch-X64_JEANZAY.env +++ b/xios_2311_src/arch/arch-X64_JEANZAY.env @@ -1,7 +1,8 @@ module purge -module load intel-all/2020.4 -module load hdf5/1.12.0-mpi -module load netcdf-c/4.7.4-mpi -module load netcdf-fortran/4.5.3-mpi -source $I_MPI_ROOT/intel64/bin/mpivars.sh release_mt +module load gcc/9.1.0 +module load intel-all +module load gcc/9.1.0 +module load hdf5/1.10.5-mpi +module load netcdf/4.7.2-mpi +module load netcdf-fortran/4.5.2-mpi diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env deleted file mode 100644 index 85fa447d..00000000 --- a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env +++ /dev/null @@ -1,7 +0,0 @@ -module purge -module load openmpi/4.1.1 -module load intel-all/2020.4 -module load hdf5/1.12.0-mpi -module load netcdf-c/4.7.4-mpi -module load netcdf-fortran/4.5.3-mpi - diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm deleted file mode 100644 index 7fc70bbf..00000000 --- a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm +++ /dev/null @@ -1,25 +0,0 @@ -################################################################################ -#################### Projet XIOS ################### -################################################################################# - - -%CCOMPILER mpicc -%FCOMPILER mpif90 -%LINKER mpif90 -nofor-main - -%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 -std=c++11 -%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS -%DEV_CFLAGS -g -traceback -%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline - -%BASE_FFLAGS -D__NONE__ -%PROD_FFLAGS -O3 -%DEV_FFLAGS -g -O2 -traceback -%DEBUG_FFLAGS -g -traceback - -%BASE_INC -D__NONE__ -%BASE_LD -lstdc++ - -%CPP mpiicc -EP -%FPP cpp -P -%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path deleted file mode 100644 index 03839412..00000000 --- a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path +++ /dev/null @@ -1,15 +0,0 @@ -NETCDF_INCDIR="" -NETCDF_LIBDIR="" -NETCDF_LIB="-lnetcdff -lnetcdf" - -MPI_INCDIR="" -MPI_LIBDIR="" -MPI_LIB="" - -HDF5_INCDIR="" -HDF5_LIBDIR="" -HDF5_LIB="" - -OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" -OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" -OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_ZEUS.path b/xios_2311_src/arch/arch-X64_ZEUS.path index 592c0688..dab34021 100644 --- a/xios_2311_src/arch/arch-X64_ZEUS.path +++ b/xios_2311_src/arch/arch-X64_ZEUS.path @@ -12,4 +12,3 @@ OASIS_INCDIR="" OASIS_LIBDIR="" OASIS_LIB="" - diff --git a/xios_2311_src/arch/arch-ifort_CICLAD.fcm b/xios_2311_src/arch/arch-ifort_CICLAD.fcm index cf2b8aba..fa78556e 100644 --- a/xios_2311_src/arch/arch-ifort_CICLAD.fcm +++ b/xios_2311_src/arch/arch-ifort_CICLAD.fcm @@ -1,13 +1,13 @@ -%CCOMPILER /usr/lib64/openmpi/1.4.5-ifort/bin/mpicc -%FCOMPILER /usr/lib64/openmpi/1.4.5-ifort/bin/mpif90 -%LINKER /usr/lib64/openmpi/1.4.5-ifort/bin/mpif90 -nofor-main +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main -%BASE_CFLAGS +%BASE_CFLAGS -fPIC -std=c++11 %PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS -%DEV_CFLAGS -g -traceback -%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -fno-inline -%BASE_FFLAGS -D__NONE__ +%BASE_FFLAGS -fPIC -D__NONE__ %PROD_FFLAGS -O3 %DEV_FFLAGS -g -O2 -traceback %DEBUG_FFLAGS -g -traceback @@ -15,6 +15,6 @@ %BASE_INC -D__NONE__ %BASE_LD -lstdc++ -%CPP /usr/lib64/openmpi/1.4.5-ifort/bin/mpicc -EP +%CPP mpicc -EP %FPP cpp -P %MAKE gmake diff --git a/xios_2311_src/arch/arch-ifort_CICLAD.path b/xios_2311_src/arch/arch-ifort_CICLAD.path index 1d370c15..13f6989f 100644 --- a/xios_2311_src/arch/arch-ifort_CICLAD.path +++ b/xios_2311_src/arch/arch-ifort_CICLAD.path @@ -1,9 +1,10 @@ -NETCDF_INCDIR="-I /opt/netcdf42/ifort/include" -NETCDF_LIBDIR="-L/opt/netcdf42/ifort/lib" -NETCDF_LIB="-lnetcdf" +NETCDF_INCDIR="-I /opt/netcdf4/4.4.1.1-parallel/ifort/include" +NETCDF_LIBDIR="-L/opt/netcdf4/4.4.1.1-parallel/ifort/lib" +NETCDF_LIB="-lnetcdff -lnetcdf" MPI_INCDIR="" MPI_LIBDIR="" MPI_LIB="" HDF5_INCDIR="" HDF5_LIBDIR="" HDF5_LIB="" + diff --git a/xios_2311_src/arch/arch-ifort_LSCE.fcm b/xios_2311_src/arch/arch-ifort_LSCE.fcm index 8cfbe64c..54160ef3 100644 --- a/xios_2311_src/arch/arch-ifort_LSCE.fcm +++ b/xios_2311_src/arch/arch-ifort_LSCE.fcm @@ -2,7 +2,7 @@ %FCOMPILER mpif90 %LINKER mpif90 -nofor-main -%BASE_CFLAGS +%BASE_CFLAGS -std=c++11 %PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS %DEV_CFLAGS -g %DEBUG_CFLAGS -DBZ_DEBUG -g -fno-inline diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env deleted file mode 100644 index 94c09c99..00000000 --- a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env +++ /dev/null @@ -1,4 +0,0 @@ -module --force purge -module load oneapi/2023.2 -module load hdf5/1.14.1-2 pnetcdf/1.12.3 #dependencies for netcdf -module load netcdf/2023-06-14 diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm deleted file mode 100644 index 4eeaea50..00000000 --- a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm +++ /dev/null @@ -1,25 +0,0 @@ -################################################################################ -################### Projet XIOS ################### -################################################################################ - -%CCOMPILER mpicc -%FCOMPILER mpifort -%LINKER mpifort - -%BASE_CFLAGS -fPIC -std=c++11 -%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS -%DEV_CFLAGS -g -O2 -%DEBUG_CFLAGS -g - -%BASE_FFLAGS -D__NONE__ -%PROD_FFLAGS -O3 -%DEV_FFLAGS -g -O2 -%DEBUG_FFLAGS -g - -%BASE_INC -D__NONE__ -%BASE_LD -lstdc++ - -%CPP mpicc -EP -%FPP cpp -P -%MAKE gmake - diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path deleted file mode 100644 index 586ab586..00000000 --- a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path +++ /dev/null @@ -1,8 +0,0 @@ - -NETCDF_INCDIR="-I/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/include" -NETCDF_LIBDIR="-L/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/lib" -NETCDF_LIB="-lnetcdf -lnetcdff" -HDF5_INCDIR="-I/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/include" -HDF5_LIBDIR="-L/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/lib" -HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" - diff --git a/xios_2311_src/bld.cfg b/xios_2311_src/bld.cfg index a361cda9..e5752405 100644 --- a/xios_2311_src/bld.cfg +++ b/xios_2311_src/bld.cfg @@ -21,27 +21,22 @@ bld::infile_ext::hpp CPP::INCLUDE # IMPORTANT: as the build directory may not necessarily coincide with the source directory, # each source subfolder should be declared individually search_src false -src::xios $PWD/src -src::xios::config $PWD/src/config -src::xios::date $PWD/src/date -src::xios::filter $PWD/src/filter -src::xios::functor $PWD/src/functor -src::xios::interface::c $PWD/src/interface/c -src::xios::interface::c_attr $PWD/src/interface/c_attr -src::xios::interface::fortran $PWD/src/interface/fortran -src::xios::interface::fortran_attr $PWD/src/interface/fortran_attr -src::xios::io $PWD/src/io -src::xios::node $PWD/src/node -src::xios::parse_expr $PWD/src/parse_expr -src::xios::test $PWD/src/test -src::xios::transformation $PWD/src/transformation -src::xios::transformation::Functions $PWD/src/transformation/Functions -src::xios::transformation::axis_algorithm $PWD/src/transformation/axis_algorithm -src::xios::transformation::domain_algorithm $PWD/src/transformation/domain_algorithm -src::xios::transformation::scalar_algorithm $PWD/src/transformation/scalar_algorithm -src::xios::type $PWD/src/type -src::xios::manager $PWD/src/manager -src::xios::distribution $PWD/src/distribution +src::xios $PWD/src +src::xios::config $PWD/src/config +src::xios::date $PWD/src/date +src::xios::filter $PWD/src/filter +src::xios::functor $PWD/src/functor +src::xios::interface::c $PWD/src/interface/c +src::xios::interface::c_attr $PWD/src/interface/c_attr +src::xios::interface::fortran $PWD/src/interface/fortran +src::xios::interface::fortran_attr $PWD/src/interface/fortran_attr +src::xios::io $PWD/src/io +src::xios::node $PWD/src/node +src::xios::parse_expr $PWD/src/parse_expr +src::xios::test $PWD/src/test +src::xios::transformation $PWD/src/transformation +src::xios::transformation::Functions $PWD/src/transformation/Functions +src::xios::type $PWD/src/type src::netcdf $PWD/extern/netcdf4 src::remap $PWD/extern/remap/src @@ -55,6 +50,7 @@ bld::target generic_testcase.exe #bld::target test_xios2_cmip6.exe #bld::target test_new_features.exe test_unstruct_complete.exe #bld::target test_remap.exe +#bld::target test_interpolate.exe #bld::target test_complete.exe #bld::target test_client.exe #bld::target test_unstruct_complete.exe diff --git a/xios_2311_src/bld_dir.cfg b/xios_2311_src/bld_dir.cfg index d491b463..f0362e81 100644 --- a/xios_2311_src/bld_dir.cfg +++ b/xios_2311_src/bld_dir.cfg @@ -1,3 +1,4 @@ -inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/.//arch.fcm -inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/.//config.fcm -dir::root /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/./ +inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/new_mn5_gpp_intel/arch.fcm +inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/new_mn5_gpp_intel/config.fcm +dir::root /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/new_mn5_gpp_intel +src::blitz /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/extern/blitz/src diff --git a/xios_2311_src/doc/XIOS_reference_guide.lyx b/xios_2311_src/doc/XIOS_reference_guide.lyx index 45a5a2f3..cef5e0bb 100644 --- a/xios_2311_src/doc/XIOS_reference_guide.lyx +++ b/xios_2311_src/doc/XIOS_reference_guide.lyx @@ -1,10613 +1,11981 @@ -#LyX 2.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 474 -\begin_document -\begin_header -\textclass book -\use_default_options true -\begin_modules -logicalmkup -\end_modules -\maintain_unincluded_children false -\language english -\language_package auto -\inputencoding auto -\fontencoding global -\font_roman default -\font_sans default -\font_typewriter default -\font_math auto -\font_default_family default -\use_non_tex_fonts false -\font_sc false -\font_osf false -\font_sf_scale 100 -\font_tt_scale 100 -\graphics default -\default_output_format default -\output_sync 0 -\bibtex_command default -\index_command default -\paperfontsize default -\spacing single -\use_hyperref false -\papersize a4paper -\use_geometry false -\use_package amsmath 1 -\use_package amssymb 1 -\use_package cancel 1 -\use_package esint 1 -\use_package mathdots 1 -\use_package mathtools 1 -\use_package mhchem 1 -\use_package stackrel 1 -\use_package stmaryrd 1 -\use_package undertilde 1 -\cite_engine basic -\cite_engine_type default -\biblio_style plain -\use_bibtopic false -\use_indices false -\paperorientation portrait -\suppress_date false -\justification true -\use_refstyle 0 -\index Index -\shortcut idx -\color #008000 -\end_index -\secnumdepth 3 -\tocdepth 3 -\paragraph_separation indent -\paragraph_indentation default -\quotes_language english -\papercolumns 1 -\papersides 1 -\paperpagestyle default -\tracking_changes false -\output_changes false -\html_math_output 0 -\html_css_as_file 0 -\html_be_strict false -\end_header - -\begin_body - -\begin_layout Title -XIOS Fortran Reference Guide -\end_layout - -\begin_layout Author -Yann Meurdesoif -\end_layout - -\begin_layout Chapter -Attribute reference -\end_layout - -\begin_layout Section -Context attribute reference -\end_layout - -\begin_layout Section -Calendar attribute reference -\end_layout - -\begin_layout Subsection* -type: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {Gregorian, Julian, D360, AllLeap, NoLeap, user_defined} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Define the calendar used for the current context. - This attribute is mandatory and cannot be modified once it has been set. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined using the - following subroutine: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -start_date: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_date) :: start_date -\end_layout - -\begin_layout Standard -Define the start date of the simulation for the current context. - This attribute is optional, the default value is -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout - -\series bold -0000-01-01 00:00:00 -\end_layout - -\end_inset - -. - The -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -type -\end_layout - -\end_inset - - attribute must always be set at the same time or before this attribute - is defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -A partial date is allowed in the configuration file as long as the omitted - parts are at the end, in which case they are initialized as in the default - value. - Optionally an offset can be added to the date using the notation " -\emph on -+ duration -\emph default -". - -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute can be defined at the same - time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Standard -or later using the following subroutine: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_start_date(start_date) -\end_layout - -\begin_layout Subsection* -time_origin: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_date) :: time_origin -\end_layout - -\begin_layout Standard -Define the time origin of a time axis. - It will appear as metadata attached to the time axis in an output file. - This attribute is optional, the default value is -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout - -\series bold -0000-01-01 00:00:00 -\end_layout - -\end_inset - -. - The -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -type -\end_layout - -\end_inset - - attribute must always be set at the same time or before this attribute - is defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -A partial date is allowed in the configuration file as long as the omitted - parts are at the end, in which case they are initialized as in the default - value. - Optionally an offset can be added to the date using the notation " -\emph on -+ duration -\emph default -". - -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute can be defined at the same - time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Standard -or later using the following subroutine: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_time_origin(time_origin) -\end_layout - -\begin_layout Subsection* -timestep: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: timestep -\end_layout - -\begin_layout Standard -Define the time step of the simulation for the current context. - This attribute is mandatory. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute can be defined at the same - time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Standard -or using the following subroutine: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_timestep(timestep) -\end_layout - -\begin_layout Subsection* -day_length: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: day_length -\end_layout - -\begin_layout Standard -Define the duration of a day in seconds when using a custom calendar. - This attribute is mandatory if the calendar -\series bold -type -\series default - is set to " -\emph on -user_defined -\emph default -", otherwise it must not be defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -month_lengths: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: month_lengths(:) -\end_layout - -\begin_layout Standard -Define the duration of each month, in days, when using a custom calendar. - The number of elements in the array defines the number of months in a year - and the sum of all elements is the total number of days in a year. - This attribute is mandatory if the calendar -\series bold -type -\series default - is set to -\series bold -\emph on -user_defined -\series default -\emph default - and the -\series bold -year_length -\series default - attribute is not used, otherwise it must not be defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -year_length: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: year_length -\end_layout - -\begin_layout Standard -Define the duration of a year, in seconds, when using a custom calendar. - This attribute is mandatory if the calendar -\series bold -type -\series default - is set to -\series bold -\emph on -user_defined -\series default -\emph default - and the -\series bold -month_lengths -\series default - attribute is not used, otherwise it must not be defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -Note that the date format is modified when using this attribute: the month - must be always be omitted and the day must also be omitted if -\begin_inset Formula $year\_length\leq day\_length$ -\end_inset - -. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -leap_year_month: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: leap_year_month -\end_layout - -\begin_layout Standard -Define the month to which the extra day will be added in case of leap year, - when using a custom calendar. - This attribute is optional if the calendar -\series bold -type -\series default - is set to -\series bold -\emph on -user_defined -\series default -\emph default - and the -\series bold -month_lengths -\series default - attribute is used, otherwise it must not be defined. - The default behavior is not to have any leap year. - If defined, this attribute must comply with the following constraint: -\begin_inset Formula $1\leq leap\_year\_month\leq size(month\_lengths)$ -\end_inset - - and the -\series bold -leap_year_drift -\series default - attribute must also be defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -leap_year_drift: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: leap_year_drift -\end_layout - -\begin_layout Standard -Define the yearly drift, expressed as a fraction of a day, between the calendar - year and the astronomical year, when using a custom calendar. - This attribute is optional if the calendar -\series bold -type -\series default - is set to -\series bold -\emph on -user_defined -\series default -\emph default - and the -\series bold -month_lengths -\series default - attribute is used, otherwise it must not be defined. - The default behavior is not to have any leap year, i.e. - the default value is -\begin_inset Formula $\mathbf{0}$ -\end_inset - -. - If defined, this attribute must comply with the following constraint: -\begin_inset Formula $0\leq leap\_year\_drift<1$ -\end_inset - - and the -\series bold -leap_year_month -\series default - attribute must also be defined. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Subsection* -leap_year_drift_offset: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: leap_year_drift_offset -\end_layout - -\begin_layout Standard -Define the initial drift between the calendar year and the astronomical - year, expressed as a fraction of a day, at the beginning of the time origin's - year, when using a custom calendar. - This attribute is optional if the -\series bold -leap_year_month -\series default - and -\series bold -leap_year_drift -\series default - attributes are used, otherwise it must not be defined. - The default value is -\begin_inset Formula $\mathbf{0}$ -\end_inset - -. - If defined, this attribute must comply with the following constraint: -\begin_inset Formula $0\leq leap\_year\_drift\_offset<1$ -\end_inset - -. - If -\begin_inset Formula $leap\_yeap\_drift\_offset+leap\_yeap\_drift$ -\end_inset - - is greater or equal to 1, then the first year will be a leap year. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -When using the Fortran interface, this attribute must be defined at the - same time as the calendar -\series bold -type -\series default -: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\end_layout - -\begin_layout Section -Scalar attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a scalar as it will appear in a file. - If not defined, the name will be generated automatically based on the id. - If multiple scalars are defined in the same file, each scalar must have - a unique name. - -\end_layout - -\begin_layout Subsection* -standard_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: standard_name -\end_layout - -\begin_layout Standard -Defines the standard name of a scalar as it will appear in the scalar's - metadata in an output file. - -\end_layout - -\begin_layout Subsection* -long_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: long_name -\end_layout - -\begin_layout Standard -Defines the long name of a scalar as it will appear in the scalar's metadata - in an output file. - -\end_layout - -\begin_layout Subsection* -unit (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: unit -\end_layout - -\begin_layout Standard -Defines the scalar unit as it will appear in the scalar's metadata in an - output file. -\end_layout - -\begin_layout Subsection* -value (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: value -\end_layout - -\begin_layout Standard -Defines the value of a scalar. - If both, the label and the value, are set then only the label will be written - into a file. -\end_layout - -\begin_layout Subsection* -bounds (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds(:) -\end_layout - -\begin_layout Standard -Defines (two) scalar boundaries. - The array size must should be equal to 2. -\end_layout - -\begin_layout Subsection* -bounds_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: bounds_name -\end_layout - -\begin_layout Standard -Defines the name of scalar bounds as it will appear in a file. - If not defined, the name will be generated automatically based on the scalar - id. -\end_layout - -\begin_layout Subsection* -prec (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: prec -\end_layout - -\begin_layout Standard -Defines the precision in bytes of scalar value and boundaries as it will - be written into an output file. - Available values are: 2 (integer), 4 (float single precision) and 8 (float - double precision). - The default value is 8. -\end_layout - -\begin_layout Subsection* -label (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: label -\end_layout - -\begin_layout Standard -Defines the label of a scalar. - If both, the label and the value, are set then only the label will be output - into a file. -\end_layout - -\begin_layout Subsection* -scalar_ref (optional): string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: scalar_ref -\end_layout - -\begin_layout Standard -Defines the reference to a scalar. - All attributes will be inherited from the referenced scalar via the classical - inheritance mechanism. - The value assigned to the referenced scalar will be transmitted to the - current scalar. -\end_layout - -\begin_layout Subsection* -positive (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {up, down} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: positive -\end_layout - -\begin_layout Standard -Defines the positive direction for fields representing height or depth. -\end_layout - -\begin_layout Subsection* -axis_type (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {X, Y, Z, T} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: axis_type -\end_layout - -\begin_layout Standard -Defines the type of a (scalar) axis. - The values correspond to the following axis types: -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -X: -\series default -\shape default - longitude -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -\emph on -Y -\emph default -: -\series default -\shape default - latitude -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -\emph on -Z -\emph default -: -\series default -\shape default - vertical axis -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -T: -\series default -\shape default -time axis. -\end_layout - -\begin_layout Subsection* -comment: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. - -\end_layout - -\begin_layout Section -Axis attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a vertical axis as it will appear in an output file. - If not defined, the name will be generated automatically based on the axis - id. - If multiple vertical axes are defined in the same file, each axis must - have a unique name. - -\end_layout - -\begin_layout Subsection* -standard_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: standard_name -\end_layout - -\begin_layout Standard -Defines the standard name of a vertical axis as it will appear in the axis' - metadata in an output file. - -\end_layout - -\begin_layout Subsection* -long_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: long_name -\end_layout - -\begin_layout Standard -Defines the long name of a vertical axis as it will appear in the axis' - metadata in an output file. - -\end_layout - -\begin_layout Subsection* -unit (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: unit -\end_layout - -\begin_layout Standard -Defines the unit of an axis as it will appear in the axis' metadata in an - output file. -\end_layout - -\begin_layout Subsection* -dim_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: dim_name -\end_layout - -\begin_layout Standard -Defines the name of axis dimension as it will appear in the file's metadata. -\end_layout - -\begin_layout Subsection* -formula (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: formula -\end_layout - -\begin_layout Standard -Adds the formula attribute to a parametric vertical axis. -\end_layout - -\begin_layout Subsection* -formula_term (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: formula_term -\end_layout - -\begin_layout Standard -Adds the formula terms attribute to a parametric vertical axis. -\end_layout - -\begin_layout Subsection* -formula_bounds (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: formula_bounds -\end_layout - -\begin_layout Standard -Adds the formula attribute to the bounds of a parametric vertical axis. - The attribute is mandatory if the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -formula -\end_layout - -\end_inset - - attribute is defined for the axis. -\end_layout - -\begin_layout Subsection* -formula_term_bounds (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: formula_term_bounds -\end_layout - -\begin_layout Standard -Adds the formula terms attribute to the bounds of a parametric vertical - axis. - The attribute is mandatory if the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -formula -\end_layout - -\end_inset - - attribute is defined for the axis. -\end_layout - -\begin_layout Subsection* -n_glo (mandatory): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: n_glo -\end_layout - -\begin_layout Standard -Defines the global size of an axis. -\end_layout - -\begin_layout Subsection* -begin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: begin -\end_layout - -\begin_layout Standard -Defines the beginning index of the local domain. - It can take value between 0 and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n_glo-1 -\end_layout - -\end_inset - -. - If not specified the default value is 0. -\end_layout - -\begin_layout Subsection* -n (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: zoom_size -\end_layout - -\begin_layout Standard -Defines the local size of an axis. - It can take value between 0 and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n_glo -\end_layout - -\end_inset - -. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n_glo -\end_layout - -\end_inset - -. - Local axis decomposition can be declared either with attributes -\series bold -\shape italic -{n, begin} -\series default -\shape default - or with -\series bold -\shape italic -index -\series default -\shape default -. -\end_layout - -\begin_layout Subsection* -index (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: index(:) -\end_layout - -\begin_layout Standard -Defines the global indexes of a local axis held by each process. - If the attribute is specified, its array size must be equal to -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n -\end_layout - -\end_inset - -. - Local axis decomposition can be declared either with attributes -\series bold -\shape italic -{n, begin} -\series default -\shape default - or with -\series bold -\shape italic -index -\series default -\shape default -. -\end_layout - -\begin_layout Subsection* -value (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: value(:) -\end_layout - -\begin_layout Standard -Defines the value of each level of a vertical axis. - The array size must be equal to the value of the attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n -\end_layout - -\end_inset - -. - If the label is provided then only the label will be written into a file - and not the axis value and the axis boundaries. -\end_layout - -\begin_layout Subsection* -bounds (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -2D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds(:,:) -\end_layout - -\begin_layout Standard -Defines the boundaries of each level of a vertical axis. - The dimensions of the array must be -\begin_inset Formula $2\times n$ -\end_inset - -. -\end_layout - -\begin_layout Subsection* -bounds_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: bounds_name -\end_layout - -\begin_layout Standard -Defines the name of axis boundaries as it will appear in a file. - If not defined, the name will be generated automatically based on the axis - id. -\end_layout - -\begin_layout Subsection* -prec (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: prec -\end_layout - -\begin_layout Standard -Defines the precision in bytes of axis value and boundaries as it will be - written into an output file. - Available values are: 2 (integer), 4 (float single precision) and 8 (float - double precision). - The default value is 8. -\end_layout - -\begin_layout Subsection* -label (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER, ALLOCATABLE :: label(:) -\end_layout - -\begin_layout Standard -Defines the label of an axis. - The size of the array must be equal to the value of the attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n -\end_layout - -\end_inset - -. - If the label is provided then only the label will be written into a file - and not the axis value and the axis boundaries. -\end_layout - -\begin_layout Subsection* -data_begin (optional): -\emph on - integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_begin -\end_layout - -\begin_layout Standard -Defines the beginning index of local field data owned by each process. - The attribute is an offset relative to the local axis, so the value can - be negative. - A negative value indicates that only some valid part of the data will extracted -, for example in the case of a ghost cell. - A positive value indicates that the local domain is greater than the data - stored in memory. - The 0-value means that the local domain matches the data in memory. - The default value is 0. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_begin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_n -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_n (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_n -\end_layout - -\begin_layout Standard -Defines the size of local field data. - The attribute can take value starting from 0 (no data on a process). - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n -\end_layout - -\end_inset - -. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_begin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_n -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_index (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_index -\end_layout - -\begin_layout Standard -In case of a compressed vertical axis, the attribute defines the position - of data points stored in the memory. - The array size has to be equal to -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_n -\end_layout - -\end_inset - -. - For example, for a local axis of size -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -n=3 -\end_layout - -\end_inset - - and local data size of -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_n=5 -\end_layout - -\end_inset - -, if -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_index=(/ -1, 2, 1, 0, -1 /) -\end_layout - -\end_inset - - then the first and the last data points are ghosts and only the three middle - values will be written in the reversed order. -\end_layout - -\begin_layout Subsection* -mask (optional): -\emph on -1D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask(:) -\end_layout - -\begin_layout Standard -Defines the mask of the local axis. - The masked value will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. -\end_layout - -\begin_layout Subsection* -n_distributed_partition (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: n_distributed_partition -\end_layout - -\begin_layout Standard -Defines the number of local axes in case if the axis is generated automatically - by XIOS. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -axis_ref (optional): string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: axis_ref -\end_layout - -\begin_layout Standard -Defines the reference of an axis. - All attributes will be inherited from the referenced axis with the classical - inheritance mechanism. - The value assigned to the referenced axis will be transmitted to the current - axis. -\end_layout - -\begin_layout Subsection* -positive (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {up, down} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: positive -\end_layout - -\begin_layout Standard -Defines the positive direction for fields representing height or depth. -\end_layout - -\begin_layout Subsection* -axis_type (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {X, Y, Z, T} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: axis_type -\end_layout - -\begin_layout Standard -Defines the type of an axis. - The values correspond to the following axis types: -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -X: -\series default -\shape default - longitude -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -\emph on -Y -\emph default -: -\series default -\shape default - latitude -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -\emph on -Z -\emph default -: -\series default -\shape default - vertical axis -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -T: -\series default -\shape default -time axis. -\end_layout - -\begin_layout Subsection* -comment (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. - -\end_layout - -\begin_layout Section -Domain attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a horizontal domain. - This attribute may be used in case of multiple domains defined in the same - file. - In this case, the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -name -\end_layout - -\end_inset - - attribute will be suffixed to the longitude and latitude dimensions and - axis name. - If the domain name is not provided, it will be generated automatically. -\end_layout - -\begin_layout Subsection* -standard_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: standard_name -\end_layout - -\begin_layout Standard -Defines the standard name of a domain as it will appear in the domain's - metadata in an output file. - -\end_layout - -\begin_layout Subsection* -long_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: long_name -\end_layout - -\begin_layout Standard -Defines the long name of a domain as it will appear in the domain's metadata - in an output file. - -\end_layout - -\begin_layout Subsection* -type (mandatory): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -enumeration {rectilinear, curvilinear, unstructured, gaussian} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Defines the type of a grid. -\end_layout - -\begin_layout Subsection* -dim_i_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: dim_i_name -\end_layout - -\begin_layout Standard -Defines the name of the first domain dimension as it will appear in the - file's metadata. -\end_layout - -\begin_layout Subsection* -dim_j_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: dim_j_name -\end_layout - -\begin_layout Standard -Defines the name of the second domain dimension as it will appear in file's - metadata. -\end_layout - -\begin_layout Subsection* -ni_glo (mandatory): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: ni_glo -\end_layout - -\begin_layout Standard -Defines the size of the first dimension of the global domain. -\end_layout - -\begin_layout Subsection* -nj_glo (mandatory): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: nj_glo -\end_layout - -\begin_layout Standard -Defines the size of the second dimension of the global domain. -\end_layout - -\begin_layout Subsection* -ibegin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: ibegin -\end_layout - -\begin_layout Standard -Defines the beginning index of the first dimension of a local domain. - The attribute takes value between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo-1 -\end_layout - -\end_inset - -. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -ni (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: ni -\end_layout - -\begin_layout Standard -Defines the size of the first dimension of a local domain. - The attribute takes value between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo -\end_layout - -\end_inset - -. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -jbegin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: jbegin -\end_layout - -\begin_layout Standard -Defines the beginning index of the second dimension of a local domain. - The attribute takes value between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo-1 -\end_layout - -\end_inset - -. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -nj (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: nj -\end_layout - -\begin_layout Standard -Defines the size of the second dimension of a local domain. - he attribute takes value between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - -. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -lonvalue_1d (optional): -\emph on -1D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lonvalue(:) -\end_layout - -\begin_layout Standard -Defines the longitude values of a local domain. - For a cartesian grid, the array size should be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\end_layout - -\end_inset - -. - For a curvilinear grid, the array size should be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\begin_inset Formula $\times$ -\end_inset - -nj -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -lonvalue_2d (optional): -\emph on -2D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lonvalue(:,:) -\end_layout - -\begin_layout Standard -Defines the longitude values of a local domain. - For cartesian and curvilinear grids the array size should be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\begin_inset Formula $\times$ -\end_inset - -nj -\end_layout - -\end_inset - -. - Only lonvalue_1d or lonvalue_2d can be defined. - Also the layout of latitude and longitude should be in conformance with - each other: either 1D or 2D. -\end_layout - -\begin_layout Subsection* -latvalue_1d (optional): -\emph on -1D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: latvalue(:) -\end_layout - -\begin_layout Standard -Defines the latitude values of a local domain. - For a cartesian grid, the size of the array will be nj. - For a curvilinear grid, the size of the array will be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\begin_inset Formula $\times$ -\end_inset - -nj -\end_layout - -\end_inset - -. - -\end_layout - -\begin_layout Subsection* -latvalue_2d (optional): -\emph on -2D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: latvalue(:,:) -\end_layout - -\begin_layout Standard -Defines the latitude values of a local domain. - For cartesian and curvilinear grids the array size should be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\begin_inset Formula $\times$ -\end_inset - -nj -\end_layout - -\end_inset - -. - Only latvalue_1d or latvalue_2d can be defined. - Also the layout of latitude and longitude should be in conformance with - each other: either 1D or 2D. -\end_layout - -\begin_layout Subsection* -lon_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: lon_name -\end_layout - -\begin_layout Standard -Defines the longitude name as it will appear in an output file. -\end_layout - -\begin_layout Subsection* -lat_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: lat_name -\end_layout - -\begin_layout Standard -Defines the latitude name as it will appear in an output file. -\end_layout - -\begin_layout Subsection* -nvertex (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: nvertex -\end_layout - -\begin_layout Standard -Defines the maximum number of vertices for a grid. - The attribute is required for specifying the cell boundaries of unstructured - meshes. -\end_layout - -\begin_layout Subsection* -bounds_lon_1d (optional): -\emph on -2D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lon(:,:) -\end_layout - -\begin_layout Standard -Defines the longitude values of domain vertexes. - The attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nvertex -\end_layout - -\end_inset - - must be also defined. - The array dimensions must be -\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}$ -\end_inset - -. -\end_layout - -\begin_layout Subsection* -bounds_lon_2d (optional): -\emph on -3D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lon(:,:,:) -\end_layout - -\begin_layout Standard -Defines the longitude values of domain vertexes. - The attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nvertex -\end_layout - -\end_inset - - must be also defined. - This attribute is useful when lonvalue_2d is defined. - The array dimensions must be -\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}\times\textbf{nj}$ -\end_inset - -. - Either bounds_lon_1d or bounds_lon_2d can be defined. -\end_layout - -\begin_layout Subsection* -bounds_lat_1d (optional): -\emph on -2D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lat(:,:) -\end_layout - -\begin_layout Standard -Defines the latitude values of domain vertexes. - The attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nvertex -\end_layout - -\end_inset - - must be also defined. - The array dimensions must be -\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}$ -\end_inset - -. -\end_layout - -\begin_layout Subsection* -bounds_lat_2d (optional): -\emph on -3D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lat(:,:) -\end_layout - -\begin_layout Standard -Defines the latitude values of domain vertexes. - The attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nvertex -\end_layout - -\end_inset - - must be also defined. - The attribute is useful when lonvalue_2d is defined. - The array dimensions must be -\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}\times\textbf{nj}$ -\end_inset - -. - Either bounds_lon_1d or bounds_lon_2d can be defined. -\end_layout - -\begin_layout Subsection* -bounds_lon_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: lon_name -\end_layout - -\begin_layout Standard -Defines the longitude name of domain vertexes as it will appear in an output - file. -\end_layout - -\begin_layout Subsection* -bounds_lat_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: lat_name -\end_layout - -\begin_layout Standard -Defines the latitude name of domain vertexes as it will appear in an output - file. -\end_layout - -\begin_layout Subsection* -area (optional): -\emph on -2D-array of double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: area(:,:) -\end_layout - -\begin_layout Standard -The area of cells. - The size of the array must be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\begin_inset Formula $\times$ -\end_inset - -nj -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -prec (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: prec -\end_layout - -\begin_layout Standard -Defines the precision in bytes of domain attributes. - Available values are: 2 (integer), 4 (float single precision) and 8 (float - double precision). - The default value of 8. -\end_layout - -\begin_layout Subsection* -data_dim (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: datadim -\end_layout - -\begin_layout Standard -Defines how a field is stored on memory for the client code. - The value can be either -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - - or -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -2 -\end_layout - -\end_inset - -. - The value of -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - - indicates that the horizontal layer of the field is stored as a 1D array. - The value of -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -2 -\end_layout - -\end_inset - - indicates that the horizontal layer is stored as a 2D array. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -data_ibegin (optional): -\emph on - integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_ibegin -\end_layout - -\begin_layout Standard -Defines the beginning index of field data for the first dimension. - This attribute is an offset relative to the local domain, so the value - can be negative. - A negative value indicates that only some valid part of the data will extracted -, for example in the case of a ghost cell. - A positive value indicates that the local domain is greater than the data - stored in memory. - A 0-value means that the local domain matches the data in memory. - The default value is 0. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_ibegin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_ni -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_ni (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_ni -\end_layout - -\begin_layout Standard -Defines the size of field data for the first dimension. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni -\end_layout - -\end_inset - -. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_ibegin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_ni -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_jbegin (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_jbegin -\end_layout - -\begin_layout Standard -Defines the beginning index of field data for the second dimension. - The attribute is taken into account only if -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - data_dim=2 -\end_layout - -\end_inset - -. - The attribute is an offset relative to the local domain, so the value can - be negative. - A negative value indicate that only some valid part of the data will extracted, - for example in case of ghost cell. - A positive value indicate that the local domain is greater than the data - stored in memory. - The 0-value means that the local domain matches the data in memory. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_jbegin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_nj -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_nj (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_nj -\end_layout - -\begin_layout Standard -Defines the size of field data for the second dimension. - The attribute is taken account only if -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_dim=2 -\end_layout - -\end_inset - -. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj -\end_layout - -\end_inset - -. - The attributes -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_jbegin -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_nj -\end_layout - -\end_inset - - must be defined together. -\end_layout - -\begin_layout Subsection* -data_i_index (optional): -\emph on -1D-array of integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_i_index(:) -\end_layout - -\begin_layout Standard -In case of a compressed horizontal domain, define the data indexation for - the first dimension. - The array size must be -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_n -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -data_j_index (optional): -\emph on -1D-array of integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: data_j_index(:) -\end_layout - -\begin_layout Standard -In case of a compressed horizontal domain, defines the data indexation for - the second dimension. - The attribute is meaningful only if -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -data_dim=2 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -mask_1d (optional): -\emph on -1D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask(:) -\end_layout - -\begin_layout Standard -Defines the 1D mask of a local domain. - The masked value will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - This value is useful in case a field is stored linearly in memory. - By default none of the values are masked. -\end_layout - -\begin_layout Subsection* -mask_2d (optional): -\emph on -2D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask(:,:) -\end_layout - -\begin_layout Standard -Defines the 2D mask of a local domain. - The masked values will be replaced by the value of the field attribute - -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default, none of the values are masked. - Only mask_2d or mask_1d can be defined. -\end_layout - -\begin_layout Subsection* -domain_ref (optional): string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: domain_ref -\end_layout - -\begin_layout Standard -Defines the reference to a domain. - All attributes are inherited from the referenced domain with the classic - inheritance mechanism. - The value assigned to the referenced domain is transmitted to to current - domain. -\end_layout - -\begin_layout Subsection* -i_index (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: i_index(:) -\end_layout - -\begin_layout Standard -Defines the global index of the first dimension of a local domain held by - a process. - By default the size of the array is equal to -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni*nj -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -j_index (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: j_index(:) -\end_layout - -\begin_layout Standard -Defines the global index of the second dimension of a local domain held - by a process. - By default the size of the array is equal to -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni*nj -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -comment (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. -\end_layout - -\begin_layout Section -Grid attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a grid. -\end_layout - -\begin_layout Subsection* -description (optional): string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: description -\end_layout - -\begin_layout Standard -Defines the descriptions of a grid. -\end_layout - -\begin_layout Subsection* -mask_1d (optional): -\emph on -1D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_1d(:) -\end_layout - -\begin_layout Standard -Defines the mask of a local 1D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_2d (optional): -\emph on -2D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_2d(:,:) -\end_layout - -\begin_layout Standard -Defines the mask of a local 2D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_3d (optional): -\emph on -3D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_3d(:,:,:) -\end_layout - -\begin_layout Standard -Define the mask of a local 3D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_4d (optional): -\emph on -4D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_4d(:,:,:) -\end_layout - -\begin_layout Standard -Define the mask of a local 4D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_5d (optional): -\emph on -5D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_5d(:,:,:) -\end_layout - -\begin_layout Standard -Define the mask of a local 5D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_6d (optional): -\emph on -6D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_6d(:,:,:) -\end_layout - -\begin_layout Standard -Define the mask of a local 6D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -mask_7d (optional): -\emph on -7D-array of bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: mask_7d(:,:,:) -\end_layout - -\begin_layout Standard -Define the mask of a local 7D grid. - Masked values will be replaced by the value of the field attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -default_value -\end_layout - -\end_inset - - in an output file. - By default none of the value are masked. -\end_layout - -\begin_layout Subsection* -comment (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. -\end_layout - -\begin_layout Section -Field attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a field as it will appear in an output file. - If not present, the identifier -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - - will be substituted. -\end_layout - -\begin_layout Subsection* -standard_name (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: standard_name -\end_layout - -\begin_layout Standard -Defines the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -standard_name -\end_layout - -\end_inset - - attribute as it will appear in the metadata of an output file. -\end_layout - -\begin_layout Subsection* -long_name (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: long_name -\end_layout - -\begin_layout Standard -Defines the long name as it will appear in the metadata of an output file. -\end_layout - -\begin_layout Subsection* -expr (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: expr -\end_layout - -\begin_layout Standard -Defines the expression for arithmetic or time-integration operations performed - on a field. - For example if -\series bold -expr= -\begin_inset Quotes erd -\end_inset - -sqrt(@temp2 - pow(@temp, 2)) -\begin_inset Quotes erd -\end_inset - - -\series default - then the variance will be calculated on the incoming flux of the field - -\series bold -temp -\series default - (given that field temp2 that holds the square of temp was correctly defined). - -\end_layout - -\begin_layout Subsection* -unit (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: unit -\end_layout - -\begin_layout Standard -Defines the unit of a field. -\end_layout - -\begin_layout Subsection* -operation (mandatory): enumeration -\emph on - {once, instant, average, maximum, minimum, accumulate} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Standard -Defines the temporal operation applied to a field. -\end_layout - -\begin_layout Subsection* -freq_op (optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: freq_op -\end_layout - -\begin_layout Standard -Defines the sampling frequency of a temporal operation, so that field values - will be used for temporal sampling at frequency -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -freq_op -\end_layout - -\end_inset - -. - It is useful for sub-processes called at different frequency in a model. - The default value is equal to the file attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -output_freq -\end_layout - -\end_inset - - for -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -instant -\end_layout - -\end_inset - - operations and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1ts -\end_layout - -\end_inset - - (1 time step) otherwise. -\end_layout - -\begin_layout Subsection* -freq_offset (optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: freq_offset -\end_layout - -\begin_layout Standard -Defines the offset when -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -freq_op -\end_layout - -\end_inset - - is defined. - Accepted values lie between -\series bold -0 -\series default - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -freq_op -\end_layout - -\end_inset - -. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -freq_op - 1ts -\end_layout - -\end_inset - - for fields in the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -write -\end_layout - -\end_inset - - mode and -\series bold -0 -\series default - for fields in the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -read -\end_layout - -\end_inset - - mode. -\end_layout - -\begin_layout Subsection* -level (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: level -\end_layout - -\begin_layout Standard -Defines the output level of a field. - The field will be output only if the file attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - output_level -\begin_inset Formula $\geq$ -\end_inset - -level -\end_layout - -\end_inset - -. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -prec (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: prec -\end_layout - -\begin_layout Standard -Defines the precision in bytes of a field in an output file. - Available values are: 2 (integer), 4 (float single precision) and 8 (float - double precision). - The default value of 8. -\end_layout - -\begin_layout Subsection* -enabled (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: enabled -\end_layout - -\begin_layout Standard -Defines if a field must be output or not. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -true -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -check_if_active (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: check_if_active -\end_layout - -\begin_layout Standard -Sets a check if a field will be used at a given time step. - Activating the check may improve performance for fields which are not used - frequently, while it can detoriate performance for fields used at each - time step. - The default value is false. -\end_layout - -\begin_layout Subsection* -read_access (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: read_access -\end_layout - -\begin_layout Standard -Defines whether a field can be read from the model or not. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -false -\end_layout - -\end_inset - -. - Note that for fields belonging to a file in -\series bold -\emph on -read -\series default -\emph default - -\series bold -mode -\series default -, this attribute is always -\series bold -true -\series default -. -\end_layout - -\begin_layout Subsection* -field_ref (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: field_ref -\end_layout - -\begin_layout Standard -Defines the field reference. - All attributes will be inherited from the referenced field via the classical - inheritance mechanism. - The values assigned to the referenced field will be transmitted to the - current field to perform temporal operation. -\end_layout - -\begin_layout Subsection* -grid_ref (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: grid_ref -\end_layout - -\begin_layout Standard -Defines the field grid. - Note that only either -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -grid_ref -\end_layout - -\end_inset - - or a combination of -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -domain_ref -\end_layout - -\end_inset - -, -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -scalar_ref -\end_layout - -\end_inset - - or -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -axis_ref -\end_layout - -\end_inset - - can be specified. -\end_layout - -\begin_layout Subsection* -domain_ref (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: domain_ref -\end_layout - -\begin_layout Standard -Defines the field domain. - If the attribute is defined, the attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -grid_ref -\end_layout - -\end_inset - - must not be specified. -\end_layout - -\begin_layout Subsection* -axis_ref (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: axis_ref -\end_layout - -\begin_layout Standard -Defines an axis for the current field. - If the attribute is defined, the attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -grid_ref -\end_layout - -\end_inset - - must not be specified. -\end_layout - -\begin_layout Subsection* -scalar_ref (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: scalar_ref -\end_layout - -\begin_layout Standard -Defines a scalar domain for the current field. - If the attribute is defined, the attribute -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -grid_ref -\end_layout - -\end_inset - - must not be specified. -\end_layout - -\begin_layout Subsection* -grid_path (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: grid_path -\end_layout - -\begin_layout Standard -Defines the way operations pass from a grid to other grids. -\end_layout - -\begin_layout Subsection* -default_value (optional): -\emph on -double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: default_value -\end_layout - -\begin_layout Standard -Defines the value which will be used instead of missing field data. - If no value is provided, the missing data will be replaced by uninitialized - values what can lead to undefined behavior. -\end_layout - -\begin_layout Subsection* -valid_min (optional): -\emph on -double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: valid_min -\end_layout - -\begin_layout Standard -All field values below -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -valid_min -\end_layout - -\end_inset - - attribute value will be set to missing value. -\end_layout - -\begin_layout Subsection* -valid_max (optional): -\emph on -double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: valid_max -\end_layout - -\begin_layout Standard -All field values above -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -valid_max -\end_layout - -\end_inset - - attribute value will be set to missing value. -\end_layout - -\begin_layout Subsection* -detect_missing_value (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL: detect_missing_value -\end_layout - -\begin_layout Standard -When XIOS detects a default value in a field, it does not take into account - the value during arithmetic operations such as averaging, minimum, maximum, - etc. -\end_layout - -\begin_layout Subsection* -add_offset (optional): -\emph on -double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION: add_offset -\end_layout - -\begin_layout Standard -Sets the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -add_offset -\end_layout - -\end_inset - - metadata CF attribute in an output file. - In output, the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -add_offset -\end_layout - -\end_inset - - value will be subtracted from the field values. -\end_layout - -\begin_layout Subsection* -scale_factor: -\emph on -double -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION: scale_factor -\end_layout - -\begin_layout Standard -Sets the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -scale_factor -\end_layout - -\end_inset - - metadata CF attribute in an output file. - In output, the field values will be divided by the -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -scale_factor -\end_layout - -\end_inset - - value. -\end_layout - -\begin_layout Subsection* -compression_level (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: compression_level -\end_layout - -\begin_layout Standard -Defines whether a field should be compressed using NetCDF-4 built-in compression. - The compression level must range from 0 to 9. - A higher compression level means a better compression at the cost of using - more processing power. - The default value is inherited from the file attribute -\series bold -compression_level -\series default -. -\end_layout - -\begin_layout Subsection* -indexed_output (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: indexed_output -\end_layout - -\begin_layout Standard -Defines whether field data must be output as an indexed grid instead of - a full grid whenever possible. - The default value is -\series bold -\emph on -false -\series default -\emph default -. -\end_layout - -\begin_layout Subsection* -ts_enabled (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: ts_enabled -\end_layout - -\begin_layout Standard -Defines whether a field can be output as a timeseries. - The default value is -\series bold -\emph on -false -\series default -\emph default -. -\end_layout - -\begin_layout Subsection* -ts_split_freq (optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: ts_split_freq -\end_layout - -\begin_layout Standard -Defines the splitting frequency that should be used for a timeseries if - it has been requested. - By default the attribute value is inherited from the file attribute -\series bold -split_freq -\series default -. -\end_layout - -\begin_layout Subsection* -cell_methods (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: cell_methods -\end_layout - -\begin_layout Standard -Defines the cell methods field attribute. -\end_layout - -\begin_layout Subsection* -cell_methods_mode (optional): enumeration -\emph on - {overwrite, prefix, suffix, none} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: cell_methods_mode -\end_layout - -\begin_layout Standard -Defines the cell methods mode of a field. -\end_layout - -\begin_layout Subsection* -comment (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. -\end_layout - -\begin_layout Section -Variable attribute reference -\end_layout - -\begin_layout Subsection* -name (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a variable as it will appear in an output file. - If not present, the variable -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - - will be used. -\end_layout - -\begin_layout Subsection* -type (mandatory): enumeration {bool, int, int32, int16, int64, float, double, - string} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Defines the type of a variable. - Note that the -\series bold -\emph on -int -\series default -\emph default - type is a synonym for -\series bold -\emph on -int32 -\series default -\emph default -. -\end_layout - -\begin_layout Subsection* -ts_target (optional): enumeration {file, field, both, none} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: ts_target -\end_layout - -\begin_layout Section -File attribute reference -\end_layout - -\begin_layout Subsection* -name (mandatory): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name -\end_layout - -\begin_layout Standard -Defines the name of a file. -\end_layout - -\begin_layout Subsection* -description (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: description -\end_layout - -\begin_layout Standard -Defines the description of a file. -\end_layout - -\begin_layout Subsection* -name_suffix (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: name_suffix -\end_layout - -\begin_layout Standard -Defines a suffix added to the file name. -\end_layout - -\begin_layout Subsection* -min_digits (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: min_digits -\end_layout - -\begin_layout Standard -For the -\series bold -multiple_file -\series default - mode defines the minimum number of digits of the suffix describing the - server rank which will be appended to the file name. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - (no server rank suffix is added). -\end_layout - -\begin_layout Subsection* -output_freq (mandatory): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: output_freq -\end_layout - -\begin_layout Standard -Defines the output frequency for the current file. -\end_layout - -\begin_layout Subsection* -output_level (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: output_level -\end_layout - -\begin_layout Standard -Defines the output level for all fields of the current file. - The field is output only if the field attribute -\series bold -level -\series default - is less or equal to the file attribute -\series bold -output_level -\series default -. -\end_layout - -\begin_layout Subsection* -sync_freq (optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: sync_freq -\end_layout - -\begin_layout Standard -Defines the frequency for flushing the current file onto a disk. - It may result in poor performances but data will be written even if a file - is not yet closed. -\end_layout - -\begin_layout Subsection* -split_freq (optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: split_freq -\end_layout - -\begin_layout Standard -Defines the frequency for splitting the current file. - The start and end dates will be added to the file name (see -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout - -\series bold -\emph on -split_freq_format -\end_layout - -\end_inset - - attribute). - By default no splitting is done. -\end_layout - -\begin_layout Subsection* -split_freq_format (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: split_freq_format -\end_layout - -\begin_layout Standard -Defines the format of the split date suffixed to a file. - It can contain any character, -\emph on - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%y -\end_layout - -\end_inset - - -\emph default - will be replaced by the year (4 characters), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%mo -\end_layout - -\end_inset - - by the month (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%d -\end_layout - -\end_inset - - by the day (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%h -\end_layout - -\end_inset - - by the hour (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%mi -\end_layout - -\end_inset - - by the minute (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%s -\end_layout - -\end_inset - - by the second (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%S -\end_layout - -\end_inset - - by the number of seconds since the time origin and -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%D -\end_layout - -\end_inset - - by the number of full days since the time origin. - The default behavior is to create a suffix with the date until the smaller - non zero unit. - For example, in one day split frequency, the hour, minute and second will - not appear in the suffix, only year, month and day. -\end_layout - -\begin_layout Subsection* -split_start_offset(optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: split_start_offset -\end_layout - -\begin_layout Standard -Defines the offset of file splitting. - -\end_layout - -\begin_layout Subsection* -split_end_offset(optional): -\emph on -duration -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -TYPE(xios_duration) :: split_end_offset -\end_layout - -\begin_layout Subsection* -split_last_date (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: split_last_date -\end_layout - -\begin_layout Subsection* -enabled (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: enabled -\end_layout - -\begin_layout Standard -Defines if a file must be written/read or not. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -true -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -mode (optional): -\emph on -enumeration {read, write} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: mode -\end_layout - -\begin_layout Standard -Defines whether a file will be read or written. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -write -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -type (mandatory): -\emph on -enumeration {one_file, multiple_file} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Defines the type of a file: -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -multiple_file -\end_layout - -\end_inset - -: one file by server using sequential netcdf writing, -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -one_file -\end_layout - -\end_inset - -: one single global file is wrote using netcdf4 parallel access. -\end_layout - -\begin_layout Subsection* -format (optional): -\emph on -enumeration {netcdf4, netcdf4_classic} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: format -\end_layout - -\begin_layout Standard -Define the format of a file: -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -netcdf4 -\end_layout - -\end_inset - -: the HDF5 format will be used, -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -netcdf4 -\emph default -_ -\emph on -classic -\end_layout - -\end_inset - -: the classic NetCDF format will be used. - The default value is -\series bold -\emph on -netcdf4 -\series default -\emph default -. - Note that the -\series bold -\emph on -netcdf4 -\emph default -_ -\emph on -classic -\series default -\emph default - format can be used with the attribute -\series bold -type -\series default - set to -\series bold -\emph on -one_file -\series default -\emph default - only if the NetCDF4 library was compiled with Parallel NetCDF support (--enable --pnetcdf). -\end_layout - -\begin_layout Subsection* -par_access (optional): -\emph on -enumeration {collective, independent} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: par_access -\end_layout - -\begin_layout Standard -For parallel writing, defines which type of MPI calls will be used. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -collective -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -read_metadata_par (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: read_metadata_par -\end_layout - -\begin_layout Standard -For files in the read mode, defines if parallel or serial I/O will be used - by model processes for reading file metadata. - The default value is false implying serial I/O for reading metadata. -\end_layout - -\begin_layout Subsection* -convention (optional): -\emph on -enumeration {CF, UGRID} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: convention -\end_layout - -\begin_layout Standard -Defines the file conventions. - By default the CF conventions are followed. -\end_layout - -\begin_layout Subsection* -convention_str (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: convention_str -\end_layout - -\begin_layout Standard -Defines the -\series bold -Conventions -\series default -attribute to be added to file global attributes. -\end_layout - -\begin_layout Subsection* -append (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: append -\end_layout - -\begin_layout Standard -Defines whether data is to be appended at the end of a file if it already - exists or if the existing file is to be overwritten. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -false -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -compression_level (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: compression_level -\end_layout - -\begin_layout Standard -Defines whether the fields should be compressed using NetCDF-4 built-in - compression by default. - The compression level must range from 0 to 9. - A higher compression level means a better compression at the cost of using - more processing power. - The default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout - -\emph on -0 -\end_layout - -\end_inset - - (no compression). -\end_layout - -\begin_layout Subsection* -time_counter (optional): -\emph on -enumeration {centered, instant, record, exclusive, centered_exclusive, instant_e -xclusive, none} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_counter -\end_layout - -\begin_layout Standard -Defines how the -\begin_inset Quotes eld -\end_inset - -time_counter -\begin_inset Quotes erd -\end_inset - - variable will be output: -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -centered -\series default -\emph default -: use centered times (default option for all field operations except for - instant) -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -instant -\series default -\emph default -: use instant times (default option for field operation -\series bold -instant -\series default -) -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -record -\series default -\emph default -: use record indexes -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -centered_exclusive: -\series default -\shape default -do not include centered times into an output file -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -\emph on -instant_ -\emph default -exclusive: -\series default -\shape default -do not include instant times into an output file -\end_layout - -\begin_layout Itemize - -\series bold -\shape italic -exclusive: -\series default -\shape default -include neither instant times nor centered times into an output file -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -none -\series default -\emph default -: do not output the variable. -\end_layout - -\begin_layout Standard -The default value is -\series bold -\emph on -centered -\series default -\emph default -. -\end_layout - -\begin_layout Subsection* -time_counter_name (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_counter_name -\end_layout - -\begin_layout Standard -Define the name of a time counter. -\end_layout - -\begin_layout Subsection* -timeseries (optional): -\emph on -enumeration {none, only, both, exclusive} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_series -\end_layout - -\begin_layout Standard -Defines whether the timeseries must be output: -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -none -\series default -\emph default -: no timeseries is outputted, only the regular file -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -only -\series default -\emph default -: only the timeseries is outputted, the regular file is not created -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -both -\series default -\emph default -: both the timeseries and the regular file are outputted. -\end_layout - -\begin_layout Itemize - -\series bold -\emph on -exclusive -\series default -\emph default -: the timeseries is outputted and a regular file is created with only the - fields which were not marked for output as a timeseries (if any). -\end_layout - -\begin_layout Standard -The default value is -\series bold -\emph on -none -\series default -\emph default -. -\end_layout - -\begin_layout Subsection* -ts_prefix (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: ts_prefix -\end_layout - -\begin_layout Standard -Defines the prefix to use for the name of the timeseries files. - By default the file name will be used. -\end_layout - -\begin_layout Subsection* -time_units (optional): -\emph on -enumeration {seconds, days} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_units -\end_layout - -\begin_layout Subsection* -record_offset (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: record_offset -\end_layout - -\begin_layout Standard -Defines the offset of a record from the beginning record. - The default value is 0. -\end_layout - -\begin_layout Subsection* -cyclic (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: cyclic -\end_layout - -\begin_layout Standard -If the option is activated for fields to be read, then upon reaching the - last time record, reading will continue -\begin_inset Quotes eld -\end_inset - -cycle -\begin_inset Quotes erd -\end_inset - - at the first time record. - The default value is false. -\end_layout - -\begin_layout Subsection* -time_stamp_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_stamp_name -\end_layout - -\begin_layout Standard -Defines the timestamp name of the date and time when the program was executed - which will be written into an output file. - The default value is -\begin_inset Quotes eld -\end_inset - -timeStamp -\begin_inset Quotes erd -\end_inset - -. -\end_layout - -\begin_layout Subsection* -time_stamp_format (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: time_stamp_format -\end_layout - -\begin_layout Standard -Defines the timestamp format of the date and time when the program was executed - to be written into an output file. - It can contain any character. - -\emph on - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%Y -\end_layout - -\end_inset - - -\emph default - will be replaced by the 4-digit year (4 digits), while -\emph on - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%y -\end_layout - -\end_inset - - -\emph default - will be replaced by the 2-digit year. - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%m -\end_layout - -\end_inset - - will be by the 2-digit month, while %b will be replaced by the 3-character - month. - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%d -\end_layout - -\end_inset - - will be replaced by the day (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%H -\end_layout - -\end_inset - - by the hour (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%M -\end_layout - -\end_inset - - by the minute (2 char), -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%S -\end_layout - -\end_inset - - by the number of seconds, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -%D -\end_layout - -\end_inset - - by the date in the MM/DD/YY format. -\end_layout - -\begin_layout Subsection* -uuid_name (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: uuid_name -\end_layout - -\begin_layout Standard -Defines the name of file's UUID. -\end_layout - -\begin_layout Subsection* -uuid_format (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: uuid_format -\end_layout - -\begin_layout Standard -Defines the format of file's UUID. -\end_layout - -\begin_layout Subsection* -comment (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -string -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: comment -\end_layout - -\begin_layout Standard -Allows a user to set a comment. -\end_layout - -\begin_layout Section -Transformation attribute reference -\end_layout - -\begin_layout Subsection -reduce_scalar_to_scalar -\end_layout - -\begin_layout Subsection* -operation (mandatory): -\emph on -enumeration {min, max, sum, average} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Standard -Defines a reduction operation performed on a scalar across model processes. - (It is analogous to MPI_Allreduce.) -\end_layout - -\begin_layout Subsection -extract_axis_to_scalar -\end_layout - -\begin_layout Subsection* -position: -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: position -\end_layout - -\begin_layout Standard -Global index of a point on an axis to be extracted into a scalar. -\end_layout - -\begin_layout Standard - -\end_layout - -\begin_layout Subsection -interpolate_axis -\end_layout - -\begin_layout Subsection* -type (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Defines the interpolation type on an axis. - For now only polynomial interpolation is available. -\end_layout - -\begin_layout Subsection* -order (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: order -\end_layout - -\begin_layout Standard -Defines the order of interpolation. - The default value is 2. -\end_layout - -\begin_layout Subsection* -coordinate (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: coordinate -\end_layout - -\begin_layout Standard -Defines the coordinate associated with an axis on which interpolation will - be performed. -\end_layout - -\begin_layout Subsection -reduce_axis_to_axis -\end_layout - -\begin_layout Subsection* -operation (mandatory): -\emph on -enumeration {min, max, sum, average} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Standard -Defines a reduction operation performed on an axis across model processes. - (It is analogous to MPI_Allreduce.) -\end_layout - -\begin_layout Subsection -reduce_axis_to_scalar -\end_layout - -\begin_layout Standard -Reduces data defined on an axis into a scalar value. -\end_layout - -\begin_layout Subsection* -operation (mandatory): -\emph on -enumeration {min, max, sum, average} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Subsection -zoom_axis -\end_layout - -\begin_layout Subsection* -begin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: begin -\end_layout - -\begin_layout Standard -Defines the beginning index of a zoomed region on a global axis. - The attribute value should be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo-1 -\end_layout - -\end_inset - - of the associated axis. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Subsection* -n (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: n -\end_layout - -\begin_layout Standard -Defines the size of a zoomed region on a global axis. - The attribute value should be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - - of the associated axis. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - - of the associated axis. -\end_layout - -\begin_layout Subsection -compute_connectivity_domain -\end_layout - -\begin_layout Subsection* -n_neighbor: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -1D-array of integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: n_neighbor(:) -\end_layout - -\begin_layout Subsection* -local_neighbor: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -2D-array of integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: local_neighbor(:,:) -\end_layout - -\begin_layout Subsection* -n_neighbor_max: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: n_neighbor_max -\end_layout - -\begin_layout Subsection -extract_domain_to_axis -\end_layout - -\begin_layout Subsection* -position (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: position -\end_layout - -\begin_layout Standard -Defines the index on a domain starting which an axis will be extracted along - the direction specified with the -\series bold -direction -\series default - attribute. -\end_layout - -\begin_layout Subsection* -direction (mandatory): -\emph on -enumeration {iDir, jDir} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: direction -\end_layout - -\begin_layout Standard -Defines the domain dimension along which an axis will be extracted. -\end_layout - -\begin_layout Subsection -interpolate_domain -\end_layout - -\begin_layout Subsection* -file (optional): -\emph on -string -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Define a file which contains the weight values for interpolation from domain - source to domain destination. - If not specified, the internal interpolation module will be used. -\end_layout - -\begin_layout Subsection* -order (optional): -\emph on -integer -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: order -\end_layout - -\begin_layout Standard -Defines the order of interpolation. - This attribute is only for internal interpolation module. - The default value is 2. -\end_layout - -\begin_layout Subsection -reduce_domain_to_axis -\end_layout - -\begin_layout Subsection* -direction: -\emph on -enumeration {iDir, jDir} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: direction -\end_layout - -\begin_layout Standard -Defines the domain dimension along which a reduction of the domain into - an axis will be performed. -\end_layout - -\begin_layout Subsection* -operation (mandatory): -\emph on -enumeration {min, max, sum, average} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Subsection* -local: -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: local -\end_layout - -\begin_layout Standard -Defines whether the reduction should be performed locally on data owned - by each process. -\end_layout - -\begin_layout Subsection -reduce_domain_to_scalar -\end_layout - -\begin_layout Standard -Reduces data defined on a domain into a scalar value. -\end_layout - -\begin_layout Subsection* -operation (mandatory): -\emph on -enumeration {min, max, sum, average} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: operation -\end_layout - -\begin_layout Subsection* -local: -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: local -\end_layout - -\begin_layout Standard -Defines whether the reduction should be performed locally on data owned - by each process. -\end_layout - -\begin_layout Subsection -reorder_domain -\end_layout - -\begin_layout Subsection* -invert_lat (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: invert_lat -\end_layout - -\begin_layout Standard -Defines whether the latitude should be inverted. - The default value is false. -\end_layout - -\begin_layout Subsection* -shift_lon_fraction (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: shift_lon_fraction -\end_layout - -\begin_layout Standard -Defines the longitude offset. - The value of the parameter represents a fraction of -\series bold -ni_glo -\series default -. -\end_layout - -\begin_layout Subsection* -min_lon (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: min_lon -\end_layout - -\begin_layout Standard -If both, -\series bold -min_lon -\series default - and -\series bold -max_lon -\series default -, are defined, a domain will be reordered with latitude values starting - from -\series bold -min_lon -\series default - and ending at -\series bold -max_lon -\series default -. -\end_layout - -\begin_layout Subsection* -max_lon (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: max_lon -\end_layout - -\begin_layout Standard -If both, -\series bold -min_lon -\series default - and -\series bold -max_lon -\series default -, are defined, a domain will be reordered with latitude values starting - from -\series bold -min_lon -\series default - and ending at -\series bold -max_lon -\series default -. -\end_layout - -\begin_layout Subsection -expand_domain -\end_layout - -\begin_layout Subsection* -order: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: order -\end_layout - -\begin_layout Subsection* -type (optional): -\emph on -enumeration {node, edge} -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*) :: type -\end_layout - -\begin_layout Standard -Defines whether the node or edge connectivity should be calculated for the - expanded domain. -\end_layout - -\begin_layout Subsection* -i_periodic (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: i_periodic -\end_layout - -\begin_layout Standard -If the attribute value is true, values of fields defined on the expanded - domain will be duplicated from those of the original domain periodically - along the first dimension. - The default value is false (masked values on the expanded domain). -\end_layout - -\begin_layout Subsection* -j_periodic (optional): -\emph on -bool -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -LOGICAL :: j_periodic -\end_layout - -\begin_layout Standard -If the attribute value is true, values of fields defined on the expanded - domain will be duplicated from those of the original domain periodically - along the second dimension. - The default value is false (masked values on the expanded domain). -\end_layout - -\begin_layout Subsection -zoom_domain -\end_layout - -\begin_layout Subsection* -ibegin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: ibegin -\end_layout - -\begin_layout Standard -Defines the beginning index of the zoomed region on the first dimension - of the global domain. - This must be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo-1 -\end_layout - -\end_inset - - of the associated dimension of domain. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. - Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined - then all the rest should be specified by a user as well. -\end_layout - -\begin_layout Subsection* -ni (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: ni -\end_layout - -\begin_layout Standard -Define the size of zoomed region on the first dimension of the global domain. - This must be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo -\end_layout - -\end_inset - - of the associated dimension of domain. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -ni_glo -\end_layout - -\end_inset - - of the dimension of domain. - Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined - then all the rest should be specified by a user as well. -\end_layout - -\begin_layout Subsection* -jbegin (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: jbegin -\end_layout - -\begin_layout Standard -Define the beginning index of the zoomed region on the second dimension - of the global domain. - This must be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - - and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo-1 -\end_layout - -\end_inset - - of the associated dimension of domain. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -0 -\end_layout - -\end_inset - -. - Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined - then all the rest should be specified by a user as well. -\end_layout - -\begin_layout Subsection* -nj (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -integer -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -INTEGER :: nj -\end_layout - -\begin_layout Standard -Define the size of zoomed region on the second dimension of the global domain. - The attribute value should be an integer between -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -1 -\end_layout - -\end_inset - -and -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - - of the associated dimension of domain. - If not specified the default value is -\begin_inset Flex Strong -status collapsed - -\begin_layout Plain Layout -nj_glo -\end_layout - -\end_inset - - of the dimension of domain. - Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined - then all the rest should be specified by a user as well. -\end_layout - -\begin_layout Subsection -generate_rectilinear_domain -\end_layout - -\begin_layout Subsection* -lon_start (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lon_start -\end_layout - -\begin_layout Standard -Along with -\series bold -lon_end -\series default -, the attribute defines the longitude range of a generated domain. -\end_layout - -\begin_layout Subsection* -lon_end (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lon_end -\end_layout - -\begin_layout Standard -Along with -\series bold -lon_start -\series default -, the attribute defines the longitude range of a generated domain. -\end_layout - -\begin_layout Subsection* -lat_start (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lat_start -\end_layout - -\begin_layout Standard -Along with -\series bold -lat_end -\series default -, the attribute defines the latitude range of a generated domain. -\end_layout - -\begin_layout Subsection* -lat_end (optional): -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: lat_end -\end_layout - -\begin_layout Standard -Along with -\series bold -lat_start -\series default -, the attribute defines the latitude range of a generated domain. -\end_layout - -\begin_layout Subsection* -bounds_lon_start: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lon_start -\end_layout - -\begin_layout Standard -Attributes -\series bold -bounds_lon_start -\series default - and -\series bold -bounds_lon_start -\series default - set the longitude range of a generated domain. - If both sets, -\series bold -(lon_start, lon_end) -\series default - and -\series bold -(bounds_lon_start, bounds_lon_end) -\series default -, are specified then the bound attributes will be ignored. -\end_layout - -\begin_layout Subsection* -bounds_lon_end: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lon_end -\end_layout - -\begin_layout Standard -Attributes -\series bold -bounds_lon_start -\series default - and -\series bold -bounds_lon_start -\series default - set the longitude range of a generated domain. - If both sets, -\series bold -(lon_start, lon_end) -\series default - and -\series bold -(bounds_lon_start, bounds_lon_end) -\series default -, are specified then the bound attributes will be ignored. -\end_layout - -\begin_layout Subsection* -bounds_lat_start: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lat_start -\end_layout - -\begin_layout Standard -Attributes -\series bold -bounds_lat_start -\series default - and -\series bold -bounds_lat_start -\series default - set the latitude range of a generated domain. - If both sets, -\series bold -(lat_start, lat_end) -\series default - and -\series bold -(bounds_lat_start, bounds_lat_end) -\series default -, are specified then the bound attributes will be ignored. -\end_layout - -\begin_layout Subsection* -bounds_lat_end: -\begin_inset Flex Emph -status collapsed - -\begin_layout Plain Layout -double -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Fortran: -\end_layout - -\begin_layout LyX-Code -DOUBLE PRECISION :: bounds_lat_end -\end_layout - -\begin_layout Standard -Attributes -\series bold -bounds_lat_start -\series default - and -\series bold -bounds_lat_start -\series default - set the latitude range of a generated domain. - If both sets, -\series bold -(lat_start, lat_end) -\series default - and -\series bold -(bounds_lat_start, bounds_lat_end) -\series default -, are specified then the bound attributes will be ignored. -\end_layout - -\begin_layout Chapter -Fortran interface reference -\end_layout - -\begin_layout Section* -Initialization -\end_layout - -\begin_layout Subsection* -XIOS initialization -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_initialize(client_id, local_comm, return_comm) -\end_layout - -\begin_layout LyX-Code - CHARACTER(LEN=*),INTENT(IN) :: client_id -\end_layout - -\begin_layout LyX-Code - INTEGER,INTENT(IN),OPTIONAL :: local_comm -\end_layout - -\begin_layout LyX-Code - INTEGER,INTENT(OUT),OPTIONAL :: return_comm -\end_layout - -\begin_layout Subsubsection* -Argument: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -client_id -\end_layout - -\end_inset - -: client identifier -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - -: MPI communicator of the client -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -return_comm -\end_layout - -\end_inset - -: split return MPI communicator -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine must be called before any other call of MPI client library. - It may be able to initialize MPI library (calling -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -MPI_Init -\end_layout - -\end_inset - -) if not already initialized. - Since XIOS is able to work in client/server mode (parameter -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_server=true -\end_layout - -\end_inset - -), the global communicator must be split and a local split communicator - is returned to be used by the client model for it own purpose. - If more than one model is present, XIOS could be interfaced with the OASIS - coupler (compiled with -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout --using_oasis -\end_layout - -\end_inset - - option and parameter -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_oasis=true -\end_layout - -\end_inset - -), so in this case, the splitting would be done globally by OASIS. -\end_layout - -\begin_layout Itemize -If MPI is not initialized, XIOS would initialize it calling MPI_Init function. - In this case, the MPI finalization would be done by XIOS in the -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_finalize -\end_layout - -\end_inset - - subroutine, and must not be done by the model. -\end_layout - -\begin_layout Itemize -If OASIS coupler is not used (using_oasis=false) -\end_layout - -\begin_deeper -\begin_layout Itemize -If server mode is not activated ( -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_server=false -\end_layout - -\end_inset - -): if local_comm MPI communicator is specified then it would be used for - internal MPI communication otherwise -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -MPI_COMM_WORLD -\end_layout - -\end_inset - - communicator would be used by default. - A copy of the communicator (of -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -MPI_COMM_WORLD -\end_layout - -\end_inset - -) would be returned in return_comm argument. - If -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -return_comm -\end_layout - -\end_inset - - is not specified, then -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -MPI_COMM_WORLD -\end_layout - -\end_inset - - can be used by the model for it own communication. -\end_layout - -\begin_layout Itemize -If server mode is activated ( -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_server=true -\end_layout - -\end_inset - -): -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - must not be specified since the global -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -MPI_COMM_WORLD -\end_layout - -\end_inset - - communicator would be split by XIOS. - The split communicator is returned in -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -return_comm -\end_layout - -\end_inset - - argument. -\end_layout - -\end_deeper -\begin_layout Itemize -If OASIS coupler is used ( -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_oasis=true -\end_layout - -\end_inset - -) -\end_layout - -\begin_deeper -\begin_layout Itemize -If server mode is not enabled ( -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_server=false -\end_layout - -\end_inset - -) -\end_layout - -\begin_deeper -\begin_layout Itemize -If -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - is specified, it means that OASIS has been initialized by the model and - global communicator has been already split previously by OASIS, and passed - as -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - argument. - The returned communicator would be a duplicate copy of -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Itemize -Otherwise: if MPI was not initialized, OASIS will be initialized calling - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_init_comp_proto -\end_layout - -\end_inset - - subroutine. - In this case, XIOS will call -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_terminate_proto -\end_layout - -\end_inset - - when -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_finalized -\end_layout - -\end_inset - - is called. - The split communicator is returned in -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -return_comm -\end_layout - -\end_inset - - argument using -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_get_localcomm_proto -\end_layout - -\end_inset - - return argument. -\end_layout - -\end_deeper -\begin_layout Itemize -If server mode is enabled ( -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -using_server=true -\end_layout - -\end_inset - -) -\end_layout - -\begin_deeper -\begin_layout Itemize -If -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -local_comm -\end_layout - -\end_inset - - is specified, it means that OASIS has been initialized by the model and - global communicator has been already split previously by OASIS, and passed - as local_comm argument. - The returned communicator return_comm would be a split communicator given - by OASIS. -\end_layout - -\begin_layout Itemize -Otherwise: if MPI was not initialized, OASIS will be initialized calling - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_init_comp_proto -\end_layout - -\end_inset - - subroutine. - In this case, XIOS will call -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_terminate_proto -\end_layout - -\end_inset - - when -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_finalized -\end_layout - -\end_inset - - is called. - The split communicator is returned in -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -return_comm -\end_layout - -\end_inset - - argument using -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_get_localcomm_proto -\end_layout - -\end_inset - - return argument. -\end_layout - -\end_deeper -\end_deeper -\begin_layout Section* -Finalization -\end_layout - -\begin_layout Subsection* -XIOS finalization -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_finalize() -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Standard -None -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This call must be done at the end of the simulation for a successful execution. - It gives the end signal to the xios server pools to finish it execution. - If MPI has been initialize by XIOS the MPI_Finalize will be called. - If OASIS coupler has been initialized by XIOS, then finalization will be - done calling -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -prism_terminate_proto -\end_layout - -\end_inset - - subroutine. -\end_layout - -\begin_layout Section* -Tree elements management subroutines -\end_layout - -\begin_layout Standard -This set of subroutines enables the models to interact, complete or query - the XML tree data base. - New elements or group of elements can be added as child in the tree, attributes - of the elements can be set or query. - The type of elements currently available are: context, axis, domain, grid, - field, variable and file. - An element can be identified by a string or by an handle associated to - the type of the element. - Root element (ex: -\begin_inset Quotes eld -\end_inset - -axis_definition -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -field_definition -\begin_inset Quotes erd -\end_inset - -,....) are considered like a group of element and are identified by a specific - string -\begin_inset Quotes eld -\end_inset - -element_definition -\begin_inset Quotes erd -\end_inset - - where element can be any one of the existing elements. -\end_layout - -\begin_layout Subsection* -Fortran type of the handles element -\end_layout - -\begin_layout Quotation -TYPE(xios_element) -\end_layout - -\begin_layout Standard -where -\begin_inset Quotes eld -\end_inset - -element -\begin_inset Quotes erd -\end_inset - - can be any one among -\begin_inset Quotes eld -\end_inset - -context -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -axis -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -domain -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -grid -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -field -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -variable -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -file -\begin_inset Quotes erd -\end_inset - -, or the associated group (excepted for context): -\begin_inset Quotes eld -\end_inset - -axis_group -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -domain_group -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -grid_group -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -field_group -\begin_inset Quotes erd -\end_inset - -, -\begin_inset Quotes eld -\end_inset - -variable_group -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -file_group -\begin_inset Quotes erd -\end_inset - -. -\end_layout - -\begin_layout Subsection* -Getting handles -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_element_handle(id,handle) -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *) , INTENT(IN) :: id -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element), INTENT(OUT):: handle -\end_layout - -\begin_layout Standard -where element is one of the existing elements or group of elements. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - -: string identifier. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -handle -\end_layout - -\end_inset - -: element handle -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine returns the handle of the specified element identified by - its string. - The element must be existing otherwise an error is raised. -\end_layout - -\begin_layout Subsection* -Query for a valid element -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -LOGICAL FUNCTION xios_is_valid_element(id) -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *) , INTENT(IN) :: id -\end_layout - -\begin_layout Standard -where element is one of the existing elements or group of elements. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - -: string identifier. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns .TRUE. - if the element defined by the string identifier -\begin_inset Quotes eld -\end_inset - -id -\begin_inset Quotes erd -\end_inset - - exists in the data base, otherwise it returns .FALSE. - . -\end_layout - -\begin_layout Subsection* -Adding child -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_add_element(parent_handle, child_handle, child_id) -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element) , INTENT(IN) :: parent_handle -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element) , INTENT(OUT):: child_handle -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -parent_handle -\end_layout - -\end_inset - -: handle of the parent element. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -child_handle -\end_layout - -\end_inset - -: handle of the child element. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -child_id -\end_layout - -\end_inset - -: string identifier of the child. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine adds a child to an existing parent element. - The identifier of the child, if existing, can be specified optionally. - All group elements can contain child of the same type, provided generic - inheritance. - Some elements can contain children of another type for a specific behavior. - File element may contain field_group, field, variable and variable_group - child elements. - Field elements may contain variable_group of variable child element. -\end_layout - -\begin_layout Subsection* -Query if the value of an element attribute is defined (by handle) -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_is_defined_attr(handle, attr_1=attribute_1, attr_2=attribute_2, - ...) -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element) , INTENT(IN) :: handle -\end_layout - -\begin_layout LyX-Code -LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 -\end_layout - -\begin_layout LyX-Code -LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - attribute_x is describing in the chapter dedicated to the attribute description. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -handle -\end_layout - -\end_inset - -: element handle. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: return true if the attribute as a defined value. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to query if one or more attributes of an element - have a defined value. - The list of attributes and their type are described in a specific chapter - of the documentation. - -\end_layout - -\begin_layout Subsection* -Query if a value of an element attributes is defined (by identifier) -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_is_defined_element_attr(id, attr_1=attribute_1, attr_2=attribute -_2, ...) -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *) , INTENT(IN) :: id -\end_layout - -\begin_layout LyX-Code -LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 -\end_layout - -\begin_layout LyX-Code -LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - attribute_x is describing in the chapter dedicated to the attribute description. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - -: element identifier. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: return true if the attribute as a defined value. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to query if one or more attributes of an element - have a defined value. - The list of available attributes and their type are described in a specific - chapter of the documentation. - -\end_layout - -\begin_layout Subsection* -Setting element attributes value by handle -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_attr(handle, attr_1=attribute_1, attr_2=attribute_2, - ...) -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element) , INTENT(IN) :: handle -\end_layout - -\begin_layout LyX-Code -attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 -\end_layout - -\begin_layout LyX-Code -attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - attribute_x and attribute_type_x are describing in the chapter dedicated - to the attribute description. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -handle -\end_layout - -\end_inset - -: element handle. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: value of the attribute to be set. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to set one or more attributes of an element - defined by its handle. - The list of available attributes and their types are described in corresponding - chapters of the documentation. - -\end_layout - -\begin_layout Subsection* -Setting element attributes value by id -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, - ...) -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *), INTENT(IN) :: id -\end_layout - -\begin_layout LyX-Code -attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 -\end_layout - -\begin_layout LyX-Code -attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - The attributes attribute_x and attribute_type_x are described in corresponding - chapters. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - -: string identifier. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: value of the attribute to be set. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to set one or more attributes of an element - defined by its string id. - The list of available attributes and their type are described in corresponding - chapters of the documentation. -\end_layout - -\begin_layout Subsection* -Getting element attributes value (by handle) -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_attr(handle, attr_1=attribute_1, attr_2=attribute_2, - ...) -\end_layout - -\begin_layout LyX-Code -TYPE(xios_element) , INTENT(IN) :: handle -\end_layout - -\begin_layout LyX-Code -attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 -\end_layout - -\begin_layout LyX-Code -attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - attribute_x and attribute_type_x are describing in the chapter dedicated - to the attribute description. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -handle -\end_layout - -\end_inset - -: element handle. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: value of the attribute to be get. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to get one or more attribute value of an element - defined by its handle. - All attributes in the arguments list must be defined. - The list of available attributes and their type are described in a specific - chapter of the documentation. - -\end_layout - -\begin_layout Subsection* -Getting element attributes value (by identifier) -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, - ...) -\end_layout - -\begin_layout LyX-Code -CHARACTER(len = *), INTENT(IN) :: id -\end_layout - -\begin_layout LyX-Code -attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 -\end_layout - -\begin_layout LyX-Code -attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 -\end_layout - -\begin_layout LyX-Code -.... -\end_layout - -\begin_layout Standard -where element is one of the existing elements or element groups. - attribute_x is describing in the chapter dedicated to the attribute description. -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -id -\end_layout - -\end_inset - -: element string identifier. -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -attr_x -\end_layout - -\end_inset - -: value of the attribute to be get. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine can be used to get one or more attribute value of an element - defined by its handle. - All attributes in the arguments list must have a defined value. - The list of available attributes and their type are described in a specific - chapter of the documentation. -\end_layout - -\begin_layout Section* -Context management interface -\end_layout - -\begin_layout Subsection* -XIOS context initialization -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_context_initialize(context_id, context_comm) -\end_layout - -\begin_layout LyX-Code - CHARACTER(LEN=*),INTENT(IN) :: context_id -\end_layout - -\begin_layout LyX-Code - INTEGER,INTENT(IN) :: context_comm -\end_layout - -\begin_layout Subsubsection* -Argument: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -context_id -\end_layout - -\end_inset - -: context identifier -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -context_comm -\end_layout - -\end_inset - -: MPI communicator of the context -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine initializes a context identified by -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -context_id -\end_layout - -\end_inset - - string and must be called before any call related to this context. - A context must be associated to a communicator, which can be the returned - communicator of the -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_initialize -\end_layout - -\end_inset - - subroutine or a sub-communicator of this. - The context initialization is dynamic and can be done at any time before - the -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_finalize -\end_layout - -\end_inset - - call. -\end_layout - -\begin_layout Subsection* -XIOS context finalization -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_context_finalize() -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Standard -None -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine must be called to close a context before the -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_finalize -\end_layout - -\end_inset - - call. - It waits until that all pending requests sent to the servers will be processed - and all opened files will be closed. -\end_layout - -\begin_layout Subsection* -Setting current active context -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_current_context(context_handle) -\end_layout - -\begin_layout LyX-Code -TYPE(xios_context),INTENT(IN) :: context_handle -\end_layout - -\begin_layout Standard -or -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_current_context(context_id) -\end_layout - -\begin_layout LyX-Code -CHARACTER(LEN=*),INTENT(IN) :: context_id -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -context_handle -\end_layout - -\end_inset - -: handle of the context -\end_layout - -\begin_layout Standard -or -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -context_id -\end_layout - -\end_inset - -: string context identifier -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -These subroutines set the current active context. - All following XIOS calls will refer to this active context. - If only one context is defined, it will be set automatically as the active - context. - -\end_layout - -\begin_layout Subsection* -Closing definition -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_close_context_definition() -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Standard -None -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine must be called when all definitions of a context are finished - at the end of the initialization and before entering to the time loop. - A lot of operations are performed internally (inheritance, grid definition, - contacting servers,...) so this call is mandatory. - Any call related to the tree management definition done after will have - an undefined effect. -\end_layout - -\begin_layout Section* -Calendar management interface -\end_layout - -\begin_layout Subsection* -Creating the calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, - & -\begin_inset Newline newline -\end_inset - - day_length, month_lengths, year_length, - & -\begin_inset Newline newline -\end_inset - - leap_year_month, leap_year_drift, & -\begin_inset Newline newline -\end_inset - - leap_year_drift_offset) -\begin_inset Newline newline -\end_inset - -CHARACTER(len = *), INTENT(IN) :: type -\begin_inset Newline newline -\end_inset - -TYPE(xios_duration), OPTIONAL, INTENT(IN) :: timestep -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), OPTIONAL, INTENT(IN) :: start_date -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), OPTIONAL, INTENT(IN) :: time_origin -\begin_inset Newline newline -\end_inset - -INTEGER, OPTIONAL, INTENT(IN) :: day_length -\begin_inset Newline newline -\end_inset - -INTEGER, OPTIONAL, INTENT(IN) :: month_lengths(:) -\begin_inset Newline newline -\end_inset - -INTEGER, OPTIONAL, INTENT(IN) :: year_length -\begin_inset Newline newline -\end_inset - -DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift -\begin_inset Newline newline -\end_inset - -DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift_offset -\begin_inset Newline newline -\end_inset - -INTEGER, OPTIONAL, INTENT(IN) :: leap_year_month -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -type -\end_layout - -\end_inset - -: the calendar type, one of -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"Gregorian" -\end_layout - -\end_inset - -, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"Julian" -\end_layout - -\end_inset - -, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"D360" -\end_layout - -\end_inset - -, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"AllLeap" -\end_layout - -\end_inset - -, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"NoLeap" -\end_layout - -\end_inset - -, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -"user_defined" -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -timestep -\end_layout - -\end_inset - -: the time step of the simulation (optional, can be set later) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -start_date -\end_layout - -\end_inset - -: the start date of the simulation (optional, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_date(0000, 01, 01, 00, 00, 00) -\end_layout - -\end_inset - - is used by default) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -time_origin -\end_layout - -\end_inset - -: the origin of the time axis (optional, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_date(0000, 01, 01, 00, 00, 00) -\end_layout - -\end_inset - - is used by default) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -day_length -\end_layout - -\end_inset - -: the length of a day in seconds (mandatory when creating an user defined - calendar, must not be set otherwise) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -month_lengths -\end_layout - -\end_inset - -: the length of each month of the year in days (either -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -month_lengths -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -year_length -\end_layout - -\end_inset - - must be set when creating an user defined calendar, must not be set otherwise) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -year_length -\end_layout - -\end_inset - -: the length of a year in seconds (either -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -month_lengths -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -year_length -\end_layout - -\end_inset - - must be set when creating an user defined calendar, must not be set otherwise) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift -\end_layout - -\end_inset - -: the yearly drift between the user defined calendar and the astronomical - calendar, expressed as a fraction of day (can optionally be set when creating - an user defined calendar in which case -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_month -\end_layout - -\end_inset - - must be set too) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift_offset -\end_layout - -\end_inset - -: the initial drift between the user defined calendar and the astronomical - calendar at the time origin, expressed as a fraction of day (can optionally - be set if -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift -\end_layout - -\end_inset - - and -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_month -\end_layout - -\end_inset - - are set) -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_month -\end_layout - -\end_inset - -: the month to which an extra day must be added in case of leap year (can - optionally be set when creating an user defined calendar in which case - -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift -\end_layout - -\end_inset - - must be set too) -\end_layout - -\begin_layout Standard -For a more detailed description of those arguments, see the description - of the corresponding attributes in section 1.2 -\begin_inset Quotes eld -\end_inset - -Calendar attribute reference -\begin_inset Quotes erd -\end_inset - -. -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine creates the calendar for the current context. - Note that the calendar is created once and for all, either from the XML - configuration file or the Fortran interface. - If it was not created from the configuration file, then this subroutine - must be called once and only once before the context definition is closed. - The calendar features can be used immediately after the calendar was created. -\begin_inset Newline newline -\end_inset - - -\begin_inset Newline newline -\end_inset - -If an user defined calendar is created, the following arguments must also - be provided: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -day_length -\end_layout - -\end_inset - - and either -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -month_lengths -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -year_length -\end_layout - -\end_inset - -. - Optionally it is possible to configure the user defined calendar to have - leap years. - In this case, -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift -\end_layout - -\end_inset - - and -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_month -\end_layout - -\end_inset - - must also be provided and -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -leap_year_drift_offset -\end_layout - -\end_inset - - might be used. -\end_layout - -\begin_layout Subsection* -Accessing the calendar type of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_calendar_type(calendar_type) -\begin_inset Newline newline -\end_inset - -CHARACTER(len=*), INTENT(OUT) :: calendar_type -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -calendar_type -\end_layout - -\end_inset - -: on output, the type of the calendar attached to the current context -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine gets the calendar type associated to the current context. - It will raise an error if used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Accessing and defining the time step of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_timestep(timestep) -\begin_inset Newline newline -\end_inset - -TYPE(xios_duration), INTENT(OUT) :: timestep -\end_layout - -\begin_layout Standard -and -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_timestep(timestep) -\begin_inset Newline newline -\end_inset - -TYPE(xios_duration), INTENT(IN) :: timestep -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -timestep -\end_layout - -\end_inset - -: a duration corresponding to the time step of the simulation -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -Those subroutines respectively gets and sets the time step associated to - the calendar of the current context. - Note that the time step must always be set before the context definition - is closed and that an error will be raised if the getter subroutine is - used before the time step is defined. -\end_layout - -\begin_layout Subsection* -Accessing and defining the start date of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_start_date(start_date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(OUT) :: start_date -\end_layout - -\begin_layout Standard -and -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_start_date(start_date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: start_date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -start_date -\end_layout - -\end_inset - -: a date corresponding to the beginning of the simulation -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -Those subroutines respectively gets and sets the start date associated to - the calendar of the current context. - They must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Accessing and defining the time origin of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_time_origin(time_origin) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(OUT) :: time_origin -\end_layout - -\begin_layout Standard -and -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_set_time_date(time_origin) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: time_origin -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -start_date -\end_layout - -\end_inset - -: a date corresponding to the origin of the time axis -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -Those subroutines respectively gets and sets the origin of time associated - to the calendar of the current context. - They must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Updating the current date of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_update_calendar(step) -\begin_inset Newline newline -\end_inset - -INTEGER, INTENT(IN) :: step -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -step -\end_layout - -\end_inset - -: the current iteration number -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine sets the current date associated to the calendar of the - current context based on the current iteration number: -\begin_inset Formula $current\_date=start\_date+step\times timestep$ -\end_inset - -. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Accessing the current date of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -SUBROUTINE xios_get_current_date(current_date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(OUT) :: current_date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -current_date -\end_layout - -\end_inset - -: on output, the current date -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This subroutine gets the current date associated to the calendar of the - current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Accessing the year length of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -INTEGER FUNCTION xios_get_year_length_in_seconds(year) -\begin_inset Newline newline -\end_inset - -INTEGER, INTENT(IN) :: year -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -year -\end_layout - -\end_inset - -: the year whose length is requested -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the duration in seconds of the specified year, taking - leap years into account based on the calendar of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Accessing the day length of the current calendar -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -INTEGER FUNCTION xios_get_day_length_in_seconds() -\end_layout - -\begin_layout Subsubsection* -Arguments: None -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the duration in seconds of a day, based on the calendar - of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Section* -Duration handling interface -\end_layout - -\begin_layout Subsection* -Duration constants -\end_layout - -\begin_layout Standard -Some duration constants are available to ease duration handling: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_year -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_month -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_day -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_hour -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_minute -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_second -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_timestep -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection* -Arithmetic operations on durations -\end_layout - -\begin_layout Standard -The following arithmetic operations on durations are available: -\end_layout - -\begin_layout Itemize -Addition: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = xios_duration + xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Subtraction: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = xios_duration - xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Multiplication by a scalar value: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = scalar * xios_duration -\end_layout - -\end_inset - - or -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = xios_duration * scalar -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Negation: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = -xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection* -Comparison operations on durations -\end_layout - -\begin_layout Standard -The following comparison operations on durations are available: -\end_layout - -\begin_layout Itemize -Equality: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_duration == xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Inequality: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_duration /= xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Section* -Interface relative to date handling -\end_layout - -\begin_layout Subsection* -Arithmetic operations on dates -\end_layout - -\begin_layout Standard -The following arithmetic operations on dates are available: -\end_layout - -\begin_layout Itemize -Addition of a duration: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_date = xios_date + xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Subtraction of a duration: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_date = xios_date - xios_duration -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Subtraction of two dates: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -xios_duration = xios_date - xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection* -Comparison operations on dates -\end_layout - -\begin_layout Standard -The following comparison operations on dates are available: -\end_layout - -\begin_layout Itemize -Equality: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date == xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Inequality: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date /= xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Less than: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date < xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Less or equal: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date <= xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Greater than: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date > xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Itemize -Greater or equal: -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -LOGICAL = xios_date >= xios_date -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection* -Converting a date to a number of seconds since the time origin -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION INTEGER(kind = 8) xios_date_convert_to_seconds(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the number of seconds since the time origin for the - specified date, based on the calendar of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Converting a date to a number of seconds since the beginning of the year -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION INTEGER xios(date_get_second_of_year)(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the number of seconds since the beginning of the year - for the specified date, based on the calendar of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Converting a date to a number of days since the beginning of the year -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION DOUBLE_PRECISION xios_date_get_day_of_year(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the number of days since the beginning of the year - for the specified date, based on the calendar of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Converting a date to a fraction of the current year -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_year(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the fraction of year corresponding to the specified - date, based on the calendar of the current context. - It must not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Converting a date to a number of seconds since the beginning of the day -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION INTEGER xios(date_get_second_of_day)(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the number of seconds since the beginning of the day - for the specified date, based on the calendar of the current context. - It should not be used before the calendar was created. -\end_layout - -\begin_layout Subsection* -Converting a date to a fraction of the current day -\end_layout - -\begin_layout Subsubsection* -Synopsis: -\end_layout - -\begin_layout LyX-Code -FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_day(date) -\begin_inset Newline newline -\end_inset - -TYPE(xios_date), INTENT(IN) :: date -\end_layout - -\begin_layout Subsubsection* -Arguments: -\end_layout - -\begin_layout Itemize -\begin_inset Flex Code -status collapsed - -\begin_layout Plain Layout -date -\end_layout - -\end_inset - -: the date to convert -\end_layout - -\begin_layout Subsubsection* -Description: -\end_layout - -\begin_layout Standard -This function returns the fraction of day corresponding to the specified - date based on the calendar of the current context. - It should not be used before the calendar was created. -\end_layout - -\end_body -\end_document +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass book +\use_default_options true +\begin_modules +logicalmkup +\end_modules +\maintain_unincluded_children false +\language english +\language_package auto +\inputencoding auto +\fontencoding global +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures false +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 0 +\use_minted 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\is_math_indent 0 +\math_numbering_side default +\quotes_style english +\dynamic_quotes 0 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Title +XIOS Fortran Reference Guide +\end_layout + +\begin_layout Chapter +Attribute reference +\end_layout + +\begin_layout Section +Context attribute reference +\end_layout + +\begin_layout Section +Calendar attribute reference +\end_layout + +\begin_layout Subsection* +type: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {Gregorian, Julian, D360, AllLeap, NoLeap, user_defined} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Define the calendar used for the current context. + This attribute is mandatory and cannot be modified once it has been set. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined using the + following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +start_date: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_date) :: start_date +\end_layout + +\begin_layout Standard +Define the start date of the simulation for the current context. + This attribute is optional, the default value is +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +0000-01-01 00:00:00 +\end_layout + +\end_inset + +. + The +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + + attribute must always be set at the same time or before this attribute + is defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +A partial date is allowed in the configuration file as long as the omitted + parts are at the end, in which case they are initialized as in the default + value. + Optionally an offset can be added to the date using the notation " +\emph on ++ duration +\emph default +". + +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or later using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_start_date(start_date) +\end_layout + +\begin_layout Subsection* +time_origin: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_date) :: time_origin +\end_layout + +\begin_layout Standard +Define the time origin of a time axis. + It will appear as metadata attached to the time axis in an output file. + This attribute is optional, the default value is +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +0000-01-01 00:00:00 +\end_layout + +\end_inset + +. + The +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + + attribute must always be set at the same time or before this attribute + is defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +A partial date is allowed in the configuration file as long as the omitted + parts are at the end, in which case they are initialized as in the default + value. + Optionally an offset can be added to the date using the notation " +\emph on ++ duration +\emph default +". + +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or later using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_time_origin(time_origin) +\end_layout + +\begin_layout Subsection* +timestep: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: timestep +\end_layout + +\begin_layout Standard +Define the time step of the simulation for the current context. + This attribute is mandatory. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_timestep(timestep) +\end_layout + +\begin_layout Subsection* +day_length: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: day_length +\end_layout + +\begin_layout Standard +Define the duration of a day in seconds when using a custom calendar. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to " +\emph on +user_defined +\emph default +", otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +month_lengths: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: month_lengths(:) +\end_layout + +\begin_layout Standard +Define the duration of each month, in days, when using a custom calendar. + The number of elements in the array defines the number of months in a year + and the sum of all elements is the total number of days in a year. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +year_length +\series default + attribute is not used, otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +year_length: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: year_length +\end_layout + +\begin_layout Standard +Define the duration of a year, in seconds, when using a custom calendar. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is not used, otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Note that the date format is modified when using this attribute: the month + must be always be omitted and the day must also be omitted if +\begin_inset Formula $year\_length\leq day\_length$ +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_month: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: leap_year_month +\end_layout + +\begin_layout Standard +Define the month to which the extra day will be added in case of leap year, + when using a custom calendar. + This attribute is optional if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is used, otherwise it must not be defined. + The default behavior is not to have any leap year. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $1\leq leap\_year\_month\leq size(month\_lengths)$ +\end_inset + + and the +\series bold +leap_year_drift +\series default + attribute must also be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_drift: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: leap_year_drift +\end_layout + +\begin_layout Standard +Define the yearly drift, expressed as a fraction of a day, between the calendar + year and the astronomical year, when using a custom calendar. + This attribute is optional if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is used, otherwise it must not be defined. + The default behavior is not to have any leap year, i.e. + the default value is +\begin_inset Formula $\mathbf{0}$ +\end_inset + +. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $0\leq leap\_year\_drift<1$ +\end_inset + + and the +\series bold +leap_year_month +\series default + attribute must also be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_drift_offset: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: leap_year_drift_offset +\end_layout + +\begin_layout Standard +Define the initial drift between the calendar year and the astronomical + year, expressed as a fraction of a day, at the beginning of the time origin's + year, when using a custom calendar. + This attribute is optional if the +\series bold +leap_year_month +\series default + and +\series bold +leap_year_drift +\series default + attributes are used, otherwise it must not be defined. + The default value is +\begin_inset Formula $\mathbf{0}$ +\end_inset + +. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $0\leq leap\_year\_drift\_offset<1$ +\end_inset + +. + If +\begin_inset Formula $leap\_yeap\_drift\_offset+leap\_yeap\_drift$ +\end_inset + + is greater or equal to 1, then the first year will be a leap year. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Section +Scalar attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a scalar as it will appear in a file. + If not defined, the name will be generated automatically based on the id. + If multiple scalars are defined in the same file, each scalar must have + a unique name. + +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a scalar as it will appear in the scalar's + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a scalar as it will appear in the scalar's metadata + in an output file. + +\end_layout + +\begin_layout Subsection* +unit (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the scalar unit as it will appear in the scalar's metadata in an + output file. +\end_layout + +\begin_layout Subsection* +value (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: value +\end_layout + +\begin_layout Standard +Defines the value of a scalar. + If both, the label and the value, are set then only the label will be written + into a file. +\end_layout + +\begin_layout Subsection* +bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds(:) +\end_layout + +\begin_layout Standard +Defines (two) scalar boundaries. + The array size must should be equal to 2. +\end_layout + +\begin_layout Subsection* +bounds_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: bounds_name +\end_layout + +\begin_layout Standard +Defines the name of scalar bounds as it will appear in a file. + If not defined, the name will be generated automatically based on the scalar + id. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of scalar value and boundaries as it will + be written into an output file. + Available values are: 4 (float single precision) and 8 (float double precision). + The default value is 4. +\end_layout + +\begin_layout Subsection* +label (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: label +\end_layout + +\begin_layout Standard +Defines the label of a scalar. + If both, the label and the value, are set then only the label will be output + into a file. +\end_layout + +\begin_layout Subsection* +scalar_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: scalar_ref +\end_layout + +\begin_layout Standard +Defines the reference to a scalar. + All attributes will be inherited from the referenced scalar via the classical + inheritance mechanism. + The value assigned to the referenced scalar will be transmitted to the + current scalar. +\end_layout + +\begin_layout Subsection* +positive (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {up, down} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: positive +\end_layout + +\begin_layout Standard +Defines the positive direction for fields representing height or depth. +\end_layout + +\begin_layout Subsection* +axis_type (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {X, Y, Z, T} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_type +\end_layout + +\begin_layout Standard +Defines the type of a (scalar) axis. + The values correspond to the following axis types: +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +X: +\series default +\shape default + longitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Y +\emph default +: +\series default +\shape default + latitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Z +\emph default +: +\series default +\shape default + vertical axis +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +T: +\series default +\shape default +time axis. +\end_layout + +\begin_layout Subsection* +comment: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + +\end_layout + +\begin_layout Section +Axis attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a vertical axis as it will appear in an output file. + If not defined, the name will be generated automatically based on the axis + id. + If multiple vertical axes are defined in the same file, each axis must + have a unique name. + +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a vertical axis as it will appear in the axis' + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a vertical axis as it will appear in the axis' + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +unit (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the unit of an axis as it will appear in the axis' metadata in an + output file. +\end_layout + +\begin_layout Subsection* +dim_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_name +\end_layout + +\begin_layout Standard +Defines the name of axis dimension as it will appear in the file's metadata. + The default axis dimension name is the axis name. +\end_layout + +\begin_layout Subsection* +formula (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula +\end_layout + +\begin_layout Standard +Adds the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +formula +\end_layout + +\end_inset + + attribute to the metadata associated to the axis in the output file, for + CF conformance. +\end_layout + +\begin_layout Subsection* +formula_term (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_term +\end_layout + +\begin_layout Standard +Adds the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +formula_term +\end_layout + +\end_inset + + attribute to the metadata associated to the axis in the output file, for + CF conformance. +\end_layout + +\begin_layout Subsection* +formula_bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_bounds +\end_layout + +\begin_layout Standard +Adds the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +formula +\end_layout + +\end_inset + + attribute to the metadata associated to the axis boundairies in the output + file, for CF conformance. + This attribute is meaningfull if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +axis_bounds +\end_layout + +\end_inset + + is not defined. +\end_layout + +\begin_layout Subsection* +formula_term_bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_term_bounds +\end_layout + +\begin_layout Standard +Adds the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +formula_term +\end_layout + +\end_inset + + attribute to the metadata associated to the axis boundairies in the output + file, for CF conformance. + This attribute is meaningfull if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +axis_bounds +\end_layout + +\end_inset + + is not defined. +\end_layout + +\begin_layout Subsection* +n_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_glo +\end_layout + +\begin_layout Standard +Defines the global size of an axis. +\end_layout + +\begin_layout Subsection* +begin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: begin +\end_layout + +\begin_layout Standard +Defines the beginning index of the local domain. + It can take value between 0 and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is 0. +\end_layout + +\begin_layout Subsection* +n (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n +\end_layout + +\begin_layout Standard +Defines the local size of an axis. + It can take value between 0 and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo +\end_layout + +\end_inset + +. + Local axis decomposition can be declared either with attributes +\series bold +\shape italic +{n, begin} +\series default +\shape default + or with +\series bold +\shape italic +index +\series default +\shape default +. +\end_layout + +\begin_layout Subsection* +index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: index(:) +\end_layout + +\begin_layout Standard +Defines the global indexes of a local axis held by each process. + If the attribute is specified, its array size must be equal to +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + Local axis decomposition can be declared either with attributes +\series bold +\shape italic +{n, begin} +\series default +\shape default + or with +\series bold +\shape italic +index +\series default +\shape default +. +\end_layout + +\begin_layout Subsection* +value (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: value(:) +\end_layout + +\begin_layout Standard +Defines the value of each level of a vertical axis. + The array size must be equal to the value of the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + If the label is provided then only the label will be written into a file + and not the axis value and the axis boundaries. +\end_layout + +\begin_layout Subsection* +bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +2D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds(:,:) +\end_layout + +\begin_layout Standard +Defines the boundaries of each level of a vertical axis. + The dimensions of the array must be +\begin_inset Formula $2\times n$ +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: bounds_name +\end_layout + +\begin_layout Standard +Defines the name of axis boundaries as it will appear in an ouput file. + If not defined, the name will be generated automatically based on the axis + id. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of axis value and boundaries as it will be + written into an output file. + Available values are: 4 (float single precision) and 8 (float double precision). + The default value is 4. +\end_layout + +\begin_layout Subsection* +label (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER, ALLOCATABLE :: label(:) +\end_layout + +\begin_layout Standard +Defines the label of an axis. + The size of the array must be equal to the value of the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + If the label is provided then only the label will be written into a file + and not the axis value and the axis boundaries. +\end_layout + +\begin_layout Subsection* +data_begin (optional): +\emph on + integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_begin +\end_layout + +\begin_layout Standard +Defines the beginning index of local field data owned by each process. + The attribute is an offset relative to the local axis, so the value can + be negative. + A negative value indicates that only some valid part of the data will extracted +, for example in the case of a ghost cell. + A positive value indicates that the local domain is greater than the data + stored in memory. + The 0-value means that the local domain matches the data in memory. + The default value is 0. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_begin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_n (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_n +\end_layout + +\begin_layout Standard +Defines the size of local field data. + The attribute can take value starting from 0 (no data on a process). + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_begin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_index (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_index +\end_layout + +\begin_layout Standard +In case of a compressed vertical axis, the attribute defines the position + of data points stored in the memory. + For example, for a local axis of size +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n=3 +\end_layout + +\end_inset + + and local data size of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n=5 +\end_layout + +\end_inset + +, if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_index=(/ -1, 2, 1, 0, -1 /) +\end_layout + +\end_inset + + then the first and the last data points are ghosts and only the three middle + values will be written in the reversed order. + Only +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_begin/data_n +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_index +\end_layout + +\end_inset + + can be used together. +\end_layout + +\begin_layout Subsection* +mask (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:) +\end_layout + +\begin_layout Standard +Defines the mask of the local axis. + The masked value will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. +\end_layout + +\begin_layout Subsection* +n_distributed_partition (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_distributed_partition +\end_layout + +\begin_layout Standard +Defines the number of local axes in case if the axis is generated automatically + by XIOS. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +. + Nota: currently this functionnality is broken, this attribute is meaningfull. +\end_layout + +\begin_layout Subsection* +axis_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_ref +\end_layout + +\begin_layout Standard +Defines the reference of an axis. + All attributes will be inherited from the referenced axis with the classical + inheritance mechanism. + The value assigned to the referenced axis will be transmitted to the current + axis. +\end_layout + +\begin_layout Subsection* +positive (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {up, down} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: positive +\end_layout + +\begin_layout Standard +Defines the positive direction for fields representing height or depth. + It will just be appended in axis metadata in output file, for CF compliance. +\end_layout + +\begin_layout Subsection* +axis_type (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {X, Y, Z, T} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_type +\end_layout + +\begin_layout Standard +Defines the type of an axis. + The values correspond to the following axis types: +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +X: +\series default +\shape default + longitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Y +\emph default +: +\series default +\shape default + latitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Z +\emph default +: +\series default +\shape default + vertical axis +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +T: +\series default +\shape default +time axis. +\end_layout + +\begin_layout Standard +It will just be append in axis metadata in ouput file, for CF compliance. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + +\end_layout + +\begin_layout Section +Domain attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a horizontal domain. + This attribute may be used in case of multiple domains defined in the same + file. + In this case, the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +name +\end_layout + +\end_inset + + attribute will be suffixed to the longitude and latitude dimensions and + axis name. + If the domain name is not provided, it will be generated automatically + with the id of the domain. +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a domain as it will appear in the domain's + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a domain as it will appear in the domain's metadata + in an output file. + +\end_layout + +\begin_layout Subsection* +type (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {rectilinear, curvilinear, unstructured, gaussian} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a grid. +\end_layout + +\begin_layout Subsection* +dim_i_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_i_name +\end_layout + +\begin_layout Standard +Defines the name of the first domain dimension as it will appear in the + file's metadata. + The default value is ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +X +\end_layout + +\end_inset + +'. + In case of multiple domain in the file, the dimension will be preffixed + by the domain name. +\end_layout + +\begin_layout Subsection* +dim_j_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_j_name +\end_layout + +\begin_layout Standard +Defines the name of the second domain dimension as it will appear in file's + metadata. + The default value is ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +Y +\end_layout + +\end_inset + +'. + In case of multiple domain in the file, the dimension will be preffixed + by the domain name. +\end_layout + +\begin_layout Subsection* +ni_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni_glo +\end_layout + +\begin_layout Standard +Defines the size of the first dimension of the global domain. +\end_layout + +\begin_layout Subsection* +nj_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj_glo +\end_layout + +\begin_layout Standard +Defines the size of the second dimension of the global domain. +\end_layout + +\begin_layout Subsection* +ibegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the first dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +ni (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni +\end_layout + +\begin_layout Standard +Defines the size of the first dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +jbegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: jbegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the second dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +nj (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj +\end_layout + +\begin_layout Standard +Defines the size of the second dimension of a local domain. + he attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +lonvalue_1d (optional): +\emph on +1D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lonvalue(:) +\end_layout + +\begin_layout Standard +Defines the longitude values of a local domain. + For a cartesian grid, the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + +. + For a curvilinear grid, the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. + In this case the first and second dimensions are collapsed into a linear + array. + For unstrutured and gaussian grid, the array size sould be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + + (the second dimension +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj +\end_layout + +\end_inset + + is not used). + Only latvalue_1d or latvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +lonvalue_2d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lonvalue(:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of a local domain. + For cartesian grid, the array size must beand curvilinear grids the array + size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +(ni,nj) +\end_layout + +\end_inset + +. + For unstructured or gaussian grid it sould be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +(ni,1) +\end_layout + +\end_inset + +. + Only lonvalue_1d or lonvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +latvalue_1d (optional): +\emph on +1D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: latvalue(:) +\end_layout + +\begin_layout Standard +Defines the latitude values of a local domain. + For a cartesian and curvilinear grid, the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. + In this case the first and second dimensions are collapsed into a linear + array. + For unstrutured and gaussian grid, the array size sould be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + + (the second dimension +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj +\end_layout + +\end_inset + + is not used). + Only latvalue_1d or latvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +latvalue_2d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: latvalue(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of a local domain. + For cartesian grid and curvilinear grids the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +(ni,nj) +\end_layout + +\end_inset + +. + For unstructured or gaussian grid it sould be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +(ni,1) +\end_layout + +\end_inset + +. + Only latvalue_1d or latvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +lon_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lon_name +\end_layout + +\begin_layout Standard +Define the longitude name as it will appear in an output file. + If not defined, the default will be ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +lon +\end_layout + +\end_inset + +'. + In case of multiple domain defined in a file, the longitude name will be + suffixed by the domain name. +\end_layout + +\begin_layout Subsection* +lat_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lat_name +\end_layout + +\begin_layout Standard +efine the longitude name as it will appear in an output file. + If not defined, the default will be ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +lat +\end_layout + +\end_inset + +'. + In case of multiple domain defined in a file, the longitude name will be + suffixed by the domain name. +\end_layout + +\begin_layout Subsection* +nvertex (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nvertex +\end_layout + +\begin_layout Standard +Used only for unstructured domain. + Defines the maximum number of vertices for a grid. + The attribute is required for specifying the cell boundaries of the unstructure +d meshes. + For other grid (cartesian, curvilinear or gaussian), the nvertex value + will be set automatically to 4. +\end_layout + +\begin_layout Subsection* +bounds_lon_1d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon(:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of the domain vertexes. + For unstructured domain, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined (for other mesh it is set automatically to 4). + The array dimensions shape must be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni) +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_lon_2d (optional): +\emph on +3D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon(:,:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of the domain vertexes. + For unstructured domain, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined (for other mesh it is set automatically to 4). + This attribute is useful when lonvalue_2d is defined. + for cartesian and curvilinear domain, the array dimensions shape must be + of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni, nj) +\end_layout + +\end_inset + +, and for gaussian or unstructured domain, it sould be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni, 1) +\end_layout + +\end_inset + +. + For cartesian, curvilinear . + Either +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon_1d +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon_2d +\end_layout + +\end_inset + + can be defined. +\end_layout + +\begin_layout Subsection* +bounds_lat_1d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of the domain vertexes. + For unstructured domain, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined (for other mesh it is set automatically to 4). + The array dimensions shape must be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni) +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_lat_2d (optional): +\emph on +3D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of domain vertexes. + For unstructured domain, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined. + This attribute is useful when lonvalue_2d is defined. + for cartesian and curvilinear domain, the array dimensions shape must be + of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni, nj) +\end_layout + +\end_inset + +, and for gaussian or unstructured domain, it sould be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(nvertex, ni, 1) +\end_layout + +\end_inset + +. + For cartesian, curvilinear . + Either +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon_1d +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon_2d +\end_layout + +\end_inset + + can be defined. +\end_layout + +\begin_layout Subsection* +bounds_lon_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: bounds_lon_name +\end_layout + +\begin_layout Standard +Defines the boundaries longitude boundaries name of domain as it will appear + in an output file. + Default value is ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon +\end_layout + +\end_inset + +'. + In case of multiple domains defined in a same file, the boundaries name + will be suffixed by the domain name. + +\end_layout + +\begin_layout Subsection* +bounds_lat_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lat_name +\end_layout + +\begin_layout Standard +Defines the boundaries longitude boundaries name of domain as it will appear + in an output file. + Default value is ' +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +bounds_lon +\end_layout + +\end_inset + +'. + In case of multiple domains defined in a same file, the boundaries name + will be suffixed by the domain name. + +\end_layout + +\begin_layout Subsection* +area (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: area(:,:) +\end_layout + +\begin_layout Standard +The area of cells. + The size of the array must +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(ni, nj) +\end_layout + +\end_inset + + for cartesian or curvilinear domain and (ni, 1) for unstructured or gaussian + domain. + If this attribute is defined, it will be wrote in the output file as domain + metadata. + This attribute could be also used in domain interpolation to take into + account the area of the cell instead to take the computed value (for conservati +on consideration). + +\end_layout + +\begin_layout Subsection* +radius (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: radius +\end_layout + +\begin_layout Standard +Define the radius of the planet (or earth). + If defined, it can be used by domain interpolation together with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +area +\end_layout + +\end_inset + + domain attribute in order to renormalize weight to compute conservative + interpolation (see +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +domain_interpolate +\end_layout + +\end_inset + + filter). +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision (in bytes) for which domain attributes (longitude, + latitude, boudairies, ...) will be written in output file. + Available values are: 4 (float single precision) and 8 (float double precision). + The default value is 4 bytes. +\end_layout + +\begin_layout Subsection* +data_dim (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: datadim +\end_layout + +\begin_layout Standard +Defines how a field is stored on memory for the client code. + The value can be either +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + or +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + +. + The value of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + indicates that the horizontal layer of the field is stored as a 1D array. + The value of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + + indicates that the horizontal layer is stored as a 2D array. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +data_ibegin (optional): +\emph on + integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of field data for the first dimension. + This attribute is an offset relative to the local domain, so the value + can be negative. + A negative value indicates that only some valid part of the data will extracted +, for example in the case of a ghost cell. + A positive value indicates that the local domain is greater than the data + stored in memory. + A 0-value means that the local domain matches the data in memory. + The default value is 0. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ibegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ni +\end_layout + +\end_inset + + must be defined together. + Only data_ibegin/data_ni or data_i_index/ +\end_layout + +\begin_layout Subsection* +data_ni (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_ni +\end_layout + +\begin_layout Standard +Defines the size of field data for the first dimension. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ibegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ni +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_jbegin (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_jbegin +\end_layout + +\begin_layout Standard +Defines the beginning index of field data for the second dimension. + The attribute is taken into account only if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + data_dim=2 +\end_layout + +\end_inset + +. + The attribute is an offset relative to the local domain, so the value can + be negative. + A negative value indicate that only some valid part of the data will extracted, + for example in case of ghost cell. + A positive value indicate that the local domain is greater than the data + stored in memory. + The 0-value means that the local domain matches the data in memory. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_jbegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_nj +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_nj (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_nj +\end_layout + +\begin_layout Standard +Defines the size of field data for the second dimension. + The attribute is taken account only if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_dim=2 +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_jbegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_nj +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_i_index (optional): +\emph on +1D-array of integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_i_index(:) +\end_layout + +\begin_layout Standard +In case of a compressed horizontal domain, define the data indexation for + the first dimension. + This attribute cannot be used together with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_ibegin/data_ni +\end_layout + +\end_inset + + attributes. + This attribute can be used only when +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_dim=1 +\end_layout + +\end_inset + +. + The size of data_i_index determine the size of the fields dimension of + the corresponding domain, that is sent from the model. + Value can be negative or greater than +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + +. + In this case, the corresponding point will be considered as masked and + will not be extracted to enter the workflow. +\end_layout + +\begin_layout Subsection* +data_j_index (optional): +\emph on +1D-array of integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_j_index(:) +\end_layout + +\begin_layout Standard +In case of a compressed horizontal domain, define the data indexation for + the first dimension. + This attribute cannot be used together with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_jbegin/data_nj +\end_layout + +\end_inset + + attributes. + This attribute can be used only when +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +data_dim=1 +\end_layout + +\end_inset + +. + The size of data_i_index determine the size of the fields dimension of + the corresponding domain, that is sent from the model. + Value can be negative or greater than +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +nj +\end_layout + +\end_inset + +. + In this case, the corresponding point will be considered as masked and + will not be extracted to enter the workflow. +\end_layout + +\begin_layout Subsection* +mask_1d (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:) +\end_layout + +\begin_layout Standard +Defines a 1D mask of a local domain. + The masked value will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + This attribute must be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ni*nj +\end_layout + +\end_inset + +. + By default no values are masked. +\end_layout + +\begin_layout Subsection* +mask_2d (optional): +\emph on +2D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:,:) +\end_layout + +\begin_layout Standard +Defines a 2D mask of a local domain. + The masked values will be replaced by the value of the field attribute + +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + This attribute must be of size +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +(ni,nj) +\end_layout + +\end_inset + +. + By default no values are masked. +\end_layout + +\begin_layout Subsection* +domain_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: domain_ref +\end_layout + +\begin_layout Standard +Defines the reference to a domain. + All attributes are inherited from the referenced domain with the classic + inheritance mechanism. + The value assigned to the referenced domain is transmitted to to current + domain. +\end_layout + +\begin_layout Subsection* +i_index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: i_index(:) +\end_layout + +\begin_layout Standard +Defines the global index of the first dimension of a local domain held by + a process. + By default the size of the array must be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni*nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +j_index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: j_index(:) +\end_layout + +\begin_layout Standard +Defines the global index of the second dimension of a local domain held + by a process. + By default the size of the array must be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni*nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Grid attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a grid. +\end_layout + +\begin_layout Subsection* +description (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: description +\end_layout + +\begin_layout Standard +Defines the descriptions of a grid. +\end_layout + +\begin_layout Subsection* +mask_1d (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_1d(:) +\end_layout + +\begin_layout Standard +Defines the mask of a local 1D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_2d (optional): +\emph on +2D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_2d(:,:) +\end_layout + +\begin_layout Standard +Defines the mask of a local 2D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_3d (optional): +\emph on +3D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_3d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 3D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_4d (optional): +\emph on +4D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_4d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 4D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_5d (optional): +\emph on +5D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_5d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 5D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_6d (optional): +\emph on +6D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_6d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 6D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_7d (optional): +\emph on +7D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_7d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 7D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + Meaningfull for the XIOS workflow. +\end_layout + +\begin_layout Section +Field attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a field as it will appear in an output file. + If not present, the identifier +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + + will be substituted. +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +standard_name +\end_layout + +\end_inset + + attribute as it will appear in the metadata of an output file. +\end_layout + +\begin_layout Subsection* +long_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name as it will appear in the metadata of an output file. +\end_layout + +\begin_layout Subsection* +expr (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: expr +\end_layout + +\begin_layout Standard +Defines the expression for arithmetic or time-integration operations performed + on a field. + For example if +\series bold +expr= +\begin_inset Quotes erd +\end_inset + +sqrt(@temp2 - pow(@temp, 2)) +\begin_inset Quotes erd +\end_inset + + +\series default + then the variance will be calculated on the incoming flux of the field + +\series bold +temp +\series default + (given that field temp2 that holds the square of temp was correctly defined). + +\end_layout + +\begin_layout Subsection* +unit (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the unit of a field, as it will apear in the associated metadata + in the output file. +\end_layout + +\begin_layout Subsection* +operation (mandatory): enumeration +\emph on + {once, instant, average, maximum, minimum, accumulate} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines the temporal operation applied to a field. +\end_layout + +\begin_layout Subsection* +freq_op (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: freq_op +\end_layout + +\begin_layout Standard +Defines the sampling frequency of a temporal operation, so that field values + will be used for temporal sampling at frequency +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op +\end_layout + +\end_inset + +. + It can be also useful for sub-processes called at different frequency in + a model. + The default value is equal to the file attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +output_freq +\end_layout + +\end_inset + + for +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +instant +\end_layout + +\end_inset + + operations and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1ts +\end_layout + +\end_inset + + (1 time step) otherwise. +\end_layout + +\begin_layout Subsection* +freq_offset (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: freq_offset +\end_layout + +\begin_layout Standard +Defines the offset when +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op +\end_layout + +\end_inset + + is defined. + Accepted values lie between +\series bold +0 +\series default + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op - 1ts +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op - 1ts +\end_layout + +\end_inset + + for fields in the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +write +\end_layout + +\end_inset + + mode and +\series bold +0 +\series default + for fields in the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +read +\end_layout + +\end_inset + + mode. +\end_layout + +\begin_layout Subsection* +level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: level +\end_layout + +\begin_layout Standard +Defines the output level of a field. + The field will be output only if the file attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + output_level +\begin_inset Formula $\geq$ +\end_inset + +level +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of a field in an output file. + Available values are: 2 (integer), 4 (float single precision) and 8 (float + double precision). + The default value is 4 (float single precision). +\end_layout + +\begin_layout Subsection* +enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: enabled +\end_layout + +\begin_layout Standard +Defines if a field must be output or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +true +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +check_if_active (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: check_if_active +\end_layout + +\begin_layout Standard +Sets a check if a field will be used at a given time step. + Activating the check may improve performance for fields which are not used + frequently, while it can detoriate performance for fields used at each + time step. + The default value is false. +\end_layout + +\begin_layout Subsection* +read_access (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: read_access +\end_layout + +\begin_layout Standard +Defines whether a field can be read from the model or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. + Note that for fields belonging to a file in +\series bold +\emph on +read +\series default +\emph default + +\series bold +mode +\series default +, this attribute is always +\series bold +true +\series default +. +\end_layout + +\begin_layout Subsection* +field_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: field_ref +\end_layout + +\begin_layout Standard +Defines the field reference. + All attributes will be inherited from the referenced field via the classical + inheritance mechanism. + The values assigned to the referenced field will be transmitted to the + current field to perform temporal operation. +\end_layout + +\begin_layout Subsection* +grid_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: grid_ref +\end_layout + +\begin_layout Standard +Defines the field grid. + Note that only either +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + or a combination of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +domain_ref +\end_layout + +\end_inset + +, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scalar_ref +\end_layout + +\end_inset + + or +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +axis_ref +\end_layout + +\end_inset + + can be specified. +\end_layout + +\begin_layout Subsection* +domain_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: domain_ref +\end_layout + +\begin_layout Standard +Defines the field domain. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +axis_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_ref +\end_layout + +\begin_layout Standard +Defines an axis for the current field. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +scalar_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: scalar_ref +\end_layout + +\begin_layout Standard +Defines a scalar domain for the current field. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +grid_path (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: grid_path +\end_layout + +\begin_layout Standard +Defines the way operations pass from a grid to other grids, combined with + field_ref attribute. + Each grid name in +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +grid_path +\end_layout + +\end_inset + + must be separated by a comma. + All tranformation realated to the grid listed in grid_path will be applyed + successively, including the grid destination associated to the destination + field. + +\end_layout + +\begin_layout Subsection* +default_value (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: default_value +\end_layout + +\begin_layout Standard +Defines the value which will be used instead of missing field data. + For an entry field (coming from model, or from an input file), if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +detect_missing_value +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + are defined the values of the field equal to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + will be replaced by NaN. + For output field (read from the model or sent to server), the NaN values + will be replaced by +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + +, if defined. + For masked value, in output, if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + is defined, the corresponding value will be replaced by +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + +, otherwise, the value is undefined and will depend of the initial value + of the allocated memory block. +\end_layout + +\begin_layout Subsection* +valid_min (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: valid_min +\end_layout + +\begin_layout Standard +Define the minimum validity range of the field as it will be written as + a field metadata in the output file, accordingly to CF compliance. + +\end_layout + +\begin_layout Subsection* +valid_max (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: valid_max +\end_layout + +\begin_layout Standard +Define the maximum validity range of the field as it will be written as + a field metadata in the output file, accordingly to CF compliance. + +\end_layout + +\begin_layout Subsection* +detect_missing_value (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL: detect_missing_value +\end_layout + +\begin_layout Standard +For entry field, if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +detect_missing_value +\end_layout + +\end_inset + + is set to true and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + is defined, the corresponding value will be replaced by NaN (see +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + attribute). + This attribute is also used during temporal operation such as averaging, + minimum, maximum, accumulate..., to detect NaN value and remove it from the + computation (otherwise the result will be NaN). + It is used also in some spatial transformation, but will be replaced later + by a specific detect_missing value attribute related to the transformation. +\end_layout + +\begin_layout Subsection* +add_offset (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION: add_offset +\end_layout + +\begin_layout Standard +Sets the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +add_offset +\end_layout + +\end_inset + + metadata CF attribute in an output file. + In output, the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +add_offset +\end_layout + +\end_inset + + value will be subtracted from the field values. + It can be used together with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +scale_factor +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +prec +\end_layout + +\end_inset + + attributes in order to reduce the data range and the volume of written + data. + Fo reading, this attribute is also taking into account to +\begin_inset Quotes eld +\end_inset + +decompress +\begin_inset Quotes erd +\end_inset + + data. +\end_layout + +\begin_layout Subsection* +scale_factor: +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION: scale_factor +\end_layout + +\begin_layout Standard +Sets the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scale_factor +\end_layout + +\end_inset + + metadata CF attribute in an output file. + In output, the field values will be divided by the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scale_factor +\end_layout + +\end_inset + + value. + It can be used together with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +add_offset +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +prec +\end_layout + +\end_inset + + attributes in order to reduce the data range and the volume of written + data. + Fo reading, this attribute is also taking into account to +\begin_inset Quotes eld +\end_inset + +decompress +\begin_inset Quotes erd +\end_inset + + data. +\end_layout + +\begin_layout Subsection* +compression_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: compression_level +\end_layout + +\begin_layout Standard +Defines whether a field should be compressed using NetCDF-4 built-in compression. + The compression level must range from 0 to 9. + A higher compression level means a better compression at the cost of using + more processing power. + The default value is inherited from the file attribute +\series bold +compression_level +\series default +. +\end_layout + +\begin_layout Subsection* +indexed_output (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: indexed_output +\end_layout + +\begin_layout Standard +Defines whether field data must be output as an indexed grid instead of + a full grid whenever possible. + The default value is +\series bold +\emph on +false +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: ts_enabled +\end_layout + +\begin_layout Standard +Defines whether a field can be output as a timeseries. + The default value is +\series bold +\emph on +false +\series default +\emph default +. + A field will be tagged as timeseries if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_enabled +\end_layout + +\end_inset + + is set to true, and the associated file attribute timeserie is set to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +only +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +both +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +exclusive +\end_layout + +\end_inset + +. + A field tagged as timeseries will be output alone in a specific file suffixed + by the field name. + +\end_layout + +\begin_layout Subsection* +ts_split_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: ts_split_freq +\end_layout + +\begin_layout Standard +Defines the splitting frequency that should be used for a timeseries if + it has been requested. + By default the attribute value is inherited from the file attribute +\series bold +split_freq +\series default +. +\end_layout + +\begin_layout Subsection* +cell_methods (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: cell_methods +\end_layout + +\begin_layout Standard +Defines the cell methods field attribute. + it will be written as associated field metadata, accordingly to CF compliance. +\end_layout + +\begin_layout Subsection* +cell_methods_mode (optional): enumeration +\emph on + {overwrite, prefix, suffix, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: cell_methods_mode +\end_layout + +\begin_layout Standard +Defines the cell methods mode of a field. + +\end_layout + +\begin_layout Standard +XIOS defined itself the cell_method string, taking into account the operations + applied on the field. + But in some case it can modified, with the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +cell_methods +\end_layout + +\end_inset + + attribute. + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +overwrite +\end_layout + +\end_inset + + will replace the computed default string by the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +cell_methods +\end_layout + +\end_inset + + attribute, +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +prefix +\end_layout + +\end_inset + + will prefix the default string, and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +suffix +\end_layout + +\end_inset + + will suffix the default string. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + Meaningfull on XIOS workflow. +\end_layout + +\begin_layout Section +Variable attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a variable as it will appear in an output file. + If not present, the variable +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + + will be used. +\end_layout + +\begin_layout Subsection* +type (mandatory): enumeration {bool, int, int32, int16, int64, float, double, + string} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a variable. + Note that the +\series bold +\emph on +int +\series default +\emph default + type is a synonym for +\series bold +\emph on +int32 +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_target (optional): enumeration {file, field, both, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: ts_target +\end_layout + +\begin_layout Standard +This attribute specify if a variable present in a file (global attribute) + must be reported in each timeseries generated file. + If +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_target=none +\end_layout + +\end_inset + +, the variable is not included, if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_target=file +\end_layout + +\end_inset + +, the variable is included in each generated file as global attribute, if + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_target=field +\end_layout + +\end_inset + +, the variable is included as field attribute associated to the generated + files (field metadata), if +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_target=both +\end_layout + +\end_inset + +, the varible is included twice as file global attribute and field attribute. + +\end_layout + +\begin_layout Section +File attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a file. + If not specified a name is automaticaly defined from the file id. + For netcdf output, a +\begin_inset Quotes eld +\end_inset + + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +.nc +\end_layout + +\end_inset + + +\begin_inset Quotes erd +\end_inset + + suffix will be added to the file name. +\end_layout + +\begin_layout Subsection* +description (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: description +\end_layout + +\begin_layout Standard +Defines the description of a file. +\end_layout + +\begin_layout Subsection* +name_suffix (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name_suffix +\end_layout + +\begin_layout Standard +Defines a suffix added to the file name. +\end_layout + +\begin_layout Subsection* +min_digits (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: min_digits +\end_layout + +\begin_layout Standard +For the +\series bold +multiple_file +\series default + mode defines the minimum number of digits of the suffix describing the + server rank which will be appended to the file name. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + (no server rank suffix is added). +\end_layout + +\begin_layout Subsection* +output_freq (mandatory): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: output_freq +\end_layout + +\begin_layout Standard +Defines the output frequency for the current file. +\end_layout + +\begin_layout Subsection* +output_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: output_level +\end_layout + +\begin_layout Standard +Defines the output level for all fields of the current file. + The field is output only if the field attribute +\series bold +level +\series default + is less or equal to the file attribute +\series bold +output_level +\series default +. +\end_layout + +\begin_layout Subsection* +sync_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: sync_freq +\end_layout + +\begin_layout Standard +Defines the frequency for flushing the current file onto a disk. + It may result in poor performances but data will be written even if a file + is not yet closed. +\end_layout + +\begin_layout Subsection* +split_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_freq +\end_layout + +\begin_layout Standard +Defines the frequency for splitting the current file. + The start and end dates will be added to the file name (see +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +\emph on +split_freq_format +\end_layout + +\end_inset + + attribute). + By default no splitting is done. +\end_layout + +\begin_layout Subsection* +split_freq_format (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: split_freq_format +\end_layout + +\begin_layout Standard +Defines the format of the split date suffixed to a file. + It can contain any character, +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%y +\end_layout + +\end_inset + + +\emph default + will be replaced by the year (4 characters), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%mo +\end_layout + +\end_inset + + by the month (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%d +\end_layout + +\end_inset + + by the day (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%h +\end_layout + +\end_inset + + by the hour (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%mi +\end_layout + +\end_inset + + by the minute (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%s +\end_layout + +\end_inset + + by the second (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%S +\end_layout + +\end_inset + + by the number of seconds since the time origin and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%D +\end_layout + +\end_inset + + by the number of full days since the time origin. + The default behavior is to create a suffix with the date until the smaller + non zero unit. + For example, in one day split frequency, the hour, minute and second will + not appear in the suffix, only year, month and day. +\end_layout + +\begin_layout Subsection* +split_start_offset (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_start_offset +\end_layout + +\begin_layout Standard +Defines the offset of the start splitting date when +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_freq +\end_layout + +\end_inset + + attribute is enabled. + This attribute is used only to shift the start date of the splitting format. + It has no impact on the real splitting date. + +\end_layout + +\begin_layout Subsection* +split_end_offset(optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_end_offset +\end_layout + +\begin_layout Standard +Defines the offset of the end splitting date when +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_freq +\end_layout + +\end_inset + + attribute is enabled. + This attribute is used only to shift the end date of the splitting format. + It has no impact on the real splitting date. + +\end_layout + +\begin_layout Subsection* +split_last_date (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: split_last_date +\end_layout + +\begin_layout Standard +Define the end splitting date when +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_freq +\end_layout + +\end_inset + + attribute is enabled. + If +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_last_date +\end_layout + +\end_inset + + is lesser than the compute end splitting date, then the end splitting date + will be replaced by +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_last_date +\end_layout + +\end_inset + + in the file name. + This attribute can be usefull when a simulation is over before the computed + splitting date, to be consistent with the file internal calendar. + The format of +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +split_last_date +\end_layout + +\end_inset + + string attribute must be consistent with a date. + +\end_layout + +\begin_layout Subsection* +enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: enabled +\end_layout + +\begin_layout Standard +Defines if a file must be written/read or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +true +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +mode (optional): +\emph on +enumeration {read, write} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: mode +\end_layout + +\begin_layout Standard +Defines whether a file will be read or written. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +write +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +type (optionnal): +\emph on +enumeration {one_file, multiple_file} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a file: +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +multiple_file +\end_layout + +\end_inset + +: one file by server using sequential netcdf writing, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +one_file +\end_layout + +\end_inset + +: one single global file is wrote using netcdf4 parallel access. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +multiple_file +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +format (optional): +\emph on +enumeration {netcdf4, netcdf4_classic} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: format +\end_layout + +\begin_layout Standard +Define the format of a file: +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +netcdf4 +\end_layout + +\end_inset + +: the HDF5 format will be used, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +netcdf4 +\emph default +_ +\emph on +classic +\end_layout + +\end_inset + +: the classic NetCDF format will be used. + The default value is +\series bold +\emph on +netcdf4 +\series default +\emph default +. + Note that the +\series bold +\emph on +netcdf4 +\emph default +_ +\emph on +classic +\series default +\emph default + format can be used with the attribute +\series bold +type +\series default + set to +\series bold +\emph on +one_file +\series default +\emph default + only if the NetCDF4 library was compiled with Parallel NetCDF support (–enable- +pnetcdf). +\end_layout + +\begin_layout Subsection* +par_access (optional): +\emph on +enumeration {collective, independent} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: par_access +\end_layout + +\begin_layout Standard +For parallel writing, defines which type of MPI calls will be used. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +collective +\end_layout + +\end_inset + +. + Nota : this attribute is now deprecated, and has no effect on I/O parallelism. + +\end_layout + +\begin_layout Subsection* +read_metadata_par (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: read_metadata_par +\end_layout + +\begin_layout Standard +For files in the read mode, defines if parallel or serial I/O will be used + by model processes for reading file metadata. + The default value is false implying serial I/O for reading metadata on + client side. + +\end_layout + +\begin_layout Subsection* +convention (optional): +\emph on +enumeration {CF, UGRID} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: convention +\end_layout + +\begin_layout Standard +Defines the file conventions. + The netcdf file can be output following the CF convention (1.7) or the UGRID + convention, usefull for unstructured mesh. + By default the CF conventions are followed. + The global file attribute +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +Conventions +\end_layout + +\end_inset + + will be added in the output file following the specified value. +\end_layout + +\begin_layout Subsection* +convention_str (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: convention_str +\end_layout + +\begin_layout Standard +Defines the +\series bold +Conventions +\series default +attribute to be added to file global attributes. + This attribute will overwrite the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +Conventions +\end_layout + +\end_inset + + global file attribute generated by the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +convention +\end_layout + +\end_inset + + XIOS attribute. +\end_layout + +\begin_layout Subsection* +append (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: append +\end_layout + +\begin_layout Standard +If this attribute is set to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +true +\end_layout + +\end_inset + + and if the file is present, the file is open, and data will be append at + the specified time record. + If the time record already exists, data will be overwritten, otherwise + a new time record is created and data is appended. + If append is set to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +, a new file will be created, even if a old file is present, overwritting + it. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +append = false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +compression_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: compression_level +\end_layout + +\begin_layout Standard +Defines whether the fields should be compressed using NetCDF-4 built-in + compression by default. + The compression level must range from 0 to 9. + A higher compression level means a better compression at the cost of using + more processing power. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +0 +\end_layout + +\end_inset + + (no compression). +\end_layout + +\begin_layout Subsection* +time_counter (optional): +\emph on +enumeration {centered, instant, record, exclusive, centered_exclusive, instant_e +xclusive, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_counter +\end_layout + +\begin_layout Standard +Defines how the +\begin_inset Quotes eld +\end_inset + +time_counter +\begin_inset Quotes erd +\end_inset + + variable will be output: +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +centered +\series default +\emph default +: use centered times (default option for all field operations except for + instant) +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +instant +\series default +\emph default +: use instant times (default option for field operation +\series bold +instant +\series default +) +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +record +\series default +\emph default +: use record indexes +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +centered_exclusive: +\series default +\shape default +do not include centered times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +instant_ +\emph default +exclusive: +\series default +\shape default +do not include instant times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +exclusive: +\series default +\shape default +include neither instant times nor centered times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +none +\series default +\emph default +: do not output the variable. +\end_layout + +\begin_layout Standard +The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +centered +\end_layout + +\end_inset + + if there are only centered time axis. + It will be +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +instant +\end_layout + +\end_inset + + if there are only instant time axis. + If both instant and centered time axis are present, the default value will + be +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +centered +\end_layout + +\end_inset + +. + +\end_layout + +\begin_layout Subsection* +time_counter_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_counter_name +\end_layout + +\begin_layout Standard +Define the name of a time counter. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +time_counter +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +timeseries (optional): +\emph on +enumeration {none, only, both, exclusive} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_series +\end_layout + +\begin_layout Standard +Defines whether the timeseries must be output: +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +none +\series default +\emph default +: no timeseries is outputted, only the regular file +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +only +\series default +\emph default +: only the timeseries is outputted, the regular file is not created +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +both +\series default +\emph default +: both the timeseries and the regular file are outputted. +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +exclusive +\series default +\emph default +: the timeseries is outputted and a regular file is created with only the + fields which were not marked for output as a timeseries (if any). +\end_layout + +\begin_layout Standard +When time series is enabled, each tagged field (see +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +ts_enabled +\end_layout + +\end_inset + + field attribute) is output into a separate file. + The default value is +\series bold +\emph on +none +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_prefix (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: ts_prefix +\end_layout + +\begin_layout Standard +Defines the prefix to use for the name of the timeseries files. + By default the file name will be used. +\end_layout + +\begin_layout Subsection* +time_units (optional): +\emph on +enumeration {seconds, days} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_units +\end_layout + +\begin_layout Standard +Define the time unit of the time axis present in the file. + Two choices are possible : +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +seconds +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +days +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +seconds +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +record_offset (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: record_offset +\end_layout + +\begin_layout Standard +Defines an offset for the time records associated to the file. + For a file in +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +read +\end_layout + +\end_inset + + mode, the first record sent will be shift of +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +record_offset +\end_layout + +\end_inset + + value instead of 0. + For file in write mode, the first time record to be output will begin from + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +record_offset +\end_layout + +\end_inset + + value. + The default value is 0. +\end_layout + +\begin_layout Subsection* +cyclic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: cyclic +\end_layout + +\begin_layout Standard +If the option is activated for fields to be read, then upon reaching the + last time record, reading will continue +\begin_inset Quotes eld +\end_inset + +cycle +\begin_inset Quotes erd +\end_inset + + at the first time record. + The default value is false. +\end_layout + +\begin_layout Subsection* +time_stamp_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_stamp_name +\end_layout + +\begin_layout Standard +Defines the timestamp name of the date and time when the program was executed + which will be written into an output file. + The default value is +\begin_inset Quotes eld +\end_inset + +timeStamp +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsection* +time_stamp_format (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_stamp_format +\end_layout + +\begin_layout Standard +Defines the timestamp format of the date and time when the program was executed + to be written into an output file. + It can contain any character. + +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%Y +\end_layout + +\end_inset + + +\emph default + will be replaced by the 4-digit year (4 digits), while +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%y +\end_layout + +\end_inset + + +\emph default + will be replaced by the 2-digit year. + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%m +\end_layout + +\end_inset + + will be by the 2-digit month, while %b will be replaced by the 3-character + month. + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%d +\end_layout + +\end_inset + + will be replaced by the day (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%H +\end_layout + +\end_inset + + by the hour (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%M +\end_layout + +\end_inset + + by the minute (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%S +\end_layout + +\end_inset + + by the number of seconds, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%D +\end_layout + +\end_inset + + by the date in the MM/DD/YY format. +\end_layout + +\begin_layout Subsection* +uuid_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: uuid_name +\end_layout + +\begin_layout Standard +Defines the name of the global attribute designing the UUID of the file. + The default global attribute is +\begin_inset Quotes eld +\end_inset + + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +uuid +\end_layout + +\end_inset + + +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsection* +uuid_format (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: uuid_format +\end_layout + +\begin_layout Standard +Defines the format of file's UUID. + In the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +uuid_format +\end_layout + +\end_inset + + string, the sub-string +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +%uuid% +\end_layout + +\end_inset + + will be replaced by string computed UUID. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Transformation attribute reference +\end_layout + +\begin_layout Subsection +reduce_scalar_to_scalar +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines the type of reduction operation performed on the scalar. + Like a scalar is redondant accross process (except if masked), the reduction + will be similar to a MPI reduction accros procces. + +\end_layout + +\begin_layout Subsection +extract_axis_to_scalar +\end_layout + +\begin_layout Subsection* +position: +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: position +\end_layout + +\begin_layout Standard +Global index of a point on an axis to be extracted into a scalar. +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Subsection +interpolate_axis +\end_layout + +\begin_layout Subsection* +type (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the interpolation type on an axis. + For now only polynomial interpolation is available, so this attribute is + currently meaningless. + +\end_layout + +\begin_layout Subsection* +order (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Standard +Defines the order of interpolation. + The default value is 2. +\end_layout + +\begin_layout Subsection* +coordinate (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: coordinate +\end_layout + +\begin_layout Standard +Defines the coordinate associated with an axis on which interpolation will + be performed. +\end_layout + +\begin_layout Subsection +reduce_axis_to_axis +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines a reduction operation performed on an axis across model processes. +\end_layout + +\begin_layout Subsection +reduce_axis_to_scalar +\end_layout + +\begin_layout Standard +Reduces data defined on an axis into a scalar value. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Subsection +zoom_axis +\end_layout + +\begin_layout Subsection* +begin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: begin +\end_layout + +\begin_layout Standard +Defines the beginning index of a zoomed region on a global axis. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + + of the associated axis. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +n (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n +\end_layout + +\begin_layout Standard +Defines the size of a zoomed region on a global axis. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated axis. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated axis. +\end_layout + +\begin_layout Subsection +compute_connectivity_domain +\end_layout + +\begin_layout Subsection* +n_neighbor: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_neighbor(:) +\end_layout + +\begin_layout Subsection* +local_neighbor: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +2D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: local_neighbor(:,:) +\end_layout + +\begin_layout Subsection* +n_neighbor_max: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_neighbor_max +\end_layout + +\begin_layout Subsection +extract_domain_to_axis +\end_layout + +\begin_layout Subsection* +position (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: position +\end_layout + +\begin_layout Standard +Defines the index on a domain starting which an axis will be extracted along + the direction specified with the +\series bold +direction +\series default + attribute. +\end_layout + +\begin_layout Subsection* +direction (mandatory): +\emph on +enumeration {iDir, jDir} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: direction +\end_layout + +\begin_layout Standard +Defines the domain dimension along which an axis will be extracted. + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +iDir +\end_layout + +\end_inset + + means along the direction i, +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +jDir +\end_layout + +\end_inset + + along the direction j. +\end_layout + +\begin_layout Subsection +interpolate_domain +\end_layout + +\begin_layout Subsection* +order (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Standard +Defines the order of interpolation. + This attribute is only for internal interpolation module. + Currently, only first order and second order are available for conservative + interpolations. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +renormalize (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: renormalize +\end_layout + +\begin_layout Standard +This flag is usefull only when targeted cells intersect masked source cells. + In case a field corresponding to a flux value, the result of the interpolation + remain correct. + Otherwise for intensive field, the computed value need to be renormalize + prorate of the non masked intersected area to remain correct. + This flag activate these functionnality. + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +quantitity (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: quantity +\end_layout + +\begin_layout Standard +If this flag is set, the interpolation will preserve extensive property + of the field. + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +use_area (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: use_area +\end_layout + +\begin_layout Standard +If this flag is set, given area for source and target domain (if any) will + be used to renormalize compute weight by the ratio given area / computed + area. + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +detect_missing_value (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: detect_missing_value +\end_layout + +\begin_layout Standard +If flag is set to true, input data of the field to be interpolated are analyzed + to detect missing values. + Detected cells are considered as masked and will be taking into account + for interpolation in a similar way than the domain mask. + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +mode (optionnal): +\emph on +enumeration {compute, read, read_or_compute} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: mode +\end_layout + +\begin_layout Standard +Define if interpolation must be computed (compute), read from file (read), + or if find file weight, read otherwise compute (read_or_compute). + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +compute +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +write_weight (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: write_weight +\end_layout + +\begin_layout Standard +If this flag is set, the computed weights will be written in file. + If weights are already read from a file, nothing will happen. + Default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +weight_filename (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: weight_filename +\end_layout + +\begin_layout Standard +Define the file name where the weights will be written or read. + If not specified when trying to read or write, a name will be automatically + generated. + +\end_layout + +\begin_layout Subsection* +read_write_convention (optionnal): +\emph on +enumeration {c, fortran} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: read_write_convention +\end_layout + +\begin_layout Standard +Define the convention for pair of global index source and destination for + wich a weight is defined. + For C convention, index will begin to 0, for fortran, index will begin + to 1. + Usefull only for read ar write weights from/to a file. + Default value is corresponding to C convention. +\end_layout + +\begin_layout Subsection +reduce_domain_to_axis +\end_layout + +\begin_layout Subsection* +direction: +\emph on +enumeration {iDir, jDir} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: direction +\end_layout + +\begin_layout Standard +Defines the domain dimension along which a reduction of the domain into + an axis will be performed. + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +iDir +\end_layout + +\end_inset + + means along the direction i, +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +jDir +\end_layout + +\end_inset + + along the direction j. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines the reduction operation performed on the domain. +\end_layout + +\begin_layout Subsection* +local (optionnal): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: local +\end_layout + +\begin_layout Standard +Defines whether the reduction should be performed locally on data owned + by each process or on the global domain. +\end_layout + +\begin_layout Subsection +reduce_domain_to_scalar +\end_layout + +\begin_layout Standard +Reduces data defined on a domain into a scalar value. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines the reduction operation performed on the domain. +\end_layout + +\begin_layout Subsection* +local (optionnal): +\emph on +bool +\emph default + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: local +\end_layout + +\begin_layout Standard +Defines whether the reduction should be performed locally on data owned + by each process or on the global domain. + The default value is +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection +reorder_domain +\end_layout + +\begin_layout Subsection* +invert_lat (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: invert_lat +\end_layout + +\begin_layout Standard +Defines whether the latitude should be inverted. + The default value is false. +\end_layout + +\begin_layout Subsection* +shift_lon_fraction (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: shift_lon_fraction +\end_layout + +\begin_layout Standard +Defines the longitude offset. + The value of the parameter represents a fraction of +\series bold +ni_glo +\series default +. + Default value is 0. +\end_layout + +\begin_layout Subsection* +min_lon (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: min_lon +\end_layout + +\begin_layout Standard +If both, +\series bold +min_lon +\series default + and +\series bold +max_lon +\series default +, are defined, a domain will be reordered with latitude values starting + from +\series bold +min_lon +\series default + and ending at +\series bold +max_lon +\series default +. +\end_layout + +\begin_layout Subsection* +max_lon (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: max_lon +\end_layout + +\begin_layout Standard +If both, +\series bold +min_lon +\series default + and +\series bold +max_lon +\series default +, are defined, a domain will be reordered with latitude values starting + from +\series bold +min_lon +\series default + and ending at +\series bold +max_lon +\series default +. +\end_layout + +\begin_layout Subsection +expand_domain +\end_layout + +\begin_layout Subsection* +order: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Standard +Define the size of the halo expansion. +\end_layout + +\begin_layout Subsection* +type (optional): +\emph on +enumeration {node, edge} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines whether the node or edge connectivity should be calculated for the + expanded domain. +\end_layout + +\begin_layout Subsection* +i_periodic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: i_periodic +\end_layout + +\begin_layout Standard +If the attribute value is true, values of fields defined on the expanded + domain will be duplicated from those of the original domain periodically + along the first dimension. + The default value is false (masked values on the expanded domain). +\end_layout + +\begin_layout Subsection* +j_periodic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: j_periodic +\end_layout + +\begin_layout Standard +If the attribute value is true, values of fields defined on the expanded + domain will be duplicated from those of the original domain periodically + along the second dimension. + The default value is false (masked values on the expanded domain). +\end_layout + +\begin_layout Subsection +zoom_domain +\end_layout + +\begin_layout Subsection* +ibegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the zoomed region on the first dimension + of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +ni (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni +\end_layout + +\begin_layout Standard +Define the size of zoomed region on the first dimension of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + + of the dimension of domain. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +jbegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: jbegin +\end_layout + +\begin_layout Standard +Define the beginning index of the zoomed region on the second dimension + of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo-1 +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +nj (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj +\end_layout + +\begin_layout Standard +Define the size of zoomed region on the second dimension of the global domain. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the dimension of domain. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection +generate_rectilinear_domain +\end_layout + +\begin_layout Subsection* +lon_start (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lon_start +\end_layout + +\begin_layout Standard +Along with +\series bold +lon_end +\series default +, the attribute defines the longitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lon_end (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lon_end +\end_layout + +\begin_layout Standard +Along with +\series bold +lon_start +\series default +, the attribute defines the longitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lat_start (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lat_start +\end_layout + +\begin_layout Standard +Along with +\series bold +lat_end +\series default +, the attribute defines the latitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lat_end (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lat_end +\end_layout + +\begin_layout Standard +Along with +\series bold +lat_start +\series default +, the attribute defines the latitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +bounds_lon_start: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon_start +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lon_start +\series default + and +\series bold +bounds_lon_start +\series default + set the longitude range of a generated domain. + If both sets, +\series bold +(lon_start, lon_end) +\series default + and +\series bold +(bounds_lon_start, bounds_lon_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lon_end: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon_end +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lon_start +\series default + and +\series bold +bounds_lon_start +\series default + set the longitude range of a generated domain. + If both sets, +\series bold +(lon_start, lon_end) +\series default + and +\series bold +(bounds_lon_start, bounds_lon_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lat_start: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat_start +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lat_start +\series default + and +\series bold +bounds_lat_start +\series default + set the latitude range of a generated domain. + If both sets, +\series bold +(lat_start, lat_end) +\series default + and +\series bold +(bounds_lat_start, bounds_lat_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lat_end: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat_end +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lat_start +\series default + and +\series bold +bounds_lat_start +\series default + set the latitude range of a generated domain. + If both sets, +\series bold +(lat_start, lat_end) +\series default + and +\series bold +(bounds_lat_start, bounds_lat_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Chapter +Fortran interface reference +\end_layout + +\begin_layout Section* +Initialization +\end_layout + +\begin_layout Subsection* +XIOS initialization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_initialize(client_id, local_comm, return_comm) +\end_layout + +\begin_layout LyX-Code + CHARACTER(LEN=*),INTENT(IN) :: client_id +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(IN),OPTIONAL :: local_comm +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(OUT),OPTIONAL :: return_comm +\end_layout + +\begin_layout Subsubsection* +Argument: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +client_id +\end_layout + +\end_inset + +: client identifier +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + +: MPI communicator of the client +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + +: split return MPI communicator +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called before any other call of MPI client library. + It may be able to initialize MPI library (calling +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_Init +\end_layout + +\end_inset + +) if not already initialized. + Since XIOS is able to work in client/server mode (parameter +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +), the global communicator must be split and a local split communicator + is returned to be used by the client model for it own purpose. + If more than one model is present, XIOS could be interfaced with the OASIS + coupler (compiled with +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +-using_oasis +\end_layout + +\end_inset + + option and parameter +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_oasis=true +\end_layout + +\end_inset + +), so in this case, the splitting would be done globally by OASIS. +\end_layout + +\begin_layout Itemize +If MPI is not initialized, XIOS would initialize it calling MPI_Init function. + In this case, the MPI finalization would be done by XIOS in the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + subroutine, and must not be done by the model. +\end_layout + +\begin_layout Itemize +If OASIS coupler is not used (using_oasis=false) +\begin_inset Separator latexpar +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Itemize +If server mode is not activated ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=false +\end_layout + +\end_inset + +): if local_comm MPI communicator is specified then it would be used for + internal MPI communication otherwise +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + communicator would be used by default. + A copy of the communicator (of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + +) would be returned in return_comm argument. + If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + is not specified, then +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + can be used by the model for it own communication. +\end_layout + +\begin_layout Itemize +If server mode is activated ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +): +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + must not be specified since the global +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + communicator would be split by XIOS. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument. +\end_layout + +\end_deeper +\begin_layout Itemize +If OASIS coupler is used ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_oasis=true +\end_layout + +\end_inset + +) +\begin_inset Separator latexpar +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Itemize +If server mode is not enabled ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=false +\end_layout + +\end_inset + +) +\begin_inset Separator latexpar +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Itemize +If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + is specified, it means that OASIS has been initialized by the model and + global communicator has been already split previously by OASIS, and passed + as +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + argument. + The returned communicator would be a duplicate copy of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Itemize +Otherwise: if MPI was not initialized, OASIS will be initialized calling + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_init_comp_proto +\end_layout + +\end_inset + + subroutine. + In this case, XIOS will call +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + when +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalized +\end_layout + +\end_inset + + is called. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument using +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_get_localcomm_proto +\end_layout + +\end_inset + + return argument. +\end_layout + +\end_deeper +\begin_layout Itemize +If server mode is enabled ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +) +\begin_inset Separator latexpar +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Itemize +If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + is specified, it means that OASIS has been initialized by the model and + global communicator has been already split previously by OASIS, and passed + as local_comm argument. + The returned communicator return_comm would be a split communicator given + by OASIS. +\end_layout + +\begin_layout Itemize +Otherwise: if MPI was not initialized, OASIS will be initialized calling + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_init_comp_proto +\end_layout + +\end_inset + + subroutine. + In this case, XIOS will call +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + when +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalized +\end_layout + +\end_inset + + is called. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument using +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_get_localcomm_proto +\end_layout + +\end_inset + + return argument. +\end_layout + +\end_deeper +\end_deeper +\begin_layout Section* +Finalization +\end_layout + +\begin_layout Subsection* +XIOS finalization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_finalize() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This call must be done at the end of the simulation for a successful execution. + It gives the end signal to the xios server pools to finish it execution. + If MPI has been initialize by XIOS the MPI_Finalize will be called. + If OASIS coupler has been initialized by XIOS, then finalization will be + done calling +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + subroutine. +\end_layout + +\begin_layout Section* +Tree elements management subroutines +\end_layout + +\begin_layout Standard +This set of subroutines enables the models to interact, complete or query + the XML tree data base. + New elements or group of elements can be added as child in the tree, attributes + of the elements can be set or query. + The type of elements currently available are: context, axis, domain, grid, + field, variable and file. + An element can be identified by a string or by an handle associated to + the type of the element. + Root element (ex: +\begin_inset Quotes eld +\end_inset + +axis_definition +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field_definition +\begin_inset Quotes erd +\end_inset + +,....) are considered like a group of element and are identified by a specific + string +\begin_inset Quotes eld +\end_inset + +element_definition +\begin_inset Quotes erd +\end_inset + + where element can be any one of the existing elements. +\end_layout + +\begin_layout Subsection* +Fortran type of the handles element +\end_layout + +\begin_layout Quotation +TYPE(xios_element) +\end_layout + +\begin_layout Standard +where +\begin_inset Quotes eld +\end_inset + +element +\begin_inset Quotes erd +\end_inset + + can be any one among +\begin_inset Quotes eld +\end_inset + +context +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +axis +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +domain +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +grid +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +variable +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +file +\begin_inset Quotes erd +\end_inset + +, or the associated group (excepted for context): +\begin_inset Quotes eld +\end_inset + +axis_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +domain_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +grid_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +variable_group +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +file_group +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsection* +Getting handles +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_element_handle(id,handle) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element), INTENT(OUT):: handle +\end_layout + +\begin_layout Standard +where element is one of the existing elements or group of elements. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine returns the handle of the specified element identified by + its string. + The element must be existing otherwise an error is raised. +\end_layout + +\begin_layout Subsection* +Query for a valid element +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +LOGICAL FUNCTION xios_is_valid_element(id) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout Standard +where element is one of the existing elements or group of elements. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns .TRUE. + if the element defined by the string identifier +\begin_inset Quotes eld +\end_inset + +id +\begin_inset Quotes erd +\end_inset + + exists in the data base, otherwise it returns .FALSE. + . +\end_layout + +\begin_layout Subsection* +Adding child +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_add_element(parent_handle, child_handle, child_id) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: parent_handle +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(OUT):: child_handle +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +parent_handle +\end_layout + +\end_inset + +: handle of the parent element. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +child_handle +\end_layout + +\end_inset + +: handle of the child element. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +child_id +\end_layout + +\end_inset + +: string identifier of the child. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine adds a child to an existing parent element. + The identifier of the child, if existing, can be specified optionally. + All group elements can contain child of the same type, provided generic + inheritance. + Some elements can contain children of another type for a specific behavior. + File element may contain field_group, field, variable and variable_group + child elements. + Field elements may contain variable_group of variable child element. +\end_layout + +\begin_layout Subsection* +Query if the value of an element attribute is defined (by handle) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_is_defined_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: return true if the attribute as a defined value. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to query if one or more attributes of an element + have a defined value. + The list of attributes and their type are described in a specific chapter + of the documentation. + +\end_layout + +\begin_layout Subsection* +Query if a value of an element attributes is defined (by identifier) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_is_defined_element_attr(id, attr_1=attribute_1, attr_2=attribute +_2, ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: element identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: return true if the attribute as a defined value. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to query if one or more attributes of an element + have a defined value. + The list of available attributes and their type are described in a specific + chapter of the documentation. + +\end_layout + +\begin_layout Subsection* +Setting element attributes value by handle +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x and attribute_type_x are describing in the chapter dedicated + to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be set. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to set one or more attributes of an element + defined by its handle. + The list of available attributes and their types are described in corresponding + chapters of the documentation. + +\end_layout + +\begin_layout Subsection* +Setting element attributes value by id +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + The attributes attribute_x and attribute_type_x are described in corresponding + chapters. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be set. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to set one or more attributes of an element + defined by its string id. + The list of available attributes and their type are described in corresponding + chapters of the documentation. +\end_layout + +\begin_layout Subsection* +Getting element attributes value (by handle) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x and attribute_type_x are describing in the chapter dedicated + to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be get. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to get one or more attribute value of an element + defined by its handle. + All attributes in the arguments list must be defined. + The list of available attributes and their type are described in a specific + chapter of the documentation. + +\end_layout + +\begin_layout Subsection* +Getting element attributes value (by identifier) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: element string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be get. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to get one or more attribute value of an element + defined by its handle. + All attributes in the arguments list must have a defined value. + The list of available attributes and their type are described in a specific + chapter of the documentation. +\end_layout + +\begin_layout Section* +Context management interface +\end_layout + +\begin_layout Subsection* +XIOS context initialization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_context_initialize(context_id, context_comm) +\end_layout + +\begin_layout LyX-Code + CHARACTER(LEN=*),INTENT(IN) :: context_id +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(IN) :: context_comm +\end_layout + +\begin_layout Subsubsection* +Argument: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + +: context identifier +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_comm +\end_layout + +\end_inset + +: MPI communicator of the context +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine initializes a context identified by +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + + string and must be called before any call related to this context. + A context must be associated to a communicator, which can be the returned + communicator of the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_initialize +\end_layout + +\end_inset + + subroutine or a sub-communicator of this. + The context initialization is dynamic and can be done at any time before + the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + call. +\end_layout + +\begin_layout Subsection* +XIOS context finalization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_context_finalize() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called to close a context before the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + call. + It waits until that all pending requests sent to the servers will be processed + and all opened files will be closed. +\end_layout + +\begin_layout Subsection* +Setting current active context +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_current_context(context_handle) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_context),INTENT(IN) :: context_handle +\end_layout + +\begin_layout Standard +or +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_current_context(context_id) +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*),INTENT(IN) :: context_id +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_handle +\end_layout + +\end_inset + +: handle of the context +\end_layout + +\begin_layout Standard +or +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + +: string context identifier +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +These subroutines set the current active context. + All following XIOS calls will refer to this active context. + If only one context is defined, it will be set automatically as the active + context. + +\end_layout + +\begin_layout Subsection* +Closing definition +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_close_context_definition() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called when all definitions of a context are finished + at the end of the initialization and before entering to the time loop. + A lot of operations are performed internally (inheritance, grid definition, + contacting servers,...) so this call is mandatory. + Any call related to the tree management definition done after will have + an undefined effect. +\end_layout + +\begin_layout Section* +Calendar management interface +\end_layout + +\begin_layout Subsection* +Creating the calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, + & +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, + & +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, & +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\begin_inset Newline newline +\end_inset + +CHARACTER(len = *), INTENT(IN) :: type +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), OPTIONAL, INTENT(IN) :: timestep +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), OPTIONAL, INTENT(IN) :: start_date +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), OPTIONAL, INTENT(IN) :: time_origin +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: day_length +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: month_lengths(:) +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: year_length +\begin_inset Newline newline +\end_inset + +DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift +\begin_inset Newline newline +\end_inset + +DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift_offset +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: leap_year_month +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + +: the calendar type, one of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"Gregorian" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"Julian" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"D360" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"AllLeap" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"NoLeap" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"user_defined" +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +timestep +\end_layout + +\end_inset + +: the time step of the simulation (optional, can be set later) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: the start date of the simulation (optional, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date(0000, 01, 01, 00, 00, 00) +\end_layout + +\end_inset + + is used by default) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +time_origin +\end_layout + +\end_inset + +: the origin of the time axis (optional, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date(0000, 01, 01, 00, 00, 00) +\end_layout + +\end_inset + + is used by default) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +day_length +\end_layout + +\end_inset + +: the length of a day in seconds (mandatory when creating an user defined + calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + +: the length of each month of the year in days (either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + + must be set when creating an user defined calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + +: the length of a year in seconds (either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + + must be set when creating an user defined calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + +: the yearly drift between the user defined calendar and the astronomical + calendar, expressed as a fraction of day (can optionally be set when creating + an user defined calendar in which case +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + must be set too) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift_offset +\end_layout + +\end_inset + +: the initial drift between the user defined calendar and the astronomical + calendar at the time origin, expressed as a fraction of day (can optionally + be set if +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + are set) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + +: the month to which an extra day must be added in case of leap year (can + optionally be set when creating an user defined calendar in which case + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + must be set too) +\end_layout + +\begin_layout Standard +For a more detailed description of those arguments, see the description + of the corresponding attributes in section 1.2 +\begin_inset Quotes eld +\end_inset + +Calendar attribute reference +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine creates the calendar for the current context. + Note that the calendar is created once and for all, either from the XML + configuration file or the Fortran interface. + If it was not created from the configuration file, then this subroutine + must be called once and only once before the context definition is closed. + The calendar features can be used immediately after the calendar was created. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If an user defined calendar is created, the following arguments must also + be provided: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +day_length +\end_layout + +\end_inset + + and either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + +. + Optionally it is possible to configure the user defined calendar to have + leap years. + In this case, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + must also be provided and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift_offset +\end_layout + +\end_inset + + might be used. +\end_layout + +\begin_layout Subsection* +Accessing the calendar type of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_calendar_type(calendar_type) +\begin_inset Newline newline +\end_inset + +CHARACTER(len=*), INTENT(OUT) :: calendar_type +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +calendar_type +\end_layout + +\end_inset + +: on output, the type of the calendar attached to the current context +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine gets the calendar type associated to the current context. + It will raise an error if used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing and defining the time step of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_timestep(timestep) +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), INTENT(OUT) :: timestep +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_timestep(timestep) +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), INTENT(IN) :: timestep +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +timestep +\end_layout + +\end_inset + +: a duration corresponding to the time step of the simulation +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the time step associated to + the calendar of the current context. + Note that the time step must always be set before the context definition + is closed and that an error will be raised if the getter subroutine is + used before the time step is defined. +\end_layout + +\begin_layout Subsection* +Accessing and defining the start date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_start_date(start_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: start_date +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_start_date(start_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: start_date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: a date corresponding to the beginning of the simulation +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the start date associated to + the calendar of the current context. + They must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing and defining the time origin of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_time_origin(time_origin) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: time_origin +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_time_date(time_origin) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: time_origin +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: a date corresponding to the origin of the time axis +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the origin of time associated + to the calendar of the current context. + They must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Updating the current date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_update_calendar(step) +\begin_inset Newline newline +\end_inset + +INTEGER, INTENT(IN) :: step +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +step +\end_layout + +\end_inset + +: the current iteration number +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine sets the current date associated to the calendar of the + current context based on the current iteration number: +\begin_inset Formula $current\_date=start\_date+step\times timestep$ +\end_inset + +. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the current date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_current_date(current_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: current_date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +current_date +\end_layout + +\end_inset + +: on output, the current date +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine gets the current date associated to the calendar of the + current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the year length of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +INTEGER FUNCTION xios_get_year_length_in_seconds(year) +\begin_inset Newline newline +\end_inset + +INTEGER, INTENT(IN) :: year +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year +\end_layout + +\end_inset + +: the year whose length is requested +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the duration in seconds of the specified year, taking + leap years into account based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the day length of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +INTEGER FUNCTION xios_get_day_length_in_seconds() +\end_layout + +\begin_layout Subsubsection* +Arguments: None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the duration in seconds of a day, based on the calendar + of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Section* +Duration handling interface +\end_layout + +\begin_layout Subsection* +Duration constants +\end_layout + +\begin_layout Standard +Some duration constants are available to ease duration handling: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_year +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_month +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_day +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_hour +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_minute +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_second +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_timestep +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Arithmetic operations on durations +\end_layout + +\begin_layout Standard +The following arithmetic operations on durations are available: +\end_layout + +\begin_layout Itemize +Addition: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration + xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration - xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Multiplication by a scalar value: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = scalar * xios_duration +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration * scalar +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Negation: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = -xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Comparison operations on durations +\end_layout + +\begin_layout Standard +The following comparison operations on durations are available: +\end_layout + +\begin_layout Itemize +Equality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_duration == xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Inequality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_duration /= xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section* +Interface relative to date handling +\end_layout + +\begin_layout Subsection* +Arithmetic operations on dates +\end_layout + +\begin_layout Standard +The following arithmetic operations on dates are available: +\end_layout + +\begin_layout Itemize +Addition of a duration: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date = xios_date + xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction of a duration: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date = xios_date - xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction of two dates: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_date - xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Comparison operations on dates +\end_layout + +\begin_layout Standard +The following comparison operations on dates are available: +\end_layout + +\begin_layout Itemize +Equality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date == xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Inequality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date /= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Less than: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date < xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Less or equal: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date <= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Greater than: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date > xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Greater or equal: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date >= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the time origin +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER(kind = 8) xios_date_convert_to_seconds(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the time origin for the + specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the beginning of the year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER xios(date_get_second_of_year)(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the beginning of the year + for the specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of days since the beginning of the year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_day_of_year(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of days since the beginning of the year + for the specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a fraction of the current year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_year(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the fraction of year corresponding to the specified + date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the beginning of the day +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER xios(date_get_second_of_day)(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the beginning of the day + for the specified date, based on the calendar of the current context. + It should not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a fraction of the current day +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_day(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the fraction of day corresponding to the specified + date based on the calendar of the current context. + It should not be used before the calendar was created. +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/XIOS_reference_guide.pdf b/xios_2311_src/doc/XIOS_reference_guide.pdf index f9d62670c5986fdbd9c87d92bfa44fd7f754750b..1ee9fca9318222a480cbb3abbf6c6f3e56aaf3a5 100644 GIT binary patch literal 317091 zcmd431z1%}`!-H@H&UBMa&I=UK{`bmB&9o~q(izv>6Q*Dk!}!Bx=RV^?odKP_;1v6 zJm={5p5Obs{?~VX?2FA>vu3TC=b3qC?z!(-&?`wuv4PmRG3l3AhQ~3{AV59<5MXCy z1rQM6kh8QkHFU7_Ff{>yIOG6e5cDdDLlFQ0fjA@qAZ{+`nF4?Z%%KVZ137u22hsp- z00_v(1K%Gv*{gMyD4f!RFj~DpQG#*YM_?I*=FYhmDJUqXoL7;y4XFdp+ zhx?Z_9?&m!f$;un8!rg>i*3AIoWDGem*-bIc=@^axiuI7IWMn4i!5)Cum4Qs|rxzcwlR02Y>*f zw%ndbXbVV+^KtQVaf?dwa`S+AB}B#exPf3vap*ah7)XknQ%FDx#3c^qkpPK;xFyA< zxOjLaAwVFfq!<@aOpK3*Q%dMIj?o;Q3>}=lM=msI>FFgEr7+R{h-zpwbKMpR4fWe$ z!_?N?$pXLyS!em~uP-fcc;wj)wp+FPNK0NXXI2!PL+O zIxfuYrdg^!)M^Y?bWlJ+O?f8=Cn_qcB%XX<5#=+9nbL@_Z&smUFkU}?3L!UBTsWFq z)>P?x3qSE1bw)gL<#&07nn;KtR;6%~owj?8$1TG9jgRLZ?R?l9V=w*ss*~oBW%^)# z;d0;Z03XHQ07a~rnhoXcL7>Hmk9dGI4yhPmuXtMc%g9aoy@9wh90k+Na^s1J@E!-U z>~hy|p5@Tue#hz2n75Ii&aHz8>6jCM=2rtr7Wq4mz9^jH%vZcxe&UzIlNdzrqO+zz zg)80Er-~7oGEgs;B^*|J96>b7s*`|H5%sn_i3I|Q-LdAz3GDY;nt3YC@_IdrmJc({ zsUV|zD2A00KlR~o?aG-=It2sb_z$Z#15{{iX<1)LYtN?WQ!FgobEsXoQ+i-TKptGA!AWJzk^Cgvx@UNyFh^3P|rg5k(h_dLyx!ZHG?I1`$=`cr@JI? z1}d%f042L$dU_@A@l)NnR}8fc=zk%ob%~;&mpPeTX|&i(*f<$GYIWB=NV)FD;}&bn zwW1Pa%WfQq-4$e=pmdyOFZSH@D6QVRbn|N2PC&f?HEFQDFB5JyOSwMWItfF%SkpI| zJuMMVc5ll0id|xtd2nqtNKrb!qUCxOtoW+sA?RqZk$*$qo5cvDVazMJ(a&1n%*o%6 zs)~KQBa=_lv4f%V^@?Kcy;l+X91~&5vli;-S5DRg_Fn6iye&)1gaS5+E=3J4d4_A` zd+F-h8&=r$yG*lZk9gFp7aCl0+ln@hLohY zdB*%Xku0q{A)h3J_(MKfdQwd(k5Jj}BXbAXg1#jk94tb6j-D=IFa;2W!lCKI_({N} zv(ei@I9ucObTReGilBD>f&>@pCh`jkao4ry4Z(Zcsh=Wa!Ni3!%~G1vg#N+PQ;YnywX{+6$VrC-Jg=dTCkc;qh>lNqb*fs?E-`p@2qhQn zn;)fm@K=mh2n!d1d|tV^8=p;d5k4=o=Zuj35=+E0c7XR<)Oz4WzG3(P2iJ6eL3-&((r1*t-7I& zgF3XQp{S(H*{`V{(pRAv={_J8tYP{RQD9Dlyx>!^7&4GwxchdRSl?|dS4z)w)K&2M z67OPhK#@s22?3pSR7%25D!oPlgR^W^aG3l#rhB26-ymW0cKsgVK{g)vrlL-tjYL6K zCbaZmNFlt$2dmdj4Nj`TT@9)HmjvWNr1lsl@zOgzs&e%%C*U#ybcz~*__ z0$4oGt^niW_cLuZuQzv1dc)7X`Y}+xO0r=Cw=_haE0&nVFl}xj1H@=cld5xo9}P&_}=AvvP1xLg3c_TsAY= zEOJRvI~@^1QMV>z%g6mlZ%{T|wn@8M;PqFn-thV`*JL^+U&?Z^cr3$Ry|iIs^`w>^ ztVjA?+v_nyhBoLu8w9!$P9A^+-?0EJK4s7HCy*IwKX+%DanvRomKS=cj~}}7OHLH* zu}jaVzqyn+eWRwW+1V;H2cWP=eZi7xKbP_GQ%9+vQU;#SyE-AkB`NpI?R!fn+8L_f?rtIIx%*1c2$?jKZ{6VYIlQm zWHMccy_;6d2dh8zVF0uK;9Pgfwd2#J$`;?a%P0} znO-}ZTu4oU|4=l*A-|%R_1WjfZN}VI}p%j(FH?yZ!P{SBr+wwR#(v zP|n9{hlN)CLT0F)Yd=zNCWNQU-x_=wWC){Xk+|Mzl$yTA z2z+p4ctPg~rzuog%Sfa*EpR=U!?N+RRd*JdcH@f|&D`B6iqq|+41Nc0yJnZCg6Foq zk(T6G3H(4*G4~9Eatyb&VNak2Y^c0~Q zEL@K_HSWDq-Zi?@I!TWM7h=cU9%=Q5LR#ch2&HCTZQ%fAx-oQxLNDB1CGTf6h6wV4 zQ(DV_=j!cm;--1pUuBO+h)*>p?TSy2)}_6ha#oyuH!W_L7;4yAO{^>Vj1(qr9Rjqh z?&p#hz4tFXqo||R%&P#ERDS9CSTmMN*M3}W3cEp4A<2#% z$EESPrn`_kNF*s}>{1TRLCZ6~4|ToXp0=X^N#v=0pplOVaM zihfkG7^LmURX}VbDCF*P^no}!R^NDd^8_XHBV>>Cje}Dc%T<4YT~eU18*;W0Ix`JH zfkRD8rww{8X_J2ZoNK-$x1dAr-aXc^sG8ZtRGb&J9LAQ`m!q#tEAY+p!(>lNS_ily z=e#Uxp1fNUehqr_2>V~=9 zaMBm_oy^`SYQRgLoRJ!l`>r1-I-1aO7!-(?nl27Ce>f1n+!s5;CfmpL%uG6_jAI~; zS2XMmCUp74l^edBD7O-Boc>sz`6a=0nhd|QP#vfCL+eM=YPOAAZ97HNmFAM-Cb1a% z$6bUa`$JFPERSF-k=k`dA>nO$%4M~d=N1uv6)Vly03G|MV-_+0cy4u{}EI$?ImpK!~ zx#kT3ZeDx8az~M%UUX{P63QF*v&9DT88~ES^!n)n4y6{KQ~5#AkUv}My9zljT#LEW z-q@PX?D;np=hn8zteBruD-&r@h~=srGzLo62!2M1y5kcvW_U7yhXi4V(PZWofqjF< z6O|Q(6_2D0EoFq^iv{@keCyJ>07{F2zpo0+yDTf&W)Ugvz~|utcMYc6%L5FN-(jVZ6e3PssJ{1a z2m1A42Y)ptanVyFDSEXw0ViY0$+T|Ja25If0)a!_e;q<{y0F?ZcIG~ds0Iu3Klr(c z`@e*|M}*Ib-abzmzOD@f2y6)7tRRir7mei6e~2ujRk+trL>)#jFR+W1Ba6##q)}a2 zsFGm~FFF~mL02UT=S1L`tx_L4YZ;K<5mA&*)47mETG@s86_=8+WR9TVXvKPfh^)Iv zO9|%`?Li)MS{CkG(%Ko)#<1!wndW#F6pV*kdep@G#!eUg7>f!FbV^-qHeAn3$M6;k z1TBj#I$PdbPSfS#q;5qM-wRAq$y3*4As6dLkYUj2G$2`-D$kDWzzpd=Q9g$YLL+)e z?dim^ABx57%e*MmI14}LJ7H<5lf@&UkaUmP+uxm_Mg)YIG-AGRg1}nfjMRhhh2gaa zd@}{sNat+O0=__@kwyxEzG+@#79i$86$nA_0zZtDKw4{ibA8uq^Jv${?-X}2xD8%g4q{WEI;v* zqi^Mu2*%U61=C02z697L|KP7%hJ0n<|W*53X=3I$d_9@x=xB;O0>O1-w zwl|!2Sj~I9vM+n?zMR6~m)N9{og-v(Ly|N?^9ryVO=OoUTe@F}$8n5t4N6!-R9m_% z#BhCu9fhOphZoEzCq&g0*($y6Is6(K9W67Wr9;+@Dsg`6nV|pOdru#yuu})* zE;7GFrS`ak`_liC$$^~<%~dJ?Gl7cRqx-ltU=cv<1i@g4`>w+1uC-+ERp*ErZv?eV z+x&85^n1M#J-5(ypvrFNB#@qR%BDW@6&7Bl2?a{yrl&p}yrrRNu@ON`WtN>iInu(N zIjr|edF@QcJH8sCJ+<9c9QIYh0XNibFomhT>zHUzdho~U{|8a{oyYjjBgmUN8JZY6 z8AACCC{G0CGn5R?O&tL|d{A}?dZy}bZ^|JKy>4x1{*!5ha+7}&5#kPZ_F{H!+PBmQ zHy<}UCzL1T@}?%1 zhX1FhsF*t1IXf6bYXt#8IkZ1&bz9NDR_XTAcblZ3-uW5HRV@`4v#C~G2IjL?g$jf-5S%VRJPg7Q{UyAH>1Zb&;eKTX& zOGwMuyKiOifUSm*xSPql_zV5B-!}HG2fo|$(Ami8wn1-O70e-L=;$PFVdww=fgl_j zmL^UXw;qPFVo-l67}}WLIuL5N!;f4LAjhp^-F6x1=jXBRw>)CE zP00yh;{@>WL8)qxF2|p32yK_YdH;b8v>C;q{^yXig)&!`w&u_}eD8_h`rd7k9JjT+ zy$f2uTb2@_^4E61ZPfpEFXnM^{lh#E@RlY0Zr&fqe=!dXU<2_1phP8< zga7Z$1AiwDe{0??S^IbMZtaDdr_Bpt=i`MslbaoKs~&Livh&;q;U6Cmkc*x7dvoyd zv2$`l8BAyh{^c@={g&kZ$A<^PerqE)A3NWV8@?Sv!}nVo00CfVhTFjU{`vmQA2&g7 z<7DT$t;6@f-!AI@Ax3;}#P97QVQFS&3LOccA*>DUMTXygK>!FR2fMAElZmMrv{|94 zU}zP7rtm>i_yD}XKT~))ISjx3f}!Kf&s1J$DldSS@6QxI2!|oGWAgF-Oo2X&5Bdvj z#oI5??H4E1mEb>fK;3$q$PG>8`I!j1&Hnuh1Pzj()dhjLZm)1b6S@DAo#!_3+ZROl z`^fo6pZ;rq{e{Ej= z9rkWJ|M&j)gDdCcxsCUKQssa3b9zjL3<3xzn9=$PFz6C#zS-A|c;KyHxqZeWk-s{T zQGOy(xWDcv3-@@hK(;boo*}uMw2%bUX^w#_{z0FV@<~;^yq9s9I^;%g9cVluJ zvad&=kpCtR=MuF3-|;O<10Q`xjz~K_!HGELVVIL>-C?J2y!Ik*WL4 zBTquJ&dxcWieABgwR<*QFPL07$y%7h3#-Ot5HeK_FcW3Nf+a7Cu}{0q*qF&|n90Ld zdTzBxvyJO%la>cJ@gUVVCSYaFx9$s~mP#ba?;Of`I|lsCp&)2D{%41RK@(su4WJSb z$p{~eC=M?kL?HfJj2)jg%NI5oJ62|B&EeDP7`6rwv^;hOgX*~DdBGe{knqxBiyx7f z1?HR`Z8R7SsX`}%9Ss8m;}fQSv8c-ugp@)!IVn;4q2m{uA zl-{<}HRuR7z%{^JBBZDM*7l!x=SOFPid6q*JI^E-qyn`a(a2aFQTE|?(`j)QU^);% zv5pOC0u9IS2%pI{91Hs9=v-vHL8F(4X><&u&Oal5fC3D3E9i z7j*z|18P)}cQG-pMEI|B4b1>%zDpO>kvCKZ23I#Qn`JkcJ<0v=<5;56VFWy$y!)+9 zKLOJp0RsHD0NESO#)9G;q(yD!#I$Kzdqt5t5wt>jARdFX2sH{?Gztn`{gDMd3i%zs zDOx!ilx}BVgdmCP^Xu9qS&!!)HPboK+m&~4Q|=7X=;VN6#fj%So&5F)PC}oF&c!{P zu+02WGDz<1Ig*XyEVdH*7WE~nUuE|jbNlf#H%3u!z24@O2BperjyBtH z@ux6UYV}`#>y%qy`nOKb2~`6Bb0;s2sZe+)f)VVsjngYjN$m|=kHFncQiM=M%G^Ey z3xcJEM_HfEJyE_uAqA`QSx@4kZTHMQSm=FoRpArzafdrWbzDtyDfn$FG^*R~*_Y=j zWr8^l>bFJ?im*28$fXwcHg`T>Vt!p;iex@!6I4?bGM>cqmBn>iv&1>J#G{*sDZveg z7jcQF)xZ+LZ%_Y1y}>Bxum;1m$crhda~CTGW&OVR5Lz^5uox)(UIb70I9`j0Q(VFYPkAf0BkRl8W|vQD76;5a$pFgiOaIlUJuj#^TB zC2yk`Sa@R2X}{DIxQaD&_J|_WnmI?lff(!csN?5Z^`ge)GT<|1g&s#`tWOW)kD_Z| z%;A~xZpQ?0<`jvaVyuK#I^-YfWWmYRAQ$M^^TKNeu_m_Tv5r^{Z(B`F^cbaZn?9wE z5%{3Y;*0&h@NPS&CPTlGsYX%J`_aA5IgXbvQ{9@(ztk)qB&eflY9*>N6`YDqMLl^& zoUE}O@>_rW0IxswY7lfc%YTk0F!vZ3qzWB2RYtf~fgrW=awTcdD)TBQ2oCKIlcuJa z$)97V+_QS<*!lLiW2Z=fQGl=}_L#hA?kYQ--Gvq?K${Pa%TM@=-GU#{5admA)g885;kf&$2y>dCA{ zL~j<6neMbL4PM{C@FJ0r)PJ8lyhTE$e(Qu=RQ|Ui1q=nF|Je!e2fIxy z5ud9}^U-Ql3((cnidoT4RKi`A6Y8}WKfi7D^u{lFw2EEKEa@$NNmFL`exrM`q({S5 z1Fddy8@JU1@8l8aLNp@c2@@>IN(LDW8857FBz@P5sXXjgbrxMJ-4+9RPtw|uh*`qM zDT(LJIviw!7b3aCD$(U?6`a zINIjBOqCy8Jz>V=A3egpJ_7p>qX_3R(W}R!rTO*Yt3_=Fp^wDI*)s7^E)lkCabeqD zusofN77!xb>?yUNiqWAO!Dy5Wc*fv_Y{gqT^IM1f0=Ge+e`8I+6(eBqZKxv~;nO0@ zqJKw7#`u6+i1dJN!-3D;VJn1%*{cD zZ)Cbc_J_AX5dV6EgoJeN1BHrLK2l-X;=Z{U1nyHt2|tifTSHRP@9GZz1=)iCb*b<^ zzC|GjNYE`yBHeh1l18jFLl)+&0tr8z{Mq>XQPEtmz@4bKv_MWAWIZumC~6kX~VTYLQlz-GSNj04kOYVR33V@3L-pJ;AoK z$zlHCsHi%CySG0v>T-exqrqqVqR8n2)jp%V_!rUyEXd2R%#S2=>Yfz^drz)+0Vp>Z z_F^jD`Aw@T-tVfnc7B}mesHYVH1S%3<&*C`UL2YW0b&6dpJI>+KThp&rCL15VTJQd zBb%?1KH2NbuKJ#a!MX{ZLWu9f?%eAbQM|0yT zCi#Tp7x6vf=0;cBvI6@BL4`E4V718f`3qm#g5iC!I`v_j!ab3j7G0WcLU+zP^ba^$ zbjUvq-$A7q+ys(LGN9s*3HPU%2hI0@T?j^7S^UR0GFe+cUF)tcDDUqtyAt{=w-Sir z{T8W#e}Uv+(7#1s=ft;R6=tMFK%%kJM`Rxv@SwnhTIDVtX|#cnh+I$%ECQLzC(HBr zr(#mr>hfv#j?^6d!Wd#d6KGd>xmKtU_tURc=X|EWD`_P;jQA$IuXj#zzp1vY{x#4O zkYMbxGH)9zX1&+4i5XK|9&D@4e)*Q2dvdsBK?r>|FzmY%E}nLN=e|AL;F z+kue8S|BtzG&U)+-PaDR8xR~=d5F)-D$$DS+`Sz#$m0Cerh7a5AmXFqY1PiY#J=LX zB)=ANlF#8t_%xCP{x;Y$i~J$I>(C|GSUMTO#}@;Y|AheEmcu8U__FCOC%|)IDG1p% z(qZFU&nu*mBUYW?#>_9P2QZYq`OgDj&=|i$$L;DtSO&NEd6a=ZOe~;U#563VgGgFQ z8Ni&C2O}!$P)*)>-#+DSAMi9eR2May?alj+jH4+>ho^2HX8fK;*pa*I6Q{c7nVu&v zdD7)u-|)xUDVA+NEt&Cb+EVpQUoM`TpNcvgCVro>pf{yglXRM0Hy#URzT+C{%kofgGQLBTu~rlC%z)O;q?dbQ~hC03OoRs6N|r|FfkG6qbr z?=I3rgbtA&^}Tg&SLIy26UlU?FbG?u^^k9(oDyrz-dGEu?!fc9Vq@kcqpP0^U*c=j zpw*XdcMT3JD%bQrPld6V^C$6Z3 z1Sf=XwY)rJA3dH&(clhitXP&3%Tz!XBlhwGK{Pc2hsRH=!Z~7JOwJBaJEf<5WjQvm zfatr9&v8_><|Pv{R#jOirZ2lHk8M;$b2xyy7iPubv4*iB4%+!+tnTysAvJGmS{GJX z>@P?IJMKs0#6(v%fZS2VR-_AW4^lkBN(XT$N(V9R^#bGCFl7WG43JkNfoMgAVzg8y zam0+Ol7!4&(eip}N*m&sX~Zn?)jZ---FEmJooHbU9(_4BobDj8IE(&bix=CQy~SRI zuos6W^tx`9V?!Z#RP9LVUwZX?usuw{pP5B$;XItHFjp)MxhZd+>LEKvN0){j`fcC% zWd+B{`){m3!f4AaT7_AR5YTMw#BPiBgq5b@wxmar&6hS2@ej*3f|EkJu9Z2;4T6B| zqCw&Wj@Mfv=Z9<;yZlArJbh7czE)vZ1ft0MY<%_4GE?)8a z)M>)q9u5nWqCU-Rg?ow(7%xsj8e7&iPeR;hTw}M>7#Es(EV#~&xKZDI4OL9Mj5A9F zm|x#1xN>$K89d_V(x-9dc^bK>A5U~x*{OYnl&M{C{#z&ix=!Tzw{>C-l$(Tdz`-~4 zoo~6^1NxhNZQ*Pe7Xd#w;075swtb~~v3h|=l=M;2W6SpG)0kaiyK>=n({neO(>_<9 zp7zpv3YAPv>gXRnl;rQPKlcl|_vXJ=|;The0b;@^Y9~li=gKKrfKgCOGD#!7Q~C1tAsPI>}O# z$2743fw*X&*_|r(g=XkHh9#Dlb;Z^?sXTtf=iHLS{Y~_TY#v&__2ths<}JYwRgb>Q zE4M^H^yC(ns@!t>P(|b$gZb@*8+vk!A8t>eo4O%Tz2wKqtt|0focu=cLpX2a0h$eR zo9ml?_>JU;p4^sud*Swu@2V2?4yej_`)4sce^C*>=~&Q3r8Xyo{o6+LTL=r)gdn#W z|M>gYqwfOFfBxo%3VF8`{_j6rVD@iS|NEWXTz|+&f24m)`Kb|oQ^LM4jsL0_V0P^!WKg1uX zngjf+n)6-ffvPz_pLVN>-nQreS;ztZvf|-{YDNEf7Ihv5S-k_2ATF8xCLT}Ky zDq~haNQ^-qOnDDOa8T$-(dDHlHSdorKMj0FDl?~{gU_TIihYc5k%^BS7oxnjLb4Id=uSw3qHC_ zW6@vHULR*p$?pN;IQ0oC>H`tHF)HS$JX*6X`bi?%uT=HkORQJ2p50NZw4@tY%~eRX ztbs%2PYimQ%58VGW?>xVzL5IBFTWw1PwbY`TO|vqQ|J6$KyuwS_TTsp5cj|F9boR! zKXihJ;)wY8KV*XFWY|#jSm~cC!3I<%2zU6qNDHgS0}`li_v@jj7f z-^C?DHZ}r87RLMiF#;kzjntZ(sMc?mzk-X>Q=Z{xe4enkntCL3r!ji3JJ9A{{I*;W zZHw`X7`>pBYVFT^9>Ou~Jm@@mvh!pLSgSJXY=A>Hha1ybF?We<4-Cjn$&H#8RZyoV^_7l2nnVe z63@-s31zDY_v^Qh4Xfc3@g)M#C7vUAKc~DRzPG7712M=oKT&~TPDqn+@L60dfEY71S*3&og|1NErj7!LvpKw+gyQ*Cuw6| zq*up+RDgMl;@%En=!ot!lshOYkzgRKk(rpf6VA3~3u%7E6gJkO-}*}XWhZyNpOO4Y zG%0Q^(}U;axkb2U6Qp4^3aK5{S;ztKL3e-alwZ-;zYb8kBkeLlA_QGWie}X0Gn~IW(FmJ_D!Pf{*P)x0fjDzL^bHgqfZH_+Vdm&(}&EZqk+Q7N5b~iuM~z9Y-}6) z#$HdJHblE>sWlEatVI++rYDy7cZ=~{^9z=@A77pyozU1iIvS!s(e~7zx)R+k4Vs4U z5yP%Fl;EQ0PZpY?-N&&nESSSx^rRnvs|DL%EQ zA>AzO?w!c@btY%Iu9Qa6*;)u>ZLiMyzv7qjJ4`kouMXwQy>42pn>@Sku+#tWb&t)L zm&>0L8!^dX+L5LVXfN7d#sdaqR2fW5Fn~4))hoi%{_?Odd!$IBP{7OL(A^9aN*FTb zB9wWw3o>yOH=L*u`pfJJ@p>`vE}Zlf+$^s5&LhmV_!1i@#f^6FUW)LqijhQcDq?F*u}zz_%QLIk32jGzKm~~?yTbKaCV3RF#M>wk( zIeK3lGrBXWhpBqaMeL_n&IOY`=LChxY7Y{s1oGti1CwCU4mRi+(<`KEK}*(on9+q} zaK#9cidDWD2W1Ckc8PUo`YJKr9aanTUYCTdS-t+K4$f|cDodv4$HHq`iH;yHbjG37&TtfxUUZ%@Sxm0G7(9S%WWWoSuu?|kqH*p*BgsX5ZR!nc^)R|q&y4lzBUpcg`!)kOuJ^-oUkGkvwVaeZ zvwmYHhhWc0YeN zR~j-Jx9=fCbDG5cD$m}!>(rUp79rt{%?TpetFJr7RGIn&0hH1cB*LYGT@fj{T zMxjZ!e+4aadWNEy|MLKMa_oowx9U{0lnGpVt1^!6SVGTZLlPcJq-y6Q z+bPavQ!$8x_kcS>Aml1jC$?o3PaP!8{3>TYCW+5ZVakT#(X-8< zb@{9TM}mh$e(H26>*~BvE`ANwiT9X0s8v#C37H|^_axymy@*5Jl7^X*O_u?VGc3sx zwErZg4I<&u_#mbA0V&@kFN48i?x*C)aa@*$7m*2;GzdPTU4yjD53XEy1 z_8cCcyrT%=DxA`D=cfy5dv7K-Fycb^+?i@lFa)jk&Q;)wVxW6uM_GGrVGk@$VYV)M zVgYU-z@^@|;Mr~%jM%#Ki&7ttT|WvK48<8N1~CE`bla<&r1}?{(mNatO&l5&`>OJvX zJ<3Wx_A28yZ-lzmcR)!OI&U=bv8#6p6c=dkml!2pwM@ak1Z2lS-=39F`9 zi+Cb#u)6zj_4T@XSD1tIfZs_nKe6WjW{&wzr~J2b%=anpH*?HSjQ6`a=Kr7h13KUE z0(fr!@5Jqv-M{Z^{>QHJUyu@rlk?v;#_XwU*+J(L@8L4wX_y!-8+N+8Y%Nx*&@Q_Q zVnmKM$us&+1e4zAO@?{>1yah$ST*0gO=CD(nvG@qH+*i&8Bd!D&T~S;;|n4xwSbiO z`PL%j=y2DpmDM9!dkPkYS`+(s00d$c!7_vfi!l&Y!DN}B@e`OkR?UX=nEh52#Dh(?I151oefuexLue6$% zfl9T3Yy4I=lh5-=f@UBhv=bB^o8Bc|tWgZWYRt{B;yH9JXO*A?uP zW(&JbKCZkRC+ohGJ}u6MEGu@s?!>-s!{*9D8_M~S@)hsieFg49saCO%J*5{fNgrb> z8-OdYwc2U1G=tKlEE6ArzZxvrQq$RPjS*J3J^)CM*V#}Vrp@wa09LMDHqY)X3y087 z7>ZUEn75$N^0s(LASriHR7MiG()OT`A=til5}*%w_{EsHj5T#01XAm>q>DAi$~kW^ z;46w=i|Nso6dy#>s48o5INz9r4kcxc#fMVY_ZZ;J&Er_Bg@*aS=I0t3TQE{fe$06K zJ(9b4Go@sg3By6F0e7;gU;6GQ)aH4XXvC&DA2A$K?Umx*p5V(8#zuw2l`a zn4lBVJFE`}ixrVI*wqkTFiNY?d~9(j*`BV8`m+8p+2!7VxcOb&TXW$-%+X(`60l+ohLSQH>w5@v7cA*y!mPj(Fw;Jk z7skk{S^&h`4k_YUeWw0_;BrN|mu}L}bHKT$U6XD#f+hMCxZ|>+6tsyFM_#Y3{b_a3 z(4drg1*R%c%DW zUaHlw-mBA*2RAp0+z^KK%*UHoK5ixFqgF(C{q$9KEo*nn9($Tp9Bwy6}quqVrzOwAyVd}f`ODb$|BMt-(6PWp9Ta$!VL zF>$T8HEG^7{dcP%=!p59A^hLW6yG`Z|8}PMzC!rTOmTbRdu9Hgm??f?m7yf`zwK+- z(~!TNDOxr(NIYYGHCbX~rPpewoo9}tiHiIwp=*u~C)Tz^xG<@0pH?ur${13g83)^l zks?iq_|Tc>sj2hnwM?O8N<1P5(R-J6x5UDDj=Y|@_$tX7tt(QmtMhku@3(pM(5Pt= zJ7n*w9aF1osj2}?N1X?9`kSnR?r1qRH9neqZ7cM8xwTk-Ucch$r#CpvG5%~S9$L}i zJq*mU?Gia|Na#46lBul=y7Si_8oCR`99&F2#OXx87^#S;F5mZ^199zYu>au4hM z+zIQw>UzuFA*z$>>9|pfu*0YKhhJW|`%})6eXVv0FLbn6BJ}YTn07k(;O)hq*|c~3 zVbA3w8M>AMcv`2tZ6>;wE4qVnypj^$yz-yc?IZ zn0>U}mCBnmn!C0BX*D59j$Z7XOSe--^ z4;vX5CPD=?kF!{{iVKCb9!b40F0h&7p|h={dtV*&N@PueuB1i5j&jCqJnqolym^Y4 zDk*h{GP1=6n+|Opu}Z&(tJuX^crtos=JgxlN7j^GG)n#)QCN5OXKMM~j}kj3OaLfl zm#_NnQnr&2SyJ|y8Mo7>*?vh*nK%+ydPNdGJAOH0Hg6>B?>awrY}FN4P4b%36F!dE zA>*CXpk{wW9tQDz`pUTEgqZ4_;~f7%Rv^7>UaWpWQ7zX4WY*z|Ixa`~ozAl(yj5=~ zf%$@tE)9JXEo#80{vs?E^PP5Zv%mFN1)VRYZ&K-2?FH;8hb;Pti>3d#<%t3M{DT9E zU8w>CFfSqd8{q6tK*|nwnjM<#+3|@;TmvNxk$XNSAcDT_!$mEv7BZw z0lX@0=S{59C!Yu-y~WQxAbek>rqB^%genqUqad-lse=6ddkB_$0M^fkiJph*Wqy#B zPf-SSvI`yuG6!$l^y=N7+q6Dk(Mg!Nt|xgy?n=Vs{oK3FZ*COJF?1#3WF_ArbbsF} zZQ|iU2d9Ti%VIDpqNOjA>ic8Vk^K)IRK{F^`zaz$nG|~FSDV280MU@O=r^pKoSu%r zRU<{bWpdI@G-gyp!~-e4Sop+a4%G!NNM0^uWbxf)zjgq<8&=DX4djKEoC8Wctc4#) zGj9k6?burpeIP$dzHv&aKijOU>$0}SL(x3oVCMHG;mUa7rO8PUiL+ zsT;E4B!DMm88u5eh3_I<{}s9J2D#y@wOYCtEb5pT>2F5;Z~r~(e?RR1c=z+a9ru6G zM86sMzg_vq$j=4f`SyApluLrXE&3-X^*>rK{FY<->l%SW3c6f?O1|HyDro6ExBm|9 zUzZNw?EYTOKlapf|0~V9r#WZ$kq5`;K!52zX}M+$fh4n?{EjtgaJ4kWt|0{mcdRjN zEupl-!?Uslil_^jX`aV*A#k2}?gF3Q9C)9eZ%=zyE{L5U4{QEe=`ntD@(W(gQs2ISem?9WJ9XLB(14w_&QBihCk}i! zk54{+Mt?1JAZwYN_>^e0A5CwW1<+^t|Fc-h_ zA{hK`eE;av2$5rcKvT}C1>U{&XflT9*(}74v;oDoJG&#Oq4!28IdFRC68cNt zeB6gqlSr$=}|LrS%np-N*>XB$Jc^NOtmey&z?weCuBkVy-I@L`nkUap@oWYynOe}m}^uD zta7?eeEX$4liZ>k|G1+WJo!BeF=}d-2QejmNSe$eLgK^z_Tlu=fDzl8qHRG6mT-jf zJr))g4rS?>acX))Yx(jA(u(60+*6qO@f{vGLF@#Z&ic&zN1@iw$6~^8URs~|hLC!! zOyJmbL?cC?kf(jf@vpCg?Ls63ly8u}v8UNqRjqx@eDLCHKrI~8%+s`{N8p%Kt)M8z zsReS?AlVbLRzISi$g)pW*NINzr77cD--$F{on~-UPh{Nm3 zF|b7+K5aTYf2v_}_P9S(VC4QxX_H{us&j*7K^^{rO@G~M9WT(P;{Dt-TX+9qKPRqYzv zSY6aqM3e#isDssVwL6n5|D%(juotYudwG5@Q2e8vUU2W1qHRAGm#vP7ypPiNLWshO z6W(epFm(WhdkfWSIamq*D6%n}CM|Gvn^IJ_)^P&Ui(>ndSuS?bG(o6=G?3z^gO%TY zoT(f!a((46cxX*hzQUkl;s%5JNmoHKYT!8t-=I?BWN!O`W*FE;1zTN=+Jy7~5F3jt znim}$8XaA7FI}Cly@14fJbs9l#xCNEpu1ld9RjA4F|2aL@%GI! zmaTRLOvtUf=4_zb@6tn$vO8iWiwBkIY>MYzr+zf*c$-BQf`s;AP;1hoOBh78)h~D$ zc%OB7o$N3WUD|IIHwTa@fW#Oq3BLhp?~M|#Fp2N;zC!#W8D2p0|Izl2VUljyx^`NX zwr$&HrES}`ZQFKcRhpH~th8<0w!ZAOdUx;ropny{-sd|1BCd#d--sVE#+=U_&;2Y- z`jxza_{X*Z<-VDPQZPY#W{u}8+KmkIcHsKcCJt=E>}E_lCjuP^a?eD+R-{uTOL+!= zNL0hyf9kO*iA=%SUph&E08i__J)ii{>hBn`IdvsrH+>G+mK>D^6%K#e-H` zK9he5#1k2P5B$@l^8C#7@}w=5uPTM@Hke^R@xu#YaKe+rHNRP-r|hQcaK!W8r%^a! zs!hF9XM=iEi{`NFN9X5DV;%6v06QP61uDI1Byqh6*RLrCIn10_)>rtnnjydPZ|x>@ z(YIP$bdr^Q>94Dln=EKkG7YKkEjYGR!X>p$zp-YYqCfR@ z25k<0@pD+nZ*ulb`hlHUj|r%n%tf#uO}-Vs{npqJsHC(DC#0ikTB>PB#WG*dyRWDt zzvQpPc4IJagP)tS-&wzur>j9f)=KyJ?+pY~{ZABlTbY1#vW>&w3_@R!c^`W%=hp^mweGa=X{R?43JlW_0HHz2_ z5SQuM?+pUUSZ;2+r78cxCk(TFr6JfrX*yX9#+feRgrS?-Dr#8}gRvA3>Sk@Ll(vVfT&Jgqo} z!Kao8AP>^|@`ZQT6}xxFN~ljtBpmDX9EV>q_BVuI!(s6**s2j>B%2L8#0s_9#@ce^`rDWfe98v14puqhIpH zS{o3u@6x80K@LyA{lo-y@x+Y<_SElYj}sRKkJf4DH4N)pSkP{e4U@=YeK^1qWt;2w z@8XA%f^#0;^_~(mg>Tq%@3jYnP5WN^9-h!4u9SIJ3t#Kmvvk_Zq@(VS2N~a@sB%6d z9TI~pymQ3PHHYxa^(g)a(VfS5-mLiotrvca%w?T?MI83xo@*UjMbp(ji5~C|1U0MD zQDGn{01xhF2{YYtS`x{tG<`E_t({7GVfyV=cKu%0OWpN$@2+1yz*E01PTx~fS-{AX zBDHmlPMe~>5$Ice#;2x7_q(G35Y5zSYm@P3W05s zo>btB%Ss8AQ?60GQx;junT9lnIDAA?JWl69g^UN|Zdx8a@e$RV{v95zinRV~?L2QM z0EM_WDyNoTx}<-sXuAeJm!sx|+$L#pSTl7?7>vCU+$h9K3B8ZN<+`3m77tF*w8IP% zEiNz0QHuBKt$Y_8JsyO?tnBT3WXNWx_vZ;X$1|R7it6HJ)#gsl<`sgL!E3^59)y$V z08*ip$}5FFjuwox<|8z~4?sV}HSxHFYojjs(c2(CX#RQ^gkT2mXQI5;EnGsAb1Np!G>d300U~Go$w(uMN)R-kz70)M>UvxG~1q!mT?M5egOw7-P_ z-K3K3h4RcH;OzmV?ZNUXd|nwtc>+q7jx5B{xvLx~0g6oUtfH?fWVTjTU!h?U z1hRt+5b=Jcx$ywPtpnhOkX}^{-zOlj&V?r?g!h7V`mOtPwLt4_A<*Tp_ie$6Wx7zc zCCKF(&JCh$#BGad`XWNE09X`y13_e5Venrq)6;vfx_Baj{o;cICi~`Vuw&{-9gfm> zmDeFkdX3xw9bKLM%3}tpzEPeJ+z*Rm);m*co7jcqAX^(iomVhvb8=Lj_QK!=UcIQj z@@x@6vZoN44UWEl+jjcNm@my+3G?$Z3A4k5KcMAjUDB7gtX(d+Z(E^rxth$w(muv! zgT07$$rj7!Nr;F<6|yE=Y@zozk>ZkS7Qm#Zk7yvuHsnvSMNERX%EgSzOP!7Ob`2U^ zxemN3w^6oDFL6<#U0t1<<~X@$qGmJ?G%G`JOoMM`(}o;gias2~kLz37LDE$uS6idi zX`*!qxEQRO5`=s2GAenYgPlz7P>ha3(?3(Tc z96kN`)(#sW?=sye=IbWr1@$_wecemE#d~ijn6-5!!Tq76e7HeHq^3VaR7eWFJu;^< zf6SQD_6^4@)CSYKu}iX%+t3OBTzrg`YY7YyyMkPFmTf8eCYu%UwwO31Af!OxR;$(V zME66uc>J%lj{oJrkCpu|taa#CXd*#4M;)@Vv9RO0*yF$ZFrhrW&#l#o#Gqqhgpwr zpBkIZCO=JcJTEOTy>&e=PxTEKnD&(I_*Vp!;~}7{0r1oi%scL;^l=4^G^p^Nql$JMIIZ*2>f~bNY$-B2?_E2d)W0GEI9I79(fuM z2;dPv{e&Ewm53(yW%WfCYfiWg!GJt1z-&zzCq4c|ai; z>#ZCvfZXn`nfLIIWQdR_9O&9+v0tr1@SXHQNLvtrLjIl=D_-b$ z&~N|(>~BDVTV}+pxI3W!Jp?Xl-ItX@0Lq}=00G8Np?E8}ppJui&r|eIbTMyTGkU8( z0_@}jf3*rApfhh*zf$zc$$46BdOv?cFQWM0i9UULI|LD6WBX3qT{#`HiFR{y=VOle z(yJkDcUjBGLE{5~1@;T~1D1gU+}FAud@6SjE#kbaQe2Hj?ZY2k#yEjv*D~k%(~FTm z#7^PCTn7N5Cy_Bvee&Uaaw9-N0Kn3FLhFG$2M|DfX5(0faDF%sOyGgu0#bJ`-6H{X zclmsJ)c4w?0V4uFzO%hOhCMr@jL%7-u3C{*eR3%7Go?cS0~- zql<^_rwRc5L5HW}_)xVJ3x&y5xk*c|qVP#w9#A93`8Jb-?{Wc;47DQ}hQsqf4D|F( zPvivP{<&infDaESye9-e&B5P~2vOw8vY>YdpbHN<_|2H)P0Yko78$DY*Jk}-%KPh^ z=8jw$++2>G1&}%2{Z#RR{-}I1PzT%PN!}RxYK1u%S@kFKN%Y}x^r?APvMk2oL7qcL-g z>qm+gv88vEMLf$HsTZ`au4ghHO8OMn?fgp zCW`@NL9+t)SGm2HiG#LP1`Wl5OX*U%L8+dWLd03*clJ(mIUuk9zBF3ehvgTga z*;Y`pNtD%QF!S-HJUT>Q^tbOQ>O)*nSu)Z28H?{9sUU668tkC)_XQAtHM z$_x$HCGB&Mmh@QhUEHVaV5&z4MZz~ClvgB>XH;cD1YvEMbRG>*A@5aemUKPXcc<{G zXw6VxJ0H2W*f0M)t;V%LeoLyqqU~#IoU@hfw)yC93bQF9ZoYR!VOSBssdyoLzZh55 zI%;%InBJBn0uPUkhzssTuLIwnMZJEHE8>dHwgAbP#1^mCtSZ$8w}lV$?to!HuOmHl zb10GC6`XkSUmkz0*JH9|+5xt>mf;`U4@2lzJwGj{Q0e2q2l{DyFVV%VB{K5tI6zip*F)nK#+O)= zsGm;Pj-#)x!nW#mp_rAz^$+b4^TS=u;{uFIeWhMaW!kMu5|*u#jpV+2WKPXTps#ir zN0FhP0mt==1*=O{4vt0dUOSiunnIP_zCF6PxOC&mfdynSlv#!_H`Pd5RLAO)fL|u#^Ypg3{IEcQ7;EQLc!%NE?=Y-#$j& z3u4JB!KMQ#_Bi2~AY+#9-8X;nJvp#N@Ng=Ic8LCnX%By681VYIiy(<$VCN^6E=00##xQJ|&BqSNRy>QMhR`7EsKR<_*#2McYVKU!5jr zY16P>8M$|bLGxJ#H`o4=E;nYmj1SzE(M1Mxe*OE(?1T!+nRq~^_?%5F0@~g8)jmlN zmrzWbR}9K>HqI?o%R!V#onfD~*kc>hy5E_Nn5?6oaIP<5n~wu5%O|{tzftDqK9sN9 z+NzBY(SFZ4-ey?ax9wCngKVB#Y!Qngbm~~3M^}$4pJtc+_SEsS#Z4-{Bgv*8NV|jz zmxxlhEs(pI?}jub-?3MnPJl92;JCFfn@JCr{q&OsEl?Z|Y|NR5c*ux7BRd;%O8CUG zN~V&M8Fl%^M%EQ+b&~bLXxArhQA1N6(!ed!c_sbhEXc$7yZhk6@wLrx6qaCtF8*y0 z+m0Q}Wzw(T0n`|9&2N@$!y(n^CgC|TN-@fa{Ds%S$w5xV-nLQ>t0T~kjrG~o=Bss?Dhs|g|Xxw{TV z$+w4vn&lJ#2quQhvN||yP48_e4_}J!F8mlmXHPy#cPFufn;t=C4KpUbnVY_y1yu#4 zhV!1?&S0i1JvS>MVlS6nk`AbesWk{vY)4$CqV z6%l-)=xdj~2=Ep==t`M77^uIn43Gk(H}j!Q&>6d7&H}0@Q(%xJLr$gaL;iHB3BH&; zrDEc21(QXsG!_wL*&)YEF)74+4EG+&qRR44Pt}&@MenSJkDS8iWOVR>V~|)b z%@DG=55eV)IxNFyb>_#i#2!A=$c{2jI0lK*_DW(E7 z&Q64st&)@k<+@VRhz;k}bsjsIwsgg#hFz+(vu1$zrBV63ZK94MztJ!fVnMF4@l<u7u^EPx(wrtaM@+?`R&gmyK@?3E#G&#xZ9ezy z$yAE?i-?`MyM+|iB4=NTNNGvKW`D4xmf#JO!C592RCBP1(Q_0}67fwY(AP6yZWdVB z+Q)e4%y5rhGho55>Dp$D{j{!xr6S(}L_I}i+*~VcM30feZKzF(Wb5~e^TC^-n@1MY znyfSFzM8SFswZTNtl!BCqLd`rK)l~j@@p})BF0F6@k&D+baf}Rh)}HM^O&qt_F18D zB69hzH~}MfeU&ER{iLY1Cr&DW|I?{G*Nd zO41od%7R6_s~tH|fzC@-c&^5p4pv!y<5K+AD>fa%$IJ6Tf;if4vNFxs91c}6s-Re@ zQ}B9Pxw77LvTCDhxzx4j{Qlt{My_<^ans8P+er~~V*##p>UqG8B@n%oCCCe$hiUoF z+<(rbsQA>$PD{m^zJ!Wrg-V^TU@@5aG2jhV=SEzliJV0<#v6jya=R_>MY!PZ2<~yA zDq&0LTC^~M@ItTz8Z^fXFF+K)GP^=JhuF*#{oDC~NsDc^E1|4~w;H_v%*O3r9!X%1 z(JCtLiz8YJ{YClXzDAWj@e3idyzDD;uY@*lRyp^JiRtfFAr0}2LBz*0m8K0(!->-d z7ltiZnA|H9sMI%f4Vw^n7i5mT7)8^?4x@0wu*8;pxd)dXt(T?9wuVcM;-(o1#}#~6 zhTSN39iVx`5W`J$UcBPz@*J%PaO;77bAQDY%*tj$d8uV@GH>P#nY-W1=aC7POd}2r z%@Qwud#Bjyo3`<;S3Dag$l+fOji&uv4tK>fU+vx|K`;LdW&)FPOO0f~bnRCGU%&Au zP+ePhojNol#~wQtZHck8pPR~1zUrB3^3yKhyBg@<^JZElH1G^C%5C^(n7RuxTA$~m zeozwXEx4L3GMOpouCy{PHq(%ypwryQU5SY6xpm-l1~CSA9b?(IHK{@^3I z_Llp_xbJ*x>%% zC5rp0;WS&2rj}`C5DNWV5!g8$_Vh|!My$(1*(j<~5`4BwcHI$j#1+ob3R}r=_Cv1( zVNafNV79`+)TnYc@$4edr7tg3OzjcoS05Q9E&co`x#@B%#@|QGY!mw+c;cfCKWTU!~9XNlYi53o8oS z`*2fS*~+?H%sC46me3djDZn6*liRG!OPY?9*um3r89K}_S9E#b(;j;DzVGGDc~_=& z!&ffgK5aPr_}?Z*c28w`MV1SINnMWxq&}q_BSQ57!C$!WyT%2b9 z&Qu!A_TS)?EgOEee}l|{OAh4*zFkf(qHCkiq#GQS97L{)=VouYy3O|U-D~GIEeAAt zcxb$#2uhu%}wQ4E1ur=3FY;Cxy**#lhHo;@2rUOm1F_{@m zF-GsiwzFu|@|kzX%x-02a|m8l&!P*6Xl*W&p*>b$zoK+?^}U>Yi_!)!{s{Lf5B#}m zq5V^NQV`1X*SI>$NrL&Uq=l>4a2_tDbX}2~HP}iq2pp|o1Ml!AWSRo2cRB{sL!z#1 z^FzkHT?Rawnx!v^Q{kysQ)xVt9dwtVqtIZu@mEN+}~rL!LqhdaQ~I?Xg=7 zwpoq4T^N%s4UNJR)Aew)I-ts$%-(6;pma3z9Hx}X!?H(cZa@JhsGlho{?H>h)xu<3 z@MO8C2*#iShc^0UM_Py+ur@rRWznU3mb1<>c^k;Sm&Y9M(P$fEQvj>E`DL*IhHC4a zz+3t^v}cD70IWwICVRdpfv$1i}}xai-nsY*uU=ol{9*y$hQxxQ=kG1ML8Yhz}bHNOzfJ zjCouAA+sREQ_dvB^aFu=X4an&>Pt#|5aZZRtrf6<`8?v>yU0ohcLMnA1l{cn@rd`@ zty*|;??qxg{Iy!Ext0$xOWDn=+P)?Avc_+;W|Y~Iydx~nU$SE(F>j}l>|WnV6D6Cd zs<$%MKTDmqq%eA4mU$0ulMYrm`D2{732StoIhW|)N0TBF+-JsL+Vx5@BRz0k-~WzD zm{sFjlcC@8F}7`28!$6!2pf&>8=kW(DKI{#?^9WvxOwlT50R~GV@~DaA0z7Z)H=_) zP+Sn7$OcU;Ls)-XkVUg=mY0VUkc<}V`F31eZE6p;()3N8aGyXhOFPJ2xaF6@X@)_g zlqxSRR9Ny48MFCk`||J86L^m>Qwght%Tvu1o-lh$%QiDlE>prO8R;dbX;R9dl*!Q8 zOfX(UE*6?}_C|;9w$J7UkAndXB)*F-LsHr5fcKId(?)w!6RRRDnURwO?xsjKo)l5w z^W&?(>`Y>6%g+Yez)JCw2Q?jjxDnaGsowdpJ8Y~!a3aOvQl839GehDw#F;sI(gvfo zMoYB&_Zr3o+Q3;!&OfWgUIdMwgc#qM+9Z*+hNX8d8I4!qNO!Wj@Hp31H$ARfiXgGX zY=JI8MfXRD#+L^)yj9-sQ>Rl-1Gh?yz>s0zEO8NwdRvfaB0uNrX*V^UZnsPcdcU}iaMj0u`-f^}@l!Ec+L;#Da;;kg*;f#sKb z-GM*wq_pP|25SXJ#k8>tau#(Y0XnjbI!^T>KIYDwSx8vg)A&az>e7;Z%&k}LnAhG& z3;C&GiW+a<@XmLhuFXlFasaNsrl<0nnDG2?!yK}!MK5@I2vonh7AY{0ekB>!vFTg2 z)*oMF_q%g;{XYGMl5+lNM)hzvl1@@tTE*Atg1KOR`C{YS)N04^5~okUjNj1)?R9C3 z37-FiHOgsLmsRCD_QFW(yWlY(l)V&Qgvg*orawPIQe3M?mP1{t{c64`oh9aa-r4owTO}w$qV`Frz5Ek?6FlUUTbbJP~2v;`l^}qlPqIpDtQNX zZh*M)0x<0KKH^+y1y4GB8+vKUc-CS-tQ#mY4G`JAtR1fEBT{$n6{#-5C`BTff#qbq zJ1@VyRov2SgDUpE?i%y&mA3p2qsmXqa24u8Q@h<16a>eEOqt&IGnvPJ`L!$?dQw0$ z?_}!h#YB-|?Sjw(Ju7Tna23*8R3U*Xvyiljo{-JXItC?VZqSceR{X3g_wHL)M-kFG zjlA{OL|rS+HjREpa-D_Jj3W{vH0CC_I}EqX8x*xe(RynYI^fr5j5vG!^2J(xx{r<; zt5s3lZbT+C`sS`9Tg7ux8Yx-W!nZ%e5sr6)tM6aNMn^?UO>G3e$y!;Cff_ENg%SZ9 zRKdPhlbfxSo?>C6AbR3sv-2iSaNm!=ZMgX<;nuKF&MQf@Fun@$^iBdWzTU2*7jCGJ zKi3Z{)eVoA@#f}~O5BX2)lzU?1kRvB+HVoG?l>NCQE)pJj^{$IZIghZf>w#itP6?Q zrz*|q6ET;^Rc>2T7vr-1s5~cqsL(hp-9WOV$pxL&wkm{eF6{(W`Yyqmkghc^t<=7# zf96`~s91(6la>N7yUfNqfSDaYt5q{Jw z$tiPe6fZ$C9QS;S@)rw{Ee4aFqci}QQ$Cz-dGGr_m2~Q-Op+1HV8Gn*(OAg3I)NE| zWzK1*AgjmH$tfs9Qp|ig?lIu`SCf)v?bVC5i5pqCTONZZ3JzN2N&E~ znZs=3;-F|+_;``XR3Em)kIjwwGKd=CX9zx8!#Wp&)3-{oDbL-Eg{kk2$(|ehmBb@B z=OxrzSCF_vUEeXT-SR)ugQLC-Fq@7YUbHkMhOtJA+*xx$JAjvQvZ-4&ARsbP2ZbNt zk5RFPs%_qWE}MWhuEb2)Q8=H!3|r@2dIiA4s!mMgdbw)q2~%x~uFs0ShP7#h3L(HD zmy1?61@We@kV_I@f_v!3_)(8<*}2y1uE7)e1qU3Z-C+?Zz>uc(-}D_cx$co!Hj+P} zS~S&r^3zE*L)d*~$dbjxN29a?BS^IA_AqJWl18bFEtGINRD3szV!yW-IOJP82H!Nq z@3R!nnYs6t*p(KJt!I_Vv!X$z*h_9>cG^74GtE*bJxHKo4!yXq#_b0xLlxGKOz z*_m099CdaGi=@K_G)!p(_R18FzR}SNJ>{Z;*6ASrsl@r+r z;$Tg%PMYP(A0r$RE=lxy#?09*D4yzY8HQziACk=uiPfc~y=%e_Bes+;oGN;f;9he^ zZxhjzg{33Q>bu6!Z=e%@Uic_~*t^Jn3NIk2Yrq{bi(``RevZ9zrng@apmbyz8OuGX zycU*#N*%h6E5&=iAj{e?ACzfo#((<+jNueH`>R8>e|qN?os6wjzJNV{hIafB=OH7g z_FYwwN=RBz?Qa~OuiTI?YKJlY-vdp)!f{O<@tNs_jU5gDmPzv!-tp&W|Hvw#VPXAB zEBP|ff8{s)4H!hPO(*c@`&hr;CZuoo-PqjJ>?_HJos~}Q?~j?kFhzfiHT~^Yf4i)M zxt)`(1D*I+SdO`&fQ{+b&FTM$F8PX@A*b^&cCe-RPlo)z+fFoD*jWAnMEb+t{%?$E z{pp$fN371@kyiiih}Pe+Sbs61^`DUc{}|Ewcc-HNyAH`ezWjd~bLL?BS3t>*ly%!I zcKGhiTh%j7X=k}N&@&0|A@J#arQ&&9ZwuMv<|&YHepsoBHCTBI#juX+ITc3)7~R<*Rt(ZZ~B&QJz^LI1YnE1=30| zIA9nBB7jsVTA|1}JazX(h2pGz(rs@~Z@Hf;pLXX-l9^t!Oyx(8DP2;KN_&?hX3S_v zm^kxQq12(US`~2`EF|Ysb2Xe*dj!gf@eDCsAAenF%y*~ROkw6~7KTR|rMw`4uP>gD z2bkuoLYt#rQ#+od3Ji!Zp6WDi{7SP9F#Bn^)Vsxp`07X^t_$_n`^R4@yv)8&<^&mBd*YMmG4-=n>KTgq@;x|j*i(S z5h*wLO^|WMX645#nStA@Ul{FJPN^E}~b)rz_rjRv6FfdV6j-jMXnIV0v z_`o5;P!2-21k)k?9tU7$*Eyp@P!D>7$B}PGheJ3v{w?`hXF^_9KMP-bb;uB;>+$+T zJ9O_S&S_${vY;l_xdno1VU=sUir2{ z@%>k3{OWfFY}rlX@03Pu)>tAZ2g={6=OUXgCpY$BzlL>veC`kDH3J`3s3GeZcB8TQ z$eGLs@c4G_G+V|NZP2+v6a=+IvsNBQwT4YP=LBa_2uW4RSJfM`JKx90g7am=n-|H6 zWW?w5@|)f^!dtZO$82@G-r0Z)13{i6O6)&H!?5z#Mdb!0n*%uNF&BnSfh^pip3sv7YYYL9Y_k_n!iXi*&1a9ZiRY7xRlFAW4b{m{!zxkTp zy~1#cW+j9CNb$D9+FJrX`mxG{?rPl)u{PKxHv}2c2qAOXkeG6$V_qp?@UCfwesumw z)h|7-(lLW_5R2*TTIvL&YC(VQVqvGy!l05=jy;~(N^5PCz1Kh7bxqDU`4@Hk58B@U zMVb3^r1ak|bAK8y{;JIVll1YAGWWlmME&o8NB-sX>Ax_G|3NMJFQxE{rTwo)OFLAp z|K|Ak$kE-7orA9|5I!O4<}FIEH%1R2nDT2Hl_N*RL5d?0Do6n9`*^)@OFC% zyA~O23w51bm$$u5WJ{Ij9DSpP-Bs_*xR!e|ho4CJ{vt4B>dx_+sQu>f;n~@8eISp_ zaN&7NEWX^D3YBtLGrF8SxV*}D11bUGQs1JrMqNdRx}p1AZA;s_Hj5`xo-6Ey8g~#R zTwpiQnk$Y`Fy;lH5ekVN_1$T;g5*e+xDCc=$|~CCq#%HU&rzbln?!v_j1c4OXoXys z^h~D_DepkWZ9lJZ!jm!3t-hdE6IFS7=B+0&0Y&)| z8O2#VkqdoGST|Lq5*#!btC8S67IQ~KIgkMYT=7D(62>j59%H}QzO*+h!Ck6a4W!wks|ua zk&`!H7VdfoHAZ(5v$*SFd`}TDKzjMNWNFzrzt71eATI)Zn1zTk-3sMt)evH_tA;t8 zVF=%dJAY%(49>_c;J5=RWih)PaDTiJD|~NL4Z8v4N3fnx2{&?RwnH>IO!y7kqrv|B zSiZRCM@Ik~U^I6M$OO6sfOV6F3Eu^hZmLs6HKO(DTu_?uds=)|sud?@w$oYD5s*s! zx!hwSi|*#>9rSKR({g7#PGeE;Mj=I2*~v1bS!>u{-#O(*xS8;1b)bg^Y5F0~ObLj1 zu#ud_sj#e@TIEV1=8RE%_OYaHdE)0yin`FdCj*MQDC}q?xqJ;}x^+bFP(y*f?}<`D zXV^k|e3)0=+O}ZE$kJ z8-Su<1v07|F z-!hUyP{Ckp=KC*xWVon)8Dlv`eg>E#keJ8pQi+}U@zWKFz;VX`Yv&ohXT`Ygo*)D$Nvz}*j{_Pf49R$E{%a1qH2i+yF z7*(zqCrL5Ch6KUq?{1ZtP>(GDyE0H}Aa-gD%(2P=D{mX6Z88cd1U*+?0k(W~1R)4U zs+sRyl^{6JQGMfG?afUonvP5361@2BU`#9VUQQkU4iAkgVnp7 z^ha;x!XY=O87qg;!#hY7vJE^OkYWv@ZpbduPoM=K&}2W~`a*f{H2&oFAaWd#GP#D3 zj5u$n7CRq**(btXSlzc5y?yWil!3y{sEx90drd_d)aT)@f{ey*f7J>8IYj^8a)ST= z7rcL>p8oAl@aJXzsuTQkZ0{eP;6E>T|6L!#e|z!!&z;SGc>L(U!s`Cd*uf5!|8RXj zH7Utkipb+R`Qf&g2d*2`k^|k((LmWqkpUTvBp<&&J#zJ7a5m)=y1;V8W5b3rU5*#t zRkeC}R^Az^sa*llewwKHldLOF*WR&i-03$T<>Z zhEXeiiu-H;!j(YwQlMOOd@GA;TE)V_0M#iDFh={osfx zT4uIABrrnj^7Ve@m$3MD^>Y#@w{ki2qC0f^z0fJHC}LXOrqYR$x%5VJxJm)uo1Rvb zHg*=El!-b{%u&Ibp#xhNpc1dC@dJW@n%B!Yn%a<&#zApQXG#3bgJF79aJH*^<8Flsqvg`XVQ(1AGthFm&oT+4IAYEhyoPt=B5oECGI@)38*rGHvc5 z6=x@^etyj1QU&?J<%44hlqp~bVJ76KnYo}EaysgJ1a(MA_0UfoFHc*}4Tz;sjM$&0 z*P5%&$iJ;vhmqkj{I#+1wre+^$75pkMYBQURahV#MG&;`IN>>nV97s84!hn^EGJt4 z{8GO8VVDBe(p3r9Z3JXQWcHqk5f)^4y8K#wUQ0L`*0*RD?h1O`bO%jc#T-Ag*kzaq$a39Ug;o*s_Aho9L{PY+cCKvbwt{M!~-Bfx|kGz|bzGr$FQBfzhg#7e_&-N>5w zHQr00V=D}gly7Z&VftUJlmFM;mM^~Z zzk;>?la=xGoraQ@B7qPkFVt$mMiE&6p{(?RFpr1>K_wnY)29CYKAV6-(|+&whKS=z zV(8tN9q$H~0^UvHBa=QU#`p|z_Fg2UEHMjpx>-KCbuGR zKopUYeWx=COpg*~+_|TgfToC0Mkb>qTG!@4jM{_mI!0Q*)HO=Vloqf8M@g@4V{Eax zUTh&+8}MFU?sZwHKC=jh3R&atqgqYwpQ1h;hpvrH^8nQ#IH+(hh>v$!=lQ`EWs8U< z8az@1zQl&NL`G_){jtXYzU;Q`bwJ=U%bJ#NZ6m=6MsQG5XnX_BwWtkwg8-lqQL+s9 zbnRjL4KH`B79COQvQJL1b&3o9m#Cc`qla9Dp2iUZeJj(-xw_0!fOw4)K#5 z#ViM^9HZhZ0O%7vI5Y{mjzkd=yF=CLIfBg64utBY9ka!*ebCGrg<*+3I$y?!5x8KJ zh6)KQDm3<$hc2OH^V7&2s%}EPAKjGQQ-E*o7L^Pr(X%$n8tgI4r_86IKpOOYo0rp#{4XL8Lmoh90GuJxNDz&1Ovl{(`AAmuKhC#&`%Q1w3Kk zWg%G`KmtS8P}Prxwmy(O9j${|-K%*%;=tH9`XgWHVn~u(b^t)`G3)cu=86vyqZg63 zE2t*OuBlA4>U}vGKI;+9(61ej0cj}Q_M!!5!)I#2g!a)O+I&zbC)9_Ekk}Almnw_M z^O1<^O1=-y(j_L~X+cNxP%#+fAfvYX`WNjN{QkIp@ud3A}!5wG1kzt2*0W|%T+RO_dRl{(^fcs1+f z2SrV&l2zW$FJD`HoW7Kzk!gV*_CeZLJVi|pXT?hqnq&>ODgXte>R1pcETzX;0hg9i zdQ2i)+J;nEM_|5q9m{<0MVjH3DZXn~8rM6ZjHZ=l%b)3mq;o?hQy0~gIZ#JzT%SUT z?&1gY?3Uz^H2>zP!^xvr?ZZz;kzcT%uwru3TfSaB=9w}yaHmHiS-3qSS88+kEnY

TQ_J2arh%! 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%0A7s- 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%0Ae2PhEB*d4H`Yrt~0kUcT7;U?Tr}h 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

NWcFd1At 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

LuKuB-`Ov?Nx_yRTmEcRi*UR_1VOdsQz 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 diff --git a/xios_2311_src/extern/netcdf4 b/xios_2311_src/extern/netcdf4 index 781edd0b..2bb35733 120000 --- a/xios_2311_src/extern/netcdf4 +++ b/xios_2311_src/extern/netcdf4 @@ -1 +1 @@ -/gpfs/scratch/bsc32/bsc032756/EDITO/XIOS/trunk/.void_dir \ No newline at end of file +/gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/.void_dir \ No newline at end of file diff --git a/xios_2311_src/extern/remap/src/circle.cpp b/xios_2311_src/extern/remap/src/circle.cpp index 9cddb803..afee2968 100644 --- a/xios_2311_src/extern/remap/src/circle.cpp +++ b/xios_2311_src/extern/remap/src/circle.cpp @@ -34,9 +34,9 @@ namespace sphereRemap leaf.data = &elt; } - void setCirclesAndLinks(Elt *elts, vector& nodes) + void setCirclesAndLinks(Elt *elts, vector& nodes) { for (int i = 0; i < nodes.size(); i++) - setCircleAndLink(elts[i], *nodes[i]); + setCircleAndLink(elts[i], nodes[i]); } } diff --git a/xios_2311_src/extern/remap/src/circle.hpp b/xios_2311_src/extern/remap/src/circle.hpp index 1b94c1e6..314524a5 100644 --- a/xios_2311_src/extern/remap/src/circle.hpp +++ b/xios_2311_src/extern/remap/src/circle.hpp @@ -14,7 +14,7 @@ void setCircleAndLink(Elt& elt, Node& leaf); of the corresponding grid element. At this point the node is a leaf and contains only one element. */ -void setCirclesAndLinks(Elt *elts, vector& leaf); +void setCirclesAndLinks(Elt *elts, vector& leaf); } #endif diff --git a/xios_2311_src/extern/remap/src/earcut.hpp b/xios_2311_src/extern/remap/src/earcut.hpp index 75f48fbf..929d485d 100644 --- a/xios_2311_src/extern/remap/src/earcut.hpp +++ b/xios_2311_src/extern/remap/src/earcut.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include //#include //#include //#include diff --git a/xios_2311_src/extern/remap/src/intersection_ym.cpp b/xios_2311_src/extern/remap/src/intersection_ym.cpp index 8504068d..bf16fe2c 100644 --- a/xios_2311_src/extern/remap/src/intersection_ym.cpp +++ b/xios_2311_src/extern/remap/src/intersection_ym.cpp @@ -185,12 +185,16 @@ double intersect_ym(Elt *a, Elt *b) if (dx*dx+dy*dy>fusion_vertex*fusion_vertex) { - intersectPolygon[nv]=intersectPolygon[n] ; - vect_points.push_back( array() ); - vect_points[nv][0] = intersectPolygon[n].x; - vect_points[nv][1] = intersectPolygon[n].y; - nv++ ; + intersectPolygon[nv]=intersectPolygon[n] ; + + vect_points.push_back( array() ); + vect_points[nv][0] = intersectPolygon[n].x; + vect_points[nv][1] = intersectPolygon[n].y; + + nv++ ; } + + } polyline.push_back(vect_points); @@ -204,10 +208,10 @@ double intersect_ym(Elt *a, Elt *b) double area2=0 ; for(int i=0;i -#include "client.hpp" - #include "mapper.hpp" -namespace MemTrack -{ - void TrackDumpBlocks(std::ofstream& memReport, size_t memtrack_blocks, size_t memtrack_size); -} - namespace sphereRemap { /* A subdivition of an array into N sub-arays @@ -64,7 +56,7 @@ void Mapper::setSourceMesh(const double* boundsLon, const double* boundsLat, con elt.src_id.ind = i; elt.src_id.globalId = sourceGlobalId[i]; sourceElements.push_back(elt); - sourceMesh.push_back(make_shared(elt.x, cptRadius(elt), &sourceElements.back())); + sourceMesh.push_back(Node(elt.x, cptRadius(elt), &sourceElements.back())); cptEltGeom(sourceElements[i], Coord(pole[0], pole[1], pole[2])); if (area!=NULL) sourceElements[i].given_area=area[i] ; else sourceElements[i].given_area=sourceElements[i].area ; @@ -99,7 +91,7 @@ void Mapper::setTargetMesh(const double* boundsLon, const double* boundsLat, con int offs = i*nVertex; Elt elt(boundsLon + offs, boundsLat + offs, nVertex); targetElements.push_back(elt); - targetMesh.push_back(make_shared(elt.x, cptRadius(elt), &sourceElements.back())); + targetMesh.push_back(Node(elt.x, cptRadius(elt), &sourceElements.back())); cptEltGeom(targetElements[i], Coord(pole[0], pole[1], pole[2])); if (area!=NULL) targetElements[i].given_area=area[i] ; else targetElements[i].given_area=targetElements[i].area ; @@ -128,7 +120,6 @@ vector Mapper::computeWeights(int interpOrder, bool renormalize, bool qu MPI_Comm_rank(communicator, &mpiRank); this->buildSSTree(sourceMesh, targetMesh); - if (mpiRank == 0 && verbose) cout << "Computing intersections ..." << endl; double tic = cputime(); @@ -468,11 +459,7 @@ int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize, bo delete[] sendElement; delete[] recvElement; delete[] sendValue; - delete[] sendArea ; - delete[] sendGivenArea ; delete[] recvValue; - delete[] recvArea ; - delete[] recvGivenArea ; delete[] sendGrad; delete[] recvGrad; delete[] sendNeighIds; @@ -502,7 +489,7 @@ void Mapper::buildMeshTopology() MPI_Comm_size(communicator, &mpiSize); MPI_Comm_rank(communicator, &mpiRank); - vector *routingList = new vector[mpiSize]; + vector *routingList = new vector[mpiSize]; vector > routes(sstree.localTree.leafs.size()); sstree.routeIntersections(routes, sstree.localTree.leafs); @@ -529,7 +516,7 @@ void Mapper::buildMeshTopology() sendMessageSize[rank] = 0; for (size_t j = 0; j < routingList[rank].size(); j++) { - Elt *elt = (Elt *) (routingList[rank][j]->data); + Elt *elt = (Elt *) (routingList[rank][j].data); sendMessageSize[rank] += packedPolygonSize(*elt); } } @@ -552,7 +539,7 @@ void Mapper::buildMeshTopology() pos[rank] = 0; for (size_t j = 0; j < routingList[rank].size(); j++) { - Elt *elt = (Elt *) (routingList[rank][j]->data); + Elt *elt = (Elt *) (routingList[rank][j].data); packPolygon(*elt, sendBuffer[rank], pos[rank]); } } @@ -602,8 +589,8 @@ void Mapper::buildMeshTopology() { Elt elt; unpackPolygon(elt, recvBuffer[rank], pos[rank]); - NodePtr node=make_shared(elt.x, cptRadius(elt), &elt); - findNeighbour(sstree.localTree.root, node, neighbourList); + Node node(elt.x, cptRadius(elt), &elt); + findNeighbour(sstree.localTree.root, &node, neighbourList); } nbSendNode[rank] = neighbourList.size(); for (set::iterator it = neighbourList.begin(); it != neighbourList.end(); it++) @@ -690,7 +677,6 @@ void Mapper::buildMeshTopology() /* re-compute on received elements to avoid having to send this information */ neighbourNodes.resize(nbNeighbourNodes); - for(int i=0;i() ; setCirclesAndLinks(neighbourElements, neighbourNodes); cptAllEltsGeom(neighbourElements, nbNeighbourNodes, srcGrid.pole); @@ -705,12 +691,12 @@ void Mapper::buildMeshTopology() */ for (int j = 0; j < sstree.localTree.leafs.size(); j++) { - NodePtr node = sstree.localTree.leafs[j]; + Node& node = sstree.localTree.leafs[j]; /* find all leafs whoes circles that intersect node's circle and save into node->intersectors */ - node->search(sstree.localTree.root); + node.search(sstree.localTree.root); - Elt *elt = (Elt *)(node->data); + Elt *elt = (Elt *)(node.data); for (int i = 0; i < elt->n; i++) elt->neighbour[i] = NOT_FOUND; @@ -718,7 +704,7 @@ void Mapper::buildMeshTopology() whoes circles intersect with the circle around `elt` (the SS intersectors) and check if they are neighbours in the sense that the two elements share an edge. If they do, save this information for elt */ - for (list::iterator it = (node->intersectors).begin(); it != (node->intersectors).end(); ++it) + for (list::iterator it = (node.intersectors).begin(); it != (node.intersectors).end(); ++it) { Elt *elt2 = (Elt *)((*it)->data); set_neighbour(*elt, *elt2); @@ -743,14 +729,14 @@ void Mapper::computeIntersection(Elt *elements, int nbElements) MPI_Barrier(communicator); - vector *routingList = new vector[mpiSize]; + vector *routingList = new vector[mpiSize]; - vector routeNodes; routeNodes.reserve(nbElements); + vector routeNodes; routeNodes.reserve(nbElements); for (int j = 0; j < nbElements; j++) { elements[j].id.ind = j; elements[j].id.rank = mpiRank; - routeNodes.push_back(make_shared(elements[j].x, cptRadius(elements[j]), &elements[j])); + routeNodes.push_back(Node(elements[j].x, cptRadius(elements[j]), &elements[j])); } vector > routes(routeNodes.size()); @@ -779,7 +765,7 @@ void Mapper::computeIntersection(Elt *elements, int nbElements) sentMessageSize[rank] = 0; for (size_t j = 0; j < routingList[rank].size(); j++) { - Elt *elt = (Elt *) (routingList[rank][j]->data); + Elt *elt = (Elt *) (routingList[rank][j].data); sentMessageSize[rank] += packedPolygonSize(*elt); } } @@ -810,7 +796,7 @@ void Mapper::computeIntersection(Elt *elements, int nbElements) pos[rank] = 0; for (size_t j = 0; j < routingList[rank].size(); j++) { - Elt* elt = (Elt *) (routingList[rank][j]->data); + Elt* elt = (Elt *) (routingList[rank][j].data); packPolygon(*elt, sendBuffer[rank], pos[rank]); } } @@ -854,10 +840,10 @@ void Mapper::computeIntersection(Elt *elements, int nbElements) { unpackPolygon(recvElt[j], recvBuffer[rank], pos[rank]); cptEltGeom(recvElt[j], tgtGrid.pole); - NodePtr recvNode = make_shared(recvElt[j].x, cptRadius(recvElt[j]), &recvElt[j]); - recvNode->search(sstree.localTree.root); + Node recvNode(recvElt[j].x, cptRadius(recvElt[j]), &recvElt[j]); + recvNode.search(sstree.localTree.root); /* for a node holding an element of the target, loop throught candidates for intersecting source */ - for (list::iterator it = (recvNode->intersectors).begin(); it != (recvNode->intersectors).end(); ++it) + for (list::iterator it = (recvNode.intersectors).begin(); it != (recvNode.intersectors).end(); ++it) { Elt *elt2 = (Elt *) ((*it)->data); /* recvElt is target, elt2 is source */ @@ -882,9 +868,6 @@ void Mapper::computeIntersection(Elt *elements, int nbElements) //FIXME should be deleted: recvElt[j].delete_intersections(); // intersection areas have been packed to buffer and won't be used any more } } - - for (int j = 0; j < nbRecvNode[rank]; j++) recvElt[j].delete_intersections(); - delete [] recvElt; } @@ -959,10 +942,7 @@ Mapper::~Mapper() delete [] srcAddress; delete [] srcRank; delete [] dstAddress; - delete [] sourceWeightId ; - delete [] targetWeightId ; if (neighbourElements) delete [] neighbourElements; - CTimer::release() ; - } +} } diff --git a/xios_2311_src/extern/remap/src/mapper.hpp b/xios_2311_src/extern/remap/src/mapper.hpp index ba815bb9..a3546a19 100644 --- a/xios_2311_src/extern/remap/src/mapper.hpp +++ b/xios_2311_src/extern/remap/src/mapper.hpp @@ -2,7 +2,6 @@ #define __MAPPER_HPP__ #include "parallel_tree.hpp" #include "mpi.hpp" -#include "timerRemap.hpp" namespace sphereRemap { @@ -27,7 +26,7 @@ public: void setSourceValue(const double* val) ; void getTargetValue(double* val) ; - void buildSSTree(vector& srcMsh, vector& trgMsh) + void buildSSTree(vector& srcMsh, vector& trgMsh) { sstree.build(srcMsh, trgMsh); } @@ -61,7 +60,7 @@ private: /** Holds adaptional leaf nodes as ghost cells for gradient computations (hold neighbour elements from other ranks). They will be inserted to the local trees but not saved in its leaf array */ - vector neighbourNodes; + vector neighbourNodes; int nbNeighbourElements; Elt* neighbourElements; @@ -69,9 +68,9 @@ private: CParallelTree sstree; MPI_Comm communicator ; std::vector sourceElements ; - std::vector sourceMesh ; + std::vector sourceMesh ; std::vector targetElements ; - std::vector targetMesh ; + std::vector targetMesh ; std::vector sourceGlobalId ; std::vector targetGlobalId ; diff --git a/xios_2311_src/extern/remap/src/meshutil.cpp b/xios_2311_src/extern/remap/src/meshutil.cpp index c281fbec..d4c555d5 100644 --- a/xios_2311_src/extern/remap/src/meshutil.cpp +++ b/xios_2311_src/extern/remap/src/meshutil.cpp @@ -59,7 +59,6 @@ double computePolygoneArea(Elt& a, const Coord &pole) vect_points.clear(); polyline.clear(); indices_a_gno.clear(); - delete [] a_gno ; return area_a_gno ; } diff --git a/xios_2311_src/extern/remap/src/mpi_routing.cpp b/xios_2311_src/extern/remap/src/mpi_routing.cpp index 8f8d0db0..9cb1eb59 100644 --- a/xios_2311_src/extern/remap/src/mpi_routing.cpp +++ b/xios_2311_src/extern/remap/src/mpi_routing.cpp @@ -234,7 +234,6 @@ destRanks.push_back(i); delete[] toSend; delete[] recvCount; - delete[] targetRankToIndex; delete[] request; delete[] status; } @@ -598,7 +597,7 @@ template void CMPIRouting::transferToTarget(int *targetElements, int *sourceElem template void CMPIRouting::transferFromSource(int *targetElements, int *sourceElements); template void CMPIRouting::transferFromSource(int *targetElements, int *sourceElements, void (*pack)(int&, char*, int&), void (* unpack)(int&, char *, int&)); -template void CMPIRouting::transferToTarget(NodePtr* targetElements, NodePtr* sourceElements, void (*pack)(NodePtr, char*, int&), void (* unpack)(NodePtr, char *, int&)); +template void CMPIRouting::transferToTarget(Node* targetElements, Node* sourceElements, void (*pack)(Node&, char*, int&), void (* unpack)(Node&, char *, int&)); template void CMPIRouting::transferToTarget(Elt **targetElements, Elt **sourceElements, void (*pack)(Elt *, char*, int&), void (* unpack)(Elt *, char *, int&)); template void CMPIRouting::transferFromSource(std::vector *targetElements, std::vector *sourceElements, void (*pack)(const std::vector&, char*, int&), void (* unpack)(std::vector&, const char *, int&)); diff --git a/xios_2311_src/extern/remap/src/node.cpp b/xios_2311_src/extern/remap/src/node.cpp index f6a45dd3..254e3b05 100644 --- a/xios_2311_src/extern/remap/src/node.cpp +++ b/xios_2311_src/extern/remap/src/node.cpp @@ -78,7 +78,7 @@ int compareDist(NodePtr n1, NodePtr n2) /* On level `level` find the node in our subtree that is closest to `src` and return through argument `closest`. The return value is just for recursive calling */ -void Node::findClosest(int level, NodePtr src, double& minDist2, NodePtr& closest) +void Node::findClosest(int level, NodePtr src, double& minDist2, NodePtr &closest) { double r2; @@ -88,7 +88,7 @@ void Node::findClosest(int level, NodePtr src, double& minDist2, NodePtr& closes if (r2 < minDist2 || closest == NULL) { minDist2 = r2; - closest = shared_from_this(); + closest = this; } } else if (r2 < radius*radius) @@ -220,15 +220,15 @@ void Node::output(ostream& flux, int level, int color) } }*/ -bool find_in_tree1(NodePtr node) +bool find_in_tree1(Node* node) { if (node == node->tree->root) return true; - if (node->parent.lock() == NULL) + if (node->parent == NULL) { cerr << "Cannot find!" << endl; return false; } - return find_in_tree1(node->parent.lock()); + return find_in_tree1(node->parent); } bool find_in_tree2(NodePtr node, NodePtr ref) @@ -263,9 +263,9 @@ NodePtr insert(NodePtr thIs, NodePtr node) if (la == lb - 1) { node->child.push_back(thIs); - thIs->parent = node ; + thIs->parent = node; if (node->child.size() > MAX_NODE_SZ && node->tree->canSplit() ) // with us as additional child `node` is now too large :( - return (node->reinserted || node->parent.lock() == NULL) ? split(node) : reinsert(node); + return (node->reinserted || node->parent == NULL) ? split(node) : reinsert(node); } else // la < lb - 1 { @@ -298,7 +298,7 @@ NodePtr reinsert(NodePtr thIs) /* transfere out children from us to a new node q which will be returned */ - NodePtr q = make_shared(); + NodePtr q = new Node; q->tree = thIs->tree; q->child.resize(out); for (int i = thIs->child.size() - out; i < thIs->child.size(); i++) @@ -461,12 +461,11 @@ bool transferNode(NodePtr thIs, NodePtr parent, NodePtr node) NodePtr split(NodePtr thIs) { thIs->tree->increaseLevelSize(thIs->level); - NodePtr p = make_shared(); - NodePtr q = make_shared(); + NodePtr p = new Node; + NodePtr q = new Node; p->level = q->level = thIs->level; p->reinserted = q->reinserted = false; - p->parent = thIs->parent; - q->parent = thIs->parent; + p->parent = q->parent = thIs->parent; p->tree = q->tree = thIs->tree; @@ -476,7 +475,7 @@ NodePtr split(NodePtr thIs) thIs->tree->ref = thIs->closest(thIs->child, FARTHEST); // farthest from centre std::sort(thIs->child.begin(), thIs->child.end(), compareDist); for (int i = 0; i < MAX_NODE_SZ+1; i++) - assert(thIs->child[i]->parent.lock() == thIs); + assert(thIs->child[i]->parent == thIs); for (int i = 0; i < MAX_NODE_SZ/2 + 1; i++) q->child[i] = thIs->child[i]; for (int i = MAX_NODE_SZ/2+1; ichild[i]->parent = thIs; thIs->reinserted = p->reinserted; thIs->update(); - p.reset(); + delete p; if (thIs == thIs->tree->root) // root split { @@ -593,7 +592,7 @@ void Node::checkParent(void) int childSize = child.size() ; for (int i = 0; i < childSize; i++) - assert(child[i]->parent.lock() == shared_from_this()); + assert(child[i]->parent == this); if (level>0) for (int i = 0; i < childSize; i++) child[i]->checkParent() ; } @@ -602,7 +601,7 @@ void Node::printChildren() { cout << "level " << this->level << ", centre "; cout << "level " << this->level << ", centre " << this->centre << "\t r = " << this->radius << endl; - cout << this << " p: " << this->parent.lock() << endl; + cout << this << " p: " << this->parent << endl; int n = this->child.size(); for (int i=0; iroot == shared_from_this()) + if (tree->root == this) findClosest(level, node, distMin2, closest); - if (closest != NULL && tree->root == shared_from_this()) + if (closest != NULL && tree->root == this) /* When is this point reached? if the preceeding findClosest was called and succesed to set closest findClosest sets closest if we are `level` or src is in our circle (=> belongs to child of ours) @@ -690,12 +689,12 @@ void Node::routeIntersection(vector& routes, NodePtr node) } } -void Node::routingIntersecting(vector *routingList, NodePtr node) +void Node::routingIntersecting(vector *routingList, NodePtr node) { if (level==0) { int rank = route; - routingList[rank].push_back(node); + routingList[rank].push_back(*node); } else { @@ -712,13 +711,13 @@ void Node::free_descendants() { child[i]->free_descendants(); if (child[i]->level) // do not attempt to delete leafs, they are delete through leafs vector - child[i].reset(); + delete child[i]; } } void Node::getNodeLevel(int assignLevel, std::list& NodeList) { - if (level==assignLevel) NodeList.push_back(shared_from_this()) ; + if (level==assignLevel) NodeList.push_back(this) ; else if (level>0) for (int i = 0; i < child.size(); i++) child[i]->getNodeLevel(assignLevel,NodeList) ; return ; } @@ -737,7 +736,7 @@ bool Node::removeDeletedNodes(int assignLevel) isUpdate=true ; for (int j = 0; j < child[i]->child.size(); j++) tree->push_back(child[i]->child[j]) ; tree->decreaseLevelSize(assignLevel) ; - child[i].reset() ; + delete child[i] ; } else newChild.push_back(child[i]) ; } diff --git a/xios_2311_src/extern/remap/src/node.hpp b/xios_2311_src/extern/remap/src/node.hpp index 8d619d64..2704f60c 100644 --- a/xios_2311_src/extern/remap/src/node.hpp +++ b/xios_2311_src/extern/remap/src/node.hpp @@ -9,7 +9,6 @@ #include #include "triple.hpp" -#include namespace sphereRemap { @@ -112,17 +111,15 @@ struct Node; //typedef Node* NodePtr; //#endif -//typedef Node* NodePtr; -typedef std::shared_ptr NodePtr; +typedef Node* NodePtr; -struct Node : public std::enable_shared_from_this +struct Node { int level; /* FIXME leafs are 0 and root is max level? */ int leafCount; /* number of leafs that are descendants of this node (the elements in it's cycle) */ Coord centre; double radius; - std::weak_ptr parent ; - NodePtr ref; + NodePtr parent, ref; std::vector child; std::list intersectors; bool reinserted; @@ -200,7 +197,7 @@ struct Node : public std::enable_shared_from_this void assignCircleAndPropagateUp(Coord *centres, double *radia, int level); void printLevel(int level); void routeNode(NodePtr node, int level); - void routingIntersecting(std::vector* routingList, NodePtr node); + void routingIntersecting(std::vector* routingList, NodePtr node); void routeIntersection(std::vector& routes, NodePtr node); void getNodeLevel(int level,std::list& NodeList) ; bool removeDeletedNodes(int assignLevel) ; diff --git a/xios_2311_src/extern/remap/src/parallel_tree.cpp b/xios_2311_src/extern/remap/src/parallel_tree.cpp index 23496bfe..26e00aa9 100644 --- a/xios_2311_src/extern/remap/src/parallel_tree.cpp +++ b/xios_2311_src/extern/remap/src/parallel_tree.cpp @@ -17,21 +17,21 @@ namespace sphereRemap { static const int assignLevel = 2; // only the circle is packed, rest of node will be initialized on unpacking -static void packNode(NodePtr node, char *buffer, int& index) +static void packNode(Node& node, char *buffer, int& index) { if (buffer == NULL) // compute size only index += 4 * sizeof(double); else { - *(Coord *)(&buffer[index]) = node->centre; + *(Coord *)(&buffer[index]) = node.centre; index += sizeof(Coord); - *(double *)(&buffer[index]) = node->radius; + *(double *)(&buffer[index]) = node.radius; index += sizeof(double); } } -static void unpackNode(NodePtr node, char *buffer, int& index) +static void unpackNode(Node& node, char *buffer, int& index) { Coord centre; double r; @@ -42,8 +42,8 @@ static void unpackNode(NodePtr node, char *buffer, int& index) r = *(double *)(&buffer[index]); index += sizeof(double); - node->centre = centre; - node->radius = r; + node.centre = centre; + node.radius = r; } @@ -94,7 +94,7 @@ static void assignRoute(CSampleTree& tree, const CCascadeLevel& cl) // newroot tree.root->assignRoute(rank, assignLevel); } -static void transferRoutedNodes(CMPIRouting& MPIRoute, /*const*/ vector& nodeSend, const vector& route, vector& nodeRecv) +static void transferRoutedNodes(CMPIRouting& MPIRoute, /*const*/ vector& nodeSend, const vector& route, vector& nodeRecv) { /* `route` knows what goes where */ MPIRoute.init(route); @@ -103,13 +103,13 @@ static void transferRoutedNodes(CMPIRouting& MPIRoute, /*const*/ vector MPIRoute.transferToTarget(&nodeSend[0], &nodeRecv[0], packNode, unpackNode); } -static void transferRoutedIntersections(CMPIRouting& MPIRoute, const vector& nodeSend, const vector >& route, vector& nodeRecv) +static void transferRoutedIntersections(CMPIRouting& MPIRoute, const vector& nodeSend, const vector >& route, vector& nodeRecv) { // `route` knows what goes where MPIRoute.init(route); int nRecv = MPIRoute.getTotalSourceElement(); nodeRecv.resize(nRecv); - MPIRoute.transferToTarget((NodePtr*) &nodeSend[0], &nodeRecv[0], packNode, unpackNode); + MPIRoute.transferToTarget((Node * /*mpi wants non-const*/) &nodeSend[0], &nodeRecv[0], packNode, unpackNode); //cout << MPIRoute.mpiRank << " ROUTE " << nRecv << ": " << nodeSend.size() << " " << nodeRecv.size() << " "; } @@ -121,7 +121,7 @@ CParallelTree::CParallelTree(MPI_Comm comm) : communicator(comm), cascade(MAX_NO treeCascade.push_back(CSampleTree(cascade.level[lev].group_size, assignLevel)); } -void CParallelTree::buildSampleTreeCascade(vector& sampleNodes /*route field will be modified*/, int level) +void CParallelTree::buildSampleTreeCascade(vector& sampleNodes /*route field will be modified*/, int level) { buildSampleTree(treeCascade[level], sampleNodes, cascade.level[level]); assignRoute(treeCascade[level] /*out*/, cascade.level[level] /*in*/); @@ -131,14 +131,14 @@ void CParallelTree::buildSampleTreeCascade(vector& sampleNodes /*route vector route(sampleNodes.size()); treeCascade[level].routeNodes(route, sampleNodes, assignLevel); - vector routedNodes; + vector routedNodes; CMPIRouting mpiRoute(cascade.level[level].pg_comm); transferRoutedNodes(mpiRoute, sampleNodes, route, routedNodes); buildSampleTreeCascade(routedNodes, level+1); } } -void buildSampleTree(CSampleTree& tree, const vector& node, const CCascadeLevel& comm) +void buildSampleTree(CSampleTree& tree, const vector& node, const CCascadeLevel& comm) /* In the beginning all the sample elements are distributed -> communicate to make available at each rank @@ -174,7 +174,7 @@ void buildSampleTree(CSampleTree& tree, const vector& node, const CCasc randomizeArray(randomArray); for (int i = 0; i < nsend; i++) { - const Node& no = *node[randomArray[i]]; + const Node& no = node[randomArray[i]]; *((Coord *) (sendBuffer + index)) = no.centre; index += sizeof(Coord)/sizeof(*sendBuffer); sendBuffer[index++] = no.radius; @@ -209,8 +209,6 @@ void buildSampleTree(CSampleTree& tree, const vector& node, const CCasc randomArray.resize(blocSize); randomizeArray(randomArray); tree.leafs.resize(blocSize); - for(auto& it : tree.leafs) it=make_shared() ; - index = 0; size_t s=(sizeof(Coord)/sizeof(*recvBuffer)+1)*nrecv ; @@ -221,8 +219,8 @@ void buildSampleTree(CSampleTree& tree, const vector& node, const CCasc index += sizeof(Coord)/sizeof(*recvBuffer); double radius = recvBuffer[index%s]; index++ ; - tree.leafs[randomArray[i]]->centre = x; - tree.leafs[randomArray[i]]->radius = radius; + tree.leafs[randomArray[i]].centre = x; + tree.leafs[randomArray[i]].radius = radius; } @@ -234,6 +232,7 @@ void buildSampleTree(CSampleTree& tree, const vector& node, const CCasc // cout << "SampleTree build : assign Level " << assignLevel << " nb Nodes : " << tree.levelSize[assignLevel] << endl; CTimer::get("buildSampleTree(local)").suspend(); CTimer::get("buildSampleTree(local)").print(); + /* End gracefully if sample tree could not be constructed with desired number of nodes on assignLevel */ int allok, ok = (tree.levelSize[assignLevel] == comm.group_size); if (!ok) @@ -262,7 +261,7 @@ void buildSampleTree(CSampleTree& tree, const vector& node, const CCasc } -void CParallelTree::buildLocalTree(const vector& node, const vector& route) +void CParallelTree::buildLocalTree(const vector& node, const vector& route) { CMPIRouting MPIRoute(communicator); MPI_Barrier(communicator); @@ -276,7 +275,7 @@ void CParallelTree::buildLocalTree(const vector& node, const vector ptElement(node.size()); for (int i = 0; i < node.size(); i++) - ptElement[i] = (Elt *) (node[i]->data); + ptElement[i] = (Elt *) (node[i].data); vector ptLocalElement(nbLocalElements); for (int i = 0; i < nbLocalElements; i++) @@ -297,7 +296,7 @@ void CParallelTree::buildLocalTree(const vector& node, const vector(elt.x, cptRadius(elt), &localElements[i])); + localTree.leafs.push_back(Node(elt.x, cptRadius(elt), &localElements[i])); } localTree.build(localTree.leafs); @@ -306,7 +305,7 @@ void CParallelTree::buildLocalTree(const vector& node, const vector& node, vector& node2) +void CParallelTree::build(vector& node, vector& node2) { int assignLevel = 2; @@ -332,7 +331,7 @@ void CParallelTree::build(vector& node, vector& node2) // assert(node.size() > nbSampleNodes); // assert(node2.size() > nbSampleNodes); // assert(node.size() + node2.size() > nbSampleNodes); - vector sampleNodes; sampleNodes.reserve(nbSampleNodes1+nbSampleNodes2); + vector sampleNodes; sampleNodes.reserve(nbSampleNodes1+nbSampleNodes2); vector randomArray1(node.size()); randomizeArray(randomArray1); @@ -358,8 +357,8 @@ void CParallelTree::build(vector& node, vector& node2) s2=nbSampleNodes/2 ; } */ - for (int i = 0; i (node[randomArray1[i%nb1]]->centre, node[randomArray1[i%nb1]]->radius, nullptr)); - for (int i = 0; i (node2[randomArray2[i%nb2]]->centre, node2[randomArray2[i%nb2]]->radius, nullptr)); + for (int i = 0; i & node, vector& node2) CTimer::get("buildRouteTree").print(); } -void CParallelTree::routeNodes(vector& route, vector& nodes /*route field used*/, int level) +void CParallelTree::routeNodes(vector& route, vector& nodes /*route field used*/, int level) { treeCascade[level].routeNodes(route /*assign*/, nodes, assignLevel); if (level+1 < cascade.num_levels) { - vector routedNodes; + vector routedNodes; CMPIRouting MPIRoute(cascade.level[level].pg_comm); transferRoutedNodes(MPIRoute, nodes, route /*use*/, routedNodes); vector globalRank(routedNodes.size()); @@ -438,25 +437,22 @@ void delinearize(const vector& from, vector >& to) copy(src, end = src + to[i].size(), to[i].begin()); } -void CParallelTree::routeIntersections(vector >& routes, vector& nodes, int level) +void CParallelTree::routeIntersections(vector >& routes, vector& nodes, int level) { treeCascade[level].routeIntersections(routes /*assign*/, nodes); if (level+1 < cascade.num_levels) { - vector routedNodes; + vector routedNodes; CMPIRouting MPIRoute(cascade.level[level].pg_comm); vector flattenedRoutes1; linearize(routes, flattenedRoutes1); - vector double_nodes(flattenedRoutes1.size()); + vector double_nodes(flattenedRoutes1.size()); int j = 0; for (int i = 0; i < routes.size(); ++i) for (int k = 0; k < routes[i].size(); ++k, ++j) - { - double_nodes[j] = make_shared() ; - *double_nodes[j] = *nodes[i]; - } + double_nodes[j] = nodes[i]; transferRoutedNodes(MPIRoute, double_nodes, flattenedRoutes1 /*use*/, routedNodes); vector > globalRanks(routedNodes.size()); routeIntersections(globalRanks /*out*/, routedNodes /*in*/, level + 1); diff --git a/xios_2311_src/extern/remap/src/parallel_tree.hpp b/xios_2311_src/extern/remap/src/parallel_tree.hpp index cd51193d..9800c067 100644 --- a/xios_2311_src/extern/remap/src/parallel_tree.hpp +++ b/xios_2311_src/extern/remap/src/parallel_tree.hpp @@ -14,10 +14,10 @@ public: CParallelTree(MPI_Comm comm); ~CParallelTree(); - void build(vector& node, vector& node2); + void build(vector& node, vector& node2); - void routeNodes(vector& route, vector& nodes, int level = 0); - void routeIntersections(vector >& route, vector& nodes, int level = 0); + void routeNodes(vector& route, vector& nodes, int level = 0); + void routeIntersections(vector >& route, vector& nodes, int level = 0); int nbLocalElements; Elt* localElements; @@ -26,8 +26,8 @@ public: private: void updateCirclesForRouting(Coord rootCentre, double rootRadius, int level = 0); - void buildSampleTreeCascade(vector& sampleNodes, int level = 0); - void buildLocalTree(const vector& node, const vector& route); + void buildSampleTreeCascade(vector& sampleNodes, int level = 0); + void buildLocalTree(const vector& node, const vector& route); void buildRouteTree(); //CSampleTree sampleTree; @@ -37,7 +37,7 @@ private: }; -void buildSampleTree(CSampleTree& tree, const vector& node, const CCascadeLevel& comm); +void buildSampleTree(CSampleTree& tree, const vector& node, const CCascadeLevel& comm); } #endif diff --git a/xios_2311_src/extern/remap/src/polyg.cpp b/xios_2311_src/extern/remap/src/polyg.cpp index 36bd92a7..8855b665 100644 --- a/xios_2311_src/extern/remap/src/polyg.cpp +++ b/xios_2311_src/extern/remap/src/polyg.cpp @@ -97,9 +97,6 @@ Coord exact_barycentre(const Coord *x, int n) else if (n == 0) return ORIGIN; else if (n == 2) return midpoint(x[0], x[1]); else if (n == 1) return x[0]; - - error_exit( "Missing return in : Coord exact_barycentre(const Coord *x, int n)" ); - return ORIGIN; } Coord sc_gc_moon_normalintegral(Coord a, Coord b, Coord pole) diff --git a/xios_2311_src/extern/remap/src/timerRemap.cpp b/xios_2311_src/extern/remap/src/timerRemap.cpp index e8f7a542..0354b1d1 100644 --- a/xios_2311_src/extern/remap/src/timerRemap.cpp +++ b/xios_2311_src/extern/remap/src/timerRemap.cpp @@ -59,11 +59,4 @@ CTimer& CTimer::get(const string name) if (it==allTimer.end()) it=allTimer.insert(pair(name,new CTimer(name))).first; return *(it->second); } - -void CTimer::release(void) -{ - for(auto & it : allTimer) delete it.second ; - allTimer.clear() ; -} - } diff --git a/xios_2311_src/extern/remap/src/timerRemap.hpp b/xios_2311_src/extern/remap/src/timerRemap.hpp index 4d7b653c..c31e48ea 100644 --- a/xios_2311_src/extern/remap/src/timerRemap.hpp +++ b/xios_2311_src/extern/remap/src/timerRemap.hpp @@ -1,5 +1,5 @@ -#ifndef __TIMER_REMAP_HPP__ -#define __TIMER_REMAP_HPP__ +#ifndef __TIMER_HPP__ +#define __TIMER_HPP__ #include "mpi.hpp" #include @@ -28,8 +28,9 @@ namespace sphereRemap { static map allTimer; static double getTime(void); static CTimer& get(string name); - static void release(void) ; - } ; + }; + + } #endif diff --git a/xios_2311_src/extern/remap/src/tree.cpp b/xios_2311_src/extern/remap/src/tree.cpp index d6fb676f..79361a5e 100644 --- a/xios_2311_src/extern/remap/src/tree.cpp +++ b/xios_2311_src/extern/remap/src/tree.cpp @@ -26,22 +26,22 @@ CBasicTree::CBasicTree() : ri(0), levelSize(MAX_LEVEL_SIZE), root(NULL) } */ -void CBasicTree::routeNodes(vector& route, vector& nodes, int assignLevel) +void CBasicTree::routeNodes(vector& route, vector& nodes, int assignLevel) { for (int i = 0; i < nodes.size(); i++) { - root->routeNode(nodes[i], assignLevel); - route[i] = nodes[i]->route; + root->routeNode(&nodes[i], assignLevel); + route[i] = nodes[i].route; } } -void CBasicTree::routeIntersections(vector >& routes, vector& nodes) +void CBasicTree::routeIntersections(vector >& routes, vector& nodes) { for (int i = 0; i < nodes.size(); i++) - root->routeIntersection(routes[i], nodes[i]); + root->routeIntersection(routes[i], &nodes[i]); } -void CBasicTree::build(vector& nodes) +void CBasicTree::build(vector& nodes) { newRoot(1); insertNodes(nodes); @@ -79,7 +79,7 @@ void CBasicTree::insertNode(NodePtr node) increaseLevelSize(0); push_back(node); - NodePtr q=make_shared(); + NodePtr q; while (pool.size()) { q = pool.front(); @@ -87,7 +87,7 @@ void CBasicTree::insertNode(NodePtr node) q = insert(q, root); if (ri) { - q.reset(); + delete q; ri = 0; } } @@ -102,7 +102,7 @@ void CBasicTree::emptyPool(void) q = insert(q, root); if (ri) { - q.reset(); + delete q; ri = 0; } } @@ -136,10 +136,10 @@ void CBasicTree::decreaseLevelSize(int level) void CBasicTree::newRoot(int level) // newroot <- root { - root = make_shared(); + root = new Node; // if (level > 1) cout << " newRoot level " << level << endl; root->level = level; - root->parent.reset() ; + root->parent = 0; root->leafCount = 0; // initialize root node on the sphere root->centre.x=1 ; root->centre.y=0 ; root->centre.z=0 ; @@ -154,16 +154,16 @@ CBasicTree::~CBasicTree() { //FIXME uncomment the next line and figure out why it segfault sometimes //root->free_descendants(); // recursively deletes all nodes in the tree - if (root) root.reset(); + if (root) delete root; } -void CTree::insertNodes(vector& nodes) +void CTree::insertNodes(vector& nodes) { int stepSlim = MAX_NODE_SZ*MAX_NODE_SZ*2; const double ratio = 1.5; for (int i = 0; i < nodes.size(); i++) { - insertNode(nodes[i]); + insertNode(&nodes[i]); if (root->leafCount > stepSlim) // time for slim down { @@ -174,7 +174,7 @@ void CTree::insertNodes(vector& nodes) } -void CSampleTree::insertNodes(vector& nodes) +void CSampleTree::insertNodes(vector& nodes) { bool first1 = true; bool first2 = true; @@ -183,9 +183,10 @@ void CSampleTree::insertNodes(vector& nodes) double ratio = 1.5 ; int i ; +// cout<<"CSampleTree::insertNodes : nb node to be inserted : "<leafCount > stepSlim && levelSize[assignLevel] < keepNodes-2) // time for slim down { diff --git a/xios_2311_src/extern/remap/src/tree.hpp b/xios_2311_src/extern/remap/src/tree.hpp index 1a75a802..8fda1574 100644 --- a/xios_2311_src/extern/remap/src/tree.hpp +++ b/xios_2311_src/extern/remap/src/tree.hpp @@ -19,16 +19,16 @@ public: NodePtr ref; // FIXME this reference, set by a node is odd, try to remove int ri; /** this is set to one by a node in case of reinsertion */ vector levelSize; /** e.g. levelSize[0] == leafs.size() */ - vector leafs; /** leafs are stored in vector for easy access and rest of the tree nodes as separate allocations, only reachable through tree traversal */ + vector leafs; /** leafs are stored in vector for easy access and rest of the tree nodes as separate allocations, only reachable through tree traversal */ CBasicTree() : ri(0), levelSize(MAX_LEVEL_SIZE), root(NULL), isAssignedLevel(false), okSplit(true), isActiveOkSplit(false) {} ~CBasicTree(); - void build(vector& nodes); + void build(vector& nodes); void slim(int nbIts = 1); - virtual void insertNodes(vector& node) = 0; + virtual void insertNodes(vector& node) = 0; - void routeNodes(vector& route, vector& nodes, int assignLevel); - void routeIntersections(vector >& route, vector& nodes); + void routeNodes(vector& route, vector& nodes, int assignLevel); + void routeIntersections(vector >& route, vector& nodes); void push_back(NodePtr node); void push_front(NodePtr node); @@ -62,7 +62,7 @@ protected: class CTree : public CBasicTree { public: - void insertNodes(vector& nodes); + void insertNodes(vector& nodes); }; class CSampleTree : public CBasicTree @@ -72,7 +72,7 @@ public: CSampleTree(int keepNodes_, int assignLevel_) : CBasicTree(keepNodes_,assignLevel_) {} void slimAssignedLevel() ; void removeExtraNode(void) ; - void insertNodes(vector& nodes); + void insertNodes(vector& nodes); }; } diff --git a/xios_2311_src/extern/remap/src/triple.hpp b/xios_2311_src/extern/remap/src/triple.hpp index 32ae5be0..1e58de56 100644 --- a/xios_2311_src/extern/remap/src/triple.hpp +++ b/xios_2311_src/extern/remap/src/triple.hpp @@ -35,10 +35,10 @@ public: Vector& operator+=(const Vector& rhs) { - u += rhs.u; - v += rhs.v; - w += rhs.w; - return *this; + u += rhs.u; + v += rhs.v; + w += rhs.w; + return *this ; } double u, v, w; diff --git a/xios_2311_src/extern/tv_data_display/tv_data_display.c b/xios_2311_src/extern/tv_data_display/tv_data_display.c deleted file mode 100644 index d2a3c3d9..00000000 --- a/xios_2311_src/extern/tv_data_display/tv_data_display.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * $Header$ - * $Locker$ - - Copyright (c) 2010-2012, Rogue Wave Software, Inc. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of the tv_data_display.h and tv_data_display.c files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - * Update log - * - * Feb 1 2012 NYP: Updated Copyright - * Apr 18 2011 SJT: TVT-13122, comment cleanup. - * Sep 27 2010 ANB: lots of changes as part of totalview/12314. - * Reworked to reduce the dependencies on outside - * entities, both at compile and also at runtime. - * Adjusted the naming scheme. - * Jan 28 2010 SJT: Bug 12100, bump base size to 16K and recognize if it is - * resized further. - * Sep 24 2009 SJT: Remove pre/post callback to reduce function call overhead. - * Jul 1 2009 SJT: Created. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "tv_data_display.h" - -#include -#include /* for size_t */ - -#define DATA_FORMAT_BUFFER_SIZE 16384 -#define TV_FORMAT_INACTIVE 0 -#define TV_FORMAT_FIRST_CALL 1 -#define TV_FORMAT_APPEND_CALL 2 - -volatile int TV_ttf_data_format_control = TV_FORMAT_INACTIVE; -int TV_ttf_data_display_api_version = TV_TTF_DATA_DISPLAY_API_VERSION; - -/* TV_ttf_data_format_buffer should not be static for icc 11, and others */ -char TV_ttf_data_format_buffer[DATA_FORMAT_BUFFER_SIZE]; -static char *TV_ttf_data_buffer_ptr = TV_ttf_data_format_buffer; - -static const char digits [] = "0123456789abcdefghijklmnopqrstuvwxyz"; -static const size_t base_bound = sizeof ( digits ); - -/* ************************************************************************ */ - -int -TV_ttf_is_format_result_ok ( TV_ttf_format_result fr ) -{ - int ret_val; - - switch ( fr ) - { - case TV_ttf_format_ok: - case TV_ttf_format_ok_elide: - ret_val = 1; - break; - default: - ret_val = 0; - break; - } - return ret_val; -} /* TV_ttf_is_format_result_ok */ - -/* ************************************************************************ */ - -static -void * -my_zeroit ( void *s, size_t n ) -{ - char *cp = (char *) s; - - /* not the most efficient of solutions. What we should do is */ - /* do the assugnments in units of int or long. The problem */ - /* with that is ensuring that the alignments of the assignments */ - /* are correct. The difficulty with that is doing arithmetic */ - /* on pointers in a portable manner. */ - while ( n > 0 ) - { - *cp++ = 0; - n--; - } - - return s; -} /* my_zeroit */ - -static -char * -my_strpbrk ( const char *str, const char *accept ) -{ - char *ret_val = NULL; - char *s, *t; - - for ( s = (char *) str; (*s) && (! ret_val); s++ ) - { - for ( t = (char *) accept; (*t) && (! ret_val); t++ ) - { - if ( *s == *t ) - ret_val = s; - } - } - - return ret_val; -} /* my_strpbrk */ - -static -int -marshal_string ( char *buffer, size_t len, const char *s, - char **nbuffer, size_t *nlen ) -{ - int ret_val = 0; - char *cursor = buffer; - - while ( *s ) - { - ret_val++; - if ( len > 1 ) - { - *cursor++ = *s++; - len--; - } - } - if ( len > 0 ) - *cursor = '\0'; - - if ( nbuffer ) - *nbuffer = cursor; - if ( nlen ) - *nlen = len; - - return ret_val; -} /* marshal_string */ - -static -int -marshal_unsigned_body ( char *buffer, size_t len, size_t val, int base, - char **nbuffer, size_t *nlen ) -{ - - int ret_val = 0; - size_t q, r; - char digit [ 2 ]; - char *my_buffer = buffer; - size_t my_len = len; - - if ( val < base ) - { - r = val; - } - else - { - q = val / base; - r = val - (q * base); - ret_val += marshal_unsigned_body ( buffer, len, q, base, - &my_buffer, &my_len ); - } - digit [ 0 ] = digits [ r ]; - digit [ 1 ] = '\0'; - ret_val += marshal_string ( my_buffer, my_len, digit, nbuffer, nlen ); - - return ret_val; -} /* marshal_unsigned_body */ - -static -int -marshal_unsigned ( char *buffer, size_t len, size_t val, int base, - char **nbuffer, size_t *nlen ) -{ - int ret_val = 0; - - if ( 0 == base ) - base = 10; - if ( base < base_bound ) - ret_val = marshal_unsigned_body ( buffer, len, val, base, nbuffer, nlen ); - else - ret_val = -1; - - return ret_val; -} /* marshal_unsigned */ - -static -int -marshal_hex ( char *buffer, size_t len, size_t hex_val, - char **nbuffer, size_t *nlen ) -{ - int ret_val = 0; - char *my_buffer; - size_t my_len; - - ret_val += marshal_string ( buffer, len, "0x", &my_buffer, &my_len ); - ret_val += marshal_unsigned ( my_buffer, my_len, hex_val, 16, nbuffer, nlen ); - - return ret_val; -} /* marshal_hex */ - -static -int -marshal_row ( char *buffer, size_t len, const char *field_name, - const char *type_name, - const void *value, - char **nbuffer, - size_t *nlen ) -{ - int ret_val = 0; - char *my_buffer; - size_t my_len; - - ret_val += marshal_string ( buffer, len, field_name, &my_buffer, &my_len ); - ret_val += marshal_string ( my_buffer, my_len, "\t", &my_buffer, &my_len ); - ret_val += marshal_string ( my_buffer, my_len, type_name, &my_buffer, &my_len ); - ret_val += marshal_string ( my_buffer, my_len, "\t", &my_buffer, &my_len ); - ret_val += marshal_hex ( my_buffer, my_len, (size_t) value, &my_buffer, &my_len ); - ret_val += marshal_string ( my_buffer, my_len, "\n", nbuffer, nlen ); - - return ret_val; -} /* marshal_row */ - -int TV_ttf_add_row(const char *field_name, - const char *type_name, - const void *value) -{ - size_t remaining; - int out; - - /* - printf ( "TV_ttf_add_row: on entry TV_ttf_data_format_control == %d\n", TV_ttf_data_format_control ); - */ - - /* Called at the wrong time */ - if (TV_ttf_data_format_control == TV_FORMAT_INACTIVE) - return TV_ttf_ec_not_active; - - if (my_strpbrk(field_name, "\n\t") != NULL) - return TV_ttf_ec_invalid_characters; - - if (my_strpbrk(type_name, "\n\t") != NULL) - return TV_ttf_ec_invalid_characters; - - if (TV_ttf_data_format_control == TV_FORMAT_FIRST_CALL) - { - /* Zero out the buffer to avoid confusion, and set the write point - to the top of the buffer. */ - - my_zeroit(TV_ttf_data_format_buffer, sizeof (TV_ttf_data_format_buffer)); - TV_ttf_data_buffer_ptr = TV_ttf_data_format_buffer; - TV_ttf_data_format_control = TV_FORMAT_APPEND_CALL; - } - - remaining = TV_ttf_data_buffer_ptr + - DATA_FORMAT_BUFFER_SIZE - TV_ttf_data_format_buffer; - -/* - out = snprintf(TV_ttf_data_buffer_ptr, - remaining, "%s\t%s\t%p\n", - field_name, type_name, value); -*/ - out = marshal_row ( TV_ttf_data_buffer_ptr, remaining, - field_name, type_name, value, 0, 0 ); - - if (out < 1) - return TV_ttf_ec_buffer_exhausted; - - TV_ttf_data_buffer_ptr += out; - - return 0; -} /* TV_ttf_add_row */ - -void TV_ttf_pre_display_callback(void) -{ - TV_ttf_data_format_control = TV_FORMAT_FIRST_CALL; -} - -void TV_ttf_post_display_callback(void) -{ - TV_ttf_data_format_control = TV_FORMAT_INACTIVE; -} - -#ifdef __cplusplus -} -#endif diff --git a/xios_2311_src/extern/tv_data_display/tv_data_display.h b/xios_2311_src/extern/tv_data_display/tv_data_display.h deleted file mode 100644 index 8b47bd46..00000000 --- a/xios_2311_src/extern/tv_data_display/tv_data_display.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * $Header$ - * $Locker$ - - Copyright (c) 2010-2012, Rogue Wave Software, Inc. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of the tv_data_display.h and tv_data_display.c files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - * Update log - * - * Feb 1 2012 NYP: Updated Copyright - * Sep 27 2010 ANB: reworked as part of totalview/12314 - * Jun 17 2010 JVD: Added TV_elide_row. - * Sep 25 2009 SJT: Add idempotence header. - * Jul 1 2009 SJT: Created. - * - */ - -#ifndef TV_DATA_DISPLAY_H_INCLUDED -#define TV_DATA_DISPLAY_H_INCLUDED 1 - -#define TV_TTF_DATA_DISPLAY_API_VERSION 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* TV_ttf_display_type should return one of these values */ -enum TV_ttf_format_result - { - TV_ttf_format_ok, /* Type is known, and successfully converted */ - TV_ttf_format_ok_elide, /* as TV_ttf_format_ok, but elide type */ - TV_ttf_format_failed, /* Type is known, but could not convert it */ - TV_ttf_format_raw, /* Just display it as a regular type for now */ - TV_ttf_format_never /* Don't know about this type, and please don't ask again */ - }; -typedef enum TV_ttf_format_result TV_ttf_format_result; - -/* TV_ttf_add_row returns one of these values */ -enum TV_ttf_error_codes - { - TV_ttf_ec_ok = 0, /* operation succeeded */ - TV_ttf_ec_not_active, - TV_ttf_ec_invalid_characters, - TV_ttf_ec_buffer_exhausted - }; -typedef enum TV_ttf_error_codes TV_ttf_error_codes; - -#define TV_ttf_type_ascii_string "$string" -#define TV_ttf_type_int "$int" -#if 0 -#define TV_elide_row "" /* field_name to use when row elision is desired */ -#endif - -/* returns logical true (non-zero) if the TV_ttf_format_result fr represents - a format result that indicates success -*/ -extern int TV_ttf_is_format_result_ok ( TV_ttf_format_result fr ); - -/* - TV_ttf_ec_ok: Success - TV_ttf_ec_not_active: Called with no active callback to - TV_ttf_display_type - TV_ttf_ec_invalid_characters: field_name or type_name has illegal characters - TV_ttf_ec_buffer_exhausted: No more room left for display data -*/ -extern int TV_ttf_add_row(const char *field_name, - const char *type_name, - const void *value); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/xios_2311_src/generic_testcase/context_atm.xml b/xios_2311_src/generic_testcase/context_atm.xml index a48c8341..ce9d5676 100644 --- a/xios_2311_src/generic_testcase/context_atm.xml +++ b/xios_2311_src/generic_testcase/context_atm.xml @@ -2,35 +2,41 @@ - - - - - - - + + + + + + - + + + + + + + + + + + + + + - - - - - - - - - + + + @@ -42,17 +48,38 @@ - + + + + + + + + - - + + + + + + + + + + + + + + + + @@ -99,11 +126,6 @@ - - - - - @@ -140,23 +162,20 @@ + - + - - - - @@ -203,11 +222,6 @@ - - - - - @@ -243,18 +257,21 @@ - + - - + + + + + + + - @@ -263,18 +280,13 @@ - - - - - + @@ -284,16 +296,12 @@ - - - - + - + @@ -302,14 +310,12 @@ - - + @@ -317,190 +323,81 @@ + + - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/xios_2311_src/generic_testcase/context_grid_dynamico.xml b/xios_2311_src/generic_testcase/context_grid_dynamico.xml index c7b66403..230db1f2 100644 --- a/xios_2311_src/generic_testcase/context_grid_dynamico.xml +++ b/xios_2311_src/generic_testcase/context_grid_dynamico.xml @@ -4,8 +4,8 @@ - - + + diff --git a/xios_2311_src/generic_testcase/context_oce.xml b/xios_2311_src/generic_testcase/context_oce.xml deleted file mode 100644 index bf09ec03..00000000 --- a/xios_2311_src/generic_testcase/context_oce.xml +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @this - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xios_2311_src/generic_testcase/iodef.xml b/xios_2311_src/generic_testcase/iodef.xml index fc0dcf71..076a42b6 100644 --- a/xios_2311_src/generic_testcase/iodef.xml +++ b/xios_2311_src/generic_testcase/iodef.xml @@ -1,4 +1,5 @@ + @@ -7,11 +8,8 @@ 1h lmdz false - cross false - false - sparse - academic + rank 36 18 10 @@ -22,44 +20,6 @@ 2 2 --> - lmdz - false - false - academic - 30 - 15 - 10 - 0.10 - false - - - - - - - - - - - - 1h - nemo - false - false - academic - 64 - 32 - 5 - 0.10 - false - - lmdz false false @@ -77,32 +37,30 @@ - - - + + - 10000000 - performance - 0.8 + 10000000 + performance + 0.8 - true 100 true - false + true 50 - + 1 false true - true + false diff --git a/xios_2311_src/generic_testcase/param.def b/xios_2311_src/generic_testcase/param.def index 0efbe396..81b6a884 100644 --- a/xios_2311_src/generic_testcase/param.def +++ b/xios_2311_src/generic_testcase/param.def @@ -1,5 +1,4 @@ ¶ms_run -duration='4ts' -nb_proc_atm=1 -nb_proc_oce=0 +duration='1d' +nb_proc_atm=4 / diff --git a/xios_2311_src/inputs/COMPLETE/context_atmosphere.xml b/xios_2311_src/inputs/COMPLETE/context_atmosphere.xml index 98ad5de4..1b3de836 100644 --- a/xios_2311_src/inputs/COMPLETE/context_atmosphere.xml +++ b/xios_2311_src/inputs/COMPLETE/context_atmosphere.xml @@ -7,12 +7,12 @@ - + - + - + diff --git a/xios_2311_src/inputs/COMPLETE/context_surface.xml b/xios_2311_src/inputs/COMPLETE/context_surface.xml index 121c33e1..d1bc7f6f 100644 --- a/xios_2311_src/inputs/COMPLETE/context_surface.xml +++ b/xios_2311_src/inputs/COMPLETE/context_surface.xml @@ -11,17 +11,17 @@ field_A_srf + field_C_srf - + - + surf_att 10 6.8 100.201 - + - field_A_srf_K + @field_A_srf_K @@ -31,7 +31,7 @@ file_6h - + surf_att 10 diff --git a/xios_2311_src/inputs/iodef.xml b/xios_2311_src/inputs/iodef.xml index 83b0ba5b..0497be12 100644 --- a/xios_2311_src/inputs/iodef.xml +++ b/xios_2311_src/inputs/iodef.xml @@ -6,28 +6,52 @@ - + + + + field_A+10 - - - - - + + + + + + 10*test_field_B + 100*field_A + field_A+10*test_field_B-field_C + + + + + + - + + + - - - + + + + + - + + field_A+50 + + + + field_A + field_B + field_C + + + @@ -78,7 +102,7 @@ false - 50 + 80 true diff --git a/xios_2311_src/make_xios b/xios_2311_src/make_xios index 0e78499d..4fb4535a 100755 --- a/xios_2311_src/make_xios +++ b/xios_2311_src/make_xios @@ -1,4 +1,5 @@ #!/bin/bash + install_dir=$PWD compil_full="false" use_oasis="false" @@ -16,7 +17,7 @@ arch_path=$PWD/"arch" arch_default_path=$PWD/"arch" arch_defined="FALSE" arch_path_defined="FALSE" -fcm_version=new +fcm_version=old # Traitement de la ligne de commande while (($# > 0)) @@ -41,7 +42,7 @@ while (($# > 0)) echo " [--doc] : to generate Doxygen documentation (not available yet)" echo " [--job ntasks] : to use parallel compilation with ntasks" echo " [--netcdf_lib 'netcdf4_par'/'netcdf4_seq'/'netcdf4_internal' : default netcdf4_par] : choice of netcdf library" - echo " [--memtrack full/light] : tracking memory leak - developper only" + echo " [--memtrack] : tracking memory leak - developper only" echo " [--fcm] : fcm version compatibility : 'new'/'old'" echo "Example : ./make_xios --prod --arch PW6_VARGAS" echo "Example : ./make_xios --avail" @@ -242,8 +243,9 @@ if [[ "$use_memtrack" == "true" ]] if [[ "$memtrack" == "light" ]] then XIOS_CPPKEY="$XIOS_CPPKEY XIOS_MEMTRACK_LIGHT" - elif [[ "$memtrack" == "full" ]] + elif [[ "$memtrack" == "FULL" ]] then + XIOS_LIB="$ADDR2LINE_LIBDIR $ADDR2LINE_LIB $XIOS_LIB" XIOS_CPPKEY="$XIOS_CPPKEY XIOS_MEMTRACK_FULL" else echo "Bad choice for --memtrack argument : choose between 'light','full'" diff --git a/xios_2311_src/src/addr2line.hpp b/xios_2311_src/src/addr2line.hpp deleted file mode 100755 index dbc7856b..00000000 --- a/xios_2311_src/src/addr2line.hpp +++ /dev/null @@ -1,109 +0,0 @@ -#ifdef XIOS_MEMTRACK - -#ifndef __ADDR2LINE_HPP__ -#define __ADDR2LINE_HPP__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace xios -{ - class CAddr2line - { - public: - - CAddr2line(void) ; - ~CAddr2line() ; - - void write(const std::string& str) ; - void read(std::string& str) ; - - private: - pid_t child_pid; - int from_child, to_child; - } ; - - - CAddr2line::CAddr2line(void) - { - pid_t p; - int pipe_stdin[2], pipe_stdout[2]; - char execfile[1000] ; - ssize_t size=readlink("/proc/self/exe",execfile,1000) ; - execfile[size]='\0' ; - std::string cmdline = "addr2line -e "; - cmdline=cmdline+execfile ; - - int err ; - err=pipe(pipe_stdin) ; - // if (err) return -1; // make an exception// - err=pipe(pipe_stdout) ; - // if (err) return -1; // make an exception// - - p = fork(); - - if(p < 0) return ; // make an exception// - if(p == 0) - { /* child */ - close(pipe_stdin[1]); - dup2(pipe_stdin[0], 0); - close(pipe_stdout[0]); - dup2(pipe_stdout[1], 1); - execl("/bin/sh", "sh", "-c", cmdline.c_str(), NULL); - std::cout<<"child exit !!!"< - class CArray ; - -} - namespace xios { template @@ -32,214 +25,260 @@ namespace xios template explicit CArray(_bz_ArrayExpr expr) : Array(expr) - , initialized(true) { } + , initialized(true) + {} CArray(GeneralArrayStorage storage = T_default_storage()) : Array(storage) - , initialized(false) { } + , initialized(false) + {} explicit CArray(int length0, GeneralArrayStorage storage = T_default_storage()) : Array(length0, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, GeneralArrayStorage storage = T_default_storage()) : Array(length0,length1, length2, length3, length4, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, length6, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, length6, length7, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, int length8, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, length6, length7, length8, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, int length8, int length9, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, storage) - , initialized(true) { } + , initialized(true) + {} CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7, int length8, int length9, int length10, GeneralArrayStorage storage = T_default_storage()) : Array(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, length10, storage) - , initialized(true) { } + , initialized(true) + {} CArray(T_numtype* restrict dataFirst, TinyVector shape, GeneralArrayStorage storage = T_default_storage()) : Array(dataFirst, shape, storage) - , initialized(true) { } + , initialized(true) + {} CArray(T_numtype* restrict dataFirst, TinyVector shape, TinyVector stride, GeneralArrayStorage storage = T_default_storage()) : Array(dataFirst, shape, stride, storage) - , initialized(true) { } + , initialized(true) + {} CArray(T_numtype* restrict dataFirst, TinyVector shape, preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage storage = T_default_storage()) : Array(dataFirst, shape, deletionPolicy, storage) - , initialized(true) { } + , initialized(true) + {} CArray(T_numtype* restrict dataFirst, TinyVector shape, TinyVector stride, preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage storage = T_default_storage()) : Array(dataFirst, shape, stride, deletionPolicy, storage) - , initialized(true) { } + , initialized(true) + {} CArray(const TinyVector& extent, GeneralArrayStorage storage = T_default_storage()) : Array(extent, storage) - , initialized(true) { } + , initialized(true) + {} CArray(const TinyVector& lbounds, const TinyVector& extent, const GeneralArrayStorage& storage) : Array(lbounds, extent, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, GeneralArrayStorage storage = T_default_storage()) : Array(r0, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, r6, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, r6, r7, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, r6, r7, r8, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9, Range r10, GeneralArrayStorage storage = T_default_storage()) : Array(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, storage) - , initialized(true) { } + , initialized(true) + {} CArray(const CArray& array) : Array(array) - , initialized(array.initialized) { } + , initialized(array.initialized) + {} CArray(const Array& array) : Array(array) - , initialized(true) { } + , initialized(true) + {} CArray(const TinyVector& shape, int lastExtent, const GeneralArrayStorage& storage) : Array(shape, lastExtent, storage) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0) : Array(array, r0) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1) : Array(array, r0, r1) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2) : Array( array, r0, r1, r2) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3) : Array(array, r0, r1, r2, r3) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4) : Array(array, r0, r1, r2, r3, r4) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5) : Array( array, r0, r1, r2, r3, r4, r5) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6) : Array( array, r0, r1, r2, r3, r4, r5, r6) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7) : Array(array, r0, r1, r2, r3, r4, r5, r6, r7) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8) : Array(array, r0, r1, r2, r3, r4, r5, r6, r7, r8) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9) : Array(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9, Range r10) : Array(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, const RectDomain& subdomain) : Array(array, subdomain) - , initialized(true) { } + , initialized(true) + {} CArray(Array& array, const StridedDomain& subdomain) : Array(array, subdomain) - , initialized(true) { } + , initialized(true) + {} template CArray(Array& array, R0 r0, R1 r1, R2 r2, R3 r3, R4 r4, R5 r5, R6 r6, R7 r7, R8 r8, R9 r9, R10 r10) : Array(array, r0,r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) , initialized(true) - { } + {} virtual ~CArray() {} @@ -507,9 +546,8 @@ namespace xios virtual void reset(void) { this->free(); initialized = false; } virtual bool isEmpty(void) const { return !initialized; } virtual size_t size(void) const { return size(this->numElements()); } - virtual std::vector getVector(void) { return vector(this->dataFirst(),this->dataFirst()+this->numElements()) ;} static size_t size(sizeType numElements) { return (N_rank + 1) * sizeof(int) + sizeof(size_t) + numElements * sizeof(T_numtype); } - + virtual CBaseType* clone(void) const { return new CArray(*this); } virtual bool toBuffer(CBufferOut& buffer) const @@ -539,11 +577,9 @@ namespace xios return ret; } - }; - #define macro(NRANK)\ \ template <>\ diff --git a/xios_2311_src/src/attribute.hpp b/xios_2311_src/src/attribute.hpp index a8d309a9..053de6cb 100644 --- a/xios_2311_src/src/attribute.hpp +++ b/xios_2311_src/src/attribute.hpp @@ -41,7 +41,7 @@ namespace xios virtual StdString toString(void) const = 0; virtual void fromString(const StdString & str) = 0; virtual StdString dump(void) const = 0; - virtual StdString dumpGraph(void) const = 0; + virtual StdString dump4graph(void) const = 0; virtual bool isEqual(const CAttribute& ) = 0; //! Returns true if and only if the attribute should be publicly exposed in the API diff --git a/xios_2311_src/src/attribute_array.hpp b/xios_2311_src/src/attribute_array.hpp index c5b8fc6f..f4a02d4b 100644 --- a/xios_2311_src/src/attribute_array.hpp +++ b/xios_2311_src/src/attribute_array.hpp @@ -20,7 +20,8 @@ namespace xios class CAttributeArray : public CAttribute, public CArray { public : - using CArray::operator = ; + + using CArray::operator = ; /// Constructeurs /// explicit CAttributeArray(const StdString & id); @@ -54,7 +55,7 @@ namespace xios virtual bool toBuffer (CBufferOut& buffer) const { return _toBuffer(buffer);} virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); } virtual string dump(void) const { return _dump();} - virtual string dumpGraph(void) const { return _dumpGraph();} + virtual string dump4graph(void) const { return _dump4graph();} virtual void generateCInterface(ostream& oss,const string& className) ; virtual void generateFortran2003Interface(ostream& oss,const string& className) ; @@ -64,19 +65,17 @@ namespace xios virtual void generateFortranInterfaceGetDeclaration_(ostream& oss,const string& className) ; virtual void generateFortranInterfaceGetBody_(ostream& oss,const string& className) ; virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ; - + private : bool isEqual_(const CAttributeArray& attr); CArray inheritedValue ; StdString _toString(void) const; StdString _dump(void) const; - StdString _dumpGraph(void) const; + StdString _dump4graph(void) const; void _fromString(const StdString & str); bool _toBuffer (CBufferOut& buffer) const; bool _fromBuffer(CBufferIn& buffer) ; }; // class CAttributeEnum - - } // namespace xios #endif // __XIOS_ATTRIBUTE_ARRAY__ diff --git a/xios_2311_src/src/attribute_array_decl.cpp b/xios_2311_src/src/attribute_array_decl.cpp index 809301f5..ec506be7 100644 --- a/xios_2311_src/src/attribute_array_decl.cpp +++ b/xios_2311_src/src/attribute_array_decl.cpp @@ -18,5 +18,4 @@ namespace xios template class CAttributeArray ; template class CAttributeArray ; template class CAttributeArray ; - } diff --git a/xios_2311_src/src/attribute_array_impl.hpp b/xios_2311_src/src/attribute_array_impl.hpp index 9b3a0740..a9e9328c 100644 --- a/xios_2311_src/src/attribute_array_impl.hpp +++ b/xios_2311_src/src/attribute_array_impl.hpp @@ -13,7 +13,7 @@ namespace xios template CAttributeArray::CAttributeArray(const StdString & id) : CAttribute(id) - { } + { /* Ne rien faire de plus */ } template CAttributeArray::CAttributeArray(const StdString & id, const CArray& value) @@ -112,9 +112,12 @@ namespace xios template bool CAttributeArray::isEqual_(const CAttributeArray& attr) { - if (this->isEmpty() && attr.isEmpty()) return true ; - if (!this->isEmpty() && !attr.isEmpty()) return (this->getValue() == attr.getValue()); - else return false; + if ((!this->hasInheritedValue() && !attr.hasInheritedValue())) + return true; + if (this->hasInheritedValue() && attr.hasInheritedValue()) + return (this->getInheritedValue() == attr.getInheritedValue()); + else + return false; } template @@ -133,9 +136,9 @@ namespace xios oss << this->getName() << "=\"" << CArray::dump() << "\""; return (oss.str()); } - + template - StdString CAttributeArray::_dumpGraph(void) const + StdString CAttributeArray::_dump4graph(void) const { StdOStringStream oss; if (! isEmpty() && this->hasId() && (this->numElements()!=0)) diff --git a/xios_2311_src/src/attribute_enum.hpp b/xios_2311_src/src/attribute_enum.hpp index 7afdaeb6..e0fb18de 100644 --- a/xios_2311_src/src/attribute_enum.hpp +++ b/xios_2311_src/src/attribute_enum.hpp @@ -62,7 +62,7 @@ namespace xios virtual StdString toString(void) const { return _toString();} virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;} else _fromString(str);} virtual StdString dump(void) const { return _toString();} - virtual StdString dumpGraph(void) const { return _dumpGraph();} + virtual StdString dump4graph(void) const { return _dump4graph();} virtual bool toBuffer (CBufferOut& buffer) const { return _toBuffer(buffer);} virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); } @@ -79,11 +79,11 @@ namespace xios private : bool isEqual_(const CAttributeEnum& attr ); StdString _toString(void) const; + StdString _dump4graph(void) const; void _fromString(const StdString & str); bool _toBuffer (CBufferOut& buffer) const; bool _fromBuffer(CBufferIn& buffer) ; CEnum inheritedValue ; - StdString _dumpGraph(void) const; }; // class CAttributeEnum } // namespace xios diff --git a/xios_2311_src/src/attribute_enum_impl.hpp b/xios_2311_src/src/attribute_enum_impl.hpp index f9d32d90..9a09755a 100644 --- a/xios_2311_src/src/attribute_enum_impl.hpp +++ b/xios_2311_src/src/attribute_enum_impl.hpp @@ -120,9 +120,12 @@ namespace xios template bool CAttributeEnum::isEqual_(const CAttributeEnum& attr) { - if (this->isEmpty() && attr.isEmpty()) return true ; - if (!this->isEmpty() && !attr.isEmpty()) return (this->getValue() == attr.getValue()); - else return false; + if ((!this->hasInheritedValue() && !attr.hasInheritedValue())) + return true; + if (this->hasInheritedValue() && attr.hasInheritedValue()) + return (this->getInheritedValue() == attr.getInheritedValue()); + else + return false; } //--------------------------------------------------------------- @@ -145,6 +148,15 @@ namespace xios return (oss.str()); } +template + StdString CAttributeEnum::_dump4graph(void) const + { + StdOStringStream oss; + if (!CEnum::isEmpty() && this->hasId()) + oss << this->getName() << "=" << CEnum::toString() << "
"; + return (oss.str()); + } + template void CAttributeEnum::_fromString(const StdString & str) { @@ -210,15 +222,6 @@ namespace xios { CInterface::AttributeFortranInterfaceGetDeclaration(oss, className, this->getName()); } - - template - StdString CAttributeEnum::_dumpGraph(void) const - { - StdOStringStream oss; - if (!CEnum::isEmpty() && this->hasId()) - oss << this->getName() << "=" << CEnum::toString() << "
"; - return (oss.str()); - } } // namespace xios #endif // __XIOS_ATTRIBUTE_ENUM_IMPL_HPP__ diff --git a/xios_2311_src/src/attribute_map.cpp b/xios_2311_src/src/attribute_map.cpp index 7df6015f..9f3ed2fb 100644 --- a/xios_2311_src/src/attribute_map.cpp +++ b/xios_2311_src/src/attribute_map.cpp @@ -58,12 +58,11 @@ namespace xios return str; } - ///-------------------------------------------------------------- - /*! - Record all non-empty attributes of an object (used only for field) for graph - */ - StdString CAttributeMap::recordXiosAttributes(void) const + + + StdString CAttributeMap::record4graphXiosAttributes(void) const { + int maxNbChar = 250; StdString str; typedef std::pair StdStrAttPair; auto it = SuperClassMap::begin(), end = SuperClassMap::end(); @@ -72,8 +71,15 @@ namespace xios const StdStrAttPair& att = *it; if (!att.second->isEmpty()) { - str.append(att.second->dumpGraph()); - str.append(" "); + if (str.length() < maxNbChar) + { + str.append(att.second->dump4graph()); + str.append(" "); + } + else if (str.length() == maxNbChar) + { + str.append("..."); + } } } return str; @@ -82,7 +88,7 @@ namespace xios //--------------------------------------------------------------- /* - Cleassr an attribute and reset its value + Clear an attribute and reset its value \param[in] key id of attribute */ void CAttributeMap::clearAttribute(const StdString& key) diff --git a/xios_2311_src/src/attribute_map.hpp b/xios_2311_src/src/attribute_map.hpp index 1bc07b8d..9d548806 100644 --- a/xios_2311_src/src/attribute_map.hpp +++ b/xios_2311_src/src/attribute_map.hpp @@ -38,7 +38,7 @@ namespace xios void duplicateAttributes(const CAttributeMap* const _parent); void clearAllAttributes(void); StdString dumpXiosAttributes(void) const; - StdString recordXiosAttributes(void) const; + StdString record4graphXiosAttributes(void) const; void clearAttribute(const StdString& key); bool isEqual(const CAttributeMap& another, const vector& excludedAttrs); diff --git a/xios_2311_src/src/attribute_template.hpp b/xios_2311_src/src/attribute_template.hpp index a7b779f9..aaab4600 100644 --- a/xios_2311_src/src/attribute_template.hpp +++ b/xios_2311_src/src/attribute_template.hpp @@ -19,7 +19,7 @@ namespace xios \class CAttributeTemplate The class implements attribute of some basic types */ - template + template class CAttributeTemplate : public CAttribute, public CType { typedef CAttribute SuperClass; @@ -74,7 +74,7 @@ namespace xios // virtual void toBinary (StdOStream & os) const; // virtual void fromBinary(StdIStream & is); virtual StdString dump(void) const { return _dump();} - virtual StdString dumpGraph(void) const { return _dumpGraph();} + virtual StdString dump4graph(void) const { return _dump4graph();} virtual bool toBuffer (CBufferOut& buffer) const { return _toBuffer(buffer);} virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); } @@ -100,7 +100,7 @@ namespace xios bool isEqual_(const CAttributeTemplate& attr); StdString _toString(void) const; StdString _dump(void) const; - StdString _dumpGraph(void) const; + StdString _dump4graph(void) const; void _fromString(const StdString & str); bool _toBuffer (CBufferOut& buffer) const; bool _fromBuffer(CBufferIn& buffer) ; @@ -111,7 +111,6 @@ namespace xios template void FromBinary(StdIStream & is, T & obj); - } // namespace xios #endif // __XIOS_CAttributeTemplate__ diff --git a/xios_2311_src/src/attribute_template_decl.cpp b/xios_2311_src/src/attribute_template_decl.cpp index bfa909c9..269c46d7 100644 --- a/xios_2311_src/src/attribute_template_decl.cpp +++ b/xios_2311_src/src/attribute_template_decl.cpp @@ -11,5 +11,4 @@ namespace xios template class CAttributeTemplate ; template class CAttributeTemplate ; template class CAttributeTemplate ; - } diff --git a/xios_2311_src/src/attribute_template_impl.hpp b/xios_2311_src/src/attribute_template_impl.hpp index bbd24292..cc27205c 100644 --- a/xios_2311_src/src/attribute_template_impl.hpp +++ b/xios_2311_src/src/attribute_template_impl.hpp @@ -164,9 +164,12 @@ namespace xios template bool CAttributeTemplate::isEqual_(const CAttributeTemplate& attr) { - if (this->isEmpty() && attr.isEmpty()) return true ; - if (!this->isEmpty() && !attr.isEmpty()) return (this->getValue() == attr.getValue()); - else return false; + if ((!this->hasInheritedValue() && !attr.hasInheritedValue())) + return true; + if (this->hasInheritedValue() && attr.hasInheritedValue()) + return (this->getInheritedValue() == attr.getInheritedValue()); + else + return false; } //--------------------------------------------------------------- @@ -206,9 +209,9 @@ namespace xios oss << this->getName() << "=\"" << CType::dump() << "\""; return (oss.str()); } - + template - StdString CAttributeTemplate::_dumpGraph(void) const + StdString CAttributeTemplate::_dump4graph(void) const { StdOStringStream oss; if (!CType::isEmpty() && this->hasId()) diff --git a/xios_2311_src/src/buffer_client.cpp b/xios_2311_src/src/buffer_client.cpp index f9793dcc..bb07552f 100644 --- a/xios_2311_src/src/buffer_client.cpp +++ b/xios_2311_src/src/buffer_client.cpp @@ -6,158 +6,34 @@ #include "cxios.hpp" #include "mpi.hpp" #include "tracer.hpp" -#include "timeline_events.hpp" -#include "timer.hpp" namespace xios { size_t CClientBuffer::maxRequestSize = 0; - CClientBuffer::CClientBuffer(MPI_Comm interComm, int serverRank, StdSize bufferSize, StdSize estimatedMaxEventSize) + CClientBuffer::CClientBuffer(MPI_Comm interComm, int serverRank, StdSize bufferSize, StdSize estimatedMaxEventSize, StdSize maxBufferedEvents) : interComm(interComm) - , clientRank_(0) , serverRank(serverRank) , bufferSize(bufferSize) , estimatedMaxEventSize(estimatedMaxEventSize) , maxEventSize(0) , current(0) , count(0) + , bufferedEvents(0) + , maxBufferedEvents(maxBufferedEvents) , pending(false) - , hasWindows(false) { - /* - if (windows[0]==MPI_WIN_NULL && windows[1]==MPI_WIN_NULL) hasWindows=false ; - else hasWindows=true ; - */ - - MPI_Alloc_mem(bufferSize+headerSize_, MPI_INFO_NULL, &bufferHeader[0]) ; - MPI_Alloc_mem(bufferSize+headerSize_, MPI_INFO_NULL, &bufferHeader[1]) ; - buffer[0] = bufferHeader[0]+headerSize_ ; - buffer[1] = bufferHeader[1]+headerSize_ ; - firstTimeLine[0]=(size_t*)bufferHeader[0] + timeLineOffset_ ; - firstTimeLine[1]=(size_t*)bufferHeader[1] + timeLineOffset_ ; - bufferCount[0]=(size_t*)bufferHeader[0] + countOffset_ ; - bufferCount[1]=(size_t*)bufferHeader[1] + countOffset_ ; - control[0]=(size_t*)bufferHeader[0] + controlOffset_ ; - control[1]=(size_t*)bufferHeader[1] + controlOffset_ ; - notify[0]=(size_t*)bufferHeader[0] + notifyOffset_ ; - notify[1]=(size_t*)bufferHeader[1] + notifyOffset_ ; - - *firstTimeLine[0]=0 ; - *firstTimeLine[1]=0 ; - *bufferCount[0]=0 ; - *bufferCount[1]=0 ; - *control[0]=0 ; - *control[1]=0 ; - *notify[0]=notifyNothing_ ; - *notify[1]=notifyNothing_ ; - winState[0]=false ; - winState[1]=false ; - - - if (hasWindows) - { - - MPI_Aint buffSize=bufferSize+headerSize_ ; - MPI_Win_attach(windows_[0], bufferHeader[0], buffSize) ; - MPI_Win_attach(windows_[1], bufferHeader[1], buffSize) ; - - MPI_Group group ; - int groupSize,groupRank ; - MPI_Win_get_group(windows_[0], &group) ; - MPI_Group_size(group, &groupSize) ; - MPI_Group_rank(group, &groupRank) ; - if (groupRank!=clientRank_) ERROR("CClientBuffer::CClientBuffer",<< " ClientRank != groupRank "<& windows) - { - windows_=windows ; - if (windows_[0]==MPI_WIN_NULL && windows_[1]==MPI_WIN_NULL) hasWindows=false ; - else hasWindows=true ; - - if (hasWindows) - { - MPI_Aint buffSize=bufferSize+headerSize_ ; - MPI_Win_attach(windows_[0], bufferHeader[0], buffSize) ; - MPI_Win_attach(windows_[1], bufferHeader[1], buffSize) ; - - MPI_Group group ; - int groupSize,groupRank ; - MPI_Win_get_group(windows_[0], &group) ; - MPI_Group_size(group, &groupSize) ; - MPI_Group_rank(group, &groupRank) ; - if (groupRank!=clientRank_) ERROR("CClientBuffer::CClientBuffer",<< " ClientRank != groupRank "< 0 ) return false ; - if (size > bufferSize) - { - resizingBufferStep_=1 ; - *firstTimeLine[current]=0 ; - newBufferSize_=size ; - return false ; - } + ERROR("bool CClientBuffer::isBufferFree(StdSize size)", + << "The requested size (" << size << " bytes) is too big to fit the buffer (" << bufferSize << " bytes), please increase the client buffer size." << endl); if (size > maxEventSize) { @@ -191,29 +57,19 @@ namespace xios if (size > maxRequestSize) maxRequestSize = size; } - - if (size > remain()) - { - if (isGrowableBuffer_) - { - resizingBufferStep_ = 1 ; - *firstTimeLine[current]=0 ; - newBufferSize_ = (count+size)*growFactor_ ; - } - return false ; - } - else return true ; + + + return (size <= remain() && bufferedEvents < maxBufferedEvents); } - CBufferOut* CClientBuffer::getBuffer(size_t timeLine, StdSize size) + CBufferOut* CClientBuffer::getBuffer(StdSize size) { if (size <= remain()) { retBuffer->realloc(buffer[current] + count, size); count += size; - if (*firstTimeLine[current]==0) *firstTimeLine[current]=timeLine ; - *bufferCount[current]=count ; + bufferedEvents++; return retBuffer; } else @@ -224,31 +80,11 @@ namespace xios } } - void CClientBuffer::infoBuffer(void) - { - - char checksum=0 ; - for(size_t i=0;i<*bufferCount[current];i++) checksum=checksum+buffer[current][i] ; - - char checksumFirst=0 ; - for(size_t i=5; i<10 && i<*bufferCount[current] ;i++) checksumFirst=checksumFirst+buffer[current][i] ; - - char checksumLast=0 ; - for(size_t i=(*bufferCount[current]<10)?0:*bufferCount[current]-10; i<*bufferCount[current] ; i++) checksumLast=checksumLast+buffer[current][i] ; - - info(45)<<"CClientBuffer::infoBuffer "<<" clientRank_ "< 0) { - double time=MPI_Wtime() ; - if (time - lastCheckedWithNothing_ > latency_) - { - lockBuffer() ; - if (*bufferCount[current] > 0) - { - MPI_Issend(buffer[current], count, MPI_CHAR, serverRank, 20, interComm, &request); - if (resizingBufferStep_==4) resizingBufferStep_=0 ; - pending = true; - *firstTimeLine[current]=0 ; - *bufferCount[current]=0 ; - - unlockBuffer() ; - - if (current == 1) current = 0; - else current = 1; - count = 0; - } - else - { - unlockBuffer() ; - lastCheckedWithNothing_ = time ; - } - } - } - else - { - if (resizingBufferStep_==1) resizeBufferNotify() ; - else if (resizingBufferStep_==2) isNotifiedChangeBufferSize() ; - else if (resizingBufferStep_==3) resizeBuffer(newBufferSize_) ; + MPI_Issend(buffer[current], count, MPI_CHAR, serverRank, 20, interComm, &request); + pending = true; + if (current == 1) current = 0; + else current = 1; + count = 0; + bufferedEvents = 0; } } return pending; } - void CClientBuffer::resizeBufferNotify(void) - { - // notify server of changing buffers size - lockBuffer() ; - int size=sizeof(int)+sizeof(size_t) ; - CBufferOut* bufOut = this->getBuffer(timelineEventNotifyChangeBufferSize, size); - bufOut->put(size); - bufOut->put(timelineEventNotifyChangeBufferSize); - resizingBufferStep_ = 2 ; - unlockBuffer() ; - } - - void CClientBuffer::resizeBuffer(size_t newSize) - { - - if (hasWindows) - { - MPI_Win_detach(windows_[0], bufferHeader[0]) ; - MPI_Win_detach(windows_[1], bufferHeader[1]) ; - } - MPI_Free_mem(bufferHeader[0]) ; - MPI_Free_mem(bufferHeader[1]) ; - - bufferSize=newSize ; - MPI_Alloc_mem(bufferSize+headerSize_, MPI_INFO_NULL, &bufferHeader[0]) ; - MPI_Alloc_mem(bufferSize+headerSize_, MPI_INFO_NULL, &bufferHeader[1]) ; - buffer[0] = bufferHeader[0]+headerSize_ ; - buffer[1] = bufferHeader[1]+headerSize_ ; - firstTimeLine[0]=(size_t*)bufferHeader[0] + timeLineOffset_; - firstTimeLine[1]=(size_t*)bufferHeader[1] + timeLineOffset_; - bufferCount[0]=(size_t*)bufferHeader[0] + countOffset_ ; - bufferCount[1]=(size_t*)bufferHeader[1] + countOffset_ ; - control[0]=(size_t*)bufferHeader[0] + controlOffset_ ; // control=0 => nothing ; control=1 => changeBufferSize - control[1]=(size_t*)bufferHeader[1] + controlOffset_ ; - notify[0]=(size_t*)bufferHeader[0] + notifyOffset_ ; - notify[1]=(size_t*)bufferHeader[1] + notifyOffset_ ; - - *firstTimeLine[0]=0 ; - *firstTimeLine[1]=0 ; - *bufferCount[0]=0 ; - *bufferCount[1]=0 ; - *control[0]=0 ; - *control[1]=0 ; - *notify[0] = notifyNothing_ ; - *notify[1] = notifyNothing_ ; - winState[0]=false ; - winState[1]=false ; - current=0 ; - - if (hasWindows) - { - - MPI_Win_attach(windows_[0], bufferHeader[0], bufferSize+headerSize_) ; - MPI_Win_attach(windows_[1], bufferHeader[1], bufferSize+headerSize_) ; - - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[0]) ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[1]) ; - - MPI_Win_unlock(clientRank_, windows_[1]) ; - MPI_Win_unlock(clientRank_, windows_[0]) ; - } - - lockBuffer() ; - - int size=sizeof(int)+2*sizeof(size_t)+2*sizeof(MPI_Aint) ; - CBufferOut* bufOut = this->getBuffer(timelineEventChangeBufferSize, size); - bufOut->put(size); - bufOut->put(timelineEventChangeBufferSize); - bufOut->put(newBufferSize_); - bufOut->put(this->getWinAddress(0)); - bufOut->put(this->getWinAddress(1)); - - resizingBufferStep_=4; - unlockBuffer() ; - info(100)<<"CClientBuffer::resizeBuffer(size_t newSize) : resizing buffer of server "<getWinAddress(0)<<" winAdress[1] "<getWinAddress(1)< 0); } - - bool CClientBuffer::isNotifiedChangeBufferSize(void) - { - - bool ret ; - lockBuffer() ; - ret=*notify[current] == notifyResizeBuffer_ ? true : false ; - if (ret || !hasWindows) - { - *notify[current] = notifyNothing_ ; - resizingBufferStep_=3; - } - unlockBuffer() ; - - return ret; - } - - bool CClientBuffer::isNotifiedFinalized(void) - { - if (!isFinalized_) - { - double time=MPI_Wtime() ; -// if (time - lastCheckedNotify_ > latency_) - { - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - lockBuffer() ; - isFinalized_=*notify[current] == notifyFinalize_ ? true : false ; - unlockBuffer() ; - lastCheckedNotify_=time ; - } - } - return isFinalized_ ; - } - } diff --git a/xios_2311_src/src/buffer_client.hpp b/xios_2311_src/src/buffer_client.hpp index 7bd74b35..c32432f4 100644 --- a/xios_2311_src/src/buffer_client.hpp +++ b/xios_2311_src/src/buffer_client.hpp @@ -1,7 +1,6 @@ #ifndef __BUFFER_CLIENT_HPP__ #define __BUFFER_CLIENT_HPP__ -#include "buffer_cs_base.hpp" #include "xios_spl.hpp" #include "buffer_out.hpp" #include "mpi.hpp" @@ -9,70 +8,40 @@ namespace xios { - class CClientBuffer : public CBufferClientServerBase + class CClientBuffer { public: static size_t maxRequestSize; - CClientBuffer(MPI_Comm intercomm, int serverRank, StdSize bufferSize, StdSize estimatedMaxEventSize); + CClientBuffer(MPI_Comm intercomm, int serverRank, StdSize bufferSize, StdSize estimatedMaxEventSize, StdSize maxBufferedEvents); ~CClientBuffer(); -// void createWindows(MPI_Comm oneSidedComm) ; - void freeWindows(void) ; - void lockBuffer(void) ; - void unlockBuffer(void) ; - + bool isBufferFree(StdSize size); - CBufferOut* getBuffer(size_t timeLine, StdSize size); - bool checkBuffer(bool send=false); + CBufferOut* getBuffer(StdSize size); + bool checkBuffer(void); bool hasPendingRequest(void); StdSize remain(void); - MPI_Aint getWinAddress(int numWindows) ; - void infoBuffer(void) ; - bool isNotifiedFinalized(void) ; - void setGrowableBuffer(double growFactor) { growFactor_=growFactor ; isGrowableBuffer_=true ;} - void fixBufferSize(size_t bufferSize) { newBufferSize_=bufferSize ; isGrowableBuffer_=false ; resizingBufferStep_=1 ;} - void fixBuffer(void) { isGrowableBuffer_=false ;} - void attachWindows(vector& windows) ; - private: - void resizeBuffer(size_t newSize) ; - void resizeBufferNotify(void) ; - bool isNotifiedChangeBufferSize(void) ; - + private: char* buffer[2]; - char* bufferHeader[2]; - size_t* firstTimeLine[2] ; - size_t* bufferCount[2] ; - size_t* control[2] ; - size_t* notify[2] ; - bool winState[2] ; + int current; - - double growFactor_=1.2 ; - bool isGrowableBuffer_=true ; - int resizingBufferStep_ = 0 ; - size_t newBufferSize_ ; StdSize count; + StdSize bufferedEvents; StdSize maxEventSize; - StdSize bufferSize; + const StdSize maxBufferedEvents; + const StdSize bufferSize; const StdSize estimatedMaxEventSize; - bool isFinalized_=false ; + const int serverRank; - const int clientRank_; bool pending; MPI_Request request; CBufferOut* retBuffer; const MPI_Comm interComm; - std::vector windows_ ; - bool hasWindows ; - - double latency_=0 ; - double lastCheckedWithNothing_=0 ; - double lastCheckedNotify_=0 ; }; } #endif diff --git a/xios_2311_src/src/buffer_cs_base.hpp b/xios_2311_src/src/buffer_cs_base.hpp deleted file mode 100755 index c99e00a4..00000000 --- a/xios_2311_src/src/buffer_cs_base.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __BUFFER_CS_BASE_HPP__ -#define __BUFFER_CS_BASE_HPP__ - -namespace xios -{ - class CBufferClientServerBase - { - protected: - - static const int headerSize_= 4*sizeof(size_t); - static const int timeLineOffset_ = 0 ; // in size_t - static const int countOffset_ = 1 ; // in size_t - static const int controlOffset_ = 2 ; // in size_t - static const int notifyOffset_ = 3 ; // in size_t - - static const int notifyNothing_ = 0 ; - static const int notifyFinalize_ = 1 ; - static const int notifyResizeBuffer_ = 2 ; - - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/buffer_decl.cpp b/xios_2311_src/src/buffer_decl.cpp index 0f6607ea..bf811b24 100644 --- a/xios_2311_src/src/buffer_decl.cpp +++ b/xios_2311_src/src/buffer_decl.cpp @@ -16,11 +16,9 @@ namespace xios macro(int) macro(short) macro(long) - macro(longlong) macro(uint) macro(ushort) macro(ulong) - macro(ulonglong) macro(float) macro(double) macro(long double) diff --git a/xios_2311_src/src/buffer_impl.hpp b/xios_2311_src/src/buffer_impl.hpp index 7179b6a4..bcaa03ca 100644 --- a/xios_2311_src/src/buffer_impl.hpp +++ b/xios_2311_src/src/buffer_impl.hpp @@ -9,11 +9,9 @@ namespace xios template <> bool CBuffer::put(const int& data) { return put_template(data) ; } template <> bool CBuffer::put(const short& data) { return put_template(data) ; } template <> bool CBuffer::put(const long& data) { return put_template(data) ; } - template <> bool CBuffer::put(const longlong& data) { return put_template(data) ; } template <> bool CBuffer::put(const uint& data) { return put_template(data) ; } template <> bool CBuffer::put(const ushort& data) { return put_template(data) ; } template <> bool CBuffer::put(const ulong& data) { return put_template(data) ; } - template <> bool CBuffer::put(const ulonglong& data) { return put_template(data) ; } template <> bool CBuffer::put(const float& data) { return put_template(data) ; } template <> bool CBuffer::put(const double& data) { return put_template(data) ; } template <> bool CBuffer::put(const long double& data) { return put_template(data) ;} @@ -22,11 +20,9 @@ namespace xios template <> bool CBuffer::put(const int* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const short* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const long* data, size_t n) { return put_template(data,n) ; } - template <> bool CBuffer::put(const longlong* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const uint* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const ushort* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const ulong* data, size_t n) { return put_template(data,n) ; } - template <> bool CBuffer::put(const ulonglong* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const float* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const double* data, size_t n) { return put_template(data,n) ; } template <> bool CBuffer::put(const long double* data, size_t n) { return put_template(data,n) ;} @@ -36,11 +32,9 @@ namespace xios template <> bool CBuffer::put_ptr(const int*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const short*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const long*& data, size_t n) { return put_ptr_template(data,n) ; } - template <> bool CBuffer::put_ptr(const longlong*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const uint*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const ushort*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const ulong*& data, size_t n) { return put_ptr_template(data,n) ; } - template <> bool CBuffer::put_ptr(const ulonglong*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const float*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const double*& data, size_t n) { return put_ptr_template(data,n) ; } template <> bool CBuffer::put_ptr(const long double*& data, size_t n) { return put_ptr_template(data,n) ;} @@ -51,11 +45,9 @@ namespace xios template <> bool CBuffer::get(int& data) { return get_template(data) ; } template <> bool CBuffer::get(short& data) { return get_template(data) ; } template <> bool CBuffer::get(long& data) { return get_template(data) ; } - template <> bool CBuffer::get(longlong& data) { return get_template(data) ; } template <> bool CBuffer::get(uint& data) { return get_template(data) ; } template <> bool CBuffer::get(ushort& data) { return get_template(data) ; } template <> bool CBuffer::get(ulong& data) { return get_template(data) ; } - template <> bool CBuffer::get(ulonglong& data) { return get_template(data) ; } template <> bool CBuffer::get(float& data) { return get_template(data) ; } template <> bool CBuffer::get(double& data) { return get_template(data) ; } template <> bool CBuffer::get(long double& data) { return get_template(data) ;} @@ -64,11 +56,9 @@ namespace xios template <> bool CBuffer::get(int* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(short* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(long* data, size_t n) { return get_template(data,n) ; } - template <> bool CBuffer::get(longlong* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(uint* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(ushort* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(ulong* data, size_t n) { return get_template(data,n) ; } - template <> bool CBuffer::get(ulonglong* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(float* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(double* data, size_t n) { return get_template(data,n) ; } template <> bool CBuffer::get(long double* data, size_t n) { return get_template(data,n) ;} @@ -77,11 +67,9 @@ namespace xios template <> bool CBuffer::get_ptr(int*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(short*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(long*& data, size_t n) { return get_ptr_template(data,n) ; } - template <> bool CBuffer::get_ptr(longlong*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(uint*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(ushort*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(ulong*& data, size_t n) { return get_ptr_template(data,n) ; } - template <> bool CBuffer::get_ptr(ulonglong*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(float*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(double*& data, size_t n) { return get_ptr_template(data,n) ; } template <> bool CBuffer::get_ptr(long double*& data, size_t n) { return get_ptr_template(data,n) ;} diff --git a/xios_2311_src/src/buffer_in_decl.cpp b/xios_2311_src/src/buffer_in_decl.cpp index 9c0fc821..d2374880 100644 --- a/xios_2311_src/src/buffer_in_decl.cpp +++ b/xios_2311_src/src/buffer_in_decl.cpp @@ -13,11 +13,9 @@ namespace xios macro(int) macro(short) macro(long) - macro(longlong) macro(uint) macro(ushort) macro(ulong) - macro(ulonglong) macro(float) macro(double) macro(long double) diff --git a/xios_2311_src/src/buffer_in_impl.hpp b/xios_2311_src/src/buffer_in_impl.hpp index d2af4ecf..ff8ec8ce 100644 --- a/xios_2311_src/src/buffer_in_impl.hpp +++ b/xios_2311_src/src/buffer_in_impl.hpp @@ -11,11 +11,9 @@ namespace xios template <> bool CBufferIn::get(int& data) { return get_template(data) ; } template <> bool CBufferIn::get(short& data) { return get_template(data) ; } template <> bool CBufferIn::get(long& data) { return get_template(data) ; } - template <> bool CBufferIn::get(longlong& data) { return get_template(data) ; } template <> bool CBufferIn::get(uint& data) { return get_template(data) ; } template <> bool CBufferIn::get(ushort& data) { return get_template(data) ; } template <> bool CBufferIn::get(ulong& data) { return get_template(data) ; } - template <> bool CBufferIn::get(ulonglong& data) { return get_template(data) ; } template <> bool CBufferIn::get(float& data) { return get_template(data) ; } template <> bool CBufferIn::get(double& data) { return get_template(data) ; } template <> bool CBufferIn::get(long double& data) { return get_template(data) ;} @@ -25,11 +23,9 @@ namespace xios template <> bool CBufferIn::get(int* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(short* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(long* data, size_t n) { return get_template(data,n) ; } - template <> bool CBufferIn::get(longlong* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(uint* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(ushort* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(ulong* data, size_t n) { return get_template(data,n) ; } - template <> bool CBufferIn::get(ulonglong* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(float* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(double* data, size_t n) { return get_template(data,n) ; } template <> bool CBufferIn::get(long double* data, size_t n) { return get_template(data,n) ;} @@ -39,11 +35,9 @@ namespace xios template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } - template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } - template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferIn::advance(size_t n) { return advance_template(n) ;} diff --git a/xios_2311_src/src/buffer_out_decl.cpp b/xios_2311_src/src/buffer_out_decl.cpp index 4fd900f3..6621dd4b 100644 --- a/xios_2311_src/src/buffer_out_decl.cpp +++ b/xios_2311_src/src/buffer_out_decl.cpp @@ -14,11 +14,9 @@ namespace xios macro(int) macro(short) macro(long) - macro(longlong) macro(uint) macro(ushort) macro(ulong) - macro(ulonglong) macro(float) macro(double) macro(long double) diff --git a/xios_2311_src/src/buffer_out_impl.hpp b/xios_2311_src/src/buffer_out_impl.hpp index 90aa6b0e..a1d3a656 100644 --- a/xios_2311_src/src/buffer_out_impl.hpp +++ b/xios_2311_src/src/buffer_out_impl.hpp @@ -10,11 +10,9 @@ namespace xios template <> bool CBufferOut::put(const int& data) { return put_template(data) ; } template <> bool CBufferOut::put(const short& data) { return put_template(data) ; } template <> bool CBufferOut::put(const long& data) { return put_template(data) ; } - template <> bool CBufferOut::put(const longlong& data) { return put_template(data) ; } template <> bool CBufferOut::put(const uint& data) { return put_template(data) ; } template <> bool CBufferOut::put(const ushort& data) { return put_template(data) ; } template <> bool CBufferOut::put(const ulong& data) { return put_template(data) ; } - template <> bool CBufferOut::put(const ulonglong& data) { return put_template(data) ; } template <> bool CBufferOut::put(const float& data) { return put_template(data) ; } template <> bool CBufferOut::put(const double& data) { return put_template(data) ; } template <> bool CBufferOut::put(const long double& data) { return put_template(data) ;} @@ -24,11 +22,9 @@ namespace xios template <> bool CBufferOut::put(const int* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const short* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const long* data, size_t n) { return put_template(data,n) ; } - template <> bool CBufferOut::put(const longlong* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const uint* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const ushort* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const ulong* data, size_t n) { return put_template(data,n) ; } - template <> bool CBufferOut::put(const ulonglong* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const float* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const double* data, size_t n) { return put_template(data,n) ; } template <> bool CBufferOut::put(const long double* data, size_t n) { return put_template(data,n) ;} @@ -39,11 +35,9 @@ namespace xios template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } - template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } - template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ; } template <> bool CBufferOut::advance(size_t n) { return advance_template(n) ;} diff --git a/xios_2311_src/src/buffer_server.cpp b/xios_2311_src/src/buffer_server.cpp index 56885720..78874fb3 100644 --- a/xios_2311_src/src/buffer_server.cpp +++ b/xios_2311_src/src/buffer_server.cpp @@ -1,34 +1,23 @@ #include "xios_spl.hpp" #include "exception.hpp" #include "buffer_server.hpp" -#include "timer.hpp" namespace xios { - CServerBuffer::CServerBuffer(vector& windows, vector& winAddress, int windowsRank, StdSize buffSize) - : hasWindows(true), windows_(windows), windowsRank_(windowsRank), winAddress_(winAddress) + CServerBuffer::CServerBuffer(StdSize buffSize) { size = 3 * buffSize; first = 0; current = 1; end = size; - used=0 ; - MPI_Alloc_mem(size, MPI_INFO_NULL, &buffer) ; - currentWindows=1 ; - if (windows[0]==MPI_WIN_NULL && windows[1]==MPI_WIN_NULL) hasWindows=false ; + buffer = new char[size]; // use MPI_ALLOC_MEM later? } CServerBuffer::~CServerBuffer() { - MPI_Free_mem(buffer) ; - } - - void CServerBuffer::updateCurrentWindows(void) - { - if (currentWindows==0) currentWindows=1 ; - else currentWindows=0 ; + delete [] buffer ; } @@ -82,11 +71,6 @@ namespace xios return ret ; } - bool CServerBuffer::isBufferEmpty(void) - { - if (used==0) return true ; - else return false; - } void* CServerBuffer::getBuffer(size_t count) { @@ -143,7 +127,6 @@ namespace xios } } - used+=count ; return ret ; } @@ -155,7 +138,6 @@ namespace xios { first=0 ; count-- ; - used-- ; end=size ; } @@ -184,146 +166,6 @@ namespace xios <<"cannot free required size in buffer") ; } } - used-=count ; } - void CServerBuffer::popBuffer(size_t count) - { - if (count==0) return ; - - if (current==0) - { - current = end ; - end=size ; - } - - - if (first<=current) - { - if (current-count >first) - { - current-=count ; - } - else - { - ERROR("void CServerBuffer::popBuffer(size_t count)", - <<"cannot pop required size in buffer") ; - } - - } - else - { - if (current-count>=0) - { - current-=count ; - } - else - { - ERROR("void CServerBuffer::freeBuffer(size_t count)", - <<"cannot pop required size in buffer") ; - } - } - used-=count ; - } - - bool CServerBuffer::getBufferFromClient(size_t timeLine, char*& buffer, size_t& count) - { - count = -1 ; - if (!hasWindows || resizingBuffer_) return false ; - double time=MPI_Wtime() ; - if (time-bufferFromClientTime_ < bufferFromClientLatency_ ) return false; - bufferFromClientTime_ = time ; - CTimer::get("getBufferFromClient").resume() ; - size_t clientTimeline ; - size_t clientCount ; - bool ok=false ; - - MPI_Group group ; - int groupSize,groupRank ; - MPI_Win_get_group(windows_[currentWindows], &group) ; - MPI_Group_size(group, &groupSize) ; - MPI_Group_rank(group, &groupRank) ; - - lockBuffer(); - CTimer::get("getBufferFromClient_locked").resume() ; -// lock is acquired - - MPI_Get(&clientTimeline, 1, MPI_LONG_LONG_INT, windowsRank_ , MPI_Aint_add(winAddress_[currentWindows],timeLineOffset_*sizeof(size_t)), 1, MPI_LONG_LONG_INT,windows_[currentWindows]) ; - MPI_Get(&clientCount, 1, MPI_LONG_LONG_INT, windowsRank_ , MPI_Aint_add(winAddress_[currentWindows],countOffset_*sizeof(size_t)), 1, MPI_LONG_LONG_INT,windows_[currentWindows]) ; - MPI_Win_flush(windowsRank_, windows_[currentWindows]) ; - - if (timeLine==clientTimeline) - { - buffer=(char*)getBuffer(clientCount) ; - count=clientCount ; - MPI_Get(buffer, clientCount, MPI_CHAR, windowsRank_, MPI_Aint_add(winAddress_[currentWindows],4*sizeof(size_t)) , clientCount, MPI_CHAR, windows_[currentWindows]) ; - clientTimeline = 0 ; - clientCount = 0 ; - MPI_Put(&clientTimeline, 1, MPI_LONG_LONG_INT, windowsRank_ , MPI_Aint_add(winAddress_[currentWindows],timeLineOffset_*sizeof(size_t)), 1, MPI_LONG_LONG_INT,windows_[currentWindows]) ; - MPI_Put(&clientCount, 1, MPI_LONG_LONG_INT, windowsRank_ , MPI_Aint_add(winAddress_[currentWindows],countOffset_*sizeof(size_t)), 1, MPI_LONG_LONG_INT,windows_[currentWindows]) ; - -// release lock - CTimer::get("getBufferFromClient_locked").suspend() ; - unlockBuffer() ; - - ok=true ; - char checksum=0 ; - for(size_t i=0;i& windows, vector& winAddress, int windowsRank, StdSize bufSize) ; + CServerBuffer(StdSize bufSize) ; ~CServerBuffer() ; bool isBufferFree(size_t count) ; - bool isResizing(void) { return resizingBuffer_ ;} void* getBuffer(size_t count) ; void freeBuffer(size_t count) ; - void popBuffer(size_t count) ; - void createWindows(MPI_Comm oneSidedComm) ; - bool getBufferFromClient(size_t timeLine, char* & buffer, size_t& count) ; - bool isBufferEmpty(void) ; - void updateCurrentWindows(void) ; - void lockBuffer(void) ; - void unlockBuffer(void) ; - void notifyClientFinalize(void) ; - void notifyBufferResizing(void) ; - size_t getUsed(void) { return used ;} + private: char* buffer; size_t first; // first occupied element size_t current; // first free element size_t end; size_t size; - size_t used ; // count of element occupied - std::vector windows_ ; - std::vector winAddress_ ; - bool resizingBuffer_ = false ; - int currentWindows ; - bool hasWindows ; - int windowsRank_ ; - double bufferFromClientLatency_=0e-1 ; - double bufferFromClientTime_ = 0; - }; } diff --git a/xios_2311_src/src/calendar_util.cpp b/xios_2311_src/src/calendar_util.cpp index f0ae683c..4eef998b 100644 --- a/xios_2311_src/src/calendar_util.cpp +++ b/xios_2311_src/src/calendar_util.cpp @@ -44,6 +44,77 @@ namespace xios return dur; } + bool operator<(const CDuration& dur1, const CDuration& dur2) + { + if (dur1.year < dur2.year) + return true; + else if (dur1.year == dur2.year) + { + if (dur1.month < dur2.month) + return true; + else if (dur1.month == dur2.month) + { + if (dur1.day < dur2.day) + return true; + else if (dur1.day == dur2.day) + { + if (dur1.hour < dur2.hour) + return true; + else if (dur1.hour == dur2.hour) + { + if (dur1.minute < dur2.minute) + return true; + else if (dur1.minute == dur2.minute) + { + if (dur1.second < dur2.second) + return true; + else if (dur1.second == dur2.second) + return (dur1.timestep < dur2.timestep); + } + } + } + } + } + return false; + } + + + bool operator>(const CDuration& dur1, const CDuration& dur2) + { + if (dur1.year > dur2.year) + return true; + else if (dur1.year == dur2.year) + { + if (dur1.month > dur2.month) + return true; + else if (dur1.month == dur2.month) + { + if (dur1.day > dur2.day) + return true; + else if (dur1.day == dur2.day) + { + if (dur1.hour > dur2.hour) + return true; + else if (dur1.hour == dur2.hour) + { + if (dur1.minute > dur2.minute) + return true; + else if (dur1.minute == dur2.minute) + { + if (dur1.second > dur2.second) + return true; + else if (dur1.second == dur2.second) + return (dur1.timestep > dur2.timestep); + } + } + } + } + } + return false; + } + + + //----------------------------------------------------------------- CDate operator+(const CDate& dt, const CDuration& dr) diff --git a/xios_2311_src/src/calendar_util.hpp b/xios_2311_src/src/calendar_util.hpp index 02908685..fdd80367 100644 --- a/xios_2311_src/src/calendar_util.hpp +++ b/xios_2311_src/src/calendar_util.hpp @@ -16,6 +16,9 @@ namespace xios CDuration operator*(const CDuration& ddr, const double& scal); CDuration operator-(const CDuration& ddr); + bool operator>(const CDuration& ddr, const CDuration& dr); + bool operator<(const CDuration& ddr, const CDuration& dr); + CDate operator+(const CDate& dt, const CDuration& dr); // Non testée. CDate operator-(const CDate& dt, const CDuration& dr); diff --git a/xios_2311_src/src/client.cpp b/xios_2311_src/src/client.cpp index cce5e345..f49d4fa3 100644 --- a/xios_2311_src/src/client.cpp +++ b/xios_2311_src/src/client.cpp @@ -11,30 +11,18 @@ #include "timer.hpp" #include "buffer_client.hpp" #include "string_tools.hpp" -#include "ressources_manager.hpp" -#include "services_manager.hpp" -#include -#include -#include "workflow_graph.hpp" -#include "release_static_allocation.hpp" namespace xios { - const double serverPublishDefaultTimeout=10; - MPI_Comm CClient::intraComm ; MPI_Comm CClient::interComm ; - MPI_Comm CClient::clientsComm_ ; - std::list CClient::contextInterComms; int CClient::serverLeader ; bool CClient::is_MPI_Initialized ; int CClient::rank_ = INVALID_RANK; StdOFStream CClient::m_infoStream; StdOFStream CClient::m_errorStream; - CPoolRessource* CClient::poolRessource_=nullptr ; - MPI_Comm& CClient::getInterComm(void) { return (interComm); } ///--------------------------------------------------------------- @@ -48,364 +36,128 @@ namespace xios void CClient::initialize(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm) { - - MPI_Comm clientComm ; - // initialize MPI if not initialized int initialized ; MPI_Initialized(&initialized) ; if (initialized) is_MPI_Initialized=true ; else is_MPI_Initialized=false ; - - MPI_Comm globalComm=CXios::getGlobalComm() ; + int rank ; - ///////////////////////////////////////// - ///////////// PART 1 //////////////////// - ///////////////////////////////////////// - - - // localComm isn't given - if (localComm == MPI_COMM_NULL) +// don't use OASIS + if (!CXios::usingOasis) { - - // don't use OASIS - if (!CXios::usingOasis) +// localComm isn't given + if (localComm == MPI_COMM_NULL) { - if (!is_MPI_Initialized) { MPI_Init(NULL, NULL); } CTimer::get("XIOS").resume() ; - CTimer::get("XIOS init/finalize",false).resume() ; - - // split the global communicator - // get hash from all model to attribute a unique color (int) and then split to get client communicator - // every mpi process of globalComm (MPI_COMM_WORLD) must participate - - int commRank, commSize ; - MPI_Comm_rank(globalComm,&commRank) ; - MPI_Comm_size(globalComm,&commSize) ; - - std::hash hashString ; - size_t hashClient=hashString(codeId) ; - - size_t* hashAll = new size_t[commSize] ; - MPI_Allgather(&hashClient,1,MPI_SIZE_T,hashAll,1,MPI_SIZE_T,globalComm) ; - - int color=0 ; - map listHash ; - for(int i=0 ; i<=commSize ; i++) - if (listHash.count(hashAll[i])==0) - { - listHash[hashAll[i]]=color ; - color=color+1 ; - } - color=listHash[hashClient] ; - delete[] hashAll ; - - MPI_Comm_split(globalComm, color, commRank, &clientComm) ; - } - else // using oasis to split communicator - { - if (!is_MPI_Initialized) oasis_init(codeId) ; - oasis_get_localcomm(clientComm) ; - } - } - else // localComm is given - { - MPI_Comm_dup(localComm,&clientComm) ; - } - - - ///////////////////////////////////////// - ///////////// PART 2 //////////////////// - ///////////////////////////////////////// - + CTimer::get("XIOS init/finalize").resume() ; + boost::hash hashString ; - // Create the XIOS communicator for every process which is related - // to XIOS, as well on client side as on server side - - MPI_Comm xiosGlobalComm ; - string strIds=CXios::getin("clients_code_id","") ; - vector clientsCodeId=splitRegex(strIds,"\\s*,\\s*") ; - if (strIds.empty()) - { - // no code Ids given, suppose XIOS initialisation is global - int commRank, commGlobalRank, serverLeader, clientLeader,serverRemoteLeader,clientRemoteLeader ; - MPI_Comm splitComm,interComm ; - MPI_Comm_rank(globalComm,&commGlobalRank) ; - MPI_Comm_split(globalComm, 0, commGlobalRank, &splitComm) ; - int splitCommSize, globalCommSize ; - - MPI_Comm_size(splitComm,&splitCommSize) ; - MPI_Comm_size(globalComm,&globalCommSize) ; - if (splitCommSize==globalCommSize) // no server - { - MPI_Comm_dup(globalComm,&xiosGlobalComm) ; - CXios::setXiosComm(xiosGlobalComm) ; - } - else - { - MPI_Comm_rank(splitComm,&commRank) ; - if (commRank==0) clientLeader=commGlobalRank ; - else clientLeader=0 ; - serverLeader=0 ; - MPI_Allreduce(&clientLeader,&clientRemoteLeader,1,MPI_INT,MPI_SUM,globalComm) ; - MPI_Allreduce(&serverLeader,&serverRemoteLeader,1,MPI_INT,MPI_SUM,globalComm) ; - MPI_Intercomm_create(splitComm, 0, globalComm, serverRemoteLeader,1341,&interComm) ; - MPI_Intercomm_merge(interComm,true,&xiosGlobalComm) ; - CXios::setXiosComm(xiosGlobalComm) ; - } - } - else - { + unsigned long hashClient=hashString(codeId) ; + unsigned long hashServer=hashString(CXios::xiosCodeId) ; + unsigned long* hashAll ; + int size ; + int myColor ; + int i,c ; + MPI_Comm newComm ; - xiosGlobalCommByFileExchange(clientComm, codeId) ; - - } + MPI_Comm_size(CXios::globalComm,&size) ; + MPI_Comm_rank(CXios::globalComm,&rank_); - int commRank ; - MPI_Comm_rank(CXios::getXiosComm(), &commRank) ; - MPI_Comm_split(CXios::getXiosComm(),false,commRank, &clientsComm_) ; - - // is using server or not ? - int xiosCommSize, clientsCommSize ; - MPI_Comm_size(CXios::getXiosComm(), &xiosCommSize) ; - MPI_Comm_size(clientsComm_, &clientsCommSize) ; - if (xiosCommSize==clientsCommSize) CXios::setUsingServer() ; - else CXios::setNotUsingServer() ; - - ///////////////////////////////////////// - ///////////// PART 3 //////////////////// - ///////////////////////////////////////// - - CXios::launchDaemonsManager(false) ; - poolRessource_ = new CPoolRessource(clientComm, codeId) ; + hashAll=new unsigned long[size] ; - ///////////////////////////////////////// - ///////////// PART 4 //////////////////// - ///////////////////////////////////////// - - returnComm = clientComm ; - } + MPI_Allgather(&hashClient,1,MPI_LONG,hashAll,1,MPI_LONG,CXios::globalComm) ; + map colors ; + map leaders ; - void CClient::xiosGlobalCommByFileExchange(MPI_Comm clientComm, const string& codeId) - { - - MPI_Comm globalComm=CXios::getGlobalComm() ; - MPI_Comm xiosGlobalComm ; - - string strIds=CXios::getin("clients_code_id","") ; - vector clientsCodeId=splitRegex(strIds,"\\s*,\\s*") ; - - int commRank, globalRank, clientRank, serverRank ; - MPI_Comm_rank(clientComm, &commRank) ; - MPI_Comm_rank(globalComm, &globalRank) ; - string clientFileName("__xios_publisher::"+codeId+"__to_remove__") ; - - int error ; - - if (commRank==0) // if root process publish name - { - std::ofstream ofs (clientFileName, std::ofstream::out); - ofs<("server_puplish_timeout",serverPublishDefaultTimeout) ; - double time ; - - do - { - CTimer::get("server_publish_timeout").resume() ; - ifs.clear() ; - ifs.open(fileName, std::ifstream::in) ; - CTimer::get("server_publish_timeout").suspend() ; - } while (ifs.fail() && CTimer::get("server_publish_timeout").getCumulatedTime()=timeout || ifs.fail()) - { - ifs.clear() ; - ifs.close() ; - ifs.clear() ; - error=true ; - } - else - { - ifs>>serverRank ; - ifs.close() ; - error=false ; - } + for(i=0,c=0;i clientsRank(clientsCodeId.size()) ; - - if (commRank==0) - { - for(int i=0;i>clientsRank[i] ; - ifs.close() ; + CXios::setUsingServer(); + break; + } } - } - - int client ; - MPI_Comm intraComm ; - MPI_Comm_dup(clientComm,&intraComm) ; - MPI_Comm interComm ; - - int pos=0 ; - for(int i=0 ; codeId!=clientsCodeId[i]; i++) pos=pos+1 ; - - bool high=true ; - for(int i=pos+1 ; icreateService(contextComm, id, 0, CServicesManager::CLIENT, 1) ; - getPoolRessource()->createService(contextComm, id+"_"+CXios::defaultServerId, 0, CServicesManager::IO_SERVER, 1) ; - - if (commRank==0) while (!CXios::getServicesManager()->hasService(getPoolRessource()->getId(), id, 0)) { CXios::getDaemonsManager()->eventLoop();} - - if (commRank==0) CXios::getContextsManager()->createServerContext(getPoolRessource()->getId(), id, 0, id) ; - int type=CServicesManager::CLIENT ; - string name = CXios::getContextsManager()->getServerContextName(getPoolRessource()->getId(), id, 0, type, id) ; - double time ; - double lastTime=0 ; - double latency=0 ; - bool out=false ; - while (!out) + CContext::setCurrent(id) ; + CContext* context=CContext::create(id); + StdString idServer(id); + idServer += "_server"; + + if (CXios::isServer && !context->hasServer) + // Attached mode { - time=MPI_Wtime() ; - if (time-lastTime > latency) - { - out=CXios::getContextsManager()->hasContext(name, contextComm); - lastTime=time ; - } - if (!out) CXios::getDaemonsManager()->eventLoop() ; + MPI_Comm contextInterComm ; + MPI_Comm_dup(contextComm,&contextInterComm) ; + CContext* contextServer = CContext::create(idServer); + + // Firstly, initialize context on client side + context->initClient(contextComm,contextInterComm, contextServer); + + // Secondly, initialize context on server side + contextServer->initServer(contextComm,contextInterComm, context); + + // Finally, we should return current context to context client + CContext::setCurrent(id); + + contextInterComms.push_back(contextInterComm); } + else + { + int size,rank,globalRank ; + size_t message_size ; + int leaderRank ; + MPI_Comm contextInterComm ; - } + MPI_Comm_size(contextComm,&size) ; + MPI_Comm_rank(contextComm,&rank) ; + MPI_Comm_rank(CXios::globalComm,&globalRank) ; + if (rank!=0) globalRank=0 ; + + CMessage msg ; + msg<initClient(contextComm,contextInterComm) ; + + contextInterComms.push_back(contextInterComm); + delete [] buff ; + + } + } /*! * \fn void CClient::callOasisEnddef(void) @@ -477,21 +259,32 @@ namespace xios } } + void CClient::finalize(void) { - - MPI_Barrier(clientsComm_) ; - int commRank ; - MPI_Comm_rank(clientsComm_, &commRank) ; - if (commRank==0) CXios::getRessourcesManager()->finalize() ; - - CTimer::get("XIOS init/finalize",false).suspend() ; + int rank ; + int msg=0 ; + + MPI_Comm_rank(intraComm,&rank) ; + + if (!CXios::isServer) + { + MPI_Comm_rank(intraComm,&rank) ; + if (rank==0) + { + MPI_Send(&msg,1,MPI_INT,0,0,interComm) ; + } + } + + + /* MPI_Comm_free(&interComm); */ // WARNING remove freeing communicator !! --> deadlock raised, to be checked + for (std::list::iterator it = contextInterComms.begin(); it != contextInterComms.end(); it++) + /* MPI_Comm_free(&(*it)) */ ; // WARNING remove freeing communicator !! --> deadlock raised, to be checked + MPI_Comm_free(&intraComm); + + CTimer::get("XIOS init/finalize").suspend() ; CTimer::get("XIOS").suspend() ; - CXios::finalizeDaemonsManager() ; - finalizePoolRessource() ; - CContext::removeAllContexts() ; // free memory for related context - CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources if (!is_MPI_Initialized) { if (CXios::usingOasis) oasis_finalize(); @@ -508,16 +301,7 @@ namespace xios report(0)<< " Memory report : Minimum buffer size required : " << CClientBuffer::maxRequestSize << " bytes" << endl ; report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<open(fileNameClient.str().c_str(), std::ios::out); if (!fb->is_open()) diff --git a/xios_2311_src/src/client.hpp b/xios_2311_src/src/client.hpp index d753005a..f830d56a 100644 --- a/xios_2311_src/src/client.hpp +++ b/xios_2311_src/src/client.hpp @@ -6,24 +6,19 @@ namespace xios { - class CPoolRessource ; class CClient { public: static void initialize(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm); - static void xiosGlobalCommByFileExchange(MPI_Comm clientComm, const string& codeId) ; - static void xiosGlobalCommByPublishing(MPI_Comm clientComm, const string& codeId) ; static void finalize(void); static void registerContext(const string& id, MPI_Comm contextComm); - static void registerContext_old(const string& id, MPI_Comm contextComm); - static void callOasisEnddef(void) ; - + static void callOasisEnddef(void) ; + static MPI_Comm intraComm; static MPI_Comm interComm; static std::list contextInterComms; static int serverLeader; static bool is_MPI_Initialized ; - static MPI_Comm clientsComm_ ; static MPI_Comm& getInterComm(); @@ -43,16 +38,13 @@ namespace xios static void openErrorStream(); //! Close the error log file if it opens static void closeErrorStream(); - static CPoolRessource* getPoolRessource(void) { return poolRessource_ ; } - static void finalizePoolRessource() ; - static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); protected: static int rank_; //!< Rank in model intraComm static StdOFStream m_infoStream; static StdOFStream m_errorStream; - static CPoolRessource* poolRessource_ ; + static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); }; } diff --git a/xios_2311_src/src/config/axis_attribute.conf b/xios_2311_src/src/config/axis_attribute.conf index d27fa145..96dff81a 100644 --- a/xios_2311_src/src/config/axis_attribute.conf +++ b/xios_2311_src/src/config/axis_attribute.conf @@ -5,6 +5,7 @@ DECLARE_ATTRIBUTE(StdString, long_name) DECLARE_ATTRIBUTE(StdString, comment) DECLARE_ATTRIBUTE(StdString, unit) +DECLARE_ATTRIBUTE(double, convert_from_factor) DECLARE_ATTRIBUTE(StdString, formula) DECLARE_ATTRIBUTE(StdString, formula_term) DECLARE_ATTRIBUTE(StdString, formula_bounds) @@ -21,22 +22,22 @@ DECLARE_ATTRIBUTE(StdString, dim_name) DECLARE_ATTRIBUTE(int, n_distributed_partition) /* LOCAL */ -DECLARE_ARRAY(double , 1 , value, false) -DECLARE_ATTRIBUTE(StdString, axis_ref, false) +DECLARE_ARRAY(double , 1 , value) +DECLARE_ATTRIBUTE(StdString, axis_ref) -DECLARE_ARRAY(int ,1 , index, false) +DECLARE_ARRAY(int ,1 , index) /* LOCAL */ -DECLARE_ATTRIBUTE(int, data_n, false) -DECLARE_ATTRIBUTE(int, data_begin, false) -DECLARE_ARRAY(int , 1 , data_index, false) +DECLARE_ATTRIBUTE(int, data_n) +DECLARE_ATTRIBUTE(int, data_begin) +DECLARE_ARRAY(int , 1 , data_index) /*LOCAL */ -DECLARE_ATTRIBUTE(int, begin, false) -DECLARE_ATTRIBUTE(int, n, false) +DECLARE_ATTRIBUTE(int, begin) +DECLARE_ATTRIBUTE(int, n) /* LOCAL */ -DECLARE_ARRAY(bool, 1 , mask, false) -DECLARE_ARRAY(double, 2 , bounds, false) +DECLARE_ARRAY(bool, 1 , mask) +DECLARE_ARRAY(double, 2 , bounds) DECLARE_ATTRIBUTE(int, prec) -DECLARE_ARRAY(StdString ,1 , label, false) +DECLARE_ARRAY(StdString ,1 , label) diff --git a/xios_2311_src/src/config/context_attribute.conf b/xios_2311_src/src/config/context_attribute.conf index 9bcf7262..d1a271d6 100644 --- a/xios_2311_src/src/config/context_attribute.conf +++ b/xios_2311_src/src/config/context_attribute.conf @@ -1,2 +1 @@ DECLARE_ATTRIBUTE(StdString, output_dir) -DECLARE_ATTRIBUTE(bool, attached_mode) \ No newline at end of file diff --git a/xios_2311_src/src/config/coupler_in_attribute.conf b/xios_2311_src/src/config/coupler_in_attribute.conf deleted file mode 100755 index 80298236..00000000 --- a/xios_2311_src/src/config/coupler_in_attribute.conf +++ /dev/null @@ -1,2 +0,0 @@ -DECLARE_ATTRIBUTE(StdString, context) -DECLARE_ATTRIBUTE(bool, enabled) diff --git a/xios_2311_src/src/config/coupler_out_attribute.conf b/xios_2311_src/src/config/coupler_out_attribute.conf deleted file mode 100755 index 2d3c0206..00000000 --- a/xios_2311_src/src/config/coupler_out_attribute.conf +++ /dev/null @@ -1,2 +0,0 @@ -DECLARE_ATTRIBUTE(StdString, context) -DECLARE_ATTRIBUTE(bool, enabled) \ No newline at end of file diff --git a/xios_2311_src/src/config/domain_attribute.conf b/xios_2311_src/src/config/domain_attribute.conf index cb37ae82..23c34b43 100644 --- a/xios_2311_src/src/config/domain_attribute.conf +++ b/xios_2311_src/src/config/domain_attribute.conf @@ -56,9 +56,21 @@ DECLARE_ARRAY(double, 2, bounds_lat_1d, false) DECLARE_ARRAY(double, 3, bounds_lon_2d, false) DECLARE_ARRAY(double, 3, bounds_lat_2d, false) -DECLARE_ARRAY(double, 2, area, false) +DECLARE_ARRAY(double, 2, area) DECLARE_ATTRIBUTE(double, radius) DECLARE_ENUM4(type,rectilinear,curvilinear,unstructured, gaussian) -DECLARE_ATTRIBUTE(StdString, domain_ref, false) +DECLARE_ATTRIBUTE(StdString, domain_ref) DECLARE_ATTRIBUTE(int, prec) + +/* LOCAL */ +DECLARE_ATTRIBUTE(int, ntiles, false) +DECLARE_ATTRIBUTE(bool, tile_only, false) +DECLARE_ARRAY(int, 1, tile_ni, false) +DECLARE_ARRAY(int, 1, tile_nj, false) +DECLARE_ARRAY(int, 1, tile_ibegin, false) +DECLARE_ARRAY(int, 1, tile_jbegin, false) +DECLARE_ARRAY(int, 1, tile_data_ibegin, false) +DECLARE_ARRAY(int, 1, tile_data_jbegin, false) +DECLARE_ARRAY(int, 1, tile_data_ni, false) +DECLARE_ARRAY(int, 1, tile_data_nj, false) diff --git a/xios_2311_src/src/config/field_attribute.conf b/xios_2311_src/src/config/field_attribute.conf index 094e4be1..144ff904 100644 --- a/xios_2311_src/src/config/field_attribute.conf +++ b/xios_2311_src/src/config/field_attribute.conf @@ -12,7 +12,7 @@ DECLARE_ATTRIBUTE(CDuration, freq_op) DECLARE_ATTRIBUTE(CDuration, freq_offset) DECLARE_ATTRIBUTE(int, level) DECLARE_ATTRIBUTE(int, prec) -DECLARE_ATTRIBUTE(StdString, expr, false) +DECLARE_ATTRIBUTE(StdString, expr) DECLARE_ATTRIBUTE(bool, enabled) DECLARE_ATTRIBUTE(bool, read_access) @@ -23,7 +23,7 @@ DECLARE_ATTRIBUTE(StdString, domain_ref, false) DECLARE_ATTRIBUTE(StdString, axis_ref, false) DECLARE_ATTRIBUTE(StdString, scalar_ref, false) DECLARE_ATTRIBUTE(StdString, grid_ref) -DECLARE_ATTRIBUTE(StdString, field_ref, false) +DECLARE_ATTRIBUTE(StdString, field_ref) DECLARE_ATTRIBUTE(StdString, grid_path) DECLARE_ATTRIBUTE(double, default_value) @@ -40,4 +40,7 @@ DECLARE_ATTRIBUTE(CDuration, ts_split_freq) DECLARE_ATTRIBUTE(StdString, cell_methods) DECLARE_ENUM4(cell_methods_mode, overwrite, prefix, suffix, none) + DECLARE_ATTRIBUTE(bool, build_workflow_graph) +DECLARE_ATTRIBUTE(CDuration, build_workflow_graph_start) +DECLARE_ATTRIBUTE(CDuration, build_workflow_graph_end) diff --git a/xios_2311_src/src/config/interpolate_axis_attribute.conf b/xios_2311_src/src/config/interpolate_axis_attribute.conf index f5f88822..e2d8e311 100644 --- a/xios_2311_src/src/config/interpolate_axis_attribute.conf +++ b/xios_2311_src/src/config/interpolate_axis_attribute.conf @@ -4,3 +4,5 @@ DECLARE_ATTRIBUTE(int, order) DECLARE_ATTRIBUTE(StdString, coordinate) DECLARE_ATTRIBUTE(StdString, coordinate_src) DECLARE_ATTRIBUTE(StdString, coordinate_dst) +DECLARE_ATTRIBUTE(bool, extrapolate) + diff --git a/xios_2311_src/src/config/node_type.conf b/xios_2311_src/src/config/node_type.conf index 8e478710..b227c879 100755 --- a/xios_2311_src/src/config/node_type.conf +++ b/xios_2311_src/src/config/node_type.conf @@ -14,15 +14,6 @@ DECLARE_NODE(File , file ) #endif //__XIOS_CFile__ -#ifdef __XIOS_CCouplerIn__ - DECLARE_NODE(CouplerIn , coupler_in ) -#endif //__XIOS_CCouplerIn__ - -#ifdef __XIOS_CCouplerOut__ - DECLARE_NODE(CouplerOut , coupler_out ) -#endif //__XIOS_CCouplerOut__ - - #ifdef __XIOS_CGrid__ DECLARE_NODE(Grid , grid ) #endif //__XIOS_CGrid__ diff --git a/xios_2311_src/src/config/reduce_axis_to_scalar_attribute.conf b/xios_2311_src/src/config/reduce_axis_to_scalar_attribute.conf index c5cdb465..4c5c8ac3 100644 --- a/xios_2311_src/src/config/reduce_axis_to_scalar_attribute.conf +++ b/xios_2311_src/src/config/reduce_axis_to_scalar_attribute.conf @@ -1,5 +1,3 @@ DECLARE_ENUM4(operation, min, max, sum, average) -DECLARE_ATTRIBUTE(bool, local) - diff --git a/xios_2311_src/src/config/scalar_attribute.conf b/xios_2311_src/src/config/scalar_attribute.conf index 9ae3c9fd..2ad7c1af 100644 --- a/xios_2311_src/src/config/scalar_attribute.conf +++ b/xios_2311_src/src/config/scalar_attribute.conf @@ -7,14 +7,11 @@ DECLARE_ATTRIBUTE(StdString, comment) DECLARE_ATTRIBUTE(StdString, unit) /* LOCAL and GLOBAL*/ -DECLARE_ATTRIBUTE(bool, mask, false) -DECLARE_ATTRIBUTE(double, value, false) -DECLARE_ATTRIBUTE(int, n, false) +DECLARE_ATTRIBUTE(double, value) DECLARE_ATTRIBUTE(StdString, bounds_name) DECLARE_ARRAY(double, 1 , bounds) - -DECLARE_ATTRIBUTE(StdString, scalar_ref, false) +DECLARE_ATTRIBUTE(StdString, scalar_ref) DECLARE_ATTRIBUTE(int, prec) DECLARE_ENUM4(axis_type, X, Y, Z, T) diff --git a/xios_2311_src/src/context_client.cpp b/xios_2311_src/src/context_client.cpp index 92607513..3655d907 100644 --- a/xios_2311_src/src/context_client.cpp +++ b/xios_2311_src/src/context_client.cpp @@ -11,10 +11,6 @@ #include "timer.hpp" #include "cxios.hpp" #include "server.hpp" -#include "services.hpp" -#include -#include -#include namespace xios { @@ -25,10 +21,9 @@ namespace xios \cxtSer [in] cxtSer Pointer to context of server side. (It is only used in case of attached mode). */ CContextClient::CContextClient(CContext* parent, MPI_Comm intraComm_, MPI_Comm interComm_, CContext* cxtSer) - : mapBufferSize_(), parentServer(cxtSer), maxBufferedEvents(4), associatedServer_(nullptr) + : mapBufferSize_(), parentServer(cxtSer), maxBufferedEvents(4) { - - context_ = parent; + context = parent; intraComm = intraComm_; interComm = interComm_; MPI_Comm_rank(intraComm, &clientRank); @@ -36,30 +31,12 @@ namespace xios int flag; MPI_Comm_test_inter(interComm, &flag); - if (flag) isAttached_=false ; - else isAttached_=true ; - - pureOneSided=CXios::getin("pure_one_sided",false); // pure one sided communication (for test) - if (isAttachedModeEnabled()) pureOneSided=false ; // no one sided in attach mode - - - if (flag) MPI_Comm_remote_size(interComm, &serverSize); else MPI_Comm_size(interComm, &serverSize); computeLeader(clientRank, clientSize, serverSize, ranksServerLeader, ranksServerNotLeader); - if (flag) MPI_Intercomm_merge(interComm_,false, &interCommMerged_) ; - - MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf_) ; // for windows - - auto time=chrono::system_clock::now().time_since_epoch().count() ; - std::default_random_engine rd(time); // not reproducible from a run to another - std::uniform_int_distribution dist; - hashId_=dist(rd) ; - MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,intraComm) ; // Bcast to all server of the context - - timeLine = 1; + timeLine = 0; } void CContextClient::computeLeader(int clientRank, int clientSize, int serverSize, @@ -117,101 +94,99 @@ namespace xios void CContextClient::sendEvent(CEventClient& event) { list ranks = event.getRanks(); - -// ostringstream str ; -// for(auto& rank : ranks) str<getId()<<" for ranks : "<getId()< servers(serverSize,0) ; - auto ranks=event.getRanks() ; - for(auto& rank : ranks) servers[rank]=1 ; - MPI_Allreduce(MPI_IN_PLACE, servers.data(), serverSize,MPI_INT,MPI_SUM,intraComm) ; - ostringstream osstr ; - for(int i=0;i sizes = event.getSizes(); - // We force the getBuffers call to be non-blocking on classical servers + // We force the getBuffers call to be non-blocking on classical servers list buffList; - getBuffers(timeLine, ranks, sizes, buffList) ; + bool couldBuffer = getBuffers(ranks, sizes, buffList, (!CXios::isClient && (CServer::serverLevel == 0) )); +// bool couldBuffer = getBuffers(ranks, sizes, buffList, CXios::isServer ); - event.send(timeLine, sizes, buffList); - - //for (auto itRank = ranks.begin(); itRank != ranks.end(); itRank++) buffers[*itRank]->infoBuffer() ; + if (couldBuffer) + { + event.send(timeLine, sizes, buffList); + info(100)<<"Event "<getId()<<" sent"<globalEventLoop() ; - - CXios::getDaemonsManager()->scheduleContext(hashId_) ; - while (CXios::getDaemonsManager()->isScheduledContext(hashId_)) context_->globalEventLoop() ; + checkBuffers(ranks); + + if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode + { + waitEvent(ranks); + CContext::setCurrent(context->getId()); + } + } + else + { + tmpBufferedEvent.ranks = ranks; + tmpBufferedEvent.sizes = sizes; + + for (list::const_iterator it = sizes.begin(); it != sizes.end(); it++) + tmpBufferedEvent.buffers.push_back(new CBufferOut(*it)); + info(100)<<"DEBUG : temporaly event created : timeline "<getId()<<" sent"<& ranks) + * Send the temporarily buffered event (if any). + * + * \return true if a temporarily buffered event could be sent, false otherwise + */ + bool CContextClient::sendTemporarilyBufferedEvent() { - while (checkBuffers(ranks)) + bool couldSendTmpBufferedEvent = false; + + if (hasTemporarilyBufferedEvent()) { - context_->eventLoop() ; - } + list buffList; + if (getBuffers(tmpBufferedEvent.ranks, tmpBufferedEvent.sizes, buffList, true)) // Non-blocking call + { + list::iterator it, itBuffer; - MPI_Request req ; - MPI_Status status ; + for (it = tmpBufferedEvent.buffers.begin(), itBuffer = buffList.begin(); it != tmpBufferedEvent.buffers.end(); it++, itBuffer++) + (*itBuffer)->put((char*)(*it)->start(), (*it)->count()); - MPI_Ibarrier(intraComm,&req) ; - int flag=false ; + info(100)<<"DEBUG : temporaly event sent "<eventLoop() ; - MPI_Test(&req,&flag,&status) ; - } while (!flag) ; + tmpBufferedEvent.clear(); + couldSendTmpBufferedEvent = true; + } + } + return couldSendTmpBufferedEvent; } - - void CContextClient::waitEvent_old(list& ranks) + /*! + If client is also server (attached mode), after sending event, it should process right away + the incoming event. + \param [in] ranks list rank of server connected this client + */ + void CContextClient::waitEvent(list& ranks) { parentServer->server->setPendingEvent(); while (checkBuffers(ranks)) @@ -230,15 +205,13 @@ namespace xios * Get buffers for each connection to the servers. This function blocks until there is enough room in the buffers unless * it is explicitly requested to be non-blocking. * - * - * \param [in] timeLine time line of the event which will be sent to servers * \param [in] serverList list of rank of connected server * \param [in] sizeList size of message corresponding to each connection * \param [out] retBuffers list of buffers that can be used to store an event * \param [in] nonBlocking whether this function should be non-blocking * \return whether the already allocated buffers could be used */ - bool CContextClient::getBuffers(const size_t timeLine, const list& serverList, const list& sizeList, list& retBuffers, + bool CContextClient::getBuffers(const list& serverList, const list& sizeList, list& retBuffers, bool nonBlocking /*= false*/) { list::const_iterator itServer, itSize; @@ -258,45 +231,41 @@ namespace xios bufferList.push_back(it->second); } - double lastTimeBuffersNotFree=0. ; - double time ; - bool doUnlockBuffers ; CTimer::get("Blocking time").resume(); do { areBuffersFree = true; - doUnlockBuffers=false ; - time=MPI_Wtime() ; - if (time-lastTimeBuffersNotFree > latency_) - { - for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) - { - areBuffersFree &= (*itBuffer)->isBufferFree(*itSize); - } - if (!areBuffersFree) - { - lastTimeBuffersNotFree = time ; - doUnlockBuffers=true ; - } - } - else areBuffersFree = false ; + for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) + areBuffersFree &= (*itBuffer)->isBufferFree(*itSize); if (!areBuffersFree) { - if (doUnlockBuffers) for (itBuffer = bufferList.begin(); itBuffer != bufferList.end(); itBuffer++) (*itBuffer)->unlockBuffer(); checkBuffers(); + if (CServer::serverLevel == 0) + context->server->listen(); - context_->globalEventLoop() ; - } + else if (CServer::serverLevel == 1) + { + context->server->listen(); + for (int i = 0; i < context->serverPrimServer.size(); ++i) + context->serverPrimServer[i]->listen(); + CServer::contextEventLoop(false) ; // avoid dead-lock at finalize... + } + else if (CServer::serverLevel == 2) + context->server->listen(); + + } } while (!areBuffersFree && !nonBlocking); + CTimer::get("Blocking time").suspend(); if (areBuffersFree) { for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) - retBuffers.push_back((*itBuffer)->getBuffer(timeLine, *itSize)); + retBuffers.push_back((*itBuffer)->getBuffer(*itSize)); } + return areBuffersFree; } @@ -312,50 +281,11 @@ namespace xios mapBufferSize_[rank] = CXios::minBufferSize; maxEventSizes[rank] = CXios::minBufferSize; } - - CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, rank, mapBufferSize_[rank], maxEventSizes[rank]); - if (isGrowableBuffer_) buffer->setGrowableBuffer(1.2) ; - else buffer->fixBuffer() ; + CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, rank, mapBufferSize_[rank], maxEventSizes[rank], maxBufferedEvents); // Notify the server - CBufferOut* bufOut = buffer->getBuffer(0, 4*sizeof(MPI_Aint)); - MPI_Aint sendBuff[4] ; - sendBuff[0]=hashId_; - sendBuff[1]=mapBufferSize_[rank]; - sendBuff[2]=buffers[rank]->getWinAddress(0); - sendBuff[3]=buffers[rank]->getWinAddress(1); - info(100)<<"CContextClient::newBuffer : rank "<getWinAddress(0)<<" winAdress[1] "<getWinAddress(1)<put(sendBuff, 4); - buffer->checkBuffer(true); - - // create windows dynamically for one-sided - if (!isAttachedModeEnabled()) - { - CTimer::get("create Windows").resume() ; - MPI_Comm interComm ; - MPI_Intercomm_create(commSelf_, 0, interCommMerged_, clientSize+rank, 0, &interComm) ; - MPI_Intercomm_merge(interComm, false, &winComm_[rank]) ; - CXios::getMpiGarbageCollector().registerCommunicator(winComm_[rank]) ; - MPI_Comm_free(&interComm) ; - windows_[rank].resize(2) ; - - MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); - CXios::getMpiGarbageCollector().registerWindow(windows_[rank][0]) ; - - MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]); - CXios::getMpiGarbageCollector().registerWindow(windows_[rank][1]) ; - - CTimer::get("create Windows").suspend() ; - } - else - { - winComm_[rank] = MPI_COMM_NULL ; - windows_[rank].resize(2) ; - windows_[rank][0] = MPI_WIN_NULL ; - windows_[rank][1] = MPI_WIN_NULL ; - } - buffer->attachWindows(windows_[rank]) ; - if (!isAttachedModeEnabled()) MPI_Barrier(winComm_[rank]) ; - + CBufferOut* bufOut = buffer->getBuffer(sizeof(StdSize)); + bufOut->put(mapBufferSize_[rank]); // Stupid C++ + buffer->checkBuffer(); } /*! @@ -367,7 +297,7 @@ namespace xios map::iterator itBuff; bool pending = false; for (itBuff = buffers.begin(); itBuff != buffers.end(); itBuff++) - pending |= itBuff->second->checkBuffer(!pureOneSided); + pending |= itBuff->second->checkBuffer(); return pending; } @@ -377,45 +307,11 @@ namespace xios map::iterator itBuff; for (itBuff = buffers.begin(); itBuff != buffers.end(); itBuff++) { - delete itBuff->second; + delete itBuff->second; } buffers.clear(); - -// don't know when release windows - - //if (!isAttachedModeEnabled()) - //{ - // for(auto& it : winComm_) - // { - // int rank = it.first ; - // MPI_Win_free(&windows_[rank][0]); - // MPI_Win_free(&windows_[rank][1]); - // MPI_Comm_free(&winComm_[rank]) ; - // } - //} - } - - - /*! - Lock the buffers for one sided communications - \param [in] ranks list rank of server to which client connects to - */ - void CContextClient::lockBuffers(list& ranks) - { - list::iterator it; - for (it = ranks.begin(); it != ranks.end(); it++) buffers[*it]->lockBuffer(); } - /*! - Unlock the buffers for one sided communications - \param [in] ranks list rank of server to which client connects to - */ - void CContextClient::unlockBuffers(list& ranks) - { - list::iterator it; - for (it = ranks.begin(); it != ranks.end(); it++) buffers[*it]->unlockBuffer(); - } - /*! Verify state of buffers corresponding to a connection \param [in] ranks list rank of server to which client connects to @@ -425,7 +321,7 @@ namespace xios { list::iterator it; bool pending = false; - for (it = ranks.begin(); it != ranks.end(); it++) pending |= buffers[*it]->checkBuffer(!pureOneSided); + for (it = ranks.begin(); it != ranks.end(); it++) pending |= buffers[*it]->checkBuffer(); return pending; } @@ -435,10 +331,31 @@ namespace xios * \param [in] mapSize maps the rank of the connected servers to the size of the correspoinding buffer * \param [in] maxEventSize maps the rank of the connected servers to the size of the biggest event */ - void CContextClient::setBufferSize(const std::map& mapSize) + void CContextClient::setBufferSize(const std::map& mapSize, const std::map& maxEventSize) { - for(auto& it : mapSize) - buffers[it.first]->fixBufferSize(std::max(CXios::minBufferSize*1.0,std::min(it.second*CXios::bufferSizeFactor*1.01,CXios::maxBufferSize*1.0))); + mapBufferSize_ = mapSize; + maxEventSizes = maxEventSize; + + // Compute the maximum number of events that can be safely buffered. + double minBufferSizeEventSizeRatio = std::numeric_limits::max(); + for (std::map::const_iterator it = mapSize.begin(), ite = mapSize.end(); it != ite; ++it) + { + double ratio = double(it->second) / maxEventSizes[it->first]; + if (ratio < minBufferSizeEventSizeRatio) minBufferSizeEventSizeRatio = ratio; + } + MPI_Allreduce(MPI_IN_PLACE, &minBufferSizeEventSizeRatio, 1, MPI_DOUBLE, MPI_MIN, intraComm); + + if (minBufferSizeEventSizeRatio < 1.0) + { + ERROR("void CContextClient::setBufferSize(const std::map& mapSize, const std::map& maxEventSize)", + << "The buffer sizes and the maximum events sizes are incoherent."); + } + else if (minBufferSizeEventSizeRatio == std::numeric_limits::max()) + minBufferSizeEventSizeRatio = 1.0; // In this case, maxBufferedEvents will never be used but we want to avoid any floating point exception + + maxBufferedEvents = size_t(2 * minBufferSizeEventSizeRatio) // there is room for two local buffers on the server + + size_t(minBufferSizeEventSizeRatio) // one local buffer can always be fully used + + 1; // the other local buffer might contain only one event } /*! @@ -477,36 +394,56 @@ namespace xios return !ranksServerLeader.empty(); } + /*! + * Check if the attached mode is used. + * + * \return true if and only if attached mode is used + */ + bool CContextClient::isAttachedModeEnabled() const + { + return (parentServer != 0); + } + /*! * Finalize context client and do some reports. Function is non-blocking. */ void CContextClient::finalize(void) { map::iterator itBuff; - std::list::iterator ItServerLeader; - bool stop = false; - int* nbServerConnectionLocal = new int[serverSize] ; - int* nbServerConnectionGlobal = new int[serverSize] ; - for(int i=0;ifirst]=1 ; - for (ItServerLeader = ranksServerLeader.begin(); ItServerLeader != ranksServerLeader.end(); ItServerLeader++) nbServerConnectionLocal[*ItServerLeader]=1 ; - - MPI_Allreduce(nbServerConnectionLocal, nbServerConnectionGlobal, serverSize, MPI_INT, MPI_SUM, intraComm); - - CEventClient event(CContext::GetType(), CContext::EVENT_ID_CONTEXT_FINALIZE); - CMessage msg; - - for (int i=0;i& ranks = getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + info(100)<<"DEBUG : Sent context Finalize event to rank "<<*itRank<second->hasPendingRequest(); + } CTimer::get("Blocking time").suspend(); std::map::const_iterator itbMap = mapBufferSize_.begin(), @@ -515,12 +452,13 @@ namespace xios StdSize totalBuf = 0; for (itMap = itbMap; itMap != iteMap; ++itMap) { - report(10) << " Memory report : Context <" << context_->getId() << "> : client side : memory used for buffer of each connection to server" << endl + report(10) << " Memory report : Context <" << context->getId() << "> : client side : memory used for buffer of each connection to server" << endl << " +) To server with rank " << itMap->first << " : " << itMap->second << " bytes " << endl; totalBuf += itMap->second; } - report(0) << " Memory report : Context <" << context_->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl; + report(0) << " Memory report : Context <" << context->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl; + //releaseBuffers(); // moved to CContext::finalize() } @@ -534,24 +472,6 @@ namespace xios pending |= itBuff->second->hasPendingRequest(); return pending; } - - bool CContextClient::havePendingRequests(list& ranks) - { - list::iterator it; - bool pending = false; - for (it = ranks.begin(); it != ranks.end(); it++) pending |= buffers[*it]->hasPendingRequest(); - return pending; - } - - bool CContextClient::isNotifiedFinalized(void) - { - if (isAttachedModeEnabled()) return true ; - bool finalized = true; - map::iterator itBuff; - for (itBuff = buffers.begin(); itBuff != buffers.end(); itBuff++) - finalized &= itBuff->second->isNotifiedFinalized(); - return finalized; - } } diff --git a/xios_2311_src/src/context_client.hpp b/xios_2311_src/src/context_client.hpp index a997103c..4c40a4b0 100644 --- a/xios_2311_src/src/context_client.hpp +++ b/xios_2311_src/src/context_client.hpp @@ -13,7 +13,7 @@ namespace xios { class CContext; - class CContextServer ; + /*! \class CContextClient A context can be both on client and on server side. In order to differenciate the role of @@ -30,29 +30,24 @@ namespace xios // Send event to server void sendEvent(CEventClient& event); + bool sendTemporarilyBufferedEvent(); void waitEvent(list& ranks); - void waitEvent_old(list& ranks); // Functions to set/get buffers - bool getBuffers(const size_t timeLine, const list& serverList, const list& sizeList, list& retBuffers, bool nonBlocking = false); + bool getBuffers(const list& serverList, const list& sizeList, list& retBuffers, bool nonBlocking = false); void newBuffer(int rank); bool checkBuffers(list& ranks); bool checkBuffers(void); void releaseBuffers(void); bool havePendingRequests(void); - bool havePendingRequests(list& ranks) ; bool isServerLeader(void) const; bool isServerNotLeader(void) const; const std::list& getRanksServerLeader(void) const; const std::list& getRanksServerNotLeader(void) const; - /*! - * Check if the attached mode is used. - * - * \return true if and only if attached mode is used - */ - bool isAttachedModeEnabled() const { return isAttached_ ; } + bool isAttachedModeEnabled() const; + bool hasTemporarilyBufferedEvent() const { return !tmpBufferedEvent.isEmpty(); }; static void computeLeader(int clientRank, int clientSize, int serverSize, std::list& rankRecvLeader, @@ -60,25 +55,12 @@ namespace xios // Close and finalize context client // void closeContext(void); Never been implemented. - bool isNotifiedFinalized(void) ; void finalize(void); - void setBufferSize(const std::map& mapSize); - - int getRemoteSize(void) {return serverSize;} - int getServerSize(void) {return serverSize;} - MPI_Comm getIntraComm(void) {return intraComm ;} - int getIntraCommSize(void) {return clientSize ;} - int getIntraCommRank(void) {return clientRank ;} + void setBufferSize(const std::map& mapSize, const std::map& maxEventSize); - /*! set the associated server (dual chanel client/server) */ - void setAssociatedServer(CContextServer* associatedServer) { associatedServer=associatedServer_;} - /*! get the associated server (dual chanel client/server) */ - CContextServer* getAssociatedServer(void) { return associatedServer_;} - void setGrowableBuffer(void) { isGrowableBuffer_=true;} - void setFixedBuffer(void) { isGrowableBuffer_=false;} public: - CContext* context_; //!< Context for client + CContext* context; //!< Context for client size_t timeLine; //!< Timeline of each event @@ -88,23 +70,13 @@ namespace xios int serverSize; //!< Size of server group - MPI_Comm interComm; //!< Communicator of server group (interCommunicator) - - MPI_Comm interCommMerged_; //!< Communicator of the client group + server group (intraCommunicator) needed for one sided communication. - MPI_Comm commSelf_ ; //!< Communicator for proc alone from interCommMerged + MPI_Comm interComm; //!< Communicator of server group MPI_Comm intraComm; //!< Communicator of client group map buffers; //!< Buffers for connection to servers - bool pureOneSided ; //!< if true, client will communicated with servers only trough one sided communication. Otherwise the hybrid mode P2P /One sided is used. - - size_t hashId_ ; //!< hash id on the context client that will be used for context server to identify the remote calling context client. - private: - void lockBuffers(list& ranks) ; - void unlockBuffers(list& ranks) ; - //! Mapping of server and buffer size for each connection to server std::map mapBufferSize_; //! Maximum event sizes estimated for each connection to server @@ -112,6 +84,22 @@ namespace xios //! Maximum number of events that can be buffered StdSize maxBufferedEvents; + struct { + std::list ranks, sizes; + std::list buffers; + + bool isEmpty() const { return ranks.empty(); }; + void clear() { + ranks.clear(); + sizes.clear(); + + for (std::list::iterator it = buffers.begin(); it != buffers.end(); it++) + delete *it; + + buffers.clear(); + }; + } tmpBufferedEvent; //! Event temporarily buffered (used only on the server) + //! Context for server (Only used in attached mode) CContext* parentServer; @@ -121,13 +109,6 @@ namespace xios //! List of server ranks for which the client is not leader std::list ranksServerNotLeader; - std::map winComm_ ; //! Window communicators - std::map >windows_ ; //! one sided mpi windows to expose client buffers to servers == windows[nbServers][2] - bool isAttached_ ; - CContextServer* associatedServer_ ; //!< The server associated to the pair client/server - bool isGrowableBuffer_ = true ; - - double latency_=0e-2 ; }; } diff --git a/xios_2311_src/src/context_server.cpp b/xios_2311_src/src/context_server.cpp index 61dc04a9..f4f32869 100644 --- a/xios_2311_src/src/context_server.cpp +++ b/xios_2311_src/src/context_server.cpp @@ -15,23 +15,14 @@ #include "cxios.hpp" #include "event_scheduler.hpp" #include "server.hpp" -#include "servers_ressource.hpp" -#include "pool_ressource.hpp" -#include "services.hpp" -#include "contexts_manager.hpp" -#include "timeline_events.hpp" - #include -#include -#include + namespace xios { - using namespace std ; - CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) - : eventScheduler_(nullptr), isProcessingEvent_(false), associatedClient_(nullptr) + CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) { context=parent; intraComm=intraComm_; @@ -41,54 +32,19 @@ namespace xios interComm=interComm_; int flag; MPI_Comm_test_inter(interComm,&flag); + if (flag) MPI_Comm_remote_size(interComm,&commSize); + else MPI_Comm_size(interComm,&commSize); - if (flag) attachedMode=false ; - else attachedMode=true ; - - if (flag) MPI_Comm_remote_size(interComm,&clientSize_); - else MPI_Comm_size(interComm,&clientSize_); - - - SRegisterContextInfo contextInfo ; - CXios::getContextsManager()->getContextInfo(context->getId(), contextInfo, intraComm) ; - - // if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services - // { - //if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; - eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; - MPI_Comm_dup(intraComm, &processEventBarrier_) ; - // } - - - currentTimeLine=1; + currentTimeLine=0; scheduled=false; finished=false; - - // generate unique hash for server - auto time=chrono::system_clock::now().time_since_epoch().count() ; - std::default_random_engine rd(time); // not reproducible from a run to another - std::uniform_int_distribution dist; - hashId=dist(rd) ; - MPI_Bcast(&hashId,1,MPI_SIZE_T,0,intraComm) ; // Bcast to all server of the context - - - if (!isAttachedModeEnabled()) MPI_Intercomm_merge(interComm_,true,&interCommMerged_) ; - MPI_Comm_split(intraComm_, intraCommRank, intraCommRank, &commSelf_) ; // for windows - - itLastTimeLine=lastTimeLine.begin() ; - - pureOneSided=CXios::getin("pure_one_sided",false); // pure one sided communication (for test) - if (isAttachedModeEnabled()) pureOneSided=false ; // no one sided in attach mode - + boost::hash hashString; + if (CServer::serverLevel == 1) + hashId=hashString(context->getId() + boost::lexical_cast(context->clientPrimServer.size())); + else + hashId=hashString(context->getId()); } -//! Attached mode is used ? -//! \return true if attached mode is used, false otherwise - bool CContextServer::isAttachedModeEnabled() const - { - return attachedMode ; - } - void CContextServer::setPendingEvent(void) { pendingEvent=true; @@ -106,37 +62,51 @@ namespace xios bool CContextServer::eventLoop(bool enableEventsProcessing /*= true*/) { - CTimer::get("listen request").resume(); listen(); - CTimer::get("listen request").suspend(); - CTimer::get("check pending request").resume(); checkPendingRequest(); - checkPendingProbe() ; - CTimer::get("check pending request").suspend(); - CTimer::get("check event process").resume(); - if (enableEventsProcessing) processEvents(); - CTimer::get("check event process").suspend(); + if (enableEventsProcessing) + processEvents(); return finished; } - void CContextServer::listen(void) + void CContextServer::listen(void) { int rank; int flag; int count; char * addr; MPI_Status status; - MPI_Message message ; map::iterator it; bool okLoop; traceOff(); - MPI_Improbe(MPI_ANY_SOURCE, 20,interComm,&flag,&message, &status); + MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm,&flag,&status); traceOn(); - if (flag==true) listenPendingRequest(message, status) ; + + if (flag==true) + { + rank=status.MPI_SOURCE ; + okLoop = true; + if (pendingRequest.find(rank)==pendingRequest.end()) + okLoop = !listenPendingRequest(status) ; + if (okLoop) + { + for(rank=0;rank winAdress(2) ; - winAdress[0]=recvBuff[2] ; winAdress[1]=recvBuff[3] ; - mapBufferSize_.insert(std::make_pair(rank, buffSize)); - - // create windows dynamically for one-sided - if (!isAttachedModeEnabled()) - { - CTimer::get("create Windows").resume() ; - MPI_Comm interComm ; - MPI_Intercomm_create(commSelf_, 0, interCommMerged_, rank, 0 , &interComm) ; - MPI_Intercomm_merge(interComm, true, &winComm_[rank]) ; - CXios::getMpiGarbageCollector().registerCommunicator(winComm_[rank]) ; - MPI_Comm_free(&interComm) ; - windows_[rank].resize(2) ; - MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); - CXios::getMpiGarbageCollector().registerWindow(windows_[rank][0]) ; - MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]); - CXios::getMpiGarbageCollector().registerWindow(windows_[rank][1]) ; - CTimer::get("create Windows").suspend() ; - MPI_Barrier(winComm_[rank]) ; - } - else - { - winComm_[rank] = MPI_COMM_NULL ; - windows_[rank].resize(2) ; - windows_[rank][0] = MPI_WIN_NULL ; - windows_[rank][1] = MPI_WIN_NULL ; - } - - it=(buffers.insert(pair(rank,new CServerBuffer(windows_[rank], winAdress, 0, buffSize)))).first; - lastTimeLine[rank]=0 ; - itLastTimeLine=lastTimeLine.begin() ; - - return true; + StdSize buffSize = 0; + MPI_Recv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &status); + mapBufferSize_.insert(std::make_pair(rank, buffSize)); + it=(buffers.insert(pair(rank,new CServerBuffer(buffSize)))).first; + return true; } else { - std::pair mypair(message,status) ; - pendingProbe[rank].push_back(mypair) ; - return false; - } - } - - void CContextServer::checkPendingProbe(void) - { - - list recvProbe ; - list::iterator itRecv ; - map > >::iterator itProbe; - - for(itProbe=pendingProbe.begin();itProbe!=pendingProbe.end();itProbe++) - { - int rank=itProbe->first ; - if (pendingRequest.count(rank)==0) + MPI_Get_count(&status,MPI_CHAR,&count); + if (it->second->isBufferFree(count)) { - MPI_Message& message = itProbe->second.front().first ; - MPI_Status& status = itProbe->second.front().second ; - int count ; - MPI_Get_count(&status,MPI_CHAR,&count); - map::iterator it = buffers.find(rank); - if ( (it->second->isBufferFree(count) && !it->second->isResizing()) // accept new request if buffer is free - || (it->second->isResizing() && it->second->isBufferEmpty()) ) // or if resizing wait for buffer is empty - { - char * addr; - addr=(char*)it->second->getBuffer(count); - MPI_Imrecv(addr,count,MPI_CHAR, &message, &pendingRequest[rank]); - bufferRequest[rank]=addr; - recvProbe.push_back(rank) ; - itProbe->second.pop_front() ; - } - } + addr=(char*)it->second->getBuffer(count); + MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]); + bufferRequest[rank]=addr; + return true; + } + else + return false; } - - for(itRecv=recvProbe.begin(); itRecv!=recvProbe.end(); itRecv++) if (pendingProbe[*itRecv].empty()) pendingProbe.erase(*itRecv) ; } @@ -236,9 +147,6 @@ namespace xios int flag; int count; MPI_Status status; - - if (!pendingRequest.empty()) CTimer::get("receiving requests").resume(); - else CTimer::get("receiving requests").suspend(); for(it=pendingRequest.begin();it!=pendingRequest.end();it++) { @@ -248,7 +156,6 @@ namespace xios traceOn(); if (flag==true) { - buffers[rank]->updateCurrentWindows() ; recvRequest.push_back(rank); MPI_Get_count(&status,MPI_CHAR,&count); processRequest(rank,bufferRequest[rank],count); @@ -262,41 +169,15 @@ namespace xios } } - void CContextServer::getBufferFromClient(size_t timeLine) - { - CTimer::get("CContextServer::getBufferFromClient").resume() ; - if (!isAttachedModeEnabled()) // one sided desactivated in attached mode - { - int rank ; - char *buffer ; - size_t count ; - - if (itLastTimeLine==lastTimeLine.end()) itLastTimeLine=lastTimeLine.begin() ; - for(;itLastTimeLine!=lastTimeLine.end();++itLastTimeLine) - { - rank=itLastTimeLine->first ; - if (itLastTimeLine->second < timeLine && pendingRequest.count(rank)==0 && buffers[rank]->isBufferEmpty()) - { - if (buffers[rank]->getBufferFromClient(timeLine, buffer, count)) processRequest(rank, buffer, count); - if (count >= 0) ++itLastTimeLine ; - break ; - } - } - } - CTimer::get("CContextServer::getBufferFromClient").suspend() ; - } - - void CContextServer::processRequest(int rank, char* buff,int count) { CBufferIn buffer(buff,count); char* startBuffer,endBuffer; int size, offset; - size_t timeLine=0; + size_t timeLine; map::iterator it; - CTimer::get("Process request").resume(); while(count>0) { @@ -304,37 +185,13 @@ namespace xios CBufferIn newBuffer(startBuffer,buffer.remain()); newBuffer>>size>>timeLine; - if (timeLine==timelineEventNotifyChangeBufferSize) - { - buffers[rank]->notifyBufferResizing() ; - buffers[rank]->updateCurrentWindows() ; - buffers[rank]->popBuffer(count) ; - info(100)<<"Context id "<getId()<<" : Receive NotifyChangeBufferSize from client rank "<isBufferEmpty()<<" remaining count : "<getUsed()< winAdress(2) ; - newBuffer>>newSize>>winAdress[0]>>winAdress[1] ; - buffers[rank]->freeBuffer(count) ; - delete buffers[rank] ; - buffers[rank] = new CServerBuffer(windows_[rank], winAdress, 0, newSize) ; - info(100)<<"Context id "<getId()<<" : Receive ChangeBufferSize from client rank "<getId()<<" : Receive standard event from client rank "<(timeLine,new CEventServer(this))).first; - it->second->push(rank,buffers[rank],startBuffer,size); - if (timeLine>0) lastTimeLine[rank]=timeLine ; - } + it=events.find(timeLine); + if (it==events.end()) it=events.insert(pair(timeLine,new CEventServer)).first; + it->second->push(rank,buffers[rank],startBuffer,size); + buffer.advance(size); count=buffer.remain(); } - CTimer::get("Process request").suspend(); } @@ -342,11 +199,6 @@ namespace xios { map::iterator it; CEventServer* event; - -// if (context->isProcessingEvent()) return ; - if (isProcessingEvent_) return ; - if (isAttachedModeEnabled()) - if (!CXios::getDaemonsManager()->isScheduledContext(remoteHashId_)) return ; it=events.find(currentTimeLine); if (it!=events.end()) @@ -355,92 +207,35 @@ namespace xios if (event->isFull()) { - if (!scheduled && !isAttachedModeEnabled()) // Skip event scheduling for attached mode and reception on client side + if (!scheduled && CServer::eventScheduler) // Skip event scheduling for attached mode and reception on client side { - eventScheduler_->registerEvent(currentTimeLine,hashId); + CServer::eventScheduler->registerEvent(currentTimeLine,hashId); scheduled=true; } - else if (isAttachedModeEnabled() || eventScheduler_->queryEvent(currentTimeLine,hashId) ) + else if (!CServer::eventScheduler || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) ) { - - if (!eventScheduled_) - { - MPI_Ibarrier(processEventBarrier_,&processEventRequest_) ; - eventScheduled_=true ; - return ; - } - else - { - MPI_Status status ; - int flag ; - MPI_Test(&processEventRequest_, &flag, &status) ; - if (!flag) return ; - eventScheduled_=false ; - } - - if (!isAttachedModeEnabled()) eventScheduler_->popEvent() ; - //MPI_Barrier(intraComm) ; // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes // The best way to properly solve this problem will be to use the event scheduler also in attached mode // for now just set up a MPI barrier -//ym to be check later -// if (!eventScheduler_ && CXios::isServer) MPI_Barrier(intraComm) ; + if (!CServer::eventScheduler && CXios::isServer) MPI_Barrier(intraComm) ; -// context->setProcessingEvent() ; - isProcessingEvent_=true ; CTimer::get("Process events").resume(); - info(100)<<"Context id "<getId()<<" : Process Event "<classId<<" of type "<type<unsetProcessingEvent() ; pendingEvent=false; delete event; events.erase(it); currentTimeLine++; scheduled = false; - if (isAttachedModeEnabled()) CXios::getDaemonsManager()->unscheduleContext() ; } } - else if (pendingRequest.empty()) getBufferFromClient(currentTimeLine) ; } - else if (pendingRequest.empty()) getBufferFromClient(currentTimeLine) ; // if pure one sided check buffer even if no event recorded at current time line } CContextServer::~CContextServer() { map::iterator it; for(it=buffers.begin();it!=buffers.end();++it) delete it->second; - buffers.clear() ; - } - - void CContextServer::releaseBuffers() - { - //for(auto it=buffers.begin();it!=buffers.end();++it) delete it->second ; - //buffers.clear() ; - freeWindows() ; - } - - void CContextServer::freeWindows() - { - //if (!isAttachedModeEnabled()) - //{ - // for(auto& it : winComm_) - // { - // int rank = it.first ; - // MPI_Win_free(&windows_[rank][0]); - // MPI_Win_free(&windows_[rank][1]); - // MPI_Comm_free(&winComm_[rank]) ; - // } - //} - } - - void CContextServer::notifyClientsFinalize(void) - { - for(auto it=buffers.begin();it!=buffers.end();++it) - { - it->second->notifyClientFinalize() ; - } } void CContextServer::dispatchEvent(CEventServer& event) @@ -458,10 +253,7 @@ namespace xios { finished=true; info(20)<<" CContextServer: Receive context <"<getId()<<"> finalize."<finalize(); - std::map::const_iterator itbMap = mapBufferSize_.begin(), iteMap = mapBufferSize_.end(), itMap; for (itMap = itbMap; itMap != iteMap; ++itMap) @@ -494,10 +286,4 @@ namespace xios ERROR("void CContextServer::dispatchEvent(CEventServer& event)",<<" Bad event class Id"< buffers ; - map lastTimeLine ; //!< last event time line for a processed request - map::iterator itLastTimeLine ; //!< iterator on lastTimeLine - map > > pendingProbe; map pendingRequest ; map bufferRequest ; @@ -60,29 +43,12 @@ namespace xios bool finished ; bool pendingEvent ; bool scheduled ; /*!< event of current timeline is alreading scheduled ? */ - bool attachedMode ; //! true if attached mode is enabled otherwise false - bool pureOneSided ; //!< if true, client will communicated with servers only trough one sided communication. Otherwise the hybrid mode P2P /One sided is used. - size_t hashId ; - void setAssociatedClient(CContextClient* associatedClient) {associatedClient_=associatedClient ;} - CContextClient* getAssociatedClient(void) { return associatedClient_ ;} - ~CContextServer() ; private: - std::map mapBufferSize_; - std::map winComm_ ; //! Window communicators - std::map >windows_ ; //! one sided mpi windows to expose client buffers to servers ; No memory will be attached on server side. - CEventScheduler* eventScheduler_ ; - bool isProcessingEvent_ ; - CContextClient* associatedClient_ ; - size_t remoteHashId_; //!< the hash is of the calling context client - - MPI_Comm processEventBarrier_ ; - bool eventScheduled_=false; - MPI_Request processEventRequest_ ; } ; } diff --git a/xios_2311_src/src/cxios.cpp b/xios_2311_src/src/cxios.cpp index 31b982cd..25991bd7 100644 --- a/xios_2311_src/src/cxios.cpp +++ b/xios_2311_src/src/cxios.cpp @@ -10,10 +10,8 @@ #include #include "memtrack.hpp" #include "registry.hpp" -#include "ressources_manager.hpp" -#include "services_manager.hpp" -#include "servers_ressource.hpp" -#include "mem_checker.hpp" + +#include "graphviz.hpp" namespace xios { @@ -23,19 +21,13 @@ namespace xios string CXios::serverFile="./xios_server"; string CXios::serverPrmFile="./xios_server1"; string CXios::serverSndFile="./xios_server2"; - const string CXios::defaultPoolId="default_pool_id" ; - const string CXios::defaultServerId="default_server_id" ; - const string CXios::defaultGathererId="default_gatherer_id" ; - + bool CXios::xiosStack = true; bool CXios::systemStack = false; bool CXios::isClient ; bool CXios::isServer ; - MPI_Comm CXios::globalComm ; - MPI_Comm CXios::xiosComm ; - bool CXios::usingOasis ; bool CXios::usingServer = false; bool CXios::usingServer2 = false; @@ -43,23 +35,14 @@ namespace xios int CXios::nbPoolsServer2 = 1; double CXios::bufferSizeFactor = 1.0; const double CXios::defaultBufferSizeFactor = 1.0; - StdSize CXios::minBufferSize = 64 * sizeof(double); + StdSize CXios::minBufferSize = 1024 * sizeof(double); StdSize CXios::maxBufferSize = std::numeric_limits::max() ; bool CXios::printLogs2Files; bool CXios::isOptPerformance = true; CRegistry* CXios::globalRegistry = 0; double CXios::recvFieldTimeout = 300.0; bool CXios::checkEventSync=false ; - - CDaemonsManager* CXios::daemonsManager_=nullptr ; - CRessourcesManager* CXios::ressourcesManager_=nullptr ; - CServicesManager* CXios::servicesManager_=nullptr ; - CContextsManager* CXios::contextsManager_=nullptr ; - CCouplerManager* CXios::couplerManager_=nullptr ; - CRegistryManager* CXios::registryManager_=nullptr ; - - CMpiGarbageCollector CXios::MpiGarbageCollector_ ; - + //! Parse configuration file and create some objects from it void CXios::initialize() { @@ -125,9 +108,9 @@ namespace xios isClient = true; - //CClient::initialize(codeId,localComm,returnComm) ; CClient::initialize(codeId,localComm,returnComm) ; - + if (CClient::getRank()==0) globalRegistry = new CRegistry(returnComm) ; + // If there are no server processes then we are in attached mode // and the clients are also servers isServer = !usingServer; @@ -148,7 +131,14 @@ namespace xios void CXios::clientFinalize(void) { CClient::finalize() ; - + if (CClient::getRank()==0) + { + info(80)<<"Write data base Registry"<toString()<toFile("xios_registry.bin") ; + delete globalRegistry ; + CGraphviz::buildWorkflowGraphVisjs_with_info(); + } + #ifdef XIOS_MEMTRACK #ifdef XIOS_MEMTRACK_LIGHT @@ -157,20 +147,8 @@ namespace xios #endif #ifdef XIOS_MEMTRACK_FULL - report(0) << " Memory report : current memory used by XIOS : "<< MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; - report(0) << " Memory report : maximum memory used by XIOS : "<< MemTrack::getMaxMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; - - ofstream memReport ; - std::filebuf* fb = memReport.rdbuf(); - CClient::openStream(clientFile, ".mem", fb); - - MemTrack::TrackListMemoryUsage() ; - size_t memtrack_blocks=0 ; - memtrack_blocks=xios::CXios::getin("memtrack_blocks",memtrack_blocks) ; - size_t memtrack_size=0 ; - memtrack_size=xios::CXios::getin("memtrack_size",memtrack_size) ; - MemTrack::TrackDumpBlocks(memReport, memtrack_blocks,memtrack_size); - memReport.close(); + MemTrack::TrackListMemoryUsage() ; + MemTrack::TrackDumpBlocks(); #endif CClient::closeInfoStream(); @@ -191,13 +169,110 @@ namespace xios //! Initialize server then put it into listening state void CXios::initServerSide(void) { - CMemChecker::get("xios").resume() ; initServer(); isClient = false; isServer = true; // Initialize all aspects MPI CServer::initialize(); + if (CServer::getRank()==0 && CServer::serverLevel != 1) globalRegistry = new CRegistry(CServer::intraComm) ; + + if (printLogs2Files) + { + if (CServer::serverLevel == 0) + { + CServer::openInfoStream(serverFile); + CServer::openErrorStream(serverFile); + } + else if (CServer::serverLevel == 1) + { + CServer::openInfoStream(serverPrmFile); + CServer::openErrorStream(serverPrmFile); + } + else + { + CServer::openInfoStream(serverSndFile); + CServer::openErrorStream(serverSndFile); + } + } + else + { + CServer::openInfoStream(); + CServer::openErrorStream(); + } + + // Enter the loop to listen message from Client + CServer::eventLoop(); + + // Finalize + if (CServer::serverLevel == 0) + { + if (CServer::getRank()==0) + { + info(80)<<"Write data base Registry"<toString()<toFile("xios_registry.bin") ; + delete globalRegistry ; + } + } + else + { + // If using two server levels: + // (1) merge registries on each pool + // (2) send merged registries to the first pool + // (3) merge received registries on the first pool + if (CServer::serverLevel == 2) + { + vector& secondaryServerGlobalRanks = CServer::getSecondaryServerGlobalRanks(); + int firstPoolGlobalRank = secondaryServerGlobalRanks[0]; + int rankGlobal; + MPI_Comm_rank(globalComm, &rankGlobal); + + // Merge registries defined on each pools + CRegistry globalRegistrySndServers (CServer::intraComm); + + // All pools (except the first): send globalRegistry to the first pool + for (int i=1; igetPoolRessource() ; - - MISSING_RETURN( "CPoolRessource* CXios::getPoolRessource()" ); - return nullptr; - } } - diff --git a/xios_2311_src/src/cxios.hpp b/xios_2311_src/src/cxios.hpp index bc26a7cb..0caa46c6 100644 --- a/xios_2311_src/src/cxios.hpp +++ b/xios_2311_src/src/cxios.hpp @@ -4,13 +4,6 @@ #include "xios_spl.hpp" #include "mpi.hpp" #include "registry.hpp" -#include "ressources_manager.hpp" -#include "services_manager.hpp" -#include "contexts_manager.hpp" -#include "daemons_manager.hpp" -#include "coupler_manager.hpp" -#include "registry_manager.hpp" -#include "mpi_garbage_collector.hpp" namespace xios { @@ -47,7 +40,6 @@ namespace xios static bool isServer ; //!< Check if xios is server static MPI_Comm globalComm ; //!< Global communicator - static MPI_Comm xiosComm ; //!< Global communicator static bool printLogs2Files; //!< Printing out logs into files static bool usingOasis ; //!< Using Oasis @@ -63,62 +55,17 @@ namespace xios static CRegistry* globalRegistry ; //!< global registry which is wrote by the root process of the servers static double recvFieldTimeout; //!< Time to wait for data before issuing an error when receiving a field static bool checkEventSync; //!< For debuuging, check if event are coherent and synchrone on client side - - static const string defaultPoolId ; - static const string defaultServerId ; - static const string defaultGathererId ; - - static CRegistryManager* registryManager_ ; - static CRessourcesManager* ressourcesManager_ ; - static CCouplerManager* couplerManager_ ; - static CServicesManager* servicesManager_ ; - static CContextsManager* contextsManager_ ; - static CDaemonsManager* daemonsManager_ ; - static CMpiGarbageCollector MpiGarbageCollector_ ; - public: - static CMpiGarbageCollector& getMpiGarbageCollector(void) { return MpiGarbageCollector_ ; } public: //! Setting xios to use server mode static void setUsingServer(); //! Setting xios NOT to use server mode static void setNotUsingServer(); - - //! is using server mode - static bool isUsingServer() {return usingServer;} //! Initialize server (if any) static void initServer(); - static void launchServicesManager( bool isXiosServer) ; - static void launchContextsManager(bool isXiosServer) ; - static void launchDaemonsManager(bool isXiosServer) ; - static void launchRessourcesManager(bool isXiosServer) ; - static void launchCouplerManager(bool isXiosServer) ; - static void launchRegistryManager(bool isXiosServer) ; - - static void finalizeServicesManager() ; - static void finalizeContextsManager() ; - static void finalizeDaemonsManager() ; - static void finalizeRessourcesManager() ; - static void finalizeCouplerManager() ; - static void finalizeRegistryManager() ; - - static CRegistryManager* getRegistryManager(void) { return registryManager_ ;} - static CRessourcesManager* getRessourcesManager(void) { return ressourcesManager_ ;} - static CCouplerManager* getCouplerManager(void) { return couplerManager_ ;} - static CServicesManager* getServicesManager(void) { return servicesManager_ ;} - static CContextsManager* getContextsManager(void) { return contextsManager_ ;} - static CDaemonsManager* getDaemonsManager(void) { return daemonsManager_ ;} - static CPoolRessource* getPoolRessource(void) ; - - static MPI_Comm getGlobalComm(void) { return globalComm ;} - static MPI_Comm getXiosComm(void) { return xiosComm ;} - static void setXiosComm(MPI_Comm comm) { xiosComm=comm ;} - static CRegistry* getGlobalRegistry(void) { return globalRegistry ;} - static void setGlobalRegistry(CRegistry* registry) { globalRegistry=registry ;} - private: //! Parse only Xios part of configuration file static void parseXiosConfig(); diff --git a/xios_2311_src/src/data_input.cpp b/xios_2311_src/src/data_input.cpp index 8dea4205..60df1b85 100644 --- a/xios_2311_src/src/data_input.cpp +++ b/xios_2311_src/src/data_input.cpp @@ -18,9 +18,9 @@ namespace xios //---------------------------------------------------------------- - void CDataInput::readFieldData(CField* field, int record, CArray& data) + void CDataInput::readFieldData(CField* field) { - this->readFieldData_(field, record, data); + this->readFieldData_(field); } //---------------------------------------------------------------- diff --git a/xios_2311_src/src/data_input.hpp b/xios_2311_src/src/data_input.hpp index 303bce9e..a48d71aa 100644 --- a/xios_2311_src/src/data_input.hpp +++ b/xios_2311_src/src/data_input.hpp @@ -17,7 +17,7 @@ namespace xios /// Read methods /// StdSize getFieldNbRecords(CField* field); - void readFieldData(CField* field, int record, CArray& data); + void readFieldData(CField* field); void readFieldAttributesMetaData(CField* field); void readFieldAttributesValues(CField* field); void closeFile(void); @@ -26,7 +26,7 @@ namespace xios protected: virtual StdSize getFieldNbRecords_(CField* field) = 0; - virtual void readFieldData_(CField* field, int record, CArray& data) = 0; + virtual void readFieldData_(CField* field) = 0; virtual void readFieldAttributes_(CField* field, bool readAttributeValues) = 0; virtual void closeFile_(void) = 0; diff --git a/xios_2311_src/src/data_output.cpp b/xios_2311_src/src/data_output.cpp index 0de7ce4d..e36a5db3 100644 --- a/xios_2311_src/src/data_output.cpp +++ b/xios_2311_src/src/data_output.cpp @@ -121,14 +121,15 @@ namespace xios CATCH //---------------------------------------------------------------- - int CDataOutput::writeFieldData(CField* field, const CArray& data, const CDate& lastWrite, const CDate& currentWrite, int nstep) + void CDataOutput::writeFieldData(CField* field) TRY { - return this->writeFieldData_(field, data, lastWrite, currentWrite, nstep); +// CGrid* grid = CGrid::get(field->grid_ref.getValue()); +// CDomain* domain = CDomain::get(grid->domain_ref.getValue()); + this->writeFieldData_(field); } CATCH - ///---------------------------------------------------------------- } // namespace xios diff --git a/xios_2311_src/src/data_output.hpp b/xios_2311_src/src/data_output.hpp index addccf90..d1e7080b 100644 --- a/xios_2311_src/src/data_output.hpp +++ b/xios_2311_src/src/data_output.hpp @@ -27,7 +27,7 @@ namespace xios void writeFieldTimeAxis(CField* field) ; void writeFieldGrid(CField* field); void writeTimeDimension(void); - int writeFieldData(CField* field, const CArray& data, const CDate& lastWrite, const CDate& currentWrite, int nstep); + void writeFieldData(CField* field); virtual void definition_start(void) = 0; virtual void definition_end(void) = 0; @@ -51,7 +51,7 @@ namespace xios virtual void closeFile_ (void) = 0; virtual void syncFile_ (void) = 0; virtual void writeField_ (CField* field) = 0; - virtual int writeFieldData_ (CField* field, const CArray& data, const CDate& lastWrite, const CDate& currentWrite, int nstep) = 0; + virtual void writeFieldData_(CField* field) = 0; virtual void writeDomain_ (CDomain* domain) = 0; virtual void writeAxis_ (CAxis* axis) = 0; virtual void writeScalar_ (CScalar* scalar) = 0; diff --git a/xios_2311_src/src/declare_attribute.hpp b/xios_2311_src/src/declare_attribute.hpp index ab46661d..331c8a2b 100644 --- a/xios_2311_src/src/declare_attribute.hpp +++ b/xios_2311_src/src/declare_attribute.hpp @@ -41,7 +41,6 @@ { \ public : \ using CAttributeArray::operator = ; \ - bool alwaysFalse=false;\ name##_attr(void) : CAttributeArray (#name, *CAttributeMap::Current) {} \ virtual bool doSend() const { return helper(__VA_ARGS__); } \ bool helper(bool returnTrue=true) const { return returnTrue; } \ diff --git a/xios_2311_src/src/declare_ref_func.hpp b/xios_2311_src/src/declare_ref_func.hpp index b88f7f25..0a22bac0 100755 --- a/xios_2311_src/src/declare_ref_func.hpp +++ b/xios_2311_src/src/declare_ref_func.hpp @@ -49,8 +49,9 @@ void C##type::solveRefInheritance(bool apply) \ \ refObjects.push_back(refer_ptr); \ SuperClassAttribute::setAttributes(refer_ptr, apply); \ - if (apply) setInheritedId(refer_ptr) ; \ } \ + if (this->hasAttribute("name") && this->name.isEmpty()) \ + this->name.setValue(this->get##type##OutputName()); \ } \ \ void C##type::setAttributesReference(bool apply) \ diff --git a/xios_2311_src/src/distribution/client_client_dht_decl.cpp b/xios_2311_src/src/distribution/client_client_dht_decl.cpp deleted file mode 100644 index 6421db9a..00000000 --- a/xios_2311_src/src/distribution/client_client_dht_decl.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/*! - \file client_client_dht.cpp - \author Ha NGUYEN - \since 05 Oct 2015 - \date 23 Mars 2016 - - \brief Distributed hashed table implementation. - */ -#include "client_client_dht_template_impl.hpp" - -namespace xios -{ - -template class CClientClientDHTTemplate; -template class CClientClientDHTTemplate; -template class CClientClientDHTTemplate; -template class CClientClientDHTTemplate; - -} diff --git a/xios_2311_src/src/distribution/client_client_dht_template.hpp b/xios_2311_src/src/distribution/client_client_dht_template.hpp deleted file mode 100644 index 2f852612..00000000 --- a/xios_2311_src/src/distribution/client_client_dht_template.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/*! - \file client_client_dht_template.hpp - \author Ha NGUYEN - \since 01 Oct 2015 - \date 15 April 2016 - - \brief Distributed hashed table implementation. - */ - -#ifndef __XIOS_CLIENT_CLIENT_DHT_TEMPLATE_HPP__ -#define __XIOS_CLIENT_CLIENT_DHT_TEMPLATE_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "mpi.hpp" -#include "policy.hpp" -#include -#include "dht_data_types.hpp" - -namespace xios -{ -template class CClientClientDHTTemplate; - -/*! - \class CClientClientDHTTemplate - This class provides the similar features like \class CClientServerMappingDistributed, -which implements a simple distributed hashed table; Moreover, by extending with hierarchical structure, -it allows to reduce greatly the number of communication among processes. -*/ -template -class CClientClientDHTTemplate: public HierarchyPolicy -{ - public: - typedef T InfoType; - static const int infoTypeSize = sizeof(InfoType); -// typedef typename std::unordered_map > InfoType2IndexMap; - typedef typename std::unordered_map Index2InfoTypeMap; - typedef typename std::unordered_map > Index2VectorInfoTypeMap; - - public: - CClientClientDHTTemplate(const Index2InfoTypeMap& indexInfoInitMap, - const MPI_Comm& clientIntraComm); - - CClientClientDHTTemplate(const Index2VectorInfoTypeMap& indexInfoInitMap, - const MPI_Comm& clientIntraComm); - - void computeIndexInfoMapping(const CArray& indices); - - const Index2VectorInfoTypeMap& getInfoIndexMap() const {return indexToInfoMappingLevel_; } - Index2VectorInfoTypeMap& getInfoIndexMap() {return indexToInfoMappingLevel_; } - int getNbClient() { return nbClient_; } - - /** Default destructor */ - virtual ~CClientClientDHTTemplate(); - - protected: - CClientClientDHTTemplate(const MPI_Comm& clientIntraComm); - - protected: - - - // Redistribute index and info among clients - void computeDistributedIndex(const Index2InfoTypeMap& indexInfoInitMap, - const MPI_Comm& intraCommLevel, - int level); - - void computeDistributedIndex(const Index2VectorInfoTypeMap& indexInfoInitMap, - const MPI_Comm& intraCommLevel, - int level); - - - void computeHashIndex(std::vector& indexClientHash, int nbClient); - - void computeIndexInfoMappingLevel(const CArray& indices, - const MPI_Comm& intraCommLevel, - int level); - - void computeSendRecvRank(int level, int rank); - - void sendRecvRank(int level, - const std::vector& sendNbRank, const std::vector& sendNbElements, - std::vector& recvNbRank, std::vector& recvNbElements); - - protected: - // Send information to clients - void sendInfoToClients(int clientDestRank, unsigned char* info, int infoSize, - const MPI_Comm& clientIntraComm, - std::vector& requestSendInfo); - - void recvInfoFromClients(int clientSrcRank, unsigned char* info, int infoSize, - const MPI_Comm& clientIntraComm, - std::vector& requestRecvInfo); - - // Send global index to clients - void sendIndexToClients(int clientDestRank, size_t* indices, size_t indiceSize, - const MPI_Comm& clientIntraComm, - std::vector& requestSendIndexGlobal); - - void recvIndexFromClients(int clientSrcRank, size_t* indices, size_t indiceSize, - const MPI_Comm& clientIntraComm, - std::vector& requestRecvIndex); - - void sendRecvOnReturn(const std::vector& sendNbRank, std::vector& sendNbElements, - const std::vector& recvNbRank, std::vector& recvNbElements); - - protected: - //! Mapping of global index to the corresponding client - Index2VectorInfoTypeMap index2InfoMapping_; - - //! A mapping of index to the corresponding information in each level of hierarchy - Index2VectorInfoTypeMap indexToInfoMappingLevel_; - - //! Rank of client to send on each DHT level - std::vector > sendRank_; - - //! Rank of client to receive on each DHT level - std::vector > recvRank_; - - //! Flag to specify whether data is distributed or not - bool isDataDistributed_; - - //! Number of client - int nbClient_; -}; - -typedef CClientClientDHTTemplate CClientClientDHTInt; -typedef CClientClientDHTTemplate CClientClientDHTSizet; -typedef CClientClientDHTTemplate CClientClientDHTDouble; -typedef CClientClientDHTTemplate CClientClientDHTPairIntInt; - -} // namespace xios -#endif // __XIOS_CLIENT_CLIENT_DHT_TEMPLATE_HPP__ diff --git a/xios_2311_src/src/distribution/client_client_dht_template_impl.hpp b/xios_2311_src/src/distribution/client_client_dht_template_impl.hpp deleted file mode 100644 index 3e7d8d8c..00000000 --- a/xios_2311_src/src/distribution/client_client_dht_template_impl.hpp +++ /dev/null @@ -1,737 +0,0 @@ -/*! - \file client_client_dht_template_impl.hpp - \author Ha NGUYEN - \since 05 Oct 2015 - \date 23 Mars 2016 - - \brief Distributed hashed table implementation. - */ -#include "client_client_dht_template.hpp" -#include "utils.hpp" -#include "mpi_tag.hpp" - -namespace xios -{ -template -CClientClientDHTTemplate::CClientClientDHTTemplate(const MPI_Comm& clientIntraComm) - : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) -{ - MPI_Comm_size(clientIntraComm, &nbClient_); - this->computeMPICommLevel(); - int nbLvl = this->getNbLevel(); - sendRank_.resize(nbLvl); - recvRank_.resize(nbLvl); -} - -/*! - Constructor with initial distribution information and the corresponding index - Each client (process) holds a piece of information as well as the attached index, the index -will be redistributed (projected) into size_t space as long as the associated information. - \param [in] indexInfoMap initial index and information mapping - \param [in] clientIntraComm communicator of clients - \param [in] hierarLvl level of hierarchy -*/ -template -CClientClientDHTTemplate::CClientClientDHTTemplate(const Index2InfoTypeMap& indexInfoMap, - const MPI_Comm& clientIntraComm) - : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) -{ - MPI_Comm_size(clientIntraComm, &nbClient_); - this->computeMPICommLevel(); - int nbLvl = this->getNbLevel(); - sendRank_.resize(nbLvl); - recvRank_.resize(nbLvl); - Index2VectorInfoTypeMap indexToVecInfoMap; - indexToVecInfoMap.rehash(std::ceil(indexInfoMap.size()/indexToVecInfoMap.max_load_factor())); - typename Index2InfoTypeMap::const_iterator it = indexInfoMap.begin(), ite = indexInfoMap.end(); - for (; it != ite; ++it) indexToVecInfoMap[it->first].push_back(it->second); - computeDistributedIndex(indexToVecInfoMap, clientIntraComm, nbLvl-1); -} - -/*! - Constructor with initial distribution information and the corresponding index - Each client (process) holds a piece of information as well as the attached index, the index -will be redistributed (projected) into size_t space as long as the associated information. - \param [in] indexInfoMap initial index and information mapping - \param [in] clientIntraComm communicator of clients - \param [in] hierarLvl level of hierarchy -*/ -template -CClientClientDHTTemplate::CClientClientDHTTemplate(const Index2VectorInfoTypeMap& indexInfoMap, - const MPI_Comm& clientIntraComm) - : H(clientIntraComm), index2InfoMapping_(), indexToInfoMappingLevel_(), nbClient_(0) -{ - MPI_Comm_size(clientIntraComm, &nbClient_); - this->computeMPICommLevel(); - int nbLvl = this->getNbLevel(); - sendRank_.resize(nbLvl); - recvRank_.resize(nbLvl); - computeDistributedIndex(indexInfoMap, clientIntraComm, nbLvl-1); -} - -template -CClientClientDHTTemplate::~CClientClientDHTTemplate() -{ -} - -/*! - Compute mapping between indices and information corresponding to these indices - \param [in] indices indices a proc has -*/ -template -void CClientClientDHTTemplate::computeIndexInfoMapping(const CArray& indices) -{ - int nbLvl = this->getNbLevel(); - computeIndexInfoMappingLevel(indices, this->internalComm_, nbLvl-1); -} - -/*! - Compute mapping between indices and information corresponding to these indices -for each level of hierarchical DHT. Recursive function - \param [in] indices indices a proc has - \param [in] commLevel communicator of current level - \param [in] level current level -*/ -template -void CClientClientDHTTemplate::computeIndexInfoMappingLevel(const CArray& indices, - const MPI_Comm& commLevel, - int level) -{ - int clientRank; - MPI_Comm_rank(commLevel,&clientRank); - int groupRankBegin = this->getGroupBegin()[level]; - int nbClient = this->getNbInGroup()[level]; - std::vector hashedIndex; - computeHashIndex(hashedIndex, nbClient); - - size_t ssize = indices.numElements(), hashedVal; - - std::vector::const_iterator itbClientHash = hashedIndex.begin(), itClientHash, - iteClientHash = hashedIndex.end(); - std::vector sendBuff(nbClient,0); - std::vector sendNbIndexBuff(nbClient,0); - - // Number of global index whose mapping server are on other clients - int nbIndexToSend = 0; - size_t index; - HashXIOS hashGlobalIndex; - std::unordered_map nbIndices; - nbIndices.rehash(std::ceil(ssize/nbIndices.max_load_factor())); - for (int i = 0; i < ssize; ++i) - { - index = indices(i); - if (0 == nbIndices.count(index)) - { - hashedVal = hashGlobalIndex(index); - itClientHash = std::upper_bound(itbClientHash, iteClientHash, hashedVal); - int indexClient = std::distance(itbClientHash, itClientHash)-1; - ++sendNbIndexBuff[indexClient]; - nbIndices[index] = 1; - } - } - - std::unordered_map client2ClientIndex; - for (int idx = 0; idx < nbClient; ++idx) - { - if (0 != sendNbIndexBuff[idx]) - { - client2ClientIndex[idx+groupRankBegin] = new unsigned long [sendNbIndexBuff[idx]]; - nbIndexToSend += sendNbIndexBuff[idx]; - sendBuff[idx] = 1; - sendNbIndexBuff[idx] = 0; - } - } - - for (int i = 0; i < ssize; ++i) - { - index = indices(i); - if (1 == nbIndices[index]) - { - hashedVal = hashGlobalIndex(index); - itClientHash = std::upper_bound(itbClientHash, iteClientHash, hashedVal); - int indexClient = std::distance(itbClientHash, itClientHash)-1; - client2ClientIndex[indexClient+groupRankBegin][sendNbIndexBuff[indexClient]] = index; - ++sendNbIndexBuff[indexClient]; - ++nbIndices[index]; - } - } - - std::vector recvRankClient, recvNbIndexClientCount; - sendRecvRank(level, sendBuff, sendNbIndexBuff, - recvRankClient, recvNbIndexClientCount); - - int recvNbIndexCount = 0; - for (int idx = 0; idx < recvNbIndexClientCount.size(); ++idx) - recvNbIndexCount += recvNbIndexClientCount[idx]; - - unsigned long* recvIndexBuff; - if (0 != recvNbIndexCount) - recvIndexBuff = new unsigned long[recvNbIndexCount]; - - std::vector request; - std::vector::iterator itbRecvIndex = recvRankClient.begin(), itRecvIndex, - iteRecvIndex = recvRankClient.end(), - itbRecvNbIndex = recvNbIndexClientCount.begin(), - itRecvNbIndex; - int currentIndex = 0; - int nbRecvClient = recvRankClient.size(); - for (int idx = 0; idx < nbRecvClient; ++idx) - { - if (0 != recvNbIndexClientCount[idx]) - recvIndexFromClients(recvRankClient[idx], recvIndexBuff+currentIndex, recvNbIndexClientCount[idx], commLevel, request); - currentIndex += recvNbIndexClientCount[idx]; - } - - std::unordered_map::iterator itbIndex = client2ClientIndex.begin(), itIndex, - iteIndex = client2ClientIndex.end(); - for (itIndex = itbIndex; itIndex != iteIndex; ++itIndex) - sendIndexToClients(itIndex->first, (itIndex->second), sendNbIndexBuff[itIndex->first-groupRankBegin], commLevel, request); - - std::vector status(request.size()); - MPI_Waitall(request.size(), &request[0], &status[0]); - - CArray* tmpGlobalIndex; - if (0 != recvNbIndexCount) - tmpGlobalIndex = new CArray(recvIndexBuff, shape(recvNbIndexCount), neverDeleteData); - else - tmpGlobalIndex = new CArray(); - - // OK, we go to the next level and do something recursive - if (0 < level) - { - --level; - computeIndexInfoMappingLevel(*tmpGlobalIndex, this->internalComm_, level); - } - else // Now, we are in the last level where necessary mappings are. - indexToInfoMappingLevel_= (index2InfoMapping_); - - typename Index2VectorInfoTypeMap::const_iterator iteIndexToInfoMap = indexToInfoMappingLevel_.end(), itIndexToInfoMap; - std::vector sendNbIndexOnReturn(nbRecvClient,0); - currentIndex = 0; - for (int idx = 0; idx < nbRecvClient; ++idx) - { - for (int i = 0; i < recvNbIndexClientCount[idx]; ++i) - { - itIndexToInfoMap = indexToInfoMappingLevel_.find(*(recvIndexBuff+currentIndex+i)); - if (iteIndexToInfoMap != itIndexToInfoMap) - sendNbIndexOnReturn[idx] += itIndexToInfoMap->second.size(); - } - currentIndex += recvNbIndexClientCount[idx]; - } - - std::vector recvRankOnReturn(client2ClientIndex.size()); - std::vector recvNbIndexOnReturn(client2ClientIndex.size(),0); - int indexIndex = 0; - for (itIndex = itbIndex; itIndex != iteIndex; ++itIndex, ++indexIndex) - { - recvRankOnReturn[indexIndex] = itIndex->first; - } - sendRecvOnReturn(recvRankClient, sendNbIndexOnReturn, - recvRankOnReturn, recvNbIndexOnReturn); - - int recvNbIndexCountOnReturn = 0; - for (int idx = 0; idx < recvRankOnReturn.size(); ++idx) - recvNbIndexCountOnReturn += recvNbIndexOnReturn[idx]; - - unsigned long* recvIndexBuffOnReturn; - unsigned char* recvInfoBuffOnReturn; - if (0 != recvNbIndexCountOnReturn) - { - recvIndexBuffOnReturn = new unsigned long[recvNbIndexCountOnReturn]; - recvInfoBuffOnReturn = new unsigned char[recvNbIndexCountOnReturn*ProcessDHTElement::typeSize()]; - } - - std::vector requestOnReturn; - currentIndex = 0; - for (int idx = 0; idx < recvRankOnReturn.size(); ++idx) - { - if (0 != recvNbIndexOnReturn[idx]) - { - recvIndexFromClients(recvRankOnReturn[idx], recvIndexBuffOnReturn+currentIndex, recvNbIndexOnReturn[idx], commLevel, requestOnReturn); - recvInfoFromClients(recvRankOnReturn[idx], - recvInfoBuffOnReturn+currentIndex*ProcessDHTElement::typeSize(), - recvNbIndexOnReturn[idx]*ProcessDHTElement::typeSize(), - commLevel, requestOnReturn); - } - currentIndex += recvNbIndexOnReturn[idx]; - } - - std::unordered_map client2ClientInfoOnReturn; - std::unordered_map client2ClientIndexOnReturn; - currentIndex = 0; - for (int idx = 0; idx < nbRecvClient; ++idx) - { - if (0 != sendNbIndexOnReturn[idx]) - { - int rank = recvRankClient[idx]; - client2ClientIndexOnReturn[rank] = new unsigned long [sendNbIndexOnReturn[idx]]; - client2ClientInfoOnReturn[rank] = new unsigned char [sendNbIndexOnReturn[idx]*ProcessDHTElement::typeSize()]; - unsigned char* tmpInfoPtr = client2ClientInfoOnReturn[rank]; - int infoIndex = 0; - int nb = 0; - for (int i = 0; i < recvNbIndexClientCount[idx]; ++i) - { - itIndexToInfoMap = indexToInfoMappingLevel_.find(*(recvIndexBuff+currentIndex+i)); - if (iteIndexToInfoMap != itIndexToInfoMap) - { - const std::vector& infoTmp = itIndexToInfoMap->second; - for (int k = 0; k < infoTmp.size(); ++k) - { - client2ClientIndexOnReturn[rank][nb] = itIndexToInfoMap->first; - ProcessDHTElement::packElement(infoTmp[k], tmpInfoPtr, infoIndex); - ++nb; - } - } - } - - sendIndexToClients(rank, client2ClientIndexOnReturn[rank], - sendNbIndexOnReturn[idx], commLevel, requestOnReturn); - sendInfoToClients(rank, client2ClientInfoOnReturn[rank], - sendNbIndexOnReturn[idx]*ProcessDHTElement::typeSize(), commLevel, requestOnReturn); - } - currentIndex += recvNbIndexClientCount[idx]; - } - - std::vector statusOnReturn(requestOnReturn.size()); - MPI_Waitall(requestOnReturn.size(), &requestOnReturn[0], &statusOnReturn[0]); - - Index2VectorInfoTypeMap indexToInfoMapping; - indexToInfoMapping.rehash(std::ceil(recvNbIndexCountOnReturn/indexToInfoMapping.max_load_factor())); - int infoIndex = 0; - InfoType unpackedInfo; - for (int idx = 0; idx < recvNbIndexCountOnReturn; ++idx) - { - ProcessDHTElement::unpackElement(unpackedInfo, recvInfoBuffOnReturn, infoIndex); - indexToInfoMapping[recvIndexBuffOnReturn[idx]].push_back(unpackedInfo); - } - - indexToInfoMappingLevel_.swap(indexToInfoMapping); - if (0 != recvNbIndexCount) delete [] recvIndexBuff; - for (std::unordered_map::const_iterator it = client2ClientIndex.begin(); - it != client2ClientIndex.end(); ++it) - delete [] it->second; - delete tmpGlobalIndex; - - if (0 != recvNbIndexCountOnReturn) - { - delete [] recvIndexBuffOnReturn; - delete [] recvInfoBuffOnReturn; - } - - for (std::unordered_map::const_iterator it = client2ClientInfoOnReturn.begin(); - it != client2ClientInfoOnReturn.end(); ++it) - delete [] it->second; - - for (std::unordered_map::const_iterator it = client2ClientIndexOnReturn.begin(); - it != client2ClientIndexOnReturn.end(); ++it) - delete [] it->second; -} - -/*! - Compute the hash index distribution of whole size_t space then each client will have a range of this distribution -*/ -template -void CClientClientDHTTemplate::computeHashIndex(std::vector& hashedIndex, int nbClient) -{ - // Compute range of hash index for each client - hashedIndex.resize(nbClient+1); - size_t nbHashIndexMax = std::numeric_limits::max(); - size_t nbHashIndex; - hashedIndex[0] = 0; - for (int i = 1; i < nbClient; ++i) - { - nbHashIndex = nbHashIndexMax / nbClient; - if (i < (nbHashIndexMax%nbClient)) ++nbHashIndex; - hashedIndex[i] = hashedIndex[i-1] + nbHashIndex; - } - hashedIndex[nbClient] = nbHashIndexMax; -} - -/*! - Compute distribution of global index for servers - Each client already holds a piece of information and its associated index. -This information will be redistributed among processes by projecting indices into size_t space, -the corresponding information will be also distributed on size_t space. -After the redistribution, each client holds rearranged index and its corresponding information. - \param [in] indexInfoMap index and its corresponding info (usually server index) - \param [in] commLevel communicator of current level - \param [in] level current level -*/ -template -void CClientClientDHTTemplate::computeDistributedIndex(const Index2VectorInfoTypeMap& indexInfoMap, - const MPI_Comm& commLevel, - int level) -{ - int clientRank; - MPI_Comm_rank(commLevel,&clientRank); - computeSendRecvRank(level, clientRank); - - int groupRankBegin = this->getGroupBegin()[level]; - int nbClient = this->getNbInGroup()[level]; - std::vector hashedIndex; - computeHashIndex(hashedIndex, nbClient); - - std::vector sendBuff(nbClient,0); - std::vector sendNbIndexBuff(nbClient,0); - std::vector::const_iterator itbClientHash = hashedIndex.begin(), itClientHash, - iteClientHash = hashedIndex.end(); - typename Index2VectorInfoTypeMap::const_iterator itb = indexInfoMap.begin(),it, - ite = indexInfoMap.end(); - HashXIOS hashGlobalIndex; - - // Compute size of sending and receving buffer - for (it = itb; it != ite; ++it) - { - size_t hashIndex = hashGlobalIndex(it->first); - itClientHash = std::upper_bound(itbClientHash, iteClientHash, hashIndex); - int indexClient = std::distance(itbClientHash, itClientHash)-1; - sendNbIndexBuff[indexClient] += it->second.size(); - } - - std::unordered_map client2ClientIndex; - std::unordered_map client2ClientInfo; - for (int idx = 0; idx < nbClient; ++idx) - { - if (0 != sendNbIndexBuff[idx]) - { - client2ClientIndex[idx+groupRankBegin] = new unsigned long [sendNbIndexBuff[idx]]; - client2ClientInfo[idx+groupRankBegin] = new unsigned char [sendNbIndexBuff[idx]*ProcessDHTElement::typeSize()]; - sendNbIndexBuff[idx] = 0; - sendBuff[idx] = 1; - } - } - - std::vector sendNbInfo(nbClient,0); - for (it = itb; it != ite; ++it) - { - const std::vector& infoTmp = it->second; - size_t hashIndex = hashGlobalIndex(it->first); - itClientHash = std::upper_bound(itbClientHash, iteClientHash, hashIndex); - int indexClient = std::distance(itbClientHash, itClientHash)-1; - for (int idx = 0; idx < infoTmp.size(); ++idx) - { - client2ClientIndex[indexClient + groupRankBegin][sendNbIndexBuff[indexClient]] = it->first;; - // ProcessDHTElement::packElement(it->second, client2ClientInfo[indexClient + groupRankBegin], sendNbInfo[indexClient]); - ProcessDHTElement::packElement(infoTmp[idx], client2ClientInfo[indexClient + groupRankBegin], sendNbInfo[indexClient]); - ++sendNbIndexBuff[indexClient]; - } - } - - // Calculate from how many clients each client receive message. - // Calculate size of buffer for receiving message - std::vector recvRankClient, recvNbIndexClientCount; - sendRecvRank(level, sendBuff, sendNbIndexBuff, - recvRankClient, recvNbIndexClientCount); - - int recvNbIndexCount = 0; - for (int idx = 0; idx < recvNbIndexClientCount.size(); ++idx) - recvNbIndexCount += recvNbIndexClientCount[idx]; - - unsigned long* recvIndexBuff; - unsigned char* recvInfoBuff; - if (0 != recvNbIndexCount) - { - recvIndexBuff = new unsigned long[recvNbIndexCount]; - recvInfoBuff = new unsigned char[recvNbIndexCount*ProcessDHTElement::typeSize()]; - } - - // If a client holds information about index and the corresponding which don't belong to it, - // it will send a message to the correct clients. - // Contents of the message are index and its corresponding informatioin - std::vector request; - int currentIndex = 0; - int nbRecvClient = recvRankClient.size(); - for (int idx = 0; idx < nbRecvClient; ++idx) - { - if (0 != recvNbIndexClientCount[idx]) - { - recvIndexFromClients(recvRankClient[idx], recvIndexBuff+currentIndex, recvNbIndexClientCount[idx], commLevel, request); - recvInfoFromClients(recvRankClient[idx], - recvInfoBuff+currentIndex*ProcessDHTElement::typeSize(), - recvNbIndexClientCount[idx]*ProcessDHTElement::typeSize(), - commLevel, request); - } - currentIndex += recvNbIndexClientCount[idx]; - } - - std::unordered_map::iterator itbIndex = client2ClientIndex.begin(), itIndex, - iteIndex = client2ClientIndex.end(); - for (itIndex = itbIndex; itIndex != iteIndex; ++itIndex) - sendIndexToClients(itIndex->first, itIndex->second, sendNbIndexBuff[itIndex->first-groupRankBegin], commLevel, request); - std::unordered_map::iterator itbInfo = client2ClientInfo.begin(), itInfo, - iteInfo = client2ClientInfo.end(); - for (itInfo = itbInfo; itInfo != iteInfo; ++itInfo) - sendInfoToClients(itInfo->first, itInfo->second, sendNbInfo[itInfo->first-groupRankBegin], commLevel, request); - - std::vector status(request.size()); - MPI_Waitall(request.size(), &request[0], &status[0]); - - Index2VectorInfoTypeMap indexToInfoMapping; - indexToInfoMapping.rehash(std::ceil(currentIndex/indexToInfoMapping.max_load_factor())); - currentIndex = 0; - InfoType infoValue; - int infoIndex = 0; - unsigned char* infoBuff = recvInfoBuff; - for (int idx = 0; idx < nbRecvClient; ++idx) - { - size_t index; - int count = recvNbIndexClientCount[idx]; - for (int i = 0; i < count; ++i) - { - ProcessDHTElement::unpackElement(infoValue, infoBuff, infoIndex); - indexToInfoMapping[*(recvIndexBuff+currentIndex+i)].push_back(infoValue); - } - currentIndex += count; - } - - if (0 != recvNbIndexCount) - { - delete [] recvIndexBuff; - delete [] recvInfoBuff; - } - for (std::unordered_map::const_iterator it = client2ClientInfo.begin(); - it != client2ClientInfo.end(); ++it) - delete [] it->second; - - for (std::unordered_map::const_iterator it = client2ClientIndex.begin(); - it != client2ClientIndex.end(); ++it) - delete [] it->second; - - // Ok, now do something recursive - if (0 < level) - { - --level; - computeDistributedIndex(indexToInfoMapping, this->internalComm_, level); - } - else - index2InfoMapping_.swap(indexToInfoMapping); -} - -/*! - Send message containing index to clients - \param [in] clientDestRank rank of destination client - \param [in] indices index to send - \param [in] indiceSize size of index array to send - \param [in] clientIntraComm communication group of client - \param [in] requestSendIndex list of sending request -*/ -template -void CClientClientDHTTemplate::sendIndexToClients(int clientDestRank, size_t* indices, size_t indiceSize, - const MPI_Comm& clientIntraComm, - std::vector& requestSendIndex) -{ - MPI_Request request; - requestSendIndex.push_back(request); - MPI_Isend(indices, indiceSize, MPI_UNSIGNED_LONG, - clientDestRank, MPI_DHT_INDEX, clientIntraComm, &(requestSendIndex.back())); -} - -/*! - Receive message containing index to clients - \param [in] clientDestRank rank of destination client - \param [in] indices index to send - \param [in] clientIntraComm communication group of client - \param [in] requestRecvIndex list of receiving request -*/ -template -void CClientClientDHTTemplate::recvIndexFromClients(int clientSrcRank, size_t* indices, size_t indiceSize, - const MPI_Comm& clientIntraComm, - std::vector& requestRecvIndex) -{ - MPI_Request request; - requestRecvIndex.push_back(request); - MPI_Irecv(indices, indiceSize, MPI_UNSIGNED_LONG, - clientSrcRank, MPI_DHT_INDEX, clientIntraComm, &(requestRecvIndex.back())); -} - -/*! - Send message containing information to clients - \param [in] clientDestRank rank of destination client - \param [in] info info array to send - \param [in] infoSize info array size to send - \param [in] clientIntraComm communication group of client - \param [in] requestSendInfo list of sending request -*/ -template -void CClientClientDHTTemplate::sendInfoToClients(int clientDestRank, unsigned char* info, int infoSize, - const MPI_Comm& clientIntraComm, - std::vector& requestSendInfo) -{ - MPI_Request request; - requestSendInfo.push_back(request); - - MPI_Isend(info, infoSize, MPI_CHAR, - clientDestRank, MPI_DHT_INFO, clientIntraComm, &(requestSendInfo.back())); -} - -/*! - Receive message containing information from other clients - \param [in] clientDestRank rank of destination client - \param [in] info info array to receive - \param [in] infoSize info array size to receive - \param [in] clientIntraComm communication group of client - \param [in] requestRecvInfo list of sending request -*/ -template -void CClientClientDHTTemplate::recvInfoFromClients(int clientSrcRank, unsigned char* info, int infoSize, - const MPI_Comm& clientIntraComm, - std::vector& requestRecvInfo) -{ - MPI_Request request; - requestRecvInfo.push_back(request); - - MPI_Irecv(info, infoSize, MPI_CHAR, - clientSrcRank, MPI_DHT_INFO, clientIntraComm, &(requestRecvInfo.back())); -} - -/*! - Compute how many processes one process needs to send to and from how many processes it will receive. - This computation is only based on hierachical structure of distributed hash table (e.x: number of processes) -*/ -template -void CClientClientDHTTemplate::computeSendRecvRank(int level, int rank) -{ - int groupBegin = this->getGroupBegin()[level]; - int nbInGroup = this->getNbInGroup()[level]; - const std::vector& groupParentBegin = this->getGroupParentsBegin()[level]; - const std::vector& nbInGroupParents = this->getNbInGroupParents()[level]; - - std::vector hashedIndexGroup; - computeHashIndex(hashedIndexGroup, nbInGroup); - size_t a = hashedIndexGroup[rank-groupBegin]; - size_t b = hashedIndexGroup[rank-groupBegin+1]-1; - - int currentGroup, offset; - size_t e,f; - - // Do a simple math [a,b) intersect [c,d) - for (int idx = 0; idx < groupParentBegin.size(); ++idx) - { - std::vector hashedIndexGroupParent; - int nbInGroupParent = nbInGroupParents[idx]; - if (0 != nbInGroupParent) - computeHashIndex(hashedIndexGroupParent, nbInGroupParent); - for (int i = 0; i < nbInGroupParent; ++i) - { - size_t c = hashedIndexGroupParent[i]; - size_t d = hashedIndexGroupParent[i+1]-1; - - if (!((d < a) || (b ::const_iterator itbHashGroup = hashedIndexGroup.begin(), itHashGroup, - iteHashGroup = hashedIndexGroup.end(); - itHashGroup = std::lower_bound(itbHashGroup, iteHashGroup, e+1); - int begin = std::distance(itbHashGroup, itHashGroup)-1; - itHashGroup = std::upper_bound(itbHashGroup, iteHashGroup, f); - int end = std::distance(itbHashGroup, itHashGroup) -1; - sendRank_[level].resize(end-begin+1); - for (int idx = 0; idx < sendRank_[level].size(); ++idx) sendRank_[level][idx] = idx + groupBegin + begin; -} - -/*! - Compute number of clients as well as corresponding number of elements each client will receive on returning searching result - \param [in] sendNbRank Rank of clients to send to - \param [in] sendNbElements Number of elements each client to send to - \param [in] receiveNbRank Rank of clients to receive from - \param [out] recvNbElements Number of elements each client to send to -*/ -template -void CClientClientDHTTemplate::sendRecvOnReturn(const std::vector& sendNbRank, std::vector& sendNbElements, - const std::vector& recvNbRank, std::vector& recvNbElements) -{ - recvNbElements.resize(recvNbRank.size()); - std::vector request(sendNbRank.size()+recvNbRank.size()); - std::vector requestStatus(sendNbRank.size()+recvNbRank.size()); - - int nRequest = 0; - for (int idx = 0; idx < recvNbRank.size(); ++idx) - { - MPI_Irecv(&recvNbElements[0]+idx, 1, MPI_INT, - recvNbRank[idx], MPI_DHT_INDEX_1, this->internalComm_, &request[nRequest]); - ++nRequest; - } - - for (int idx = 0; idx < sendNbRank.size(); ++idx) - { - MPI_Isend(&sendNbElements[0]+idx, 1, MPI_INT, - sendNbRank[idx], MPI_DHT_INDEX_1, this->internalComm_, &request[nRequest]); - ++nRequest; - } - - MPI_Waitall(sendNbRank.size()+recvNbRank.size(), &request[0], &requestStatus[0]); -} - -/*! - Send and receive number of process each process need to listen to as well as number - of index it will receive during the initalization phase - \param [in] level current level - \param [in] sendNbRank Rank of clients to send to - \param [in] sendNbElements Number of elements each client to send to - \param [out] receiveNbRank Rank of clients to receive from - \param [out] recvNbElements Number of elements each client to send to -*/ -template -void CClientClientDHTTemplate::sendRecvRank(int level, - const std::vector& sendNbRank, const std::vector& sendNbElements, - std::vector& recvNbRank, std::vector& recvNbElements) -{ - int groupBegin = this->getGroupBegin()[level]; - - int offSet = 0; - std::vector& sendRank = sendRank_[level]; - std::vector& recvRank = recvRank_[level]; - int sendBuffSize = sendRank.size(); - std::vector sendBuff(sendBuffSize*2); - int recvBuffSize = recvRank.size(); - std::vector recvBuff(recvBuffSize*2,0); - - std::vector request(sendBuffSize+recvBuffSize); - std::vector requestStatus(sendBuffSize+recvBuffSize); - - int nRequest = 0; - for (int idx = 0; idx < recvBuffSize; ++idx) - { - MPI_Irecv(&recvBuff[0]+2*idx, 2, MPI_INT, - recvRank[idx], MPI_DHT_INDEX_0, this->internalComm_, &request[nRequest]); - ++nRequest; - } - - for (int idx = 0; idx < sendBuffSize; ++idx) - { - offSet = sendRank[idx]-groupBegin; - sendBuff[idx*2] = sendNbRank[offSet]; - sendBuff[idx*2+1] = sendNbElements[offSet]; - } - - for (int idx = 0; idx < sendBuffSize; ++idx) - { - MPI_Isend(&sendBuff[idx*2], 2, MPI_INT, - sendRank[idx], MPI_DHT_INDEX_0, this->internalComm_, &request[nRequest]); - ++nRequest; - } - - MPI_Waitall(sendBuffSize+recvBuffSize, &request[0], &requestStatus[0]); - int nbRecvRank = 0, nbRecvElements = 0; - recvNbRank.clear(); - recvNbElements.clear(); - for (int idx = 0; idx < recvBuffSize; ++idx) - { - if (0 != recvBuff[2*idx]) - { - recvNbRank.push_back(recvRank[idx]); - recvNbElements.push_back(recvBuff[2*idx+1]); - } - } -} - -} diff --git a/xios_2311_src/src/distribution/client_server_mapping.cpp b/xios_2311_src/src/distribution/client_server_mapping.cpp deleted file mode 100644 index 8fd97e56..00000000 --- a/xios_2311_src/src/distribution/client_server_mapping.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/*! - \file client_server_mapping.hpp - \author Ha NGUYEN - \since 04 Feb 2015 - \date 09 Mars 2015 - - \brief Mapping between index client and server. - */ -#include "client_server_mapping.hpp" - -namespace xios { - -CClientServerMapping::CClientServerMapping() - : indexGlobalOnServer_() -{ -} - -CClientServerMapping::~CClientServerMapping() -{ -} - -/*! - Compute how many clients each server will receive data from - On client can send data to several servers as well as one server can receive data originated from -some clients. In order to write data correctly, each server must know from how many clients it receives data - \param [in] nbServer number of servers - \param [in] nClient number of clients - \param [in] clientIntraComm MPI communication of clients - \param [in] connectedServerRank Rank of servers connected to the current client -*/ -std::map CClientServerMapping::computeConnectedClients(int nbServer, int nbClient, - MPI_Comm& clientIntraComm, - const std::vector& connectedServerRank) -{ - std::map connectedClients; // number of clients connected to a server - - std::vector::const_iterator itbVec, iteVec, it; - itbVec = it = connectedServerRank.begin(); - iteVec = connectedServerRank.end(); - - std::vector connectedServer; - std::vector isConnected(nbServer,false); - - for (it = itbVec; it != iteVec; ++it) - { - for (int serverNum = 0; serverNum < nbServer; ++serverNum) - if (*it == serverNum) isConnected[serverNum] = true; - } - - for(int serverNum = 0; serverNum clientRes(0,nbServer); - - for(int n=0;n - -namespace xios { - -/*! - \class CClientServerMapping - This class computes index of data which are sent to server as well as index of data -on server side. -*/ -class CClientServerMapping -{ -public: - typedef std::unordered_map > GlobalIndexMap; - public: - /** Default constructor */ - CClientServerMapping(); - - /** Default destructor */ - virtual ~CClientServerMapping(); - - // Only need global index on client to calculate mapping (supposed client has info of distribution) - virtual void computeServerIndexMapping(const CArray& globalIndexOnClient, int nbServer) = 0; - - static std::map computeConnectedClients(int nbServer, int nbClient, - MPI_Comm& clientIntraComm, - const std::vector& connectedServerRank); - - const GlobalIndexMap& getGlobalIndexOnServer() const; - - GlobalIndexMap& getGlobalIndexOnServer(); - - protected: - //! Global index of data on SERVER, which are calculated by client(s) - GlobalIndexMap indexGlobalOnServer_; -}; - -} // namespace xios -#endif // __XIOS_CLIENT_SERVER_MAPPING_HPP__ diff --git a/xios_2311_src/src/distribution/client_server_mapping_distributed.cpp b/xios_2311_src/src/distribution/client_server_mapping_distributed.cpp deleted file mode 100644 index c93d85ba..00000000 --- a/xios_2311_src/src/distribution/client_server_mapping_distributed.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! - \file client_server_mapping.hpp - \author Ha NGUYEN - \since 27 Feb 2015 - \date 16 Mars 2016 - - \brief Mapping between index client and server. - Clients pre-calculate all information of server distribution. - */ -#include "client_server_mapping_distributed.hpp" -#include -#include -#include "utils.hpp" -#include "mpi_tag.hpp" -#include "context.hpp" -#include "context_client.hpp" - -namespace xios -{ - -CClientServerMappingDistributed::CClientServerMappingDistributed(const std::unordered_map& globalIndexOfServer, - const MPI_Comm& clientIntraComm, bool isDataDistributed) - : CClientServerMapping(), ccDHT_(0) -{ - ccDHT_ = new CClientClientDHTInt(globalIndexOfServer, - clientIntraComm); -} - -CClientServerMappingDistributed::~CClientServerMappingDistributed() -{ - if (0 != ccDHT_) delete ccDHT_; -} - -/*! - Compute mapping global index of server which client sends to. - \param [in] globalIndexOnClient global index client has - \param [in] nbServer size of server's intracomm -*/ -void CClientServerMappingDistributed::computeServerIndexMapping(const CArray& globalIndexOnClient, int nbServer) -{ - - ccDHT_->computeIndexInfoMapping(globalIndexOnClient); - const CClientClientDHTInt::Index2VectorInfoTypeMap& infoIndexMap = (ccDHT_->getInfoIndexMap()); - CClientClientDHTInt::Index2VectorInfoTypeMap::const_iterator itb = infoIndexMap.begin(), ite = infoIndexMap.end(), it; - std::vector nbInfoIndex(std::max(ccDHT_->getNbClient(),nbServer),0); - - for (it = itb; it != ite; ++it) - { - ++nbInfoIndex[it->second[0]]; - } - - for (int idx = 0; idx < nbInfoIndex.size(); ++idx) - { - if (0 != nbInfoIndex[idx]) - { - indexGlobalOnServer_[idx].resize(nbInfoIndex[idx]); - nbInfoIndex[idx] = 0; - } - } - - for (it = itb; it != ite; ++it) - { - indexGlobalOnServer_[it->second[0]][nbInfoIndex[it->second[0]]] = (it->first); - ++nbInfoIndex[it->second[0]]; - } -} - -} diff --git a/xios_2311_src/src/distribution/client_server_mapping_distributed.hpp b/xios_2311_src/src/distribution/client_server_mapping_distributed.hpp deleted file mode 100644 index a829177c..00000000 --- a/xios_2311_src/src/distribution/client_server_mapping_distributed.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/*! - \file client_server_mapping.hpp - \author Ha NGUYEN - \since 27 Feb 2015 - \date 09 Mars 2015 - - \brief Mapping between index client and server. - Clients pre-calculate all information of server distribution. - */ - -#ifndef __XIOS_CLIENT_SERVER_MAPPING_DISTRIBUTED_HPP__ -#define __XIOS_CLIENT_SERVER_MAPPING_DISTRIBUTED_HPP__ - -#include -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "mpi.hpp" -#include -#include "client_client_dht_template.hpp" - -namespace xios -{ -/*! - \class CClientServerMappingDistributed - This class computes index of data which are sent to server as well as index of data -on server side with a distributed alogrithm. Each client has a piece of information about the distribution -of servers. To find out all these info, first of all, all client join a discovering process in which each client -announces the others about the info they have as well as demand others info they are lacked of. After this process, -each client has enough info to decide to which client it need to send a demand for corresponding server of a global index. -The alogrithm depends on hashed index. -*/ -class CClientServerMappingDistributed : public CClientServerMapping -{ - public: - /** Default constructor */ - CClientServerMappingDistributed(const std::unordered_map& globalIndexOfServer, - const MPI_Comm& clientIntraComm, - bool isDataDistributed = true); - - virtual void computeServerIndexMapping(const CArray& globalIndexOnClientSendToServer, int nbServer); - - /** Default destructor */ - virtual ~CClientServerMappingDistributed(); - - protected: - CClientClientDHTInt* ccDHT_; -}; - -} // namespace xios -#endif // __XIOS_CLIENT_SERVER_MAPPING_DISTRIBUTED_HPP__ diff --git a/xios_2311_src/src/distribution/dht_auto_indexing.cpp b/xios_2311_src/src/distribution/dht_auto_indexing.cpp deleted file mode 100644 index fa1fb76d..00000000 --- a/xios_2311_src/src/distribution/dht_auto_indexing.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/*! - \file dht_auto_indexing.cpp - \author Ha NGUYEN - \since 6 Jul 2016 - \date 6 Jul 2016 - - \brief Auto assign global index across processes. - */ -#include "dht_auto_indexing.hpp" - -namespace xios -{ - - CDHTAutoIndexing::~CDHTAutoIndexing() - { - } - - /*! - \param [in] - \param [in] - */ - - CDHTAutoIndexing::CDHTAutoIndexing(const CArray& hashValue, - const MPI_Comm& clientIntraComm) - : CClientClientDHTTemplate(clientIntraComm) - { - - nbIndexOnProc_ = hashValue.size(); - size_t nbIndexAccum; - MPI_Scan(&nbIndexOnProc_, &nbIndexAccum, 1, MPI_UNSIGNED_LONG, MPI_SUM, clientIntraComm); - - // Broadcasting the total number of indexes - int rank, size; - MPI_Comm_rank(clientIntraComm, &rank); - MPI_Comm_size(clientIntraComm, &size); - if (rank == (size-1)) nbIndexesGlobal_ = nbIndexAccum; - MPI_Bcast(&nbIndexesGlobal_, 1, MPI_UNSIGNED_LONG, size-1, clientIntraComm); - - CArray::const_iterator itbIdx = hashValue.begin(), itIdx, - iteIdx = hashValue.end(); - - size_t idx = 0; - beginIndexOnProc_ = nbIndexAccum - nbIndexOnProc_; - globalIndex_.resize(nbIndexOnProc_); - for (itIdx = itbIdx; itIdx != iteIdx; ++itIdx) - { - globalIndex_[idx] = beginIndexOnProc_ + idx; - ++idx ; - } - } - - /*! - * \fn void CDHTAutoIndexing::CDHTAutoIndexing(Index2VectorInfoTypeMap& hashInitMap, const MPI_Comm& clientIntraComm) - * Assigns a global index to unique input indexes. - * The returned map has unique indexes as a key and global indexes as a mapped value. - * \param [in] hashInitMap map> is a map of unique indexes. - * \param [in] clientIntraComm - */ - CDHTAutoIndexing::CDHTAutoIndexing(Index2VectorInfoTypeMap& hashInitMap, - const MPI_Comm& clientIntraComm) - : CClientClientDHTTemplate(clientIntraComm) - { - - nbIndexOnProc_ = hashInitMap.size(); - size_t nbIndexAccum; - MPI_Scan(&nbIndexOnProc_, &nbIndexAccum, 1, MPI_UNSIGNED_LONG, MPI_SUM, clientIntraComm); - - int rank, size; - MPI_Comm_rank(clientIntraComm, &rank); - MPI_Comm_size(clientIntraComm, &size); - if (rank == (size-1)) nbIndexesGlobal_ = nbIndexAccum; - MPI_Bcast(&nbIndexesGlobal_, 1, MPI_UNSIGNED_LONG, size-1, clientIntraComm); - - Index2VectorInfoTypeMap::iterator itbIdx = hashInitMap.begin(), itIdx, - iteIdx = hashInitMap.end(); - size_t idx = 0; - beginIndexOnProc_ = nbIndexAccum - nbIndexOnProc_; - globalIndex_.resize(nbIndexOnProc_); - for (itIdx = itbIdx; itIdx != iteIdx; ++itIdx) - { -// (itIdx->second)[0] = beginIndexOnProc_ + idx; - (itIdx->second)[1] = beginIndexOnProc_ + idx; - globalIndex_[idx] = beginIndexOnProc_ + idx; - ++idx ; - } - } - - /*! - * \fn size_t CDHTAutoIndexing::getNbIndexesGlobal() const - * Returns the total number of global indexes. - */ - size_t CDHTAutoIndexing::getNbIndexesGlobal() const - { - return nbIndexesGlobal_; - } - - /*! - * \fn size_t CDHTAutoIndexing::getIndexStart() const - * Returns the starting global index for a proc. - */ - size_t CDHTAutoIndexing::getIndexStart() const - { - return beginIndexOnProc_; - } - - /*! - * \fn size_t CDHTAutoIndexing::getIndexCount() const - * Returns the number of global indexes on a proc. - */ - size_t CDHTAutoIndexing::getIndexCount() const - { - return nbIndexOnProc_; - } - -} diff --git a/xios_2311_src/src/distribution/dht_auto_indexing.hpp b/xios_2311_src/src/distribution/dht_auto_indexing.hpp deleted file mode 100644 index 5a962adc..00000000 --- a/xios_2311_src/src/distribution/dht_auto_indexing.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/*! - \file dht_auto_indexing.hpp - \author Ha NGUYEN - \since 6 Jul 2016 - \date 6 Jul 2016 - - \brief Auto assign global index across processes. - */ - -#ifndef __XIOS_DHT_AUTO_INDEXING_HPP__ -#define __XIOS_DHT_AUTO_INDEXING_HPP__ - -#include "client_client_dht_template.hpp" - -namespace xios -{ - -/*! - \class CDHTAutoIndexing - . -*/ -class CDHTAutoIndexing: public CClientClientDHTTemplate -{ - public: - - CDHTAutoIndexing(const CArray& hashValue, - const MPI_Comm& clientIntraComm); - - CDHTAutoIndexing(Index2VectorInfoTypeMap& hashInitMap, - const MPI_Comm& clientIntraComm); - - size_t getNbIndexesGlobal() const; - size_t getIndexStart() const; - size_t getIndexCount() const; - - /** Default destructor */ - virtual ~CDHTAutoIndexing(); - - protected: - std::vector globalIndex_; - size_t nbIndexesGlobal_; - size_t nbIndexOnProc_ ; - size_t beginIndexOnProc_ ; -}; - -} // namespace xios -#endif // __XIOS_DHT_AUTO_INDEXING_HPP__ diff --git a/xios_2311_src/src/distribution/dht_data_types.hpp b/xios_2311_src/src/distribution/dht_data_types.hpp deleted file mode 100644 index 6d09f3ef..00000000 --- a/xios_2311_src/src/distribution/dht_data_types.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/*! - \file dht_data_types.hpp - \author Ha NGUYEN - \since 17 Mars 2016 - \date 17 Mars 2016 - - \brief Customized data type for dht - */ - -#ifndef __XIOS_DHT_DATATYPES_HPP__ -#define __XIOS_DHT_DATATYPES_HPP__ - -#include "utils.hpp" - -namespace xios -{ -typedef std::pair PairIntInt; - -template -struct ProcessDHTElement -{ - typedef T Type; - static int typeSize() - { - return sizeof(Type); - } - - static void packElement(const T& inputElement, unsigned char* packedElement, int& index) - { - if (NULL == packedElement) index += sizeof(Type); - else - { - *(T *)(&packedElement[index]) = inputElement; - index+=sizeof(Type); - } - } - - static void unpackElement(T& outputElement, unsigned char* unpackedElement, int& index) - { - outputElement = *(Type*)(&unpackedElement[index]); - index+=sizeof(Type); - } -}; - -template<> -struct ProcessDHTElement -{ - typedef PairIntInt Type; - static int typeSize() - { - return (2*sizeof(int)); - } - - static void packElement(const PairIntInt& inputElement, unsigned char* packedElement, int& index) - { - if (NULL == packedElement) index +=(2*sizeof(int)); - else - { - *(int *)(&packedElement[index]) = inputElement.first; - index+=sizeof(int); - *(int *)(&packedElement[index]) = inputElement.second; - index+=sizeof(int); - } - } - - static void unpackElement(PairIntInt& outputElement, unsigned char* unpackedElement, int& index) - { - outputElement.first=*(int *)(&unpackedElement[index]); - index+=sizeof(int); - outputElement.second=*(int *)(&unpackedElement[index]); - index+=sizeof(int); - } -}; - -} - -#endif // __XIOS_DHT_DATATYPES_HPP__ diff --git a/xios_2311_src/src/distribution/distributed_view.cpp b/xios_2311_src/src/distribution/distributed_view.cpp deleted file mode 100755 index 4e539d42..00000000 --- a/xios_2311_src/src/distribution/distributed_view.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "element_view.hpp" -#include "element.hpp" -#include "distributed_view.hpp" - -namespace xios -{ - - CDistributedView::CDistributedView(shared_ptr parent, CElementView::type, const std::map>& indexView) - : globalIndex_(parent->globalIndex_), globalSize_(parent->globalSize_), localSize_(parent->localSize_) - { - for(auto& index : indexView) - { - index_[index.first].reference(index.second.copy()) ; - size_[index.first] = index.second.numElements() ; - } - } - - CDistributedView::CDistributedView(shared_ptr parent, CElementView::type, const std::map>& maskView) - : globalIndex_(parent->globalIndex_), globalSize_(parent->globalSize_), localSize_(parent->localSize_) - { - for(auto& it : maskView) - { - int rank = it.first ; - auto& mask = it.second ; - int size = mask.numElements() ; - auto& index = index_[rank] ; - index.resize(size) ; - int pos=0 ; - for(int i=0 ; i < size ; i++) - if (mask(i)) { index(pos) = i ; pos++ ; } - if (pos==0) index.resize(pos) ; - else index.resizeAndPreserve(pos) ; - size_[rank] = pos ; - } - } -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/distributed_view.hpp b/xios_2311_src/src/distribution/distributed_view.hpp deleted file mode 100755 index 9bb2d7d5..00000000 --- a/xios_2311_src/src/distribution/distributed_view.hpp +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef __DISTRIBUTED_VIEW_HPP__ -#define __DISTRIBUTED_VIEW_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "element_view.hpp" - -namespace xios -{ - class CDistributedElement; - - class CDistributedView : public CElementView - { - public: - - CDistributedView(shared_ptr parent, CElementView::type type, const std::map>& indexView) ; - CDistributedView(shared_ptr parent, CElementView::type type, const std::map>& maskView) ; - - std::map>& getIndex(void) { return index_ ;} - std::map>& getGlobalIndex(void) { return globalIndex_ ;} - std::map& getSize(void) { return size_ ;} - std::map& getLocalSize(void) { return localSize_ ;} - size_t getGlobalSize(void) { return globalSize_ ;} - - void getGlobalIndexView(map>& globalIndexView) - { - for(auto& it : globalIndex_) - { - int rank=it.first ; - auto& globalIndex = it.second; - auto& globalIndView = globalIndexView[rank] ; - auto& index = index_[rank] ; - auto& size = size_[rank] ; - auto& localSize = localSize_[rank] ; - globalIndView.resize(size) ; - int pos=0 ; - for(int i=0 ; i=0 && index(i)& globalIndex, size_t sliceIndex, size_t* sliceSize, shared_ptr* view, int pos) - { - // using map can be expensive, find an otherway later - auto& globalInd=globalIndex_[rank] ; - int localSize=globalInd.numElements() ; - auto& index=index_[rank] ; - int size=index.numElements() ; - - if (pos==0) - { - for(int i=0;i=0 && index(i)=0 && index(i)getGlobalIndex(rank, globalIndex, sliceIndex + globalInd(index(i))*sliceSize[pos], sliceSize, view , pos-1) ; - } - } - - - protected: - - std::map> index_ ; - std::map size_; - - std::map>& globalIndex_ ; - size_t& globalSize_ ; - std::map& localSize_ ; - - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/distribution.cpp b/xios_2311_src/src/distribution/distribution.cpp deleted file mode 100644 index 503b4b5b..00000000 --- a/xios_2311_src/src/distribution/distribution.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/*! - \file distribution.hpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 09 Feb 2015 - - \brief Index distribution on server side. - */ -#include "distribution.hpp" - -namespace xios { - -CDistribution::CDistribution(int rank, int dims, const CArray& globalIndex) - : rank_(rank), dims_(dims), globalIndex_(globalIndex.shape()) -{ - if (0 != globalIndex.numElements()) - globalIndex_ = globalIndex; -} - -const CArray& CDistribution:: getGlobalIndex() const -{ - return globalIndex_; -} - -CDistribution::~CDistribution() -{ /* Nothing to do */ } - -int CDistribution::getDims() const -{ - return dims_; -} - -int CDistribution::getRank() const -{ - return rank_; -} - -} // namespace xios diff --git a/xios_2311_src/src/distribution/distribution.hpp b/xios_2311_src/src/distribution/distribution.hpp deleted file mode 100644 index f7feceab..00000000 --- a/xios_2311_src/src/distribution/distribution.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/*! - \file distribution.hpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 09 Feb 2015 - - \brief Index distribution on server side. - */ -#ifndef __XIOS_DISTRIBUTION_HPP__ -#define __XIOS_DISTRIBUTION_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include - -namespace xios { -/*! - \class CDistribution - The parent class of CDistributionClient and CDistributionServer, which declares and defines -some basic methods and properties for its children. This class allows its descendants to calculate -distribution of index on client or server side. -*/ -class CDistribution -{ - public: - typedef std::unordered_map GlobalLocalMap; - - public: - /** Default constructor */ - CDistribution(int rank, int dims, const CArray& globalIndex = CArray()); - - /** Default destructor */ - virtual ~CDistribution(); - - int getDims() const; //! Get dimension size - int getRank() const; //! Get rank of current process - const CArray& getGlobalIndex() const; - - protected: - virtual void createGlobalIndex() {}; - - protected: - CArray globalIndex_; - int dims_; - int rank_; -}; - -} // namespace xios -#endif // __XIOS_DISTRIBUTION_HPP__ diff --git a/xios_2311_src/src/distribution/distribution_client.cpp b/xios_2311_src/src/distribution/distribution_client.cpp deleted file mode 100644 index 54674faf..00000000 --- a/xios_2311_src/src/distribution/distribution_client.cpp +++ /dev/null @@ -1,610 +0,0 @@ -/*! - \file distribution_client.cpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 09 Mars 2015 - - \brief Index distribution on client side. - */ -#include "distribution_client.hpp" - -namespace xios { - -CDistributionClient::CDistributionClient(int rank, CGrid* grid) - : CDistribution(rank, 0) - , axisDomainOrder_() - , nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_() - , dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_() - , gridMask_(), indexMap_() - , isDataDistributed_(true), axisNum_(0), domainNum_(0) - , localDataIndex_(), localMaskIndex_() - , globalLocalDataSendToServerMap_() - , infoIndex_(), isComputed_(false) - , elementLocalIndex_(), elementGlobalIndex_(), elementIndexData_() - , elementNLocal_(), elementNGlobal_() -{ - readDistributionInfo(grid); - createGlobalIndex(); -} - -CDistributionClient::~CDistributionClient() -{ /* Nothing to do */ } - -void CDistributionClient::partialClear() -{ - GlobalLocalMap void1 ; - GlobalLocalMap void2 ; - std::vector void3 ; - std::vector void4 ; - - globalLocalDataSendToServerMap_.swap(void1) ; - globalDataIndex_.swap(void2) ; - localDataIndex_.swap(void3); - localMaskIndex_.swap(void4) ; -} - -/*! - Read information of a grid to generate distribution. - Every grid is composed of several axis or/and domain(s). Their information are processed -stored and used to calculate index distribution between client and server - \param [in] grid Grid to read -*/ -void CDistributionClient::readDistributionInfo(CGrid* grid) -{ - std::vector domList = grid->getDomains(); - std::vector axisList = grid->getAxis(); - std::vector scalarList = grid->getScalars(); - CArray axisDomainOrder = grid->axis_domain_order; - - readDistributionInfo(domList, axisList, scalarList, axisDomainOrder); - - // Then check mask of grid - int gridDim = domList.size() * 2 + axisList.size(); - switch (gridDim) { - case 0: - gridMask_.resize(1); - gridMask_(0) = true; - break; - case 1: - if (!grid->mask_1d.isEmpty()) readGridMaskInfo(grid->mask_1d); - break; - case 2: - if (!grid->mask_2d.isEmpty()) readGridMaskInfo(grid->mask_2d); - break; - case 3: - if (!grid->mask_3d.isEmpty()) readGridMaskInfo(grid->mask_3d); - break; - case 4: - if (!grid->mask_4d.isEmpty()) readGridMaskInfo(grid->mask_4d); - break; - case 5: - if (!grid->mask_5d.isEmpty()) readGridMaskInfo(grid->mask_5d); - break; - case 6: - if (!grid->mask_6d.isEmpty()) readGridMaskInfo(grid->mask_6d); - break; - case 7: - if (!grid->mask_7d.isEmpty()) readGridMaskInfo(grid->mask_7d); - break; - default: - break; - } -} - -/*! - Read information from domain(s) and axis to generate distribution. - All information related to domain, e.g ibegin, jbegin, ni, nj, ni_glo, nj_glo -as well as related to axis, e.g dataNIndex, dataIndex will be stored to compute -the distribution between clients and servers. Till now, every data structure of domain has been kept -like before, e.g: data_n_index to make sure a compability, however, it should be changed? - \param [in] domList List of domains of grid - \param [in] axisList List of axis of grid - \param [in] scalarList List of scalar of grid - \param [in] axisDomainOrder order of axis and domain inside a grid. 2 if domain, 1 if axis and zero if scalar -// \param [in] gridMask Mask of grid, for now, keep it 3 dimension, but it needs changing -*/ -void CDistributionClient::readDistributionInfo(const std::vector& domList, - const std::vector& axisList, - const std::vector& scalarList, - const CArray& axisDomainOrder) -{ - domainNum_ = domList.size(); - axisNum_ = axisList.size(); - numElement_ = axisDomainOrder.numElements(); // Number of element, e.x: Axis, Domain - - axisDomainOrder_.resize(numElement_); - axisDomainOrder_ = axisDomainOrder; - - // Because domain and axis can be in any order (axis1, domain1, axis2, axis3, ) - // their position should be specified. In axisDomainOrder, domain == true, axis == false - int idx = 0; - indexMap_.resize(numElement_); - this->dims_ = numElement_; - for (int i = 0; i < numElement_; ++i) - { - indexMap_[i] = idx; - if (2 == axisDomainOrder(i)) - { - ++(this->dims_); - idx += 2; - } - else ++idx; - } - - // Size of each dimension (local and global) - nLocal_.resize(this->dims_); - nGlob_.resize(this->dims_); - nBeginLocal_.resize(this->dims_,0); - nBeginGlobal_.resize(this->dims_,0); - - // Data_n_index of domain or axis (For now, axis uses its size as data_n_index - dataNIndex_.resize(numElement_); - dataDims_.resize(numElement_); - dataBegin_.resize(this->dims_); - - // Data_*_index of each dimension - dataIndex_.resize(this->dims_); - infoIndex_.resize(this->dims_); - - // A trick to determine position of each domain in domainList - int domIndex = 0, axisIndex = 0, scalarIndex = 0; - idx = 0; - - elementLocalIndex_.resize(numElement_); - elementGlobalIndex_.resize(numElement_); - elementIndexData_.resize(numElement_); - elementNLocal_.resize(numElement_); - elementNGlobal_.resize(numElement_); - elementNLocal_[0] = 1; - elementNGlobal_[0] = 1; - size_t localSize = 1, globalSize = 1; - - isDataDistributed_ = false; - // Update all the vectors above - for (idx = 0; idx < numElement_; ++idx) - { - int eleDim = axisDomainOrder(idx); - elementNLocal_[idx] = localSize; - elementNGlobal_[idx] = globalSize; - - // If this is a domain - if (2 == eleDim) - { - // On the j axis - nLocal_.at(indexMap_[idx]+1) = domList[domIndex]->nj.getValue(); - nGlob_.at(indexMap_[idx]+1) = domList[domIndex]->nj_glo.getValue(); - nBeginLocal_.at(indexMap_[idx]+1) = 0; - nBeginGlobal_.at(indexMap_[idx]+1) = domList[domIndex]->jbegin; - - dataBegin_.at(indexMap_[idx]+1) = domList[domIndex]->data_jbegin.getValue(); - dataIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->data_j_index); - infoIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->j_index); - - // On the i axis - nLocal_.at(indexMap_[idx]) = domList[domIndex]->ni.getValue(); - nGlob_.at(indexMap_[idx]) = domList[domIndex]->ni_glo.getValue(); - nBeginLocal_.at(indexMap_[idx]) = 0; - nBeginGlobal_.at(indexMap_[idx]) = domList[domIndex]->ibegin; - - dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); - dataIndex_.at(indexMap_[idx]).reference(domList[domIndex]->data_i_index); - infoIndex_.at(indexMap_[idx]).reference(domList[domIndex]->i_index); - - dataNIndex_.at(idx) = domList[domIndex]->data_i_index.numElements(); - dataDims_.at(idx) = domList[domIndex]->data_dim.getValue(); - - isDataDistributed_ |= domList[domIndex]->isDistributed(); - - localSize *= nLocal_.at(indexMap_[idx]+1)* nLocal_.at(indexMap_[idx]); - globalSize *= nGlob_.at(indexMap_[idx]+1)* nGlob_.at(indexMap_[idx]); - ++domIndex; - } - else if (1 == eleDim)// So it's an axis - { - nLocal_.at(indexMap_[idx]) = axisList[axisIndex]->n.getValue(); - nGlob_.at(indexMap_[idx]) = axisList[axisIndex]->n_glo.getValue(); - nBeginLocal_.at(indexMap_[idx]) = 0; - nBeginGlobal_.at(indexMap_[idx]) = axisList[axisIndex]->begin.getValue(); - - dataBegin_.at(indexMap_[idx]) = axisList[axisIndex]->data_begin.getValue(); - dataIndex_.at(indexMap_[idx]).reference(axisList[axisIndex]->data_index); - infoIndex_.at(indexMap_[idx]).reference(axisList[axisIndex]->index); - dataNIndex_.at(idx) = axisList[axisIndex]->data_index.numElements(); - dataDims_.at(idx) = 1; - - isDataDistributed_ |= axisList[axisIndex]->isDistributed(); - - localSize *= nLocal_.at(indexMap_[idx]); - globalSize *= nGlob_.at(indexMap_[idx]); - - ++axisIndex; - } - else // scalar - { - nLocal_.at(indexMap_[idx]) = 1; - nGlob_.at(indexMap_[idx]) = 1; - nBeginLocal_.at(indexMap_[idx]) = 0; - nBeginGlobal_.at(indexMap_[idx]) = 1; - - dataBegin_.at(indexMap_[idx]) = 0; - dataIndex_.at(indexMap_[idx]).resize(1); dataIndex_.at(indexMap_[idx])(0) = 0; - infoIndex_.at(indexMap_[idx]).resize(1); infoIndex_.at(indexMap_[idx])(0) = 0; - dataNIndex_.at(idx) = 1; - dataDims_.at(idx) = 1; - - isDataDistributed_ |= false; - - localSize *= nLocal_.at(indexMap_[idx]); - globalSize *= nGlob_.at(indexMap_[idx]); - - ++scalarIndex; - } - } -} - -/*! - Create local index of domain(s). - A domain can have data index which even contains the "ghost" points. Very often, these -data surround the true data. In order to send correct data to server, -a client need to know index of the true data. -*/ -void CDistributionClient::createLocalDomainDataIndex() -{ - int idxDomain = 0; - for (int i = 0; i < axisDomainOrder_.numElements(); ++i) - { - if (2 == axisDomainOrder_(i)) - { - elementIndexData_[i].resize(dataNIndex_[i]); - elementIndexData_[i] = false; - int iIdx, jIdx = 0, count = 0, localIndex; - for (int j = 0; j < dataNIndex_[i]; ++j) - { - iIdx = getDomainIndex((dataIndex_[indexMap_[i]])(j), (dataIndex_[indexMap_[i]+1])(j), - dataBegin_[indexMap_[i]], dataBegin_[indexMap_[i]+1], - dataDims_[i], nLocal_[indexMap_[i]], jIdx); - - if ((iIdx >= nBeginLocal_[indexMap_[i]]) && (iIdx < nLocal_[indexMap_[i]]) && - (jIdx >= nBeginLocal_[indexMap_[i]+1]) && (jIdx < nLocal_[indexMap_[i]+1])) - { - ++count; - elementIndexData_[i](j) = true; - } - } - - elementLocalIndex_[i].resize(count); - elementGlobalIndex_[i].resize(count); - count = 0; - CArray& tmpIndexElementData = elementIndexData_[i]; - CArray& tmpLocalElementIndex = elementLocalIndex_[i]; - CArray& tmpGlobalElementIndex = elementGlobalIndex_[i]; - for (int j = 0; j < dataNIndex_[i]; ++j) - { - if (tmpIndexElementData(j)) - { - iIdx = getDomainIndex((dataIndex_[indexMap_[i]])(j), (dataIndex_[indexMap_[i]+1])(j), - dataBegin_[indexMap_[i]], dataBegin_[indexMap_[i]+1], - dataDims_[i], nLocal_[indexMap_[i]], jIdx); - localIndex = tmpLocalElementIndex(count) = iIdx + jIdx * nLocal_[indexMap_[i]]; - tmpGlobalElementIndex(count) = (infoIndex_[indexMap_[i]])(localIndex) + ((infoIndex_[indexMap_[i]+1])(localIndex))*nGlob_[indexMap_[i]]; - ++count; - } - } - ++idxDomain; - } - } -} - -/*! - Create local index of axis. -*/ -void CDistributionClient::createLocalAxisDataIndex() -{ - int idxAxis = 0; - for (int i = 0; i < axisDomainOrder_.numElements(); ++i) - { - if (1 == axisDomainOrder_(i)) - { - elementIndexData_[i].resize(dataNIndex_[i]); - elementIndexData_[i] = false; - int iIdx = 0, count = 0; - for (int j = 0; j < dataNIndex_[i]; ++j) - { - iIdx = getAxisIndex((dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); - if ((iIdx >= nBeginLocal_[indexMap_[i]]) && - (iIdx < nLocal_[indexMap_[i]]) )//&& (axisMasks_[idxAxis](iIdx))) - { - ++count; - elementIndexData_[i](j) = true; - } - } - - elementLocalIndex_[i].resize(count); - elementGlobalIndex_[i].resize(count); - count = 0; - CArray& tmpIndexElementData = elementIndexData_[i]; - CArray& tmpLocalElementIndex = elementLocalIndex_[i]; - CArray& tmpGlobalElementIndex = elementGlobalIndex_[i]; - for (int j = 0; j < dataNIndex_[i]; ++j) - { - if (tmpIndexElementData(j)) - { - iIdx = tmpLocalElementIndex(count) = getAxisIndex((dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); - tmpGlobalElementIndex(count) = (infoIndex_[indexMap_[i]])(iIdx); - ++count; - } - } - ++idxAxis; - } - } -} - -/*! - Create local index of scalar. -*/ -void CDistributionClient::createLocalScalarDataIndex() -{ - int idxAxis = 0; - for (int i = 0; i < axisDomainOrder_.numElements(); ++i) - { - if (0 == axisDomainOrder_(i)) - { - elementIndexData_[i].resize(dataNIndex_[i]); - elementIndexData_[i] = true; - int count = 1; - - elementLocalIndex_[i].resize(count); - elementLocalIndex_[i] = 0; - elementGlobalIndex_[i].resize(count); - elementGlobalIndex_[i] = 0; - } - } -} - -/*! - Create global index on client - In order to do the mapping between client-server, each client creates its own -global index of sending data. This global index is then used to calculate to which server -the client needs to send it data as well as which part of data belongs to the server. -So as to make clients and server coherent in order of index, global index is calculated by -take into account of C-convention, the rightmost dimension varies faster. -*/ -void CDistributionClient::createGlobalIndexSendToServer() -{ - if (isComputed_) return; - isComputed_ = true; - createLocalDomainDataIndex(); - createLocalAxisDataIndex(); - createLocalScalarDataIndex(); - - int idxDomain = 0, idxAxis = 0; - std::vector eachElementSize(numElement_); - - // Precompute size of the loop - for (int i = 0; i < numElement_; ++i) - { - eachElementSize[i] = elementLocalIndex_[i].numElements(); - } - - // Compute size of the global index on client - std::vector idxLoop(numElement_,0); - std::vector currentIndex(numElement_,0); - std::vector currentGlobalIndex(numElement_,0); - int innerLoopSize = eachElementSize[0]; - size_t idx = 0, indexLocalDataOnClientCount = 0; - size_t ssize = 1; - - for (int i = 0; i < numElement_; ++i) ssize *= eachElementSize[i]; - localDataSize_=ssize ; - - localDataIndex_.resize(ssize); - if (!gridMask_.isEmpty()) localMaskIndex_.resize(ssize); - localMaskedDataIndex_.resize(ssize); - globalDataIndex_.rehash(std::ceil(ssize/globalDataIndex_.max_load_factor())); - globalLocalDataSendToServerMap_.rehash(std::ceil(ssize/globalLocalDataSendToServerMap_.max_load_factor())); - - - // We need to loop with data index - idxLoop.assign(numElement_,0); - idx = indexLocalDataOnClientCount = 0; - ssize = 1; for (int i = 0; i < numElement_; ++i) ssize *= dataNIndex_[i]; - innerLoopSize = dataNIndex_[0]; - int countLocalData = 0; - std::vector correctIndexOfElement(numElement_,0); - bool isOuterIndexCorrect = true; - while (idx < ssize) - { - for (int i = 0; i < numElement_-1; ++i) - { - if (idxLoop[i] == dataNIndex_[i]) - { - idxLoop[i] = 0; - correctIndexOfElement[i] = 0; - ++idxLoop[i+1]; - if (isOuterIndexCorrect) ++correctIndexOfElement[i+1]; - } - } - - // Depending the inner-most element axis or domain, - // The outer loop index begins correspondingly at one (1) or zero (0) - bool isIndexElementDataCorrect = true; - for (int i = 1; i < numElement_; ++i) - { - if (elementIndexData_[i](idxLoop[i])) - { - currentIndex[i] = elementLocalIndex_[i](correctIndexOfElement[i]); - currentGlobalIndex[i] = elementGlobalIndex_[i](correctIndexOfElement[i]); - isIndexElementDataCorrect &= true; - } - else isIndexElementDataCorrect = false; - } - - isOuterIndexCorrect = isIndexElementDataCorrect; - - if (isOuterIndexCorrect) - { - // Inner most index - int correctIndexInnerElement = 0; - for (int i = 0; i < innerLoopSize; ++i) - { - bool isCurrentIndexDataCorrect = isOuterIndexCorrect; - if (elementIndexData_[0](i)) - { - currentIndex[0] = elementLocalIndex_[0](correctIndexInnerElement); - currentGlobalIndex[0] = elementGlobalIndex_[0](correctIndexInnerElement); - isCurrentIndexDataCorrect &= true; - ++correctIndexInnerElement; - } - else isCurrentIndexDataCorrect = false; - - if (isCurrentIndexDataCorrect) - { - bool maskTmp = true; - bool maskGridTmp = true; - size_t globalIndex = 0; - for (int k = 0; k < numElement_; ++k) - { - globalIndex += (currentGlobalIndex[k])*elementNGlobal_[k]; - } - globalDataIndex_[globalIndex] = indexLocalDataOnClientCount; - localDataIndex_[indexLocalDataOnClientCount] = countLocalData; - globalLocalDataSendToServerMap_[globalIndex] = indexLocalDataOnClientCount; - localMaskedDataIndex_[indexLocalDataOnClientCount] = indexLocalDataOnClientCount; - - // Grid mask: unmasked values will be replaces by NaN and then all values will be sent - if (!gridMask_.isEmpty()) - { - int gridMaskIndex = 0; - for (int k = 0; k < this->numElement_; ++k) - { - gridMaskIndex += (currentIndex[k])*elementNLocal_[k]; - } - maskGridTmp = gridMask_(gridMaskIndex); - if (maskGridTmp) - localMaskIndex_[indexLocalDataOnClientCount] = true; - else - localMaskIndex_[indexLocalDataOnClientCount] = false; - } - - ++indexLocalDataOnClientCount; - - } - ++countLocalData; - correctIndexOfElement[0] = correctIndexInnerElement;; - } - } - else countLocalData+=innerLoopSize ; - - idxLoop[0] += innerLoopSize; - idx += innerLoopSize; - } -} - -void CDistributionClient::createGlobalIndex() -{ -} - -/*! - Retrieve index i and index j of a domain from its data index - Data contains not only true data, which are sent to servers, but also ghost data, which -very often play a role of border of each local data, so does data index. Because data of a domain -can be one dimension, or two dimensions, there is a need to convert data index to domain index - \param [in] dataIIndex index of i data - \param [in] dataJIndex index of j data - \param [in] dataIBegin index begin of i data - \param [in] dataJBegin index begin of j data - \param [in] dataDim dimension of data (1 or 2) - \param [in] ni local size ni of domain - \param [out] j j index of domain - \return i index of domain -*/ -int CDistributionClient::getDomainIndex(const int& dataIIndex, const int& dataJIndex, - const int& dataIBegin, const int& dataJBegin, - const int& dataDim, const int& ni, int& j) -{ - int i; - int tempI = dataIIndex + dataIBegin, - tempJ = (dataJIndex + dataJBegin); - if (ni == 0) - { - i = -1; - j = -1; - return i; - } - if ((tempI < 0) || (tempJ < 0)) - { - i = -1; - j = -1; - return i; - } - else - { - i = (dataDim == 1) ? (tempI) % ni : (tempI) ; - j = (dataDim == 1) ? (tempI) / ni : (tempJ) ; - } - return i; -} - -/*! - Retrieve index of an axis from its data index - \param [in] dataIndex index of data - \param [in] dataBegin index begin of data - \param [in] ni local size of axis - \return index of domain -*/ -int CDistributionClient::getAxisIndex(const int& dataIndex, const int& dataBegin, const int& ni) -{ - if (ni == 0) - { - return -1; - } - int tempI = dataIndex; - if ((tempI < 0) || (tempI > ni)) - return -1; - else - return tempI; -} - -/*! - Return global local data mapping of client -*/ -CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() -{ - if (!isComputed_) createGlobalIndexSendToServer(); - return globalLocalDataSendToServerMap_; -} - -CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalDataIndexOnClient() -{ - if (!isComputed_) createGlobalIndexSendToServer(); - return globalDataIndex_; -} - -/*! - Return local data index of client -*/ -const std::vector& CDistributionClient::getLocalDataIndexOnClient() -{ - if (!isComputed_) createGlobalIndexSendToServer(); - return localDataIndex_; -} - -/*! - Return local mask index of client -*/ -const std::vector& CDistributionClient::getLocalMaskIndexOnClient() -{ - if (!isComputed_) createGlobalIndexSendToServer(); - return localMaskIndex_; -} - -/*! - Return local mask index of client -*/ -const std::vector& CDistributionClient::getLocalMaskedDataIndexOnClient() -{ - if (!isComputed_) createGlobalIndexSendToServer(); - return localMaskedDataIndex_; -} - -} // namespace xios diff --git a/xios_2311_src/src/distribution/distribution_client.hpp b/xios_2311_src/src/distribution/distribution_client.hpp deleted file mode 100644 index c6e83747..00000000 --- a/xios_2311_src/src/distribution/distribution_client.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/*! - \file distribution_client.hpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 09 Mars 2015 - - \brief Index distribution on client side. - */ -#ifndef __XIOS_DISTRIBUTIONCLIENT_HPP__ -#define __XIOS_DISTRIBUTIONCLIENT_HPP__ - -#include -#include "axis.hpp" -#include "domain.hpp" -#include "grid.hpp" - -namespace xios { - -class CGrid; -class CDomain; -class CAxis; -class CScalar; - -/*! - \class CDistributionClient - This class bases on the knowledge of distribution on client side (decided by users) -to calculate the global index of its local data. -*/ -class CDistributionClient : public CDistribution -{ -public: - typedef CDistribution::GlobalLocalMap GlobalLocalDataMap; - - public: - /** Default constructor */ - CDistributionClient(int rank, CGrid* grid); - - void createGlobalIndexSendToServer(); - - /** Default destructor */ - virtual ~CDistributionClient(); - - virtual const std::vector& getLocalDataIndexOnClient(); - GlobalLocalDataMap& getGlobalLocalDataSendToServer(); - GlobalLocalDataMap& getGlobalDataIndexOnClient(); - const std::vector& getLocalMaskIndexOnClient(); - const std::vector& getLocalMaskedDataIndexOnClient(); - - size_t getLocalDataSize(void) { if (!isComputed_) createGlobalIndexSendToServer(); return localDataSize_ ;} - std::vector getNGlob() { return nGlob_; } - std::vector getDataNIndex() { return dataNIndex_; } - - bool isDataDistributed() { return isDataDistributed_; } - - static int getDomainIndex(const int& dataIIndex, const int& dataJIndex, - const int& dataIBegin, const int& dataJBegin, - const int& dataDim, const int& ni, int& j); - static int getAxisIndex(const int& dataIndex, const int& dataBegin, const int& ni); - - void partialClear(void) ; //! clear heavy sized attibutes - - protected: - void createGlobalIndex(); - void readDistributionInfo(CGrid* grid); - void readDistributionInfo(const std::vector& domList, - const std::vector& axisList, - const std::vector& scalarList, - const CArray& axisDomainOrder); - private: - //! Create local index of a domain - void createLocalDomainDataIndex(); - - //! Create local index of an axis - void createLocalAxisDataIndex(); - - //! Create local index of a scalar - void createLocalScalarDataIndex(); - - template - void readGridMaskInfo(const CArray& gridMask); - - private: - //!< LocalData index on client - GlobalLocalDataMap globalLocalDataSendToServerMap_; - GlobalLocalDataMap globalDataIndex_; - - /*! Array holding masked data indexes. - * It includes: - * masking on data (data_i/j_index or data_ni/nj and data_ibegin) - * masking on grid elements (domains, axes or scalars) - * It DOES NOT include grid mask. - * The array size defines the data size entering the workflow. It is used by source filter of client or server1. - */ - std::vector localDataIndex_; - - /*! Array holding grid mask. If grid mask is not defined, its size is zero. - * It is used by source filter of client for replacing unmasked data by NaN. - */ - std::vector localMaskIndex_; - - std::vector localMaskedDataIndex_; - //!< the size of local data of the grid - size_t localDataSize_ ; - - private: - /*! Domains and axis are considered elements. - * A grid composed of 1 domain and 1 axis has 2 elements */ - int numElement_; - CArray axisDomainOrder_; //!< Order of axis and domain of a grid - - std::vector nLocal_; //!< Local size of each dimension (ni, nj, etc, ...) - std::vector nGlob_; //!< Global size of each dimension (e.x: ni_glo, nj_glo, etc, ...) - std::vector nBeginLocal_;//!< Begin index of each dimension (e.x: for domain, it's always 0, for axis, it's zoom_begin, ...) - std::vector nBeginGlobal_; //!< Begin index of each dimension (e.x: ibegin, jbegin, ...) - - // Data_n_index of domain or axis (For now, axis uses its size as data_n_index - std::vector dataNIndex_; //!< Data_n_index in case of domain - std::vector dataDims_; //!< Data_dim, domain can have data_dim == 1 or 2 - std::vector dataBegin_; //!< Data begin (data_ibegin, data_jbegin, etc) - std::vector > dataIndex_; //!< Data index - std::vector > infoIndex_; //!< i_index, j_index - - std::vector indexMap_; //!< Mapping element index to dimension index - std::vector > elementLocalIndex_; //!< Local index of each element - std::vector > elementGlobalIndex_; //!< Global index of each element - std::vector > elementIndexData_; //!< // The correct index of a domain has true value, the ghost one has false value - std::vector elementNLocal_; - std::vector elementNGlobal_; - - //!< (Only for grid with one axis or scalar)Flag to determine whether data is distributed or not - bool isDataDistributed_; - int axisNum_; - int domainNum_; - bool isComputed_; - - private: - // Just suppose that grid mask has 3 dimension. Need change - CArray gridMask_; //!< Mask of grid - - private: - CDistributionClient(const CDistributionClient& distClient); //! Not implement -}; - -/*! - A grid can have multiple dimension, so can its mask in the form of multi-dimension array. -It's not a good idea to store all multi-dimension arrays corresponding to each mask. -One of the ways is to convert this array into 1-dimension one and every process is taken place on it. - \param [in] multi-dimension array grid mask -*/ -template -void CDistributionClient::readGridMaskInfo(const CArray& gridMask) -{ - int dim = gridMask.dimensions(); - std::vector dimensionSizes(dim); - for (int i = 0; i < dim; ++i) dimensionSizes[i] = gridMask.extent(i); - - std::vector idxLoop(dim,0); - int ssize = gridMask.numElements(), idx = 0; - gridMask_.resize(ssize); - while (idx < ssize) - { - for (int i = 0; i < dim-1; ++i) - { - if (idxLoop[i] == dimensionSizes[i]) - { - idxLoop[i] = 0; - ++idxLoop[i+1]; - } - } - - int maskIndex = idxLoop[0]; - int mulDim = 1; - for (int k = 1; k < dim; ++k) - { - mulDim *= dimensionSizes[k-1]; - maskIndex += idxLoop[k]*mulDim; - } - gridMask_(maskIndex) = *(gridMask.dataFirst()+maskIndex); - - ++idxLoop[0]; - ++idx; - } -} - -} // namespace xios -#endif // __XIOS_DISTRIBUTIONCLIENT_HPP__ diff --git a/xios_2311_src/src/distribution/distribution_server.cpp b/xios_2311_src/src/distribution/distribution_server.cpp deleted file mode 100644 index 62604597..00000000 --- a/xios_2311_src/src/distribution/distribution_server.cpp +++ /dev/null @@ -1,223 +0,0 @@ -/*! - \file distribution_server.cpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 10 Sep 2016 - - \brief Index distribution on server side. - */ -#include "distribution_server.hpp" -#include "utils.hpp" - -namespace xios { - -CDistributionServer::CDistributionServer(int rank, const std::vector& nBegin, - const std::vector& nSize, - const std::vector& nBeginGlobal, - const std::vector& nGlobal) - : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nBeginGlobal_(nBeginGlobal), - nSize_(nSize), nBegin_(nBegin), globalLocalIndexMap_() -{ - createGlobalIndex(); -} - -CDistributionServer::CDistributionServer(int rank, - const std::vector >& globalIndexElements, - const CArray& elementOrder, - const std::vector& nBegin, - const std::vector& nSize, - const std::vector& nBeginGlobal, - const std::vector& nGlobal) - : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nBeginGlobal_(nBeginGlobal), - nSize_(nSize), nBegin_(nBegin), globalLocalIndexMap_() -{ - createGlobalIndex(globalIndexElements, elementOrder); -} - -CDistributionServer::~CDistributionServer() -{ -} - -/*! - Create global index on server side - Like the similar function on client side, this function serves on creating global index -for data written by the server. The global index is used to calculating local index of data -written on each server -*/ -void CDistributionServer::createGlobalIndex() -{ - size_t idx = 0, ssize = 1; - for (int i = 0; i < nSize_.size(); ++i) ssize *= nSize_[i]; - - this->globalIndex_.resize(ssize); - std::vector idxLoop(this->getDims(),0); - std::vector currentIndex(this->getDims()); - int innerLoopSize = nSize_[0]; - - globalLocalIndexMap_.rehash(std::ceil(ssize/globalLocalIndexMap_.max_load_factor())); - while (idxdims_-1; ++i) - { - if (idxLoop[i] == nSize_[i]) - { - idxLoop[i] = 0; - ++idxLoop[i+1]; - } - } - - for (int i = 1; i < this->dims_; ++i) currentIndex[i] = idxLoop[i] + nBegin_[i]; - - size_t mulDim, globalIndex; - for (int i = 0; i < innerLoopSize; ++i) - { - mulDim = 1; - globalIndex = i + nBegin_[0]; - - for (int k = 1; k < this->dims_; ++k) - { - mulDim *= nGlobal_[k-1]; - globalIndex += (currentIndex[k])*mulDim; - } - globalLocalIndexMap_[globalIndex] = idx; - this->globalIndex_(idx) = globalIndex; - - ++idx; - } - idxLoop[0] += innerLoopSize; - } -} - -/*! - Create global index on server side - Like the similar function on client side, this function serves on creating global index -for data written by the server. The global index is used to calculating local index of data -written on each server - \param[in] globalIndexElement global index on server side of each element of grid (scalar, axis, domain) - \param[in] elementOrder the order of elements of grid (e.x: domain->axis or domain->scalar) -*/ -void CDistributionServer::createGlobalIndex(const std::vector >& globalIndexElements, - const CArray& elementOrder) -{ - int numElement = elementOrder.numElements(), elementIdx = 0; - std::vector indexMap(numElement); - for (int i = 0; i < numElement; ++i) - { - indexMap[i] = elementIdx; - if (2 == elementOrder(i)) - { - elementIdx += 2; - } - else - ++elementIdx; - } - - std::vector elementGlobalSize(numElement); - size_t globalSize = 1; - for (int i = 0; i < numElement; ++i) - { - int elementType = elementOrder(i); - elementGlobalSize[i] = globalSize; - if (2 == elementType) // domain - { - globalSize *= nGlobal_[indexMap[i]+1] * nGlobal_[indexMap[i]]; - } - else // axis or scalar - { - globalSize *= nGlobal_[indexMap[i]]; - } - } - - size_t ssize = 1; - for (int i = 0; i < globalIndexElements.size(); ++i) ssize *= globalIndexElements[i].numElements(); - this->globalIndex_.resize(ssize); - globalLocalIndexMap_.rehash(std::ceil(ssize/globalLocalIndexMap_.max_load_factor())); - - std::vector idxLoop(numElement,0); - std::vector currentIndex(numElement); - int innerLoopSize = globalIndexElements[0].numElements(); - - size_t idx = 0; - while (idxglobalIndex_(idx) = globalIndex; - ++idx; - } - idxLoop[0] += innerLoopSize; - } -} - -/*! - Compute local index for writing data on server - \param [in] globalIndex Global index received from client -*/ -void CDistributionServer::computeLocalIndex(CArray& globalIndex) -{ - size_t ssize = globalIndex.numElements(); - size_t localIndexSize = std::min(globalIndex_.numElements(), ssize); - CArray localIndex(localIndexSize); - GlobalLocalMap::const_iterator ite = globalLocalIndexMap_.end(), it; - int i = 0; - for (size_t idx = 0; idx < ssize; ++idx) - { - it = globalLocalIndexMap_.find(globalIndex(idx)); - if (ite != it) - { - localIndex(i) = it->second; - ++i; - } - } - - globalIndex.reference(localIndex); -} - -/*! - Transforms local indexes owned by the server into global indexes - \param [in/out] indexes on input, local indexes of the server, - on output, the corresponding global indexes -*/ -void CDistributionServer::computeGlobalIndex(CArray& indexes) const -{ - for (int i = 0; i < indexes.numElements(); ++i) - { - indexes(i) = globalIndex_(indexes(i)); - } -} - -/*! - Get the size of grid index in server (e.x: sizeGrid *= size of each dimensiion) -*/ -int CDistributionServer::getGridSize() const -{ - return globalLocalIndexMap_.size(); -} - -void CDistributionServer::partialClear(void) -{ - GlobalLocalMap void1 ; - globalLocalIndexMap_.swap(void1) ; -} - -} // namespace xios diff --git a/xios_2311_src/src/distribution/distribution_server.hpp b/xios_2311_src/src/distribution/distribution_server.hpp deleted file mode 100644 index 9998cb89..00000000 --- a/xios_2311_src/src/distribution/distribution_server.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! - \file distribution_server.hpp - \author Ha NGUYEN - \since 13 Jan 2015 - \date 04 Feb 2015 - - \brief Index distribution on server side. - */ - -#ifndef __XIOS_DISTRIBUTION_SERVER_HPP__ -#define __XIOS_DISTRIBUTION_SERVER_HPP__ - -#include "distribution.hpp" - -namespace xios { - -/*! - \class CDistributionServer - The class, for now, plays a role of computing local index for writing data on server -*/ -class CDistributionServer : public CDistribution -{ - public: - /** Default constructor */ - CDistributionServer(int rank, int dims, const CArray& globalIndex = CArray()); - CDistributionServer(int rank, const std::vector& nBeginServer, - const std::vector& nSizeServer, const std::vector& nGlobal); - CDistributionServer(int rank, const std::vector& nBeginServer, - const std::vector& nSizeServer, - const std::vector& nBeginGlobal, - const std::vector& nGlobal); - - CDistributionServer(int rank, - const std::vector >& globalIndexElements, - const CArray& elementOrder, - const std::vector& nBeginServer, - const std::vector& nSizeServer, - const std::vector& nBeginGlobal, - const std::vector& nGlobal); - - /** Default destructor */ - virtual ~CDistributionServer(); - - const GlobalLocalMap& getGlobalLocalIndex() const { return globalLocalIndexMap_; } - int getGridSize() const; - - virtual void computeLocalIndex(CArray& globalIndex); - virtual void computeGlobalIndex(CArray& indexes) const; - virtual void partialClear(void); //! clear heavy sized attibutes - - protected: - virtual void createGlobalIndex(); - void createGlobalIndex(const std::vector >& globalIndexElements, - const CArray& elementOrder); - - protected: - GlobalLocalMap globalLocalIndexMap_; - - private: - std::vector nGlobal_; - std::vector nBeginGlobal_; - std::vector nSize_; - std::vector nBegin_; - -}; - -} // namespace xios -#endif // __XIOS_DISTRIBUTION_SERVER_HPP__ diff --git a/xios_2311_src/src/distribution/distribution_type.hpp b/xios_2311_src/src/distribution/distribution_type.hpp deleted file mode 100755 index b51c3403..00000000 --- a/xios_2311_src/src/distribution/distribution_type.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __DISTRIBUTION_TYPE_HPP__ -#define __DISTRIBUTION_TYPE_HPP__ - -namespace xios -{ - enum class EDistributionType { NONE=0, ROOT, BANDS, BLOCKS, COLUMNS} ; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/element.cpp b/xios_2311_src/src/distribution/element.cpp deleted file mode 100755 index 2bcc7905..00000000 --- a/xios_2311_src/src/distribution/element.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include "element.hpp" -#include "distributed_view.hpp" -#include "local_view.hpp" -#include "local_connector.hpp" -#include "context_client.hpp" -#include "context_server.hpp" -#include "mpi.hpp" - - -namespace xios -{ - - CDistributedElement::CDistributedElement(int globalSize, const map>& globalIndex) - { - globalSize_= globalSize ; - for(auto index : globalIndex) - { - globalIndex_[index.first].reference(index.second.copy()) ; - localSize_[index.first] = index.second.numElements() ; - } - } - - CDistributedElement::CDistributedElement(CEventServer& event) - { - recvFromClient(event) ; - } - - void CDistributedElement::addView(CElementView::type type, std::map>& indexView) - { - views_[type] = make_shared(shared_from_this(), type, indexView) ; - } - - void CDistributedElement::addView(CElementView::type type, std::map>& maskView) - { - views_[type] = make_shared(shared_from_this(), type, maskView) ; - } - - void CDistributedElement::addFullView(void) - { - if (views_[CElementView::FULL]!=nullptr) return ; - - std::map> indexView ; - for(auto rank : globalIndex_) - { - auto& index = indexView[rank.first] ; - int size=rank.second.numElements() ; - index.resize(size) ; - for(int i=0;igetRemoteSize() ; - vector nbSenders(remoteSize,0) ; - for(auto rank : globalIndex_) nbSenders[rank.first]=1 ; - MPI_Allreduce(MPI_IN_PLACE, nbSenders.data(), remoteSize, MPI_INT, MPI_SUM, client->getIntraComm()) ; - - list messages; - for(auto ranksData : globalIndex_) - { - int rank = ranksData.first ; - auto& data = ranksData.second ; - - messages.push_back(CMessage(messageHeader)); - messages.back()<sendEvent(event) ; - } - - void CDistributedElement::recvFromClient(CEventServer& event) - { - globalIndex_.clear(); - for (auto& subEvent : event.subEvents) - { - CBufferIn* buffer = subEvent.buffer; - int rank=subEvent.rank ; - *buffer>>globalSize_ ; - *buffer >> globalIndex_[rank]; - } - localSize_.clear() ; - for(auto& globalIndex : globalIndex_) localSize_[globalIndex.first] = globalIndex.second.numElements() ; - } - - - - CLocalElement::CLocalElement(int localRank, size_t globalSize, CArray& globalIndex) - : CDistributedElement(globalSize, {{localRank, globalIndex}}), - globalIndex_(CDistributedElement::globalIndex_[localRank]), localSize_(CDistributedElement::localSize_[localRank]), localRank_(localRank) - { - - } - - CLocalElement::CLocalElement(int localRank, CEventServer& event) : globalIndex_(CDistributedElement::globalIndex_[localRank]), localSize_(CDistributedElement::localSize_[localRank]), localRank_(localRank) - { - recvFromClient(localRank, event) ; - } - - void CLocalElement::recvFromClient(int localRank, CEventServer& event) - { - set globalIndex ; - - for (auto& subEvent : event.subEvents) - { - CBufferIn* buffer = subEvent.buffer; - int rank=subEvent.rank ; - CArray indGlo ; - *buffer >> globalSize_>> indGlo; - globalIndex.insert(indGlo.dataFirst(), indGlo.dataFirst()+indGlo.numElements()) ; - } - - localSize_ = globalIndex.size() ; - globalIndex_.resize(localSize_) ; - int i=0 ; - for(auto& ind : globalIndex) { globalIndex_(i)=ind ; i++; } - } - - void CLocalElement::addView(CElementView::type type, CArray& indexView) - { - views_[type] = make_shared(static_pointer_cast(shared_from_this()), type, indexView) ; - } - - void CLocalElement::addView(CElementView::type type, CArray& maskView) - { - views_[type] = make_shared(static_pointer_cast(shared_from_this()), type, maskView) ; - } - - void CLocalElement::addFullView(void) - { - if (views_[CElementView::FULL]!=nullptr) return ; - - CArray indexView(localSize_) ; - for(int i=0;i CLocalElement::getView(CElementView::type type) - { - if (views_[(size_t)type]==nullptr) { ERROR("CLocalElement::getView(CElementView::type type)",<<"View is not initialized");} - else return static_pointer_cast(views_[(size_t)type]) ; - } - - shared_ptr CLocalElement::getConnector(CElementView::type srcType, CElementView::type dstType) - { - auto newPair = pair(srcType,dstType); - auto it = connectors_.find(newPair) ; - if (it==connectors_.end()) - { - auto insertPair=pair, shared_ptr>(newPair,make_shared(getView(srcType),getView(dstType))) ; - it=connectors_.insert(insertPair).first ; - it->second->computeConnector() ; - } - return it->second ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/element.hpp b/xios_2311_src/src/distribution/element.hpp deleted file mode 100755 index 18d68dfe..00000000 --- a/xios_2311_src/src/distribution/element.hpp +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef __ELEMENT_HPP__ -#define __ELEMENT_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "element_view.hpp" -#include "exception.hpp" -#include "context_client.hpp" -#include "context_server.hpp" - -namespace xios -{ - class CDistributedView ; - class CLocalView; - class CLocalConnector ; - - class CDistributedElement : public std::enable_shared_from_this - { - - protected: - std::map> globalIndex_ ; - std::map localSize_ ; - size_t globalSize_ ; - std::vector> views_= std::vector>(CElementView::numViewType_) ; - CDistributedElement(void) {} ; - - public: - CDistributedElement(int globalSize, const map>& globalIndex) ; - CDistributedElement(CEventServer& event) ; - void addFullView(void) ; - void sendToServer(CContextClient* client, CEventClient& event, const CMessage& messageHeader) ; - void recvFromClient(CEventServer& event) ; - size_t getGlobalSize(void) { return globalSize_;} - std::map>& getGlobalIndex(void) { return globalIndex_;} - - shared_ptr getView(CElementView::type type) - { - if (views_[(size_t)type]==nullptr) { ERROR("CDistributedElement::getView(CElementView::type type)",<<"View is not initialized");} - else return views_[(size_t)type] ; - } - - void addView(CElementView::type type, std::map>& indexView) ; - void addView(CElementView::type type, std::map>& maskView) ; - void sendToServer(CEventClient& event, const CMessage& messageHeader) ; - - friend class CDistributedView ; - } ; - - - class CLocalElement : public CDistributedElement - { - // keep local connector inside - std::map, shared_ptr> connectors_ ; - - public: - CLocalElement(int localRank, size_t globalSize, CArray& globalIndex) ; - CLocalElement(int localRank, CEventServer& event) ; - void recvFromClient(int localRank, CEventServer& event) ; - const CArray& getGlobalIndex(void) { return globalIndex_ ;} - void addView(CElementView::type type, CArray& indexView) ; - void addView(CElementView::type type, CArray& maskView) ; - void addFullView(void) ; - - shared_ptr getView(CElementView::type type) ; - /* { - if (views_[(size_t)type]==nullptr) { ERROR("CLocalElement::getView(CElementView::type type)",<<"View is not initialized");} - else return static_pointer_cast(views_[(size_t)type]) ; - } -*/ - shared_ptr getConnector(CElementView::type srcType, CElementView::type dstType) ; - - private : - int localRank_; - CArray& globalIndex_ ; - int& localSize_ ; - - friend class CLocalView ; - } ; - -} - -#endif - diff --git a/xios_2311_src/src/distribution/element_view.cpp b/xios_2311_src/src/distribution/element_view.cpp deleted file mode 100755 index e69de29b..00000000 diff --git a/xios_2311_src/src/distribution/element_view.hpp b/xios_2311_src/src/distribution/element_view.hpp deleted file mode 100755 index 34156166..00000000 --- a/xios_2311_src/src/distribution/element_view.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __ELEMENT_VIEW_HPP__ -#define __ELEMENT_VIEW_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" - -namespace xios -{ - class CElementView - { - public: - enum type : size_t { FULL=0, MODEL, WORKFLOW} ; - const static int numViewType_ = 3 ; - protected: - type type_; - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/gatherer_connector.cpp b/xios_2311_src/src/distribution/gatherer_connector.cpp deleted file mode 100755 index fd850a66..00000000 --- a/xios_2311_src/src/distribution/gatherer_connector.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "gatherer_connector.hpp" - -namespace xios -{ - void CGathererConnector::computeConnector(void) - { - dstSize_=dstView_->getSize() ; - auto& srcGlobalIndex = srcView_->getGlobalIndex() ; - auto& srcIndex = srcView_->getIndex() ; - for(auto& rankIndex : srcIndex) srcSize_[rankIndex.first] = rankIndex.second.numElements(); - auto& dstGlobalIndex = dstView_->getGlobalIndex() ; - auto& dstIndex = dstView_->getIndex() ; - dstSize_=dstIndex.numElements() ; - - unordered_map mapGlobalLocalIndex ; - int globalIndexSize=dstGlobalIndex.size() ; - //for(auto& ind : dstIndex) mapGlobalLocalIndex[dstGlobalIndex(ind)] = ind ; - for(int i=0; i=0 && dstIndex(i)=0 && index(ind)second) ; - mask.push_back(true) ; - } - else mask.push_back(false) ; - } - else mask.push_back(false) ; - } - } - } - - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/gatherer_connector.hpp b/xios_2311_src/src/distribution/gatherer_connector.hpp deleted file mode 100755 index 427b6ab3..00000000 --- a/xios_2311_src/src/distribution/gatherer_connector.hpp +++ /dev/null @@ -1,371 +0,0 @@ -#ifndef __GATHERER_CONNECTOR_HPP__ -#define __GATHERER_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" -#include "reduction_types.hpp" - - -namespace xios -{ - - class CGathererConnector - { - private: - shared_ptr srcView_; - shared_ptr dstView_; - map> connector_ ; - map> mask_ ; // mask is on src view - int dstSize_ ; - map srcSize_ ; - - public: - CGathererConnector(shared_ptr srcView, shared_ptr dstView) : srcView_(srcView), dstView_(dstView) {} ; - void computeConnector(void) ; - - template - void transfer(int repeat, int sizeT, map>& dataIn, CArray& dataOut, EReduction op = EReduction::none) - { - // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) - - size_t dstSlice = dstSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - - - if (op == EReduction::none) // tranfer without reduction - { - for(auto& data : dataIn) - { - T* output = dataOut.dataFirst() ; - int rank=data.first ; - auto input = data.second.dataFirst() ; - auto& connector=connector_[rank] ; - auto& mask=mask_[rank] ; - int size=mask.size() ; - size_t srcSlice = size * sizeT ; - for(int l=0; l vcount(dataOut.size(),0) ; - int* count = vcount.data() ; - T defaultValue = std::numeric_limits::quiet_NaN(); - for(auto& data : dataIn) - { - T* output = dataOut.dataFirst() ; - int rank=data.first ; - auto input = data.second.dataFirst() ; - auto& connector=connector_[rank] ; - auto& mask=mask_[rank] ; - int size=mask.size() ; - size_t srcSlice = size * sizeT ; - for(int l=0; l0) dataOut[i]/=count[i] ; - else dataOut[i] = defaultValue ; - } - else for(int i=0; i < dataOut.size() ; i++) if (count[i]==0) dataOut[i] = defaultValue ; - } - } - - template - void transfer(int sizeT, map>& dataIn, CArray& dataOut, EReduction op = EReduction::none) - { - transfer(1, sizeT, dataIn, dataOut, op) ; - } - - template - void transfer(map>& dataIn, CArray& dataOut, EReduction op = EReduction::none) - { - transfer(1,dataIn,dataOut, op) ; - } - - template - void transfer(int rank, shared_ptr* connectors, int nConnectors, const T* input, T* output, EReduction op = EReduction::none, int* count=nullptr) - { - auto& connector = connector_[rank] ; // probably costly, find a better way to avoid the map - auto& mask = mask_[rank] ; - int srcSize = mask.size() ; - - if (nConnectors==0) - { - if (op == EReduction::none) - { - for(int i=0, j=0; igetSrcSliceSize(rank, connectors-1, nConnectors-1) ; - int dstSliceSize = (*(connectors-1))->getDstSliceSize(connectors-1, nConnectors-1) ; - - const T* in = input ; - for(int i=0,j=0;itransfer(rank, connectors-1, nConnectors-1, in, output+connector[j]*dstSliceSize, op, count+connector[j]*dstSliceSize) ; // the multiplication must be avoid in further optimization - j++ ; - } - in += srcSliceSize ; - } - } - - } - - // hook for transfering mask in grid connector, maybe find an other way to doing that... - void transfer_or(int rank, shared_ptr* connectors, int nConnectors, const bool* input, bool* output) - { - auto& connector = connector_[rank] ; // probably costly, find a better way to avoid the map - auto& mask = mask_[rank] ; - int srcSize = mask.size() ; - - if (nConnectors==0) - { - for(int i=0, j=0; igetSrcSliceSize(rank, connectors-1, nConnectors-1) ; - int dstSliceSize = (*(connectors-1))->getDstSliceSize(connectors-1, nConnectors-1) ; - - const bool* in = input ; - for(int i=0,j=0;itransfer_or(rank, connectors-1, nConnectors-1, in, output+connector[j]*dstSliceSize) ; // the multiplication must be avoid in further optimization - j++ ; - } - in += srcSliceSize ; - } - } - - } - - - - template - void transfer(map>& dataIn, CArray& dataOut, T missingValue, EReduction op = EReduction::none) - { - transfer(1, 1, dataIn, dataOut, missingValue, op); - } - - template - void transfer(int sizeT, map>& dataIn, CArray& dataOut, T missingValue, EReduction op = EReduction::none) - { - transfer(1, sizeT, dataIn, dataOut, missingValue, op) ; - } - - template - void transfer(int repeat , int sizeT, map>& dataIn, CArray& dataOut, T missingValue, EReduction op = EReduction::none) - { - dataOut.resize(repeat*dstSize_*sizeT) ; - dataOut=missingValue ; - transfer(repeat, sizeT, dataIn, dataOut, op) ; - } - - template - void transfer(CEventServer& event, int sizeT, CArray& dataOut, EReduction op = EReduction::none) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer(1, sizeT, dataIn, dataOut, op) ; - } - - template - void transfer(CEventServer& event, CArray& dataOut, EReduction op = EReduction::none) - { - transfer(event, 1, dataOut, op) ; - } - - template - void transfer(CEventServer& event, int sizeT, CArray& dataOut, T missingValue, EReduction op = EReduction::none) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer(1, sizeT, dataIn, dataOut, missingValue, op) ; - } - - template - void transfer(CEventServer& event, CArray& dataOut, T missingValue, EReduction op = EReduction::none) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer(1, 1, dataIn, dataOut, missingValue, op) ; - } - - int getSrcSliceSize(int rank, shared_ptr* connectors, int nConnectors) - { if (nConnectors==0) return srcSize_[rank] ; else return srcSize_[rank] * (*(connectors-1))->getSrcSliceSize(rank, connectors-1,nConnectors-1) ; } - - int getDstSliceSize(shared_ptr* connectors, int nConnectors) - { if (nConnectors==0) return dstSize_ ; else return dstSize_ * (*(connectors-1))->getDstSliceSize(connectors-1,nConnectors-1) ; } - - int getDstSize(void) {return dstSize_ ;} - } ; - -} - -#endif diff --git a/xios_2311_src/src/distribution/grid_client_server_remote_connector.cpp b/xios_2311_src/src/distribution/grid_client_server_remote_connector.cpp deleted file mode 100755 index c3ec519d..00000000 --- a/xios_2311_src/src/distribution/grid_client_server_remote_connector.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "grid_client_server_remote_connector.hpp" - -namespace xios -{ - /** - * \brief class constructor. - * \param srcView List of sources views. - * \param dstView List of remotes views. - * \param localComm Local MPI communicator - * \param remoteSize Size of the remote communicator - */ - CGridClientServerRemoteConnector::CGridClientServerRemoteConnector( vector >& srcFullView, vector>& srcWorkflowView, - vector>& dstView, MPI_Comm localComm, int remoteSize) - : CGridRemoteConnector(srcFullView, dstView, localComm, remoteSize) , srcWorkflowView_(srcWorkflowView) - {} - - - void CGridClientServerRemoteConnector::computeConnector(bool eliminateRedondant) - { - if (eliminateRedondant) - { - auto workflowRemoteConnector=make_shared(srcWorkflowView_,dstView_,localComm_,remoteSize_) ; - workflowRemoteConnector->computeConnector() ; - computeViewDistribution() ; - - for(int i=0;igetIsSrcViewDistributed()[i] ; - computeConnectorMethods() ; - computeRedondantRanks() ; - - for(auto& rank : rankToRemove_) - if (workflowRemoteConnector->getRankToRemove().count(rank)!=0) - for(auto& element : elements_) element.erase(rank) ; - } - else - { - computeViewDistribution() ; - computeConnectorRedundant() ; - } - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_client_server_remote_connector.hpp b/xios_2311_src/src/distribution/grid_client_server_remote_connector.hpp deleted file mode 100755 index 29a6f7a2..00000000 --- a/xios_2311_src/src/distribution/grid_client_server_remote_connector.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __GRID_CLIENT_SERVER_REMOTE_CONNECTOR_HPP__ -#define __GRID_CLIENT_SERVER_REMOTE_CONNECTOR_HPP__ - -#include "grid_remote_connector.hpp" - -namespace xios -{ - - class CGridClientServerRemoteConnector : public CGridRemoteConnector - { - - public: - - CGridClientServerRemoteConnector(vector>& srcView, vector>& worflowSrcView, vector>& dstView, MPI_Comm localComm, int remoteSize) ; - void computeConnector(bool eliminateRedondant=true) ; - vector> srcWorkflowView_ ; - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_elements.cpp b/xios_2311_src/src/distribution/grid_elements.cpp deleted file mode 100755 index 67db821e..00000000 --- a/xios_2311_src/src/distribution/grid_elements.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "grid_elements.hpp" -#include "grid_local_view.hpp" -#include "grid_local_connector.hpp" - -namespace xios -{ - - shared_ptr CGridLocalElements::getView(CElementView::type type) - { - if (views_[type]==nullptr) views_[type] = make_shared(shared_from_this(), type) ; - return views_[type] ; - } - - shared_ptr CGridLocalElements::getConnector(CElementView::type srcType, CElementView::type dstType, bool withMask) - { - auto newPair = pair(srcType,dstType); - auto it = connectors_.find(newPair) ; - if (it==connectors_.end()) - { - auto insertPair=pair, shared_ptr>(newPair, make_shared(shared_from_this(), srcType, dstType, withMask)) ; - it=connectors_.insert(insertPair).first ; - } - return it->second ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_elements.hpp b/xios_2311_src/src/distribution/grid_elements.hpp deleted file mode 100755 index 70186467..00000000 --- a/xios_2311_src/src/distribution/grid_elements.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __GRID_ELEMENTS_HPP__ -#define __GRID_ELEMENTS_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "element.hpp" - -namespace xios -{ - class CGridLocalView ; - class CGridLocalConnector ; - - class CGridLocalElements : public std::enable_shared_from_this - { - private: - std::vector> elements_ ; - std::vector> views_= std::vector>(CElementView::numViewType_) ; - std::map, shared_ptr> connectors_ ; - vector localMask_ ; - - public: - CGridLocalElements(vector > elements) : elements_(elements) {} - CGridLocalElements(vector> elements, vector& localMask) : elements_(elements), localMask_(localMask) {} - - bool hasLocalMask() { return !localMask_.empty() ;} - vector& getLocalMask(void) { return localMask_ ;} - - std::vector>& getElements(void) { return elements_ ; } - shared_ptr getView(CElementView::type type) ; - shared_ptr getConnector(CElementView::type srcType, CElementView::type dstType, bool withMask=false) ; - } ; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_gatherer_connector.hpp b/xios_2311_src/src/distribution/grid_gatherer_connector.hpp deleted file mode 100755 index a77da0b5..00000000 --- a/xios_2311_src/src/distribution/grid_gatherer_connector.hpp +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef __GRID_GATHERER_CONNECTOR_HPP__ -#define __GRID_GATHERER_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" -#include "gatherer_connector.hpp" -#include "reduction_types.hpp" - - -namespace xios -{ - - class CGridGathererConnector - { - private: - - vector> elementsConnector_ ; - int dstSize_ ; - - public: - CGridGathererConnector(vector> elementsConnector) : elementsConnector_(elementsConnector) - { - dstSize_ = 1 ; - for(auto& connector : elementsConnector_) dstSize_=dstSize_*connector->getDstSize() ; - } - - template - void transfer(const map>& input, CArray& output, EReduction op = EReduction::none) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - output.resize(dstSize_) ; - - if (op == EReduction::none) - for(auto& rankDataIn : input) - elementsConnector_[n]->transfer(rankDataIn.first, connector, n, rankDataIn.second.dataFirst(), output.dataFirst()) ; - else - { - T defaultValue = std::numeric_limits::quiet_NaN(); - vector count(dstSize_,0) ; - for(auto& rankDataIn : input) - elementsConnector_[n]->transfer(rankDataIn.first, connector, n, rankDataIn.second.dataFirst(), output.dataFirst(), op, count.data()) ; - - for(int i=0;i - void transfer(const map>& input, CArray& output, T missingValue) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - output.resize(dstSize_) ; - output = missingValue ; - for(auto& rankDataIn : input) - { - elementsConnector_[n]->transfer(rankDataIn.first, connector, n, rankDataIn.second.dataFirst(), output.dataFirst()) ; - } - } - - template - void transfer(CEventServer& event, CArray& dataOut, EReduction op = EReduction::none) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer(dataIn, dataOut, op) ; - } - - - void transfer_or(CEventServer& event, CArray& dataOut) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer_or(dataIn, dataOut) ; - } - - template - void transfer(CEventServer& event, CArray& dataOut, T missingValue) - { - map> dataIn ; - for (auto& subEvent : event.subEvents) - { - auto& data = dataIn[subEvent.rank]; - (*subEvent.buffer) >> data ; - } - transfer(dataIn, dataOut, missingValue) ; - } - - void transfer_or(const map>& input, CArray& output) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - output.resize(dstSize_) ; - output = false ; - for(auto& rankDataIn : input) - { - elementsConnector_[n]->transfer_or(rankDataIn.first, connector, n, rankDataIn.second.dataFirst(), output.dataFirst()) ; - } - } - - }; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_local_connector.cpp b/xios_2311_src/src/distribution/grid_local_connector.cpp deleted file mode 100755 index 20199f88..00000000 --- a/xios_2311_src/src/distribution/grid_local_connector.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "grid_local_connector.hpp" -#include "grid_elements.hpp" -#include "element.hpp" -#include "grid_local_view.hpp" -#include "local_view.hpp" - -namespace xios -{ - - CGridLocalConnector::CGridLocalConnector(const std::vector>& elementsConnector) : elementsConnector_(elementsConnector) - { - srcSize_=1 ; - for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ; - dstSize_=1 ; - for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ; - } - - CGridLocalConnector::CGridLocalConnector(shared_ptr parent, CElementView::type srcType, CElementView::type dstType, bool withMask) - { - shared_ptr srcView=parent->getView(srcType) ; - shared_ptr dstView=parent->getView(dstType) ; - - vector> srcViews = srcView->getViews() ; - vector> dstViews = dstView->getViews() ; - - vector>& elements = parent->getElements(); - for(auto element : elements) elementsConnector_.push_back(element->getConnector(srcType, dstType)) ; - srcSize_=1 ; - for(auto connector : elementsConnector_) srcSize_*=connector->getSrcSize() ; - dstSize_=1 ; - for(auto connector : elementsConnector_) dstSize_*=connector->getDstSize() ; - - if (parent->hasLocalMask() && withMask) - { - vector> elementsConnector ; - for(auto element : elements) elementsConnector.push_back(element->getConnector(CElementView::FULL, dstType)) ; - auto localToDst=make_shared(elementsConnector) ; - CArray maskIn(localToDst->getSrcSize()) ; - CArray maskOut1(localToDst->getDstSize()) ; - CArray maskOut2(localToDst->getDstSize()) ; - maskIn=true ; - localToDst->transfer(maskIn,maskOut1,false) ; - auto& localMask = parent->getLocalMask() ; - for(int i=0 ; i < maskIn.numElements() ; i++) maskIn(i)=localMask[i] ; - localToDst->transfer(maskIn,maskOut2,false) ; - mask_.assign(dstSize_,true) ; - for(int i=0;i> elementsConnector_ ; - int srcSize_ ; - int dstSize_ ; - vector mask_ ; - - public: - - CGridLocalConnector(const std::vector>& elementsConnector) ; - CGridLocalConnector(shared_ptr parent, CElementView::type srcType, CElementView::type dstType, bool withMask=false) ; - int getSrcSize(void) { return srcSize_ ;} - int getDstSize(void) { return dstSize_ ;} - - void computeMask(void) ; - bool computeMask_done_=false ; - - - template - void transfer(const CArray& input, CArray& output) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - elementsConnector_[n]->transfer(connector, n, input.dataFirst(), output.dataFirst()) ; - } - - template - void transfer(const CArray& input, CArray& output, T missingValue) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - elementsConnector_[n]->transfer(connector, n, input.dataFirst(), output.dataFirst(), missingValue) ; - if (!computeMask_done_) computeMask() ; - if (!mask_.empty()) - { - T* out = output.dataFirst() ; - for(auto mask : mask_) { if (!mask) *out=missingValue ; out++;} - } - } - - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_local_view.cpp b/xios_2311_src/src/distribution/grid_local_view.cpp deleted file mode 100755 index ac7851ff..00000000 --- a/xios_2311_src/src/distribution/grid_local_view.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "grid_local_view.hpp" -#include "grid_elements.hpp" - -namespace xios -{ - CGridLocalView::CGridLocalView(shared_ptr parent, CElementView::type type) : localMask_(parent->getLocalMask()) - { - size_ = 1 ; - for(auto element : parent->getElements()) - { - views_.push_back(element->getView(type)) ; - size_ *= element->getView(type)->getSize() ; - } - - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_local_view.hpp b/xios_2311_src/src/distribution/grid_local_view.hpp deleted file mode 100755 index 44d3cdc3..00000000 --- a/xios_2311_src/src/distribution/grid_local_view.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __GRID_LOCAL_VIEW_HPP__ -#define __GRID_LOCAL_VIEW_HPP__ - -#include "local_view.hpp" -#include "element.hpp" - -namespace xios -{ - class CGridLocalElements; - - class CGridLocalView - { - private: - std::vector> views_ ; - std::vector& localMask_ ; - int size_ ; - - public: - CGridLocalView(shared_ptr parent, CElementView::type type) ; - std::vector>& getViews(void) {return views_ ;} - shared_ptr getView(int i) {return views_[i] ;} - int getSize() { return size_ ;} - } ; -} - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_mask_connector.cpp b/xios_2311_src/src/distribution/grid_mask_connector.cpp deleted file mode 100755 index 55f7c52d..00000000 --- a/xios_2311_src/src/distribution/grid_mask_connector.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "grid_mask_connector.hpp" - -namespace xios -{ - void CGridMaskConnector::computeConnector(CArray& mask) - { - nViews_ = views_.size() ; - for(auto& view : views_) - { - size_.push_back(view->getLocalSize()) ; - elementsMask_.push_back(CArray(view->getLocalSize())) ; - elementsMask_.back() = false ; - } - index_.resize(nViews_,0) ; - bool* maskPtr = mask.dataFirst() ; - recursiveInternal(nViews_-1, maskPtr) ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_mask_connector.hpp b/xios_2311_src/src/distribution/grid_mask_connector.hpp deleted file mode 100755 index 89af1b68..00000000 --- a/xios_2311_src/src/distribution/grid_mask_connector.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __GRID_MASK_CONNECTOR_HPP__ -#define __GRID_MASK_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" - -namespace xios -{ - - class CGridMaskConnector - { - - public: - - CGridMaskConnector(vector>& views) : views_(views) {} - void computeConnector(CArray& mask) ; - - CArray& getElementMask(int pos) { return elementsMask_[pos] ;} - vector>& getElementsMask(void) ; - - private: - vector> views_ ; - vector> elementsMask_ ; - - vector size_ ; - vector index_ ; - int nViews_ ; - - private: - - void recursiveInternal(int level, bool*& mask) - { - if (level==0) - { - for(int i=0; i < size_[level] ; i++) - { - for(int j=0 ; j>& srcView, vector>& dstView, MPI_Comm localComm, int remoteSize) - : srcView_(srcView), dstView_(dstView), localComm_(localComm), remoteSize_(remoteSize) - {} - - /** - * \brief class constructor. - * \param srcView List of sources views. - * \param dstView List of remotes views. - * \param localComm Local MPI communicator - * \param remoteSize Size of the remote communicator - */ - CGridRemoteConnector::CGridRemoteConnector(vector>& srcView, vector< shared_ptr >& dstView, MPI_Comm localComm, int remoteSize) - : srcView_(srcView), localComm_(localComm), remoteSize_(remoteSize) - { - for(auto& it : dstView) dstView_.push_back((shared_ptr) it) ; - } - - - /** - * \brief Compute if each view composing the source grid and the remote grid is distributed or not. - * Result is stored on internal attributes \b isSrcViewDistributed_ and \b isDstViewDistributed_. - * \detail To compute this, a hash is computed for each array on indices. The hash must permutable, i.e. - * the order of the list of global indices doesn't influence the value of the hash. So simply a sum of - * hash of each indices is used for the whole array. After, the computed hash are compared with each other - * ranks of \b localComm_ MPI communicator using an MPI_ALLReduce. If, for each ranks, the hash is the same - * then the view is not distributed - */ - void CGridRemoteConnector::computeViewDistribution(void) - { - HashXIOS hashGlobalIndex; // hash function-object - - int nDst = dstView_.size() ; - vector hashRank(remoteSize_) ; - vector sizeRank(remoteSize_) ; - isDstViewDistributed_.resize(nDst) ; - - for(int i=0; i> globalIndexView ; - dstView_[i]->getGlobalIndexView(globalIndexView) ; - hashRank.assign(remoteSize_,0) ; // everybody ranks to 0 except rank of the remote view I have - // that would be assign to my local hash - sizeRank.assign(remoteSize_,0) ; - - for(auto& it : globalIndexView) - { - int rank=it.first ; - CArray& globalIndex = it.second ; - size_t globalIndexSize = globalIndex.numElements(); - size_t hashValue=0 ; - for(size_t ind=0;ind globalIndex ; - srcView_[i]->getGlobalIndexView(globalIndex) ; - hashRank.assign(commSize,0) ; // 0 for everybody except my rank - size_t globalIndexSize = globalIndex.numElements() ; - - size_t allEqual ; - MPI_Allreduce(&globalIndexSize, &allEqual, 1, MPI_SIZE_T, MPI_BXOR, localComm_) ; - if (allEqual!=0) - { - isSrcViewDistributed_[i]=true ; - break ; - } - - // warning : jenkins hash : 0 --> 0 : need to compare number of element for each ranks - size_t hashValue=0 ; - for(size_t ind=0;ind> srcView ; - vector> dstView ; - vector indElements ; - elements_.resize(srcView_.size()) ; - - bool srcViewsNonDistributed=true ; // not usefull now but later for optimization - for(int i=0;i ranks ; - for(auto& it : elements_[indElements[0]]) - { - if (it.second.numElements()==0) ranks[it.first] = false ; - else ranks[it.first] = true ; - } - - } - - -/** - * \brief Compute the connector, i.e. compute the \b elements_ attribute. - * \detail In order to achive better optimisation, - * we distingute the case when the grid is not distributed on source grid (\bcomputeSrcNonDistributed), - * or the remote grid (\b computeDstNonDistributed), or the both (\b computeSrcDstNonDistributed). - * Otherwise the generic method is called computeGenericMethod. Note that in the case, if one element view - * is not distributed on the source and on the remote grid, then we can used the tensorial product - * property to computing it independently using \b computeSrcDstNonDistributed method. - * After that, we call the \b removeRedondantRanks method to supress blocks of data that can be sent - * redondantly the the remote servers - */ - void CGridRemoteConnector::computeConnectorMethods(void) - { - vector> srcView ; - vector> dstView ; - vector indElements ; - elements_.resize(srcView_.size()) ; - - bool srcViewsNonDistributed=true ; - for(int i=0;i remoteRanks; - list notUsed ; - map ranks ; - computeLeaderProcess(commRank, commSize, remoteSize_, remoteRanks, notUsed) ; - for(int rank : remoteRanks) ranks[rank]=true ; - - for(int i=0; i ranks ; - for(int i=0;i ranks ; - for(auto& it : elements_[indElements[0]]) - { - if (it.second.numElements()==0) ranks[it.first] = false ; - else ranks[it.first] = true ; - } - - for(int i=0;i> globalIndexView ; - dstView_[i]->getGlobalIndexView(globalIndexView) ; - - CClientClientDHTTemplate::Index2InfoTypeMap dataInfo; - - for(auto& it : globalIndexView) - { - auto& globalIndex=it.second ; - for(size_t ind : globalIndex) dataInfo[ind]=it.first ; - } - - // First we feed the distributed hash map with key (remote global index) - // associated with the value of the remote rank - CClientClientDHTTemplate DHT(dataInfo, localComm_) ; - // after we feed the DHT with the local global indices of the source view - - int commRank, commSize ; - MPI_Comm_rank(localComm_,&commRank) ; - MPI_Comm_size(localComm_,&commSize) ; - CArray srcIndex ; - // like the source view is not distributed, then only the rank 0 need to feed the DHT - if (commRank==0) srcView_[i]->getGlobalIndexView(srcIndex) ; - - // compute the mapping - DHT.computeIndexInfoMapping(srcIndex) ; - auto& returnInfo = DHT.getInfoIndexMap() ; - - // returnInfo contains now the map for each global indices to send to a list of remote rank - // only for the rank=0 because it is the one to feed the DHT - // so it need to send the list to each server leader i.e. the local process that handle specifically one or more - // servers - - // rankIndGlo : rankIndGlo[rank][indGlo] : list of indice to send the the remote server of rank "rank" - vector> rankIndGlo(remoteSize_) ; - if (commRank==0) - for(auto& it1 : returnInfo) - for(auto& it2 : it1.second) rankIndGlo[it2].push_back(it1.first) ; - - - vector requests ; - - if (commRank==0) - { - requests.resize(remoteSize_) ; - for(int i=0 ; i remoteRanks; - list notUsed ; - // I am a server leader of which remote ranks ? - computeLeaderProcess(commRank, commSize, remoteSize_, remoteRanks, notUsed) ; - - for(auto remoteRank : remoteRanks) - { - MPI_Status status ; - int size ; - MPI_Probe(0,remoteRank,localComm_, &status); - MPI_Get_count(&status, MPI_SIZE_T, &size) ; - elements_[i][remoteRank].resize(size) ; - // for each remote ranks receive the global indices from proc 0 - MPI_Recv(elements_[i][remoteRank].dataFirst(),size, MPI_SIZE_T,0,remoteRank, localComm_,&status) ; - } - - if (commRank==0) - { - vector status(remoteSize_) ; - // asynchronous for sender, wait for completion - MPI_Waitall(remoteSize_, requests.data(), status.data()) ; - } - } - - /** - * \brief Compute the remote connector for the element \b i when the remote view is not distributed. - * After the call, element_[i] is defined. - * \param i Indice of the element composing the remote grid. - * \param ranks The list of rank for which the local proc is in charge to compute the connector - * (if leader server for exemple). if ranks[rank] == false the corresponding elements_ - * is set to void array (no data to sent) just in order to notify corresponding remote server - * that the call is collective with each other one - */ - void CGridRemoteConnector::computeDstNonDistributed(int i, map& ranks) - { - auto& element = elements_[i] ; - map> globalIndexView ; - dstView_[i]->getGlobalIndexView(globalIndexView) ; - - - CClientClientDHTTemplate::Index2InfoTypeMap dataInfo; - - // First we feed the distributed hash map with key (remote global index) - // associated with the value of the remote rank - for(auto& it : globalIndexView) - if (it.first==0) // since the remote view is not distributed, insert only the remote rank 0 - { - auto& globalIndex=it.second ; - for(size_t ind : globalIndex) dataInfo[ind]=0 ; // associated the the rank 0 - } - - CClientClientDHTTemplate DHT(dataInfo, localComm_) ; - // after we feed the DHT with the local global indices of the source view - - CArray srcIndex ; - srcView_[i]->getGlobalIndexView(srcIndex) ; - DHT.computeIndexInfoMapping(srcIndex) ; - auto& returnInfo = DHT.getInfoIndexMap() ; - - // returnInfo contains now the map for each global indices to send to a list of remote rank - // now construct the element_ list of global indices for each rank in my list except if the erray must be empty - for (auto& rank : ranks) - { - if (rank.second) // non empty array => for rank that have not any data to be received - { - int size=0 ; - for(auto& it : returnInfo) if (!it.second.empty()) size++ ; - auto& array = element[rank.first] ; - array.resize(size) ; - size=0 ; - for(auto& it : returnInfo) - if (!it.second.empty()) - { - array(size)=it.first ; - size++ ; - } - } - else element[rank.first] = CArray(0) ; // empty array => for rank that have not any data to be received - } - } - - /** - * \brief Compute the remote connector for the element \b i when the source and the remote view are not distributed. - * After the call, element_[i] is defined. - * \param i Indice of the element composing the remote grid. - * \param ranks The list of rank for which the local proc is in charge to compute the connector - * (if leader server for exemple). if ranks[rank] == false the corresponding elements_ - * is set to void array (no data to sent) just in order to notify corresponding remote server - * that the call is collective with each other one - */ - - void CGridRemoteConnector::computeSrcDstNonDistributed(int i, map& ranks) - { - auto& element = elements_[i] ; - map> globalIndexView ; - dstView_[i]->getGlobalIndexView(globalIndexView) ; - - - CClientClientDHTTemplate::Index2InfoTypeMap dataInfo; - // First we feed the distributed hash map with key (remote global index) - // associated with the value of the remote rank - - for(auto& it : globalIndexView) - if (it.first==0) // insert only the remote rank 0 since the remote view is not distributed - { - auto& globalIndex=it.second ; - for(size_t ind : globalIndex) dataInfo[ind]=0 ; // associated the the rank 0 - } - - CClientClientDHTTemplate DHT(dataInfo, localComm_) ; - // after we feed the DHT with the local global indices of the source view - - int commRank, commSize ; - MPI_Comm_rank(localComm_,&commRank) ; - MPI_Comm_size(localComm_,&commSize) ; - CArray srcIndex ; - - // like the source view is not distributed, then only the rank 0 need to feed the DHT - if (commRank==0) srcView_[i]->getGlobalIndexView(srcIndex) ; - DHT.computeIndexInfoMapping(srcIndex) ; - auto& returnInfo = DHT.getInfoIndexMap() ; - - vector indGlo ; - if (commRank==0) - for(auto& it1 : returnInfo) - for(auto& it2 : it1.second) indGlo.push_back(it1.first) ; - - // now local rank 0 know which indices to seed to remote rank 0, but all the server - // must receive the same information. So only the leader rank will sent this. - // So local rank 0 must broadcast the information to all leader. - // for this we create a new communicator composed of local process that must send data - // to a remote rank, data are broadcasted, and element_[i] is construction for each remote - // rank in charge - int color=0 ; - if (ranks.empty()) color=0 ; - else color=1 ; - if (commRank==0) color=1 ; - MPI_Comm newComm ; - MPI_Comm_split(localComm_, color, commRank, &newComm) ; - if (color==1) - { - // ok, I am part of the process that must send something to one or more remote server - // so I get the list of global indices from rank 0 - int dataSize ; - if (commRank==0) dataSize=indGlo.size() ; - MPI_Bcast(&dataSize,1,MPI_INT, 0, newComm) ; - indGlo.resize(dataSize) ; - MPI_Bcast(indGlo.data(),dataSize,MPI_SIZE_T,0,newComm) ; - } - MPI_Comm_free(&newComm) ; - - // construct element_[i] from indGlo - for(auto& rank : ranks) - { - if (rank.second) - { - int dataSize=indGlo.size(); - auto& element = elements_[i][rank.first] ; - element.resize(dataSize) ; - for(int i=0;i(0) ; - } - - } - - - /** - * \brief Generic method the compute the grid remote connector. Only distributed elements are specifed in the source view and remote view. - * Connector for non distributed elements are computed separatly to improve performance and memory consumption. After the call, - * \b elements_ is defined. - * \param srcView List of the source views composing the grid, without non distributed views - * \param dstView List of the remote views composing the grid, without non distributed views - * \param indElements Index of the view making the correspondance between all views and views distributed (that are in input) - */ - void CGridRemoteConnector::computeGenericMethod(vector>& srcView, vector>& dstView, vector& indElements) - { - // generic method, every element can be distributed - int nDst = dstView.size() ; - vector dstSliceSize(nDst) ; - dstSliceSize[0] = 1 ; - for(int i=1; igetGlobalSize()*dstSliceSize[i-1] ; - - CClientClientDHTTemplate::Index2VectorInfoTypeMap dataInfo ; - CClientClientDHTTemplate::Index2VectorInfoTypeMap info ; // info map - - // first, we need to feed the DHT with the global index of the remote server - // for that : - // First the first element insert the in a DHT with key as the rank and value the list of global index associated - // Then get the previously stored index associate with the remote rank I am in charge and reinsert the global index - // corresponding to the position of the element in the remote view suing tensorial product - // finaly we get only the list of remote global index I am in charge for the whole remote grid - - for(int pos=0; pos> globalIndexView ; - dstView[pos]->getGlobalIndexView(globalIndexView) ; - - CClientClientDHTTemplate::Index2VectorInfoTypeMap lastInfo(info) ; - - if (pos>0) - { - CArray ranks(globalIndexView.size()) ; - auto it=globalIndexView.begin() ; - for(int i=0 ; ifirst ; - CClientClientDHTTemplate dataRanks(info, localComm_) ; - dataRanks.computeIndexInfoMapping(ranks) ; - lastInfo = dataRanks.getInfoIndexMap() ; - } - - info.clear() ; - for(auto& it : globalIndexView) - { - int rank = it.first ; - auto& globalIndex = it.second ; - auto& inf = info[rank] ; - if (pos==0) for(int i=0;i dataRanks(dataInfo, localComm_) ; - - // generate list of global index for src view - int nSrc = srcView.size() ; - vector srcSliceSize(nSrc) ; - - srcSliceSize[0] = 1 ; - for(int i=1; igetGlobalSize()*srcSliceSize[i-1] ; - - vector srcGlobalIndex ; - size_t sliceIndex=0 ; - srcView[nSrc-1]->getGlobalIndex(srcGlobalIndex, sliceIndex, srcSliceSize.data(), srcView.data(), nSrc-1) ; - // now we have the global index of the source grid in srcGlobalIndex - // we feed the DHT with the src global index (if we have) - if (srcGlobalIndex.size()>0) - { - CArray srcGlobalIndexArray(srcGlobalIndex.data(), shape(srcGlobalIndex.size()),neverDeleteData) ; - dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; - } - else - { - CArray srcGlobalIndexArray ; - dataRanks.computeIndexInfoMapping(srcGlobalIndexArray) ; - } - const auto& returnInfo = dataRanks.getInfoIndexMap() ; - // returnInfo contains now the map for each global indices to send to a list of remote rank - // but we want to use the tensorial product property to get the same information using only global - // index of element view. So the idea is to reverse the information : for a global index of the grid - // to send to the remote server, what is the global index of each element composing the grid ? - - vector>> elements(nSrc) ; // internal representation of elements composing the grid - - for(auto& indRanks : returnInfo) - { - size_t gridIndexGlo=indRanks.first ; - auto& ranks = indRanks.second ; - for(int i=nSrc-1; i>=0; i--) - { - auto& element = elements[i] ; - size_t localIndGlo = gridIndexGlo / srcSliceSize[i] ; - gridIndexGlo = gridIndexGlo % srcSliceSize[i] ; - for(int rank : ranks) element[rank].insert(localIndGlo) ; - } - } - -// elements_.resize(nSrc) ; - for(int i=0 ; i& indGlo = rankInd.second ; - CArray& indGloArray = elements_[indElements[i]][rank] ; - indGloArray.resize(indGlo.size()) ; - int j=0 ; - for (auto index : indGlo) { indGloArray(j) = index ; j++; } - } - } - - // So what about when there is some server that have no data to receive - // they must be inform they receive an event with no data. - // So find remote servers with no data, and one client will take in charge - // that it receive global index with no data (0-size) - vector ranks(remoteSize_,0) ; - for(auto& it : elements_[indElements[0]]) ranks[it.first] = 1 ; - MPI_Allreduce(MPI_IN_PLACE, ranks.data(), remoteSize_, MPI_INT, MPI_SUM, localComm_) ; - int commRank, commSize ; - MPI_Comm_rank(localComm_,&commRank) ; - MPI_Comm_size(localComm_,&commSize) ; - int pos=0 ; - for(int i=0; i(0) ; - pos++ ; - } - } - - /** - * \brief Once the connector is computed (compute \b elements_), redondant data can be avoid to be sent to the server. - * This call compute the redondant rank and store them in \b rankToRemove_ attribute. - * The goal of this method is to make a hash of each block of indice that determine wich data to send to a - * of a specific server rank using a hash method. So data to send to a rank is associated to a hash. - * After we compare hash between local rank and remove redondant data corresponding to the same hash. - */ - void CGridRemoteConnector::computeRedondantRanks(void) - { - int commRank ; - MPI_Comm_rank(localComm_,&commRank) ; - - set ranks; - for(auto& element : elements_) - for(auto& it : element) ranks.insert(it.first) ; - - for(auto& element : elements_) - for(auto& it : element) - if (ranks.count(it.first)==0) ERROR("void CGridRemoteConnector::removeRedondantRanks(void)",<<"number of ranks in elements is not coherent between each element") ; - - HashXIOS hashGlobalIndex; - - map hashRanks ; - for(auto& element : elements_) - for(auto& it : element) - { - auto& globalIndex=it.second ; - int rank=it.first ; - size_t hash ; - hash=0 ; - for(int i=0; i0) - { - if (hashRanks.count(rank)==0) hashRanks[rank]=hash ; - else hashRanks[rank]=hashGlobalIndex.hashCombine(hashRanks[rank],hash) ; - } - } - // a hash is now computed for data block I will sent to the server. - - CClientClientDHTTemplate::Index2InfoTypeMap info ; - - map hashRank ; - HashXIOS hashGlobalIndexRank; - for(auto& it : hashRanks) - { - it.second = hashGlobalIndexRank.hashCombine(it.first,it.second) ; - info[it.second]=commRank ; - hashRank[it.second]=it.first ; - } - - // we feed a DHT map with key : hash, value : myrank - CClientClientDHTTemplate dataHash(info, localComm_) ; - CArray hashList(hashRank.size()) ; - - int i=0 ; - for(auto& it : hashRank) { hashList(i)=it.first ; i++; } - - // now who are the ranks that have the same hash : feed the DHT with my list of hash - dataHash.computeIndexInfoMapping(hashList) ; - auto& hashRankList = dataHash.getInfoIndexMap() ; - - - for(auto& it : hashRankList) - { - size_t hash = it.first ; - auto& ranks = it.second ; - - bool first=true ; - // only the process with the lowest rank get in charge of sendinf data to remote server - for(int rank : ranks) if (commRank>rank) first=false ; - if (!first) rankToRemove_.insert(hashRank[hash]) ; - } - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_remote_connector.hpp b/xios_2311_src/src/distribution/grid_remote_connector.hpp deleted file mode 100755 index e1875b49..00000000 --- a/xios_2311_src/src/distribution/grid_remote_connector.hpp +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef __GRID_REMOTE_CONNECTOR_HPP__ -#define __GRID_REMOTE_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" - - -namespace xios -{ - - class CGridRemoteConnector - { - - public: - - CGridRemoteConnector(vector>& srcView, vector>& dstView, MPI_Comm localComm, int remoteSize) ; - CGridRemoteConnector(vector>& srcView, vector>& dstView, MPI_Comm localComm, int remoteSize) ; - void computeViewDistribution(void) ; - void computeConnector(bool eliminateRedundant=true) ; - void computeConnectorMethods(void) ; - void computeConnectorRedundant(void) ; - void computeGenericMethod(vector>& srcView, vector>& dstView, vector& indElements) ; - void computeSrcDstNonDistributed(int i, map& ranks) ; - void computeDstNonDistributed(int i, map& ranks) ; - void computeSrcNonDistributed(int i) ; - void computeRedondantRanks(void) ; - std::map>& getDistributedGlobalIndex(int pos) { return elements_[pos] ;} - const vector& getIsSrcViewDistributed(void) { return isSrcViewDistributed_ ;} - const vector& getIsDstViewDistributed(void) { return isDstViewDistributed_ ;} - const set& getRankToRemove(void) {return rankToRemove_;} - - protected: - - /** - * Source views composing the source grid. The vector store an internal copy of pointer elements composing the grid. - * It is feed at construction time - */ - vector> srcView_ ; - - /** - * Destination views composing the source grid. The vector store an internal copy of pointer elements composing the grid - * It is feed at construction time - */ - vector> dstView_ ; - - /** - * The list of global indices to send to each rank of the remote view (servers). The vector store the information for each element, and the map - * specify a list of global indices to send to each rank of the remote view. - * size of element_[] -> number of elements composing the grids (source/destination) - * element[i][rank] == CArray -> list of global indices to send to the remote process of rank \b rank for the view \b i - * The is computed when calling computeConnector internal methods - * map can be returned trough the public accessor : getDistributedGlobalIndex(int) - */ - vector>> elements_ ; - - /** - /* internal copy of the local communicator (client workflow). Feed at construction time. - */ - MPI_Comm localComm_ ; - - /** - /* size of the remote communicator (== nb of servers). Feed at consctruction time - */ - int remoteSize_ ; - - /** - /* for each view composing the source grid, the vector store the information about the distribution of the element, i.e. - * if each ranks of the local view has exactly the same global indices than each other. This is computed when calling - * \b computeViewDistribution method. - */ - vector isSrcViewDistributed_ ; - - /** - /* for each view composing the destination grid, the vector store the information about the distribution of the element, i.e. - * if each ranks of the remote view has exactly the same global indices than each other. This is computed when calling - * \b computeViewDistribution method. - */ - vector isDstViewDistributed_ ; - - /** - /* Redondant ranks of the \b elements_ are stored there by calling computeRedondantRanks(), to be removed latter or to be retrieve from elsewhere. - */ - set rankToRemove_ ; - - - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_scatterer_connector.hpp b/xios_2311_src/src/distribution/grid_scatterer_connector.hpp deleted file mode 100755 index 4f1caa10..00000000 --- a/xios_2311_src/src/distribution/grid_scatterer_connector.hpp +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef __GRID_SCATTERER_CONNECTOR_HPP__ -#define __GRID_SCATTERER_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" -#include "scatterer_connector.hpp" - - -namespace xios -{ - - class CGridScattererConnector - { - private: - vector> elementsConnector_ ; - map nbSenders_ ; - vector ranks_ ; - map dstSize_ ; - - - public: - CGridScattererConnector(vector> elementsConnector) : elementsConnector_(elementsConnector) - { - nbSenders_ = elementsConnector[0]->getNbSenders() ; - for(auto& rank : nbSenders_) - { - ranks_.push_back(rank.first) ; - dstSize_[rank.first] = 1 ; - } - - // init dstSize_ - for(auto& connector : elementsConnector_) - { - auto& sizes = connector->getDstSize() ; - for(auto& rankSize : sizes) dstSize_[rankSize.first] = dstSize_[rankSize.first] * rankSize.second ; - } - } - - const map& getTransferedDataSize(void) {return dstSize_;} - - template - void transfer(const CArray& input, map>& output) - { - int n = elementsConnector_.size()-1 ; - shared_ptr* connector = elementsConnector_.data() + n ; - for(int rank : ranks_) - { - auto& out = output[rank] ; - out.resize(dstSize_[rank]) ; - elementsConnector_[n]->transfer(rank, connector, n, input.dataFirst(), out.dataFirst()) ; - } - } - - template - void transfer(const CArray& input, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - map> output ; - transfer(input, output) ; - sendToServer(output, client, event, messageHeader) ; - } - - template - void sendToServer(const map>& dataOut, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - list messages; - for(auto& ranksData : dataOut) - { - int rank = ranksData.first ; - auto& data = ranksData.second ; - - messages.push_back(CMessage(messageHeader)); - messages.back().push(data) ; - event.push(rank, nbSenders_[rank], messages.back()); - } - client->sendEvent(event) ; - } - - void transfer(CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - list messages; - for(auto& it : nbSenders_) - { - int rank = it.first ; - auto& nbSender = it.second ; - - messages.push_back(CMessage(messageHeader)); - event.push(rank, nbSenders_[rank], messages.back()); - } - client->sendEvent(event) ; - } - }; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/grid_transform_connector.cpp b/xios_2311_src/src/distribution/grid_transform_connector.cpp deleted file mode 100755 index ff58d445..00000000 --- a/xios_2311_src/src/distribution/grid_transform_connector.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "grid_transform_connector.hpp" -#include "element.hpp" -#include "scatterer_connector.hpp" -#include "gatherer_connector.hpp" -#include "grid_remote_connector.hpp" - - -namespace xios -{ - void CGridTransformConnector::computeConnector(bool eliminateRedundant) - { - int commSize ; - int commRank ; - MPI_Comm_size(localComm_, &commSize) ; - MPI_Comm_rank(localComm_, &commRank) ; - int nElements = srcViews_.size() ; - - auto remoteConnector = make_shared(srcViews_, remoteViews_, localComm_, commSize) ; - remoteConnector->computeConnector(eliminateRedundant) ; - - vector> sendElements(nElements) ; - scattererConnector_.resize(nElements) ; - gathererConnector_.resize(nElements) ; - - for(int i=0;i(srcViews_[i]->getGlobalSize(), remoteConnector->getDistributedGlobalIndex(i)) ; - sendElements[i]->addFullView() ; - scattererConnector_[i] = make_shared(srcViews_[i], sendElements[i]->getView(CElementView::FULL), localComm_, commSize) ; - scattererConnector_[i]->computeConnector() ; - std::map>& sendIndex = sendElements[i]->getGlobalIndex() ; - - // how much sender ? - vector nbSenders(commSize) ; - int nbSender ; - for(auto& it : sendIndex) nbSenders[it.first]=1 ; - vector recvCounts(commSize,1) ; - MPI_Reduce_scatter(nbSenders.data(), &nbSender, recvCounts.data(), MPI_INT, MPI_SUM, localComm_) ; - - // transfer global index - // send Index - vector sendReq ; - for(auto& it : sendIndex) - { - MPI_Request req ; - MPI_Isend(it.second.dataFirst(), it.second.numElements(), MPI_SIZE_T, it.first,0, localComm_, &req) ; - sendReq.push_back(req) ; - } - - // receive index - map> recvIndex ; - - for(int j=0; j recvBuff(size) ; - MPI_Recv(recvBuff.data(), size, MPI_SIZE_T, status.MPI_SOURCE,0, localComm_,&status) ; - if (size!=0) { - CArray arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ; - recvIndex[status.MPI_SOURCE].reference(arrayTmp) ; - } - else { - CArray arrayTmp(0) ; - recvIndex[status.MPI_SOURCE].reference(arrayTmp) ; - } - if (recvRankSize_.count(status.MPI_SOURCE)==0) recvRankSize_[status.MPI_SOURCE] = size ; - else recvRankSize_[status.MPI_SOURCE] *= size ; - } - vector sendStatus(sendReq.size()) ; - MPI_Waitall(sendReq.size(),sendReq.data(),sendStatus.data()) ; - - // create gatherer connector - - auto recvElement = make_shared(remoteViews_[i]->getGlobalSize(), recvIndex) ; - recvElement->addFullView() ; - gathererConnector_[i] = make_shared(recvElement->getView(CElementView::FULL), remoteViews_[i]) ; - gathererConnector_[i]->computeConnector() ; - } - - gridScattererConnector_ = make_shared(scattererConnector_) ; - gridGathererConnector_ = make_shared(gathererConnector_) ; - } - -} diff --git a/xios_2311_src/src/distribution/grid_transform_connector.hpp b/xios_2311_src/src/distribution/grid_transform_connector.hpp deleted file mode 100755 index b2376563..00000000 --- a/xios_2311_src/src/distribution/grid_transform_connector.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __GRID_TRANSFORM_CONNECTOR_HPP__ -#define __GRID_TRANSFORM_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "local_view.hpp" -#include "grid_scatterer_connector.hpp" -#include "grid_gatherer_connector.hpp" -#include "reduction_types.hpp" -#include "mpi.hpp" - -namespace xios -{ - - - class CGridTransformConnector - { - - public: - CGridTransformConnector(vector> srcViews, vector> remoteViews, MPI_Comm localComm) - : srcViews_(srcViews), remoteViews_(remoteViews), localComm_(localComm) - { } - - void computeConnector(bool eliminateRedundant=true) ; - protected: - MPI_Comm localComm_ ; - vector> srcViews_ ; - vector> remoteViews_ ; - map recvRankSize_ ; - - vector> scattererConnector_ ; - vector> gathererConnector_ ; - shared_ptr gridScattererConnector_ ; - shared_ptr gridGathererConnector_ ; - - public: - template - void transfer(const CArray& dataIn, CArray& dataOut, EReduction op = EReduction::none) - { - map> tmpArrayIn ; - gridScattererConnector_->transfer(dataIn, tmpArrayIn) ; - vector requests ; - MPI_Request request ; - for(auto it : tmpArrayIn) - { - auto& array = it.second ; - MPI_Issend(array.dataFirst(), array.numElements(), MPI_GetType(), it.first, 0, localComm_, &request) ; - requests.push_back(request) ; - } - - map> tmpArrayOut ; - for(auto it : recvRankSize_) - { - auto& array = tmpArrayOut[it.first] ; - array.resize(it.second) ; - MPI_Irecv(array.dataFirst(), array.numElements(), MPI_GetType(), it.first, 0, localComm_, &request) ; - requests.push_back(request) ; - } - - vector status(requests.size()) ; - MPI_Waitall(requests.size(), requests.data(),status.data()) ; - - const double nanValue = std::numeric_limits::quiet_NaN(); - - if (op == EReduction::none) gridGathererConnector_->transfer(tmpArrayOut, dataOut, nanValue) ; - else gridGathererConnector_->transfer(tmpArrayOut, dataOut, op) ; - } - - }; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/leader_process.cpp b/xios_2311_src/src/distribution/leader_process.cpp deleted file mode 100755 index 532e7967..00000000 --- a/xios_2311_src/src/distribution/leader_process.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "leader_process.hpp" - -namespace xios -{ - void computeLeaderProcess(int clientRank, int clientSize, int serverSize, - std::list& rankRecvLeader, - std::list& rankRecvNotLeader) - { - rankRecvLeader.clear() ; - rankRecvNotLeader.clear() ; - if ((0 == clientSize) || (0 == serverSize)) return; - - if (clientSize < serverSize) - { - int serverByClient = serverSize / clientSize; - int remain = serverSize % clientSize; - int rankStart = serverByClient * clientRank; - - if (clientRank < remain) - { - serverByClient++; - rankStart += clientRank; - } - else rankStart += remain; - - for (int i = 0; i < serverByClient; i++) - rankRecvLeader.push_back(rankStart + i); - - rankRecvNotLeader.resize(0); - } - else - { - int clientByServer = clientSize / serverSize; - int remain = clientSize % serverSize; - - if (clientRank < (clientByServer + 1) * remain) - { - if (clientRank % (clientByServer + 1) == 0) - rankRecvLeader.push_back(clientRank / (clientByServer + 1)); - else - rankRecvNotLeader.push_back(clientRank / (clientByServer + 1)); - } - else - { - int rank = clientRank - (clientByServer + 1) * remain; - if (rank % clientByServer == 0) - rankRecvLeader.push_back(remain + rank / clientByServer); - else - rankRecvNotLeader.push_back(remain + rank / clientByServer); - } - } - } - - int getLeaderRank(int clientSize, int serverSize, int serverRank) - { - int rank ; - if (clientSize > serverSize) - { - int serverByClient = clientSize / serverSize; - int remain = clientSize % serverSize; - rank=0 ; - if (remain < serverRank) rank = (serverByClient+1)*remain + serverByClient * (serverRank-remain) ; - else rank = (serverByClient+1) * serverRank ; - } - else - { - int serverByClient = serverSize / clientSize; - int remain = serverSize % clientSize; - - if (remain*(serverByClient+1) > serverRank ) rank = serverRank/(serverByClient+1) ; - else - { - serverRank = serverRank-(serverByClient+1)*remain ; - rank = remain + serverRank/serverByClient ; - } - } - return rank ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/leader_process.hpp b/xios_2311_src/src/distribution/leader_process.hpp deleted file mode 100755 index 8ca0d767..00000000 --- a/xios_2311_src/src/distribution/leader_process.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __LEADER_PROCESS_HPP__ -#define __LEADER_PROCESS_HPP__ -#include - -namespace xios -{ - void computeLeaderProcess(int clientRank, int clientSize, int serverSize, - std::list& rankRecvLeader, - std::list& rankRecvNotLeader) ; - int getLeaderRank(int clientSize, int serverSize, int serverRank) ; -} - -#endif diff --git a/xios_2311_src/src/distribution/local_connector.cpp b/xios_2311_src/src/distribution/local_connector.cpp deleted file mode 100755 index a88d0fc7..00000000 --- a/xios_2311_src/src/distribution/local_connector.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "local_connector.hpp" - - -namespace xios -{ - void CLocalConnector::computeConnector(void) - { - int srcLocalSize=srcView_->getLocalSize() ; - const CArray& srcIndex = srcView_->getIndex() ; - int srcSize = srcIndex.numElements() ; - - int dstLocalSize=dstView_->getLocalSize() ; - const CArray& dstIndex = dstView_->getIndex() ; - int dstSize = dstIndex.numElements() ; - - CArray local(srcLocalSize) ; - local = -1 ; - mask_.resize(dstSize) ; - - for(int i=0;i=0 && srcIndex(i) < srcLocalSize) local(srcIndex(i)) = i ; - } - - int connectorSize=0 ; - for(int i=0;i=0 && dstIndex(i) < dstLocalSize && local(dstIndex(i))!=-1) - { - mask_[i]=true ; - connectorSize++ ; - } - else mask_[i]=false ; - } - - connector_.resize(connectorSize) ; - connectorSize=0 ; - for(int i=0;i srcView_; - shared_ptr dstView_; - int srcSize_ ; - int dstSize_ ; - vector connector_ ; - vector mask_ ; - - public: - - CLocalConnector(shared_ptr srcView, shared_ptr dstView) : srcView_(srcView), dstView_(dstView), - srcSize_(srcView->getSize()), dstSize_(dstView->getSize()) {} - void computeConnector(void); - int getSrcSize(void) {return srcSize_ ;} - int getDstSize(void) {return dstSize_ ; } - - template void transfer(const CArray& input, CArray& output) - { - int size=mask_.size() ; - output.resize(size) ; - for(int i=0,j=0;i void transfer(const CArray& input, CArray& output, T missingValue) - { - int size=mask_.size() ; - output.resize(size) ; - for(int i=0,j=0;i void transfer(shared_ptr* connectors, int nConnectors, const T* input, T* output) - { - - int size=mask_.size() ; - if (nConnectors==0) - { - for(int i=0,j=0;igetSrcSliceSize(connectors-1, nConnectors-1) ; - int dstSliceSize = (*(connectors-1))->getDstSliceSize(connectors-1, nConnectors-1) ; - - T* out = output ; - for(int i=0,j=0;itransfer(connectors-1, nConnectors-1, input+connector_[j]*srcSliceSize, out) ; // the multiplication must be avoid in further optimization - j++ ; - } - out += dstSliceSize ; - } - - } - } - - template void transfer(shared_ptr* connectors, int nConnectors, const T* input, T* output, T missingValue) - { - int size=mask_.size() ; - if (nConnectors==0) - { - for(int i=0,j=0;igetSrcSliceSize(connectors-1, nConnectors-1) ; - int dstSliceSize = (*(connectors-1))->getDstSliceSize(connectors-1, nConnectors-1) ; - - T* out = output ; - for(int i=0,j=0;itransfer(connectors-1, nConnectors-1, input+connector_[j]*srcSliceSize, out, missingValue) ; // the multiplication must be avoid in further optimization - j++ ; - } - else for (int j=0 ; j* connectors, int nConnectors) - { if (nConnectors==0) return srcSize_ ; else return srcSize_ * (*(connectors-1))->getSrcSliceSize(connectors-1,nConnectors-1) ; } - - int getDstSliceSize(shared_ptr* connectors, int nConnectors) - { if (nConnectors==0) return dstSize_ ; else return dstSize_ * (*(connectors-1))->getDstSliceSize(connectors-1,nConnectors-1) ; } - - }; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/local_view.cpp b/xios_2311_src/src/distribution/local_view.cpp deleted file mode 100755 index ad06a0ca..00000000 --- a/xios_2311_src/src/distribution/local_view.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "local_view.hpp" -#include "element.hpp" -#include "array_new.hpp" -#include "remote_connector.hpp" - -namespace xios -{ - CLocalView::CLocalView(shared_ptr parent, CElementView::type type, const CArray& indexView) - : CDistributedView( parent, type, {{ parent->localRank_, indexView }} ), - localRank_(parent->localRank_), - globalIndex_(parent->globalIndex_), size_(CDistributedView::size_[parent->localRank_]), - index_(CDistributedView::index_[parent->localRank_]), localSize_(CDistributedView::localSize_[parent->localRank_]) - { - - } - - CLocalView::CLocalView(shared_ptr parent, CElementView::type type, const CArray& maskView) - : CDistributedView( parent, type, {{ parent->localRank_, maskView }} ), - localRank_(parent->localRank_), - globalIndex_(parent->globalIndex_), size_(CDistributedView::size_[parent->localRank_]), - index_(CDistributedView::index_[parent->localRank_]), localSize_(CDistributedView::localSize_[parent->localRank_]) - { - - } - - void CLocalView::sendRemoteElement(shared_ptr connector, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - int n = index_.numElements() ; - int nglo=globalIndex_.numElements() ; - CArray ind(n) ; - for(int i=0; i=0 && index_(i)transferToServer(ind, client, event, message) ; - } - - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/local_view.hpp b/xios_2311_src/src/distribution/local_view.hpp deleted file mode 100755 index c996cb03..00000000 --- a/xios_2311_src/src/distribution/local_view.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef __LOCAL_VIEW_HPP__ -#define __LOCAL_VIEW_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" - -namespace xios -{ - - class CLocalElement ; - class CRemoteConnector ; - - class CLocalView : public CDistributedView - { - public: - CLocalView(shared_ptr parent, CElementView::type type, const CArray& indexView) ; - CLocalView(shared_ptr parent, CElementView::type type, const CArray& maskView) ; - - const CArray& getIndex(void) { return index_ ;} - const CArray& getGlobalIndex(void) { return globalIndex_ ;} - - void getGlobalIndexView(CArray& globalIndexView) - { - globalIndexView.resize(size_) ; - int pos=0 ; - for(int i=0 ; i=0 && index_(i)& globalIndex, size_t sliceIndex, size_t* sliceSize, shared_ptr* localView, int pos) - { - if (pos==0) - { - for(int i=0;i=0 && index_(i)=0 && index_(i)getGlobalIndex(globalIndex, sliceIndex + globalIndex_(index_(i))*sliceSize[pos], sliceSize, localView, pos-1) ; - } - } - - - int getLocalSize(void) {return localSize_ ;} - int getSize(void) {return size_;} - void sendRemoteElement(shared_ptr connector, CContextClient* client, CEventClient& event, const CMessage& messageHeader) ; - - CArray& globalIndex_ ; - CArray& index_ ; - int& size_ ; /** The number of index composing the view, ie the size of the corresponding data, ie the size of index_ */ - int& localRank_ ; - int& localSize_ ; /** The local size of the element, ie the size of globalIndex_ */ - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/reduce_transform_connector.cpp b/xios_2311_src/src/distribution/reduce_transform_connector.cpp deleted file mode 100755 index 959a6ed1..00000000 --- a/xios_2311_src/src/distribution/reduce_transform_connector.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "reduce_transform_connector.hpp" -#include "exception.hpp" - -namespace xios -{ - - CReduceTransformConnector::CReduceTransformConnector(shared_ptr srcView, shared_ptr dstView, EReduction op, - unordered_map>& indexMap, bool detectMissingValue) - : srcView_(srcView), dstView_(dstView), detectMissingValue_(detectMissingValue) - { - switch(op) - { - case EReduction::sum : - transfer_=&CReduceTransformConnector::transferSum ; - break ; - case EReduction::min : - transfer_=&CReduceTransformConnector::transferMin ; - break ; - case EReduction::max : - transfer_=&CReduceTransformConnector::transferMax ; - break ; - case EReduction::average : - transfer_=&CReduceTransformConnector::transferAverage ; - break ; - default : - ERROR("CReduceTransformConnector::CReduceTransformConnector", - <<"reduction operator "<<(int)op<<" is not defined for this operation") ; - break ; - } - - computeConnector(indexMap) ; - } - - void CReduceTransformConnector::computeConnector(unordered_map>& indexMap) - { - CArray dstGlobalIndex ; - CArray srcGlobalIndex ; - dstView_->getGlobalIndexView(dstGlobalIndex) ; - srcView_->getGlobalIndexView(srcGlobalIndex) ; - unordered_map srcMapIndex ; - srcSize_ = srcGlobalIndex.numElements() ; - dstSize_ = dstGlobalIndex.numElements() ; - - for(int i=0;i - - - -namespace xios -{ - - class CReduceTransformConnector - { - - private: - shared_ptr srcView_; - shared_ptr dstView_; - - vector connector_; // sizeof sum(nWeights_) - vector nSrc_ ; // sizeof dstSize_ - int srcSize_ ; - int dstSize_ ; - bool detectMissingValue_ ; - EReduction type_ ; - - typedef void (CReduceTransformConnector::* transferPtr)(int, int, const CArray& , CArray&) ; - transferPtr transfer_ ; - - void computeConnector(unordered_map>& indexMap) ; - - public: - - CReduceTransformConnector(shared_ptr srcView, shared_ptr dstView, EReduction op, unordered_map>& indexMap, - bool detectMissingValue=true) ; - - void transfer(const CArray& dataIn, CArray& dataOut) - { - transfer(1,1,dataIn, dataOut) ; - } - void transfer(int sizeT, const CArray& dataIn, CArray& dataOut) - { - transfer(1,sizeT, dataIn, dataOut) ; - } - - void transfer(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) - { - (this->*transfer_)(repeat, sizeT, dataIn, dataOut) ; - } - - private : - - void transferSum(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) - { - double defaultValue = std::numeric_limits::quiet_NaN(); - - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - if (detectMissingValue_) - { - vector touched(repeat* dstSlice, false) ; - int posr=0 ; - for(int r=0;r& dataIn, CArray& dataOut) - { - double defaultValue = std::numeric_limits::quiet_NaN(); - - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - if (detectMissingValue_) - { - vector touched(repeat* dstSlice, false) ; - int posr=0 ; - for(int r=0;r& dataIn, CArray& dataOut) - { - double defaultValue = std::numeric_limits::quiet_NaN(); - - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - if (detectMissingValue_) - { - vector touched(repeat* dstSlice, false) ; - int posr=0 ; - for(int r=0;r& dataIn, CArray& dataOut) - { - double defaultValue = std::numeric_limits::quiet_NaN(); - - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - if (detectMissingValue_) - { - vector touched(repeat* dstSlice, 0) ; - int posr=0 ; - for(int r=0;r::Index2VectorInfoTypeMap info ; - for(auto& dstIndex : dstView_->getIndex()) - { - int rank=dstIndex.first ; - auto& indexList=dstIndex.second ; - auto& globalIndex = dstView_->getGlobalIndex()[rank] ; - for(int i=0;i dataRanks(info, localComm_) ; - - set setGlobalIndex ; // all global index from src - auto& srcIndex = srcView_->getIndex() ; - auto& globalIndex = srcView_->getGlobalIndex() ; - int globalIndexSize = globalIndex.numElements() ; - int indexSize = srcIndex.numElements() ; - for(int i=0;i=0 & srcIndex(i) srcGlobalIndex(setGlobalIndex.size()) ; - int i=0 ; - for(auto& globalIndex : setGlobalIndex) - { - srcGlobalIndex(i) = globalIndex ; - i++ ; - } - - dataRanks.computeIndexInfoMapping(srcGlobalIndex) ; - const auto& returnInfo = dataRanks.getInfoIndexMap() ; - - // so we have the info where to send data : rank and local index. - // create the interconnector : - map> element ; - for(int i=0;i=0 & srcIndex(i) arrayTmp(rankIndex.second.data(), shape(rankIndex.second.size()), duplicateData) ; - element_[rankIndex.first].reference(arrayTmp) ; - } - - // compute the number of senders for a remote destination view - int commSize ; - MPI_Comm_size(localComm_, &commSize) ; - vector ranks(commSize,0) ; - for(auto& rank : connector_) ranks[rank.first] = 1 ; - MPI_Allreduce(MPI_IN_PLACE,ranks.data(),commSize,MPI_INT,MPI_SUM,localComm_) ; - for(auto& rank : connector_) nbSenders_[rank.first] = ranks[rank.first] ; - } - - - - - -} diff --git a/xios_2311_src/src/distribution/remote_connector.hpp b/xios_2311_src/src/distribution/remote_connector.hpp deleted file mode 100755 index e46a73c3..00000000 --- a/xios_2311_src/src/distribution/remote_connector.hpp +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef __REMOTE_CONNECTOR_HPP__ -#define __REMOTE_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" - - -namespace xios -{ - - class CRemoteConnector - { - private: - shared_ptr srcView_; - shared_ptr dstView_; - map> connector_ ; // connector[rank][srcIndex] - - MPI_Comm localComm_ ; - map nbSenders_ ; // number of participant when sending remote buffer - map> element_ ; // global index of elements to send - - public: - CRemoteConnector(shared_ptr srcView, shared_ptr dstView, MPI_Comm localComm) : srcView_(srcView), dstView_(dstView), localComm_(localComm){} ; - void computeConnector(void) ; - map>& getDistributedGlobalIndex() { return element_ ;} - - template - void transfer(const CArray& dataIn, map>& dataOut) - { - auto ptrDataIn = dataIn.dataFirst() ; - for(auto& indexRank : connector_) - { - int rank=indexRank.first ; - auto& index=indexRank.second ; - auto it = dataOut.emplace(rank, CArray(index.size())).first ; // return an iterator on the obect inserted - auto ptrDataOut = it->second.dataFirst() ; - for(auto ind : index) - { - *ptrDataOut = ptrDataIn[ind] ; - ptrDataOut++ ; - } - } - } - - template - void sendToServer(map>& dataOut, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - list messages; - for(auto ranksData : dataOut) - { - int rank = ranksData.first ; - auto& data = ranksData.second ; - - messages.push_back(CMessage(messageHeader)); - messages.back().push(data) ; - event.push(rank, nbSenders_[rank], messages.back()); - } - client->sendEvent(event) ; - } - - template - void transferToServer(const CArray& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - map> dataOut ; - transfer(dataIn, dataOut) ; - sendToServer(dataOut, client, event,messageHeader) ; - } - - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/scatterer_connector.cpp b/xios_2311_src/src/distribution/scatterer_connector.cpp deleted file mode 100755 index 0fea68bf..00000000 --- a/xios_2311_src/src/distribution/scatterer_connector.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "scatterer_connector.hpp" - - -namespace xios -{ - - void CScattererConnector::computeConnector(void) - { - auto& srcGlobalIndex = srcView_->getGlobalIndex() ; - auto& srcIndex = srcView_->getIndex() ; - srcSize_=srcIndex.numElements() ; - auto srcSize = srcView_->getSize() ; - auto srcLocalSize = srcView_->getLocalSize() ; - - auto& dstIndex = dstView_->getIndex() ; - for(auto& rankIndex : dstIndex) dstSize_[rankIndex.first]=rankIndex.second.numElements() ; - auto& dstGlobalIndex = dstView_->getGlobalIndex() ; - - unordered_map mapGlobalLocalIndex ; - int globalIndexSize=srcGlobalIndex.size() ; - - for(int i=0 ; i=0 && srcIndex(i) = 0 && index(i) < localSize) - { - const auto& it = mapGlobalLocalIndex.find(globalIndex(index(i))) ; - if (it != mapGlobalLocalIndex.end()) - { - connector.push_back(it->second) ; - mask[i] = true ; - } - else mask[i]=false ; - } - else mask[i]=false ; - } - } - - // compute the number of senders for a remote destination view - vector ranks(remoteCommSize_,0) ; - for(auto& rank : connector_) ranks[rank.first] = 1 ; - MPI_Allreduce(MPI_IN_PLACE,ranks.data(),remoteCommSize_,MPI_INT,MPI_SUM,localComm_) ; - for(auto& rank : connector_) nbSenders_[rank.first] = ranks[rank.first] ; - - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/scatterer_connector.hpp b/xios_2311_src/src/distribution/scatterer_connector.hpp deleted file mode 100755 index 2d61a55b..00000000 --- a/xios_2311_src/src/distribution/scatterer_connector.hpp +++ /dev/null @@ -1,210 +0,0 @@ -#ifndef __SCATTERER_CONNECTOR_HPP__ -#define __SCATTERER_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "mpi.hpp" -#include "local_view.hpp" -#include "distributed_view.hpp" -#include "context_client.hpp" - - -namespace xios -{ - - class CScattererConnector - { - - private: - map> connector_ ; - map> mask_ ; // mask is on dst view - MPI_Comm localComm_ ; - int remoteCommSize_ ; - - shared_ptr srcView_ ; - shared_ptr dstView_ ; - map nbSenders_ ; // number of participant when sending remote buffer - int srcSize_ ; - map dstSize_ ; - - public: - - CScattererConnector(shared_ptr srcView, shared_ptr dstView, MPI_Comm localComm, int remoteCommSize) - : srcView_(srcView), dstView_(dstView), localComm_(localComm), remoteCommSize_(remoteCommSize) {} - void computeConnector(void) ; - - template - void transfer(const CArray& dataIn, map>& dataOut) - { - transfer(1,1, dataIn, dataOut) ; - } - - template - void transfer(const CArray& dataIn, map>& dataOut, T missingValue) - { - transfer(1, 1, dataIn, dataOut, missingValue) ; - } - - template - void transfer(int sizeT, const CArray& dataIn, map>& dataOut) - { - transfer(1, sizeT, dataIn, dataOut); - } - - template - void transfer(int repeat, int sizeT, const CArray& dataIn, map>& dataOut) - { - // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) - size_t srcSlice = sizeT*srcSize_ ; - for(auto& rankConnector : connector_) - { - int rank = rankConnector.first ; - auto& connector = rankConnector.second ; - auto& mask = mask_[rank] ; - int dstSize = mask.size() ; - auto& data = dataOut[rank] ; - size_t dstSlice = dstSize*sizeT ; - data.resize(repeat*dstSlice) ; - T* dstData = data.dataFirst() ; - const T* srcData = dataIn.dataFirst() ; - for(int l=0; l - void transfer(int repeat, int sizeT, const CArray& dataIn, map>& dataOut, T missingValue) - { - // for future, make a specific transfer function for sizeT=1 to avoid multiplication (increasing performance) - size_t srcSlice = sizeT*srcSize_ ; - for(auto& rankConnector : connector_) - { - int rank = rankConnector.first ; - auto& connector = rankConnector.second ; - auto& mask = mask_[rank] ; - int dstSize = mask.size() ; - auto& data = dataOut[rank] ; - size_t dstSlice = dstSize*sizeT ; - data.resize(repeat * dstSlice) ; - T* dstData = data.dataFirst() ; - const T* srcData = dataIn.dataFirst() ; - for(int l=0; l - void transfer(const CArray& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - transfer( 1, dataIn, client, event, messageHeader) ; - } - - template - void transfer(const CArray& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - transfer( 1, dataIn, missingValue, client, event, messageHeader) ; - } - - template - void transfer(int sizeT, const CArray& dataIn, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - map> dataOut ; - transfer(1, sizeT, dataIn, dataOut) ; - sendToServer(dataOut, client, event, messageHeader) ; - } - - template - void transfer(int sizeT, const CArray& dataIn, T missingValue, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - map> dataOut ; - transfer(1, sizeT, dataIn, dataOut, missingValue) ; - sendToServer(dataOut, client, event, messageHeader) ; - } - - template - void transfer(int rank, shared_ptr* connectors, int nConnectors, const T* input, T* output) - { - auto& connector = connector_[rank] ; // probably costly, find a better way to avoid the map - auto& mask = mask_[rank] ; - int dstSize = mask.size() ; - if (nConnectors==0) - { - for(int i=0, j=0; igetSrcSliceSize(connectors-1, nConnectors-1) ; - int dstSliceSize = (*(connectors-1))->getDstSliceSize(rank, connectors-1, nConnectors-1) ; - - T* out = output ; - for(int i=0,j=0;itransfer(rank, connectors-1, nConnectors-1, input+connector[j]*srcSliceSize, out) ; // the multiplication must be avoid in further optimization - j++ ; - } - out += dstSliceSize ; - } - } - } - - - template - void sendToServer(const map>& dataOut, CContextClient* client, CEventClient& event, const CMessage& messageHeader) - { - list messages; - for(auto ranksData : dataOut) - { - int rank = ranksData.first ; - auto& data = ranksData.second ; - - messages.push_back(CMessage(messageHeader)); - messages.back().push(data) ; - event.push(rank, nbSenders_[rank], messages.back()); - } - client->sendEvent(event) ; - } - - int getSrcSliceSize(shared_ptr* connectors, int nConnectors) - { if (nConnectors==0) return srcSize_ ; else return srcSize_ * (*(connectors-1))->getSrcSliceSize(connectors-1,nConnectors-1) ; } - - int getDstSliceSize(int rank, shared_ptr* connectors, int nConnectors) - { if (nConnectors==0) return dstSize_[rank] ; else return dstSize_[rank] * (*(connectors-1))->getDstSliceSize(rank, connectors-1,nConnectors-1) ; } - - const map& getNbSenders(void) {return nbSenders_ ;} - const map& getDstSize(void) { return dstSize_ ;} - } ; -} - -#endif diff --git a/xios_2311_src/src/distribution/server_distribution_description.cpp b/xios_2311_src/src/distribution/server_distribution_description.cpp deleted file mode 100644 index 7618e0cc..00000000 --- a/xios_2311_src/src/distribution/server_distribution_description.cpp +++ /dev/null @@ -1,525 +0,0 @@ -/*! - \file server_distribution_description.hpp - \author Ha NGUYEN - \since 04 Jan 2015 - \date 11 Jan 2016 - - \brief Description of index distribution on server(s). - */ - -#include "server_distribution_description.hpp" -#include "exception.hpp" - -namespace xios -{ - /*! - \param [in] globalDimensionSize global dimension of grid - \param [in] nServer number of server - \param [in] serType type of server distribution. For now, we can distribute server by band or plan - */ -CServerDistributionDescription::CServerDistributionDescription(const std::vector& globalDimensionSize, - int nServer, - ServerDistributionType serType) - : nGlobal_(globalDimensionSize), indexBegin_(), dimensionSizes_(), globalIndex_(), - vecGlobalIndex_(), serverType_(serType), nServer_(nServer), positionDimensionDistributed_(1) -{ -} - -CServerDistributionDescription::~CServerDistributionDescription() -{ /* Nothing to do */ } - -int CServerDistributionDescription::defaultDistributedDimension(int gridDimension, - ServerDistributionType serType) -{ - switch (serType) - { - case BAND_DISTRIBUTION: - return ((1 == gridDimension) ? 0 : 1); - break; - default: - break; - } - - MISSING_RETURN( "int CServerDistributionDescription::defaultDistributedDimension(int gridDimension, ServerDistributionType serType)" ); - return -1; -} - -/*! - Compute pre-defined global index distribution of server(s). - \param [in] doComputeGlobalIndex flag to compute global index on each server. By default, false - -*/ -void CServerDistributionDescription::computeServerDistribution(bool doComputeGlobalIndex, - int positionDimensionDistributed) -{ - switch (serverType_) { - case BAND_DISTRIBUTION: - computeBandDistribution(nServer_, positionDimensionDistributed); - break; - default: - break; - } - - if (doComputeGlobalIndex) - { - vecGlobalIndex_.resize(nServer_); - int dim = nGlobal_.size(); - std::vector currentIndex(dim); - - for (int idxServer = 0; idxServer < nServer_; ++idxServer) - { - size_t ssize = 1, idx = 0; - for (int j = 0; j < dim; ++j) ssize *= dimensionSizes_[idxServer][j]; - vecGlobalIndex_[idxServer].resize(ssize); - - std::vector idxLoop(dim,0); - - int innerLoopSize = dimensionSizes_[idxServer][0]; - - while (idx CServerDistributionDescription::computeServerGlobalIndexInRange(const std::pair& indexBeginEnd, - int positionDimensionDistributed) -{ - int nBand = 0; - switch (serverType_) - { - case BAND_DISTRIBUTION: - nBand = computeBandDistribution(nServer_, positionDimensionDistributed); - break; - case ROOT_DISTRIBUTION: - nBand = computeRootDistribution(nServer_); - default: - break; - } - - size_t indexBegin = indexBeginEnd.first; - size_t indexEnd = indexBeginEnd.second; - if (indexBegin > indexEnd) - ERROR("CServerDistributionDescription::computeServerGlobalIndexInRange", - << "Index begin is larger than index end"); - - globalIndex_.rehash(std::ceil((indexEnd-indexBegin+1)/globalIndex_.max_load_factor())); - - int dim = nGlobal_.size(); - std::vector currentIndex(dim); - - for (int idxServer = 0; idxServer < nBand; ++idxServer) - { - size_t ssize = 1, idx = 0; - for (int j = 0; j < dim; ++j) ssize *= dimensionSizes_[idxServer][j]; - - std::vector idxLoop(dim,0); - int innerLoopSize = dimensionSizes_[idxServer][0]; - - while (idx zeroIndexServer(nServer_-nBand); - for (int idxServer = nBand; idxServer < nServer_; ++idxServer) - zeroIndexServer[idxServer-nBand] = idxServer; - - return zeroIndexServer; -} - -/*! - Compute the global index of grid elements (domain, axis) and their associated server rank. - Each client knows the general distribution of servers and from which they can compute the pieces of information to hold - \param [out] indexServerOnElement global index of each element as well as the corresponding server which contains these indices - \param [in] clientRank rank of client - \param [in] clientSize number of client - \param [in] axisDomainOrder the order of element in grid (2 for domain, 1 for axis, 0 for scalar) - \param [in] positionDimensionDistributed dimension of server on which we make the cut. -*/ -std::vector CServerDistributionDescription::computeServerGlobalByElement(std::vector > >& indexServerOnElement, - int clientRank, - int clientSize, - const CArray& axisDomainOrder, - int positionDimensionDistributed) -{ - int nBand = 0; - switch (serverType_) { - case BAND_DISTRIBUTION: - nBand = computeBandDistribution(nServer_, positionDimensionDistributed); - break; - default: - break; - } - - int nbElement = axisDomainOrder.numElements(); - indexServerOnElement.resize(nbElement); - int idx = 0; - std::vector idxMap(nbElement); - for (int i = 0; i < nbElement; ++i) - { - idxMap[i] = idx; - if (2 == axisDomainOrder(i)) idx += 2; - else if (1 == axisDomainOrder(i)) idx += 1; - // nothing for scalar - } - - for (int idxServer = 0; idxServer < nBand; ++idxServer) - { - std::vector elementDimension(4); - for (int i = 0; i < nbElement; ++i) - { - int elementSize = 1; - if (2 == axisDomainOrder(i)) - { - elementSize *= dimensionSizes_[idxServer][idxMap[i]] * dimensionSizes_[idxServer][idxMap[i]+1]; - elementDimension[0] = indexBegin_[idxServer][idxMap[i]]; - elementDimension[1] = indexBegin_[idxServer][idxMap[i]+1]; - elementDimension[2] = dimensionSizes_[idxServer][idxMap[i]]; - elementDimension[3] = dimensionSizes_[idxServer][idxMap[i]+1]; - } - - else if (1 == axisDomainOrder(i)) - { - elementSize *= dimensionSizes_[idxServer][idxMap[i]]; - elementDimension[0] = indexBegin_[idxServer][idxMap[i]]; - elementDimension[1] = 0; - elementDimension[2] = dimensionSizes_[idxServer][idxMap[i]]; - elementDimension[3] = 1; - } - else - { - elementSize *= dimensionSizes_[idxServer][idxMap[i]]; - elementDimension[0] = 0; - elementDimension[1] = 0; - elementDimension[2] = 1; - elementDimension[3] = 1; - } - - int rangeBegin, rangeSize; - computeRangeProcIndex(clientRank, clientSize, elementSize, rangeBegin, rangeSize); - - size_t globalIndexElement; - idx = 0; int idxRange = 0; - for (int k = 0; k < elementDimension[3]; ++k) - for (int l = 0; l < elementDimension[2]; ++l) - { - globalIndexElement = (l+elementDimension[0]) + (k+elementDimension[1])*elementDimension[2]; - if ((rangeBegin <= idx) && (idxRange < rangeSize)) - { - indexServerOnElement[i][globalIndexElement].push_back(idxServer); - ++idxRange; - } - ++idx; - } - } - } - - // List of servers without distribution (cause total number of server is greater than number of bands, for example) - std::vector zeroIndexServer(nServer_-nBand); - for (int idxServer = nBand; idxServer < nServer_; ++idxServer) - zeroIndexServer[idxServer-nBand] = idxServer; - - return zeroIndexServer; -} - -/*! - Compute a range of index on server which a client holds - For a range of index on a specific server, each client can hold a piece of the index range - If the range size is smaller than the number of client, there are some clients holding the same index - \param [in] clientRank rank of client - \param [in] clientSize number of client - \param [in] rangeProcSize index range size - \param [out] rangeBegin begin of range index a client holds - \param [out] rangeSize size of range index a client holds -*/ -void CServerDistributionDescription::computeRangeProcIndex(int clientRank, - int clientSize, - int rangeProcSize, - int& rangeBegin, - int& rangeSize) -{ - if (rangeProcSize < clientSize) - { - int rangeIndex = 0; - for (int idx = 0; idx < clientSize; ++idx) - { - if (idx == clientRank) - { - rangeBegin = rangeIndex; - rangeSize = 1; - } - ++rangeIndex; - if (rangeIndex == rangeProcSize) rangeIndex = 0; - } - return; - } - - int range, indexBegin = 0; - for (int i = 0; i < clientSize; ++i) - { - range = rangeProcSize / clientSize; - if (i < (rangeProcSize%clientSize)) ++range; - if (i == clientRank) break; - indexBegin += range; - } - rangeBegin = indexBegin; - rangeSize = range; -} - -/*! - Compute global index of servers with band distribution - \param [in] nServer number of server -*/ -int CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed) -{ - int dim = nGlobal_.size(); - positionDimensionDistributed_ = positionDimensionDistributed; - if (1 == dim) positionDimensionDistributed_ = 0; - if (positionDimensionDistributed_ > dim) - ERROR("CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed)", - << "Position of distributed dimension is invalid" << std::endl - << "Position of distributed dimension is " << positionDimensionDistributed_ - << "Dimension " << dim) - - indexBegin_.resize(nServer); - dimensionSizes_.resize(nServer); - - for (int i = 0; i< nServer; ++i) - { - indexBegin_[i].resize(dim); - dimensionSizes_[i].resize(dim); - } - - int njRangeSize; - int nGlobTemp = 0; - std::vector njRangeBegin(nServer,0); - std::vector njRangeEnd(nServer,0); - - int positionDistributed = (1 dim) - ERROR("CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed)", - << "Position of distributed dimension is invalid" << std::endl - << "Position of distributed dimension is " << positionDimensionDistributed_ - << "Dimension " << dim) - - indexBegin_.resize(nServer); - dimensionSizes_.resize(nServer); - - for (int i = 0; i< nServer; ++i) - { - indexBegin_[i].resize(dim); - dimensionSizes_[i].resize(dim); - } - - int nGlobTemp = 0; - - int positionDistributed = (1 > CServerDistributionDescription::getServerDimensionSizes() const -{ - return dimensionSizes_; -} - -/*! - Get index begin of each dimension on distributed server - \return index begin of dimensions on server(s) -*/ -std::vector > CServerDistributionDescription::getServerIndexBegin() const -{ - return indexBegin_; -} - -/*! - Get global index on distributed server - \return global index on server(s) -*/ -const std::vector >& CServerDistributionDescription::getGlobalIndex() const -{ - return vecGlobalIndex_; -} - -/*! - Get global index calculated by computeServerGlobalIndexInRange -*/ -const std::unordered_map& CServerDistributionDescription::getGlobalIndexRange() const -{ - return globalIndex_; -} - -int CServerDistributionDescription::getDimensionDistributed() -{ - return ((1 - -namespace xios -{ -/*! - \class CServerDistributionDescription - This class contains information that describe distribution of servers. -*/ -class CServerDistributionDescription -{ - public: - enum ServerDistributionType - { - BAND_DISTRIBUTION, PLAN_DISTRIBUTION, ROOT_DISTRIBUTION - }; - - /** Default constructor */ - CServerDistributionDescription(const std::vector& globalDimensionSize, - int nServer, - ServerDistributionType serType=BAND_DISTRIBUTION); - - /** Default destructor */ - virtual ~CServerDistributionDescription(); - - void computeServerDistribution(bool doComputeGlobalIndex = false, int positionDimensionDistributed = 1); - std::vector computeServerGlobalIndexInRange(const std::pair& indexBeginEnd, int positionDimensionDistributed = 1); - std::vector computeServerGlobalByElement(std::vector > >& indexServerOnElement, - int rank, - int clientSize, - const CArray& axisDomainOrder, - int positionDimensionDistributed = 1); - - std::vector > getServerIndexBegin() const; - std::vector > getServerDimensionSizes() const; - const std::vector >& getGlobalIndex() const; - const std::unordered_map& getGlobalIndexRange() const; - int getDimensionDistributed(); - - static int defaultDistributedDimension(int gridDimension, - ServerDistributionType serType=BAND_DISTRIBUTION); - - protected: - int computeBandDistribution(int nServer, int positionDimensionDistributed = 1); - int computeRootDistribution(int nServer, int positionDimensionDistributed = 1); - void computePlanDistribution(int nServer); - void computeRangeProcIndex(int clientRank, - int clientSize, - int rangeProcSize, - int& rangeBegin, - int& rangeSize); - - private: - std::vector > indexBegin_; //!< Begin index of each dimension - std::vector > dimensionSizes_; //!< Size of each dimension - std::vector nGlobal_; //!< Global size of each dimension - - //!< General case, index describes distribution of each server (rarely use) - std::vector > vecGlobalIndex_; - - //!< In case we need only global index of one server with specific rank - std::unordered_map globalIndex_; - - //!< Type of distribution on server side - ServerDistributionType serverType_; - - //!< Number of server - int nServer_; - - //!< Position of dimension distributed on server side (by default, the second dimension) - int positionDimensionDistributed_; -}; - -} // namespace xios -#endif // __XIOS_SERVER_DISTRIBUTION_DESCRIPTION_HPP diff --git a/xios_2311_src/src/distribution/transfer_transform_connector.cpp b/xios_2311_src/src/distribution/transfer_transform_connector.cpp deleted file mode 100755 index 3fd3305a..00000000 --- a/xios_2311_src/src/distribution/transfer_transform_connector.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "transfer_transform_connector.hpp" - -namespace xios -{ - - CTransferTransformConnector::CTransferTransformConnector(shared_ptr srcView, shared_ptr dstView, unordered_map& indexMap) - : srcView_(srcView), dstView_(dstView) - { - computeConnector(indexMap) ; - } - - void CTransferTransformConnector::computeConnector(unordered_map& indexMap) - { - CArray dstGlobalIndex ; - CArray srcGlobalIndex ; - dstView_->getGlobalIndexView(dstGlobalIndex) ; - srcView_->getGlobalIndexView(srcGlobalIndex) ; - unordered_map srcMapIndex ; - srcSize_ = srcGlobalIndex.numElements() ; - dstSize_ = dstGlobalIndex.numElements() ; - mask_.resize(dstSize_) ; - - for(int i=0;i srcView_; - shared_ptr dstView_; - - vector connector_; - vector mask_ ; // sizeof dstSize_ - int srcSize_ ; - int dstSize_ ; - - void computeConnector(unordered_map& indexMap) ; - - public: - - CTransferTransformConnector(shared_ptr srcView, shared_ptr dstView, unordered_map& indexMap) ; - - void transfer(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) - { - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; // what to do about missing value => next step ? - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - for(int r=0;r& dataIn, CArray& dataOut) - { - transfer(1,sizeT, dataIn, dataOut) ; - } - - void transfer(const CArray& dataIn, CArray& dataOut) - { - transfer(1,1,dataIn, dataOut) ; - } - - - }; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/transform_connector.cpp b/xios_2311_src/src/distribution/transform_connector.cpp deleted file mode 100755 index c34c84c3..00000000 --- a/xios_2311_src/src/distribution/transform_connector.cpp +++ /dev/null @@ -1,106 +0,0 @@ -#include "transform_connector.hpp" -#include "element.hpp" -#include "scatterer_connector.hpp" -#include "gatherer_connector.hpp" -#include "client_client_dht_template.hpp" - - -namespace xios -{ - void CTransformConnector::computeConnector(void) - { - CClientClientDHTTemplate::Index2VectorInfoTypeMap info ; - - // first, insert destination global index into DHT - int rank ; - MPI_Comm_rank(localComm_, &rank) ; - CArray globalIndex ; - dstView_->getGlobalIndexView(globalIndex) ; - for(int i=0;i dataRanks(info, localComm_) ; - - // get global src index from src view. - set setGlobalIndex ; // all global index from src - srcView_->getGlobalIndexView(globalIndex) ; - for(int i=0;i srcGlobalIndex(setGlobalIndex.size()) ; - int i=0 ; - for(auto& globalIndex : setGlobalIndex) - { - srcGlobalIndex(i) = globalIndex ; - i++ ; - } - - dataRanks.computeIndexInfoMapping(srcGlobalIndex) ; - const auto& returnInfo = dataRanks.getInfoIndexMap() ; - - map> vectorIndex ; - for(auto& rankIndGlo : returnInfo) - { - size_t indGlo = rankIndGlo.first ; - auto& listRank = rankIndGlo.second ; - for (auto& rank : listRank) vectorIndex[rank].push_back(indGlo); - } - - // convert vectorIndex into array - map> dstArrayIndex ; - for(auto& rankIndGlo : vectorIndex) - { - int rank = rankIndGlo.first ; - auto& indexVector = rankIndGlo.second ; - auto& arrayIndex = dstArrayIndex[rank] ; - CArray arrayTmp(indexVector.data(), shape(indexVector.size()), duplicateData) ; - dstArrayIndex[rank].reference(arrayTmp) ; - } - - // distributed element : where to send data - auto dstElement = make_shared(srcView_->getGlobalSize(), dstArrayIndex) ; - dstElement->addFullView() ; - - // create scatterer connector - int commSize ; - MPI_Comm_size(localComm_, &commSize) ; - scattererConnector_ = make_shared(srcView_, dstElement->getView(CElementView::FULL), localComm_, commSize ) ; - scattererConnector_->computeConnector() ; - - // how much sender ? - vector nbSenders(commSize) ; - int nbSender ; - for(auto& it : dstArrayIndex) nbSenders[it.first]=1 ; - vector recvCounts(commSize,1) ; - MPI_Reduce_scatter(nbSenders.data(), &nbSender, recvCounts.data(), MPI_INT, MPI_SUM, localComm_) ; - - // transfer global index - map> remoteArrayIndex ; - - vector sendReq ; - for(auto& it : dstArrayIndex) - { - MPI_Request req ; - MPI_Isend(it.second.dataFirst(), it.second.numElements(), MPI_SIZE_T, it.first,0, localComm_,&req) ; - sendReq.push_back(req) ; - } - - for(int i=0; i recvBuff(size) ; - MPI_Recv(recvBuff.data(), size, MPI_SIZE_T, status.MPI_SOURCE,0,localComm_,&status) ; - CArray arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ; - remoteArrayIndex[status.MPI_SOURCE].reference(arrayTmp) ; - recvRankSize_[status.MPI_SOURCE] = size ; - } - vector sendStatus(sendReq.size()) ; - MPI_Waitall(sendReq.size(),sendReq.data(),sendStatus.data()) ; - - auto remoteElement = make_shared(dstView_->getGlobalSize(), remoteArrayIndex) ; - remoteElement->addFullView() ; - gathererConnector_= make_shared(remoteElement->getView(CElementView::FULL),dstView_) ; - gathererConnector_->computeConnector() ; - - } -} \ No newline at end of file diff --git a/xios_2311_src/src/distribution/transform_connector.hpp b/xios_2311_src/src/distribution/transform_connector.hpp deleted file mode 100755 index d88a873a..00000000 --- a/xios_2311_src/src/distribution/transform_connector.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef __TRANSFORM_CONNECTOR_HPP__ -#define __TRANSFORM_CONNECTOR_HPP__ - -#include "xios_spl.hpp" -#include "array_new.hpp" -#include "distributed_view.hpp" -#include "local_view.hpp" -#include "scatterer_connector.hpp" -#include "gatherer_connector.hpp" -#include "mpi.hpp" - -namespace xios -{ - - - class CTransformConnector - { - - public: - CTransformConnector(shared_ptr srcView, shared_ptr dstView, MPI_Comm localComm) - : srcView_(srcView), dstView_(dstView), localComm_(localComm) {} - - void computeConnector(void) ; - private: - - MPI_Comm localComm_ ; - shared_ptr srcView_ ; - shared_ptr dstView_ ; - map recvRankSize_ ; - shared_ptr scattererConnector_ ; - shared_ptr gathererConnector_ ; - - public: - template - void transfer(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) - { - map> tmpArrayIn ; - scattererConnector_->transfer(repeat, sizeT, dataIn, tmpArrayIn) ; - vector requests ; - MPI_Request request ; - for(auto it : tmpArrayIn) - { - auto& array = it.second ; - MPI_Issend(array.dataFirst(), array.numElements(), MPI_GetType(), it.first, 0, localComm_, &request) ; - requests.push_back(request) ; - } - - map> tmpArrayOut ; - for(auto it : recvRankSize_) - { - auto& array = tmpArrayOut[it.first] ; - array.resize(it.second*repeat*sizeT) ; - MPI_Irecv(array.dataFirst(), array.numElements(), MPI_GetType(), it.first, 0, localComm_, &request) ; - requests.push_back(request) ; - } - - vector status(requests.size()) ; - MPI_Waitall(requests.size(), requests.data(),status.data()) ; - - const double nanValue = std::numeric_limits::quiet_NaN(); - gathererConnector_->transfer(repeat, sizeT , tmpArrayOut, dataOut, nanValue) ; - } - - template - void transfer(int sizeT, const CArray& dataIn, CArray& dataOut) - { - transfer(1, sizeT, dataIn, dataOut) ; - } - - template - void transfer(const CArray& dataIn, CArray& dataOut) - { - transfer(1, 1, dataIn, dataOut) ; - } - - }; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/distribution/weight_transform_connector.cpp b/xios_2311_src/src/distribution/weight_transform_connector.cpp deleted file mode 100755 index 677933c0..00000000 --- a/xios_2311_src/src/distribution/weight_transform_connector.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "weight_transform_connector.hpp" - -namespace xios -{ - - CWeightTransformConnector::CWeightTransformConnector(shared_ptr srcView, shared_ptr dstView, unordered_map>& indexMap, - unordered_map>& weightMap) : srcView_(srcView), dstView_(dstView) - { - computeConnector(indexMap, weightMap) ; - } - - void CWeightTransformConnector::computeConnector(unordered_map>& indexMap, - unordered_map>& weightMap) - { - CArray dstGlobalIndex ; - CArray srcGlobalIndex ; - dstView_->getGlobalIndexView(dstGlobalIndex) ; - srcView_->getGlobalIndexView(srcGlobalIndex) ; - unordered_map srcMapIndex ; - srcSize_ = srcGlobalIndex.numElements() ; - dstSize_ = dstGlobalIndex.numElements() ; - - for(int i=0;i srcView_; - shared_ptr dstView_; - - vector weights_; // sizeof sum(nWeights_) - vector connector_; // sizeof sum(nWeights_) - vector nWeights_ ; // sizeof dstSize_ - int srcSize_ ; - int dstSize_ ; - - void computeConnector(unordered_map>& indexMap, unordered_map>& weightMap) ; - - public: - - CWeightTransformConnector(shared_ptr srcView, shared_ptr dstView, unordered_map>& indexMap, - unordered_map>& weightMap) ; - - void transfer(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) - { - int dstSlice = dstSize_*sizeT ; - int srcSlice = srcSize_*sizeT ; - dataOut.resize(repeat* dstSlice) ; - dataOut=0 ; // what to do about missing value => next step ? - - const double* input = dataIn.dataFirst() ; - double* output = dataOut.dataFirst() ; - - for(int r=0;r& dataIn, CArray& dataOut) - { - transfer(1,sizeT, dataIn, dataOut) ; - } - - void transfer(const CArray& dataIn, CArray& dataOut) - { - transfer(1,1,dataIn, dataOut) ; - } - - - }; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/event_scheduler.cpp b/xios_2311_src/src/event_scheduler.cpp index a7f5dce5..02d413eb 100644 --- a/xios_2311_src/src/event_scheduler.cpp +++ b/xios_2311_src/src/event_scheduler.cpp @@ -69,16 +69,12 @@ namespace xios CEventScheduler::~CEventScheduler() { - while (!pendingSentParentRequest.empty() || !pendingRecvParentRequest.empty() || !pendingRecvChildRequest.empty() || !pendingSentChildRequest.empty()) - { - checkEvent() ; - } + } void CEventScheduler::registerEvent(const size_t timeLine, const size_t contextHashId) { registerEvent(timeLine, contextHashId, level) ; - checkEvent() ; } void CEventScheduler::registerEvent(const size_t timeLine, const size_t contextHashId, const size_t lev) @@ -97,15 +93,15 @@ namespace xios bool CEventScheduler::queryEvent(const size_t timeLine, const size_t contextHashId) { - checkEvent() ; + if (! eventStack.empty() && eventStack.front().first==timeLine && eventStack.front().second==contextHashId) { - //eventStack.pop() ; + eventStack.pop() ; return true ; } else return false ; } - + void CEventScheduler::checkEvent(void) { traceOff() ; @@ -221,7 +217,6 @@ namespace xios else { registerEvent( timeLine,hashId,lev) ; - recvEvent.erase(itEvent) ; } } } diff --git a/xios_2311_src/src/event_scheduler.hpp b/xios_2311_src/src/event_scheduler.hpp index d2c6ff80..2e42b7bc 100644 --- a/xios_2311_src/src/event_scheduler.hpp +++ b/xios_2311_src/src/event_scheduler.hpp @@ -51,7 +51,6 @@ namespace xios * If the event is scheduled next, it is remove from the `eventStack` queue list */ bool queryEvent(const size_t timeLine, const size_t contextHashId) ; - void popEvent() { eventStack.pop() ; } //! Public interface to give the hand to the instance to check pending or incoming message. diff --git a/xios_2311_src/src/event_server.hpp b/xios_2311_src/src/event_server.hpp index f0c0290f..fe00f291 100644 --- a/xios_2311_src/src/event_server.hpp +++ b/xios_2311_src/src/event_server.hpp @@ -7,7 +7,6 @@ namespace xios { - class CContextServer ; class CEventServer { @@ -17,11 +16,9 @@ namespace xios int type ; int nbSender ; - CEventServer(CContextServer* contextServer) : contextServer_(contextServer) {} void push(int rank,CServerBuffer* serverBuffer ,char* startBuffer,int size) ; - CContextServer* getContextServer(void) { return contextServer_ ;} - + struct SSubEvent { int rank ; @@ -34,9 +31,6 @@ namespace xios bool isFull(void) ; ~CEventServer() ; - private : - - CContextServer* contextServer_ ; } ; } diff --git a/xios_2311_src/src/exception.hpp b/xios_2311_src/src/exception.hpp index 2021874e..918469ea 100644 --- a/xios_2311_src/src/exception.hpp +++ b/xios_2311_src/src/exception.hpp @@ -78,14 +78,6 @@ namespace xios throw exc; \ } -#define MISSING_RETURN(id) \ -{ \ - xios::CException exc(id); \ - exc.getStream() << INFO("Missing return"); \ - error << exc.getMessage() << std::endl; \ - throw exc; \ -} - #ifdef __XIOS_EXCEPTION #define TRY \ { \ diff --git a/xios_2311_src/src/filter/binary_arithmetic_filter.cpp b/xios_2311_src/src/filter/binary_arithmetic_filter.cpp index 3ce560c0..338500e7 100644 --- a/xios_2311_src/src/filter/binary_arithmetic_filter.cpp +++ b/xios_2311_src/src/filter/binary_arithmetic_filter.cpp @@ -1,5 +1,8 @@ #include "binary_arithmetic_filter.hpp" #include "workflow_graph.hpp" +#include "yacc_var.hpp" +#include "file.hpp" + namespace xios { @@ -7,72 +10,81 @@ namespace xios : CFilter(gc, 1, this) , op(operatorExpr.getOpScalarField(op)) , value(value) - { /* Nothing to do */ }; + { }; - std::pair CScalarFieldArithmeticFilter::buildGraph(std::vector data) + std::tuple CScalarFieldArithmeticFilter::buildGraph(std::vector data) { - bool building_graph = this->graphEnabled; + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; int unique_filter_id; - bool firstround = true; - + bool firstround; + if(building_graph) { - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - data[0]->graphPackage->fromFilter = -1; - } - - if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map ; + CWorkflowGraph::allocNodeEdge(); - size_t filterhash = std::hash{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); // first round - if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - unique_filter_id = this->graphPackage->filterId; - CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]); + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; - - (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id; - + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) + { + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; } // not first round else { - unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; - if(data[0]->graphPackage->fromFilter != unique_filter_id) + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) { - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]); + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; } } } - return std::make_pair(building_graph, unique_filter_id); + return std::make_tuple(building_graph, firstround, unique_filter_id); } + CDataPacketPtr CScalarFieldArithmeticFilter::apply(std::vector data) { CDataPacketPtr packet(new CDataPacket); packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; - - std::pair graph = buildGraph(data); - if(std::get<0>(graph)) - { - packet->graphPackage = new CGraphDataPackage; - packet->graphPackage->fromFilter = std::get<1>(graph); - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - } + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(value, data[0]->data)); @@ -84,55 +96,64 @@ namespace xios : CFilter(gc, 1, this) , op(operatorExpr.getOpFieldScalar(op)) , value(value) - { /* Nothing to do */ }; + { }; - std::pair CFieldScalarArithmeticFilter::buildGraph(std::vector data) + std::tuple CFieldScalarArithmeticFilter::buildGraph(std::vector data) { - bool building_graph = this->graphEnabled; + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; int unique_filter_id; - bool firstround = true; + bool firstround; if(building_graph) { - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - data[0]->graphPackage->fromFilter = -1; - } + CWorkflowGraph::allocNodeEdge(); - if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map ; - - size_t filterhash = std::hash{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); // first round - if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - unique_filter_id = this->graphPackage->filterId; - CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]); + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; - - (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id; - + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) + { + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; } // not first round else { - unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; - if(data[0]->graphPackage->fromFilter != unique_filter_id) + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) { - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]); + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; } } } - return std::make_pair(building_graph, unique_filter_id); + return std::make_tuple(building_graph, firstround, unique_filter_id); } CDataPacketPtr CFieldScalarArithmeticFilter::apply(std::vector data) @@ -142,14 +163,16 @@ namespace xios packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; - std::pair graph = buildGraph(data); + std::tuple graph = buildGraph(data); if(std::get<0>(graph)) { - packet->graphPackage = new CGraphDataPackage; - packet->graphPackage->fromFilter = std::get<1>(graph); - packet->graphPackage->currentField = this->graphPackage->inFields[0]; + packet->src_filterID = std::get<2>(graph); + if(std::get<1>(graph)) packet->distance = data[0]->distance+1; + else packet->distance = data[0]->distance+1; } + + packet->field = this->field; if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(data[0]->data, value)); @@ -160,86 +183,99 @@ namespace xios CFieldFieldArithmeticFilter::CFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op) : CFilter(gc, 2, this) , op(operatorExpr.getOpFieldField(op)) - { /* Nothing to do */ }; + { }; - std::pair CFieldFieldArithmeticFilter::buildGraph(std::vector data) + std::tuple CFieldFieldArithmeticFilter::buildGraph(std::vector data) { - bool building_graph = this->graphEnabled; + bool building_graph = this->tag ? ((data[0]->timestamp >= this->field->field_graph_start && data[0]->timestamp <= this->field->field_graph_end) && (data[0]->timestamp == data[1]->timestamp)) : false; + int unique_filter_id; - bool firstround = true; + + bool firstround; if(building_graph) - { - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - data[0]->graphPackage->fromFilter = -1; - } - if(!data[1]->graphPackage) - { - data[1]->graphPackage = new CGraphDataPackage; - data[1]->graphPackage->currentField = this->graphPackage->inFields[0]; - data[1]->graphPackage->fromFilter = -1; - } + { + CWorkflowGraph::allocNodeEdge(); - if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map ; - size_t filterhash = std::hash{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); // first round - if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - unique_filter_id = this->graphPackage->filterId; - CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]); + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + if(CWorkflowGraph::build_begin) + { - CWorkflowGraph::addEdge(data[1]->graphPackage->fromFilter, this->graphPackage->filterId, data[1]); - data[1]->graphPackage->fromFilter = this->graphPackage->filterId; - data[1]->graphPackage->currentField = this->graphPackage->inFields[0]; + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); + edgeID = InvalidableObject::edgeIdGenerator++; - (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id; - + CWorkflowGraph::addEdge(edgeID, this->filterID, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + } + CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + } // not first round else { - unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; - if(data[0]->graphPackage->fromFilter != unique_filter_id) + firstround = false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) { - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]); + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + data[0]->distance=max(data[0]->distance, (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].distance); } - if(data[1]->graphPackage->fromFilter != unique_filter_id) - { - CWorkflowGraph::addEdge(data[1]->graphPackage->fromFilter, unique_filter_id, data[1]); + if(data[1]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + data[1]->distance=max(data[1]->distance, (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].distance); } + } } - return std::make_pair(building_graph, unique_filter_id); + return std::make_tuple(building_graph, firstround, unique_filter_id); } - CDataPacketPtr CFieldFieldArithmeticFilter::apply(std::vector data) { CDataPacketPtr packet(new CDataPacket); packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; - std::pair graph = buildGraph(data); + std::tuple graph = buildGraph(data); - if(std::get<0>(graph)) - { - packet->graphPackage = new CGraphDataPackage; - packet->graphPackage->fromFilter = std::get<1>(graph); - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - } + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = max(data[0]->distance+1, data[1]->distance+1); + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = max(data[0]->distance, data[1]->distance); + + packet->field = this->field; + if (data[0]->status != CDataPacket::NO_ERROR) packet->status = data[0]->status; @@ -253,4 +289,10 @@ namespace xios return packet; } + + StdString CScalarFieldArithmeticFilter::GetName(void) { return StdString("CScalarFieldArithmeticFilter"); } + StdString CFieldScalarArithmeticFilter::GetName(void) { return StdString("CFieldScalarArithmeticFilter"); } + StdString CFieldFieldArithmeticFilter::GetName(void) { return StdString("CFieldFieldArithmeticFilter"); } + + } // namespace xios diff --git a/xios_2311_src/src/filter/binary_arithmetic_filter.hpp b/xios_2311_src/src/filter/binary_arithmetic_filter.hpp index 64c1909b..00bbb4be 100644 --- a/xios_2311_src/src/filter/binary_arithmetic_filter.hpp +++ b/xios_2311_src/src/filter/binary_arithmetic_filter.hpp @@ -5,6 +5,7 @@ #include #include "operator_expr.hpp" #include +#include namespace xios { @@ -22,6 +23,8 @@ namespace xios * \param value the scalar value */ CScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value); + StdString virtual GetName(void); + protected: COperatorExpr::functionScalarField op; //!< The binary scalar-field operator attached to the binary arithmeric filter @@ -34,7 +37,9 @@ namespace xios * \return the result of the binary operation */ CDataPacketPtr virtual apply(std::vector data); - std::pair virtual buildGraph(std::vector data); + std::tuple virtual buildGraph(std::vector data); + + }; // class CScalarFieldArithmeticFilter /*! @@ -51,6 +56,8 @@ namespace xios * \param value the scalar value */ CFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value); + StdString virtual GetName(void); + protected: COperatorExpr::functionFieldScalar op; //!< The binary field-scalar operator attached to the binary arithmeric filter @@ -63,7 +70,7 @@ namespace xios * \return the result of the binary operation */ CDataPacketPtr virtual apply(std::vector data); - std::pair virtual buildGraph(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CFieldScalarArithmeticFilter /*! @@ -79,6 +86,8 @@ namespace xios * \param op the string identifing the binary field-field operator */ CFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op); + StdString virtual GetName(void); + protected: COperatorExpr::functionFieldField op; //!< The binary field-field operator attached to the binary arithmeric filter @@ -90,8 +99,7 @@ namespace xios * \return the result of the binary operation */ CDataPacketPtr virtual apply(std::vector data); - std::pair virtual buildGraph(std::vector data); - + std::tuple virtual buildGraph(std::vector data); }; // class CFieldFieldArithmeticFilter } // namespace xios diff --git a/xios_2311_src/src/filter/client_from_client_source_filter.cpp b/xios_2311_src/src/filter/client_from_client_source_filter.cpp deleted file mode 100755 index dbda60aa..00000000 --- a/xios_2311_src/src/filter/client_from_client_source_filter.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "grid.hpp" -#include "exception.hpp" -#include "calendar_util.hpp" -#include "field.hpp" -#include "context.hpp" -#include "grid.hpp" -#include -#include "workflow_graph.hpp" - -namespace xios -{ - CClientFromClientSourceFilter::CClientFromClientSourceFilter(CGarbageCollector& gc, CField* field) - : COutputPin(gc, true) - { - CContext* context = CContext::getCurrent(); - field_=field ; - grid_= field-> getGrid(); - - freqOp_ = field->freq_op ; - lastDateReceived_ = context->getCalendar()->getInitDate(); - offset_ = field->freq_offset ; - } - - void CClientFromClientSourceFilter::streamData(CEventServer& event) - { - // unlikely to input from file server where data are received at ts=0 - // for coupling, it would be after the first freq_op, because for now we don't have - // restart mecanism to send the value at ts=0. It must be changed in future - - if (wasDataAlreadyReceived_) lastDateReceived_ = lastDateReceived_ + freqOp_; - else wasDataAlreadyReceived_ = true ; - - CDate date = lastDateReceived_ + offset_; // not sure is usefull check it for all filters - - CDataPacketPtr packet(new CDataPacket); - packet->date = date; - packet->status = CDataPacket::NO_ERROR; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> packet->timestamp ; // better management of time lien later... - packet->timestamp = date; - - grid_->getClientFromClientConnector()->transfer(event,packet->data) ; - - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - CWorkflowGraph::addNode("Client to Client Source filter", 1, false, 0, packet); - } - onOutputReady(packet); - } - - bool CClientFromClientSourceFilter::isDataLate(void) - { - bool isDataLate ; - CDate currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate() ; - if (wasDataAlreadyReceived_) isDataLate = lastDateReceived_ + offset_ + freqOp_ <= currentDate ; - else isDataLate = CContext::getCurrent()->getCalendar()->getInitDate()+ offset_ <= currentDate ; - return isDataLate ; - } - -} // namespace xios diff --git a/xios_2311_src/src/filter/client_from_client_source_filter.hpp b/xios_2311_src/src/filter/client_from_client_source_filter.hpp deleted file mode 100755 index a8baba35..00000000 --- a/xios_2311_src/src/filter/client_from_client_source_filter.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef __XIOS_CLIENT_FROM_CLIENT_SOURCE_FILTER__ -#define __XIOS_CLIENT_FROM_CLIENT_SOURCE_FILTER__ - -#include "output_pin.hpp" -#include "event_server.hpp" -#include "calendar_util.hpp" - -namespace xios -{ - class CField; - class CGrid ; - - - /*! - * A source filter is the entry point of the data in the graph of filters. - */ - class CClientFromClientSourceFilter : public COutputPin - { - public: - /*! - * Constructs a source filter accepting data attached to the specified grid. - * - * \param gc the garbage collector associated with this filter - * \param field the field which the filter aply - */ - CClientFromClientSourceFilter(CGarbageCollector& gc, CField* field) ; - - /*! - * Transforms the data received from the model into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param event the event associated to data reception - */ - void streamData(CEventServer& event); - bool isDataLate(void) ; - - private: - CField* field_ ; - CGrid* grid_; //!< The grid attached to the data the filter can accept - CDuration freqOp_ ; - CDuration offset_ ; - - bool wasDataAlreadyReceived_= false ; - CDate lastDateReceived_ ; - }; // class CSourceFilter -} // namespace xios - -#endif //__XIOS_CLIENT_FROM_CLIENT_SOURCE_FILTER__ diff --git a/xios_2311_src/src/filter/client_from_server_source_filter.cpp b/xios_2311_src/src/filter/client_from_server_source_filter.cpp deleted file mode 100755 index 68edff87..00000000 --- a/xios_2311_src/src/filter/client_from_server_source_filter.cpp +++ /dev/null @@ -1,175 +0,0 @@ -#include "client_from_server_source_filter.hpp" -#include "grid.hpp" -#include "field.hpp" -#include "file.hpp" -#include "exception.hpp" -#include "calendar_util.hpp" -#include "context.hpp" -#include "event_client.hpp" -#include "timer.hpp" -#include "tracer.hpp" -#include -#include "workflow_graph.hpp" - -namespace xios -{ - CClientFromServerSourceFilter::CClientFromServerSourceFilter(CGarbageCollector& gc, CField* field) - : COutputPin(gc, true) - { - CContext* context = CContext::getCurrent(); - field_ = field ; - grid_= field->getSentGrid(); - freqOp_ = field->getRelFile()->output_freq ; - client_= field->getRelFile()->getContextClient() ; - lastDateReceived_ = context->getCalendar()->getInitDate(); - offset_ = field->freq_offset ; - } - - void CClientFromServerSourceFilter::streamData(CEventServer& event) - { - const bool wasEOF = isEOF_; - int record ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> record ; - isEOF_ = (record == int(-1)); - - - if (wasDataAlreadyReceived_) lastDateReceived_ = lastDateReceived_ + freqOp_ ; - else wasDataAlreadyReceived_ = true; - - CDataPacketPtr packet(new CDataPacket); - packet->date = lastDateReceived_ + offset_; - packet->timestamp = packet->date ; - - if (isEOF_) - { - if (!wasEOF) dateEOF_ = lastDateReceived_; - packet->status = CDataPacket::END_OF_STREAM; - info(20)<<"Receiv Data from server to client: FieldId : "<getId()<date<<" ----> EOF"<getAssociatedClient() ; - grid_->getClientFromServerConnector(client)->transfer(event, packet->data) ; // to avoid to make a search in map for corresponding client connector, - - info(20)<<"Receiv Data from server to client: FieldId : "<getId()<date<status = CDataPacket::NO_ERROR; - } - - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - CWorkflowGraph::addNode("Client from Server Source filter", 1, false, 0, packet); - } - onOutputReady(packet); - - } - - int CClientFromServerSourceFilter::sendReadDataRequest(const CDate& tsDataRequested) - { - CContext* context = CContext::getCurrent(); - lastDataRequestedFromServer_ = tsDataRequested; - - // No need to send the request if we are sure that we are already at EOF - if (!isEOF_ || context->getCalendar()->getCurrentDate() <= dateEOF_) - { - CEventClient event(field_->getType(), CField::EVENT_ID_READ_DATA); - if (client_->isServerLeader()) - { - CMessage msg; - msg << field_->getId(); - for(auto& rank : client_->getRanksServerLeader()) event.push(rank, 1, msg); - client_->sendEvent(event); - } - else client_->sendEvent(event); - } - else - { - CDataPacketPtr packet(new CDataPacket); - packet->date = tsDataRequested; - packet->timestamp = packet->date ; - packet->status = CDataPacket::END_OF_STREAM; - onOutputReady(packet); - } - - wasDataRequestedFromServer_ = true; - - return !isEOF_; - } - - bool CClientFromServerSourceFilter::sendReadDataRequestIfNeeded(void) - TRY - { - const CDate& currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate(); - - bool dataRequested = false; - - while (currentDate >= lastDataRequestedFromServer_) - { - info(20) << "currentDate : " << currentDate << endl ; - info(20) << "Field : " << field_->getId() << endl ; - info(20) << "lastDataRequestedFromServer : " << lastDataRequestedFromServer_ << endl ; - info(20) << "freqOp : " << freqOp_ << endl ; - info(20) << "lastDataRequestedFromServer + fileIn_->output_freq.getValue() : " << lastDataRequestedFromServer_ + freqOp_ << endl ; - - dataRequested |= sendReadDataRequest(lastDataRequestedFromServer_ + freqOp_); - } - - return dataRequested; - } - CATCH - - void CClientFromServerSourceFilter::checkForLateData(void) - TRY - { - CContext* context = CContext::getCurrent(); - // Check if data previously requested has been received as expected - if (wasDataRequestedFromServer_ && ! isEOF_) - { - CTimer timer("CClientFromServerSourceFilter::checkForLateDataFromServer"); - timer.resume(); - traceOff() ; - timer.suspend(); - - bool isLate; - do - { - isLate = isDataLate(); - if (isLate) - { - timer.resume(); - context->globalEventLoop(); - context->eventLoop() ; - timer.suspend(); - } - } - while (isLate && timer.getCumulatedTime() < CXios::recvFieldTimeout); - timer.resume(); - traceOn() ; - timer.suspend() ; - - - if (isLate) - ERROR("void CClientFromServerSourceFilter::checkForLateDataFromServer(void)", - << "Late data at timestep = " << context->getCalendar()->getCurrentDate()); - } - } - CATCH - - - bool CClientFromServerSourceFilter::isDataLate(void) - { - bool isDataLate ; - CDate currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate() ; - - const CDate nextDataDue = wasDataAlreadyReceived_ ? (lastDateReceived_ + freqOp_) : CContext::getCurrent()->getCalendar()->getInitDate(); - isDataLate = (nextDataDue <= currentDate); - - return isDataLate ; - - } - - -} // namespace xios diff --git a/xios_2311_src/src/filter/client_from_server_source_filter.hpp b/xios_2311_src/src/filter/client_from_server_source_filter.hpp deleted file mode 100755 index 31adb169..00000000 --- a/xios_2311_src/src/filter/client_from_server_source_filter.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __XIOS_CLIENT_FROM_SERVER_SOURCE_FILTER__ -#define __XIOS_CLIENT_FROM_SERVER_SOURCE_FILTER__ - -#include - -#include "output_pin.hpp" -#include "event_server.hpp" -#include "context_client.hpp" -#include "calendar_util.hpp" - - -namespace xios -{ - class CGrid; - class CField; - - /*! - * A source filter is the entry point of the data in the graph of filters. - */ - class CClientFromServerSourceFilter : public COutputPin - { - public: - /*! - * Constructs a source filter accepting data attached to the specified grid. - * - * \param gc the garbage collector associated with this filter - * \param field associated to the filter - */ - CClientFromServerSourceFilter(CGarbageCollector& gc, CField* field); - - /*! - * Transforms the data received from the model into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param event the event coming from server with the associated data - */ - void streamData(CEventServer& event); - bool isDataLate(void) ; - bool isEOF() {return isEOF_ ;} - int sendReadDataRequest(const CDate& tsDataRequested) ; - bool sendReadDataRequestIfNeeded(void) ; - void checkForLateData(void) ; - - private: - CField* field_; - CGrid* grid_; //!< The grid attached to the data the filter can accept - CDuration freqOp_ ; - CDuration offset_ ; - CContextClient* client_ = nullptr ; - bool wasDataAlreadyReceived_= false ; - CDate lastDateReceived_ ; - bool wasDataRequestedFromServer_ = false ; - CDate lastDataRequestedFromServer_ ; - - bool isEOF_ = false ; - CDate dateEOF_ ; - }; // class CClientFromServerSourceFilter -} // namespace xios - -#endif //__XIOS_CLIENT_FROM_SERVER_SOURCE_FILTER__ \ No newline at end of file diff --git a/xios_2311_src/src/filter/client_to_model_store_filter.cpp b/xios_2311_src/src/filter/client_to_model_store_filter.cpp deleted file mode 100755 index 30a5e0d9..00000000 --- a/xios_2311_src/src/filter/client_to_model_store_filter.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "client_to_model_store_filter.hpp" -#include "context.hpp" -#include "grid.hpp" -#include "timer.hpp" -#include "tracer.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - CClientToModelStoreFilter::CClientToModelStoreFilter(CGarbageCollector& gc, CField* field) - : CInputPin(gc, 1) - , gc_(gc), graphEnabled(false) - { - context_ = CContext::getCurrent() ; - grid_ = field->getGrid() ; - - detectMissingValues_ = (!field->detect_missing_value.isEmpty() && !field->default_value.isEmpty() && field->detect_missing_value == true); - hasMissingValue_ = !field->default_value.isEmpty() ; - if (hasMissingValue_) missingValue_ = field->default_value ; - detectMissingValues_ = (!field->detect_missing_value.isEmpty() && hasMissingValue_); - } - - CConstDataPacketPtr CClientToModelStoreFilter::getPacket(Time timestamp) - { - CTimer timer("CStoreFilter::getPacket"); -// timer.resume(); - info(0)<<"ENTERING CStoreFilter::getPacket"<::const_iterator it = packets_.find(timestamp); - if (it != packets_.end()) packet = it->second; - else context_->eventLoop(); // if the packet is not available yet, check if it can be received - - timer.suspend(); - } while (!packet && timer.getCumulatedTime() < timeout); -// timer.resume(); - traceOn() ; -// timer.suspend(); - - if (!packet) - { - std::map::const_iterator it ; - info(0)<<"Impossible to get the packet with timestamp = " << timestamp<first<<" "; - info(0)<timestamp, packet)); - // The packet is always destroyed by the garbage collector - // so we register but never unregister - gc_.registerObject(this, packet->timestamp); - - } - - bool CClientToModelStoreFilter::mustAutoTrigger() const - { - return false; - } - - bool CClientToModelStoreFilter::isDataExpected(const CDate& date) const - { - return true; - } - - void CClientToModelStoreFilter::invalidate(Time timestamp) - { - CInputPin::invalidate(timestamp); - packets_.erase(packets_.begin(), packets_.lower_bound(timestamp)); - } -} // namespace xios diff --git a/xios_2311_src/src/filter/client_to_model_store_filter.hpp b/xios_2311_src/src/filter/client_to_model_store_filter.hpp deleted file mode 100755 index 0dd18389..00000000 --- a/xios_2311_src/src/filter/client_to_model_store_filter.hpp +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef __XIOS_CStoreFilter__ -#define __XIOS_CStoreFilter__ - -#include "input_pin.hpp" -#include "graph_package.hpp" - -namespace xios -{ - class CContext; - class CGrid; - class CField ; - - /*! - * A terminal filter which stores all the packets it receives. - */ - class CClientToModelStoreFilter : public CInputPin - { - public: - /*! - * Constructs the filter with one input slot and an associated - * garbage collector for the specified grid and context. - * - * \param gc the garbage collector associated with this input pin - * \param context the context to which the data belongs - * \param grid the grid to which the data is attached - * \param detectMissingValues whether missing values should be detected - * \param missingValue the value to use to replace missing values - */ - CClientToModelStoreFilter(CGarbageCollector& gc, CField* field); - - /*! - * Accesses the filter storage and retuns the packet corresponding - * to the specified timestamp. If there is no packet available for - * the specified timestamp, the function waits until the data is - * received or a timeout occurs. - * - * \param timestamp the timestamp of the requested packet - * \return a pointer to a read-only packet - */ - CConstDataPacketPtr getPacket(Time timestamp); - - /*! - * Accesses the filter storage and retuns the data corresponding - * to the specified timestamp. If there is no data available for - * the specified timestamp, the function waits until the data is - * received or a timeout occurs. - * - * \param timestamp the timestamp of the requested data - * \param data the array where the data is to be copied - * \return the status code associated with the data - */ - template - CDataPacket::StatusCode getData(Time timestamp, CArray& data); - - /*! - * Tests if the filter must auto-trigger. - * - * \return true if the filter must auto-trigger - */ - bool virtual mustAutoTrigger() const; - - /*! - * Tests whether data is expected for the specified date. - * - * \param date the date associated to the data - */ - bool virtual isDataExpected(const CDate& date) const; - - /*! - * Removes all pending packets which are older than the specified timestamp. - * - * \param timestamp the timestamp used for invalidation - */ - void virtual invalidate(Time timestamp); - - CGraphPackage * graphPackage; - bool graphEnabled; - - protected: - /*! - * Stores the packet for later access. - * - * \param data a vector of packets corresponding to each slot - */ - void virtual onInputReady(std::vector data); - - private: - CGarbageCollector& gc_; //!< The garbage collector associated to the filter - CContext* context_; //!< The context to which the data belongs - CGrid* grid_; //!< The grid attached to the data the filter can accept - bool detectMissingValues_; //!< Whether missing values should be detected - double missingValue_; //!< The value to use to replace missing values - bool hasMissingValue_ ; - std::map packets_; // data) - { - buildWorkflowGraph(data); - - CTimer::get("Field : send data").resume(); - CEventClient event(field_->getType(), CField::EVENT_ID_UPDATE_DATA); - CMessage message ; - message<getId() << data[0]->timestamp ; - field_->getSentGrid()->getClientToServerConnector(client_)->transfer(data[0]->data, client_, event, message) ; - CTimer::get("Field : send data").suspend(); - } - - void CClientToServerStoreFilter::buildWorkflowGraph(std::vector data) - { - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - if(!data[0]->graphPackage) data[0]->graphPackage = new CGraphDataPackage; - - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - - CWorkflowGraph::addNode("Client to Server Store filter", 6, true, 1, data[0]); - - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - // flux can be redirected to other filters. So don't change the 'from' parameter - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - } - } - - CContextClient* CClientToServerStoreFilter::getTransferedDataSize(map& size) - { - size = field_->getSentGrid()->getClientToServerConnector(client_)->getTransferedDataSize() ; - return client_ ; - } - - bool CClientToServerStoreFilter::mustAutoTrigger() const - { - return true; - } - - bool CClientToServerStoreFilter::isDataExpected(const CDate& date) const - { - return true; - } -} // namespace xios diff --git a/xios_2311_src/src/filter/client_to_server_store_filter.hpp b/xios_2311_src/src/filter/client_to_server_store_filter.hpp deleted file mode 100755 index 2454dc15..00000000 --- a/xios_2311_src/src/filter/client_to_server_store_filter.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef __XIOS_CLIENT_TO_SERVER_STORE_FILTER__ -#define __XIOS_CLIENT_TO_SERVER_STORE_FILTER__ - -#include "input_pin.hpp" -#include "graph_package.hpp" - -namespace xios -{ - class CField; - class CContextClient ; - - /*! - * A terminal filter which transmits the packets it receives to a field for writting in a file. - */ - class CClientToServerStoreFilter : public CInputPin - { - public: - /*! - * Constructs the filter (with one input slot) associated to the specified field - * and a garbage collector. - * - * \param gc the associated garbage collector - * \param field the associated field - */ - CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client); - /*! - * Get the size of data transfered by call. Needed for context client buffer size evaluation - * - * \param size : map returning the size for each server rank - * \return the associated context client - */ - CContextClient* getTransferedDataSize(map& size) ; - - /*! - * Tests if the filter must auto-trigger. - * - * \return true if the filter must auto-trigger - */ - bool virtual mustAutoTrigger() const; - - void buildWorkflowGraph(std::vector data); - - /*! - * Tests whether data is expected for the specified date. - * - * \param date the date associated to the data - */ - bool virtual isDataExpected(const CDate& date) const; - CGraphPackage * graphPackage; - bool graphEnabled; - - protected: - /*! - * Callbacks a field to write a packet to a file. - * - * \param data a vector of packets corresponding to each slot - */ - void virtual onInputReady(std::vector data); - - private: - CField* field_; // data; //!< Array containing the data CDate date; //!< Date associated to the data Time timestamp; //!< Timestamp of the data StatusCode status; //!< Status of the packet - + int src_filterID=0; + std::vector filterIDoutputs; + CField *field=nullptr; + int distance=-1; + /*! * Creates a deep copy of the packet. * * \return a deep copy of the packet */ - CDataPacket* copy() const - { + CDataPacket* copy() const { CDataPacket* p = new CDataPacket; p->data.resize(data.shape()); p->data = data; p->date = date; p->timestamp = timestamp; p->status = status; - p->graphPackage = graphPackage; return p; }; - - - CDataPacket() : graphPackage(nullptr) {} - }; // struct CDataPacket typedef std::shared_ptr CDataPacketPtr; diff --git a/xios_2311_src/src/filter/file_reader_source_filter.cpp b/xios_2311_src/src/filter/file_reader_source_filter.cpp deleted file mode 100755 index 6fddc6bf..00000000 --- a/xios_2311_src/src/filter/file_reader_source_filter.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "file_reader_source_filter.hpp" -#include "grid.hpp" -#include "exception.hpp" -#include "calendar_util.hpp" -#include "context.hpp" -#include "field.hpp" -#include "file.hpp" -#include "context.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - CFileReaderSourceFilter::CFileReaderSourceFilter(CGarbageCollector& gc, CField* field) - : COutputPin(gc) - { - field_ = field ; - grid_ = field->getGrid() ; - file_ = field->getFileIn() ; - if (!file_->cyclic.isEmpty()) isCyclic_ = file_->cyclic ; - if (!field_->scale_factor.isEmpty()) { hasScaleFactor_=true ; scaleFactor_ = field_->scale_factor ; } - if (!field_->add_offset.isEmpty()) { hasAddOffset_=true ; addOffset_ = field_->add_offset ; } - } - - void CFileReaderSourceFilter::streamData() - { - Time timeStamp ; - CDataPacketPtr packet(new CDataPacket); - packet->date = CContext::getCurrent()->getCalendar()->getCurrentDate(); - packet->timestamp = timeStamp; - packet->status = CDataPacket::NO_ERROR; - - if (!isInitialized_) initialize() ; - CField::EReadField readState = CField::RF_DATA; - if ( nStepMax_==0 || (nStep_ >= nStepMax_ && !isCyclic_)) readState = CField::RF_EOF; - - if (CField::RF_EOF != readState) - { - if (!file_->isEmptyZone()) readData(packet->data) ; - else readState = CField::RF_NODATA; - } - nStep_++ ; - - if (readState == CField::RF_DATA) packet->status = CDataPacket::NO_ERROR; - else packet->status = CDataPacket::END_OF_STREAM; - - info(20)<<"Read data from file : FieldId "<getId()<<" nStep "<date<graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - CWorkflowGraph::addNode("File Reader Source filter", 1, false, 0, packet); - } - - onOutputReady(packet); - } - - void CFileReaderSourceFilter::initialize() - { - CContext* context = CContext::getCurrent(); - file_->initRead(); - if (!file_->isEmptyZone()) - { - file_->checkReadFile(); - nStepMax_ = file_->getDataInput()->getFieldNbRecords(field_); - nStep_ = file_->record_offset.isEmpty() ? 0 : file_->record_offset; ; - } - MPI_Allreduce(MPI_IN_PLACE, &nStepMax_, 1, MPI_INT, MPI_MAX, context->getIntraComm()); - isInitialized_=true; - } - - void CFileReaderSourceFilter::readData(CArray& data) - { - shared_ptr connector = grid_->getFullToWorkflowConnector() ; - CArray dataIn(connector->getSrcSize()) ; - file_->getDataInput()->readFieldData(field_, nStep_%nStepMax_, dataIn); - data.resize(connector->getDstSize()) ; - connector->transfer(dataIn, data) ; - - if (hasScaleFactor_ || hasAddOffset_) data = data * scaleFactor_ + addOffset_; // possibility of optimization - } - - -} // namespace xios diff --git a/xios_2311_src/src/filter/file_reader_source_filter.hpp b/xios_2311_src/src/filter/file_reader_source_filter.hpp deleted file mode 100755 index 652f6808..00000000 --- a/xios_2311_src/src/filter/file_reader_source_filter.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __XIOS_FILE_READER_SOURCE_FILTER_HPP__ -#define __XIOS_FILE_READER_SOURCE_FILTER_HPP__ - -#include "output_pin.hpp" - -namespace xios -{ - class CField; - class CFile ; - class CGrid ; - - /*! - * A source filter is the entry point of the data in the graph of filters. - */ - class CFileReaderSourceFilter : public COutputPin - { - public: - /*! - * Constructs a source filter accepting data attached to the specified grid. - * - * \param gc the garbage collector associated with this filter - * \param field the field to which the data is related - */ - CFileReaderSourceFilter(CGarbageCollector& gc, CField* field); - - /*! - * Transforms the data received from the model into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param date the date associated to the data - * \param data an array containing the data - */ - void streamData(void); - void initialize(void) ; - void readData(CArray& data) ; - - private: - CGrid* grid_; //!< The grid attached to the data the filter can accept - CField* field_ ; - CFile* file_ ; - bool hasScaleFactor_ = false; - bool hasAddOffset_ = false ; - bool isInitialized_ = false ; - bool isCyclic_ = false ; - double scaleFactor_= 1.0 ; - double addOffset_= 0. ; - int nStepMax_ ; - int nStep_ ; - - }; // class CFileReaderSourceFilter -} // namespace xios - -#endif // __XIOS_FILE_READER_SOURCE_FILTER_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/filter/file_writer_store_filter.cpp b/xios_2311_src/src/filter/file_writer_store_filter.cpp deleted file mode 100755 index 7ffb5cd4..00000000 --- a/xios_2311_src/src/filter/file_writer_store_filter.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "file_writer_store_filter.hpp" -#include "exception.hpp" -#include "field.hpp" -#include "file.hpp" -#include "context.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - CFileWriterStoreFilter::CFileWriterStoreFilter(CGarbageCollector& gc, CField* field) - : CInputPin(gc, 1) - , field_(field), graphEnabled(false) - - { - CContext* context = CContext::getCurrent(); - - if (!field) ERROR("CFileWriterStoreFilter::CFileWriterStoreFilter(CField* field)", "The field cannot be null."); - file_ = field->getFileOut() ; - grid_= field->getGrid() ; - freqWrite_ = file_->output_freq ; - lastWrite_ = context->getCalendar()->getInitDate(); - if (!file_->isEmptyZone() && (field->getGrid()->doGridHaveDataToWrite() || file_->type == CFile::type_attr::one_file)) - needToWrite_=true ; - else needToWrite_=false; - lastFileSplit_ = file_->getLastSplit() ; - nstep_ = file_->record_offset.isEmpty() ? 0 : file_->record_offset; // record_offset < 0 ==> no output (debugging) - if (!field->scale_factor.isEmpty()) { scaleFactor_ = field->scale_factor ; hasScaleFactor_ = true ; } - if (!field->add_offset.isEmpty()) { addOffset_ = field->add_offset ; hasAddOffset_ = true ; } - if (!field->prec.isEmpty() && field->prec == 2) hasRounding_ = true ; - if (!field->default_value.isEmpty()) {hasDefaultValue_=true ; defaultValue_ = field->default_value ;} - } - - void CFileWriterStoreFilter::onInputReady(std::vector data) - { - const CDate currentWrite = lastWrite_ + freqWrite_; - if (needToWrite_) - { - file_->checkWriteFile(); - if (file_->getLastSplit() != lastFileSplit_) - { - nstep_ = 0 ; - lastFileSplit_ = file_->getLastSplit() ; - } - nstep_ = nstep_+1; - - CArray dataIn = data[0]->data ; - CArray fieldData ; - - if (hasAddOffset_ || hasScaleFactor_ || hasRounding_) dataIn = data[0]->data ; - else dataIn.reference(data[0]->data) ; - - if (hasAddOffset_) dataIn = dataIn - addOffset_ ; - if (hasScaleFactor_) dataIn = dataIn / scaleFactor_; - if (hasRounding_) dataIn = round(dataIn); - - if (hasDefaultValue_) - { - size_t nbData=dataIn.numElements() ; - for (size_t idx = 0; idx < nbData; ++idx) if ( NumTraits::isNan(dataIn(idx)) ) dataIn(idx)=defaultValue_ ; - } - - if (field_->getUseCompressedOutput()) fieldData.reference(dataIn) ; - else - { - fieldData.resize(grid_->getWorkflowToFullConnector()->getDstSize()); - if (hasDefaultValue_) grid_->getWorkflowToFullConnector()->transfer(dataIn, fieldData, defaultValue_ ) ; - else grid_->getWorkflowToFullConnector()->transfer(dataIn, fieldData ) ; - } - nstep_ = file_->getDataOutput()->writeFieldData(field_, fieldData, lastWrite_,currentWrite, nstep_); - if(this->graphEnabled) - { - - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - if(!data[0]->graphPackage) data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - - CWorkflowGraph::addNode("File Writer Store filter", 5, true, 1, data[0]); - - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - - - } - } - - lastWrite_ = currentWrite ; - - } - - bool CFileWriterStoreFilter::mustAutoTrigger() const - { - return true; - } - - bool CFileWriterStoreFilter::isDataExpected(const CDate& date) const - { - return true; - } -} // namespace xios diff --git a/xios_2311_src/src/filter/file_writer_store_filter.hpp b/xios_2311_src/src/filter/file_writer_store_filter.hpp deleted file mode 100755 index 03439357..00000000 --- a/xios_2311_src/src/filter/file_writer_store_filter.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef __XIOS_FILE_WRITER_STORE_FILTER_HPP__ -#define __XIOS_FILE_WRITER_STORE_FILTER_HPP__ - -#include "input_pin.hpp" -#include "graph_package.hpp" - -namespace xios -{ - class CField; - class CFile; - class CGrid; - - /*! - * A terminal filter which writes the packets it receives in a file. - */ - class CFileWriterStoreFilter : public CInputPin - { - public: - /*! - * Constructs the filter (with one input slot) associated to the specified field - * and a garbage collector. - * - * \param gc the associated garbage collector - * \param field the associated field - */ - CFileWriterStoreFilter(CGarbageCollector& gc, CField* field); - - /*! - * Tests if the filter must auto-trigger. - * - * \return true if the filter must auto-trigger - */ - bool virtual mustAutoTrigger() const; - - /*! - * Tests whether data is expected for the specified date. - * - * \param date the date associated to the data - */ - bool virtual isDataExpected(const CDate& date) const; - - CGraphPackage *graphPackage; - bool graphEnabled; - - protected: - /*! - * Callbacks a field to write a packet to a file. - * - * \param data a vector of packets corresponding to each slot - */ - void virtual onInputReady(std::vector data); - - private: - CField* field_; // data) { CDataPacketPtr outputPacket = engine->apply(data); diff --git a/xios_2311_src/src/filter/filter.hpp b/xios_2311_src/src/filter/filter.hpp index 75a28693..f6561a08 100644 --- a/xios_2311_src/src/filter/filter.hpp +++ b/xios_2311_src/src/filter/filter.hpp @@ -25,6 +25,8 @@ namespace xios */ CFilter(CGarbageCollector& gc, size_t inputSlotsCount, IFilterEngine* engine); + StdString virtual GetName(void); + /*! * Sets the trigger for a specific input slot. * @@ -61,6 +63,12 @@ namespace xios */ bool virtual isDataExpected(const CDate& date) const; + + + + int filterID; + StdString expression; + protected: IFilterEngine* engine; //!< The filter engine, might be the filter itself size_t inputSlotCount; //!< Number of slot on filter diff --git a/xios_2311_src/src/filter/garbage_collector.cpp b/xios_2311_src/src/filter/garbage_collector.cpp index 8b805bf4..3d95bc81 100644 --- a/xios_2311_src/src/filter/garbage_collector.cpp +++ b/xios_2311_src/src/filter/garbage_collector.cpp @@ -2,6 +2,12 @@ namespace xios { + int InvalidableObject::filterIdGenerator = 0; + + int InvalidableObject::edgeIdGenerator = 0; + + int InvalidableObject::clusterIdGenerator = 0; + void CGarbageCollector::registerObject(InvalidableObject* Object, Time timestamp) { registeredObjects[timestamp].insert(Object); diff --git a/xios_2311_src/src/filter/garbage_collector.hpp b/xios_2311_src/src/filter/garbage_collector.hpp index 4f6fb594..036381b3 100644 --- a/xios_2311_src/src/filter/garbage_collector.hpp +++ b/xios_2311_src/src/filter/garbage_collector.hpp @@ -19,6 +19,17 @@ namespace xios * \param timestamp the timestamp used for invalidation */ void virtual invalidate(Time timestamp) = 0; + + + + static int filterIdGenerator; + + static int edgeIdGenerator; + + static int clusterIdGenerator; + + + }; // struct InvalidableObject /*! diff --git a/xios_2311_src/src/filter/input_pin.cpp b/xios_2311_src/src/filter/input_pin.cpp index f15b58dc..2a2ebe88 100644 --- a/xios_2311_src/src/filter/input_pin.cpp +++ b/xios_2311_src/src/filter/input_pin.cpp @@ -2,6 +2,7 @@ #include "output_pin.hpp" #include "garbage_collector.hpp" #include "exception.hpp" +#include "workflow_graph.hpp" namespace xios { @@ -10,7 +11,12 @@ namespace xios , slotsCount(slotsCount) , triggers(slotsCount) , hasTriggers(false) - { /* Nothing to do */ } + { } + + StdString CInputPin::GetName(void) + { + return StdString("Input pin"); + } void CInputPin::setInput(size_t inputSlot, CDataPacketPtr packet) { diff --git a/xios_2311_src/src/filter/input_pin.hpp b/xios_2311_src/src/filter/input_pin.hpp index a0d38d76..78d9a415 100644 --- a/xios_2311_src/src/filter/input_pin.hpp +++ b/xios_2311_src/src/filter/input_pin.hpp @@ -25,6 +25,8 @@ namespace xios * \param slotsCount the number of slots */ CInputPin(CGarbageCollector& gc, size_t slotsCount); + + StdString virtual GetName(void); /*! * Sets the trigger for a specific input slot. diff --git a/xios_2311_src/src/filter/model_to_client_source_filter.cpp b/xios_2311_src/src/filter/model_to_client_source_filter.cpp deleted file mode 100755 index f6080849..00000000 --- a/xios_2311_src/src/filter/model_to_client_source_filter.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "model_to_client_source_filter.hpp" -#include "grid.hpp" -#include "exception.hpp" -#include "calendar_util.hpp" -#include -#include "workflow_graph.hpp" - -namespace xios -{ - CModelToClientSourceFilter::CModelToClientSourceFilter(CGarbageCollector& gc, CGrid* grid, bool hasMissingValue, double defaultValue) - : COutputPin(gc) - , grid_(grid) - , hasMissingValue_(hasMissingValue), defaultValue_(defaultValue) - { - if (!grid) - ERROR("CSourceFilter::CSourceFilter(CGrid* grid)", - "Impossible to construct a source filter without providing a grid."); - } - - template - void CModelToClientSourceFilter::streamData(CDate date, const CArray& data) - { - CDataPacketPtr packet(new CDataPacket); - packet->date = date; - packet->timestamp = date; - packet->status = CDataPacket::NO_ERROR; - - auto connector = grid_->getModelToWorkflowConnector() ; - - if (connector->getSrcSize() != data.numElements()) - ERROR("void CModelToClientSourceFilter::streamData(CDate date, const CArray& data)", - << "[ Awaiting data of size = " <getSrcSize() << ", " - << "Received data size = " << data.numElements() << " ] " - << "The data array does not have the right size! " - << "grid = " << grid_->getId()) - const double nanValue = std::numeric_limits::quiet_NaN(); - packet->data.resize(connector->getDstSize()) ; - connector->transfer(data, packet->data, nanValue) ; - - if (hasMissingValue_) - { - const double nanValue = std::numeric_limits::quiet_NaN(); - const size_t nbData = packet->data.numElements(); - for (size_t idx = 0; idx < nbData; ++idx) - if (defaultValue_ == packet->data(idx)) packet->data(idx) = nanValue; - } - - buildWorkflowGraph(packet); - onOutputReady(packet); - } - - void CModelToClientSourceFilter::buildWorkflowGraph(CDataPacketPtr packet) - { - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - if(!packet->graphPackage) - { - packet->graphPackage = new CGraphDataPackage; - } - packet->graphPackage->fromFilter = this->graphPackage->filterId; - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - CWorkflowGraph::addNode("Model to Client Source filter", 1, false, 0, packet); - } - } - - - - - template void CModelToClientSourceFilter::streamData<1>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<2>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<3>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<4>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<5>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<6>(CDate date, const CArray& data); - template void CModelToClientSourceFilter::streamData<7>(CDate date, const CArray& data); - -} // namespace xios diff --git a/xios_2311_src/src/filter/model_to_client_source_filter.hpp b/xios_2311_src/src/filter/model_to_client_source_filter.hpp deleted file mode 100755 index 712684c3..00000000 --- a/xios_2311_src/src/filter/model_to_client_source_filter.hpp +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef __XIOS_MODEL_TO_CLIENT_SOURCE_FILTER_HPP__ -#define __XIOS_MODEL_TO_CLIENT_SOURCE_FILTER_HPP__ - -#include - -#include "output_pin.hpp" - -namespace xios -{ - class CGrid; - - /*! - * A source filter is the entry point of the data in the graph of filters. - */ - class CModelToClientSourceFilter : public COutputPin - { - public: - /*! - * Constructs a source filter accepting data attached to the specified grid. - * - * \param gc the garbage collector associated with this filter - * \param grid the grid to which the data is attached - * \param hasMissingValue whether data has missing value - * \param defaultValue missing value to detect - */ - CModelToClientSourceFilter(CGarbageCollector& gc, CGrid* grid, bool hasMissingValue = false, double defaultValue = 0.0); - - /*! - * Transforms the data received from the model into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param date the date associated to the data - * \param data an array containing the data - */ - template - void streamData(CDate date, const CArray& data); - - void buildWorkflowGraph(CDataPacketPtr packet); - - - /*! - * Transforms the data received from the server into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param date the date associated to the data - * \param data an array containing the data - */ - - private: - CGrid* grid_; //!< The grid attached to the data the filter can accept - const bool hasMissingValue_; - const double defaultValue_; - }; // class CSourceFilter -} // namespace xios - -#endif // __XIOS_MODEL_TO_CLIENT_SOURCE_FILTER_HPP__ diff --git a/xios_2311_src/src/filter/output_pin.cpp b/xios_2311_src/src/filter/output_pin.cpp index c7a1526d..1035926b 100644 --- a/xios_2311_src/src/filter/output_pin.cpp +++ b/xios_2311_src/src/filter/output_pin.cpp @@ -1,12 +1,18 @@ #include "output_pin.hpp" #include "exception.hpp" +#include "workflow_graph.hpp" namespace xios { COutputPin::COutputPin(CGarbageCollector& gc, bool manualTrigger /*= false*/) : gc(gc) - , manualTrigger(manualTrigger), graphEnabled(false) - { /* Nothing to do */ } + , manualTrigger(manualTrigger) + { } + + StdString COutputPin::GetName(void) + { + return StdString("Output pin"); + } void COutputPin::connectOutput(std::shared_ptr inputPin, size_t inputSlot) { @@ -100,4 +106,26 @@ namespace xios { outputPackets.erase(outputPackets.begin(), outputPackets.lower_bound(timestamp)); } + + void COutputPin::setParentFiltersTag() + { + for(int i=0; istart_graph<0) parent_filters[i]->start_graph = start_graph; + else parent_filters[i]->start_graph = min(parent_filters[i]->start_graph, start_graph); + + + if(parent_filters[i]->end_graph<0) parent_filters[i]->end_graph = end_graph; + else parent_filters[i]->end_graph = max(parent_filters[i]->end_graph, end_graph); + + + parent_filters[i]->tag += tag; + parent_filters[i]->setParentFiltersTag(); + } + } + + + + } // namespace xios diff --git a/xios_2311_src/src/filter/output_pin.hpp b/xios_2311_src/src/filter/output_pin.hpp index 115ae5bb..c8c25464 100644 --- a/xios_2311_src/src/filter/output_pin.hpp +++ b/xios_2311_src/src/filter/output_pin.hpp @@ -3,16 +3,30 @@ #include "garbage_collector.hpp" #include "input_pin.hpp" -#include "graph_package.hpp" +#include "duration.hpp" namespace xios { + class CField; + class CInputPin; + class CFilter; + class CDuration; /*! * An output pin handles the connections with downstream filters. */ class COutputPin : public InvalidableObject { public: + int tag = 0; + Time start_graph = 0; + Time end_graph = 0; + CField *field = nullptr; + int distance = 0; + + + + std::vector< std::shared_ptr > parent_filters; + /*! * Constructs an ouput pin with manual or automatic trigger * and an associated garbage collector. @@ -22,6 +36,8 @@ namespace xios */ COutputPin(CGarbageCollector& gc, bool manualTrigger = false); + StdString virtual GetName(void); + /*! * Connects to a specific slot of the input pin of a downstream filter. * Note that the output pin holds a reference on the downstream filter. @@ -65,8 +81,9 @@ namespace xios * \param timestamp the timestamp used for invalidation */ void virtual invalidate(Time timestamp); - CGraphPackage *graphPackage; - bool graphEnabled; + + void virtual setParentFiltersTag(); + protected: /*! diff --git a/xios_2311_src/src/filter/pass_through_filter.cpp b/xios_2311_src/src/filter/pass_through_filter.cpp index 26af50b2..39fa5852 100644 --- a/xios_2311_src/src/filter/pass_through_filter.cpp +++ b/xios_2311_src/src/filter/pass_through_filter.cpp @@ -1,60 +1,53 @@ #include "pass_through_filter.hpp" #include "workflow_graph.hpp" -#include +#include "field.hpp" +#include "file.hpp" namespace xios { CPassThroughFilter::CPassThroughFilter(CGarbageCollector& gc) : CFilter(gc, 1, this) - { /* Nothing to do */ } - - CDataPacketPtr CPassThroughFilter::apply(std::vector data) - { - buildWorkflowGraph(data); - return data[0]; + { } - void CPassThroughFilter::buildWorkflowGraph(std::vector data) + void CPassThroughFilter::buildGraph(std::vector data) { - if(this->graphEnabled) + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + // bool building_graph = this->tag ? data[0]->timestamp >= this->field->field_graph_start && data[0]->timestamp <= this->field->field_graph_end : false; + + if(building_graph) { - if(data[0]->graphPackage && data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId()) - { - std::cout<<"PASS THROUGH FILTER OMITTED "<graphPackage->filterId = CWorkflowGraph::getNodeSize(); - - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->fromFilter = -1; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - } + // std::cout<<"CPassThroughFilter::apply field_id = "<field->getId()<<" start = "<field->getId()+")", 2, 1, 1, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; - for(int i=0; igraphPackage->filterId; i++) + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) { - if(CXios::isClient - && (*CWorkflowGraph::vectorOfNodes_)[i].label_field_id == this->label_field_id - && (*CWorkflowGraph::vectorOfNodes_)[i].timestamp == data[0]->timestamp - && (*CWorkflowGraph::vectorOfNodes_)[i].filter_name == "Pass through filter" ) - { - data[0]->graphPackage->fromFilter = i; - return; - } + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0; } + else CWorkflowGraph::build_begin = true; - CWorkflowGraph::addNode("Pass through filter", 2, false, 1, data[0]); - if(CXios::isClient) (*CWorkflowGraph::vectorOfNodes_)[this->graphPackage->filterId].label_field_id = this->label_field_id; - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - - } - } + data[0]->src_filterID=this->filterID; + data[0]->distance++; + } + data[0]->field = this->field; + } + + CDataPacketPtr CPassThroughFilter::apply(std::vector data) + { + if(CXios::isClient) buildGraph(data); + return data[0]; + } } // namespace xios diff --git a/xios_2311_src/src/filter/pass_through_filter.hpp b/xios_2311_src/src/filter/pass_through_filter.hpp index 1ab6e7ac..9632b8e2 100644 --- a/xios_2311_src/src/filter/pass_through_filter.hpp +++ b/xios_2311_src/src/filter/pass_through_filter.hpp @@ -19,7 +19,7 @@ namespace xios */ CPassThroughFilter(CGarbageCollector& gc); - StdString label_field_id; //used for omitting redundant pass through filter in graph + inline StdString GetName(void) {return StdString("Pass through filter");}; protected: /*! @@ -29,8 +29,7 @@ namespace xios * \return the untouched source data packet */ CDataPacketPtr virtual apply(std::vector data); - void buildWorkflowGraph(std::vector data); - + void virtual buildGraph(std::vector data); }; // class CPassThroughFilter } // namespace xios diff --git a/xios_2311_src/src/filter/server_from_client_source_filter.cpp b/xios_2311_src/src/filter/server_from_client_source_filter.cpp deleted file mode 100755 index 4309ed44..00000000 --- a/xios_2311_src/src/filter/server_from_client_source_filter.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "server_from_client_source_filter.hpp" -#include "grid.hpp" -#include "exception.hpp" -#include "calendar_util.hpp" -#include "context.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - CServerFromClientSourceFilter::CServerFromClientSourceFilter(CGarbageCollector& gc, CGrid* grid) - : COutputPin(gc) - , grid_(grid) - { - if (!grid_) - ERROR("CServerFromClientSourceFilter::CServerFromClientSourceFilter(CGarbageCollector& gc, CGrid* grid)", - "Impossible to construct a source filter without providing a grid."); - } - - void CServerFromClientSourceFilter::streamData(CEventServer& event) - { - Time timeStamp ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> timeStamp ; - CDataPacketPtr packet(new CDataPacket); - packet->date = CContext::getCurrent()->getCalendar()->getTimeOrigin() + timeStamp*Second; // very bad, better to pass directly the date - packet->timestamp = timeStamp; - packet->status = CDataPacket::NO_ERROR; - grid_->getServerFromClientConnector()->transfer(event,packet->data) ; - - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - packet->graphPackage = new CGraphDataPackage; - packet->graphPackage->fromFilter = this->graphPackage->filterId; - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - CWorkflowGraph::addNode("Server from Client Source filter", 1, false, 0, packet); - } - onOutputReady(packet); - } - - - -} // namespace xios diff --git a/xios_2311_src/src/filter/server_from_client_source_filter.hpp b/xios_2311_src/src/filter/server_from_client_source_filter.hpp deleted file mode 100755 index 58cdb5a4..00000000 --- a/xios_2311_src/src/filter/server_from_client_source_filter.hpp +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __XIOS_SERVER_FROM_CLIENT_SOURCE_FILTER__ -#define __XIOS_SERVER_FROM_CLIENT_SOURCE_FILTER__ - -#include "output_pin.hpp" -#include "event_server.hpp" - -namespace xios -{ - class CGrid; - - /*! - * A source filter is the entry point of the data in the graph of filters. - */ - class CServerFromClientSourceFilter : public COutputPin - { - public: - /*! - * Constructs a source filter accepting data attached to the specified grid. - * - * \param gc the garbage collector associated with this filter - * \param grid the grid to which the data is attached - * \param compression - * \param mask - * \param offset the offset applied to the timestamp of all packets - * \param manualTrigger whether the output should be triggered manually - * \param hasMissingValue whether data has missing value - * \param defaultValue missing value to detect - */ - CServerFromClientSourceFilter(CGarbageCollector& gc, CGrid* grid); - - /*! - * Transforms the data received from the model into a packet and send it - * in the filter graph. The array containing the data can safely be reused - * immediately after this method returns. - * - * \param date the date associated to the data - * \param data an array containing the data - */ - void streamData(CEventServer& event); - - private: - CGrid* grid_; //!< The grid attached to the data the filter can accept - - }; // class CServerFromClientSourceFilter -} // namespace xios - -#endif // __XIOS_SERVER_FROM_CLIENT_SOURCE_FILTER__ diff --git a/xios_2311_src/src/filter/server_to_client_store_filter.cpp b/xios_2311_src/src/filter/server_to_client_store_filter.cpp deleted file mode 100755 index b4ec4cd7..00000000 --- a/xios_2311_src/src/filter/server_to_client_store_filter.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include "server_to_client_store_filter.hpp" -#include "exception.hpp" -#include "field.hpp" -#include "grid.hpp" -#include "utils.hpp" -#include "context_client.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - CServerToClientStoreFilter::CServerToClientStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client) - : CInputPin(gc, 1) - , field_(field), client_(client), graphEnabled(false) - { - if (!field) ERROR("CServerToClientFilter::CServerToClientFilter(CField* field)", "The field cannot be null."); - grid_ = field_ -> getGrid() ; - } - - void CServerToClientStoreFilter::onInputReady(std::vector packets) - { - bool isEOF ; - if (packets[0]->status == CDataPacket::NO_ERROR) isEOF = false ; - else if (packets[0]->status == CDataPacket::END_OF_STREAM) isEOF = true ; - - CEventClient event(field_->getType(), CField::EVENT_ID_READ_DATA_READY); - - auto connector = grid_->getServerToClientConnector() ; - CMessage msg ; - msg<getId() ; - - if(this->graphEnabled) - { - CWorkflowGraph::addNode("Server to Client Store filter", 5, true, 1, packets[0]); - } - - if (isEOF) - { - msg<<(int)(-1) ; - connector->transfer(client_,event, msg) ; - info(20)<<"Send Data from server to client: FieldId : "<getId()<<" step : "<EOF"<transfer(packets[0]->data, client_, event, msg) ; - info(20)<<"Send Data from server to client: FieldId : "<getId()<<" step : "<& size) - { - size = grid_->getServerToClientConnector()->getTransferedDataSize() ; - return client_ ; - } - - bool CServerToClientStoreFilter::mustAutoTrigger() const - { - return true; - } - - bool CServerToClientStoreFilter::isDataExpected(const CDate& date) const - { - return true; - } -} // namespace xios diff --git a/xios_2311_src/src/filter/server_to_client_store_filter.hpp b/xios_2311_src/src/filter/server_to_client_store_filter.hpp deleted file mode 100755 index fbe473a3..00000000 --- a/xios_2311_src/src/filter/server_to_client_store_filter.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef __XIOS_SERVER_TO_CLIENT_FILTER_HPP__ -#define __XIOS_SERVER_TO_CLIENT_FILTER_HPP__ - -#include "input_pin.hpp" -#include "graph_package.hpp" - -namespace xios -{ - class CField; - class CGrid ; - class CContextClient ; - - /*! - * A terminal filter which transmits the packets it receives to a field for writting in a file. - */ - class CServerToClientStoreFilter : public CInputPin - { - public: - /*! - * Constructs the filter (with one input slot) associated to the specified field - * and a garbage collector. - * - * \param gc the associated garbage collector - * \param field the associated field - */ - CServerToClientStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client); - - /*! - * Get the size of data transfered by call. Needed for context client buffer size evaluation - * - * \param size : map returning the size for each server rank - * \return the associated context client - */ - CContextClient* getTransferedDataSize(map& size) ; - - /*! - * Tests if the filter must auto-trigger. - * - * \return true if the filter must auto-trigger - */ - bool virtual mustAutoTrigger() const; - - /*! - * Tests whether data is expected for the specified date. - * - * \param date the date associated to the data - */ - bool virtual isDataExpected(const CDate& date) const; - CGraphPackage * graphPackage; - bool graphEnabled; - - protected: - /*! - * Callbacks a field to write a packet to a file. - * - * \param data a vector of packets corresponding to each slot - */ - void virtual onInputReady(std::vector data); - - private: - CField* field_; // packets; //samplingOffset.hour, this->samplingOffset.minute, this->samplingOffset.second, this->samplingOffset.timestep) , initDate(initDate) -// , nextSamplingDate(initDate + (this->samplingOffset + initDate.getRelCalendar().getTimeStep())) , nextSamplingDate(initDate + offsetMonth + ( offsetAllButMonth + initDate.getRelCalendar().getTimeStep())) , nbOperationDates(1) , nbSamplingDates(0) // , nextOperationDate(initDate + opFreq + this->samplingOffset) , isFirstOperation(true) - , graphCycleCompleted(true) - , temporalOperation(opId) + , temp_op(opId) { } - std::string CTemporalFilter::getTemporalOperation() - { - return this->temporalOperation; - } + + - void CTemporalFilter::buildWorkflowGraph(std::vector data) + + bool CTemporalFilter::buildGraph(std::vector data) { - if(this->graphEnabled ) + bool building_graph=this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + + if(building_graph) { - if(!data[0]->graphPackage) + if(this->filterIDoutputs.size()==0) this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + // std::cout<<"CTemporalFilter::apply filter tag = "<tag<<" start = "<start_graph<<" end = "<end_graph<filterIDoutputs.size()==0) { - data[0]->graphPackage = new CGraphDataPackage; + CWorkflowGraph::addNode(this->filterID, "Temporal Filter\\n("+this->temp_op+")", 5, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].transform_type = this->temp_op; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].inputs_complete = false ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].clusterID = 1 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = (data[0]->distance); + + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); } - - if(graphCycleCompleted) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - CWorkflowGraph::addNode("Temporal filter \\n("+getTemporalOperation()+")", 3, false, 0, data[0]); - graphCycleCompleted = false; + + if(CWorkflowGraph::build_begin) + { + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb += 1 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = max(data[0]->distance+1, (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance); } - - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - // this->graphPackage->sourceFilterIds.push_back(data[0]->graphPackage->fromFilter); - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); + + + this->filterIDoutputs.push_back(data[0]->src_filterID); } + return building_graph; } - + + CDataPacketPtr CTemporalFilter::apply(std::vector data) { - buildWorkflowGraph(data); - - CDataPacketPtr packet; + bool BG = buildGraph(data); + + CDataPacketPtr packet=0; if (data[0]->status != CDataPacket::END_OF_STREAM) { @@ -111,14 +125,23 @@ namespace xios packet->status = data[0]->status; packet->data.resize(tmpData.numElements()); packet->data = tmpData; - packet->graphPackage = data[0]->graphPackage; } else packet = data[0]; isFirstOperation = false; - graphCycleCompleted = true; - } + + packet->field = this->field; + + if(BG) + { + packet->src_filterID=this->filterID; + packet->distance = data[0]->distance+1; + this->filterIDoutputs.clear(); + CWorkflowGraph::build_begin=true; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].inputs_complete = true ; + } + } } return packet; diff --git a/xios_2311_src/src/filter/temporal_filter.hpp b/xios_2311_src/src/filter/temporal_filter.hpp index 09dddb07..bfc6062a 100644 --- a/xios_2311_src/src/filter/temporal_filter.hpp +++ b/xios_2311_src/src/filter/temporal_filter.hpp @@ -30,6 +30,8 @@ namespace xios const CDate& initDate, const CDuration samplingFreq, const CDuration samplingOffset, const CDuration opFreq, bool ignoreMissingValue = false); + inline StdString GetName(void) {return StdString("Temporal filter");}; + /*! * Applies the temporal operation to the input data and returns the result when it is ready. * @@ -37,8 +39,7 @@ namespace xios * \return the result of the temporal operation or null if it is not ready yet */ CDataPacketPtr virtual apply(std::vector data); - - void buildWorkflowGraph(std::vector data); + bool virtual buildGraph(std::vector data); /*! * Tests if the filter must auto-trigger. @@ -53,8 +54,10 @@ namespace xios * \param date the date associated to the data */ bool virtual isDataExpected(const CDate& date) const; - bool graphCycleCompleted; - std::string getTemporalOperation(); + std::vector filterIDoutputs; + std::vector > filterIDoutputs_pair; + + StdString temp_op; private: // Warning the declaration order matters here, double-check the constructor before changing it @@ -73,7 +76,6 @@ namespace xios int nbSamplingDates; // CDate nextOperationDate; //!< The date of the next operation bool isFirstOperation; //!< True before the first operation was been computed - const std::string temporalOperation; }; // class CTemporalFilter } // namespace xios diff --git a/xios_2311_src/src/filter/temporal_transform_filter.cpp b/xios_2311_src/src/filter/temporal_transform_filter.cpp deleted file mode 100755 index e2f804b3..00000000 --- a/xios_2311_src/src/filter/temporal_transform_filter.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "temporal_transform_filter.hpp" -#include "workflow_graph.hpp" - -namespace xios -{ - - CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, int slots, shared_ptr algo, int nrecords, bool detectMissingValues, double defaultValue) - : CTransformFilter(gc, slots, algo, detectMissingValues, defaultValue), nrecords_(nrecords), graphCycleCompleted(true) - { - } - - void CTemporalTransformFilter::buildWorkflowGraph(std::vector data) - { - if(this->graphEnabled ) - { - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - } - - if(graphCycleCompleted) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - CWorkflowGraph::addNode("Temporal splitting filter", 7, false, 0, data[0]); - graphCycleCompleted = false; - } - - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - } - - } - - CDataPacketPtr CTemporalTransformFilter::apply(std::vector data) - { - if (data[0]->status == CDataPacket::NO_ERROR) - { - buildWorkflowGraph(data); - if (record_==0) tmpData_.resize(nrecords_) ; - algorithm_->apply(data[0]->data, tmpData_[record_]); - record_++ ; - if (record_==nrecords_) - { - size_t size=0 ; - for(auto& it : tmpData_) size += it.numElements() ; - // for now, no auxilliairy field - CDataPacketPtr packet(new CDataPacket); - packet->date = data[0]->date; - packet->timestamp = data[0]->timestamp; - packet->status = data[0]->status; - packet->data.resize(size) ; - packet->graphPackage = data[0]->graphPackage; - double* out = packet->data.dataFirst() ; - for(auto& it : tmpData_) - { - size = it.numElements() ; - double* tmp = it.dataFirst() ; - for(size_t i=0 ; idate = data[0]->date; - packet->timestamp = data[0]->timestamp; - packet->status = data[0]->status; - return packet ; - } - } -} \ No newline at end of file diff --git a/xios_2311_src/src/filter/temporal_transform_filter.hpp b/xios_2311_src/src/filter/temporal_transform_filter.hpp deleted file mode 100755 index fb45029d..00000000 --- a/xios_2311_src/src/filter/temporal_transform_filter.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef __XIOS_TEMPORAL_TRANSFORM_FILTER_HPP__ -#define __XIOS_TEMPORAL_TRANSFORM_FILTER_HPP__ - -#include "transform_filter.hpp" - -namespace xios -{ - - /*! - * A generic filter with multiple input slots wrapping any type of spatial transformations. - */ - class CTemporalTransformFilter : public CTransformFilter - { - public: - - CTemporalTransformFilter(CGarbageCollector& gc, int slots, shared_ptr algo, int nrecords, bool detectMissingValues, double defaultValue) ; - - protected: - /*! - Overriding this function to process transformations with auxillary inputs - */ - CDataPacketPtr virtual apply(std::vector data) ; - void buildWorkflowGraph(std::vector data); - bool graphCycleCompleted; -// void apply(const CArray& dataSrc, CArray& dataDest); - - /*! - Overriding this function to process transformations with auxillary inputs - */ -// void virtual onInputReady(std::vector data); - //! Current record in the filter - int record_=0 ; - //! Maximum number of records - int nrecords_; - //! Temporary storage for output flux - vector> tmpData_; - }; // class CTransformFilter - - -} // namespace xios - -#endif //__XIOS_TEMPORAL_TRANSFORM_FILTER_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/filter/ternary_arithmetic_filter.cpp b/xios_2311_src/src/filter/ternary_arithmetic_filter.cpp index eeaf43fa..471b198e 100644 --- a/xios_2311_src/src/filter/ternary_arithmetic_filter.cpp +++ b/xios_2311_src/src/filter/ternary_arithmetic_filter.cpp @@ -1,4 +1,7 @@ #include "ternary_arithmetic_filter.hpp" +#include "workflow_graph.hpp" +#include "yacc_var.hpp" +#include "file.hpp" namespace xios { @@ -7,7 +10,67 @@ namespace xios , op(operatorExpr.getOpScalarScalarField(op)) , value1(value1) , value2(value2) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CScalarScalarFieldArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) + { + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + } + // not first round + else + { + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CScalarScalarFieldArithmeticFilter::apply(std::vector data) { @@ -15,6 +78,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(value1,value2, data[0]->data)); @@ -27,7 +98,67 @@ namespace xios , op(operatorExpr.getOpScalarFieldScalar(op)) , value1(value1) , value2(value2) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CScalarFieldScalarArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) + { + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + } + // not first round + else + { + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CScalarFieldScalarArithmeticFilter::apply(std::vector data) { @@ -35,6 +166,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(value1, data[0]->data,value2)); @@ -46,7 +185,82 @@ namespace xios : CFilter(gc, 2, this) , op(operatorExpr.getOpScalarFieldField(op)) , value(value) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CScalarFieldFieldArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + if(CWorkflowGraph::build_begin) + { + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + } + CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + + } + // not first round + else + { + firstround = false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + if(data[1]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CScalarFieldFieldArithmeticFilter::apply(std::vector data) { @@ -54,6 +268,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (data[0]->status != CDataPacket::NO_ERROR) packet->status = data[0]->status; @@ -74,7 +296,67 @@ namespace xios , op(operatorExpr.getOpFieldScalarScalar(op)) , value1(value1) , value2(value2) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CFieldScalarScalarArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + + if(CWorkflowGraph::build_begin) + { + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + } + // not first round + else + { + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CFieldScalarScalarArithmeticFilter::apply(std::vector data) { @@ -83,6 +365,14 @@ namespace xios packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; + if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(data[0]->data, value1, value2)); @@ -94,7 +384,82 @@ namespace xios : CFilter(gc, 2, this) , op(operatorExpr.getOpFieldScalarField(op)) , value(value) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CFieldScalarFieldArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + if(CWorkflowGraph::build_begin) + { + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + } + CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + + } + // not first round + else + { + firstround = false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + if(data[1]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CFieldScalarFieldArithmeticFilter::apply(std::vector data) { @@ -102,6 +467,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (data[0]->status != CDataPacket::NO_ERROR) packet->status = data[0]->status; @@ -119,7 +492,82 @@ namespace xios : CFilter(gc, 2, this) , op(operatorExpr.getOpFieldFieldScalar(op)) , value(value) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CFieldFieldScalarArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + if(CWorkflowGraph::build_begin) + { + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + } + CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + + } + // not first round + else + { + firstround = false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + if(data[1]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CFieldFieldScalarArithmeticFilter::apply(std::vector data) { @@ -127,6 +575,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (data[0]->status != CDataPacket::NO_ERROR) packet->status = data[0]->status; @@ -144,7 +600,95 @@ namespace xios CFieldFieldFieldArithmeticFilter::CFieldFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op) : CFilter(gc, 3, this) , op(operatorExpr.getOpFieldFieldField(op)) - { /* Nothing to do */ }; + { + /* Nothing to do */ + }; + + std::tuple CFieldFieldFieldArithmeticFilter::buildGraph(std::vector data) + { + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; + int unique_filter_id; + + bool firstround; + + if(building_graph) + { + CWorkflowGraph::allocNodeEdge(); + + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); + + // first round + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) + { + firstround = true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + if(CWorkflowGraph::build_begin) + { + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + edgeID = InvalidableObject::edgeIdGenerator++; + + CWorkflowGraph::addEdge(edgeID, this->filterID, data[2]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[2]->src_filterID].filter_filled = 0 ; + } + CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; + + } + // not first round + else + { + firstround = false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + if(data[1]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[1]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[1]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + if(data[2]->src_filterID != unique_filter_id) + { + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[2]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[2]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + + } + } + + return std::make_tuple(building_graph, firstround, unique_filter_id); + } CDataPacketPtr CFieldFieldFieldArithmeticFilter::apply(std::vector data) { @@ -152,6 +696,14 @@ namespace xios packet->date = data[0]->date; packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; + + std::tuple graph = buildGraph(data); + + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (data[0]->status != CDataPacket::NO_ERROR) packet->status = data[0]->status; diff --git a/xios_2311_src/src/filter/ternary_arithmetic_filter.hpp b/xios_2311_src/src/filter/ternary_arithmetic_filter.hpp index 55878763..36f6d320 100644 --- a/xios_2311_src/src/filter/ternary_arithmetic_filter.hpp +++ b/xios_2311_src/src/filter/ternary_arithmetic_filter.hpp @@ -4,6 +4,7 @@ #include "filter.hpp" #include #include "operator_expr.hpp" +#include namespace xios { @@ -35,6 +36,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CScalarScalarFieldArithmeticFilter @@ -66,6 +68,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CScalarScalarFieldArithmeticFilter /*! @@ -94,6 +97,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CScalarScalarFieldArithmeticFilter @@ -126,6 +130,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CFieldScalarScalarArithmeticFilter @@ -155,6 +160,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CFieldScalarFieldArithmeticFilter @@ -184,6 +190,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CFieldFielScalardArithmeticFilter @@ -211,6 +218,7 @@ namespace xios * \return the result of the ternary operation */ CDataPacketPtr virtual apply(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CFieldFielFieldArithmeticFilter diff --git a/xios_2311_src/src/filter/transform_filter.cpp b/xios_2311_src/src/filter/transform_filter.cpp deleted file mode 100755 index 73f6eeb7..00000000 --- a/xios_2311_src/src/filter/transform_filter.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "transform_filter.hpp" -#include "grid_algorithm.hpp" -#include "workflow_graph.hpp" -namespace xios -{ - - CTransformFilter::CTransformFilter( CGarbageCollector& gc, int slots, shared_ptr algo, bool detectMissingValues, double defaultValue) - : CFilter(gc, slots, this), algorithm_(algo), - detectMissingValues_(detectMissingValues), defaultValue_(defaultValue) - { - - } - - CDataPacketPtr CTransformFilter::apply(std::vector data) - { - // for now, no auxilliairy field - CDataPacketPtr packet(new CDataPacket); - packet->date = data[0]->date; - packet->timestamp = data[0]->timestamp; - packet->status = data[0]->status; - - if (packet->status == CDataPacket::NO_ERROR) - { - buildWorkflowGraph(data, packet, algorithm_); - - if (data.size()>1) - { - vector> auxData(data.size()-1); - for(int i=0;idata) ; - algorithm_->apply(data[0]->data, auxData, packet->data); - } - else algorithm_->apply(data[0]->data, packet->data); - } - return packet; - } - - void CTransformFilter::buildWorkflowGraph(std::vector data, CDataPacketPtr packet, shared_ptr algorithm) - { - if(this->graphEnabled) - { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - - packet->graphPackage = new CGraphDataPackage; - if(data[0]->graphPackage) - { - packet->graphPackage->fromFilter = data[0]->graphPackage->fromFilter; - } - packet->graphPackage->toFilter = data[0]->graphPackage->toFilter; - packet->graphPackage->current_filter_name = data[0]->graphPackage->current_filter_name; - packet->graphPackage->contextId = data[0]->graphPackage->contextId; - - int tmp_from = packet->graphPackage->fromFilter; - if(this->graphPackage->show) - { - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - CWorkflowGraph::addNode("Spatial transform filter "+algorithm->getAlgoName(), 4, false, 1, packet); - CWorkflowGraph::addEdge(packet->graphPackage->fromFilter, this->graphPackage->filterId, packet); - packet->graphPackage->fromFilter = this->graphPackage->filterId; - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); - } - else - { - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - if(CXios::isClient) CWorkflowGraph::vectorOfNodes_->at(tmp_from).filter_name += algorithm->getAlgoName(); - else CWorkflowGraph::vectorOfNodes_srv_->at(tmp_from).filter_name += algorithm->getAlgoName(); - - } - } - } - -} diff --git a/xios_2311_src/src/filter/transform_filter.hpp b/xios_2311_src/src/filter/transform_filter.hpp deleted file mode 100755 index 88fb9901..00000000 --- a/xios_2311_src/src/filter/transform_filter.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __XIOS_TRANSFORM_FILTER_HPP__ -#define __XIOS_TRANSFORM_FILTER_HPP__ - -#include "filter.hpp" -#include "grid_algorithm.hpp" - -namespace xios -{ - - /*! - * A generic filter with multiple input slots wrapping any type of spatial transformations. - */ - class CTransformFilter : public CFilter, IFilterEngine - { - public: - - CTransformFilter(CGarbageCollector& gc, int slots, shared_ptr algo, bool detectMissingValues, double defaultValue) ; - - protected: - /*! - Overriding this function to process transformations with auxillary inputs - */ - CDataPacketPtr virtual apply(std::vector data) ; - void buildWorkflowGraph(std::vector data, CDataPacketPtr packet, shared_ptr algorithm); - -// void apply(const CArray& dataSrc, CArray& dataDest); - - shared_ptr algorithm_ ; - bool detectMissingValues_ ; - bool defaultValue_ ; - - }; // class CTransformFilter - - -} // namespace xios - -#endif //__XIOS_CSpatialTransformFilter__ diff --git a/xios_2311_src/src/filter/unary_arithmetic_filter.cpp b/xios_2311_src/src/filter/unary_arithmetic_filter.cpp index 52b863ef..36f8835a 100644 --- a/xios_2311_src/src/filter/unary_arithmetic_filter.cpp +++ b/xios_2311_src/src/filter/unary_arithmetic_filter.cpp @@ -1,64 +1,70 @@ #include "unary_arithmetic_filter.hpp" #include "workflow_graph.hpp" - +#include "yacc_var.hpp" +#include "file.hpp" namespace xios { CUnaryArithmeticFilter::CUnaryArithmeticFilter(CGarbageCollector& gc, const std::string& op) : CFilter(gc, 1, this) , op(operatorExpr.getOpField(op)) - { /* Nothing to do */ }; + { }; - std::pair CUnaryArithmeticFilter::buildGraph(std::vector data) + std::tuple CUnaryArithmeticFilter::buildGraph(std::vector data) { - bool building_graph = this->graphEnabled; + bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; int unique_filter_id; - bool firstround = true; + bool firstround; if(building_graph) { - if(!data[0]->graphPackage) - { - data[0]->graphPackage = new CGraphDataPackage; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - data[0]->graphPackage->fromFilter = -1; - } - - if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map ; - - size_t filterhash = std::hash{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); + CWorkflowGraph::allocNodeEdge(); + size_t filterhash = std::hash{}(this->field->content+to_string(data[0]->timestamp)+this->field->getId()); // first round - if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) + if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) { - this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); - unique_filter_id = this->graphPackage->filterId; - CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]); + firstround=true; + this->filterID = InvalidableObject::filterIdGenerator++; + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+this->field->content+")", 3, 1, 0, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; + + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); + if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "
file attributes :
" +this->field->file->record4graphXiosAttributes(); + + if(CWorkflowGraph::build_begin) + { - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); - data[0]->graphPackage->fromFilter = this->graphPackage->filterId; - data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; - std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); + CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; - - (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id; - + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + } + else CWorkflowGraph::build_begin = true; + + (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; + unique_filter_id = this->filterID; } - // not first round else { - unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; - if(data[0]->graphPackage->fromFilter != unique_filter_id) + firstround=false; + unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; + if(data[0]->src_filterID != unique_filter_id) { - CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]); - } - } + int edgeID = InvalidableObject::edgeIdGenerator++; + CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); + (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; + (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; + } + } + } - return std::make_pair(building_graph, unique_filter_id); + return std::make_tuple(building_graph, firstround, unique_filter_id); } - CDataPacketPtr CUnaryArithmeticFilter::apply(std::vector data) { CDataPacketPtr packet(new CDataPacket); @@ -66,14 +72,13 @@ namespace xios packet->timestamp = data[0]->timestamp; packet->status = data[0]->status; - std::pair graph = buildGraph(data); + std::tuple graph = buildGraph(data); - if(std::get<0>(graph)) - { - packet->graphPackage = new CGraphDataPackage; - packet->graphPackage->fromFilter = std::get<1>(graph); - packet->graphPackage->currentField = this->graphPackage->inFields[0]; - } + if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); + if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; + if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; + + packet->field = this->field; if (packet->status == CDataPacket::NO_ERROR) packet->data.reference(op(data[0]->data)); diff --git a/xios_2311_src/src/filter/unary_arithmetic_filter.hpp b/xios_2311_src/src/filter/unary_arithmetic_filter.hpp index a2078415..6bab61d4 100644 --- a/xios_2311_src/src/filter/unary_arithmetic_filter.hpp +++ b/xios_2311_src/src/filter/unary_arithmetic_filter.hpp @@ -33,7 +33,7 @@ namespace xios * \return the result of the unary operation */ CDataPacketPtr virtual apply(std::vector data); - std::pair virtual buildGraph(std::vector data); + std::tuple virtual buildGraph(std::vector data); }; // class CUnaryArithmeticFilter } // namespace xios diff --git a/xios_2311_src/src/graph_package.hpp b/xios_2311_src/src/graph_package.hpp deleted file mode 100644 index 04f49e60..00000000 --- a/xios_2311_src/src/graph_package.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef __XIOS_CGraph_package__ -#define __XIOS_CGraph_package__ - -namespace xios -{ - class CField; - struct CGraphPackage - { - int filterId; - std::vector< int > sourceFilterIds; - std::vector< CField* > inFields; - StdString contextId; - bool show; - std::pair< Time, Time > graphInterval; - - CGraphPackage(): show(true) {} - }; - struct CGraphDataPackage - { - int fromFilter; - int toFilter; - StdString current_filter_name; - CField *currentField=nullptr; - int distanceFromStart=-1; - StdString contextId; - bool show; - - CGraphDataPackage(): fromFilter(-1), show(true) {} - }; -} // namespace xios - -#endif //__XIOS_CGraph_package__ diff --git a/xios_2311_src/src/group_factory.hpp b/xios_2311_src/src/group_factory.hpp index b20d9a48..cb46e3a2 100644 --- a/xios_2311_src/src/group_factory.hpp +++ b/xios_2311_src/src/group_factory.hpp @@ -17,7 +17,6 @@ namespace xios /// Mutateurs /// static void SetCurrentContextId(const StdString & context); - static void clearCurrentContextId() {CurrContext.clear(); CurrContext.shrink_to_fit();} template static void AddGroup(std::shared_ptr pgroup, diff --git a/xios_2311_src/src/group_factory_decl.cpp b/xios_2311_src/src/group_factory_decl.cpp index f21ad6a5..7b0a46fc 100644 --- a/xios_2311_src/src/group_factory_decl.cpp +++ b/xios_2311_src/src/group_factory_decl.cpp @@ -19,8 +19,6 @@ namespace xios macro(CFieldGroup) macro(CFileGroup) - macro(CCouplerInGroup) - macro(CCouplerOutGroup) macro(CGridGroup) macro(CAxisGroup) macro(CDomainGroup) diff --git a/xios_2311_src/src/group_template.hpp b/xios_2311_src/src/group_template.hpp index 9fcbfbe2..2ceefef2 100644 --- a/xios_2311_src/src/group_template.hpp +++ b/xios_2311_src/src/group_template.hpp @@ -71,8 +71,9 @@ namespace xios V* createChildGroup(const string& id="") ; void addChildGroup(V* childGroup) ; static bool dispatchEvent(CEventServer& event) ; - void sendCreateChild(const string& id, CContextClient* client, const string& objectId="") ; - void sendCreateChildGroup(const string& id, CContextClient* client, const string& objectId="") ; + void sendCreateChild(const string& id="") ; + void sendCreateChild(const string& id, CContextClient* client) ; + void sendCreateChildGroup(const string& id="") ; static void recvCreateChild(CEventServer& event) ; void recvCreateChild(CBufferIn& buffer) ; static void recvCreateChildGroup(CEventServer& event) ; diff --git a/xios_2311_src/src/group_template_decl.cpp b/xios_2311_src/src/group_template_decl.cpp index 0f214048..f3f9d369 100644 --- a/xios_2311_src/src/group_template_decl.cpp +++ b/xios_2311_src/src/group_template_decl.cpp @@ -9,8 +9,6 @@ namespace xios macro(Context) macro(Field) macro(File) - macro(CouplerIn) - macro(CouplerOut) macro(Domain) macro(Grid) macro(Axis) diff --git a/xios_2311_src/src/group_template_impl.hpp b/xios_2311_src/src/group_template_impl.hpp index b30af33f..a99a8d10 100644 --- a/xios_2311_src/src/group_template_impl.hpp +++ b/xios_2311_src/src/group_template_impl.hpp @@ -368,16 +368,48 @@ namespace xios return CGroupFactory::AddGroup(this->getShared(), childGroup->getShared()) ; } + template - void CGroupTemplate::sendCreateChild(const string& id, CContextClient* client, const string& objectId) + void CGroupTemplate::sendCreateChild(const string& id) + { + CContext* context=CContext::getCurrent() ; + + if (context->hasClient) + // if (!context->hasServer ) + { + // Use correct context client to send message +// CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer : context->client; + int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; + + CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; + if (contextClientTmp->isServerLeader()) + { + CMessage msg ; + msg<getId() ; + msg<& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg) ; + contextClientTmp->sendEvent(event) ; + } + else contextClientTmp->sendEvent(event) ; + } + } + + } + + template + void CGroupTemplate::sendCreateChild(const string& id, CContextClient* client) { CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; if (client->isServerLeader()) { CMessage msg ; - if (objectId.empty()) msg << this->getId(); - else msg << objectId; + msg<getId() ; msg<& ranks = client->getRanksServerLeader(); for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) @@ -387,25 +419,35 @@ namespace xios else client->sendEvent(event) ; } + template - void CGroupTemplate::sendCreateChildGroup(const string& id, CContextClient* client, const string& objectId) + void CGroupTemplate::sendCreateChildGroup(const string& id) { - CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ; - if (client->isServerLeader()) - { - CMessage msg ; - if (objectId.empty()) msg << this->getId(); - else msg << objectId; - msg<& ranks = client->getRanksServerLeader(); - for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) - event.push(*itRank,1,msg) ; - client->sendEvent(event) ; - } - else client->sendEvent(event) ; - } - - + CContext* context=CContext::getCurrent() ; + if (context->hasClient) + { + // Use correct context client to send message + // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; + CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ; + if (contextClientTmp->isServerLeader()) + { + CMessage msg ; + msg<getId() ; + msg<& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg) ; + contextClientTmp->sendEvent(event) ; + } + else contextClientTmp->sendEvent(event) ; + } + } + } + template void CGroupTemplate::recvCreateChild(CEventServer& event) { diff --git a/xios_2311_src/src/interface/c/iccalendar.cpp b/xios_2311_src/src/interface/c/iccalendar.cpp index 9a26f315..b8f67540 100644 --- a/xios_2311_src/src/interface/c/iccalendar.cpp +++ b/xios_2311_src/src/interface/c/iccalendar.cpp @@ -12,15 +12,11 @@ extern "C" TRY { CTimer::get("XIOS").resume(); - CTimer::get("XIOS update calendar").resume(); xios::CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); -//ym context->checkBuffersAndListen(); - + context->checkBuffersAndListen(); context->updateCalendar(step); context->sendUpdateCalendar(step); - CTimer::get("XIOS update calendar").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK diff --git a/xios_2311_src/src/interface/c/icdata.cpp b/xios_2311_src/src/interface/c/icdata.cpp index 3f729ee0..da965a99 100644 --- a/xios_2311_src/src/interface/c/icdata.cpp +++ b/xios_2311_src/src/interface/c/icdata.cpp @@ -64,8 +64,6 @@ extern "C" if (!cstr2string(client_id, len_client_id, str)) return; - CTimer::get("XIOS").resume(); - CTimer::get("XIOS init").resume(); int initialized; MPI_Initialized(&initialized); if (initialized) local_comm=MPI_Comm_f2c(*f_local_comm); @@ -134,7 +132,6 @@ extern "C" CTimer::get("XIOS context finalize").resume(); CContext* context = CContext::getCurrent(); context->finalize(); - CXios::getDaemonsManager()->eventLoop() ; CTimer::get("XIOS context finalize").suspend(); CTimer::get("XIOS").suspend(); } @@ -146,8 +143,6 @@ extern "C" CTimer::get("XIOS").resume(); CTimer::get("XIOS finalize").resume(); CXios::clientFinalize(); - // Delete CContext - CObjectTemplate::cleanStaticDataStructure(); } CATCH_DUMP_STACK @@ -422,7 +417,7 @@ extern "C" CTimer::get("XIOS send field").resume(); CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_k8, shape(data_Xsize), neverDeleteData); field->setData(data); CTimer::get("XIOS send field").suspend(); @@ -442,7 +437,7 @@ extern "C" - void cxios_write_data_k81_hdl(CField* field, double* data_k8, int data_Xsize) + void cxios_write_data_k81_hdl(CField* field, double* data_k8, int data_Xsize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -450,29 +445,29 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_k8, shape(data_Xsize), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize) + void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ; + cxios_write_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize, tileid) ; } CATCH_DUMP_STACK - void cxios_write_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize) + void cxios_write_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -480,22 +475,22 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize) + void cxios_write_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize) ; + cxios_write_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, tileid) ; } CATCH_DUMP_STACK @@ -504,7 +499,7 @@ extern "C" - void cxios_write_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) + void cxios_write_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -512,22 +507,22 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize) + void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize) ; + cxios_write_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize, tileid) ; } @@ -538,7 +533,7 @@ extern "C" - void cxios_write_data_k84_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size) + void cxios_write_data_k84_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -546,17 +541,19 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k84(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size) + void cxios_write_data_k84(const char* fieldid, int fieldid_size, double* data_k8, + int data_0size, int data_1size, int data_2size, + int data_3size, int tileid) TRY { std::string fieldid_str; @@ -564,7 +561,7 @@ extern "C" CTimer::get("XIOS").resume(); CTimer::get("XIOS send field").resume(); - cxios_write_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size) ; + cxios_write_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, tileid) ; } CATCH_DUMP_STACK @@ -574,7 +571,7 @@ extern "C" void cxios_write_data_k85_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size) + int data_3size, int data_4size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -582,10 +579,10 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -594,12 +591,12 @@ extern "C" void cxios_write_data_k85(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size) + int data_3size, int data_4size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size) ; + cxios_write_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, tileid) ; } CATCH_DUMP_STACK @@ -608,7 +605,7 @@ extern "C" void cxios_write_data_k86_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size, int data_5size) + int data_3size, int data_4size, int data_5size, int tileid) TRY { @@ -617,10 +614,10 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -629,12 +626,12 @@ extern "C" void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size, int data_5size) + int data_3size, int data_4size, int data_5size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; + cxios_write_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, tileid) ; } CATCH_DUMP_STACK @@ -645,7 +642,7 @@ extern "C" void cxios_write_data_k87_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size, int data_4size, int data_5size, - int data_6size) + int data_6size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -653,10 +650,10 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -666,12 +663,13 @@ extern "C" void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size, int data_4size, int data_5size, - int data_6size) + int data_6size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; + cxios_write_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, + data_5size, data_6size, tileid) ; } CATCH_DUMP_STACK @@ -686,7 +684,7 @@ extern "C" CTimer::get("XIOS send field").resume(); CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_Xsize), neverDeleteData); CArray data(data_Xsize) ; @@ -708,7 +706,7 @@ extern "C" CATCH_DUMP_STACK - void cxios_write_data_k41_hdl(CField* field, float* data_k4, int data_Xsize) + void cxios_write_data_k41_hdl(CField* field, float* data_k4, int data_Xsize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -716,29 +714,29 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_Xsize), neverDeleteData); CArray data(data_Xsize); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize) + void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize); + cxios_write_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize, tileid); } CATCH_DUMP_STACK - void cxios_write_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize) + void cxios_write_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -746,31 +744,31 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData); CArray data(data_Xsize, data_Ysize); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize) + void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize); + cxios_write_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize, tileid); } CATCH_DUMP_STACK - void cxios_write_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) + void cxios_write_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -778,24 +776,24 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); CArray data(data_Xsize, data_Ysize, data_Zsize); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK - void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize) + void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k43_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize, data_Zsize); + cxios_write_data_k43_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize, data_Zsize, tileid); } CATCH_DUMP_STACK @@ -803,7 +801,7 @@ extern "C" void cxios_write_data_k44_hdl(CField* field, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size) + int data_3size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -811,12 +809,12 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); CArray data(data_0size, data_1size, data_2size, data_3size); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -825,12 +823,12 @@ extern "C" void cxios_write_data_k44(const char* fieldid, int fieldid_size, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size) + int data_3size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size) ; + cxios_write_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, tileid) ; } CATCH_DUMP_STACK @@ -839,7 +837,7 @@ extern "C" void cxios_write_data_k45_hdl(CField* field, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size) + int data_3size, int data_4size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -847,12 +845,12 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -861,12 +859,12 @@ extern "C" void cxios_write_data_k45(const char* fieldid, int fieldid_size, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size) + int data_3size, int data_4size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size) ; + cxios_write_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, tileid) ; } CATCH_DUMP_STACK @@ -874,7 +872,7 @@ extern "C" void cxios_write_data_k46_hdl(CField* field, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size, int data_5size) + int data_3size, int data_4size, int data_5size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -882,12 +880,12 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -896,12 +894,12 @@ extern "C" void cxios_write_data_k46(const char* fieldid, int fieldid_size, float* data_k4, int data_0size, int data_1size, int data_2size, - int data_3size, int data_4size, int data_5size) + int data_3size, int data_4size, int data_5size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ; + cxios_write_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, tileid) ; } CATCH_DUMP_STACK @@ -909,7 +907,7 @@ extern "C" void cxios_write_data_k47_hdl(CField* field, float* data_k4, int data_0size, int data_1size, int data_2size, int data_3size, int data_4size, int data_5size, - int data_6size) + int data_6size, int tileid) TRY { CTimer::get("XIOS").resume(); @@ -917,12 +915,12 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); data = data_tmp; - field->setData(data); + field->setData(data, tileid); CTimer::get("XIOS send field").suspend(); CTimer::get("XIOS").suspend(); @@ -932,12 +930,13 @@ extern "C" void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4, int data_0size, int data_1size, int data_2size, int data_3size, int data_4size, int data_5size, - int data_6size) + int data_6size, int tileid) TRY { std::string fieldid_str; if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; - cxios_write_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; + cxios_write_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, + data_5size, data_6size, tileid) ; } CATCH_DUMP_STACK @@ -952,7 +951,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_k8, shape(data_Xsize), neverDeleteData); field->getData(data); @@ -980,7 +979,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_k8, shape(data_Xsize), neverDeleteData); field->getData(data); @@ -1007,7 +1006,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData); field->getData(data); @@ -1035,7 +1034,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData); field->getData(data); @@ -1065,7 +1064,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData); field->getData(data); @@ -1096,7 +1095,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData); field->getData(data); @@ -1127,7 +1126,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData); field->getData(data); @@ -1159,7 +1158,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArraydata(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData); field->getData(data); @@ -1194,7 +1193,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_Xsize); field->getData(data); @@ -1225,7 +1224,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_Xsize); field->getData(data); @@ -1257,7 +1256,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_Xsize, data_Ysize); field->getData(data); @@ -1288,7 +1287,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_Xsize, data_Ysize, data_Zsize); field->getData(data); @@ -1320,7 +1319,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_0size, data_1size, data_2size, data_3size); field->getData(data); @@ -1355,7 +1354,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size); field->getData(data); @@ -1389,7 +1388,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); field->getData(data); @@ -1425,7 +1424,7 @@ extern "C" CContext* context = CContext::getCurrent(); if (!context->hasServer && !context->client->isAttachedModeEnabled()) - context->eventLoop(); + context->checkBuffersAndListen(); CArray data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); field->getData(data); @@ -1448,4 +1447,5 @@ extern "C" cxios_read_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ; } CATCH_DUMP_STACK + } // extern "C" diff --git a/xios_2311_src/src/interface/c/icfield.cpp b/xios_2311_src/src/interface/c/icfield.cpp index ea887371..df07fe99 100644 --- a/xios_2311_src/src/interface/c/icfield.cpp +++ b/xios_2311_src/src/interface/c/icfield.cpp @@ -99,7 +99,7 @@ extern "C" TRY { CTimer::get("XIOS").resume() ; - *domain_hdl_ret = field_hdl->getGrid()->getDomain(domainIndex); + *domain_hdl_ret = field_hdl->grid->getDomain(domainIndex); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK @@ -108,7 +108,7 @@ extern "C" TRY { CTimer::get("XIOS").resume() ; - *axis_hdl_ret = field_hdl->getGrid()->getAxis(axisIndex); + *axis_hdl_ret = field_hdl->grid->getAxis(axisIndex); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK @@ -117,7 +117,7 @@ extern "C" TRY { CTimer::get("XIOS").resume() ; - *scalar_hdl_ret = field_hdl->getGrid()->getScalar(scalarIndex); + *scalar_hdl_ret = field_hdl->grid->getScalar(scalarIndex); CTimer::get("XIOS").suspend(); } CATCH_DUMP_STACK diff --git a/xios_2311_src/src/interface/c_attr/iccontext_attr.cpp b/xios_2311_src/src/interface/c_attr/iccontext_attr.cpp index d67856ee..4d239411 100644 --- a/xios_2311_src/src/interface/c_attr/iccontext_attr.cpp +++ b/xios_2311_src/src/interface/c_attr/iccontext_attr.cpp @@ -16,29 +16,6 @@ extern "C" { typedef xios::CContext* context_Ptr; - void cxios_set_context_attached_mode(context_Ptr context_hdl, bool attached_mode) - { - CTimer::get("XIOS").resume(); - context_hdl->attached_mode.setValue(attached_mode); - CTimer::get("XIOS").suspend(); - } - - void cxios_get_context_attached_mode(context_Ptr context_hdl, bool* attached_mode) - { - CTimer::get("XIOS").resume(); - *attached_mode = context_hdl->attached_mode.getInheritedValue(); - CTimer::get("XIOS").suspend(); - } - - bool cxios_is_defined_context_attached_mode(context_Ptr context_hdl) - { - CTimer::get("XIOS").resume(); - bool isDefined = context_hdl->attached_mode.hasInheritedValue(); - CTimer::get("XIOS").suspend(); - return isDefined; - } - - void cxios_set_context_output_dir(context_Ptr context_hdl, const char * output_dir, int output_dir_size) { std::string output_dir_str; diff --git a/xios_2311_src/src/interface/c_attr/icdomain_attr.cpp b/xios_2311_src/src/interface/c_attr/icdomain_attr.cpp index 71eb0522..d4c4fe04 100644 --- a/xios_2311_src/src/interface/c_attr/icdomain_attr.cpp +++ b/xios_2311_src/src/interface/c_attr/icdomain_attr.cpp @@ -904,6 +904,29 @@ extern "C" } + void cxios_set_domain_ntiles(domain_Ptr domain_hdl, int ntiles) + { + CTimer::get("XIOS").resume(); + domain_hdl->ntiles.setValue(ntiles); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_ntiles(domain_Ptr domain_hdl, int* ntiles) + { + CTimer::get("XIOS").resume(); + *ntiles = domain_hdl->ntiles.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_ntiles(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->ntiles.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + void cxios_set_domain_nvertex(domain_Ptr domain_hdl, int nvertex) { CTimer::get("XIOS").resume(); @@ -999,6 +1022,206 @@ extern "C" } + void cxios_set_domain_tile_data_ibegin(domain_Ptr domain_hdl, int* tile_data_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ibegin, shape(extent[0]), neverDeleteData); + domain_hdl->tile_data_ibegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_data_ibegin(domain_Ptr domain_hdl, int* tile_data_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ibegin, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_data_ibegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_data_ibegin(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_data_ibegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_data_jbegin(domain_Ptr domain_hdl, int* tile_data_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_jbegin, shape(extent[0]), neverDeleteData); + domain_hdl->tile_data_jbegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_data_jbegin(domain_Ptr domain_hdl, int* tile_data_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_jbegin, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_data_jbegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_data_jbegin(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_data_jbegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_data_ni(domain_Ptr domain_hdl, int* tile_data_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ni, shape(extent[0]), neverDeleteData); + domain_hdl->tile_data_ni.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_data_ni(domain_Ptr domain_hdl, int* tile_data_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ni, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_data_ni.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_data_ni(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_data_ni.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_data_nj(domain_Ptr domain_hdl, int* tile_data_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_nj, shape(extent[0]), neverDeleteData); + domain_hdl->tile_data_nj.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_data_nj(domain_Ptr domain_hdl, int* tile_data_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_nj, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_data_nj.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_data_nj(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_data_nj.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_ibegin(domain_Ptr domain_hdl, int* tile_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ibegin, shape(extent[0]), neverDeleteData); + domain_hdl->tile_ibegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_ibegin(domain_Ptr domain_hdl, int* tile_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ibegin, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_ibegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_ibegin(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_ibegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_jbegin(domain_Ptr domain_hdl, int* tile_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_jbegin, shape(extent[0]), neverDeleteData); + domain_hdl->tile_jbegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_jbegin(domain_Ptr domain_hdl, int* tile_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_jbegin, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_jbegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_jbegin(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_jbegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_ni(domain_Ptr domain_hdl, int* tile_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ni, shape(extent[0]), neverDeleteData); + domain_hdl->tile_ni.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_ni(domain_Ptr domain_hdl, int* tile_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ni, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_ni.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_ni(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_ni.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domain_tile_nj(domain_Ptr domain_hdl, int* tile_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_nj, shape(extent[0]), neverDeleteData); + domain_hdl->tile_nj.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domain_tile_nj(domain_Ptr domain_hdl, int* tile_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_nj, shape(extent[0]), neverDeleteData); + tmp=domain_hdl->tile_nj.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domain_tile_nj(domain_Ptr domain_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domain_hdl->tile_nj.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + void cxios_set_domain_type(domain_Ptr domain_hdl, const char * type, int type_size) { std::string type_str; diff --git a/xios_2311_src/src/interface/c_attr/icdomaingroup_attr.cpp b/xios_2311_src/src/interface/c_attr/icdomaingroup_attr.cpp index 2eef2b82..acef1300 100644 --- a/xios_2311_src/src/interface/c_attr/icdomaingroup_attr.cpp +++ b/xios_2311_src/src/interface/c_attr/icdomaingroup_attr.cpp @@ -930,6 +930,29 @@ extern "C" } + void cxios_set_domaingroup_ntiles(domaingroup_Ptr domaingroup_hdl, int ntiles) + { + CTimer::get("XIOS").resume(); + domaingroup_hdl->ntiles.setValue(ntiles); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_ntiles(domaingroup_Ptr domaingroup_hdl, int* ntiles) + { + CTimer::get("XIOS").resume(); + *ntiles = domaingroup_hdl->ntiles.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_ntiles(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->ntiles.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + void cxios_set_domaingroup_nvertex(domaingroup_Ptr domaingroup_hdl, int nvertex) { CTimer::get("XIOS").resume(); @@ -1025,6 +1048,206 @@ extern "C" } + void cxios_set_domaingroup_tile_data_ibegin(domaingroup_Ptr domaingroup_hdl, int* tile_data_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ibegin, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_data_ibegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_data_ibegin(domaingroup_Ptr domaingroup_hdl, int* tile_data_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ibegin, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_data_ibegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_data_ibegin(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_data_ibegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_data_jbegin(domaingroup_Ptr domaingroup_hdl, int* tile_data_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_jbegin, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_data_jbegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_data_jbegin(domaingroup_Ptr domaingroup_hdl, int* tile_data_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_jbegin, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_data_jbegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_data_jbegin(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_data_jbegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_data_ni(domaingroup_Ptr domaingroup_hdl, int* tile_data_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ni, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_data_ni.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_data_ni(domaingroup_Ptr domaingroup_hdl, int* tile_data_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_ni, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_data_ni.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_data_ni(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_data_ni.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_data_nj(domaingroup_Ptr domaingroup_hdl, int* tile_data_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_nj, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_data_nj.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_data_nj(domaingroup_Ptr domaingroup_hdl, int* tile_data_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_data_nj, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_data_nj.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_data_nj(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_data_nj.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_ibegin(domaingroup_Ptr domaingroup_hdl, int* tile_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ibegin, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_ibegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_ibegin(domaingroup_Ptr domaingroup_hdl, int* tile_ibegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ibegin, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_ibegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_ibegin(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_ibegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_jbegin(domaingroup_Ptr domaingroup_hdl, int* tile_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_jbegin, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_jbegin.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_jbegin(domaingroup_Ptr domaingroup_hdl, int* tile_jbegin, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_jbegin, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_jbegin.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_jbegin(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_jbegin.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_ni(domaingroup_Ptr domaingroup_hdl, int* tile_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ni, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_ni.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_ni(domaingroup_Ptr domaingroup_hdl, int* tile_ni, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_ni, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_ni.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_ni(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_ni.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + + void cxios_set_domaingroup_tile_nj(domaingroup_Ptr domaingroup_hdl, int* tile_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_nj, shape(extent[0]), neverDeleteData); + domaingroup_hdl->tile_nj.reference(tmp.copy()); + CTimer::get("XIOS").suspend(); + } + + void cxios_get_domaingroup_tile_nj(domaingroup_Ptr domaingroup_hdl, int* tile_nj, int* extent) + { + CTimer::get("XIOS").resume(); + CArray tmp(tile_nj, shape(extent[0]), neverDeleteData); + tmp=domaingroup_hdl->tile_nj.getInheritedValue(); + CTimer::get("XIOS").suspend(); + } + + bool cxios_is_defined_domaingroup_tile_nj(domaingroup_Ptr domaingroup_hdl) + { + CTimer::get("XIOS").resume(); + bool isDefined = domaingroup_hdl->tile_nj.hasInheritedValue(); + CTimer::get("XIOS").suspend(); + return isDefined; + } + + void cxios_set_domaingroup_type(domaingroup_Ptr domaingroup_hdl, const char * type, int type_size) { std::string type_str; diff --git a/xios_2311_src/src/interface/c_attr/icscalar_attr.cpp b/xios_2311_src/src/interface/c_attr/icscalar_attr.cpp index 448199e8..38a3b15a 100644 --- a/xios_2311_src/src/interface/c_attr/icscalar_attr.cpp +++ b/xios_2311_src/src/interface/c_attr/icscalar_attr.cpp @@ -171,29 +171,6 @@ extern "C" } - void cxios_set_scalar_mask(scalar_Ptr scalar_hdl, bool mask) - { - CTimer::get("XIOS").resume(); - scalar_hdl->mask.setValue(mask); - CTimer::get("XIOS").suspend(); - } - - void cxios_get_scalar_mask(scalar_Ptr scalar_hdl, bool* mask) - { - CTimer::get("XIOS").resume(); - *mask = scalar_hdl->mask.getInheritedValue(); - CTimer::get("XIOS").suspend(); - } - - bool cxios_is_defined_scalar_mask(scalar_Ptr scalar_hdl) - { - CTimer::get("XIOS").resume(); - bool isDefined = scalar_hdl->mask.hasInheritedValue(); - CTimer::get("XIOS").suspend(); - return isDefined; - } - - void cxios_set_scalar_name(scalar_Ptr scalar_hdl, const char * name, int name_size) { std::string name_str; diff --git a/xios_2311_src/src/interface/c_attr/icscalargroup_attr.cpp b/xios_2311_src/src/interface/c_attr/icscalargroup_attr.cpp index 1d2b1a99..da35d9b5 100644 --- a/xios_2311_src/src/interface/c_attr/icscalargroup_attr.cpp +++ b/xios_2311_src/src/interface/c_attr/icscalargroup_attr.cpp @@ -197,29 +197,6 @@ extern "C" } - void cxios_set_scalargroup_mask(scalargroup_Ptr scalargroup_hdl, bool mask) - { - CTimer::get("XIOS").resume(); - scalargroup_hdl->mask.setValue(mask); - CTimer::get("XIOS").suspend(); - } - - void cxios_get_scalargroup_mask(scalargroup_Ptr scalargroup_hdl, bool* mask) - { - CTimer::get("XIOS").resume(); - *mask = scalargroup_hdl->mask.getInheritedValue(); - CTimer::get("XIOS").suspend(); - } - - bool cxios_is_defined_scalargroup_mask(scalargroup_Ptr scalargroup_hdl) - { - CTimer::get("XIOS").resume(); - bool isDefined = scalargroup_hdl->mask.hasInheritedValue(); - CTimer::get("XIOS").suspend(); - return isDefined; - } - - void cxios_set_scalargroup_name(scalargroup_Ptr scalargroup_hdl, const char * name, int name_size) { std::string name_str; diff --git a/xios_2311_src/src/interface/fortran/idata.F90 b/xios_2311_src/src/interface/fortran/idata.F90 index 2747ebdc..0ba3b0d4 100644 --- a/xios_2311_src/src/interface/fortran/idata.F90 +++ b/xios_2311_src/src/interface/fortran/idata.F90 @@ -67,130 +67,144 @@ MODULE IDATA INTEGER (kind = C_INT) , VALUE :: data_Xsize END SUBROUTINE cxios_write_data_k80 - SUBROUTINE cxios_write_data_k81_hdl(field_hdl, data_k8, data_Xsize) BIND(C) + SUBROUTINE cxios_write_data_k81_hdl(field_hdl, data_k8, data_Xsize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_Xsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k81_hdl - SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C) + SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k81 - SUBROUTINE cxios_write_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize) BIND(C) + SUBROUTINE cxios_write_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k82_hdl - SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C) + SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k82 - SUBROUTINE cxios_write_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) + SUBROUTINE cxios_write_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k83_hdl - SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C) + SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize, & + tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k83 SUBROUTINE cxios_write_data_k84_hdl(field_hdl, data_k8, & data_0size, data_1size, data_2size, & - data_3size) BIND(C) + data_3size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k84_hdl SUBROUTINE cxios_write_data_k84(fieldid, fieldid_size, data_k8, & data_0size, data_1size, data_2size, & - data_3size) BIND(C) + data_3size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k84 SUBROUTINE cxios_write_data_k85_hdl(field_hdl, data_k8, & data_0size, data_1size, data_2size, & - data_3size, data_4size) BIND(C) + data_3size, data_4size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k85_hdl SUBROUTINE cxios_write_data_k85(fieldid, fieldid_size, data_k8, & data_0size, data_1size, data_2size, & - data_3size, data_4size) BIND(C) + data_3size, data_4size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k85 SUBROUTINE cxios_write_data_k86_hdl(field_hdl, data_k8, & data_0size, data_1size, data_2size, & - data_3size, data_4size, data_5size) BIND(C) + data_3size, data_4size, data_5size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k86_hdl SUBROUTINE cxios_write_data_k86(fieldid, fieldid_size, data_k8, & data_0size, data_1size, data_2size, & - data_3size, data_4size, data_5size) BIND(C) + data_3size, data_4size, data_5size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k86 SUBROUTINE cxios_write_data_k87_hdl(field_hdl, data_k8, & data_0size, data_1size, data_2size, & data_3size, data_4size, data_5size, & - data_6size) BIND(C) + data_6size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size INTEGER (kind = C_INT) , VALUE :: data_6size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k87_hdl SUBROUTINE cxios_write_data_k87(fieldid, fieldid_size, data_k8, & data_0size, data_1size, data_2size, & data_3size, data_4size, data_5size, & - data_6size) BIND(C) + data_6size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_DOUBLE), DIMENSION(*) :: data_k8 @@ -198,6 +212,7 @@ MODULE IDATA INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size INTEGER (kind = C_INT) , VALUE :: data_6size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k87 SUBROUTINE cxios_write_data_k40_hdl(field_hdl, data_k4, data_Xsize) BIND(C) @@ -215,130 +230,143 @@ MODULE IDATA INTEGER (kind = C_INT) , VALUE :: data_Xsize END SUBROUTINE cxios_write_data_k40 - SUBROUTINE cxios_write_data_k41_hdl(field_hdl, data_k4, data_Xsize) BIND(C) + SUBROUTINE cxios_write_data_k41_hdl(field_hdl, data_k4, data_Xsize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_Xsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k41_hdl - SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C) + SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k41 - SUBROUTINE cxios_write_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize) BIND(C) + SUBROUTINE cxios_write_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k42_hdl - SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C) + SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k42 - SUBROUTINE cxios_write_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) + SUBROUTINE cxios_write_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k43_hdl - SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C) + SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_Xsize, data_Ysize, data_Zsize + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k43 SUBROUTINE cxios_write_data_k44_hdl(field_hdl, data_k4, & data_0size, data_1size, data_2size, & - data_3size) BIND(C) + data_3size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k44_hdl SUBROUTINE cxios_write_data_k44(fieldid, fieldid_size, data_k4, & data_0size, data_1size, data_2size, & - data_3size) BIND(C) + data_3size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k44 SUBROUTINE cxios_write_data_k45_hdl(field_hdl, data_k4, & data_0size, data_1size, data_2size, & - data_3size, data_4size) BIND(C) + data_3size, data_4size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k45_hdl SUBROUTINE cxios_write_data_k45(fieldid, fieldid_size, data_k4, & data_0size, data_1size, data_2size, & - data_3size, data_4size) BIND(C) + data_3size, data_4size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k45 SUBROUTINE cxios_write_data_k46_hdl(field_hdl, data_k4, & data_0size, data_1size, data_2size, & - data_3size, data_4size, data_5size) BIND(C) + data_3size, data_4size, data_5size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k46_hdl SUBROUTINE cxios_write_data_k46(fieldid, fieldid_size, data_k4, & data_0size, data_1size, data_2size, & - data_3size, data_4size, data_5size) BIND(C) + data_3size, data_4size, data_5size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: fieldid_size INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k46 SUBROUTINE cxios_write_data_k47_hdl(field_hdl, data_k4, & data_0size, data_1size, data_2size, & data_3size, data_4size, data_5size, & - data_6size) BIND(C) + data_6size, tileid) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size INTEGER (kind = C_INT) , VALUE :: data_6size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k47_hdl SUBROUTINE cxios_write_data_k47(fieldid, fieldid_size, data_k4, & data_0size, data_1size, data_2size, & data_3size, data_4size, data_5size, & - data_6size) BIND(C) + data_6size, tileid) BIND(C) USE ISO_C_BINDING CHARACTER(kind = C_CHAR) , DIMENSION(*) :: fieldid REAL (kind = C_FLOAT) , DIMENSION(*) :: data_k4 @@ -346,6 +374,7 @@ MODULE IDATA INTEGER (kind = C_INT) , VALUE :: data_0size, data_1size, data_2size INTEGER (kind = C_INT) , VALUE :: data_3size, data_4size, data_5size INTEGER (kind = C_INT) , VALUE :: data_6size + INTEGER (kind = C_INT) , VALUE :: tileid END SUBROUTINE cxios_write_data_k47 @@ -833,118 +862,202 @@ MODULE IDATA IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:) - CALL cxios_write_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1), tileid) END SUBROUTINE xios(send_field_r8_1d_hdl) SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:) - CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1), tileid) END SUBROUTINE xios(send_field_r8_1d) + SUBROUTINE xios(send_field_tiled_r8_1d)(fieldid, data1d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1), tileid) + END SUBROUTINE xios(send_field_tiled_r8_1d) + SUBROUTINE xios(send_field_r8_2d_hdl)(field_hdl, data2d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:) - CALL cxios_write_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2), tileid) END SUBROUTINE xios(send_field_r8_2d_hdl) SUBROUTINE xios(send_field_r8_2d)(fieldid, data2d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:) - CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), & + size(data2d_k8, 2), tileid) END SUBROUTINE xios(send_field_r8_2d) + SUBROUTINE xios(send_field_tiled_r8_2d)(fieldid, data2d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), & + size(data2d_k8, 2), tileid) + END SUBROUTINE xios(send_field_tiled_r8_2d) + SUBROUTINE xios(send_field_r8_3d_hdl)(field_hdl, data3d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:) - CALL cxios_write_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3), & + tileid) END SUBROUTINE xios(send_field_r8_3d_hdl) SUBROUTINE xios(send_field_r8_3d)(fieldid, data3d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:) - CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3), & + tileid) END SUBROUTINE xios(send_field_r8_3d) + SUBROUTINE xios(send_field_tiled_r8_3d)(fieldid, data3d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), & + size(data3d_k8, 2), size(data3d_k8, 3), tileid) + END SUBROUTINE xios(send_field_tiled_r8_3d) + SUBROUTINE xios(send_field_r8_4d_hdl)(field_hdl, data4d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data4d_k8(:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k84_hdl(field_hdl%daddr, data4d_k8, & size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), & - size(data4d_k8, 4)) + size(data4d_k8, 4), tileid) END SUBROUTINE xios(send_field_r8_4d_hdl) SUBROUTINE xios(send_field_r8_4d)(fieldid, data4d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data4d_k8(:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k84(fieldid, len(fieldid), data4d_k8, & size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), & - size(data4d_k8, 4)) + size(data4d_k8, 4), tileid) END SUBROUTINE xios(send_field_r8_4d) + SUBROUTINE xios(send_field_tiled_r8_4d)(fieldid, data4d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data4d_k8(:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k84(fieldid, len(fieldid), data4d_k8, & + size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), & + size(data4d_k8, 4), tileid) + END SUBROUTINE xios(send_field_tiled_r8_4d) + SUBROUTINE xios(send_field_r8_5d_hdl)(field_hdl, data5d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data5d_k8(:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k85_hdl(field_hdl%daddr, data5d_k8, & size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), & - size(data5d_k8, 4), size(data5d_k8, 5)) + size(data5d_k8, 4), size(data5d_k8, 5), tileid) END SUBROUTINE xios(send_field_r8_5d_hdl) SUBROUTINE xios(send_field_r8_5d)(fieldid, data5d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data5d_k8(:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k85(fieldid, len(fieldid), data5d_k8, & size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), & - size(data5d_k8, 4), size(data5d_k8, 5)) + size(data5d_k8, 4), size(data5d_k8, 5), tileid) END SUBROUTINE xios(send_field_r8_5d) + SUBROUTINE xios(send_field_tiled_r8_5d)(fieldid, data5d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data5d_k8(:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k85(fieldid, len(fieldid), data5d_k8, & + size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), & + size(data5d_k8, 4), size(data5d_k8, 5), tileid) + END SUBROUTINE xios(send_field_tiled_r8_5d) + SUBROUTINE xios(send_field_r8_6d_hdl)(field_hdl, data6d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data6d_k8(:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k86_hdl(field_hdl%daddr, data6d_k8, & size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), & - size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6)) + size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6), tileid) END SUBROUTINE xios(send_field_r8_6d_hdl) SUBROUTINE xios(send_field_r8_6d)(fieldid, data6d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data6d_k8(:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k86(fieldid, len(fieldid), data6d_k8, & size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), & - size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6)) + size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6), tileid) END SUBROUTINE xios(send_field_r8_6d) + SUBROUTINE xios(send_field_tiled_r8_6d)(fieldid, data6d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data6d_k8(:,:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k86(fieldid, len(fieldid), data6d_k8, & + size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), & + size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6), tileid) + END SUBROUTINE xios(send_field_tiled_r8_6d) + SUBROUTINE xios(send_field_r8_7d_hdl)(field_hdl, data7d_k8) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data7d_k8(:,:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k87_hdl(field_hdl%daddr, data7d_k8, & size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), & size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), & - size(data7d_k8, 7)) + size(data7d_k8, 7), tileid) END SUBROUTINE xios(send_field_r8_7d_hdl) SUBROUTINE xios(send_field_r8_7d)(fieldid, data7d_k8) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data7d_k8(:,:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k87(fieldid, len(fieldid), data7d_k8, & size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), & size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), & - size(data7d_k8, 7)) + size(data7d_k8, 7), tileid) END SUBROUTINE xios(send_field_r8_7d) + SUBROUTINE xios(send_field_tiled_r8_7d)(fieldid, data7d_k8, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 8), DIMENSION(*), INTENT(IN) :: data7d_k8(:,:,:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k87(fieldid, len(fieldid), data7d_k8, & + size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), & + size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), & + size(data7d_k8, 7), tileid) + END SUBROUTINE xios(send_field_tiled_r8_7d) + SUBROUTINE xios(send_field_r4_0d_hdl)(field_hdl, data_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl @@ -963,118 +1076,200 @@ MODULE IDATA IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:) - CALL cxios_write_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1), tileid) END SUBROUTINE xios(send_field_r4_1d_hdl) SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:) - CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1), tileid) END SUBROUTINE xios(send_field_r4_1d) + SUBROUTINE xios(send_field_tiled_r4_1d)(fieldid, data1d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1), tileid) + END SUBROUTINE xios(send_field_tiled_r4_1d) + SUBROUTINE xios(send_field_r4_2d_hdl)(field_hdl, data2d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:) - CALL cxios_write_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2), tileid) END SUBROUTINE xios(send_field_r4_2d_hdl) SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:) - CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2), tileid) END SUBROUTINE xios(send_field_r4_2d) + SUBROUTINE xios(send_field_tiled_r4_2d)(fieldid, data2d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2), tileid) + END SUBROUTINE xios(send_field_tiled_r4_2d) + SUBROUTINE xios(send_field_r4_3d_hdl)(field_hdl, data3d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:) - CALL cxios_write_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3), & + tileid) END SUBROUTINE xios(send_field_r4_3d_hdl) SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:) - CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3)) + INTEGER, PARAMETER :: tileid = -1 + CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3), & + tileid) END SUBROUTINE xios(send_field_r4_3d) + SUBROUTINE xios(send_field_tiled_r4_3d)(fieldid, data3d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3), & + tileid) + END SUBROUTINE xios(send_field_tiled_r4_3d) + SUBROUTINE xios(send_field_r4_4d_hdl)(field_hdl, data4d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data4d_k4(:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k44_hdl(field_hdl%daddr, data4d_k4, & size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), & - size(data4d_k4, 4)) + size(data4d_k4, 4), tileid) END SUBROUTINE xios(send_field_r4_4d_hdl) - + SUBROUTINE xios(send_field_r4_4d)(fieldid, data4d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data4d_k4(:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k44(fieldid, len(fieldid), data4d_k4, & size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), & - size(data4d_k4, 4)) + size(data4d_k4, 4), tileid) END SUBROUTINE xios(send_field_r4_4d) + SUBROUTINE xios(send_field_tiled_r4_4d)(fieldid, data4d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data4d_k4(:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k44(fieldid, len(fieldid), data4d_k4, & + size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), & + size(data4d_k4, 4), tileid) + END SUBROUTINE xios(send_field_tiled_r4_4d) + SUBROUTINE xios(send_field_r4_5d_hdl)(field_hdl, data5d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data5d_k4(:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k45_hdl(field_hdl%daddr, data5d_k4, & size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), & - size(data5d_k4, 4), size(data5d_k4, 5)) + size(data5d_k4, 4), size(data5d_k4, 5), tileid) END SUBROUTINE xios(send_field_r4_5d_hdl) SUBROUTINE xios(send_field_r4_5d)(fieldid, data5d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data5d_k4(:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k45(fieldid, len(fieldid), data5d_k4, & size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), & - size(data5d_k4, 4), size(data5d_k4, 5)) + size(data5d_k4, 4), size(data5d_k4, 5), tileid) END SUBROUTINE xios(send_field_r4_5d) + SUBROUTINE xios(send_field_tiled_r4_5d)(fieldid, data5d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data5d_k4(:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k45(fieldid, len(fieldid), data5d_k4, & + size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), & + size(data5d_k4, 4), size(data5d_k4, 5), tileid) + END SUBROUTINE xios(send_field_tiled_r4_5d) + SUBROUTINE xios(send_field_r4_6d_hdl)(field_hdl, data6d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data6d_k4(:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k46_hdl(field_hdl%daddr, data6d_k4, & size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), & - size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6)) + size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6), tileid) END SUBROUTINE xios(send_field_r4_6d_hdl) SUBROUTINE xios(send_field_r4_6d)(fieldid, data6d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data6d_k4(:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k46(fieldid, len(fieldid), data6d_k4, & size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), & - size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6)) + size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6), tileid) END SUBROUTINE xios(send_field_r4_6d) + SUBROUTINE xios(send_field_tiled_r4_6d)(fieldid, data6d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data6d_k4(:,:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k46(fieldid, len(fieldid), data6d_k4, & + size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), & + size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6), tileid) + END SUBROUTINE xios(send_field_tiled_r4_6d) + SUBROUTINE xios(send_field_r4_7d_hdl)(field_hdl, data7d_k4) IMPLICIT NONE TYPE(txios(field)) :: field_hdl REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data7d_k4(:,:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k47_hdl(field_hdl%daddr, data7d_k4, & size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), & size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), & - size(data7d_k4, 7)) + size(data7d_k4, 7), tileid) END SUBROUTINE xios(send_field_r4_7d_hdl) SUBROUTINE xios(send_field_r4_7d)(fieldid, data7d_k4) IMPLICIT NONE CHARACTER(len = *) , INTENT(IN) :: fieldid REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data7d_k4(:,:,:,:,:,:,:) + INTEGER, PARAMETER :: tileid = -1 CALL cxios_write_data_k47(fieldid, len(fieldid), data7d_k4, & size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), & size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), & - size(data7d_k4, 7)) + size(data7d_k4, 7), tileid) END SUBROUTINE xios(send_field_r4_7d) + SUBROUTINE xios(send_field_tiled_r4_7d)(fieldid, data7d_k4, tileid) + IMPLICIT NONE + CHARACTER(len = *) , INTENT(IN) :: fieldid + REAL (kind = 4), DIMENSION(*), INTENT(IN) :: data7d_k4(:,:,:,:,:,:,:) + INTEGER , INTENT(IN) :: tileid + CALL cxios_write_data_k47(fieldid, len(fieldid), data7d_k4, & + size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), & + size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), & + size(data7d_k4, 7), tileid) + END SUBROUTINE xios(send_field_tiled_r4_7d) + ! Receive field functions SUBROUTINE xios(recv_field_r8_0d_hdl)(field_hdl, data0d_k8) IMPLICIT NONE diff --git a/xios_2311_src/src/interface/fortran/ixios_interfaces.F90 b/xios_2311_src/src/interface/fortran/ixios_interfaces.F90 index 69d21124..dc99ca6a 100644 --- a/xios_2311_src/src/interface/fortran/ixios_interfaces.F90 +++ b/xios_2311_src/src/interface/fortran/ixios_interfaces.F90 @@ -14,6 +14,12 @@ USE idata, ONLY : xios(send_field_r8_0d), xios(send_field_r8_1d), xios(send_fiel xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), & xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), & xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl), & + xios(send_field_tiled_r8_1d), xios(send_field_tiled_r8_2d), & + xios(send_field_tiled_r8_3d), xios(send_field_tiled_r8_4d), & + xios(send_field_tiled_r8_5d), xios(send_field_tiled_r8_6d), xios(send_field_tiled_r8_7d), & + xios(send_field_tiled_r4_1d), xios(send_field_tiled_r4_2d), & + xios(send_field_tiled_r4_3d), xios(send_field_tiled_r4_4d), & + xios(send_field_tiled_r4_5d), xios(send_field_tiled_r4_6d), xios(send_field_tiled_r4_7d), & xios(recv_field_r8_0d), xios(recv_field_r8_1d), xios(recv_field_r8_2d), xios(recv_field_r8_3d), & xios(recv_field_r8_4d), xios(recv_field_r8_5d), xios(recv_field_r8_6d), xios(recv_field_r8_7d), & xios(recv_field_r4_0d), xios(recv_field_r4_1d), xios(recv_field_r4_2d), xios(recv_field_r4_3d), & @@ -250,7 +256,13 @@ INTERFACE xios(send_field) xios(send_field_r8_0d_hdl), xios(send_field_r8_1d_hdl), xios(send_field_r8_2d_hdl), xios(send_field_r8_3d_hdl), & xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), & xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), & - xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl) + xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl), & + xios(send_field_tiled_r8_1d), xios(send_field_tiled_r8_2d), & + xios(send_field_tiled_r8_3d), xios(send_field_tiled_r8_4d), & + xios(send_field_tiled_r8_5d), xios(send_field_tiled_r8_6d), xios(send_field_tiled_r8_7d), & + xios(send_field_tiled_r4_1d), xios(send_field_tiled_r4_2d), & + xios(send_field_tiled_r4_3d), xios(send_field_tiled_r4_4d), & + xios(send_field_tiled_r4_5d), xios(send_field_tiled_r4_6d), xios(send_field_tiled_r4_7d) END INTERFACE xios(send_field) INTERFACE xios(recv_field) diff --git a/xios_2311_src/src/interface/fortran_attr/context_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/context_interface_attr.F90 index 9e441519..1c25ee81 100644 --- a/xios_2311_src/src/interface/fortran_attr/context_interface_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/context_interface_attr.F90 @@ -9,25 +9,6 @@ MODULE context_interface_attr INTERFACE ! Do not call directly / interface FORTRAN 2003 <-> C99 - SUBROUTINE cxios_set_context_attached_mode(context_hdl, attached_mode) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl - LOGICAL (KIND=C_BOOL) , VALUE :: attached_mode - END SUBROUTINE cxios_set_context_attached_mode - - SUBROUTINE cxios_get_context_attached_mode(context_hdl, attached_mode) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl - LOGICAL (KIND=C_BOOL) :: attached_mode - END SUBROUTINE cxios_get_context_attached_mode - - FUNCTION cxios_is_defined_context_attached_mode(context_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_context_attached_mode - INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl - END FUNCTION cxios_is_defined_context_attached_mode - - SUBROUTINE cxios_set_context_output_dir(context_hdl, output_dir, output_dir_size) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl diff --git a/xios_2311_src/src/interface/fortran_attr/domain_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/domain_interface_attr.F90 index 8b0a8928..045704e9 100644 --- a/xios_2311_src/src/interface/fortran_attr/domain_interface_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/domain_interface_attr.F90 @@ -743,6 +743,25 @@ MODULE domain_interface_attr END FUNCTION cxios_is_defined_domain_nj_glo + SUBROUTINE cxios_set_domain_ntiles(domain_hdl, ntiles) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , VALUE :: ntiles + END SUBROUTINE cxios_set_domain_ntiles + + SUBROUTINE cxios_get_domain_ntiles(domain_hdl, ntiles) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) :: ntiles + END SUBROUTINE cxios_get_domain_ntiles + + FUNCTION cxios_is_defined_domain_ntiles(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_ntiles + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_ntiles + + SUBROUTINE cxios_set_domain_nvertex(domain_hdl, nvertex) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl @@ -821,6 +840,174 @@ MODULE domain_interface_attr END FUNCTION cxios_is_defined_domain_standard_name + SUBROUTINE cxios_set_domain_tile_data_ibegin(domain_hdl, tile_data_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_data_ibegin + + SUBROUTINE cxios_get_domain_tile_data_ibegin(domain_hdl, tile_data_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_data_ibegin + + FUNCTION cxios_is_defined_domain_tile_data_ibegin(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_data_ibegin + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_data_ibegin + + + SUBROUTINE cxios_set_domain_tile_data_jbegin(domain_hdl, tile_data_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_data_jbegin + + SUBROUTINE cxios_get_domain_tile_data_jbegin(domain_hdl, tile_data_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_data_jbegin + + FUNCTION cxios_is_defined_domain_tile_data_jbegin(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_data_jbegin + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_data_jbegin + + + SUBROUTINE cxios_set_domain_tile_data_ni(domain_hdl, tile_data_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_data_ni + + SUBROUTINE cxios_get_domain_tile_data_ni(domain_hdl, tile_data_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_data_ni + + FUNCTION cxios_is_defined_domain_tile_data_ni(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_data_ni + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_data_ni + + + SUBROUTINE cxios_set_domain_tile_data_nj(domain_hdl, tile_data_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_data_nj + + SUBROUTINE cxios_get_domain_tile_data_nj(domain_hdl, tile_data_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_data_nj + + FUNCTION cxios_is_defined_domain_tile_data_nj(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_data_nj + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_data_nj + + + SUBROUTINE cxios_set_domain_tile_ibegin(domain_hdl, tile_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_ibegin + + SUBROUTINE cxios_get_domain_tile_ibegin(domain_hdl, tile_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_ibegin + + FUNCTION cxios_is_defined_domain_tile_ibegin(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_ibegin + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_ibegin + + + SUBROUTINE cxios_set_domain_tile_jbegin(domain_hdl, tile_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_jbegin + + SUBROUTINE cxios_get_domain_tile_jbegin(domain_hdl, tile_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_jbegin + + FUNCTION cxios_is_defined_domain_tile_jbegin(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_jbegin + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_jbegin + + + SUBROUTINE cxios_set_domain_tile_ni(domain_hdl, tile_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_ni + + SUBROUTINE cxios_get_domain_tile_ni(domain_hdl, tile_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_ni + + FUNCTION cxios_is_defined_domain_tile_ni(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_ni + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_ni + + + SUBROUTINE cxios_set_domain_tile_nj(domain_hdl, tile_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domain_tile_nj + + SUBROUTINE cxios_get_domain_tile_nj(domain_hdl, tile_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domain_tile_nj + + FUNCTION cxios_is_defined_domain_tile_nj(domain_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_tile_nj + INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl + END FUNCTION cxios_is_defined_domain_tile_nj + + SUBROUTINE cxios_set_domain_type(domain_hdl, type, type_size) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl diff --git a/xios_2311_src/src/interface/fortran_attr/domaingroup_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/domaingroup_interface_attr.F90 index 52bfe79d..a2c1a010 100644 --- a/xios_2311_src/src/interface/fortran_attr/domaingroup_interface_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/domaingroup_interface_attr.F90 @@ -764,6 +764,25 @@ MODULE domaingroup_interface_attr END FUNCTION cxios_is_defined_domaingroup_nj_glo + SUBROUTINE cxios_set_domaingroup_ntiles(domaingroup_hdl, ntiles) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , VALUE :: ntiles + END SUBROUTINE cxios_set_domaingroup_ntiles + + SUBROUTINE cxios_get_domaingroup_ntiles(domaingroup_hdl, ntiles) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) :: ntiles + END SUBROUTINE cxios_get_domaingroup_ntiles + + FUNCTION cxios_is_defined_domaingroup_ntiles(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_ntiles + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_ntiles + + SUBROUTINE cxios_set_domaingroup_nvertex(domaingroup_hdl, nvertex) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl @@ -842,6 +861,174 @@ MODULE domaingroup_interface_attr END FUNCTION cxios_is_defined_domaingroup_standard_name + SUBROUTINE cxios_set_domaingroup_tile_data_ibegin(domaingroup_hdl, tile_data_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_data_ibegin + + SUBROUTINE cxios_get_domaingroup_tile_data_ibegin(domaingroup_hdl, tile_data_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_data_ibegin + + FUNCTION cxios_is_defined_domaingroup_tile_data_ibegin(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_data_ibegin + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_data_ibegin + + + SUBROUTINE cxios_set_domaingroup_tile_data_jbegin(domaingroup_hdl, tile_data_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_data_jbegin + + SUBROUTINE cxios_get_domaingroup_tile_data_jbegin(domaingroup_hdl, tile_data_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_data_jbegin + + FUNCTION cxios_is_defined_domaingroup_tile_data_jbegin(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_data_jbegin + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_data_jbegin + + + SUBROUTINE cxios_set_domaingroup_tile_data_ni(domaingroup_hdl, tile_data_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_data_ni + + SUBROUTINE cxios_get_domaingroup_tile_data_ni(domaingroup_hdl, tile_data_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_data_ni + + FUNCTION cxios_is_defined_domaingroup_tile_data_ni(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_data_ni + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_data_ni + + + SUBROUTINE cxios_set_domaingroup_tile_data_nj(domaingroup_hdl, tile_data_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_data_nj + + SUBROUTINE cxios_get_domaingroup_tile_data_nj(domaingroup_hdl, tile_data_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_data_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_data_nj + + FUNCTION cxios_is_defined_domaingroup_tile_data_nj(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_data_nj + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_data_nj + + + SUBROUTINE cxios_set_domaingroup_tile_ibegin(domaingroup_hdl, tile_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_ibegin + + SUBROUTINE cxios_get_domaingroup_tile_ibegin(domaingroup_hdl, tile_ibegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ibegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_ibegin + + FUNCTION cxios_is_defined_domaingroup_tile_ibegin(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_ibegin + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_ibegin + + + SUBROUTINE cxios_set_domaingroup_tile_jbegin(domaingroup_hdl, tile_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_jbegin + + SUBROUTINE cxios_get_domaingroup_tile_jbegin(domaingroup_hdl, tile_jbegin, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_jbegin + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_jbegin + + FUNCTION cxios_is_defined_domaingroup_tile_jbegin(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_jbegin + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_jbegin + + + SUBROUTINE cxios_set_domaingroup_tile_ni(domaingroup_hdl, tile_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_ni + + SUBROUTINE cxios_get_domaingroup_tile_ni(domaingroup_hdl, tile_ni, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_ni + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_ni + + FUNCTION cxios_is_defined_domaingroup_tile_ni(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_ni + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_ni + + + SUBROUTINE cxios_set_domaingroup_tile_nj(domaingroup_hdl, tile_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_set_domaingroup_tile_nj + + SUBROUTINE cxios_get_domaingroup_tile_nj(domaingroup_hdl, tile_nj, extent) BIND(C) + USE ISO_C_BINDING + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + INTEGER (KIND=C_INT) , DIMENSION(*) :: tile_nj + INTEGER (kind = C_INT), DIMENSION(*) :: extent + END SUBROUTINE cxios_get_domaingroup_tile_nj + + FUNCTION cxios_is_defined_domaingroup_tile_nj(domaingroup_hdl) BIND(C) + USE ISO_C_BINDING + LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_tile_nj + INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl + END FUNCTION cxios_is_defined_domaingroup_tile_nj + + SUBROUTINE cxios_set_domaingroup_type(domaingroup_hdl, type, type_size) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl diff --git a/xios_2311_src/src/interface/fortran_attr/extract_axis_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/extract_axis_interface_attr.F90 deleted file mode 100644 index 549adcdd..00000000 --- a/xios_2311_src/src/interface/fortran_attr/extract_axis_interface_attr.F90 +++ /dev/null @@ -1,72 +0,0 @@ -! * ************************************************************************** * -! * Interface auto generated - do not modify * -! * ************************************************************************** * -#include "../fortran/xios_fortran_prefix.hpp" - -MODULE extract_axis_interface_attr - USE, INTRINSIC :: ISO_C_BINDING - - INTERFACE - ! Do not call directly / interface FORTRAN 2003 <-> C99 - - SUBROUTINE cxios_set_extract_axis_begin(extract_axis_hdl, begin) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) , VALUE :: begin - END SUBROUTINE cxios_set_extract_axis_begin - - SUBROUTINE cxios_get_extract_axis_begin(extract_axis_hdl, begin) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) :: begin - END SUBROUTINE cxios_get_extract_axis_begin - - FUNCTION cxios_is_defined_extract_axis_begin(extract_axis_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_extract_axis_begin - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - END FUNCTION cxios_is_defined_extract_axis_begin - - - SUBROUTINE cxios_set_extract_axis_index(extract_axis_hdl, index, extent) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) , DIMENSION(*) :: index - INTEGER (kind = C_INT), DIMENSION(*) :: extent - END SUBROUTINE cxios_set_extract_axis_index - - SUBROUTINE cxios_get_extract_axis_index(extract_axis_hdl, index, extent) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) , DIMENSION(*) :: index - INTEGER (kind = C_INT), DIMENSION(*) :: extent - END SUBROUTINE cxios_get_extract_axis_index - - FUNCTION cxios_is_defined_extract_axis_index(extract_axis_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_extract_axis_index - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - END FUNCTION cxios_is_defined_extract_axis_index - - - SUBROUTINE cxios_set_extract_axis_n(extract_axis_hdl, n) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) , VALUE :: n - END SUBROUTINE cxios_set_extract_axis_n - - SUBROUTINE cxios_get_extract_axis_n(extract_axis_hdl, n) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - INTEGER (KIND=C_INT) :: n - END SUBROUTINE cxios_get_extract_axis_n - - FUNCTION cxios_is_defined_extract_axis_n(extract_axis_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_extract_axis_n - INTEGER (kind = C_INTPTR_T), VALUE :: extract_axis_hdl - END FUNCTION cxios_is_defined_extract_axis_n - - END INTERFACE - -END MODULE extract_axis_interface_attr diff --git a/xios_2311_src/src/interface/fortran_attr/icontext_attr.F90 b/xios_2311_src/src/interface/fortran_attr/icontext_attr.F90 index a634a208..32950a28 100644 --- a/xios_2311_src/src/interface/fortran_attr/icontext_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/icontext_attr.F90 @@ -11,51 +11,39 @@ MODULE icontext_attr CONTAINS SUBROUTINE xios(set_context_attr) & - ( context_id, attached_mode, output_dir ) + ( context_id, output_dir ) IMPLICIT NONE TYPE(txios(context)) :: context_hdl CHARACTER(LEN=*), INTENT(IN) ::context_id - LOGICAL , OPTIONAL, INTENT(IN) :: attached_mode - LOGICAL (KIND=C_BOOL) :: attached_mode_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir CALL xios(get_context_handle) & (context_id,context_hdl) CALL xios(set_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(set_context_attr) SUBROUTINE xios(set_context_attr_hdl) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL , OPTIONAL, INTENT(IN) :: attached_mode - LOGICAL (KIND=C_BOOL) :: attached_mode_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir CALL xios(set_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(set_context_attr_hdl) SUBROUTINE xios(set_context_attr_hdl_) & - ( context_hdl, attached_mode_, output_dir_ ) + ( context_hdl, output_dir_ ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL , OPTIONAL, INTENT(IN) :: attached_mode_ - LOGICAL (KIND=C_BOOL) :: attached_mode__tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir_ - IF (PRESENT(attached_mode_)) THEN - attached_mode__tmp = attached_mode_ - CALL cxios_set_context_attached_mode & - (context_hdl%daddr, attached_mode__tmp) - ENDIF - IF (PRESENT(output_dir_)) THEN CALL cxios_set_context_output_dir & (context_hdl%daddr, output_dir_, len(output_dir_)) @@ -64,51 +52,39 @@ CONTAINS END SUBROUTINE xios(set_context_attr_hdl_) SUBROUTINE xios(get_context_attr) & - ( context_id, attached_mode, output_dir ) + ( context_id, output_dir ) IMPLICIT NONE TYPE(txios(context)) :: context_hdl CHARACTER(LEN=*), INTENT(IN) ::context_id - LOGICAL , OPTIONAL, INTENT(OUT) :: attached_mode - LOGICAL (KIND=C_BOOL) :: attached_mode_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir CALL xios(get_context_handle) & (context_id,context_hdl) CALL xios(get_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(get_context_attr) SUBROUTINE xios(get_context_attr_hdl) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL , OPTIONAL, INTENT(OUT) :: attached_mode - LOGICAL (KIND=C_BOOL) :: attached_mode_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir CALL xios(get_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(get_context_attr_hdl) SUBROUTINE xios(get_context_attr_hdl_) & - ( context_hdl, attached_mode_, output_dir_ ) + ( context_hdl, output_dir_ ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL , OPTIONAL, INTENT(OUT) :: attached_mode_ - LOGICAL (KIND=C_BOOL) :: attached_mode__tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir_ - IF (PRESENT(attached_mode_)) THEN - CALL cxios_get_context_attached_mode & - (context_hdl%daddr, attached_mode__tmp) - attached_mode_ = attached_mode__tmp - ENDIF - IF (PRESENT(output_dir_)) THEN CALL cxios_get_context_output_dir & (context_hdl%daddr, output_dir_, len(output_dir_)) @@ -117,54 +93,42 @@ CONTAINS END SUBROUTINE xios(get_context_attr_hdl_) SUBROUTINE xios(is_defined_context_attr) & - ( context_id, attached_mode, output_dir ) + ( context_id, output_dir ) IMPLICIT NONE TYPE(txios(context)) :: context_hdl CHARACTER(LEN=*), INTENT(IN) ::context_id - LOGICAL, OPTIONAL, INTENT(OUT) :: attached_mode - LOGICAL(KIND=C_BOOL) :: attached_mode_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir LOGICAL(KIND=C_BOOL) :: output_dir_tmp CALL xios(get_context_handle) & (context_id,context_hdl) CALL xios(is_defined_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(is_defined_context_attr) SUBROUTINE xios(is_defined_context_attr_hdl) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL, OPTIONAL, INTENT(OUT) :: attached_mode - LOGICAL(KIND=C_BOOL) :: attached_mode_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir LOGICAL(KIND=C_BOOL) :: output_dir_tmp CALL xios(is_defined_context_attr_hdl_) & - ( context_hdl, attached_mode, output_dir ) + ( context_hdl, output_dir ) END SUBROUTINE xios(is_defined_context_attr_hdl) SUBROUTINE xios(is_defined_context_attr_hdl_) & - ( context_hdl, attached_mode_, output_dir_ ) + ( context_hdl, output_dir_ ) IMPLICIT NONE TYPE(txios(context)) , INTENT(IN) :: context_hdl - LOGICAL, OPTIONAL, INTENT(OUT) :: attached_mode_ - LOGICAL(KIND=C_BOOL) :: attached_mode__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir_ LOGICAL(KIND=C_BOOL) :: output_dir__tmp - IF (PRESENT(attached_mode_)) THEN - attached_mode__tmp = cxios_is_defined_context_attached_mode & - (context_hdl%daddr) - attached_mode_ = attached_mode__tmp - ENDIF - IF (PRESENT(output_dir_)) THEN output_dir__tmp = cxios_is_defined_context_output_dir & (context_hdl%daddr) diff --git a/xios_2311_src/src/interface/fortran_attr/idomain_attr.F90 b/xios_2311_src/src/interface/fortran_attr/idomain_attr.F90 index 0050a1f4..1800c31d 100644 --- a/xios_2311_src/src/interface/fortran_attr/idomain_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/idomain_attr.F90 @@ -15,7 +15,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) :: domain_hdl @@ -58,10 +59,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo INTEGER , OPTIONAL, INTENT(IN) :: nj INTEGER , OPTIONAL, INTENT(IN) :: nj_glo + INTEGER , OPTIONAL, INTENT(IN) :: ntiles INTEGER , OPTIONAL, INTENT(IN) :: nvertex INTEGER , OPTIONAL, INTENT(IN) :: prec REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type CALL xios(get_domain_handle) & @@ -71,7 +81,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(set_domain_attr) @@ -80,7 +91,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -122,10 +134,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo INTEGER , OPTIONAL, INTENT(IN) :: nj INTEGER , OPTIONAL, INTENT(IN) :: nj_glo + INTEGER , OPTIONAL, INTENT(IN) :: ntiles INTEGER , OPTIONAL, INTENT(IN) :: nvertex INTEGER , OPTIONAL, INTENT(IN) :: prec REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type CALL xios(set_domain_attr_hdl_) & @@ -133,7 +154,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(set_domain_attr_hdl) @@ -142,8 +164,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, i_index_, ibegin_, j_index_, jbegin_ & , lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_, mask_1d_ & - , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_, type_ & - ) + , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -185,10 +208,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo_ INTEGER , OPTIONAL, INTENT(IN) :: nj_ INTEGER , OPTIONAL, INTENT(IN) :: nj_glo_ + INTEGER , OPTIONAL, INTENT(IN) :: ntiles_ INTEGER , OPTIONAL, INTENT(IN) :: nvertex_ INTEGER , OPTIONAL, INTENT(IN) :: prec_ REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj_(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ IF (PRESENT(area_)) THEN @@ -375,6 +407,11 @@ CONTAINS (domain_hdl%daddr, nj_glo_) ENDIF + IF (PRESENT(ntiles_)) THEN + CALL cxios_set_domain_ntiles & + (domain_hdl%daddr, ntiles_) + ENDIF + IF (PRESENT(nvertex_)) THEN CALL cxios_set_domain_nvertex & (domain_hdl%daddr, nvertex_) @@ -395,6 +432,46 @@ CONTAINS (domain_hdl%daddr, standard_name_, len(standard_name_)) ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + CALL cxios_set_domain_tile_data_ibegin & + (domain_hdl%daddr, tile_data_ibegin_, SHAPE(tile_data_ibegin_)) + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + CALL cxios_set_domain_tile_data_jbegin & + (domain_hdl%daddr, tile_data_jbegin_, SHAPE(tile_data_jbegin_)) + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + CALL cxios_set_domain_tile_data_ni & + (domain_hdl%daddr, tile_data_ni_, SHAPE(tile_data_ni_)) + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + CALL cxios_set_domain_tile_data_nj & + (domain_hdl%daddr, tile_data_nj_, SHAPE(tile_data_nj_)) + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + CALL cxios_set_domain_tile_ibegin & + (domain_hdl%daddr, tile_ibegin_, SHAPE(tile_ibegin_)) + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + CALL cxios_set_domain_tile_jbegin & + (domain_hdl%daddr, tile_jbegin_, SHAPE(tile_jbegin_)) + ENDIF + + IF (PRESENT(tile_ni_)) THEN + CALL cxios_set_domain_tile_ni & + (domain_hdl%daddr, tile_ni_, SHAPE(tile_ni_)) + ENDIF + + IF (PRESENT(tile_nj_)) THEN + CALL cxios_set_domain_tile_nj & + (domain_hdl%daddr, tile_nj_, SHAPE(tile_nj_)) + ENDIF + IF (PRESENT(type_)) THEN CALL cxios_set_domain_type & (domain_hdl%daddr, type_, len(type_)) @@ -407,7 +484,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) :: domain_hdl @@ -450,10 +528,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo INTEGER , OPTIONAL, INTENT(OUT) :: nj INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles INTEGER , OPTIONAL, INTENT(OUT) :: nvertex INTEGER , OPTIONAL, INTENT(OUT) :: prec REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type CALL xios(get_domain_handle) & @@ -463,7 +550,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(get_domain_attr) @@ -472,7 +560,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -514,10 +603,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo INTEGER , OPTIONAL, INTENT(OUT) :: nj INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles INTEGER , OPTIONAL, INTENT(OUT) :: nvertex INTEGER , OPTIONAL, INTENT(OUT) :: prec REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type CALL xios(get_domain_attr_hdl_) & @@ -525,7 +623,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(get_domain_attr_hdl) @@ -534,8 +633,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, i_index_, ibegin_, j_index_, jbegin_ & , lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_, mask_1d_ & - , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_, type_ & - ) + , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -577,10 +677,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo_ INTEGER , OPTIONAL, INTENT(OUT) :: nj_ INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo_ + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles_ INTEGER , OPTIONAL, INTENT(OUT) :: nvertex_ INTEGER , OPTIONAL, INTENT(OUT) :: prec_ REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj_(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ IF (PRESENT(area_)) THEN @@ -767,6 +876,11 @@ CONTAINS (domain_hdl%daddr, nj_glo_) ENDIF + IF (PRESENT(ntiles_)) THEN + CALL cxios_get_domain_ntiles & + (domain_hdl%daddr, ntiles_) + ENDIF + IF (PRESENT(nvertex_)) THEN CALL cxios_get_domain_nvertex & (domain_hdl%daddr, nvertex_) @@ -787,6 +901,46 @@ CONTAINS (domain_hdl%daddr, standard_name_, len(standard_name_)) ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + CALL cxios_get_domain_tile_data_ibegin & + (domain_hdl%daddr, tile_data_ibegin_, SHAPE(tile_data_ibegin_)) + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + CALL cxios_get_domain_tile_data_jbegin & + (domain_hdl%daddr, tile_data_jbegin_, SHAPE(tile_data_jbegin_)) + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + CALL cxios_get_domain_tile_data_ni & + (domain_hdl%daddr, tile_data_ni_, SHAPE(tile_data_ni_)) + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + CALL cxios_get_domain_tile_data_nj & + (domain_hdl%daddr, tile_data_nj_, SHAPE(tile_data_nj_)) + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + CALL cxios_get_domain_tile_ibegin & + (domain_hdl%daddr, tile_ibegin_, SHAPE(tile_ibegin_)) + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + CALL cxios_get_domain_tile_jbegin & + (domain_hdl%daddr, tile_jbegin_, SHAPE(tile_jbegin_)) + ENDIF + + IF (PRESENT(tile_ni_)) THEN + CALL cxios_get_domain_tile_ni & + (domain_hdl%daddr, tile_ni_, SHAPE(tile_ni_)) + ENDIF + + IF (PRESENT(tile_nj_)) THEN + CALL cxios_get_domain_tile_nj & + (domain_hdl%daddr, tile_nj_, SHAPE(tile_nj_)) + ENDIF + IF (PRESENT(type_)) THEN CALL cxios_get_domain_type & (domain_hdl%daddr, type_, len(type_)) @@ -799,7 +953,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) :: domain_hdl @@ -876,6 +1031,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo LOGICAL(KIND=C_BOOL) :: nj_glo_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles + LOGICAL(KIND=C_BOOL) :: ntiles_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex LOGICAL(KIND=C_BOOL) :: nvertex_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec @@ -884,6 +1041,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name LOGICAL(KIND=C_BOOL) :: standard_name_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni + LOGICAL(KIND=C_BOOL) :: tile_data_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj + LOGICAL(KIND=C_BOOL) :: tile_data_nj_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin + LOGICAL(KIND=C_BOOL) :: tile_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin + LOGICAL(KIND=C_BOOL) :: tile_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni + LOGICAL(KIND=C_BOOL) :: tile_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj + LOGICAL(KIND=C_BOOL) :: tile_nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type LOGICAL(KIND=C_BOOL) :: type_tmp @@ -894,7 +1067,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(is_defined_domain_attr) @@ -903,7 +1077,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -979,6 +1154,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo LOGICAL(KIND=C_BOOL) :: nj_glo_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles + LOGICAL(KIND=C_BOOL) :: ntiles_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex LOGICAL(KIND=C_BOOL) :: nvertex_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec @@ -987,6 +1164,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name LOGICAL(KIND=C_BOOL) :: standard_name_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni + LOGICAL(KIND=C_BOOL) :: tile_data_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj + LOGICAL(KIND=C_BOOL) :: tile_data_nj_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin + LOGICAL(KIND=C_BOOL) :: tile_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin + LOGICAL(KIND=C_BOOL) :: tile_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni + LOGICAL(KIND=C_BOOL) :: tile_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj + LOGICAL(KIND=C_BOOL) :: tile_nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type LOGICAL(KIND=C_BOOL) :: type_tmp @@ -995,7 +1188,8 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, i_index, ibegin, j_index, jbegin, lat_name, latvalue_1d & , latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d, name, ni, ni_glo & - , nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin, tile_data_jbegin & + , tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type ) END SUBROUTINE xios(is_defined_domain_attr_hdl) @@ -1004,8 +1198,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, i_index_, ibegin_, j_index_, jbegin_ & , lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_, mask_1d_ & - , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_, type_ & - ) + , mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domain)) , INTENT(IN) :: domain_hdl @@ -1081,6 +1276,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo_ LOGICAL(KIND=C_BOOL) :: nj_glo__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles_ + LOGICAL(KIND=C_BOOL) :: ntiles__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex_ LOGICAL(KIND=C_BOOL) :: nvertex__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ @@ -1089,6 +1286,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ LOGICAL(KIND=C_BOOL) :: standard_name__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin_ + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin_ + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni_ + LOGICAL(KIND=C_BOOL) :: tile_data_ni__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj_ + LOGICAL(KIND=C_BOOL) :: tile_data_nj__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin_ + LOGICAL(KIND=C_BOOL) :: tile_ibegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin_ + LOGICAL(KIND=C_BOOL) :: tile_jbegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni_ + LOGICAL(KIND=C_BOOL) :: tile_ni__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj_ + LOGICAL(KIND=C_BOOL) :: tile_nj__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type_ LOGICAL(KIND=C_BOOL) :: type__tmp @@ -1308,6 +1521,12 @@ CONTAINS nj_glo_ = nj_glo__tmp ENDIF + IF (PRESENT(ntiles_)) THEN + ntiles__tmp = cxios_is_defined_domain_ntiles & + (domain_hdl%daddr) + ntiles_ = ntiles__tmp + ENDIF + IF (PRESENT(nvertex_)) THEN nvertex__tmp = cxios_is_defined_domain_nvertex & (domain_hdl%daddr) @@ -1332,6 +1551,54 @@ CONTAINS standard_name_ = standard_name__tmp ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + tile_data_ibegin__tmp = cxios_is_defined_domain_tile_data_ibegin & + (domain_hdl%daddr) + tile_data_ibegin_ = tile_data_ibegin__tmp + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + tile_data_jbegin__tmp = cxios_is_defined_domain_tile_data_jbegin & + (domain_hdl%daddr) + tile_data_jbegin_ = tile_data_jbegin__tmp + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + tile_data_ni__tmp = cxios_is_defined_domain_tile_data_ni & + (domain_hdl%daddr) + tile_data_ni_ = tile_data_ni__tmp + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + tile_data_nj__tmp = cxios_is_defined_domain_tile_data_nj & + (domain_hdl%daddr) + tile_data_nj_ = tile_data_nj__tmp + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + tile_ibegin__tmp = cxios_is_defined_domain_tile_ibegin & + (domain_hdl%daddr) + tile_ibegin_ = tile_ibegin__tmp + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + tile_jbegin__tmp = cxios_is_defined_domain_tile_jbegin & + (domain_hdl%daddr) + tile_jbegin_ = tile_jbegin__tmp + ENDIF + + IF (PRESENT(tile_ni_)) THEN + tile_ni__tmp = cxios_is_defined_domain_tile_ni & + (domain_hdl%daddr) + tile_ni_ = tile_ni__tmp + ENDIF + + IF (PRESENT(tile_nj_)) THEN + tile_nj__tmp = cxios_is_defined_domain_tile_nj & + (domain_hdl%daddr) + tile_nj_ = tile_nj__tmp + ENDIF + IF (PRESENT(type_)) THEN type__tmp = cxios_is_defined_domain_type & (domain_hdl%daddr) diff --git a/xios_2311_src/src/interface/fortran_attr/idomaingroup_attr.F90 b/xios_2311_src/src/interface/fortran_attr/idomaingroup_attr.F90 index f8123f69..624c436e 100644 --- a/xios_2311_src/src/interface/fortran_attr/idomaingroup_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/idomaingroup_attr.F90 @@ -15,7 +15,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) :: domaingroup_hdl @@ -59,10 +61,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo INTEGER , OPTIONAL, INTENT(IN) :: nj INTEGER , OPTIONAL, INTENT(IN) :: nj_glo + INTEGER , OPTIONAL, INTENT(IN) :: ntiles INTEGER , OPTIONAL, INTENT(IN) :: nvertex INTEGER , OPTIONAL, INTENT(IN) :: prec REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type CALL xios(get_domaingroup_handle) & @@ -72,7 +83,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(set_domaingroup_attr) @@ -81,7 +94,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -124,10 +139,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo INTEGER , OPTIONAL, INTENT(IN) :: nj INTEGER , OPTIONAL, INTENT(IN) :: nj_glo + INTEGER , OPTIONAL, INTENT(IN) :: ntiles INTEGER , OPTIONAL, INTENT(IN) :: nvertex INTEGER , OPTIONAL, INTENT(IN) :: prec REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type CALL xios(set_domaingroup_attr_hdl_) & @@ -135,7 +159,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(set_domaingroup_attr_hdl) @@ -144,8 +170,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, group_ref_, i_index_, ibegin_, j_index_ & , jbegin_, lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_ & - , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_ & - , type_ ) + , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -188,10 +215,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(IN) :: ni_glo_ INTEGER , OPTIONAL, INTENT(IN) :: nj_ INTEGER , OPTIONAL, INTENT(IN) :: nj_glo_ + INTEGER , OPTIONAL, INTENT(IN) :: ntiles_ INTEGER , OPTIONAL, INTENT(IN) :: nvertex_ INTEGER , OPTIONAL, INTENT(IN) :: prec_ REAL (KIND=8) , OPTIONAL, INTENT(IN) :: radius_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ibegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_jbegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_ni_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_data_nj_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ibegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_jbegin_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_ni_(:) + INTEGER , OPTIONAL, INTENT(IN) :: tile_nj_(:) CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_ IF (PRESENT(area_)) THEN @@ -383,6 +419,11 @@ CONTAINS (domaingroup_hdl%daddr, nj_glo_) ENDIF + IF (PRESENT(ntiles_)) THEN + CALL cxios_set_domaingroup_ntiles & + (domaingroup_hdl%daddr, ntiles_) + ENDIF + IF (PRESENT(nvertex_)) THEN CALL cxios_set_domaingroup_nvertex & (domaingroup_hdl%daddr, nvertex_) @@ -403,6 +444,46 @@ CONTAINS (domaingroup_hdl%daddr, standard_name_, len(standard_name_)) ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + CALL cxios_set_domaingroup_tile_data_ibegin & + (domaingroup_hdl%daddr, tile_data_ibegin_, SHAPE(tile_data_ibegin_)) + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + CALL cxios_set_domaingroup_tile_data_jbegin & + (domaingroup_hdl%daddr, tile_data_jbegin_, SHAPE(tile_data_jbegin_)) + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + CALL cxios_set_domaingroup_tile_data_ni & + (domaingroup_hdl%daddr, tile_data_ni_, SHAPE(tile_data_ni_)) + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + CALL cxios_set_domaingroup_tile_data_nj & + (domaingroup_hdl%daddr, tile_data_nj_, SHAPE(tile_data_nj_)) + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + CALL cxios_set_domaingroup_tile_ibegin & + (domaingroup_hdl%daddr, tile_ibegin_, SHAPE(tile_ibegin_)) + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + CALL cxios_set_domaingroup_tile_jbegin & + (domaingroup_hdl%daddr, tile_jbegin_, SHAPE(tile_jbegin_)) + ENDIF + + IF (PRESENT(tile_ni_)) THEN + CALL cxios_set_domaingroup_tile_ni & + (domaingroup_hdl%daddr, tile_ni_, SHAPE(tile_ni_)) + ENDIF + + IF (PRESENT(tile_nj_)) THEN + CALL cxios_set_domaingroup_tile_nj & + (domaingroup_hdl%daddr, tile_nj_, SHAPE(tile_nj_)) + ENDIF + IF (PRESENT(type_)) THEN CALL cxios_set_domaingroup_type & (domaingroup_hdl%daddr, type_, len(type_)) @@ -415,7 +496,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) :: domaingroup_hdl @@ -459,10 +542,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo INTEGER , OPTIONAL, INTENT(OUT) :: nj INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles INTEGER , OPTIONAL, INTENT(OUT) :: nvertex INTEGER , OPTIONAL, INTENT(OUT) :: prec REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type CALL xios(get_domaingroup_handle) & @@ -472,7 +564,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(get_domaingroup_attr) @@ -481,7 +575,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -524,10 +620,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo INTEGER , OPTIONAL, INTENT(OUT) :: nj INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles INTEGER , OPTIONAL, INTENT(OUT) :: nvertex INTEGER , OPTIONAL, INTENT(OUT) :: prec REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type CALL xios(get_domaingroup_attr_hdl_) & @@ -535,7 +640,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(get_domaingroup_attr_hdl) @@ -544,8 +651,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, group_ref_, i_index_, ibegin_, j_index_ & , jbegin_, lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_ & - , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_ & - , type_ ) + , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -588,10 +696,19 @@ CONTAINS INTEGER , OPTIONAL, INTENT(OUT) :: ni_glo_ INTEGER , OPTIONAL, INTENT(OUT) :: nj_ INTEGER , OPTIONAL, INTENT(OUT) :: nj_glo_ + INTEGER , OPTIONAL, INTENT(OUT) :: ntiles_ INTEGER , OPTIONAL, INTENT(OUT) :: nvertex_ INTEGER , OPTIONAL, INTENT(OUT) :: prec_ REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: radius_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ibegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_jbegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_ni_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_data_nj_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ibegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_jbegin_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_ni_(:) + INTEGER , OPTIONAL, INTENT(OUT) :: tile_nj_(:) CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_ IF (PRESENT(area_)) THEN @@ -783,6 +900,11 @@ CONTAINS (domaingroup_hdl%daddr, nj_glo_) ENDIF + IF (PRESENT(ntiles_)) THEN + CALL cxios_get_domaingroup_ntiles & + (domaingroup_hdl%daddr, ntiles_) + ENDIF + IF (PRESENT(nvertex_)) THEN CALL cxios_get_domaingroup_nvertex & (domaingroup_hdl%daddr, nvertex_) @@ -803,6 +925,46 @@ CONTAINS (domaingroup_hdl%daddr, standard_name_, len(standard_name_)) ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + CALL cxios_get_domaingroup_tile_data_ibegin & + (domaingroup_hdl%daddr, tile_data_ibegin_, SHAPE(tile_data_ibegin_)) + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + CALL cxios_get_domaingroup_tile_data_jbegin & + (domaingroup_hdl%daddr, tile_data_jbegin_, SHAPE(tile_data_jbegin_)) + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + CALL cxios_get_domaingroup_tile_data_ni & + (domaingroup_hdl%daddr, tile_data_ni_, SHAPE(tile_data_ni_)) + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + CALL cxios_get_domaingroup_tile_data_nj & + (domaingroup_hdl%daddr, tile_data_nj_, SHAPE(tile_data_nj_)) + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + CALL cxios_get_domaingroup_tile_ibegin & + (domaingroup_hdl%daddr, tile_ibegin_, SHAPE(tile_ibegin_)) + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + CALL cxios_get_domaingroup_tile_jbegin & + (domaingroup_hdl%daddr, tile_jbegin_, SHAPE(tile_jbegin_)) + ENDIF + + IF (PRESENT(tile_ni_)) THEN + CALL cxios_get_domaingroup_tile_ni & + (domaingroup_hdl%daddr, tile_ni_, SHAPE(tile_ni_)) + ENDIF + + IF (PRESENT(tile_nj_)) THEN + CALL cxios_get_domaingroup_tile_nj & + (domaingroup_hdl%daddr, tile_nj_, SHAPE(tile_nj_)) + ENDIF + IF (PRESENT(type_)) THEN CALL cxios_get_domaingroup_type & (domaingroup_hdl%daddr, type_, len(type_)) @@ -815,7 +977,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) :: domaingroup_hdl @@ -894,6 +1058,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo LOGICAL(KIND=C_BOOL) :: nj_glo_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles + LOGICAL(KIND=C_BOOL) :: ntiles_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex LOGICAL(KIND=C_BOOL) :: nvertex_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec @@ -902,6 +1068,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name LOGICAL(KIND=C_BOOL) :: standard_name_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni + LOGICAL(KIND=C_BOOL) :: tile_data_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj + LOGICAL(KIND=C_BOOL) :: tile_data_nj_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin + LOGICAL(KIND=C_BOOL) :: tile_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin + LOGICAL(KIND=C_BOOL) :: tile_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni + LOGICAL(KIND=C_BOOL) :: tile_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj + LOGICAL(KIND=C_BOOL) :: tile_nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type LOGICAL(KIND=C_BOOL) :: type_tmp @@ -912,7 +1094,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(is_defined_domaingroup_attr) @@ -921,7 +1105,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -999,6 +1185,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo LOGICAL(KIND=C_BOOL) :: nj_glo_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles + LOGICAL(KIND=C_BOOL) :: ntiles_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex LOGICAL(KIND=C_BOOL) :: nvertex_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec @@ -1007,6 +1195,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name LOGICAL(KIND=C_BOOL) :: standard_name_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni + LOGICAL(KIND=C_BOOL) :: tile_data_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj + LOGICAL(KIND=C_BOOL) :: tile_data_nj_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin + LOGICAL(KIND=C_BOOL) :: tile_ibegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin + LOGICAL(KIND=C_BOOL) :: tile_jbegin_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni + LOGICAL(KIND=C_BOOL) :: tile_ni_tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj + LOGICAL(KIND=C_BOOL) :: tile_nj_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type LOGICAL(KIND=C_BOOL) :: type_tmp @@ -1015,7 +1219,9 @@ CONTAINS , bounds_lon_name, comment, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin, data_ni & , data_nj, dim_i_name, dim_j_name, domain_ref, group_ref, i_index, ibegin, j_index, jbegin, lat_name & , latvalue_1d, latvalue_2d, lon_name, long_name, lonvalue_1d, lonvalue_2d, mask_1d, mask_2d & - , name, ni, ni_glo, nj, nj_glo, nvertex, prec, radius, standard_name, type ) + , name, ni, ni_glo, nj, nj_glo, ntiles, nvertex, prec, radius, standard_name, tile_data_ibegin & + , tile_data_jbegin, tile_data_ni, tile_data_nj, tile_ibegin, tile_jbegin, tile_ni, tile_nj, type & + ) END SUBROUTINE xios(is_defined_domaingroup_attr_hdl) @@ -1024,8 +1230,9 @@ CONTAINS , bounds_lon_name_, comment_, data_dim_, data_i_index_, data_ibegin_, data_j_index_, data_jbegin_ & , data_ni_, data_nj_, dim_i_name_, dim_j_name_, domain_ref_, group_ref_, i_index_, ibegin_, j_index_ & , jbegin_, lat_name_, latvalue_1d_, latvalue_2d_, lon_name_, long_name_, lonvalue_1d_, lonvalue_2d_ & - , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, prec_, radius_, standard_name_ & - , type_ ) + , mask_1d_, mask_2d_, name_, ni_, ni_glo_, nj_, nj_glo_, ntiles_, nvertex_, prec_, radius_, standard_name_ & + , tile_data_ibegin_, tile_data_jbegin_, tile_data_ni_, tile_data_nj_, tile_ibegin_, tile_jbegin_ & + , tile_ni_, tile_nj_, type_ ) IMPLICIT NONE TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl @@ -1103,6 +1310,8 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: nj__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nj_glo_ LOGICAL(KIND=C_BOOL) :: nj_glo__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: ntiles_ + LOGICAL(KIND=C_BOOL) :: ntiles__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: nvertex_ LOGICAL(KIND=C_BOOL) :: nvertex__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ @@ -1111,6 +1320,22 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: radius__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ LOGICAL(KIND=C_BOOL) :: standard_name__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ibegin_ + LOGICAL(KIND=C_BOOL) :: tile_data_ibegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_jbegin_ + LOGICAL(KIND=C_BOOL) :: tile_data_jbegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_ni_ + LOGICAL(KIND=C_BOOL) :: tile_data_ni__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_data_nj_ + LOGICAL(KIND=C_BOOL) :: tile_data_nj__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ibegin_ + LOGICAL(KIND=C_BOOL) :: tile_ibegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_jbegin_ + LOGICAL(KIND=C_BOOL) :: tile_jbegin__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_ni_ + LOGICAL(KIND=C_BOOL) :: tile_ni__tmp + LOGICAL, OPTIONAL, INTENT(OUT) :: tile_nj_ + LOGICAL(KIND=C_BOOL) :: tile_nj__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: type_ LOGICAL(KIND=C_BOOL) :: type__tmp @@ -1336,6 +1561,12 @@ CONTAINS nj_glo_ = nj_glo__tmp ENDIF + IF (PRESENT(ntiles_)) THEN + ntiles__tmp = cxios_is_defined_domaingroup_ntiles & + (domaingroup_hdl%daddr) + ntiles_ = ntiles__tmp + ENDIF + IF (PRESENT(nvertex_)) THEN nvertex__tmp = cxios_is_defined_domaingroup_nvertex & (domaingroup_hdl%daddr) @@ -1360,6 +1591,54 @@ CONTAINS standard_name_ = standard_name__tmp ENDIF + IF (PRESENT(tile_data_ibegin_)) THEN + tile_data_ibegin__tmp = cxios_is_defined_domaingroup_tile_data_ibegin & + (domaingroup_hdl%daddr) + tile_data_ibegin_ = tile_data_ibegin__tmp + ENDIF + + IF (PRESENT(tile_data_jbegin_)) THEN + tile_data_jbegin__tmp = cxios_is_defined_domaingroup_tile_data_jbegin & + (domaingroup_hdl%daddr) + tile_data_jbegin_ = tile_data_jbegin__tmp + ENDIF + + IF (PRESENT(tile_data_ni_)) THEN + tile_data_ni__tmp = cxios_is_defined_domaingroup_tile_data_ni & + (domaingroup_hdl%daddr) + tile_data_ni_ = tile_data_ni__tmp + ENDIF + + IF (PRESENT(tile_data_nj_)) THEN + tile_data_nj__tmp = cxios_is_defined_domaingroup_tile_data_nj & + (domaingroup_hdl%daddr) + tile_data_nj_ = tile_data_nj__tmp + ENDIF + + IF (PRESENT(tile_ibegin_)) THEN + tile_ibegin__tmp = cxios_is_defined_domaingroup_tile_ibegin & + (domaingroup_hdl%daddr) + tile_ibegin_ = tile_ibegin__tmp + ENDIF + + IF (PRESENT(tile_jbegin_)) THEN + tile_jbegin__tmp = cxios_is_defined_domaingroup_tile_jbegin & + (domaingroup_hdl%daddr) + tile_jbegin_ = tile_jbegin__tmp + ENDIF + + IF (PRESENT(tile_ni_)) THEN + tile_ni__tmp = cxios_is_defined_domaingroup_tile_ni & + (domaingroup_hdl%daddr) + tile_ni_ = tile_ni__tmp + ENDIF + + IF (PRESENT(tile_nj_)) THEN + tile_nj__tmp = cxios_is_defined_domaingroup_tile_nj & + (domaingroup_hdl%daddr) + tile_nj_ = tile_nj__tmp + ENDIF + IF (PRESENT(type_)) THEN type__tmp = cxios_is_defined_domaingroup_type & (domaingroup_hdl%daddr) diff --git a/xios_2311_src/src/interface/fortran_attr/iscalar_attr.F90 b/xios_2311_src/src/interface/fortran_attr/iscalar_attr.F90 index b275cccc..76cc7273 100644 --- a/xios_2311_src/src/interface/fortran_attr/iscalar_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/iscalar_attr.F90 @@ -11,8 +11,8 @@ MODULE iscalar_attr CONTAINS SUBROUTINE xios(set_scalar_attr) & - ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) :: scalar_hdl @@ -23,8 +23,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: comment CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name - LOGICAL , OPTIONAL, INTENT(IN) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive INTEGER , OPTIONAL, INTENT(IN) :: prec @@ -36,14 +34,14 @@ CONTAINS CALL xios(get_scalar_handle) & (scalar_id,scalar_hdl) CALL xios(set_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(set_scalar_attr) SUBROUTINE xios(set_scalar_attr_hdl) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -53,8 +51,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: comment CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name - LOGICAL , OPTIONAL, INTENT(IN) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive INTEGER , OPTIONAL, INTENT(IN) :: prec @@ -64,14 +60,14 @@ CONTAINS REAL (KIND=8) , OPTIONAL, INTENT(IN) :: value CALL xios(set_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(set_scalar_attr_hdl) SUBROUTINE xios(set_scalar_attr_hdl_) & - ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, mask_, name_ & - , positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, name_, positive_ & + , prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -81,8 +77,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: comment_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ - LOGICAL , OPTIONAL, INTENT(IN) :: mask_ - LOGICAL (KIND=C_BOOL) :: mask__tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive_ INTEGER , OPTIONAL, INTENT(IN) :: prec_ @@ -121,12 +115,6 @@ CONTAINS (scalar_hdl%daddr, long_name_, len(long_name_)) ENDIF - IF (PRESENT(mask_)) THEN - mask__tmp = mask_ - CALL cxios_set_scalar_mask & - (scalar_hdl%daddr, mask__tmp) - ENDIF - IF (PRESENT(name_)) THEN CALL cxios_set_scalar_name & (scalar_hdl%daddr, name_, len(name_)) @@ -165,8 +153,8 @@ CONTAINS END SUBROUTINE xios(set_scalar_attr_hdl_) SUBROUTINE xios(get_scalar_attr) & - ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) :: scalar_hdl @@ -177,8 +165,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: comment CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name - LOGICAL , OPTIONAL, INTENT(OUT) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive INTEGER , OPTIONAL, INTENT(OUT) :: prec @@ -190,14 +176,14 @@ CONTAINS CALL xios(get_scalar_handle) & (scalar_id,scalar_hdl) CALL xios(get_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(get_scalar_attr) SUBROUTINE xios(get_scalar_attr_hdl) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -207,8 +193,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: comment CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name - LOGICAL , OPTIONAL, INTENT(OUT) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive INTEGER , OPTIONAL, INTENT(OUT) :: prec @@ -218,14 +202,14 @@ CONTAINS REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: value CALL xios(get_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(get_scalar_attr_hdl) SUBROUTINE xios(get_scalar_attr_hdl_) & - ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, mask_, name_ & - , positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, name_, positive_ & + , prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -235,8 +219,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: comment_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ - LOGICAL , OPTIONAL, INTENT(OUT) :: mask_ - LOGICAL (KIND=C_BOOL) :: mask__tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive_ INTEGER , OPTIONAL, INTENT(OUT) :: prec_ @@ -275,12 +257,6 @@ CONTAINS (scalar_hdl%daddr, long_name_, len(long_name_)) ENDIF - IF (PRESENT(mask_)) THEN - CALL cxios_get_scalar_mask & - (scalar_hdl%daddr, mask__tmp) - mask_ = mask__tmp - ENDIF - IF (PRESENT(name_)) THEN CALL cxios_get_scalar_name & (scalar_hdl%daddr, name_, len(name_)) @@ -319,8 +295,8 @@ CONTAINS END SUBROUTINE xios(get_scalar_attr_hdl_) SUBROUTINE xios(is_defined_scalar_attr) & - ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_id, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) :: scalar_hdl @@ -337,8 +313,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name LOGICAL(KIND=C_BOOL) :: long_name_tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask - LOGICAL(KIND=C_BOOL) :: mask_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name LOGICAL(KIND=C_BOOL) :: name_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive @@ -357,14 +331,14 @@ CONTAINS CALL xios(get_scalar_handle) & (scalar_id,scalar_hdl) CALL xios(is_defined_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(is_defined_scalar_attr) SUBROUTINE xios(is_defined_scalar_attr_hdl) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -380,8 +354,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name LOGICAL(KIND=C_BOOL) :: long_name_tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask - LOGICAL(KIND=C_BOOL) :: mask_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name LOGICAL(KIND=C_BOOL) :: name_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive @@ -398,14 +370,14 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: value_tmp CALL xios(is_defined_scalar_attr_hdl_) & - ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, mask, name, positive & - , prec, scalar_ref, standard_name, unit, value ) + ( scalar_hdl, axis_type, bounds, bounds_name, comment, label, long_name, name, positive, prec & + , scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(is_defined_scalar_attr_hdl) SUBROUTINE xios(is_defined_scalar_attr_hdl_) & - ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, mask_, name_ & - , positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + ( scalar_hdl, axis_type_, bounds_, bounds_name_, comment_, label_, long_name_, name_, positive_ & + , prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalar)) , INTENT(IN) :: scalar_hdl @@ -421,8 +393,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name_ LOGICAL(KIND=C_BOOL) :: long_name__tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask_ - LOGICAL(KIND=C_BOOL) :: mask__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name_ LOGICAL(KIND=C_BOOL) :: name__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive_ @@ -474,12 +444,6 @@ CONTAINS long_name_ = long_name__tmp ENDIF - IF (PRESENT(mask_)) THEN - mask__tmp = cxios_is_defined_scalar_mask & - (scalar_hdl%daddr) - mask_ = mask__tmp - ENDIF - IF (PRESENT(name_)) THEN name__tmp = cxios_is_defined_scalar_name & (scalar_hdl%daddr) diff --git a/xios_2311_src/src/interface/fortran_attr/iscalargroup_attr.F90 b/xios_2311_src/src/interface/fortran_attr/iscalargroup_attr.F90 index beb8beda..339d196a 100644 --- a/xios_2311_src/src/interface/fortran_attr/iscalargroup_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/iscalargroup_attr.F90 @@ -11,8 +11,8 @@ MODULE iscalargroup_attr CONTAINS SUBROUTINE xios(set_scalargroup_attr) & - ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) :: scalargroup_hdl @@ -24,8 +24,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name - LOGICAL , OPTIONAL, INTENT(IN) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive INTEGER , OPTIONAL, INTENT(IN) :: prec @@ -37,14 +35,14 @@ CONTAINS CALL xios(get_scalargroup_handle) & (scalargroup_id,scalargroup_hdl) CALL xios(set_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(set_scalargroup_attr) SUBROUTINE xios(set_scalargroup_attr_hdl) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -55,8 +53,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name - LOGICAL , OPTIONAL, INTENT(IN) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive INTEGER , OPTIONAL, INTENT(IN) :: prec @@ -66,14 +62,14 @@ CONTAINS REAL (KIND=8) , OPTIONAL, INTENT(IN) :: value CALL xios(set_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(set_scalargroup_attr_hdl) SUBROUTINE xios(set_scalargroup_attr_hdl_) & ( scalargroup_hdl, axis_type_, bounds_, bounds_name_, comment_, group_ref_, label_, long_name_ & - , mask_, name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + , name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -84,8 +80,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: label_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ - LOGICAL , OPTIONAL, INTENT(IN) :: mask_ - LOGICAL (KIND=C_BOOL) :: mask__tmp CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: positive_ INTEGER , OPTIONAL, INTENT(IN) :: prec_ @@ -129,12 +123,6 @@ CONTAINS (scalargroup_hdl%daddr, long_name_, len(long_name_)) ENDIF - IF (PRESENT(mask_)) THEN - mask__tmp = mask_ - CALL cxios_set_scalargroup_mask & - (scalargroup_hdl%daddr, mask__tmp) - ENDIF - IF (PRESENT(name_)) THEN CALL cxios_set_scalargroup_name & (scalargroup_hdl%daddr, name_, len(name_)) @@ -173,8 +161,8 @@ CONTAINS END SUBROUTINE xios(set_scalargroup_attr_hdl_) SUBROUTINE xios(get_scalargroup_attr) & - ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) :: scalargroup_hdl @@ -186,8 +174,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name - LOGICAL , OPTIONAL, INTENT(OUT) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive INTEGER , OPTIONAL, INTENT(OUT) :: prec @@ -199,14 +185,14 @@ CONTAINS CALL xios(get_scalargroup_handle) & (scalargroup_id,scalargroup_hdl) CALL xios(get_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(get_scalargroup_attr) SUBROUTINE xios(get_scalargroup_attr_hdl) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -217,8 +203,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name - LOGICAL , OPTIONAL, INTENT(OUT) :: mask - LOGICAL (KIND=C_BOOL) :: mask_tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive INTEGER , OPTIONAL, INTENT(OUT) :: prec @@ -228,14 +212,14 @@ CONTAINS REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: value CALL xios(get_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(get_scalargroup_attr_hdl) SUBROUTINE xios(get_scalargroup_attr_hdl_) & ( scalargroup_hdl, axis_type_, bounds_, bounds_name_, comment_, group_ref_, label_, long_name_ & - , mask_, name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + , name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -246,8 +230,6 @@ CONTAINS CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: label_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ - LOGICAL , OPTIONAL, INTENT(OUT) :: mask_ - LOGICAL (KIND=C_BOOL) :: mask__tmp CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: positive_ INTEGER , OPTIONAL, INTENT(OUT) :: prec_ @@ -291,12 +273,6 @@ CONTAINS (scalargroup_hdl%daddr, long_name_, len(long_name_)) ENDIF - IF (PRESENT(mask_)) THEN - CALL cxios_get_scalargroup_mask & - (scalargroup_hdl%daddr, mask__tmp) - mask_ = mask__tmp - ENDIF - IF (PRESENT(name_)) THEN CALL cxios_get_scalargroup_name & (scalargroup_hdl%daddr, name_, len(name_)) @@ -335,8 +311,8 @@ CONTAINS END SUBROUTINE xios(get_scalargroup_attr_hdl_) SUBROUTINE xios(is_defined_scalargroup_attr) & - ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_id, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) :: scalargroup_hdl @@ -355,8 +331,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name LOGICAL(KIND=C_BOOL) :: long_name_tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask - LOGICAL(KIND=C_BOOL) :: mask_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name LOGICAL(KIND=C_BOOL) :: name_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive @@ -375,14 +349,14 @@ CONTAINS CALL xios(get_scalargroup_handle) & (scalargroup_id,scalargroup_hdl) CALL xios(is_defined_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(is_defined_scalargroup_attr) SUBROUTINE xios(is_defined_scalargroup_attr_hdl) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -400,8 +374,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name LOGICAL(KIND=C_BOOL) :: long_name_tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask - LOGICAL(KIND=C_BOOL) :: mask_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name LOGICAL(KIND=C_BOOL) :: name_tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive @@ -418,14 +390,14 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: value_tmp CALL xios(is_defined_scalargroup_attr_hdl_) & - ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, mask & - , name, positive, prec, scalar_ref, standard_name, unit, value ) + ( scalargroup_hdl, axis_type, bounds, bounds_name, comment, group_ref, label, long_name, name & + , positive, prec, scalar_ref, standard_name, unit, value ) END SUBROUTINE xios(is_defined_scalargroup_attr_hdl) SUBROUTINE xios(is_defined_scalargroup_attr_hdl_) & ( scalargroup_hdl, axis_type_, bounds_, bounds_name_, comment_, group_ref_, label_, long_name_ & - , mask_, name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) + , name_, positive_, prec_, scalar_ref_, standard_name_, unit_, value_ ) IMPLICIT NONE TYPE(txios(scalargroup)) , INTENT(IN) :: scalargroup_hdl @@ -443,8 +415,6 @@ CONTAINS LOGICAL(KIND=C_BOOL) :: label__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: long_name_ LOGICAL(KIND=C_BOOL) :: long_name__tmp - LOGICAL, OPTIONAL, INTENT(OUT) :: mask_ - LOGICAL(KIND=C_BOOL) :: mask__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: name_ LOGICAL(KIND=C_BOOL) :: name__tmp LOGICAL, OPTIONAL, INTENT(OUT) :: positive_ @@ -502,12 +472,6 @@ CONTAINS long_name_ = long_name__tmp ENDIF - IF (PRESENT(mask_)) THEN - mask__tmp = cxios_is_defined_scalargroup_mask & - (scalargroup_hdl%daddr) - mask_ = mask__tmp - ENDIF - IF (PRESENT(name_)) THEN name__tmp = cxios_is_defined_scalargroup_name & (scalargroup_hdl%daddr) diff --git a/xios_2311_src/src/interface/fortran_attr/scalar_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/scalar_interface_attr.F90 index 9d69f08d..1b7cdd04 100644 --- a/xios_2311_src/src/interface/fortran_attr/scalar_interface_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/scalar_interface_attr.F90 @@ -135,25 +135,6 @@ MODULE scalar_interface_attr END FUNCTION cxios_is_defined_scalar_long_name - SUBROUTINE cxios_set_scalar_mask(scalar_hdl, mask) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: scalar_hdl - LOGICAL (KIND=C_BOOL) , VALUE :: mask - END SUBROUTINE cxios_set_scalar_mask - - SUBROUTINE cxios_get_scalar_mask(scalar_hdl, mask) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: scalar_hdl - LOGICAL (KIND=C_BOOL) :: mask - END SUBROUTINE cxios_get_scalar_mask - - FUNCTION cxios_is_defined_scalar_mask(scalar_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_scalar_mask - INTEGER (kind = C_INTPTR_T), VALUE :: scalar_hdl - END FUNCTION cxios_is_defined_scalar_mask - - SUBROUTINE cxios_set_scalar_name(scalar_hdl, name, name_size) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: scalar_hdl diff --git a/xios_2311_src/src/interface/fortran_attr/scalargroup_interface_attr.F90 b/xios_2311_src/src/interface/fortran_attr/scalargroup_interface_attr.F90 index b1171ec7..875c7b10 100644 --- a/xios_2311_src/src/interface/fortran_attr/scalargroup_interface_attr.F90 +++ b/xios_2311_src/src/interface/fortran_attr/scalargroup_interface_attr.F90 @@ -156,25 +156,6 @@ MODULE scalargroup_interface_attr END FUNCTION cxios_is_defined_scalargroup_long_name - SUBROUTINE cxios_set_scalargroup_mask(scalargroup_hdl, mask) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: scalargroup_hdl - LOGICAL (KIND=C_BOOL) , VALUE :: mask - END SUBROUTINE cxios_set_scalargroup_mask - - SUBROUTINE cxios_get_scalargroup_mask(scalargroup_hdl, mask) BIND(C) - USE ISO_C_BINDING - INTEGER (kind = C_INTPTR_T), VALUE :: scalargroup_hdl - LOGICAL (KIND=C_BOOL) :: mask - END SUBROUTINE cxios_get_scalargroup_mask - - FUNCTION cxios_is_defined_scalargroup_mask(scalargroup_hdl) BIND(C) - USE ISO_C_BINDING - LOGICAL(kind=C_BOOL) :: cxios_is_defined_scalargroup_mask - INTEGER (kind = C_INTPTR_T), VALUE :: scalargroup_hdl - END FUNCTION cxios_is_defined_scalargroup_mask - - SUBROUTINE cxios_set_scalargroup_name(scalargroup_hdl, name, name_size) BIND(C) USE ISO_C_BINDING INTEGER (kind = C_INTPTR_T), VALUE :: scalargroup_hdl diff --git a/xios_2311_src/src/io/inetcdf4.cpp b/xios_2311_src/src/io/inetcdf4.cpp index 8860cb43..a959e321 100644 --- a/xios_2311_src/src/io/inetcdf4.cpp +++ b/xios_2311_src/src/io/inetcdf4.cpp @@ -27,6 +27,7 @@ namespace xios CNetCdfInterface::open(filename, NC_NOWRITE, this->ncidp); this->timeCounterName = timeCounterName; + if (!CNetCdfInterface::isDimExisted(this->ncidp, this->timeCounterName)) this->timeCounterName=this->getUnlimitedDimensionName() ; } @@ -88,6 +89,16 @@ namespace xios return retvalue; } + + bool CINetCDF4::hasUnlimitedDimension(const CVarPath* const path) + { + int dimid = 0; + int grpid = this->getGroup(path); + CNetCdfInterface::inqUnLimDim(grpid, dimid); + if (dimid==-1) return false ; + else return true ; + } + int CINetCDF4::getUnlimitedDimension(const CVarPath* const path) { int dimid = 0; @@ -173,11 +184,6 @@ namespace xios return retvalue; } - StdSize CINetCDF4::getNbOfTimestep(const CVarPath* const path) - { - return this->getDimensions(NULL, path)[this->getUnlimitedDimensionName(path)]; - } - std::set CINetCDF4::getBoundVariables(const CVarPath* const path) { std::set retvalue; @@ -337,6 +343,32 @@ namespace xios return false; } + template + bool CINetCDF4::hasAttribute(const StdString& name, const StdString* const var, const CVarPath* const path) + { + std::list atts = this->getAttributes(var, path); + std::list::const_iterator it = atts.begin(), end = atts.end(); + for (; it != end; it++) + { + const StdString& attname = *it; + if (attname.compare(0, name.size(), name) == 0) + { + std::pair attinfos = this->getAttribute(name, var, path); + std::vector retvalue(attinfos.second); + nc_type type = CNetCdfInterface::getNcType(); + if (attinfos.first == type) return true; + else return false ; + } + } + return false; + } + + template bool CINetCDF4::hasAttribute(const StdString& name, const StdString* const var, const CVarPath* const path); + template bool CINetCDF4::hasAttribute(const StdString& name, const StdString* const var, const CVarPath* const path); + template bool CINetCDF4::hasAttribute(const StdString& name, const StdString* const var, const CVarPath* const path); + template bool CINetCDF4::hasAttribute(const StdString& name, const StdString* const var, const CVarPath* const path); + + bool CINetCDF4::hasVariable(const StdString& name, const CVarPath* const path) { @@ -707,51 +739,20 @@ namespace xios sstart.push_back(0); scount.push_back(1); it++; - - if ( it == dimlist.end()) // scalar case - { - if (start && count) - { - scount.pop_back(); - scount.push_back((*count)[0]); - array_size *= (*count)[0]; - } - return ; - } } - - if ( it == dimlist.end()) // scalar case + for (int i = 0; it != dimlist.end(); it++, i++) { if (start && count) { - sstart.push_back((*start)[0]); - scount.push_back((*count)[0]); - array_size *= (*count)[0]; + sstart.push_back((*start)[i]); + scount.push_back((*count)[i]); + array_size *= (*count)[i]; } else { sstart.push_back(0); - scount.push_back(1); - array_size *= 1; - } - - } - else - { - for (int i = 0; it != dimlist.end(); it++, i++) - { - if (start && count) - { - sstart.push_back((*start)[i]); - scount.push_back((*count)[i]); - array_size *= (*count)[i]; - } - else - { - sstart.push_back(0); - scount.push_back(dimmap[*it]); - array_size *= dimmap[*it]; - } + scount.push_back(dimmap[*it]); + array_size *= dimmap[*it]; } } } @@ -793,7 +794,7 @@ namespace xios if (this->hasAttribute(CCFKeywords::XIOS_CF_units, &(*itList), path)) { StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &(*itList), path); - if (CCFConvention::XIOS_CF_Longitude_units().end() != CCFConvention::XIOS_CF_Longitude_units().find(unit)) + if (CCFConvention::XIOS_CF_Longitude_units.end() != CCFConvention::XIOS_CF_Longitude_units.find(unit)) { lonName = *itList; return lonName; @@ -815,7 +816,7 @@ namespace xios if (this->hasAttribute(CCFKeywords::XIOS_CF_units, &(*itList), path)) { StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &(*itList), path); - if (CCFConvention::XIOS_CF_Latitude_units().end() != CCFConvention::XIOS_CF_Latitude_units().find(unit)) + if (CCFConvention::XIOS_CF_Latitude_units.end() != CCFConvention::XIOS_CF_Latitude_units.find(unit)) { latName = *itList; return latName; @@ -841,8 +842,8 @@ namespace xios if (this->hasAttribute(CCFKeywords::XIOS_CF_units, &varname, path)) { StdString unit = this->getAttributeValue(CCFKeywords::XIOS_CF_units, &varname, path); - return (CCFConvention::XIOS_CF_Latitude_units().end() != CCFConvention::XIOS_CF_Latitude_units().find(unit) - || CCFConvention::XIOS_CF_Longitude_units().end() != CCFConvention::XIOS_CF_Longitude_units().find(unit)); + return (CCFConvention::XIOS_CF_Latitude_units.end() != CCFConvention::XIOS_CF_Latitude_units.find(unit) + || CCFConvention::XIOS_CF_Longitude_units.end() != CCFConvention::XIOS_CF_Longitude_units.find(unit)); } else return false ; } diff --git a/xios_2311_src/src/io/inetcdf4.hpp b/xios_2311_src/src/io/inetcdf4.hpp index 3fd1bf7a..8b91e0f2 100644 --- a/xios_2311_src/src/io/inetcdf4.hpp +++ b/xios_2311_src/src/io/inetcdf4.hpp @@ -39,7 +39,6 @@ namespace xios //------------------------------------------------------------- /// Getters /// - StdSize getNbOfTimestep(const CVarPath* const path = NULL); StdString getUnlimitedDimensionName(const CVarPath* const path = NULL); @@ -111,7 +110,9 @@ namespace xios /// Tests /// bool hasMissingValue(const StdString& name, const CVarPath* const path = NULL); - + bool hasAttribute(const StdString& name, const StdString* const var = NULL, const CVarPath* const path = NULL); + + template bool hasAttribute(const StdString& name, const StdString* const var = NULL, const CVarPath* const path = NULL); bool hasVariable(const StdString& name, const CVarPath* const path = NULL); @@ -143,6 +144,8 @@ namespace xios int getVariable(const StdString& varname, const CVarPath* const path = NULL); int getDimension(const StdString& dimname, const CVarPath* const path = NULL); int getUnlimitedDimension(const CVarPath* const path = NULL); + bool hasUnlimitedDimension(const CVarPath* const path = NULL); + int getAttributeId(const StdString& name, const StdString* const var = NULL, const CVarPath* const path = NULL); diff --git a/xios_2311_src/src/io/inetcdf4_impl.hpp b/xios_2311_src/src/io/inetcdf4_impl.hpp index 8fc71f4d..eacd2705 100644 --- a/xios_2311_src/src/io/inetcdf4_impl.hpp +++ b/xios_2311_src/src/io/inetcdf4_impl.hpp @@ -30,13 +30,8 @@ void CINetCDF4::getData(CArray& data, const StdString& var, << ", Data size = " << array_size << " ] Invalid array size"); } - - if (data.numElements()==0) - { - T data ; - CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], &data); // netcdf is very bad - } - else CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], data.dataFirst()); + + CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], data.dataFirst()); } } // namespace xios diff --git a/xios_2311_src/src/io/nc4_data_input.cpp b/xios_2311_src/src/io/nc4_data_input.cpp index abfd27db..79e6c898 100644 --- a/xios_2311_src/src/io/nc4_data_input.cpp +++ b/xios_2311_src/src/io/nc4_data_input.cpp @@ -34,7 +34,6 @@ namespace xios if (SuperClassWriter::isTemporal(fieldId)) { -// return SuperClassWriter::getDimensions(&fieldId)[SuperClassWriter::getUnlimitedDimensionName()]; return SuperClassWriter::getDimensions(&fieldId)[SuperClassWriter::getTimeCounterName()]; } @@ -42,21 +41,26 @@ namespace xios } CATCH - void CNc4DataInput::readFieldData_(CField* field, int record, CArray& dataOut) + void CNc4DataInput::readFieldData_(CField* field) TRY { CContext* context = CContext::getCurrent(); + CContextServer* server = context->server; - CGrid* grid = field->getGrid(); + CGrid* grid = field->grid; - if (!grid->doGridHaveDataToWrite()) if (SuperClass::type==MULTI_FILE || !isCollective) return; + if (!grid->doGridHaveDataToWrite()) + if (SuperClass::type==MULTI_FILE || !isCollective) return; StdString fieldId = field->getFieldOutputName(); + CArray fieldData(grid->getWrittenDataSize()); + if (!field->default_value.isEmpty()) fieldData = field->default_value; + switch (SuperClass::type) { case MULTI_FILE: - SuperClassWriter::getData(dataOut, fieldId, isCollective, record ); + SuperClassWriter::getData(fieldData, fieldId, isCollective, (field->getNStep() - 1)%field->nstepMax ); break; case ONE_FILE: { @@ -65,9 +69,8 @@ namespace xios CArray axisDomainOrder = grid->axis_domain_order; std::vector domainList = grid->getDomainList(); std::vector axisList = grid->getAxisList(); - std::vector scalarList = grid->getScalarList(); int numElement = axisDomainOrder.numElements(); - int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1 ; + int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; int idx = domainList.size() * 2 + axisList.size() - 1; start.reserve(idx+1); @@ -98,17 +101,26 @@ namespace xios { if (1 == axisDomainOrder.numElements()) { - CScalar* scalar = CScalar::get(scalarList[0]); start.push_back(0); - count.push_back(scalar->n); + count.push_back(1); } } } - SuperClassWriter::getData(dataOut, fieldId, isCollective, record, &start, &count); + SuperClassWriter::getData(fieldData, fieldId, isCollective, (field->getNStep() - 1)%field->nstepMax, &start, &count); break; } } + + field->inputField(fieldData); + + if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) + { + double scaleFactor = 1.0, addOffset = 0.0; + if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; + if (!field->add_offset.isEmpty()) addOffset = field->add_offset; + field->invertScaleFactorAddOffset(scaleFactor, addOffset); + } } CATCH @@ -117,7 +129,7 @@ namespace xios { StdString fieldId = field->getFieldOutputName(); - CGrid* grid = field->getGrid(); + CGrid* grid = field->grid; std::vector domainP = grid->getDomains(); std::vector axisP = grid->getAxis(); @@ -145,7 +157,7 @@ namespace xios // Remove unlimited dimension from the map, we dont need it anymore if (SuperClassWriter::isTemporal(fieldId)) { - dimSizeMap.erase(SuperClassWriter::getUnlimitedDimensionName()); + dimSizeMap.erase(SuperClassWriter::getTimeCounterName()); dimList.pop_front() ; // assume time dimension is first } @@ -181,6 +193,23 @@ namespace xios for (std::list::const_iterator it = dimList.begin(); it != dimList.end(); ++it) listDimSize.push_front(*dimSizeMap.find(*it)); } + + // read specific field attribute + if (field->add_offset.isEmpty()) + { + if (SuperClassWriter::hasAttribute("add_offset",&fieldId)) + field->add_offset = SuperClassWriter::getAttributeValue("add_offset",&fieldId)[0] ; + else if (SuperClassWriter::hasAttribute("add_offset",&fieldId)) + field->add_offset = SuperClassWriter::getAttributeValue("add_offset",&fieldId)[0] ; + } + + if (field->scale_factor.isEmpty()) + { + if (SuperClassWriter::hasAttribute("scale_factor",&fieldId)) + field->scale_factor = SuperClassWriter::getAttributeValue("scale_factor",&fieldId)[0] ; + else if (SuperClassWriter::hasAttribute("scale_factor",&fieldId)) + field->scale_factor = SuperClassWriter::getAttributeValue("scale_factor",&fieldId)[0] ; + } // Now process domain and axis CArray axisDomainOrder = grid->axis_domain_order; @@ -565,7 +594,9 @@ namespace xios if (!axis->begin.isEmpty()) begin = axis->begin.getValue(); if (!axis->n.isEmpty()) n = axis->n.getValue(); axis->value.resize(n); - for (int i = 0; i < n; ++i) axis->value(i) = readAxisValue(begin + i); + double convertFromFactor=1.0 ; + if (!axis->convert_from_factor.isEmpty()) convertFromFactor = axis->convert_from_factor ; + for (int i = 0; i < n; ++i) axis->value(i) = readAxisValue(begin + i)*convertFromFactor; } } } diff --git a/xios_2311_src/src/io/nc4_data_input.hpp b/xios_2311_src/src/io/nc4_data_input.hpp index 0700b753..ad82d7ca 100644 --- a/xios_2311_src/src/io/nc4_data_input.hpp +++ b/xios_2311_src/src/io/nc4_data_input.hpp @@ -36,7 +36,7 @@ namespace xios protected: // Read methods virtual StdSize getFieldNbRecords_(CField* field); - virtual void readFieldData_(CField* field, int record, CArray& data); + virtual void readFieldData_(CField* field); virtual void readFieldAttributes_(CField* field, bool readAttributeValues); virtual void closeFile_(void); diff --git a/xios_2311_src/src/io/nc4_data_output.cpp b/xios_2311_src/src/io/nc4_data_output.cpp index 1dbb554b..5891a5c6 100755 --- a/xios_2311_src/src/io/nc4_data_output.cpp +++ b/xios_2311_src/src/io/nc4_data_output.cpp @@ -56,6 +56,9 @@ namespace xios TRY { StdString lonName,latName ; + + domain->computeWrittenIndex(); + domain->computeWrittenCompressedIndex(comm_file); if (domain->type == CDomain::type_attr::unstructured) { @@ -67,6 +70,7 @@ namespace xios } CContext* context = CContext::getCurrent() ; + CContextServer* server=context->server ; if (domain->IsWritten(this->filename)) return; domain->checkAttributes(); @@ -141,6 +145,74 @@ namespace xios string lonid,latid,bounds_lonid,bounds_latid ; string areaId = "area" + appendDomid; +/* + StdString lonid_loc = (server->intraCommSize > 1) + ? StdString("lon").append(appendDomid).append("_local") + : lonid; + StdString latid_loc = (server->intraCommSize > 1) + ? StdString("lat").append(appendDomid).append("_local") + : latid; +*/ + + CArray& indexToWrite = domain->localIndexToWriteOnServer; + int nbWritten = indexToWrite.numElements(); + CArray writtenLat, writtenLon; + CArray writtenBndsLat, writtenBndsLon; + CArray writtenArea; + + if (domain->hasLonLat) + { + writtenLat.resize(nbWritten); + writtenLon.resize(nbWritten); + for (int idx = 0; idx < nbWritten; ++idx) + { + if (indexToWrite(idx) < 0) + { + writtenLat(idx) = -1.; // hole + writtenLon(idx) = -1.; + } + else + { + writtenLat(idx) = domain->latvalue(indexToWrite(idx)); + writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); + } + } + + if (domain->hasBounds) + { + int nvertex = domain->nvertex, idx; + writtenBndsLat.resize(nvertex, nbWritten); + writtenBndsLon.resize(nvertex, nbWritten); + CArray& boundslat = domain->bounds_latvalue; + CArray& boundslon = domain->bounds_lonvalue; + for (idx = 0; idx < nbWritten; ++idx) + for (int nv = 0; nv < nvertex; ++nv) + { + if (indexToWrite(idx) < 0) + { + writtenBndsLat(nv, idx) = -1.; // hole + writtenBndsLon(nv, idx) = -1.; + } + else + { + writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); + writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); + } + } + } + } + + if (domain->hasArea) + { + writtenArea.resize(nbWritten); + for (int idx = 0; idx < nbWritten; ++idx) + { + if (indexToWrite(idx) < 0) + writtenArea(idx) = -1.; + else + writtenArea(idx) = domain->areavalue(indexToWrite(idx)); + } + } try { @@ -173,7 +245,11 @@ namespace xios if (domain->hasBounds) SuperClassWriter::addDimension(dimVertId, domain->nvertex); - if (context->intraCommSize_ > 1) + int commRank ; + int commSize ; + MPI_Comm_rank(comm_file,&commRank) ; + MPI_Comm_size(comm_file,&commSize) ; + if (commSize > 1) { this->writeLocalAttributes(domain->ibegin, domain->ni, @@ -188,7 +264,7 @@ namespace xios domain->jbegin, domain->nj, domain->ni_glo,domain->nj_glo, - context->intraCommRank_,context->intraCommSize_); + commRank,commSize); } if (domain->hasLonLat) @@ -226,6 +302,21 @@ namespace xios dim0.push_back(dimYid); dim0.push_back(dimXid); + + // supress mask if (server->intraCommSize > 1) + // supress mask { + // supress mask SuperClassWriter::addVariable(maskid, NC_INT, dim0); + // supress mask + // supress mask this->writeMaskAttributes(maskid, + // supress mask domain->data_dim.getValue()/*, + // supress mask domain->data_ni.getValue(), + // supress mask domain->data_nj.getValue(), + // supress mask domain->data_ibegin.getValue(), + // supress mask domain->data_jbegin.getValue()*/); + // supress mask } + + //SuperClassWriter::setDefaultValue(maskid, &dvm); + if (domain->hasArea) { SuperClassWriter::addVariable(areaId, typePrec, dim0, compressionLevel); @@ -240,27 +331,27 @@ namespace xios switch (domain->type) { case CDomain::type_attr::curvilinear : - SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0); - SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0); + SuperClassWriter::writeData(writtenLat, latid, isCollective, 0); + SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0); break; case CDomain::type_attr::rectilinear : - CArray lat = domain->latvalue(Range(fromStart,toEnd,domain->ni)) ; + CArray lat = writtenLat(Range(fromStart,toEnd,domain->ni)) ; SuperClassWriter::writeData(CArray(lat.copy()), latid, isCollective, 0); - CArray lon = domain->lonvalue(Range(0,domain->ni-1)) ; + CArray lon = writtenLon(Range(0,domain->ni-1)) ; SuperClassWriter::writeData(CArray(lon.copy()), lonid, isCollective, 0); break; } if (domain->hasBounds) { - SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0); - SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0); + SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0); + SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0); } } if (domain->hasArea) { - SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0); + SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0); } SuperClassWriter::definition_start(); @@ -338,14 +429,23 @@ namespace xios { std::vector start(2) ; std::vector count(2) ; - start[1]=domain->ibegin; - start[0]=domain->jbegin; - count[1]=domain->ni ; count[0]=domain->nj ; +// Comment out: it is not working for a hole +// if (domain->isEmpty()) +// { +// start[0]=0 ; start[1]=0 ; +// count[0]=0 ; count[1]=0 ; +// } +// else + { + start[1]=domain->ibegin; + start[0]=domain->jbegin; + count[1]=domain->ni ; count[0]=domain->nj ; + } if (domain->hasLonLat) { - SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); - SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); + SuperClassWriter::writeData(writtenLat, latid, isCollective, 0,&start,&count); + SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0,&start,&count); } break; } @@ -355,16 +455,25 @@ namespace xios { std::vector start(1) ; std::vector count(1) ; - - start[0]=domain->jbegin; - count[0]=domain->nj; - CArray lat = domain->latvalue(Range(fromStart,toEnd,domain->ni)); - SuperClassWriter::writeData(CArray(lat.copy()), latid, isCollective, 0,&start,&count); - - start[0]=domain->ibegin; - count[0]=domain->ni; - CArray lon = domain->lonvalue(Range(0,domain->ni-1)); - SuperClassWriter::writeData(CArray(lon.copy()), lonid, isCollective, 0,&start,&count); + if (domain->isEmpty()) + { + start[0]=0 ; + count[0]=0 ; + SuperClassWriter::writeData(writtenLat, latid, isCollective, 0,&start,&count); + SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0,&start,&count); + } + else + { + start[0]=domain->jbegin; + count[0]=domain->nj; + CArray lat = writtenLat(Range(fromStart,toEnd,domain->ni)); + SuperClassWriter::writeData(CArray(lat.copy()), latid, isCollective, 0,&start,&count); + + start[0]=domain->ibegin; + count[0]=domain->ni; + CArray lon = writtenLon(Range(0,domain->ni-1)); + SuperClassWriter::writeData(CArray(lon.copy()), lonid, isCollective, 0,&start,&count); + } } break; } @@ -389,8 +498,8 @@ namespace xios count[0] = domain->nj; } - SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0, &start, &count); // will probably not working for rectilinear - SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0, &start, &count); + SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0, &start, &count); + SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0, &start, &count); } if (domain->hasArea) @@ -398,12 +507,20 @@ namespace xios std::vector start(2); std::vector count(2); - start[1] = domain->ibegin; - start[0] = domain->jbegin; - count[1] = domain->ni; - count[0] = domain->nj; + if (domain->isEmpty()) + { + start[0] = 0; start[1] = 0; + count[0] = 0; count[1] = 0; + } + else + { + start[1] = domain->ibegin; + start[0] = domain->jbegin; + count[1] = domain->ni; + count[0] = domain->nj; + } - SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0, &start, &count); + SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0, &start, &count); } SuperClassWriter::definition_start(); @@ -434,6 +551,7 @@ namespace xios void CNc4DataOutput::writeUnstructuredDomainUgrid(CDomain* domain) { CContext* context = CContext::getCurrent() ; + CContextServer* server=context->server ; if (domain->IsWritten(this->filename)) return; @@ -441,6 +559,7 @@ namespace xios // The first domain for the same mesh that will be written is that with the highest value of nvertex. // Thus the entire mesh connectivity will be generated at once. + if (isWrittenDomain(domid)) return ; else setWrittenDomain(domid); @@ -455,8 +574,6 @@ namespace xios std::vector dim0; StdString domainName = domain->name; - domain->assignMesh(domainName, domain->nvertex); - domain->mesh->createMeshEpsilon(context->intraComm_, domain->lonvalue, domain->latvalue, domain->bounds_lonvalue, domain->bounds_latvalue); StdString node_x = domainName + "_node_x"; StdString node_y = domainName + "_node_y"; @@ -486,6 +603,7 @@ namespace xios SuperClassWriter::addAttribute("topology_dimension", 2, &domainName); SuperClassWriter::addAttribute("node_coordinates", node_x + " " + node_y, &domainName); + try { switch (SuperClass::type) @@ -572,6 +690,8 @@ namespace xios { SuperClassWriter::addAttribute("edge_coordinates", edge_x + " " + edge_y, &domainName); SuperClassWriter::addAttribute("edge_node_connectivity", edge_nodes, &domainName); + SuperClassWriter::addAttribute("face_edge_connectivity", face_edges, &domainName); + SuperClassWriter::addAttribute("edge_face_connectivity", edge_faces, &domainName); SuperClassWriter::addDimension(dimEdge, domain->mesh->nbEdgesGlo); dim0.clear(); dim0.push_back(dimEdge); @@ -591,6 +711,7 @@ namespace xios SuperClassWriter::addAttribute("long_name", StdString("Maps every edge/link to two nodes that it connects."), &edge_nodes); SuperClassWriter::addAttribute("start_index", 0, &edge_nodes); } + SuperClassWriter::addAttribute("face_face_connectivity", face_faces, &domainName); SuperClassWriter::addAttribute("face_coordinates", face_x + " " + face_y, &domainName); SuperClassWriter::addAttribute("face_node_connectivity", face_nodes, &domainName); SuperClassWriter::addDimension(dimFace, domain->ni_glo); @@ -624,7 +745,7 @@ namespace xios dim0.push_back(dimEdge); dim0.push_back(dimTwo); SuperClassWriter::addVariable(edge_faces, NC_INT, dim0, compressionLevel); - SuperClassWriter::addAttribute("cf_role", StdString("edge_face connectivity"), &edge_faces); + SuperClassWriter::addAttribute("cf_role", StdString("edge_face_connectivity"), &edge_faces); SuperClassWriter::addAttribute("long_name", StdString("neighbor faces for edges"), &edge_faces); SuperClassWriter::addAttribute("start_index", 0, &edge_faces); SuperClassWriter::addAttribute("_FillValue", -999, &edge_faces); @@ -633,7 +754,7 @@ namespace xios dim0.push_back(dimFace); dim0.push_back(dimVertex); SuperClassWriter::addVariable(face_faces, NC_INT, dim0, compressionLevel); - SuperClassWriter::addAttribute("cf_role", StdString("face_face connectivity"), &face_faces); + SuperClassWriter::addAttribute("cf_role", StdString("face_face_connectivity"), &face_faces); SuperClassWriter::addAttribute("long_name", StdString("Indicates which other faces neighbor each face"), &face_faces); SuperClassWriter::addAttribute("start_index", 0, &face_faces); SuperClassWriter::addAttribute("_FillValue", 999999, &face_faces); @@ -692,6 +813,7 @@ namespace xios countEdges[0] = domain->ni; startNodes[0] = domain->mesh->node_start; countNodes[0] = domain->mesh->node_count; + if (countNodes[0]==0) startNodes[0]=0 ; // for netcdf error startEdgeNodes[0] = domain->ibegin; startEdgeNodes[1] = 0; countEdgeNodes[0] = domain->ni; @@ -728,19 +850,27 @@ namespace xios countFaces[0] = domain->ni ; startNodes[0] = domain->mesh->node_start; countNodes[0] = domain->mesh->node_count; + if (countNodes[0]==0) startNodes[0]=0; + startEdges[0] = domain->mesh->edge_start; countEdges[0] = domain->mesh->edge_count; + if (countEdges[0]==0) startEdges[0]=0 ; // for netcdf error + startEdgeNodes[0] = domain->mesh->edge_start; - startEdgeNodes[1] = 0; countEdgeNodes[0] = domain->mesh->edge_count; + if (countEdgeNodes[0]==0) startEdgeNodes[0]=0; // for netcdf error + startEdgeNodes[1] = 0; countEdgeNodes[1]= 2; + startEdgeFaces[0] = domain->mesh->edge_start; - startEdgeFaces[1]= 0; countEdgeFaces[0] = domain->mesh->edge_count; + if (countEdgeFaces[0]==0) startEdgeFaces[0]=0 ; // for netcdf error + startEdgeFaces[1]= 0; countEdgeFaces[1]= 2; + startFaceConctv[0] = domain->ibegin; - startFaceConctv[1] = 0; countFaceConctv[0] = domain->ni; + startFaceConctv[1] = 0; countFaceConctv[1] = domain->nvertex; } SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0, &startNodes, &countNodes); @@ -793,6 +923,7 @@ namespace xios void CNc4DataOutput::writeUnstructuredDomain(CDomain* domain) { CContext* context = CContext::getCurrent() ; + CContextServer* server=context->server ; if (domain->IsWritten(this->filename)) return; domain->checkAttributes(); @@ -829,6 +960,68 @@ namespace xios int nvertex = (domain->nvertex.isEmpty()) ? 0 : domain->nvertex; + CArray& indexToWrite = domain->localIndexToWriteOnServer; + int nbWritten = indexToWrite.numElements(); + CArray writtenLat, writtenLon; + CArray writtenBndsLat, writtenBndsLon; + CArray writtenArea; + + if (domain->hasLonLat) + { + writtenLat.resize(nbWritten); + writtenLon.resize(nbWritten); + for (int idx = 0; idx < nbWritten; ++idx) + { + if (indexToWrite(idx) < 0) + { + writtenLat(idx) = -1.; + writtenLon(idx) = -1.; + } + else + { + writtenLat(idx) = domain->latvalue(indexToWrite(idx)); + writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); + } + } + } + + if (domain->hasBounds) + { + int nvertex = domain->nvertex, idx; + writtenBndsLat.resize(nvertex, nbWritten); + writtenBndsLon.resize(nvertex, nbWritten); + CArray& boundslat = domain->bounds_latvalue; + CArray& boundslon = domain->bounds_lonvalue; + for (idx = 0; idx < nbWritten; ++idx) + { + for (int nv = 0; nv < nvertex; ++nv) + { + if (indexToWrite(idx) < 0) + { + writtenBndsLat(nv, idx) = -1.; + writtenBndsLon(nv, idx) = -1.; + } + else + { + writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); + writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); + } + } + } + } + + if (domain->hasArea) + { + writtenArea.resize(nbWritten); + for (int idx = 0; idx < nbWritten; ++idx) + { + if (indexToWrite(idx) < 0) + writtenArea(idx) = -1.; + else + writtenArea(idx) = domain->areavalue(indexToWrite(idx)); + } + } + try { switch (SuperClass::type) @@ -877,17 +1070,17 @@ namespace xios if (domain->hasLonLat) { - SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0); - SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0); + SuperClassWriter::writeData(writtenLat, latid, isCollective, 0); + SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0); if (domain->hasBounds) { - SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0); - SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0); + SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0); + SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0); } } if (domain->hasArea) - SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0); + SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0); SuperClassWriter::definition_start(); break ; @@ -959,17 +1152,17 @@ namespace xios if (domain->hasLonLat) { - SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); - SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); + SuperClassWriter::writeData(writtenLat, latid, isCollective, 0,&start,&count); + SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0,&start,&count); if (domain->hasBounds) { - SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0,&startBounds,&countBounds); - SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0,&startBounds,&countBounds); + SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0,&startBounds,&countBounds); + SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0,&startBounds,&countBounds); } } if (domain->hasArea) - SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0, &start, &count); + SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0, &start, &count); SuperClassWriter::definition_start(); @@ -999,6 +1192,9 @@ namespace xios if (axis->IsWritten(this->filename)) return; axis->checkAttributes(); + axis->computeWrittenIndex(); + axis->computeWrittenCompressedIndex(comm_file); + int size = (MULTI_FILE == SuperClass::type) ? axis->n.getValue() : axis->n_glo.getValue(); @@ -1098,7 +1294,34 @@ namespace xios } SuperClassWriter::definition_end(); - + + CArray& indexToWrite = axis->localIndexToWriteOnServer; + int nbWritten = indexToWrite.numElements(); + CArray axis_value(indexToWrite.numElements()); + if (!axis->value.isEmpty()) + { + for (int i = 0; i < nbWritten; i++) + { + if (indexToWrite(i) < 0) + axis_value(i) = -1; // Some value in case of a hole + else + axis_value(i) = axis->value(indexToWrite(i)); + } + } + CArray axis_bounds; + CArray axis_label; + if (!axis->label.isEmpty()) + { + axis_label.resize(indexToWrite.numElements()); + for (int i = 0; i < nbWritten; i++) + { + if (indexToWrite(i) < 0) + axis_label(i) = boost::lexical_cast(-1); // Some value in case of a hole + else + axis_label(i) = axis->label(indexToWrite(i)); + } + } + switch (SuperClass::type) { case MULTI_FILE: @@ -1106,13 +1329,29 @@ namespace xios if (axis->label.isEmpty()) { if (!axis->value.isEmpty()) - SuperClassWriter::writeData(axis->value, axisid, isCollective, 0); + SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); if (!axis->bounds.isEmpty()) - SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0); + { + axis_bounds.resize(2, indexToWrite.numElements()); + for (int i = 0; i < nbWritten; ++i) + { + if (indexToWrite(i) < 0) + { + axis_bounds(0, i) = -1.; // Some value in case of a hole + axis_bounds(1, i) = -1.; + } + else + { + axis_bounds(0, i) = axis->bounds(0, int(indexToWrite(i))); + axis_bounds(1, i) = axis->bounds(1, int(indexToWrite(i))); + } + } + SuperClassWriter::writeData(axis_bounds, axisBoundsId, isCollective, 0); + } } else - SuperClassWriter::writeData(axis->label, axisid, isCollective, 0); + SuperClassWriter::writeData(axis_label, axisid, isCollective, 0); SuperClassWriter::definition_start(); break; @@ -1129,17 +1368,33 @@ namespace xios if (axis->label.isEmpty()) { if (!axis->value.isEmpty()) - SuperClassWriter::writeData(axis->value, axisid, isCollective, 0, &start, &count); + SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); if (!axis->bounds.isEmpty()) - SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0, &startBounds, &countBounds); + { + axis_bounds.resize(2, indexToWrite.numElements()); + for (int i = 0; i < nbWritten; ++i) + { + if (indexToWrite(i) < 0) + { + axis_bounds(0, i) = -1.; + axis_bounds(1, i) = -1.; + } + else + { + axis_bounds(0, i) = axis->bounds(0, int(indexToWrite(i))); + axis_bounds(1, i) = axis->bounds(1, int(indexToWrite(i))); + } + } + SuperClassWriter::writeData(axis_bounds, axisBoundsId, isCollective, 0, &startBounds, &countBounds); + } } else { std::vector startLabel(2), countLabel(2); startLabel[0] = start[0]; startLabel[1] = 0; countLabel[0] = count[0]; countLabel[1] = stringArrayLen; - SuperClassWriter::writeData(axis->label, axisid, isCollective, 0, &startLabel, &countLabel); + SuperClassWriter::writeData(axis_label, axisid, isCollective, 0, &startLabel, &countLabel); } SuperClassWriter::definition_start(); @@ -1334,176 +1589,221 @@ namespace xios void CNc4DataOutput::writeGridCompressed_(CGrid* grid) { - if (grid->isScalarGrid() || grid->isWrittenCompressed(this->filename)) return; - - // NOTA : The cuurent algorithm to write compress elements of the grid - // will work pretting well when on server side you dont't get - // partial overlap on elements between differents participating process - // So the element must be totally distributed or non distributed - // If an element is partially overlaping betwwen process then the - // total compressed part will apear artificially greater than expected - // For the current implementation of writer which is decomposed only on - // one element, it will work as expected, but for future, it must be - // reconsidered again. - try - { - CArray axisDomainOrder = grid->axis_domain_order; - std::vector domainList = grid->getDomainList(); - std::vector axisList = grid->getAxisList(); - std::vector scalarList = grid->getScalarList(); - int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; - int commRank ; - MPI_Comm_rank(comm_file,&commRank) ; + if (grid->isScalarGrid() || grid->isWrittenCompressed(this->filename)) return; - std::vector dims; + try + { + CArray axisDomainOrder = grid->axis_domain_order; + std::vector domainList = grid->getDomainList(); + std::vector axisList = grid->getAxisList(); + std::vector scalarList = grid->getScalarList(); + int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; - for (int i = 0; i < numElement; ++i) - { - StdString varId, compress; - CArray indexes; - bool isDistributed; - size_t nbIndexes, totalNbIndexes, offset; - size_t firstGlobalIndex; - - if (2 == axisDomainOrder(i)) - { - CDomain* domain = CDomain::get(domainList[idxDomain]); - StdString domId = domain->getDomainOutputName(); - - if (!domain->isCompressible() - || domain->type == CDomain::type_attr::unstructured - || domain->isWrittenCompressed(this->filename) - || isWrittenCompressedDomain(domId)) - continue; - - // unstructured grid seems not be taken into account why ? + std::vector dims; - string lonName,latName ; + if (grid->isCompressible()) + { + StdString varId = grid->getId() + "_points"; - if (domain->lon_name.isEmpty()) - { - if (domain->type==CDomain::type_attr::curvilinear) lonName = "nav_lon"; - else lonName = "lon"; - } - else lonName = domain->lon_name; + int nbIndexes = (SuperClass::type == MULTI_FILE) ? grid->getNumberWrittenIndexes() : grid->getTotalNumberWrittenIndexes(); + SuperClassWriter::addDimension(varId, nbIndexes); - if (domain->lat_name.isEmpty()) - { - if (domain->type==CDomain::type_attr::curvilinear) latName = "nav_lat"; - else latName = "lat"; - } - else latName = domain->lat_name; - - StdString appendDomId = singleDomain ? "" : "_" + domId; - - varId = domId + "_points"; - compress = latName + appendDomId + " " + lonName + appendDomId; - - shared_ptr workflowView = domain->getLocalView(CElementView::WORKFLOW) ; - workflowView->getGlobalIndexView(indexes) ; - nbIndexes = workflowView->getSize() ; - isDistributed = domain->isDistributed(); - if (isDistributed) - { - MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; - if (commRank==0) offset=0 ; - MPI_Allreduce(&nbIndexes,&totalNbIndexes,1 , MPI_SIZE_T, MPI_SUM, comm_file) ; - } - else - { - offset=0 ; - totalNbIndexes = nbIndexes ; - } + dims.push_back(varId); + SuperClassWriter::addVariable(varId, NC_INT, dims); - firstGlobalIndex = domain->ibegin + domain->jbegin * domain->ni_glo; + StdOStringStream compress; + for (int i = numElement - 1; i >= 0; --i) + { + if (2 == axisDomainOrder(i)) + { + CDomain* domain = CDomain::get(domainList[domainList.size() - idxDomain - 1]); + StdString domId = domain->getDomainOutputName(); + StdString appendDomId = singleDomain ? "" : "_" + domId; - domain->addRelFileCompressed(this->filename); - setWrittenCompressedDomain(domId); - ++idxDomain; - } - else if (1 == axisDomainOrder(i)) - { - CAxis* axis = CAxis::get(axisList[idxAxis]); - StdString axisId = axis->getAxisOutputName(); - - if (!axis->isCompressible() - || axis->isWrittenCompressed(this->filename) - || isWrittenCompressedAxis(axisId)) - continue; - - varId = axisId + "_points"; - compress = axisId; - - shared_ptr workflowView = axis->getLocalView(CElementView::WORKFLOW) ; - workflowView->getGlobalIndexView(indexes) ; - nbIndexes = workflowView->getSize() ; - isDistributed = axis->isDistributed(); - if (isDistributed) - { - MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; - if (commRank==0) offset=0 ; - MPI_Allreduce(&nbIndexes,&totalNbIndexes,1 , MPI_SIZE_T, MPI_SUM, comm_file) ; - } - else - { - offset=0 ; - totalNbIndexes = nbIndexes ; - } - firstGlobalIndex = axis->begin; - - axis->addRelFileCompressed(this->filename); - setWrittenCompressedAxis(axisId); - ++idxAxis; - } - else - { - //for scalar - } + switch (domain->type) + { + case CDomain::type_attr::curvilinear: + compress << "y" << appendDomId << " x" << appendDomId; + break; + case CDomain::type_attr::rectilinear: + compress << "lat" << appendDomId << " lon" << appendDomId; + break; + case CDomain::type_attr::unstructured: + StdString cellName = (!domain->dim_i_name.isEmpty()) ? cellName=domain->dim_i_name : "cell"; + compress << cellName << appendDomId; +// compress << "cell" << appendDomId; + break; + } + ++idxDomain; + } + else if (1 == axisDomainOrder(i)) + { + CAxis* axis = CAxis::get(axisList[axisList.size() - idxAxis - 1]); + compress << axis->getAxisOutputName(); + ++idxAxis; + } + else + { + CScalar* scalar = CScalar::get(scalarList[scalarList.size() - idxScalar - 1]); + compress << scalar->getScalarOutputName(); + ++idxScalar; + } - if (!varId.empty()) - { - SuperClassWriter::addDimension(varId, (SuperClass::type == MULTI_FILE) ? nbIndexes : totalNbIndexes); + if (i != 0) compress << ' '; + } + SuperClassWriter::addAttribute("compress", compress.str(), &varId); - dims.clear(); - dims.push_back(varId); - SuperClassWriter::addVariable(varId, NC_UINT64, dims); + CArray indexes(grid->getNumberWrittenIndexes()); + indexes = grid->localIndexToWriteOnServer; - SuperClassWriter::addAttribute("compress", compress, &varId); + switch (SuperClass::type) + { + case (MULTI_FILE): + { + SuperClassWriter::writeData(indexes, varId, isCollective, 0); + break; + } + case (ONE_FILE): + { + if (grid->doGridHaveDataDistributed()) + grid->getDistributionServer()->computeGlobalIndex(indexes); - switch (SuperClass::type) - { - case (MULTI_FILE): - { - indexes -= firstGlobalIndex; - SuperClassWriter::writeData(indexes, varId, isCollective, 0); - break; - } - case (ONE_FILE): - { - std::vector start, count; - start.push_back(offset); - count.push_back(nbIndexes); + std::vector start, count; + start.push_back(grid->getOffsetWrittenIndexes()); + count.push_back(grid->getNumberWrittenIndexes()); - SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); - break; - } - } + SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); + break; + } + } + } + else + { + for (int i = 0; i < numElement; ++i) + { + StdString varId, compress; + CArray indexes; + bool isDistributed; + StdSize nbIndexes, totalNbIndexes, offset; + int firstGlobalIndex; + + if (2 == axisDomainOrder(i)) + { + CDomain* domain = CDomain::get(domainList[idxDomain]); + StdString domId = domain->getDomainOutputName(); + + if (!domain->isCompressible() + || domain->type == CDomain::type_attr::unstructured + || domain->isWrittenCompressed(this->filename) + || isWrittenCompressedDomain(domId)) + continue; + + StdString appendDomId = singleDomain ? "" : "_" + domId; + + varId = domId + "_points"; + switch (domain->type) + { + case CDomain::type_attr::curvilinear: + compress = "y" + appendDomId + " x" + appendDomId; + break; + case CDomain::type_attr::rectilinear: + compress = "lat" + appendDomId + " lon" + appendDomId; + break; + } + + // indexes.resize(domain->compressedIndexToWriteOnServer[comm_file].numElements()); + // indexes = domain->compressedIndexToWriteOnServer[com_file]; + indexes.resize(domain->getCompressedIndexToWriteOnServer(comm_file).numElements()); + indexes = domain->getCompressedIndexToWriteOnServer(comm_file); + + isDistributed = domain->isDistributed(); + nbIndexes = domain->getNumberWrittenIndexes(comm_file); + totalNbIndexes = domain->getTotalNumberWrittenIndexes(comm_file); + offset = domain->getOffsetWrittenIndexes(comm_file); + firstGlobalIndex = domain->ibegin + domain->jbegin * domain->ni_glo; + + domain->addRelFileCompressed(this->filename); + setWrittenCompressedDomain(domId); + ++idxDomain; + } + else if (1 == axisDomainOrder(i)) + { + CAxis* axis = CAxis::get(axisList[idxAxis]); + StdString axisId = axis->getAxisOutputName(); + + if (!axis->isCompressible() + || axis->isWrittenCompressed(this->filename) + || isWrittenCompressedAxis(axisId)) + continue; + + varId = axisId + "_points"; + compress = axisId; + + // indexes.resize(axis->compressedIndexToWriteOnServer.numElements()); + // indexes = axis->compressedIndexToWriteOnServer; + + indexes.resize(axis->getCompressedIndexToWriteOnServer(comm_file).numElements()); + indexes = axis->getCompressedIndexToWriteOnServer(comm_file); + + isDistributed = axis->isDistributed(); + nbIndexes = axis->getNumberWrittenIndexes(comm_file); + totalNbIndexes = axis->getTotalNumberWrittenIndexes(comm_file); + offset = axis->getOffsetWrittenIndexes(comm_file); + firstGlobalIndex = axis->begin; + + axis->addRelFileCompressed(this->filename); + setWrittenCompressedAxis(axisId); + ++idxAxis; + } + else + { + } + + if (!varId.empty()) + { + SuperClassWriter::addDimension(varId, (SuperClass::type == MULTI_FILE) ? nbIndexes : totalNbIndexes); + + dims.clear(); + dims.push_back(varId); + SuperClassWriter::addVariable(varId, NC_INT, dims); + + SuperClassWriter::addAttribute("compress", compress, &varId); + + switch (SuperClass::type) + { + case (MULTI_FILE): + { + indexes -= firstGlobalIndex; + SuperClassWriter::writeData(indexes, varId, isCollective, 0); + break; + } + case (ONE_FILE): + { + std::vector start, count; + start.push_back(offset); + count.push_back(nbIndexes); + + SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); + break; + } + } + } } - } + } - grid->addRelFileCompressed(this->filename); - } - catch (CNetCdfException& e) - { - StdString msg("On writing compressed grid : "); - msg.append(grid->getId()); msg.append("\n"); - msg.append("In the context : "); - CContext* context = CContext::getCurrent(); - msg.append(context->getId()); msg.append("\n"); - msg.append(e.what()); - ERROR("CNc4DataOutput::writeGridCompressed_(CGrid* grid)", << msg); - } - } + grid->addRelFileCompressed(this->filename); + } + catch (CNetCdfException& e) + { + StdString msg("On writing compressed grid : "); + msg.append(grid->getId()); msg.append("\n"); + msg.append("In the context : "); + CContext* context = CContext::getCurrent(); + msg.append(context->getId()); msg.append("\n"); + msg.append(e.what()); + ERROR("CNc4DataOutput::writeGridCompressed_(CGrid* grid)", << msg); + } + } //-------------------------------------------------------------- @@ -1529,9 +1829,10 @@ namespace xios void CNc4DataOutput::writeField_(CField* field) { CContext* context = CContext::getCurrent() ; + CContextServer* server=context->server ; std::vector dims, coodinates; - CGrid* grid = field->getGrid(); + CGrid* grid = field->grid; if (!grid->doGridHaveDataToWrite()) if (SuperClass::type==MULTI_FILE) return ; @@ -1712,10 +2013,18 @@ namespace xios dims.push_back(timeid); } - while (!dimIdList.empty()) + if (compressedOutput && grid->isCompressible()) { - dims.push_back(dimIdList.back()); - dimIdList.pop_back(); + dims.push_back(grid->getId() + "_points"); + field->setUseCompressedOutput(); + } + else + { + while (!dimIdList.empty()) + { + dims.push_back(dimIdList.back()); + dimIdList.pop_back(); + } } while (!dimCoordList.empty()) @@ -1862,7 +2171,7 @@ namespace xios SuperClassWriter::setDefaultValue(fieldid, (double*)NULL); if (field->compression_level.isEmpty()) - field->compression_level = field->getRelFile()->compression_level.isEmpty() ? 0 : field->getRelFile()->compression_level; + field->compression_level = field->file->compression_level.isEmpty() ? 0 : field->file->compression_level; SuperClassWriter::setCompressionLevel(fieldid, field->compression_level); { // Ecriture des coordonnes @@ -2061,21 +2370,21 @@ namespace xios //--------------------------------------------------------------- - int CNc4DataOutput::writeFieldData_ (CField* field, const CArray& data, const CDate& lastWrite, - const CDate& currentWrite, int nstep) + void CNc4DataOutput::writeFieldData_ (CField* field) { CContext* context = CContext::getCurrent(); - CGrid* grid = field->getGrid(); - - if (nstep<1) + CContextServer* server = context->server; + CGrid* grid = field->grid; + + if (field->getNStep()<1) { - return nstep; + return; } if (!grid->doGridHaveDataToWrite()) if (SuperClass::type == MULTI_FILE || !isCollective) { - return nstep; + return; } StdString fieldid = field->getFieldOutputName(); @@ -2093,14 +2402,14 @@ namespace xios if (!field->wasWritten()) { - if (appendMode && field->getRelFile()->record_offset.isEmpty() && + if (appendMode && field->file->record_offset.isEmpty() && field->getOperationTimeType() != func::CFunctor::once) { double factorUnit; - if (!field->getRelFile()->time_units.isEmpty() && field->getRelFile()->time_units==CFile::time_units_attr::days) + if (!field->file->time_units.isEmpty() && field->file->time_units==CFile::time_units_attr::days) factorUnit=context->getCalendar()->getDayLengthInSeconds() ; else factorUnit=1 ; - nstep = getRecordFromTime(currentWrite,factorUnit) + 1; + field->resetNStep(getRecordFromTime(field->last_Write_srv,factorUnit) + 1); } field->setWritten(); @@ -2119,11 +2428,14 @@ namespace xios if (wtime) { + Time lastWrite = field->last_Write_srv; + Time lastLastWrite = field->lastlast_Write_srv; + if (field->hasTimeInstant) { - time_data(0) = time_data_bound(1) = (Time) lastWrite; - time_data_bound(0) = time_data_bound(1) = (Time) currentWrite; + time_data(0) = time_data_bound(1) = lastWrite; + time_data_bound(0) = time_data_bound(1) = lastWrite; if (timeCounterType==instant) { time_counter(0) = time_data(0); @@ -2135,9 +2447,9 @@ namespace xios } else if (field->hasTimeCentered) { - time_data(0) = ((Time)currentWrite + (Time)lastWrite) / 2; - time_data_bound(0) = (Time)lastWrite; - time_data_bound(1) = (Time)currentWrite; + time_data(0) = (lastWrite + lastLastWrite) / 2; + time_data_bound(0) = lastLastWrite; + time_data_bound(1) = lastWrite; if (timeCounterType==centered) { time_counter(0) = time_data(0) ; @@ -2150,12 +2462,12 @@ namespace xios if (timeCounterType==record) { - time_counter(0) = nstep - 1; - time_counter_bound(0) = time_counter_bound(1) = nstep - 1; + time_counter(0) = field->getNStep() - 1; + time_counter_bound(0) = time_counter_bound(1) = field->getNStep() - 1; wtimeCounter=true ; } - if (!field->getRelFile()->time_units.isEmpty() && field->getRelFile()->time_units==CFile::time_units_attr::days) + if (!field->file->time_units.isEmpty() && field->file->time_units==CFile::time_units_attr::days) { double secByDay=context->getCalendar()->getDayLengthInSeconds() ; time_data/=secByDay; @@ -2165,29 +2477,56 @@ namespace xios } } - bool isRoot = (context->intraCommRank_ == 0); + int commRank ; + MPI_Comm_rank(comm_file,&commRank) ; + bool isRoot = (commRank == 0); + + if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) + { + double scaleFactor = 1.0; + double addOffset = 0.0; + if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; + if (!field->add_offset.isEmpty()) addOffset = field->add_offset; + field->scaleFactorAddOffset(scaleFactor, addOffset); + } try { + size_t writtenSize; + if (field->getUseCompressedOutput()) + writtenSize = grid->getNumberWrittenIndexes(); + else + writtenSize = grid->getWrittenDataSize(); + + CArray fieldData(writtenSize); + if (!field->default_value.isEmpty()) fieldData = field->default_value; + + if (field->getUseCompressedOutput()) + field->outputCompressedField(fieldData); + else + field->outputField(fieldData); + + if (!field->prec.isEmpty() && field->prec == 2) fieldData = round(fieldData); + switch (SuperClass::type) { case (MULTI_FILE) : { CTimer::get("Files : writing data").resume(); - SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1); + SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep() - 1); CTimer::get("Files : writing data").suspend(); if (wtime) { CTimer::get("Files : writing time axis").resume(); if ( wtimeData) { - SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); - SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); + SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot); + SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot); } if (wtimeCounter) { - SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); - if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); + SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1,isRoot); + if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot); } CTimer::get("Files : writing time axis").suspend(); } @@ -2200,79 +2539,66 @@ namespace xios if (field->getUseCompressedOutput()) { - CArray axisDomainOrder = grid->axis_domain_order; - std::vector domainList = grid->getDomainList(); - std::vector axisList = grid->getAxisList(); - int numElement = axisDomainOrder.numElements(); - int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; - int idx = domainList.size() * 2 + axisList.size() - 1; - int commRank ; - - MPI_Comm_rank(comm_file,&commRank) ; + if (grid->isCompressible()) + { + start.push_back(grid->getOffsetWrittenIndexes()); + count.push_back(grid->getNumberWrittenIndexes()); + } + else + { + CArray axisDomainOrder = grid->axis_domain_order; + std::vector domainList = grid->getDomainList(); + std::vector axisList = grid->getAxisList(); + int numElement = axisDomainOrder.numElements(); + int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; + int idx = domainList.size() * 2 + axisList.size() - 1; - start.reserve(idx+1); - count.reserve(idx+1); + start.reserve(idx+1); + count.reserve(idx+1); - for (int i = numElement - 1; i >= 0; --i) - { - if (2 == axisDomainOrder(i)) + for (int i = numElement - 1; i >= 0; --i) { - CDomain* domain = CDomain::get(domainList[idxDomain]); - - if (domain->isCompressible()) + if (2 == axisDomainOrder(i)) { - size_t offset ; - size_t nbIndexes = domain->getLocalView(CElementView::WORKFLOW)->getSize() ; - if (domain->isDistributed()) + CDomain* domain = CDomain::get(domainList[idxDomain]); + + if (domain->isCompressible()) { - MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; - if (commRank==0) offset=0 ; + start.push_back(domain->getOffsetWrittenIndexes(comm_file)); + count.push_back(domain->getNumberWrittenIndexes(comm_file)); + idx -= 2; } - else offset=0 ; - - start.push_back(offset); - count.push_back(nbIndexes); - idx -= 2; - } - else - { - if ((domain->type) != CDomain::type_attr::unstructured) + else { - start.push_back(domain->jbegin); - count.push_back(domain->nj); + if ((domain->type) != CDomain::type_attr::unstructured) + { + start.push_back(domain->jbegin); + count.push_back(domain->nj); + } + --idx; + start.push_back(domain->ibegin); + count.push_back(domain->ni); + --idx; } - --idx; - start.push_back(domain->ibegin); - count.push_back(domain->ni); - --idx; + --idxDomain; } - --idxDomain; - } - else if (1 == axisDomainOrder(i)) - { - CAxis* axis = CAxis::get(axisList[idxAxis]); - - if (axis->isCompressible()) + else if (1 == axisDomainOrder(i)) { - size_t offset ; - size_t nbIndexes = axis->getLocalView(CElementView::WORKFLOW)->getSize() ; - if (axis->isDistributed()) + CAxis* axis = CAxis::get(axisList[idxAxis]); + + if (axis->isCompressible()) { - MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; - if (commRank==0) offset=0 ; + start.push_back(axis->getOffsetWrittenIndexes(comm_file)); + count.push_back(axis->getNumberWrittenIndexes(comm_file)); } - else offset=0 ; - - start.push_back(offset); - count.push_back(nbIndexes); - } - else - { - start.push_back(axis->begin); - count.push_back(axis->n); + else + { + start.push_back(axis->begin); + count.push_back(axis->n); + } + --idxAxis; + --idx; } - --idxAxis; - --idx; } } } @@ -2281,7 +2607,6 @@ namespace xios CArray axisDomainOrder = grid->axis_domain_order; std::vector domainList = grid->getDomainList(); std::vector axisList = grid->getAxisList(); - std::vector scalarList = grid->getScalarList() ; int numElement = axisDomainOrder.numElements(); int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; int idx = domainList.size() * 2 + axisList.size() - 1; @@ -2318,9 +2643,8 @@ namespace xios { if (1 == axisDomainOrder.numElements()) { - CScalar* scalar = CScalar::get(scalarList[scalarList.size()-1]); start.push_back(0); - count.push_back(scalar->n); + count.push_back(1); } --idx; } @@ -2329,7 +2653,7 @@ namespace xios CTimer::get("Files : writing data").resume(); - SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1, &start, &count); + SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep() - 1, &start, &count); CTimer::get("Files : writing data").suspend(); if (wtime) @@ -2337,13 +2661,13 @@ namespace xios CTimer::get("Files : writing time axis").resume(); if ( wtimeData) { - SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); - SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); + SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot); + SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot); } if (wtimeCounter) { - SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); - if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); + SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1,isRoot); + if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot); } CTimer::get("Files : writing time axis").suspend(); @@ -2352,7 +2676,6 @@ namespace xios break; } } - return nstep ; } catch (CNetCdfException& e) { @@ -2385,14 +2708,14 @@ namespace xios StdString timeBoundId("axis_nbounds"); StdString strTimeUnits ; - if (!field->getRelFile()->time_units.isEmpty() && field->getRelFile()->time_units==CFile::time_units_attr::days) strTimeUnits="days since " ; + if (!field->file->time_units.isEmpty() && field->file->time_units==CFile::time_units_attr::days) strTimeUnits="days since " ; else strTimeUnits="seconds since " ; if (field->getOperationTimeType() == func::CFunctor::instant) field->hasTimeInstant = true; if (field->getOperationTimeType() == func::CFunctor::centered) field->hasTimeCentered = true; - if (field->getRelFile()->time_counter.isEmpty()) + if (field->file->time_counter.isEmpty()) { if (timeCounterType==none) createTimeCounterAxis=true ; if (field->hasTimeCentered) @@ -2406,7 +2729,7 @@ namespace xios if (!hasTimeInstant) createInstantAxis=true ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::instant) + else if (field->file->time_counter==CFile::time_counter_attr::instant) { if (field->hasTimeCentered) { @@ -2419,7 +2742,7 @@ namespace xios if (!hasTimeInstant) createInstantAxis=true ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::centered) + else if (field->file->time_counter==CFile::time_counter_attr::centered) { if (field->hasTimeCentered) { @@ -2432,7 +2755,7 @@ namespace xios if (!hasTimeInstant) createInstantAxis=true ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::instant_exclusive) + else if (field->file->time_counter==CFile::time_counter_attr::instant_exclusive) { if (field->hasTimeCentered) { @@ -2444,7 +2767,7 @@ namespace xios timeCounterType=instant ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::centered_exclusive) + else if (field->file->time_counter==CFile::time_counter_attr::centered_exclusive) { if (field->hasTimeCentered) { @@ -2456,7 +2779,7 @@ namespace xios if (!hasTimeInstant) createInstantAxis=true ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::exclusive) + else if (field->file->time_counter==CFile::time_counter_attr::exclusive) { if (field->hasTimeCentered) { @@ -2477,7 +2800,7 @@ namespace xios } } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::none) + else if (field->file->time_counter==CFile::time_counter_attr::none) { if (field->hasTimeCentered) { @@ -2488,7 +2811,7 @@ namespace xios if (!hasTimeInstant) createInstantAxis=true ; } } - else if (field->getRelFile()->time_counter==CFile::time_counter_attr::record) + else if (field->file->time_counter==CFile::time_counter_attr::record) { if (timeCounterType==none) createTimeCounterAxis=true ; timeCounterType=record ; @@ -2559,8 +2882,8 @@ namespace xios SuperClassWriter::addVariable(axisId, NC_DOUBLE, dims); SuperClassWriter::addAttribute("axis", string("T"), &axisId); - if (field->getRelFile()->time_counter.isEmpty() || - (field->getRelFile()->time_counter != CFile::time_counter_attr::record)) + if (field->file->time_counter.isEmpty() || + (field->file->time_counter != CFile::time_counter_attr::record)) { CDate timeOrigin = cal->getTimeOrigin(); StdString strTimeOrigin = timeOrigin.toString(); @@ -2572,7 +2895,7 @@ namespace xios } // Adding time_counter_bound dimension - if (field->getRelFile()->time_counter.isEmpty() || (field->getRelFile()->time_counter != CFile::time_counter_attr::record)) + if (field->file->time_counter.isEmpty() || (field->file->time_counter != CFile::time_counter_attr::record)) { if (!SuperClassWriter::varExist(axisBoundId)) { diff --git a/xios_2311_src/src/io/nc4_data_output.hpp b/xios_2311_src/src/io/nc4_data_output.hpp index d2feeb0b..49690db5 100644 --- a/xios_2311_src/src/io/nc4_data_output.hpp +++ b/xios_2311_src/src/io/nc4_data_output.hpp @@ -55,7 +55,7 @@ namespace xios virtual void writeField_ (CField* field); virtual void writeAttribute_(CVariable* var); virtual void writeAttribute_(CVariable* var, const string& fieldId); - virtual int writeFieldData_(CField* field, const CArray& data, const CDate& lastWrite, const CDate& currentWrite, int nstep); + virtual void writeFieldData_(CField* field); virtual void writeFile_ (CFile* file); virtual void closeFile_ (void); virtual void syncFile_ (void); diff --git a/xios_2311_src/src/io/netCdfInterface.cpp b/xios_2311_src/src/io/netCdfInterface.cpp index deefeb6f..b456afb4 100644 --- a/xios_2311_src/src/io/netCdfInterface.cpp +++ b/xios_2311_src/src/io/netCdfInterface.cpp @@ -892,12 +892,6 @@ int CNetCdfInterface::ncGetAttType(int ncid, int varid, const char* attrName, lo return nc_get_att_long(ncid, varid, attrName, data); } -template<> -int CNetCdfInterface::ncGetAttType(int ncid, int varid, const char* attrName, size_t* data) -{ - return nc_get_att_ulonglong(ncid, varid, attrName, (unsigned long long*)data); -} - template<> int CNetCdfInterface::ncGetAttType(int ncid, int varid, const char* attrName, short* data) { @@ -939,13 +933,6 @@ int CNetCdfInterface::ncPutAttType(int ncid, int varid, const char* attrName, return nc_put_att_long(ncid, varid, attrName, NC_LONG, numVal, data); } -template<> -int CNetCdfInterface::ncPutAttType(int ncid, int varid, const char* attrName, - StdSize numVal, const size_t* data) -{ - return nc_put_att_ulonglong(ncid, varid, attrName, NC_UINT64, numVal, (unsigned long long*) data); -} - template<> int CNetCdfInterface::ncPutAttType(int ncid, int varid, const char* attrName, StdSize numVal, const short* data) @@ -979,12 +966,6 @@ int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, c return nc_get_vara_int(ncid, varid, start, count, data); } -template<> -int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, size_t* data) -{ - return nc_get_vara_ulonglong(ncid, varid, start, count, (unsigned long long*) data); -} - template<> int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, char* data) { @@ -1010,12 +991,6 @@ int CNetCdfInterface::ncPutVaraType(int ncid, int varid, const StdSize* start, c return nc_put_vara_int(ncid, varid, start, count, data); } -template<> -int CNetCdfInterface::ncPutVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, const size_t* data) -{ - return nc_put_vara_ulonglong(ncid, varid, start, count, (unsigned long long*)data); -} - template<> int CNetCdfInterface::ncPutVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, const char* data) { diff --git a/xios_2311_src/src/io/netCdfInterface_decl.cpp b/xios_2311_src/src/io/netCdfInterface_decl.cpp index 5235720a..83f9af18 100644 --- a/xios_2311_src/src/io/netCdfInterface_decl.cpp +++ b/xios_2311_src/src/io/netCdfInterface_decl.cpp @@ -19,7 +19,6 @@ namespace xios macroAtt(double) macroAtt(float) macroAtt(int) - macroAtt(size_t) macroAtt(long) macroAtt(short) macroAtt(char) @@ -33,7 +32,6 @@ namespace xios macroPutVar(double) macroPutVar(float) macroPutVar(int) - macroPutVar(size_t) macroPutVar(char) #define macroType(type, ncType) \ @@ -42,7 +40,6 @@ namespace xios macroType(double, NC_DOUBLE) macroType(float, NC_FLOAT) macroType(int, NC_INT) - macroType(size_t, NC_UINT64) macroType(long, NC_LONG) macroType(short, NC_SHORT) macroType(char, NC_CHAR) diff --git a/xios_2311_src/src/io/netCdf_cf_constant.cpp b/xios_2311_src/src/io/netCdf_cf_constant.cpp deleted file mode 100755 index 2ed32d8c..00000000 --- a/xios_2311_src/src/io/netCdf_cf_constant.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "netCdf_cf_constant.hpp" - -namespace xios -{ - std::set CCFConvention::XIOS_CF_Latitude_units_; - std::set CCFConvention::XIOS_CF_Longitude_units_; - const StdString CCFKeywords::XIOS_CF_units("units"); - const StdString CCFKeywords::XIOS_CF_standard_name("standard_name"); - const StdString CCFKeywords::XIOS_CF_coordinates("coordinates"); - const StdString CCFKeywords::XIOS_CF_bounds("bounds"); -} \ No newline at end of file diff --git a/xios_2311_src/src/io/netCdf_cf_constant.hpp b/xios_2311_src/src/io/netCdf_cf_constant.hpp index ffed83cd..959c86e1 100644 --- a/xios_2311_src/src/io/netCdf_cf_constant.hpp +++ b/xios_2311_src/src/io/netCdf_cf_constant.hpp @@ -6,8 +6,8 @@ namespace xios { -//const StdString CFLatUnits[] = {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"}; -//const StdString CFLonUnits[] = {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"}; +const StdString CFLatUnits[] = {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"}; +const StdString CFLonUnits[] = {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"}; struct CCFKeywords { @@ -16,27 +16,23 @@ struct CCFKeywords static const StdString XIOS_CF_coordinates; static const StdString XIOS_CF_bounds; }; +const StdString CCFKeywords::XIOS_CF_units("units"); +const StdString CCFKeywords::XIOS_CF_standard_name("standard_name"); +const StdString CCFKeywords::XIOS_CF_coordinates("coordinates"); +const StdString CCFKeywords::XIOS_CF_bounds("bounds"); struct CCFConvention { - static const std::set& XIOS_CF_Latitude_units() - { - if (XIOS_CF_Longitude_units_.empty()) XIOS_CF_Latitude_units_= {"degrees_north", "degree_north", "degree_N", "degrees_N", "degreeN", "degreesN"}; - return XIOS_CF_Latitude_units_ ; - } - - static const std::set& XIOS_CF_Longitude_units() - { - if (XIOS_CF_Longitude_units_.empty()) XIOS_CF_Longitude_units_= {"degrees_east", "degree_east", "degree_E", "degrees_E", "degreeE", "degreesE"}; - return XIOS_CF_Longitude_units_ ; - } - static void releaseStaticAllocation(void) { XIOS_CF_Latitude_units_.clear() ; XIOS_CF_Longitude_units_.clear() ; } + static const std::set XIOS_CF_Latitude_units; + static const std::set XIOS_CF_Longitude_units; + private: CCFConvention(); - static std::set XIOS_CF_Latitude_units_; - static std::set XIOS_CF_Longitude_units_; }; +const std::set CCFConvention::XIOS_CF_Latitude_units(CFLatUnits, CFLatUnits+sizeof(CFLatUnits)/sizeof(CFLatUnits[0])); +const std::set CCFConvention::XIOS_CF_Longitude_units(CFLonUnits, CFLonUnits+sizeof(CFLonUnits)/sizeof(CFLonUnits[0])); + } // namespace xios #endif //__XIOS_INETCDF4_IMPL__ diff --git a/xios_2311_src/src/io/onetcdf4.cpp b/xios_2311_src/src/io/onetcdf4.cpp index a5fd68c2..06c32cc1 100644 --- a/xios_2311_src/src/io/onetcdf4.cpp +++ b/xios_2311_src/src/io/onetcdf4.cpp @@ -476,10 +476,9 @@ namespace xios std::vector sizes = this->getDimensions(name); if (sizes.size()==0) { - - if ((start != NULL) && (count != NULL) && start->size()==1 && count->size()==1) // pur scalar case - array_size*=(*count)[0] ; - else array_size=1 ; + array_size=1 ; + sstart.push_back(0); + scount.push_back(1); } else { @@ -492,18 +491,11 @@ namespace xios { sstart.push_back(record); scount.push_back(1); - if ((start == NULL) && (count == NULL)) i++; - it++; - if (it==end) - { - if ((start != NULL) && (count != NULL) && start->size()==1 && count->size()==1) // pur scalar case - { - scount[0]=(*count)[0] ; - array_size *= (*count)[0]; - } - } + if ((start == NULL) && + (count == NULL)) i++; + it++; } - + for (;it != end; it++) { if ((start != NULL) && (count != NULL)) @@ -545,18 +537,10 @@ namespace xios } template <> - void CONetCDF4::writeData_(int grpid, int varid, - const std::vector& sstart, - const std::vector& scount, const int* data) - { - CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); - } - //--------------------------------------------------------------- - template <> void CONetCDF4::writeData_(int grpid, int varid, const std::vector& sstart, - const std::vector& scount, const size_t* data) + const std::vector& scount, const int* data) { CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); } @@ -576,7 +560,6 @@ namespace xios { int grpid = this->getCurrentGroup(); int varid = this->getVariable(name); - StdSize array_size = 1; std::vector sstart, scount; diff --git a/xios_2311_src/src/io/onetcdf4_decl.cpp b/xios_2311_src/src/io/onetcdf4_decl.cpp index 0e3ca2c6..1a649427 100644 --- a/xios_2311_src/src/io/onetcdf4_decl.cpp +++ b/xios_2311_src/src/io/onetcdf4_decl.cpp @@ -10,8 +10,6 @@ namespace xios macro(int, 1) macro(int, 2) - macro(size_t, 1) - macro(size_t, 2) macro(double, 1) macro(double, 2) macro(double, 3) diff --git a/xios_2311_src/src/io/onetcdf4_impl.hpp b/xios_2311_src/src/io/onetcdf4_impl.hpp index 3a3f4ad0..34e20bb3 100644 --- a/xios_2311_src/src/io/onetcdf4_impl.hpp +++ b/xios_2311_src/src/io/onetcdf4_impl.hpp @@ -18,13 +18,16 @@ namespace xios StdSize array_size = 1; std::vector sstart, scount; - if (this->wmpi && collective) CNetCdfInterface::varParAccess(grpid, varid, NC_COLLECTIVE); - if (this->wmpi && !collective) CNetCdfInterface::varParAccess(grpid, varid, NC_INDEPENDENT); + if (this->wmpi && collective) + CNetCdfInterface::varParAccess(grpid, varid, NC_COLLECTIVE); + if (this->wmpi && !collective) + CNetCdfInterface::varParAccess(grpid, varid, NC_INDEPENDENT); CTimer::get("Files : get data infos").resume(); - this->getWriteDataInfos(name, record, array_size, sstart, scount, start, count); + this->getWriteDataInfos + (name, record, array_size, sstart, scount, start, count); CTimer::get("Files : get data infos").suspend(); - + if (data.numElements() != array_size) { ERROR("CONetCDF4::writeData(...)", @@ -32,10 +35,8 @@ namespace xios << ", intern array size = " << array_size << " ] Invalid input data !" ); } - - if (this->wmpi && sstart.size()==0) CNetCdfInterface::varParAccess(grpid, varid, NC_INDEPENDENT); // pure scalar case - if (data.numElements()==0 && sstart.size()==0) {}// pure scalar case if nothing to write, write nothing (independent access) - else this->writeData_(grpid, varid, sstart, scount, data.dataFirst()); + + this->writeData_(grpid, varid, sstart, scount, data.dataFirst()); } template <> @@ -74,7 +75,7 @@ namespace xios PtrArrayStr=new char[stringArrayLen*data.numElements()] ; memset (PtrArrayStr,' ',stringArrayLen*data.numElements()); size_t offset=0 ; - + // pb with iterator with blitz++ string array with recent compiler /* Array::const_iterator it, itb=data.begin(), ite=data.end() ; @@ -88,7 +89,7 @@ namespace xios { data(i).copy(PtrArrayStr+offset,data(i).size()) ; PtrArrayStr[offset+data(i).size()]='\0' ; - } + } CTimer::get("CONetCDF4::writeData writeData_").resume(); this->writeData_(grpid, varid, sstart, scount, PtrArrayStr); CTimer::get("CONetCDF4::writeData writeData_").suspend(); diff --git a/xios_2311_src/src/manager/contexts_manager.cpp b/xios_2311_src/src/manager/contexts_manager.cpp deleted file mode 100755 index aca8cea2..00000000 --- a/xios_2311_src/src/manager/contexts_manager.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include "contexts_manager.hpp" -#include "cxios.hpp" -#include "ressources_manager.hpp" -#include "pool_ressource.hpp" -#include "services.hpp" -#include "server_context.hpp" -#include "servers_ressource.hpp" -#include "server.hpp" -#include "timer.hpp" -#include - - -namespace xios -{ - using namespace std ; - - CContextsManager::CContextsManager(bool isXiosServer) - { - xiosComm_ = CXios::getXiosComm() ; - - int commRank ; - MPI_Comm_rank(xiosComm_, &commRank) ; - if (commRank==0 && isXiosServer) MPI_Comm_rank(xiosComm_, &commRank) ; - else commRank=0 ; - MPI_Allreduce(&commRank, &managerGlobalLeader_, 1, MPI_INT, MPI_SUM, xiosComm_) ; - - MPI_Comm_rank(xiosComm_, &commRank) ; - winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - - - winContexts_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - winContexts_->lockWindow(commRank,0) ; - winContexts_->updateToWindow(commRank, this, &CContextsManager::contextsDumpOut) ; - winContexts_->unlockWindow(commRank,0) ; - - MPI_Barrier(xiosComm_) ; - } - - - CContextsManager::~CContextsManager() - { - delete winNotify_ ; - delete winContexts_ ; - } - - bool CContextsManager::createServerContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, - const string& contextId, bool wait) - { - int serviceLeader ; - auto servicesManager = CXios::getServicesManager() ; - - bool ok=servicesManager->getServiceLeader(poolId, serviceId, partitionId, serviceLeader) ; - - info(40)<<"CContextsManager::createServerContext : waiting for service leader ; serviceId : "<servicesEventLoop() ; - ok=servicesManager->getServiceLeader(poolId, serviceId, partitionId, serviceLeader) ; - } - } - - if (ok) - { - notifyType_=NOTIFY_CREATE_CONTEXT ; - notifyCreateContext_=make_tuple(poolId, serviceId, partitionId, contextId) ; - info(40)<<"CContextsManager::createServerContext : notification create_context to service leader "<getServiceType(poolId,serviceId, 0, type) ; - if (ok) ok=getContextLeader(getServerContextName(poolId, serviceId, partitionId, type, contextId), contextLeader) ; - if (wait) - { - while (!ok) - { - CXios::getDaemonsManager()->servicesEventLoop() ; - ok=CXios::getServicesManager()->getServiceType(poolId,serviceId, 0, type) ; - if (ok) ok=getContextLeader(getServerContextName(poolId, serviceId, partitionId, type, contextId), contextLeader) ; - } - } - - if (ok) - { - notifyType_=NOTIFY_CREATE_INTERCOMM ; - notifyCreateIntercomm_=make_tuple(poolId, serviceId, partitionId, contextId, remoteLeader, sourceContext) ; - info(40)<<"CContextsManager::createServerContextIntercomm : notification create_intercomm to context leader : "<lockWindowExclusive(rank) ; - winNotify_->pushToLockedWindow(rank, this, &CContextsManager::notificationsDumpOut) ; - winNotify_->unlockWindow(rank) ; - } - - - void CContextsManager::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - if (notifyType_==NOTIFY_CREATE_CONTEXT) - { - auto& arg=notifyCreateContext_ ; - buffer << notifyType_<< get<0>(arg) << get<1>(arg) << std::get<2>(arg) << get<3>(arg) ; - } - else if (notifyType_==NOTIFY_CREATE_INTERCOMM) - { - auto& arg=notifyCreateIntercomm_ ; - buffer << notifyType_<< get<0>(arg) << get<1>(arg) << std::get<2>(arg) << get<3>(arg) << get<4>(arg)<< get<5>(arg) ; - } - } - - void CContextsManager::notificationsDumpIn(CBufferIn& buffer) - { - if (buffer.bufferSize() == 0) notifyType_= NOTIFY_NOTHING ; - else - { - buffer>>notifyType_; - if (notifyType_==NOTIFY_CREATE_CONTEXT) - { - auto& arg=notifyCreateContext_ ; - buffer >> get<0>(arg) >> get<1>(arg) >> std::get<2>(arg)>> get<3>(arg) ; - } - else if (notifyType_==NOTIFY_CREATE_INTERCOMM) - { - auto& arg=notifyCreateIntercomm_ ; - buffer >> get<0>(arg) >> get<1>(arg) >> std::get<2>(arg) >> get<3>(arg) >> get<4>(arg) >> get<5>(arg); - } - } - - } - - void CContextsManager::eventLoop(void) - { - CTimer::get("CContextsManager::eventLoop").resume(); - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - double time=MPI_Wtime() ; - if (time-lastEventLoop_ > eventLoopLatency_) - { - checkNotifications() ; - lastEventLoop_=time ; - } - CTimer::get("CContextsManager::eventLoop").suspend(); - } - - void CContextsManager::checkNotifications(void) - { - int commRank ; - MPI_Comm_rank(xiosComm_, &commRank) ; - winNotify_->lockWindowExclusive(commRank) ; - winNotify_->popFromLockedWindow(commRank, this, &CContextsManager::notificationsDumpIn) ; - winNotify_->unlockWindow(commRank) ; - if (notifyType_==NOTIFY_CREATE_CONTEXT) createServerContext() ; - else if (notifyType_==NOTIFY_CREATE_INTERCOMM) createServerContextIntercomm() ; - - } - - void CContextsManager::createServerContext(void) - { - info(40)<<"CContextsManager::createServerContext : receive create server context notification"<getService(get<1>(arg), get<2>(arg)) - ->createContext(get<0>(arg), get<1>(arg), get<2>(arg), get<3>(arg)) ; - - } - - void CContextsManager::createServerContextIntercomm(void) - { - info(40)<<"CContextsManager::createServerContext : receive create intercomm context notification"<getService(get<1>(arg), get<2>(arg)) - ->getServerContext(get<3>(arg)) - ->createIntercomm(get<4>(arg), get<5>(arg)) ; - } - - string CContextsManager::getServerContextName(const string& poolId, const string& serviceId, const int& partitionId, - const int& type, const string& contextId) - { - if (type==CServicesManager::CLIENT) return contextId; - else - { - ostringstream oss; - oss<lockWindowExclusive(managerGlobalLeader_) ; - winContexts_->updateFromLockedWindow(managerGlobalLeader_, this, &CContextsManager::contextsDumpIn) ; - winContexts_->flushWindow(managerGlobalLeader_) ; - contexts_[fullContextId] = contextInfo ; - winContexts_->updateToLockedWindow(managerGlobalLeader_, this, &CContextsManager::contextsDumpOut) ; - winContexts_->unlockWindow(managerGlobalLeader_) ; - } - - bool CContextsManager::getContextInfo(const string& fullContextId, SRegisterContextInfo& contextInfo, MPI_Comm comm) - { - bool ret ; - int commRank=0 ; - if (comm!=MPI_COMM_NULL) MPI_Comm_rank(comm, &commRank) ; - - if (commRank==0) - { - - winContexts_->lockWindowShared(managerGlobalLeader_) ; - winContexts_->updateFromLockedWindow(managerGlobalLeader_, this, &CContextsManager::contextsDumpIn) ; - winContexts_->unlockWindow(managerGlobalLeader_) ; - - auto it=contexts_.find(fullContextId) ; - if ( it == contexts_.end()) ret=false ; - else - { - contextInfo=it->second ; - ret=true ; - } - } - - if (comm!=MPI_COMM_NULL) - { - MPI_Bcast(&ret,1,MPI_INT,0,comm) ; - if (ret) - { - MPI_Bcast(&contextInfo.leader,1,MPI_INT,0,comm) ; - MPI_Bcast(&contextInfo.size,1,MPI_INT,0,comm) ; - MPI_Bcast_string(contextInfo.poolId,0,comm) ; - MPI_Bcast_string(contextInfo.serviceId,0,comm) ; - MPI_Bcast(&contextInfo.serviceType,1,MPI_INT,0,comm) ; - MPI_Bcast(&contextInfo.partitionId,1,MPI_INT,0,comm) ; - MPI_Bcast_string(contextInfo.id,0,comm) ; - } - } - return ret ; - } - - bool CContextsManager::getContextLeader(const string& fullContextId, int& leader, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) leader=contextInfo.leader ; - return ret ; - } - - bool CContextsManager::getContextSize(const string& fullContextId, int& size, MPI_Comm comm) - { - - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) size=contextInfo.size ; - return ret ; - } - - bool CContextsManager::getContextPoolId(const string& fullContextId, string& poolId, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) poolId=contextInfo.poolId ; - return ret ; - } - - bool CContextsManager::getContextServiceId(const string& fullContextId, string& serviceId, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) serviceId=contextInfo.serviceId ; - return ret ; - } - - bool CContextsManager::getContextPartitionId(const string& fullContextId, int& partitionId, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) partitionId=contextInfo.partitionId ; - return ret ; - } - - bool CContextsManager::getContextServiceType(const string& fullContextId, int& serviceType, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) serviceType=contextInfo.serviceType ; - return ret ; - } - - bool CContextsManager::getContextId(const string& fullContextId, string& contextId, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - bool ret=getContextInfo(fullContextId, contextInfo) ; - if (ret) contextId=contextInfo.id ; - return ret ; - } - - - bool CContextsManager::hasContext(const string& fullContextId, MPI_Comm comm) - { - SRegisterContextInfo contextInfo ; - return getContextInfo(fullContextId, contextInfo) ; - } - - void CContextsManager::contextsDumpOut(CBufferOut& buffer) - { - buffer.realloc(maxBufferSize_) ; - buffer<<(int)contexts_.size(); - - for(auto it=contexts_.begin();it!=contexts_.end(); ++it) - { - auto key = it->first ; - auto val = it->second ; - buffer << key << val.poolId<>nbContexts ; - for(int i=0;i>contextId>>ci.poolId>>ci.serviceId>>ci.partitionId>>ci.serviceType>>ci.id>>ci.size>>ci.leader ; - contexts_[contextId]=ci ; - } - - } -} diff --git a/xios_2311_src/src/manager/contexts_manager.hpp b/xios_2311_src/src/manager/contexts_manager.hpp deleted file mode 100755 index 80cb06d1..00000000 --- a/xios_2311_src/src/manager/contexts_manager.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef __CONTEXTS_MANAGER_HPP__ -#define __CONTEXTS_MANAGER_HPP__ - -#include "xios_spl.hpp" -#include "mpi.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" - -#include -#include -#include "window_manager.hpp" -#include "register_context_info.hpp" - - -namespace xios -{ - - class CContextsManager - { - private: - - const int NOTIFY_NOTHING=0 ; - const int NOTIFY_CREATE_CONTEXT=1 ; - const int NOTIFY_CREATE_INTERCOMM=2 ; - - - public: - - CContextsManager(bool isXiosServer) ; - ~CContextsManager() ; - - bool createServerContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, const string& contextId, bool wait=true) ; - - bool createServerContextIntercomm(const std::string& poolId, const std::string& serviceId, const int& partitionId, - const std::string& contextId, const string& sourceContext, bool wait=true) ; - - string getServerContextName(const std::string& poolId, const std::string& serviceId, const int& partitionId, - const int& type, const string& contextId) ; - - - void sendNotification(int rank); - void checkNotifications(void) ; - - void eventLoop(void) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - - void registerContext(const std::string& fullContextId, const SRegisterContextInfo& contextInfo) ; - - bool getContextInfo(const std::string& fullContextId, SRegisterContextInfo& contextInfo, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextPoolId(const string& fullContextId, string& poolId, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextServiceId(const string& fullContextId, string& serviceId, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextPartitionId(const string& fullContextId, int& partitionId, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextId(const string& fullContextId, string& contextId, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextLeader(const string& fullContextId, int& leader, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextSize(const string& fullContextId, int& size, MPI_Comm comm=MPI_COMM_NULL) ; - bool getContextServiceType(const string& fullContextId, int& serviceType, MPI_Comm comm=MPI_COMM_NULL) ; - - bool hasContext(const std::string& fullContextId, MPI_Comm comm=MPI_COMM_NULL) ; - - void contextsDumpOut(CBufferOut& buffer) ; - void contextsDumpIn(CBufferIn& buffer) ; - - void createServerContext(void) ; //private - void createServerContextIntercomm(void) ; //private - - private : - - CWindowManager* winContexts_ ; - CWindowManager* winNotify_ ; - - - const size_t maxBufferSize_=1024*1024 ; - - MPI_Comm xiosComm_ ; - - int notifyType_ ; - tuple notifyCreateContext_ ; - tuple notifyCreateIntercomm_ ; - - std::map contexts_ ; - - int managerGlobalLeader_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - friend class CWindowManager ; - - } ; - -} - - - -#endif diff --git a/xios_2311_src/src/manager/coupler_manager.cpp b/xios_2311_src/src/manager/coupler_manager.cpp deleted file mode 100755 index 04517c21..00000000 --- a/xios_2311_src/src/manager/coupler_manager.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "coupler_manager.hpp" -#include "cxios.hpp" -#include -#include - - - -namespace xios -{ - CCouplerManager::CCouplerManager(bool isXiosServer) - { - auto xiosComm_ = CXios::getXiosComm() ; - - int commRank ; - MPI_Comm_rank(xiosComm_, &commRank) ; - if (commRank==0 && isXiosServer) MPI_Comm_rank(xiosComm_, &commRank) ; - else commRank=0 ; - MPI_Allreduce(&commRank, &managerGlobalLeader_, 1, MPI_INT, MPI_SUM, xiosComm_) ; - MPI_Comm_rank(xiosComm_, &commRank) ; - - winRegistredCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - winNextCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - if (commRank==managerGlobalLeader_) - { - winRegistredCoupling_->lockWindow(managerGlobalLeader_,0) ; - winRegistredCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::registredCouplingDumpOut) ; - winRegistredCoupling_->unlockWindow(managerGlobalLeader_,0) ; - - winNextCoupling_->lockWindow(managerGlobalLeader_,0) ; - winNextCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::nextCouplingDumpOut) ; - winNextCoupling_->unlockWindow(managerGlobalLeader_,0) ; - } - - MPI_Barrier(xiosComm_) ; - } - - CCouplerManager::~CCouplerManager() - { - delete winRegistredCoupling_ ; - delete winNextCoupling_ ; - } - - - void CCouplerManager::registerCoupling(string srcCoupling, string dstCoupling) - { - hash strHash ; - size_t key = strHash(getStrCoupling(srcCoupling,dstCoupling)) ; - - winRegistredCoupling_->lockWindow(managerGlobalLeader_,0) ; - winRegistredCoupling_->updateFromWindow(managerGlobalLeader_, this, &CCouplerManager::registredCouplingDumpIn) ; - if (registredCoupling_.count(key)==1) - { - registredCoupling_.erase(key) ; - winRegistredCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::registredCouplingDumpOut) ; - winNextCoupling_->lockWindow(managerGlobalLeader_,0) ; - winNextCoupling_->updateFromWindow(managerGlobalLeader_, this, &CCouplerManager::nextCouplingDumpIn) ; - nextCoupling_.push_back(pair(key,2)) ; - winNextCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::nextCouplingDumpOut) ; - winNextCoupling_->unlockWindow(managerGlobalLeader_,0) ; - } - else - { - registredCoupling_.insert(key) ; - winRegistredCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::registredCouplingDumpOut) ; - } - winRegistredCoupling_->unlockWindow(managerGlobalLeader_,0) ; - } - - bool CCouplerManager::isNextCoupling(string srcCoupling, string dstCoupling) - { - bool ret ; - hash strHash ; - size_t key = strHash(getStrCoupling(srcCoupling,dstCoupling)) ; - - winNextCoupling_->lockWindow(managerGlobalLeader_,0) ; - winNextCoupling_->updateFromWindow(managerGlobalLeader_, this, &CCouplerManager::nextCouplingDumpIn) ; - if (nextCoupling_.front().first==key) - { - ret=true ; - if (nextCoupling_.front().second==1) nextCoupling_.pop_front() ; - else nextCoupling_.front().second=1 ; - winNextCoupling_->updateToWindow(managerGlobalLeader_, this, &CCouplerManager::nextCouplingDumpOut) ; - } - else ret=false ; - winNextCoupling_->unlockWindow(managerGlobalLeader_,0) ; - return ret ; - } - void CCouplerManager::registredCouplingDumpOut(CBufferOut& buffer) - { - buffer.realloc(maxBufferSize_) ; - buffer<<(int)registredCoupling_.size(); - - for(auto hash : registredCoupling_) buffer << hash ; - } - - void CCouplerManager::registredCouplingDumpIn(CBufferIn& buffer) - { - registredCoupling_.clear() ; - size_t hash ; - int nbHash ; - buffer>>nbHash ; - for(int i=0;i>hash ; - registredCoupling_.insert(hash) ; - } - } - - void CCouplerManager::nextCouplingDumpOut(CBufferOut& buffer) - { - buffer.realloc(maxBufferSize_) ; - buffer<<(int)nextCoupling_.size(); - - for(auto hash : nextCoupling_) buffer << hash.first<>nbHash ; - for(int i=0;i>hash>>count ; - nextCoupling_.push_back(pair(hash,count)) ; - } - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/coupler_manager.hpp b/xios_2311_src/src/manager/coupler_manager.hpp deleted file mode 100755 index 4467dee4..00000000 --- a/xios_2311_src/src/manager/coupler_manager.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef __COUPLER_MANAGER_HPP__ -#define __COUPLER_MANAGER_HPP__ - -#include "xios_spl.hpp" -#include "mpi.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" - -#include -#include -#include "window_manager.hpp" - - -namespace xios -{ - // the rule of this manager is to schedule intercommunicator creation between two or more coupling context - - class CCouplerManager - { - - public: - CCouplerManager(bool isXiosServer); - ~CCouplerManager() ; - void registerCoupling(std::string srcCoupling, std::string dstCoupling) ; - bool isNextCoupling(string srcCoupling, string dstCoupling) ; - private : - void registredCouplingDumpOut(CBufferOut& buffer) ; - void registredCouplingDumpIn(CBufferIn& buffer) ; - void nextCouplingDumpOut(CBufferOut& buffer); - void nextCouplingDumpIn(CBufferIn& buffer); - - const std::string getStrCoupling(std::string srcCoupling, std::string dstCoupling) { return std::string("__"+srcCoupling+"__to__"+dstCoupling+"__") ; } - /** windows containing a set of coupling (hash) registred by at least one context */ - CWindowManager* winRegistredCoupling_ ; - - /** windows containing a list of coupling fully registred by two context. The first coupling of the list will be the next candidate for intercommunicator creation */ - CWindowManager* winNextCoupling_ ; - - /** size of the windows, ie around 1024 coupling context can be registred at the time */ - const size_t maxBufferSize_=1024*8 ; - - std::set registredCoupling_ ; - std::list> nextCoupling_ ; - - /** the rank of the mpi proc where the data are kept in memory*/ - int managerGlobalLeader_ ; - } ; - - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/daemons_manager.cpp b/xios_2311_src/src/manager/daemons_manager.cpp deleted file mode 100755 index 8420f614..00000000 --- a/xios_2311_src/src/manager/daemons_manager.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include "daemons_manager.hpp" -#include "cxios.hpp" -#include "ressources_manager.hpp" -#include "services_manager.hpp" -#include "contexts_manager.hpp" -#include "servers_ressource.hpp" -#include "server.hpp" - -namespace xios -{ - using namespace std ; - - CDaemonsManager::CDaemonsManager(bool isXiosServer) : isServer_(isXiosServer) - { - MPI_Comm xiosComm = CXios::getXiosComm() ; - int commRank ; - MPI_Comm_rank(xiosComm,&commRank) ; - MPI_Comm splitComm ; - MPI_Comm_split(xiosComm,isXiosServer,commRank,&splitComm) ; - - CXios::launchRegistryManager(isXiosServer) ; - CXios::launchRessourcesManager(isXiosServer) ; - CXios::launchServicesManager(isXiosServer) ; - CXios::launchContextsManager(isXiosServer) ; - CXios::launchCouplerManager(isXiosServer) ; - - if (isXiosServer) CServer::launchServersRessource(splitComm) ; - MPI_Barrier(xiosComm) ; - MPI_Comm_free(&splitComm) ; - } - - CDaemonsManager::~CDaemonsManager() - { - finalize() ; - } - - bool CDaemonsManager::eventLoop(void) - { - - CXios::getRessourcesManager()->eventLoop() ; - CXios::getServicesManager()->eventLoop() ; - CXios::getContextsManager()->eventLoop() ; - if (isServer_) return CServer::getServersRessource()->eventLoop(false) ; - else return CXios::getPoolRessource()->eventLoop(false) ; - } - - bool CDaemonsManager::servicesEventLoop(void) - { - CXios::getRessourcesManager()->eventLoop() ; - CXios::getServicesManager()->eventLoop() ; - CXios::getContextsManager()->eventLoop() ; - if (isServer_) return CServer::getServersRessource()->eventLoop(true) ; - else return CXios::getPoolRessource()->eventLoop(true) ; - } - - bool CDaemonsManager::finalize(void) - { - if (!isFinalized_) - { - if (isServer_) CServer::getServersRessource()->finalizeSignal() ; - else CXios::getPoolRessource()->finalizeSignal() ; - while(!eventLoop()) ; - MPI_Barrier( CXios::getXiosComm()) ; - CXios::finalizeContextsManager() ; - CXios::finalizeCouplerManager() ; - CXios::finalizeServicesManager() ; - CXios::finalizeRessourcesManager() ; - CXios::finalizeRegistryManager() ; - isFinalized_=true ; - } - return isFinalized_; - } - -} diff --git a/xios_2311_src/src/manager/daemons_manager.hpp b/xios_2311_src/src/manager/daemons_manager.hpp deleted file mode 100755 index d9b3475b..00000000 --- a/xios_2311_src/src/manager/daemons_manager.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __DAEMONS_MANAGER_HPP__ -#define __DAEMONS_MANAGER_HPP__ -#include - -namespace xios -{ - - - class CDaemonsManager - { - public: - - CDaemonsManager(bool isXiosServer) ; - ~CDaemonsManager() ; - - bool eventLoop(void) ; - bool servicesEventLoop(void) ; - - void scheduleContext(size_t hashId) { scheduledContext_=hashId ;} //!< for attached mode, give the hand to the associated context server - bool isScheduledContext(size_t hashId) { return scheduledContext_==hashId ;} //!< for attached mode, return true if context server is sceduled - void unscheduleContext(void) { scheduledContext_=0 ;} //!< for attached mode : unschedule context - bool finalize(void) ; - private: - bool isServer_ ; - size_t scheduledContext_ = 0 ; //!< Hash id of the next scehduled context for attached mode - bool isFinalized_=false ; - } ; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/pool_ressource.cpp b/xios_2311_src/src/manager/pool_ressource.cpp deleted file mode 100755 index 4292110d..00000000 --- a/xios_2311_src/src/manager/pool_ressource.cpp +++ /dev/null @@ -1,206 +0,0 @@ -#include "pool_ressource.hpp" -#include "services.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" -#include "message.hpp" -#include "type.hpp" -#include "cxios.hpp" -#include "timer.hpp" - -namespace xios -{ - CPoolRessource::CPoolRessource(MPI_Comm poolComm, const std::string& Id) : Id_(Id), finalizeSignal_(false) - { - int commRank, commSize ; - MPI_Comm_dup(poolComm, &poolComm_) ; - winNotify_ = new CWindowManager(poolComm_, maxBufferSize_) ; - MPI_Comm_rank(poolComm, &commRank) ; - MPI_Comm_size(poolComm, &commSize) ; - info(40)<<"CPoolRessource::CPoolRessource : creating new pool : "<(0,i)) ; - int globalLeaderRank ; - MPI_Comm_rank(CXios::getXiosComm(),&globalLeaderRank) ; - CXios::getRessourcesManager()->registerPool(Id, commSize, globalLeaderRank) ; - } - - winNotify_->lockWindow(commRank,0) ; - winNotify_->updateToWindow(commRank, this, &CPoolRessource::createServiceDumpOut) ; - winNotify_->unlockWindow(commRank,0) ; - MPI_Barrier(poolComm_) ; - } - - void CPoolRessource::createService(const std::string& serviceId, int type, int size, int nbPartitions) - { - // for now suppose nbPartitions=1 - - auto it=occupancy_.begin() ; - int commSize ; - MPI_Comm_size(poolComm_, &commSize) ; - vector procs_in(commSize,false) ; - vector> procs_update ; - - for(int i=0; isecond]=true ; - procs_update.push_back(std::pair(it->first+1,it->second)) ; - ++it ; - } - - occupancy_.erase(occupancy_.begin(),it) ; - occupancy_.insert(procs_update.begin(),procs_update.end()) ; - - info(40)<<"CPoolRessource::createService : notify createService to all pool members ; serviceId : "<lockWindow(rank,0) ; - winNotify_->updateFromWindow(rank, this, &CPoolRessource::createServiceDumpIn) ; - notifications_.push_back(std::make_tuple(serviceId,type,size,nbPartitions,in)) ; - winNotify_->updateToWindow(rank, this, &CPoolRessource::createServiceDumpOut) ; - winNotify_->unlockWindow(rank,0) ; - } - - - void CPoolRessource::createServiceDumpOut(CBufferOut& buffer) - { - buffer.realloc(maxBufferSize_) ; - - buffer << (int) (notifications_.size()); - - for(auto it=notifications_.begin();it!=notifications_.end(); ++it) - buffer << std::get<0>(*it) << static_cast(std::get<1>(*it))<< std::get<2>(*it)<< std::get<3>(*it) << std::get<4>(*it) ; - } - - - void CPoolRessource::createServiceDumpIn(CBufferIn& buffer) - { - std::string serviceId ; - int type ; - int size; - int nbPartitions; - bool in ; - - notifications_.clear() ; - int nbNotifications ; - buffer>>nbNotifications ; - for(int i=0;i>serviceId>>type>>size>>nbPartitions>>in ; - notifications_.push_back(std::make_tuple(serviceId,type,size,nbPartitions,in)) ; - } - } - - bool CPoolRessource::eventLoop(bool serviceOnly) - { - CTimer::get("CPoolRessource::eventLoop").resume(); - - double time=MPI_Wtime() ; - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - if (time-lastEventLoop_ > eventLoopLatency_) - { - checkCreateServiceNotification() ; - lastEventLoop_=time ; - } - - for (auto it=services_.begin(); it!=services_.end() ; ++it) - { - if (it->second->eventLoop(serviceOnly)) - { - delete it->second ; - services_.erase(it) ; - // don't forget to free service later - break ; - } - } - CTimer::get("CPoolRessource::eventLoop").suspend(); - if (services_.empty() && finalizeSignal_) return true ; - else return false ; - } - - void CPoolRessource::checkCreateServiceNotification(void) - { - int commRank ; - MPI_Comm_rank(poolComm_, &commRank) ; - winNotify_->lockWindow(commRank,0) ; - winNotify_->updateFromWindow(commRank, this, &CPoolRessource::createServiceDumpIn) ; - - if (!notifications_.empty()) - { - auto info = notifications_.front() ; - createNewService(get<0>(info), get<1>(info), get<2>(info), get<3>(info), get<4>(info)) ; - notifications_.pop_front() ; - winNotify_->updateToWindow(commRank, this, &CPoolRessource::createServiceDumpOut) ; - } - winNotify_->unlockWindow(commRank,0) ; - - } - - void CPoolRessource::createNewService(const std::string& serviceId, int type, int size, int nbPartitions, bool in) - { - - info(40)<<"CPoolRessource::createNewService : receive createService notification ; serviceId : "<= (serviceCommSize/nbPartitions+1)*(serviceCommSize%nbPartitions) ) - { - int rank = serviceCommRank - (serviceCommSize/nbPartitions+1)*(serviceCommSize%nbPartitions) ; - partitionId = serviceCommSize%nbPartitions + rank / (serviceCommSize/nbPartitions) ; - } - else partitionId = serviceCommRank / (serviceCommSize/nbPartitions + 1) ; - - MPI_Comm_split(serviceComm, partitionId, commRank, &newServiceComm) ; - - MPI_Comm_size(newServiceComm,&serviceCommSize) ; - MPI_Comm_rank(newServiceComm,&serviceCommRank) ; - info(10)<<"Service "<second->finalizeSignal() ; - } - - CPoolRessource::~CPoolRessource() - { - delete winNotify_ ; - for(auto& service : services_) delete service.second ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/pool_ressource.hpp b/xios_2311_src/src/manager/pool_ressource.hpp deleted file mode 100755 index 6eed3404..00000000 --- a/xios_2311_src/src/manager/pool_ressource.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef __POOL_RESSOURCE_HPP__ -#define __POOL_RESSOURCE_HPP__ - -#include "mpi.hpp" -#include "window_manager.hpp" -#include "services_manager.hpp" - - -namespace xios -{ - - class CService ; - - class CPoolRessource - { - private: - - const size_t maxBufferSize_=1024*1024 ; - const int localLeader_ = 0 ; - - CWindowManager* winNotify_ ; - - public: - CPoolRessource(MPI_Comm poolComm, const std::string& Id) ; - ~CPoolRessource() ; - - void createService(const std::string& serviceId, int type, int size, int nbPartition) ; - void createService(MPI_Comm serviceComm, const std::string& serviceId, int partitionId, int type, int nbPartitions) ; - void createServiceNotify(int rank, const std::string& serviceId, int type, int size, int nbPartitions, bool in) ; - void createServiceDumpOut(CBufferOut& buffer) ; - void createServiceDumpIn(CBufferIn& buffer) ; - void checkCreateServiceNotification(void) ; - void createNewService(const std::string& serviceId, int type, int size, int nbPartitions, bool in) ; - bool eventLoop(bool serviceOnly=false) ; - CService* getService(const std::string serviceId, int partitionId) { return services_[make_tuple(serviceId,partitionId)]; } - void finalizeSignal(void) ; - string getId(void) { return Id_; } - - private: - MPI_Comm poolComm_ ; - - std::multimap occupancy_ ; - std::list > notifications_; - std::map< std::tuple, CService*> services_ ; - std::string Id_ ; - bool finalizeSignal_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - }; - -} - - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/register_context_info.hpp b/xios_2311_src/src/manager/register_context_info.hpp deleted file mode 100755 index e6518207..00000000 --- a/xios_2311_src/src/manager/register_context_info.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __CONTEXT_INFO_HPP__ -#define __CONTEXT_INFO_HPP__ - -#include "services_manager.hpp" - -namespace xios -{ - struct SRegisterContextInfo - { - string poolId ; - string serviceId; - int partitionId ; - int serviceType ; - string id ; - int size ; - int leader ; - } ; -} - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/registry_manager.cpp b/xios_2311_src/src/manager/registry_manager.cpp deleted file mode 100755 index 6890f5b1..00000000 --- a/xios_2311_src/src/manager/registry_manager.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "registry_manager.hpp" -#include "cxios.hpp" - -namespace xios -{ - CRegistryManager::CRegistryManager(bool isXiosServer) - { - - int commRank ; - xiosComm_ = CXios::getXiosComm() ; - MPI_Comm_rank(xiosComm_, &commRank) ; - managerGlobalLeader_ = 0 ; - if (commRank==managerGlobalLeader_) isManagerGlobalLeader_=true; - else isManagerGlobalLeader_=false; - registryIn_ = new CRegistry(xiosComm_) ; - if (commRank==managerGlobalLeader_) registryIn_->fromFile(registryInFileName) ; - registryIn_->bcastRegistry() ; - registryOut_= new CRegistry(xiosComm_) ; - } - - void CRegistryManager::finalize(void) - { - delete registryIn_ ; - registryOut_->hierarchicalGatherRegistry() ; - if (isManagerGlobalLeader_) registryOut_->toFile(registryOutFileName) ; - delete registryOut_ ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/registry_manager.hpp b/xios_2311_src/src/manager/registry_manager.hpp deleted file mode 100755 index bf693017..00000000 --- a/xios_2311_src/src/manager/registry_manager.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __REGISTRY_MANAGER_HPP__ -#define __REGISTRY_MANAGER_HPP__ - -#include "xios_spl.hpp" -#include "registry.hpp" -#include "mpi.hpp" - -namespace xios -{ - class CRegistryManager - { - - public: - - CRegistryManager(bool isXiosServer) ; - ~CRegistryManager() { finalize() ;} - const CRegistry& getRegistryIn(void) {return *registryIn_ ;} - const CRegistry& getRegistryOut(void) {return *registryOut_ ;} - - void merge(const CRegistry& inRegistry) { registryOut_->mergeRegistry(inRegistry) ;} - - private: - void finalize(void) ; - - const std::string registryInFileName {"registry.bin"} ; - const std::string registryOutFileName {"registry.bin"} ; - MPI_Comm xiosComm_ ; - int managerGlobalLeader_ ; - bool isManagerGlobalLeader_ ; - CRegistry* registryIn_ ; - CRegistry* registryOut_ ; - } ; -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/ressources_manager.cpp b/xios_2311_src/src/manager/ressources_manager.cpp deleted file mode 100755 index 3592eff6..00000000 --- a/xios_2311_src/src/manager/ressources_manager.cpp +++ /dev/null @@ -1,274 +0,0 @@ -#include "ressources_manager.hpp" -#include "server.hpp" -#include "servers_ressource.hpp" -#include "timer.hpp" - - - - - -namespace xios -{ - using namespace std; - - CRessourcesManager::CRessourcesManager(bool isXiosServer) - { - - xiosComm_ = CXios::getXiosComm() ; - - int commRank ; - MPI_Comm_rank(xiosComm_, &commRank) ; - if (commRank==0 && isXiosServer) MPI_Comm_rank(xiosComm_, &commRank) ; - else commRank=0 ; - MPI_Allreduce(&commRank, &managerGlobalLeader_, 1, MPI_INT, MPI_SUM, xiosComm_) ; - - MPI_Comm_rank(xiosComm_, &commRank) ; - winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - - - winRessources_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - winRessources_->lockWindow(commRank,0) ; - serverLeader_=-1 ; - winRessources_->updateToWindow(commRank, this, &CRessourcesManager::ressourcesDumpOut) ; - winRessources_->unlockWindow(commRank,0) ; - - MPI_Barrier(xiosComm_) ; - } - - CRessourcesManager::~CRessourcesManager() - { - delete winNotify_ ; - delete winRessources_ ; - } - - void CRessourcesManager::createPool(const string& poolId, int size) - { - info(40)<<"CRessourcesManager::createPool : calling createPool : "<lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - - notifyType_=NOTIFY_CREATE_POOL ; - notifyCreatePool_=make_tuple(poolId, size) ; - info(40)<<"CRessourcesManager::createPool : send notification creating pool to server leader "<lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - - if (serverLeader_!=-1) - { - notifyType_=NOTIFY_FINALIZE ; - info(40)<<"CRessourcesManager::finalize : send notification finalize to server leader "<lockWindowExclusive(rank) ; - winNotify_->pushToLockedWindow(rank, this, &CRessourcesManager::notificationsDumpOut) ; - winNotify_->unlockWindow(rank) ; - } - - - void CRessourcesManager::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - if (notifyType_==NOTIFY_CREATE_POOL) - { - auto& arg=notifyCreatePool_ ; - buffer << notifyType_<< get<0>(arg) << get<1>(arg) ; - } - else if (notifyType_==NOTIFY_FINALIZE) - { - buffer << notifyType_ ; - } - } - - void CRessourcesManager::notificationsDumpIn(CBufferIn& buffer) - { - if (buffer.bufferSize() == 0) notifyType_= NOTIFY_NOTHING ; - else - { - buffer>>notifyType_; - if (notifyType_==NOTIFY_CREATE_POOL) - { - auto& arg=notifyCreatePool_ ; - buffer >> get<0>(arg) >> get<1>(arg) ; - } - else if (notifyType_==NOTIFY_FINALIZE) { /*nothing to do*/ } - } - - } - - void CRessourcesManager::eventLoop(void) - { - CTimer::get("CRessourcesManager::eventLoop").resume(); - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - double time=MPI_Wtime() ; - if (time-lastEventLoop_ > eventLoopLatency_) - { - checkNotifications() ; - lastEventLoop_=time ; - } - - CTimer::get("CRessourcesManager::eventLoop").suspend(); - } - - void CRessourcesManager::checkNotifications(void) - { - int commRank ; - MPI_Comm_rank(xiosComm_, &commRank) ; - CTimer::get("CRessourcesManager::checkNotifications lock").resume(); - winNotify_->lockWindowExclusive(commRank) ; - CTimer::get("CRessourcesManager::checkNotifications lock").suspend(); - CTimer::get("CRessourcesManager::checkNotifications pop").resume(); - winNotify_->popFromLockedWindow(commRank, this, &CRessourcesManager::notificationsDumpIn) ; - CTimer::get("CRessourcesManager::checkNotifications pop").suspend(); - CTimer::get("CRessourcesManager::checkNotifications unlock").resume(); - winNotify_->unlockWindow(commRank) ; - CTimer::get("CRessourcesManager::checkNotifications unlock").suspend(); - if (notifyType_==NOTIFY_CREATE_POOL) createPool() ; - else if (notifyType_==NOTIFY_FINALIZE) finalizeSignal() ; - } - - void CRessourcesManager::createPool(void) - { - - auto& arg=notifyCreatePool_ ; - string poolId=get<0>(arg) ; - int size=get<1>(arg) ; - info(40)<<"CRessourcesManager::createPool : receive create pool notification : "<< poolId<<" of size "<createPool(poolId,size) ; - } - - void CRessourcesManager::finalizeSignal(void) - { - info(40)<<"CRessourcesManager::createPool : receive finalize notification"<finalize() ; - } - - void CRessourcesManager::ressourcesDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - buffer<first ; - auto val = it->second ; - buffer << key<(val) << std::get<1>(val) ; - } - } - - void CRessourcesManager::ressourcesDumpIn(CBufferIn& buffer) - { - std::string poolId ; - int size ; - int leader ; - - buffer>>serverLeader_ ; - pools_.clear() ; - int nbPools ; - buffer>>nbPools ; - for(int i=0;i>poolId>>size>>leader ; - pools_[poolId]=std::make_tuple(size,leader) ; - } - } - - void CRessourcesManager::registerServerLeader(int serverLeaderRank) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - serverLeader_ = serverLeaderRank ; - winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - } - - void CRessourcesManager::registerRessourcesSize(int size) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - ressourcesSize_ = size ; - freeRessourcesSize_ = size ; - winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - } - - - void CRessourcesManager::registerPool(const string& poolId, int size, int leader) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - pools_[poolId] = make_tuple(size,leader) ; - freeRessourcesSize_-=size ; - winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - } - - - bool CRessourcesManager::getPoolInfo(const string& poolId, int& size, int& leader) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - - auto it=pools_.find(poolId) ; - if ( it == pools_.end()) return false ; - else - { - size=get<0>(it->second) ; - leader=get<1>(it->second) ; - return true ; - } - } - - int CRessourcesManager::getRessourcesSize(void) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - - return ressourcesSize_ ; - } - - int CRessourcesManager::getFreeRessourcesSize(void) - { - winRessources_->lockWindow(managerGlobalLeader_,0) ; - winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; - winRessources_->unlockWindow(managerGlobalLeader_,0) ; - - return freeRessourcesSize_ ; - } - - bool CRessourcesManager::getPoolLeader(const string& poolId, int& leader) - { - int size ; - return getPoolInfo(poolId, size, leader) ; - } - - bool CRessourcesManager::getPoolSize(const string& poolId, int& size) - { - int leader ; - return getPoolInfo(poolId, size, leader) ; - } - - bool CRessourcesManager::hasPool(const string& poolId) - { - int leader,size ; - return getPoolInfo(poolId, size, leader) ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/ressources_manager.hpp b/xios_2311_src/src/manager/ressources_manager.hpp deleted file mode 100755 index 1b5dd24f..00000000 --- a/xios_2311_src/src/manager/ressources_manager.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef __RESSOURCES_MANAGER_HPP__ -#define __RESSOURCES_MANAGER_HPP__ - -#include "xios_spl.hpp" -#include "mpi.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" - -#include -#include -#include "window_manager.hpp" -#include "pool_ressource.hpp" - - - -namespace xios -{ - - - class CRessourcesManager - { - - const int NOTIFY_NOTHING=0 ; - const int NOTIFY_CREATE_POOL=1 ; - const int NOTIFY_FINALIZE=2 ; - - public: - - CRessourcesManager(bool isXiosServer) ; - ~CRessourcesManager() ; - - void eventLoop(void) ; - void createPool(const std::string& id, int size) ; - void createPool(void) ; - void finalize(void) ; - void finalizeSignal(void) ; - void sendNotification(int rank); - void checkNotifications(void) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - - void ressourcesDumpOut(CBufferOut& buffer) ; - void ressourcesDumpIn(CBufferIn& buffer) ; - - int getRessourcesSize(void) ; - int getFreeRessourcesSize(void) ; - bool getPoolInfo(const string& poolId, int& size, int& leader) ; - bool getPoolLeader(const string& poolId, int& leader) ; - bool getPoolSize(const string& poolId, int& size) ; - bool hasPool(const string& poolId) ; - - void registerServerLeader(int leaderRank) ; - void registerRessourcesSize(int size) ; - void registerPool(const std::string& poolId,int size,int leader) ; - - int managerGlobalLeader_ ; - - CWindowManager* winRessources_ ; - - CWindowManager* winNotify_ ; - - const size_t maxBufferSize_=1024*1024 ; - - MPI_Comm xiosComm_ ; - - int notifyType_ ; - tuple notifyCreatePool_ ; - - std::map> pools_ ; - int serverLeader_ ; - int ressourcesSize_ ; - int freeRessourcesSize_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - friend class CWindowManager ; - } ; - -} -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/server_context.cpp b/xios_2311_src/src/manager/server_context.cpp deleted file mode 100755 index 0d4d4a17..00000000 --- a/xios_2311_src/src/manager/server_context.cpp +++ /dev/null @@ -1,326 +0,0 @@ -#include "server_context.hpp" -#include "contexts_manager.hpp" -#include "cxios.hpp" -#include "mpi.hpp" -#include "context.hpp" -#include "register_context_info.hpp" -#include "services.hpp" -#include "timer.hpp" - - -namespace xios -{ - using namespace std ; - - map > CServerContext::overlapedComm_ ; - - CServerContext::CServerContext(CService* parentService, MPI_Comm contextComm, const std::string& poolId, const std::string& serviceId, - const int& partitionId, const std::string& contextId) : finalizeSignal_(false), parentService_(parentService), - hasNotification_(false) - { - info(40)<<"CCServerContext::CServerContext : new context creation ; contextId : "<getServiceType(poolId,serviceId, 0, type) ; - SRegisterContextInfo contextInfo = {poolId, serviceId, partitionId, type, contextId, commSize, globalLeader_} ; - name_ = CXios::getContextsManager()->getServerContextName(poolId, serviceId, partitionId, type, contextId) ; - CXios::getContextsManager()->registerContext(name_, contextInfo) ; - } - MPI_Bcast(&type, 1, MPI_INT, localLeader_,contextComm_) ; - name_ = CXios::getContextsManager()->getServerContextName(poolId, serviceId, partitionId, type, contextId) ; - context_=CContext::create(name_); - - context_->init(this, contextComm, type) ; - - info(10)<<"Context "<< CXios::getContextsManager()->getServerContextName(poolId, serviceId, partitionId, type, contextId)<<" created, on local rank "<(false, newInterCommClient, newInterCommServer) ; - MPI_Barrier(contextComm_) ; - - if (intraCommRank==0) - { - ok=CXios::getContextsManager()->createServerContextIntercomm(poolId, serviceId, partitionId, contextId, name_, wait) ; - if (ok) - { - CXios::getServicesManager()->getServiceType(poolId,serviceId, 0, type) ; - string name=CXios::getContextsManager()->getServerContextName(poolId, serviceId, partitionId, type, contextId) ; - CXios::getContextsManager()->getContextLeader(name, contextLeader) ; - } - } - - MPI_Request req ; - MPI_Status status ; - MPI_Ibarrier(intraComm,&req) ; - - int flag=false ; - while(!flag) - { - CXios::getDaemonsManager()->servicesEventLoop() ; - MPI_Test(&req,&flag,&status) ; - } - - MPI_Bcast(&ok, 1, MPI_INT, 0, intraComm) ; - - if (ok) - { - int globalRank ; - MPI_Comm_rank(xiosComm_,&globalRank) ; - MPI_Bcast(&contextLeader, 1, MPI_INT, 0, intraComm) ; - - int overlap, nOverlap ; - if (contextLeader==globalRank) overlap=1 ; - else overlap=0 ; - MPI_Allreduce(&overlap, &nOverlap, 1, MPI_INT, MPI_SUM, contextComm_) ; -/* - int overlap ; - if (get<0>(overlapedComm_[name_])) overlap=1 ; - else overlap=0 ; - - int nOverlap ; - MPI_Allreduce(&overlap, &nOverlap, 1, MPI_INT, MPI_SUM, contextComm_) ; - int commSize ; - MPI_Comm_size(contextComm_,&commSize ) ; -*/ - if (nOverlap> 0 ) - { - while (get<0>(overlapedComm_[name_])==false) CXios::getDaemonsManager()->servicesEventLoop() ; - isAttachedMode_=true ; - cout<<"CServerContext::createIntercomm : total overlap ==> context in attached mode"< context in server mode"< not managed"<lockWindowExclusive(rank) ; - winNotify_->pushToLockedWindow(rank, this, &CServerContext::notificationsDumpOut) ; - winNotify_->unlockWindow(rank) ; - } - - - void CServerContext::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - if (notifyOutType_==NOTIFY_CREATE_INTERCOMM) - { - auto& arg=notifyOutCreateIntercomm_ ; - buffer << notifyOutType_ << std::get<0>(arg)<(arg) ; - } - } - - void CServerContext::notificationsDumpIn(CBufferIn& buffer) - { - if (buffer.bufferSize() == 0) notifyInType_= NOTIFY_NOTHING ; - else - { - buffer>>notifyInType_; - if (notifyInType_==NOTIFY_CREATE_INTERCOMM) - { - auto& arg=notifyInCreateIntercomm_ ; - buffer >> std::get<0>(arg)>> std::get<1>(arg) ; - } - } - } - - void CServerContext::checkNotifications(void) - { - if (!hasNotification_) - { - double time=MPI_Wtime() ; - if (time-lastEventLoop_ > eventLoopLatency_) - { - int commRank ; - MPI_Comm_rank(contextComm_, &commRank) ; - winNotify_->lockWindowExclusive(commRank) ; - winNotify_->popFromLockedWindow(commRank, this, &CServerContext::notificationsDumpIn) ; - winNotify_->unlockWindow(commRank) ; - - if (notifyInType_!= NOTIFY_NOTHING) - { - hasNotification_=true ; - auto eventScheduler=parentService_->getEventScheduler() ; - std::hash hashString ; - size_t hashId = hashString(name_) ; - size_t currentTimeLine=0 ; - eventScheduler->registerEvent(currentTimeLine,hashId); - } - lastEventLoop_=time ; - } - } - - if (hasNotification_) - { - auto eventScheduler=parentService_->getEventScheduler() ; - std::hash hashString ; - size_t hashId = hashString(name_) ; - size_t currentTimeLine=0 ; - if (eventScheduler->queryEvent(currentTimeLine,hashId)) - { - eventScheduler->popEvent() ; - if (notifyInType_==NOTIFY_CREATE_INTERCOMM) createIntercomm() ; - hasNotification_=false ; - } - } - } - - bool CServerContext::eventLoop(bool serviceOnly) - { - CTimer::get("CServerContext::eventLoop").resume(); - bool finished=false ; - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - -// double time=MPI_Wtime() ; -// if (time-lastEventLoop_ > eventLoopLatency_) -// { - if (winNotify_!=nullptr) checkNotifications() ; -// lastEventLoop_=time ; -// } - - - if (!serviceOnly && context_!=nullptr) - { - if (context_->eventLoop()) - { - info(100)<<"Remove context server with id "<getId()<getId()) ; - context_=nullptr ; - // destroy context ??? --> later - } - } - CTimer::get("CServerContext::eventLoop").suspend(); - if (context_==nullptr && finalizeSignal_) finished=true ; - return finished ; - } - - void CServerContext::createIntercomm(void) - { - info(40)<<"CServerContext::createIntercomm : received createIntercomm notification"<(arg) ; - string sourceContext=get<1>(arg) ; - - auto it=overlapedComm_.find(sourceContext) ; - int overlap=0 ; - if (it!=overlapedComm_.end()) - { - get<0>(it->second)=true ; - overlap=1 ; - } - int nOverlap ; - MPI_Allreduce(&overlap, &nOverlap, 1, MPI_INT, MPI_SUM, contextComm_) ; - int commSize ; - MPI_Comm_size(contextComm_,&commSize ) ; - - if (nOverlap==commSize) - { - info(10)<<"CServerContext::createIntercomm : total overlap ==> context in attached mode"<(it->second) ; - interCommServer=get<1>(it->second) ; - context_ -> createClientInterComm(interCommClient, interCommServer ) ; - clientsInterComm_.push_back(interCommClient) ; - clientsInterComm_.push_back(interCommServer) ; - } - else if (nOverlap==0) - { - info(10)<<"CServerContext::createIntercomm : No overlap ==> context in server mode"< createClientInterComm(interCommClient,interCommServer) ; - clientsInterComm_.push_back(interCommClient) ; - clientsInterComm_.push_back(interCommServer) ; - } - else - { - ERROR("void CServerContext::createIntercomm(void)",<<"CServerContext::createIntercomm : partial overlap ==> not managed") ; - } - - } - - void CServerContext::freeComm(void) - { - delete winNotify_ ; - winNotify_=nullptr ; - MPI_Comm_free(&contextComm_) ; - // don't forget intercomm -> later - } - - void CServerContext::finalizeSignal(void) - { - finalizeSignal_=true ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/server_context.hpp b/xios_2311_src/src/manager/server_context.hpp deleted file mode 100755 index d00502a3..00000000 --- a/xios_2311_src/src/manager/server_context.hpp +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef __SERVER_CONTEXT_HPP__ -#define __SERVER_CONTEXT_HPP__ -#include "xios_spl.hpp" -#include "window_manager.hpp" -#include "mpi.hpp" - -namespace xios -{ - class CContext ; - class CService ; - - class CServerContext - { - const int NOTIFY_NOTHING=0 ; - const int NOTIFY_CREATE_INTERCOMM=1 ; - - public: - CServerContext(CService* parentService, MPI_Comm contextComm, const std::string& poolId, const std::string& serviceId, - const int& partitionId, const std::string& contextId) ; - ~CServerContext() ; - static void releaseStaticAllocation(void) { overlapedComm_.clear() ;} - - bool createIntercomm(const string& poolId, const string& serviceId, const int& partitionId, const string& contextId, - const MPI_Comm& intraComm, MPI_Comm& interCommClient, MPI_Comm& interCommServer, bool wait=true) ; - void createIntercomm(int remoteLeader, const string& sourceContext) ; - - void sendNotification(int rank); - void checkNotifications(void) ; - - bool eventLoop(bool serviceOnly=false) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - void finalizeSignal(void) ; - void freeComm(void) ; - bool isAttachedMode(void) { return isAttachedMode_ ;} - CService* getParentService(void) {return parentService_ ; } - - private: - void createIntercomm(void) ; - - static std::map > overlapedComm_ ; - - MPI_Comm contextComm_ ; - MPI_Comm xiosComm_ ; - - CContext* context_ ; - CService* parentService_ ; - std::string name_ ; - - vector clientsInterComm_ ; - - - const size_t maxBufferSize_=1024*1024 ; - CWindowManager* winNotify_ ; - int notifyInType_, notifyOutType_ ; - tuple notifyInCreateIntercomm_, notifyOutCreateIntercomm_ ; - - const int localLeader_=0 ; - int globalLeader_ ; - bool finalizeSignal_ ; - bool hasNotification_ ; - bool isAttachedMode_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - friend class CWindowManager ; - } ; - -} - -#endif diff --git a/xios_2311_src/src/manager/servers_ressource.cpp b/xios_2311_src/src/manager/servers_ressource.cpp deleted file mode 100755 index 90a835d2..00000000 --- a/xios_2311_src/src/manager/servers_ressource.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include "servers_ressource.hpp" -#include "window_manager.hpp" -#include "ressources_manager.hpp" -#include "pool_ressource.hpp" -#include "cxios.hpp" -#include "mpi.hpp" -#include "timer.hpp" -#include -#include - - - - -namespace xios -{ - using namespace std ; - - CServersRessource::CServersRessource(MPI_Comm serverComm) : poolRessource_(nullptr), finalizeSignal_(false) - { - - MPI_Comm_dup(serverComm, &serverComm_) ; - MPI_Comm xiosComm=CXios::getXiosComm() ; - - int localRank, globalRank ; - MPI_Comm_rank(xiosComm,&globalRank) ; - MPI_Comm_rank(serverComm_,&localRank) ; - - winNotify_ = new CWindowManager(serverComm_, maxBufferSize_) ; - MPI_Barrier(serverComm_) ; - if (localRank==localLeader_) - { - int commSize ; - MPI_Comm_size(serverComm_,&commSize) ; - CXios::getRessourcesManager()->registerServerLeader(globalRank) ; - CXios::getRessourcesManager()->registerRessourcesSize(commSize) ; - freeRessourcesRank_.resize(commSize) ; - for(int i=0;i newFreeRessourcesRank(freeRessourcesRank_.size()-size) ; - - bool isPartOf ; - - for(int i=0; ilockWindow(rank,0) ; - winNotify_->pushToWindow(rank, this, &CServersRessource::notificationsDumpOut) ; - winNotify_->unlockWindow(rank,0) ; - } - - - void CServersRessource::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - if (notifyOutType_==NOTIFY_CREATE_POOL) - { - auto& arg=notifyOutCreatePool_ ; - buffer << notifyOutType_ << std::get<0>(arg) << std::get<1>(arg) ; - } - else if (notifyOutType_==NOTIFY_FINALIZE) buffer << notifyOutType_ ; - } - - void CServersRessource::notificationsDumpIn(CBufferIn& buffer) - { - if (buffer.bufferSize() == 0) notifyInType_= NOTIFY_NOTHING ; - else - { - buffer>>notifyInType_; - if (notifyInType_==NOTIFY_CREATE_POOL) - { - auto& arg=notifyInCreatePool_ ; - buffer >> std::get<0>(arg) >> std::get<1>(arg) ; - } - else if (notifyInType_==NOTIFY_FINALIZE) { /*nothing to do*/} - } - } - - bool CServersRessource::eventLoop(bool serviceOnly) - { - CTimer::get("CServersRessource::eventLoop").resume(); - double time=MPI_Wtime() ; - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - - if (time-lastEventLoop_ > eventLoopLatency_) - { - checkNotifications() ; - lastEventLoop_=time ; - } - - if (poolRessource_!=nullptr) - { - if (poolRessource_->eventLoop(serviceOnly)) - { - delete poolRessource_ ; - poolRessource_=nullptr ; - // don't forget to free pool ressource later - } - } - CTimer::get("CServersRessource::eventLoop").suspend(); - if (poolRessource_==nullptr && finalizeSignal_) return true ; - else return false ; - } - - void CServersRessource::checkNotifications(void) - { - int commRank ; - MPI_Comm_rank(serverComm_, &commRank) ; - winNotify_->lockWindow(commRank,0) ; - winNotify_->popFromWindow(commRank, this, &CServersRessource::notificationsDumpIn) ; - winNotify_->unlockWindow(commRank,0) ; - if (notifyInType_==NOTIFY_CREATE_POOL) createPool() ; - else if (notifyInType_==NOTIFY_FINALIZE) finalizeSignal() ; - } - - void CServersRessource::createPool(void) - { - auto& arg=notifyInCreatePool_ ; - string poolId=get<0>(arg) ; - bool isPartOf=get<1>(arg) ; - - int commRank ; - MPI_Comm poolComm ; - MPI_Comm_rank(freeRessourcesComm_,&commRank) ; - MPI_Comm_split(freeRessourcesComm_, isPartOf, commRank, &poolComm) ; - - if (isPartOf) - { - poolRessource_ = new CPoolRessource(poolComm, poolId) ; - MPI_Comm_free(&poolComm) ; - } - else - { - MPI_Comm_free(&freeRessourcesComm_) ; - freeRessourcesComm_=poolComm ; - } - - } - - void CServersRessource::finalizeSignal(void) - { - finalizeSignal_=true ; - if (poolRessource_!=nullptr) poolRessource_->finalizeSignal() ; - } - - bool CServersRessource::isServerLeader(void) - { - int commRank ; - MPI_Comm_rank(serverComm_,&commRank) ; - if (commRank==localLeader_) return true ; - else return false ; - } - - CServersRessource::~CServersRessource() - { - delete winNotify_ ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/servers_ressource.hpp b/xios_2311_src/src/manager/servers_ressource.hpp deleted file mode 100755 index e8c880d6..00000000 --- a/xios_2311_src/src/manager/servers_ressource.hpp +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __SERVERS_RESSOURCE_HPP__ -#define __SERVERS_RESSOURCE_HPP__ - -#include "window_manager.hpp" -#include "mpi.hpp" -#include -#include - - - -namespace xios -{ - - class CPoolRessource ; - - class CServersRessource - { - - const int NOTIFY_NOTHING=0 ; - const int NOTIFY_CREATE_POOL=1 ; - const int NOTIFY_FINALIZE=2 ; - - public: - - CServersRessource(MPI_Comm serverComm) ; - ~CServersRessource() ; - void createPool(const string& poolId, const int size) ; - void createPool(void) ; - bool eventLoop(bool serviceOnly=false) ; - void sendNotification(int rank) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - void checkNotifications(void) ; - CPoolRessource* getPoolRessource(void) { return poolRessource_; } - bool isServerLeader(void) ; - void finalize(void) ; - void finalizeSignal(void) ; - - const int localLeader_=0 ; - vector freeRessourcesRank_ ; // only for leader - MPI_Comm serverComm_ ; - MPI_Comm freeRessourcesComm_ ; - - - const size_t maxBufferSize_=1024*1024 ; - CWindowManager* winNotify_ ; - - int notifyInType_,notifyOutType_ ; - std::tuple notifyInCreatePool_,notifyOutCreatePool_ ; - CPoolRessource* poolRessource_ ; - bool finalizeSignal_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - friend class CWindowManager ; - } ; - -} - - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/services.cpp b/xios_2311_src/src/manager/services.cpp deleted file mode 100755 index 87996fcb..00000000 --- a/xios_2311_src/src/manager/services.cpp +++ /dev/null @@ -1,268 +0,0 @@ -#include "services.hpp" -#include "services_manager.hpp" -#include "mpi.hpp" -#include "cxios.hpp" -#include "server_context.hpp" -#include "event_scheduler.hpp" -#include "timer.hpp" - -namespace xios -{ - CService::CService(MPI_Comm serviceComm, const std::string& poolId, const std::string& serviceId, const int& partitionId, - int type, int nbPartitions) : finalizeSignal_(false), eventScheduler_(nullptr), poolId_(poolId), serviceId_(serviceId), - partitionId_(partitionId), type_(type), nbPartitions_(nbPartitions), hasNotification_(false) - - - { - info(40)<<"CService::CService : new service created ; serviceId : "<lockWindow(localRank,0) ; - winNotify_->updateToWindow(localRank, this, &CService::createContextDumpOut) ; - winNotify_->unlockWindow(localRank,0) ; - MPI_Barrier(serviceComm_) ; - if (localRank==localLeader_) - { - globalLeader_=globalRank ; - MPI_Comm_rank(serviceComm_,&commSize) ; - CXios::getServicesManager()->registerService(poolId, serviceId, partitionId, type, commSize, nbPartitions, globalLeader_) ; - } - eventScheduler_ = new CEventScheduler(serviceComm_) ; - - ostringstream oss; - oss<lockWindow(rank,0) ; - winNotify_->updateFromWindow(rank, this, &CService::createContextDumpIn) ; - notifications_.push_back(std::make_tuple(poolId, serviceId, partitionId, contextId)) ; - winNotify_->updateToWindow(rank, this, &CService::createContextDumpOut) ; - winNotify_->unlockWindow(rank,0) ; - } - - - void CService::createContextDumpOut(CBufferOut& buffer) - { - buffer.realloc(maxBufferSize_) ; - - buffer << (int) (notifications_.size()); - - for(auto it=notifications_.begin();it!=notifications_.end(); ++it) - buffer << std::get<0>(*it) << std::get<1>(*it) << std::get<2>(*it) << std::get<3>(*it) ; - } - - - void CService::createContextDumpIn(CBufferIn& buffer) - { - std::string poolId ; - std::string serviceId ; - int partitionId ; - std::string contextId ; - - notifications_.clear() ; - int nbNotifications ; - buffer>>nbNotifications ; - for(int i=0;i>poolId>>serviceId>>partitionId>>contextId ; - notifications_.push_back(std::make_tuple(poolId, serviceId, partitionId, contextId)) ; - } - } - - bool CService::eventLoop(bool serviceOnly) - { - //checkCreateContextNotification() ; - CTimer::get("CService::eventLoop").resume(); - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - -// double time=MPI_Wtime() ; -// if (time-lastEventLoop_ > eventLoopLatency_) -// { - checkNotifications() ; -// lastEventLoop_=time ; -// } - - - eventScheduler_->checkEvent() ; - for(auto it=contexts_.begin();it!=contexts_.end();++it) - { - if (it->second->eventLoop(serviceOnly)) - { - delete it->second ; - contexts_.erase(it) ; - // destroy server_context -> to do later - break ; - } ; - } - CTimer::get("CService::eventLoop").suspend(); - if (contexts_.empty() && finalizeSignal_) return true ; - else return false ; - } - - void CService::sendNotification(int rank) - { - winNotify_->lockWindowExclusive(rank) ; - winNotify_->pushToLockedWindow(rank, this, &CService::notificationsDumpOut) ; - winNotify_->unlockWindow(rank) ; - } - - - void CService::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - if (notifyOutType_==NOTIFY_CREATE_CONTEXT) - { - auto& arg=notifyOutCreateContext_ ; - buffer << notifyOutType_ << std::get<0>(arg)<(arg) << std::get<2>(arg)<(arg) ; - } - } - - void CService::notificationsDumpIn(CBufferIn& buffer) - { - if (buffer.bufferSize() == 0) notifyInType_= NOTIFY_NOTHING ; - else - { - buffer>>notifyInType_; - if (notifyInType_==NOTIFY_CREATE_CONTEXT) - { - auto& arg=notifyInCreateContext_ ; - buffer >> std::get<0>(arg)>> std::get<1>(arg) >> std::get<2>(arg)>> std::get<3>(arg); - } - } - } - - - - - void CService::checkNotifications(void) - { - if (!hasNotification_) - { - double time=MPI_Wtime() ; - if (time-lastEventLoop_ > eventLoopLatency_) - { - int commRank ; - MPI_Comm_rank(serviceComm_, &commRank) ; - winNotify_->lockWindowExclusive(commRank) ; - winNotify_->popFromLockedWindow(commRank, this, &CService::notificationsDumpIn) ; - winNotify_->unlockWindow(commRank) ; - - if (notifyInType_!= NOTIFY_NOTHING) - { - hasNotification_=true ; - std::hash hashString ; - size_t hashId = hashString(name_) ; - size_t currentTimeLine=0 ; - info(40)<<"CService::checkNotifications(void) : receive notification => event scheduler"<registerEvent(currentTimeLine,hashId); - } - lastEventLoop_=time ; - } - } - - if (hasNotification_) - { - std::hash hashString ; - size_t hashId = hashString(name_) ; - size_t currentTimeLine=0 ; - info(40)<<"CService::checkNotifications(void) : receive notification => event scheduler : eventIsReceived ?"<queryEvent(currentTimeLine,hashId)) - { - eventScheduler_->popEvent() ; - info(40)<<"CService::checkNotifications(void) : receive notification => event scheduler : RECEIVED"<lockWindow(commRank,0) ; - winNotify_->updateFromWindow(commRank, this, &CService::createContextDumpIn) ; - - if (!notifications_.empty()) - { - auto info = notifications_.front() ; - createNewContext(get<0>(info), get<1>(info), get<2>(info), get<3>(info)) ; - notifications_.pop_front() ; - winNotify_->updateToWindow(commRank, this, &CService::createContextDumpOut) ; - } - winNotify_->unlockWindow(commRank,0) ; - } - - void CService::createContext(void) - { - info(40)<<"CService::createContext(void) : receive createContext notification"<(arg) ; - string serviceId = get<1>(arg) ; - int partitionId = get<2>(arg) ; - string contextId = get<3>(arg) ; - contexts_[contextId] = new CServerContext(this, serviceComm_, poolId, serviceId, partitionId, contextId) ; - } - - //to remove, not used anymore - void CService::createNewContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) - { - contexts_[contextId] = new CServerContext(this, serviceComm_, poolId, serviceId, partitionId, contextId) ; - } - - void CService::finalizeSignal(void) - { - finalizeSignal_=true ; - for(auto it=contexts_.begin();it!=contexts_.end();++it) it->second->finalizeSignal() ; - } - - CEventScheduler* CService::getEventScheduler(void) - { - return eventScheduler_ ; - } -} diff --git a/xios_2311_src/src/manager/services.hpp b/xios_2311_src/src/manager/services.hpp deleted file mode 100755 index 27e54de9..00000000 --- a/xios_2311_src/src/manager/services.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef __SERVICE_HPP__ -#define __SERVICE_HPP__ - -#include "xios_spl.hpp" -#include "mpi.hpp" -#include "services_manager.hpp" -#include "event_scheduler.hpp" - -namespace xios -{ - - class CServerContext ; - - class CService - { - public: - - const int NOTIFY_NOTHING=0 ; - const int NOTIFY_CREATE_CONTEXT=1 ; - - CService(MPI_Comm serviceComm, const std::string& poolId, const std::string& serviceId, const int& partitionId, - int type, int nbPartitions) ; - ~CService() ; - - bool eventLoop(bool serviceOnly=false) ; - void createContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) ; - void checkCreateContextNotification(void) ; - void createContextNotify(int rank, const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) ; - void createContextDumpOut(CBufferOut& buffer) ; - void createContextDumpIn(CBufferIn& buffer) ; - void createNewContext(const std::string& poolId, const std::string& serviceId, const int& partitionId, const std::string& contextId) ; - CServerContext* getServerContext(const std::string& contextId) { return contexts_[contextId]; } - void finalizeSignal(void) ; - CEventScheduler* getEventScheduler(void) ; - - std::string getPoolId(void) {return poolId_;} - std::string getServiceId(void) {return serviceId_;} - int getPartitionId(void) {return partitionId_;} - int getType(void) {return type_;} - int getNbPartitions(void) {return nbPartitions_;} - - private: - void sendNotification(int rank) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - void checkNotifications(void) ; - void createContext(void) ; - - MPI_Comm serviceComm_ ; - MPI_Comm globalComm_ ; - - const size_t maxBufferSize_=1024*1024 ; - const int localLeader_=0 ; - int globalLeader_ ; - CWindowManager* winNotify_ ; - - std::string name_ ; - - std::list> notifications_; - - bool hasNotification_ ; - int notifyInType_,notifyOutType_ ; - std::tuple notifyInCreateContext_, notifyOutCreateContext_ ; - - std::map contexts_ ; - bool finalizeSignal_ ; - CEventScheduler* eventScheduler_ ; - - std::string poolId_ ; - std::string serviceId_ ; - int partitionId_ ; - int type_ ; - int nbPartitions_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - }; - -} - - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/services_manager.cpp b/xios_2311_src/src/manager/services_manager.cpp deleted file mode 100755 index 88dbc6fb..00000000 --- a/xios_2311_src/src/manager/services_manager.cpp +++ /dev/null @@ -1,266 +0,0 @@ -#include "daemons_manager.hpp" -#include "services_manager.hpp" -#include "ressources_manager.hpp" -#include "cxios.hpp" -#include "pool_ressource.hpp" -#include "type.hpp" -#include "server.hpp" -#include "servers_ressource.hpp" -#include "timer.hpp" - -namespace xios -{ - - - - CServicesManager::CServicesManager(bool isXiosServer) - { - - int commRank ; - xiosComm_ = CXios::getXiosComm() ; - MPI_Comm_rank(xiosComm_, &commRank) ; - - - // The global manager leader will be the process of rank 0 - // By "xiosComm" communicator construction - // - if servers exits it will be the root process of the servers communicator - // - otherwise the root process of the first model - - managerGlobalLeader_ = 0 ; - - MPI_Comm_rank(xiosComm_, &commRank) ; - winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - winNotify_->lockWindow(commRank,0) ; - winNotify_->updateToWindow(commRank, this, &CServicesManager::notificationsDumpOut) ; - winNotify_->unlockWindow(commRank,0) ; - - winServices_ = new CWindowManager(xiosComm_, maxBufferSize_) ; - winServices_->lockWindow(commRank,0) ; - winServices_->updateToWindow(commRank, this, &CServicesManager::servicesDumpOut) ; - winServices_->unlockWindow(commRank,0) ; - - MPI_Barrier(xiosComm_) ; - } - - CServicesManager::~CServicesManager() - { - delete winNotify_ ; - delete winServices_ ; - } - - bool CServicesManager::createServices(const std::string& poolId, const std::string& serviceId, - int type, int size, int nbPartitions, bool wait) - { - - int leader ; - int poolSize ; - - info(40)<<"CServicesManager : waiting for pool info : "<getPoolInfo(poolId, poolSize, leader) ; - if (wait) - { - while (!ok) - { - CXios::getDaemonsManager()->eventLoop() ; - ok=CXios::getRessourcesManager()->getPoolInfo(poolId, poolSize, leader) ; - } - } - - if (ok) - { - info(40)<<"CServicesManager : create service notification to leader "<lockWindow(rank,0) ; - winNotify_->updateFromWindow(rank, this, &CServicesManager::notificationsDumpIn) ; - notifications_.push_back(std::make_tuple(serviceId,type,size,nbPartitions)) ; - winNotify_->updateToWindow(rank, this, &CServicesManager::notificationsDumpOut) ; - winNotify_->unlockWindow(rank,0) ; - } - - - void CServicesManager::checkCreateServicesNotification(void) - { - int commRank ; - MPI_Comm_rank(xiosComm_,&commRank) ; - winNotify_->lockWindow(commRank,0) ; - winNotify_->updateFromWindow(commRank, this, &CServicesManager::notificationsDumpIn) ; - - if (!notifications_.empty()) - { - auto info = notifications_.front() ; - xios::info(40)<<"CServicesManager : receive create service notification : "<(info)<getPoolRessource()->createService(get<0>(info), get<1>(info), get<2>(info), get<3>(info)) ; - notifications_.pop_front() ; - winNotify_->updateToWindow(commRank, this, &CServicesManager::notificationsDumpOut) ; - } - winNotify_->unlockWindow(commRank,0) ; - - } - - void CServicesManager::eventLoop(void) - { - CTimer::get("CServicesManager::eventLoop").resume(); - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - double time=MPI_Wtime() ; - if (time-lastEventLoop_ > eventLoopLatency_) - { - checkCreateServicesNotification() ; - lastEventLoop_=time ; - } - CTimer::get("CServicesManager::eventLoop").suspend(); - } - - - void CServicesManager::notificationsDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - buffer<<(int)notifications_.size(); - - for(auto it=notifications_.begin();it!=notifications_.end(); ++it) - buffer << std::get<0>(*it) << static_cast(std::get<1>(*it))<< std::get<2>(*it) << std::get<3>(*it) ; - } - - void CServicesManager::notificationsDumpIn(CBufferIn& buffer) - { - std::string id ; - int type ; - int size; - int nbPartitions ; - - notifications_.clear() ; - int nbNotifications ; - buffer>>nbNotifications ; - for(int i=0;i>id>>type>>size>>nbPartitions ; - notifications_.push_back(std::make_tuple(id,type,size,nbPartitions)) ; - } - } - - - void CServicesManager::servicesDumpOut(CBufferOut& buffer) - { - - buffer.realloc(maxBufferSize_) ; - - buffer<<(int)services_.size(); - - for(auto it=services_.begin();it!=services_.end(); ++it) - { - auto key = it->first ; - auto val = it->second ; - buffer << std::get<0>(key) << std::get<1>(key) << std::get<2>(key) - << static_cast(std::get<0>(val)) << std::get<1>(val) << std::get<2>(val) << std::get<3>(val) ; - } - } - - void CServicesManager::servicesDumpIn(CBufferIn& buffer) - { - std::string poolId, serviceId ; - int partitionId ; - int type ; - int size; - int nbPartitions ; - int leader ; - - services_.clear() ; - int nbServices ; - buffer>>nbServices ; - for(int i=0;i>poolId>>serviceId>>partitionId>>type>>size>>nbPartitions>>leader ; - services_[std::tuple(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; - } - } - - void CServicesManager::registerService(const std::string& poolId, const std::string& serviceId, const int& partitionId, int type, - int size, int nbPartitions, int leader) - { - - info(40)<<"CServicesManager : registering service, poolId : "<lockWindowExclusive(managerGlobalLeader_) ; - winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; - winServices_->flushWindow(managerGlobalLeader_) ; - services_[std::tuple(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; - winServices_->updateToLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpOut) ; - winServices_->unlockWindow(managerGlobalLeader_) ; - -/* - winServices_->lockWindow(managerGlobalLeader_,0) ; - winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; - services_[std::tuple(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; - winServices_->updateToWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpOut) ; - winServices_->unlockWindow(managerGlobalLeader_,0) ;*/ - } - - bool CServicesManager::getServiceInfo(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& type, - int& size, int& nbPartitions, int& leader) - { - - winServices_->lockWindowShared(managerGlobalLeader_) ; - winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; - winServices_->unlockWindow(managerGlobalLeader_) ; -/* - winServices_->lockWindow(managerGlobalLeader_,0) ; - winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; - winServices_->unlockWindow(managerGlobalLeader_,0) ;*/ - - auto it=services_.find(std::tuple(poolId,serviceId,partitionId)) ; - if ( it == services_.end()) return false ; - else - { - type= std::get<0>(it->second); - size= std::get<1>(it->second); - nbPartitions = std::get<2>(it->second); - leader = std::get<3>(it->second); - return true ; - } - } - - bool CServicesManager::getServiceLeader(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& leader) - { - int type; - int size ; - int nbPartitions; - return getServiceInfo(poolId, serviceId, partitionId, type, size, nbPartitions, leader) ; - } - - bool CServicesManager::getServiceType(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& type) - { - int size ; - int nbPartitions; - int leader; - return getServiceInfo(poolId, serviceId, partitionId, type, size, nbPartitions, leader) ; - } - - bool CServicesManager::getServiceNbPartitions(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& nbPartitions) - { - int size ; - int type; - int leader; - return getServiceInfo(poolId, serviceId, partitionId, type, size, nbPartitions, leader) ; - } - - bool CServicesManager::hasService(const std::string& poolId, const std::string& serviceId, const int& partitionId) - { - winServices_->lockWindow(managerGlobalLeader_,0) ; - winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; - winServices_->unlockWindow(managerGlobalLeader_,0) ; - auto it=services_.find(std::tuple(poolId, serviceId, partitionId)) ; - if ( it == services_.end()) return false ; - else return true ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/manager/services_manager.hpp b/xios_2311_src/src/manager/services_manager.hpp deleted file mode 100755 index 218f8553..00000000 --- a/xios_2311_src/src/manager/services_manager.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef __SERVICES_MANAGER_HPP__ -#define __SERVICES_MANAGER_HPP__ - -#include "xios_spl.hpp" -#include "mpi.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" - -#include -#include -#include "window_manager.hpp" - - - -namespace xios -{ - class CServicesManager - { - - public: - static const int CLIENT=0 ; - static const int GATHERER=1 ; - static const int IO_SERVER=2 ; - static const int OUT_SERVER=3 ; - - public: - - CServicesManager(bool isXiosServer) ; - ~CServicesManager() ; - - bool createServices(const std::string& poolId, const std::string& serviceId, int type, int size, int nbPartition, bool wait=true) ; - void createServicesNotify(int rank, const string& serviceId, int type, int size, int nbPartitions) ; - void checkCreateServicesNotification(void) ; - void eventLoop(void) ; - void notificationsDumpOut(CBufferOut& buffer) ; - void notificationsDumpIn(CBufferIn& buffer) ; - - void registerService(const std::string& poolId, const std::string& serviceId, const int& partitionId, int type, int size, int nbPartitions, int leader) ; - bool getServiceInfo(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& type, int& size, int& nbPartition, int& leader) ; - bool getServiceLeader(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& leader) ; - bool getServiceType(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& type) ; - bool getServiceNbPartitions(const std::string& poolId, const std::string& serviceId, const int& partitionId, int& nbPartition) ; - bool hasService(const std::string& poolId, const std::string& serviceId, const int& partitionId) ; - void servicesDumpOut(CBufferOut& buffer) ; - void servicesDumpIn(CBufferIn& buffer) ; - - - private : - - CWindowManager* winServices_ ; - CWindowManager* winNotify_ ; - const size_t maxBufferSize_=1024*1024 ; - - MPI_Comm xiosComm_ ; - - std::list > notifications_; - - std::map, std::tuple > services_ ; - - int managerGlobalLeader_ ; - - const double eventLoopLatency_=0; - double lastEventLoop_=0. ; - - friend class CWindowManager ; - } ; - - -} - - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/manager/window_manager.cpp b/xios_2311_src/src/manager/window_manager.cpp deleted file mode 100755 index 66cbb873..00000000 --- a/xios_2311_src/src/manager/window_manager.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "window_manager.hpp" -#include "mpi.hpp" - - - -namespace xios -{ - - -} - diff --git a/xios_2311_src/src/manager/window_manager.hpp b/xios_2311_src/src/manager/window_manager.hpp deleted file mode 100755 index a97f421e..00000000 --- a/xios_2311_src/src/manager/window_manager.hpp +++ /dev/null @@ -1,376 +0,0 @@ -#ifndef __WINDOW_MANAGER_HPP__ -#define __WINDOW_MANAGER_HPP__ - -#include -#include "mpi.hpp" -#include "buffer_in.hpp" -#include "buffer_out.hpp" -#include "message.hpp" - -namespace xios -{ - - - class CWindowManager - { - - private : - const MPI_Aint OFFSET_LOCK=0 ; - const int SIZE_LOCK=sizeof(int) ; - const MPI_Aint OFFSET_BUFFER_SIZE=OFFSET_LOCK+SIZE_LOCK ; - const int SIZE_BUFFER_SIZE=sizeof(size_t) ; - const MPI_Aint OFFSET_BUFFER=OFFSET_BUFFER_SIZE+SIZE_BUFFER_SIZE ; - const int WINDOWS_LOCKED=-1 ; - - MPI_Win window_ ; - void * winBuffer_ ; - map lastTimeLock_ ; - const double latency_=0e-2 ; - - public : - - CWindowManager(MPI_Comm winComm, size_t bufferSize) - { - const MPI_Aint windowSize=bufferSize+OFFSET_BUFFER ; - MPI_Win_allocate(windowSize, 1, MPI_INFO_NULL, winComm, &winBuffer_, &window_) ; - int lock=0 ; - size_t size=0 ; - int commRank ; - MPI_Comm_rank(winComm, &commRank) ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, commRank, 0, window_) ; - MPI_Put(&lock, SIZE_LOCK, MPI_CHAR, commRank, OFFSET_LOCK, SIZE_LOCK, MPI_CHAR, window_) ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, commRank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_unlock(commRank, window_) ; - MPI_Barrier(winComm) ; - } - - void lockWindow(int rank, int state ) - { - int lock=state ; - double time ; - auto it=lastTimeLock_.find(rank) ; - if (it == lastTimeLock_.end()) - { - lastTimeLock_[rank] = 0. ; - it=lastTimeLock_.find(rank) ; - } - double& lastTime = it->second ; - - do - { - time=MPI_Wtime() ; - while(time-lastTime < latency_) time=MPI_Wtime() ; - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Compare_and_swap(&WINDOWS_LOCKED, &state, &lock, MPI_INT, rank, OFFSET_LOCK, window_) ; - MPI_Win_unlock(rank, window_) ; - lastTime=MPI_Wtime() ; - } while (lock!=state) ; - - - } - - void lockWindowExclusive(int rank, int state ) - { - int lock=state ; - double time ; - auto it=lastTimeLock_.find(rank) ; - if (it == lastTimeLock_.end()) - { - lastTimeLock_[rank] = 0. ; - it=lastTimeLock_.find(rank) ; - } - double& lastTime = it->second ; - - do - { - time=MPI_Wtime() ; - while(time-lastTime < latency_) time=MPI_Wtime() ; - int flag ; - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Compare_and_swap(&WINDOWS_LOCKED, &state, &lock, MPI_INT, rank, OFFSET_LOCK, window_) ; - MPI_Win_unlock(rank, window_) ; - lastTime=MPI_Wtime() ; - } while (lock!=state) ; - } - - void lockWindowExclusive(int rank) - { - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - } - - void lockWindowShared(int rank) - { - MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - } - - void unlockWindow(int rank) - { - MPI_Win_unlock(rank, window_) ; - } - - void flushWindow(int rank) - { - MPI_Win_flush(rank, window_) ; - } - - void unlockWindow(int rank, int state ) - { - int lock ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Compare_and_swap(&state, &WINDOWS_LOCKED, &lock, MPI_INT, rank, OFFSET_LOCK, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void updateToWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t size=buffer.count() ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void updateToExclusiveWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t size=buffer.count() ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void updateTosharedWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t size=buffer.count() ; - MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void updateToLockedWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t size=buffer.count() ; -// MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_flush(rank, window_) ; -// MPI_Win_unlock(rank, window_) ; - } - - template< typename T > - void updateFromWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - (object->*dumpIn)(buffer) ; - } - - template< typename T > - void updateFromExclusiveWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - (object->*dumpIn)(buffer) ; - } - - template< typename T > - void updateFromSharedWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - (object->*dumpIn)(buffer) ; - } - - template< typename T > - void updateFromLockedWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; -// MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; -// MPI_Win_unlock(rank, window_) ; - MPI_Win_flush(rank, window_) ; - (object->*dumpIn)(buffer) ; - } - - - template< class T > - void pushToWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t bufferSize=buffer.count() ; - size_t newSize = size + bufferSize; - MPI_Put(&newSize, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), bufferSize, MPI_CHAR, rank, OFFSET_BUFFER+size, bufferSize, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void pushToExclusiveWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t bufferSize=buffer.count() ; - size_t newSize = size + bufferSize; - MPI_Put(&newSize, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), bufferSize, MPI_CHAR, rank, OFFSET_BUFFER+size, bufferSize, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void pushToSharedWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t bufferSize=buffer.count() ; - size_t newSize = size + bufferSize; - MPI_Put(&newSize, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), bufferSize, MPI_CHAR, rank, OFFSET_BUFFER+size, bufferSize, MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - } - - template< class T > - void pushToLockedWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) - { - size_t size ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferOut buffer ; - (object->*dumpOut)(buffer) ; - size_t bufferSize=buffer.count() ; - size_t newSize = size + bufferSize; - MPI_Put(&newSize, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.start(), bufferSize, MPI_CHAR, rank, OFFSET_BUFFER+size, bufferSize, MPI_CHAR, window_) ; - MPI_Win_flush(rank, window_) ; - } - - template< typename T > - void popFromWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - (object->*dumpIn)(buffer) ; - - size=buffer.remain() ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.ptr(),buffer.remain(), MPI_CHAR, rank, OFFSET_BUFFER, buffer.remain(), MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - - } - - template< typename T > - void popFromExclusiveWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - (object->*dumpIn)(buffer) ; - - size=buffer.remain() ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.ptr(),buffer.remain(), MPI_CHAR, rank, OFFSET_BUFFER, buffer.remain(), MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - - } - - template< typename T > - void popFromSharedWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, window_) ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - (object->*dumpIn)(buffer) ; - - size=buffer.remain() ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.ptr(),buffer.remain(), MPI_CHAR, rank, OFFSET_BUFFER, buffer.remain(), MPI_CHAR, window_) ; - MPI_Win_unlock(rank, window_) ; - - } - - template< typename T > - void popFromLockedWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) ) - { - size_t size ; - MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - CBufferIn buffer(size) ; - MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; - MPI_Win_flush(rank,window_) ; - (object->*dumpIn)(buffer) ; - - size=buffer.remain() ; - MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; - MPI_Put(buffer.ptr(),buffer.remain(), MPI_CHAR, rank, OFFSET_BUFFER, buffer.remain(), MPI_CHAR, window_) ; - MPI_Win_flush(rank, window_) ; - } - - ~CWindowManager() - { - MPI_Win_free(&window_) ; - } - } ; -} - - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/mem_checker.cpp b/xios_2311_src/src/mem_checker.cpp deleted file mode 100755 index 1d5f5b33..00000000 --- a/xios_2311_src/src/mem_checker.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "mem_checker.hpp" -#include "mpi.hpp" -#include -#include -#include -#include -#include - -namespace xios -{ - CMemChecker CMemChecker::dummy_("") ; - std::map CMemChecker::allMemChecker_; - bool CMemChecker::enabled_=true; - bool CMemChecker::first_=true; - - CMemChecker::CMemChecker(const std::string& name) : name_(name) - { - if (first_) check() ; - reset(); - } - - void CMemChecker::check(void) - { - std::ifstream statStream("/proc/self/stat",std::ios_base::in); - enabled_ &= statStream.good() ; - first_=false ; - } - double CMemChecker::getMem(void) - { - if (first_) check() ; - if (!enabled_) return 0; - std::ifstream statStream("/proc/self/stat",std::ios_base::in); - std::string dummy ; - for(int i=1;i<=22;i++) statStream>>dummy ; - unsigned long vsize; - statStream>>vsize ; - return vsize ; - } - - void CMemChecker::suspend(void) - { - if (first_) check() ; - if (!enabled_) return ; - if (!suspended_) cumulatedMem_ += getMem() - lastMem_; - suspended_ = true; - } - - void CMemChecker::resume(void) - { - if (first_) check() ; - if (!enabled_) return ; - if (suspended_) lastMem_ = getMem(); - suspended_ = false; - } - - void CMemChecker::reset(void) - { - if (first_) check() ; - if (!enabled_) return ; - cumulatedMem_ = 0.; - suspended_ = true; - } - - double CMemChecker::getCumulatedMem(void) - { - if (first_) check() ; - if (!enabled_) return 0; - return cumulatedMem_; - } - - CMemChecker& CMemChecker::get(const std::string name) - { - if (first_) check() ; - if (!enabled_) return dummy_ ; - else - { - std::map::iterator it = allMemChecker_.find(name); - if (it == allMemChecker_.end()) - it = allMemChecker_.insert(std::make_pair(name, CMemChecker(name))).first; - return it->second; - } - } - - std::string CMemChecker::getAllCumulatedMem(void) - { - if (first_) check() ; - if (!enabled_) return std::string(" MemChecker : memory consumption report not available") ; - std::ostringstream strOut ; - const double Kb=1024 ; - const double Mb=Kb*1024 ; - const double Gb=Mb*1024 ; - const double Tb=Gb*1024 ; - for(std::map::iterator it=allMemChecker_.begin();it!=allMemChecker_.end();++it) - { - strOut<<"MemChecker : "<first<<" --> consumed memory : " ; - double mem=it->second.getCumulatedMem() ; - if (mem>=Tb) strOut<< mem / Tb<<" Tb"<=Gb) strOut<< mem / Gb<<" Gb"<=Mb) strOut<< mem / Mb<<" Mb"<=Kb) strOut<< mem / Kb<<" Kb"< -#include - -namespace xios -{ - class CMemChecker - { - public: - CMemChecker(const std::string& name); - void suspend(void); - void resume(void); - void reset(void); - double getCumulatedMem(void); - static double getMem(void); - static CMemChecker& get(std::string name); - static std::string getAllCumulatedMem(void) ; - static void disable(void) { enabled_=false ;} - static void enable(void) {enabled_=true ;} - static void release(void) {allMemChecker_.clear();} - private: - static void check(void) ; - double cumulatedMem_; - double lastMem_; - bool suspended_; - std::string name_; - - static std::map allMemChecker_; - static CMemChecker dummy_ ; - static bool first_ ; - static bool enabled_ ; - }; -} - - - -#endif diff --git a/xios_2311_src/src/memtrack.cpp b/xios_2311_src/src/memtrack.cpp index da9d37c7..f014f4a1 100644 --- a/xios_2311_src/src/memtrack.cpp +++ b/xios_2311_src/src/memtrack.cpp @@ -44,16 +44,17 @@ OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include -#include -#include -#include -#include + #include "memtrack.hpp" -#include "log.hpp" -#include "addr2line.hpp" #undef new // IMPORTANT! - +extern "C" +{ + void addr2line(const char *file_name, char** addr, int naddr) ; +#ifdef XIOS_MEMTRACK_LIGHT + void addr2line(const char *file_name, char** addr, int naddr) {} +#endif +} /* ------------------------------------------------------------ */ /* -------------------- namespace MemTrack -------------------- */ /* ------------------------------------------------------------ */ @@ -96,9 +97,8 @@ namespace MemTrack char const *GetTypeName() const { return myTypeName; } void Stamp(char const *filename, int lineNum, char const *typeName); - void backTrace(std::ofstream& memReport, xios::CAddr2line& addr2line) ; - void backTrace(std::ofstream& memReport) ; - + void backTrace(void) ; + static void AddNode(BlockHeader *node); static void RemoveNode(BlockHeader *node); static size_t CountBlocks(); @@ -138,51 +138,20 @@ namespace MemTrack myTypeName = typeName; } - - void BlockHeader::backTrace(std::ofstream& memReport) - { - char** strings ; - strings = backtrace_symbols(stackArray, this->stackSize); - int stackSize=this->stackSize-3 ; - char* buffer ; - char* outputBuffer ; - size_t length=10 ; - outputBuffer = (char*) malloc(length) ; - int status ; - Dl_info info; + void BlockHeader::backTrace(void) + { + +// oss<<"addr2line -C -f -i -s -e ../bin/test_client.exe " ; + char *addr ; + char buffer[20] ; + addr=buffer ; for(int i=0;istackSize-3 ; - - for(int i=0;i> orderedBlocks ; + printf("\n"); + printf("=====================\n"); + printf("Current Memory Blocks\n"); + printf("=====================\n"); + printf("\n"); for (size_t i = 0; i < numBlocks; i++) { - BlockHeader *pBlockHeader = ppBlockHeader[i]; - size_t size = pBlockHeader->GetRequestedSize(); - orderedBlocks.insert({size,pBlockHeader}) ; - } - - xios::CAddr2line myaddr2line ; - size_t i = 0 ; - for(auto& it : orderedBlocks) - { - BlockHeader *pBlockHeader = it.second ; + BlockHeader *pBlockHeader = ppBlockHeader[i]; char const *typeName = pBlockHeader->GetTypeName(); size_t size = pBlockHeader->GetRequestedSize(); char const *fileName = pBlockHeader->GetFilename(); int lineNum = pBlockHeader->GetLineNum(); - if (memtrack_blocks>0 && i>memtrack_blocks) break ; - if (memtrack_size>0 && sizebackTrace(memReport, myaddr2line); - pBlockHeader->backTrace(memReport); - i++ ; + printf("*** #%-6d %5d bytes %-50s\n", i, size, typeName); + printf("... %s:%d\n", fileName, lineNum); + pBlockHeader->backTrace(); } + // Clean up. free(ppBlockHeader); } diff --git a/xios_2311_src/src/memtrack.hpp b/xios_2311_src/src/memtrack.hpp index f0cfd349..0fc2504c 100644 --- a/xios_2311_src/src/memtrack.hpp +++ b/xios_2311_src/src/memtrack.hpp @@ -37,7 +37,6 @@ OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -#include namespace MemTrack { @@ -59,7 +58,7 @@ namespace MemTrack void *TrackMalloc(size_t size); void TrackFree(void *p); void TrackStamp(void *p, const MemStamp &stamp, char const *typeName); - void TrackDumpBlocks(std::ofstream& memReport, size_t memtrack_blocks, size_t memtrack_size); + void TrackDumpBlocks(); void TrackListMemoryUsage(); size_t getCurrentMemorySize(void) ; size_t getMaxMemorySize(void) ; diff --git a/xios_2311_src/src/mpi.hpp b/xios_2311_src/src/mpi.hpp index 73f96268..2850efae 100644 --- a/xios_2311_src/src/mpi.hpp +++ b/xios_2311_src/src/mpi.hpp @@ -11,23 +11,5 @@ #define OMPI_SKIP_MPICXX #include -#include -#include - -#if SIZE_MAX == UCHAR_MAX - #define MPI_SIZE_T MPI_UNSIGNED_CHAR -#elif SIZE_MAX == USHRT_MAX - #define MPI_SIZE_T MPI_UNSIGNED_SHORT -#elif SIZE_MAX == UINT_MAX - #define MPI_SIZE_T MPI_UNSIGNED -#elif SIZE_MAX == ULONG_MAX - #define MPI_SIZE_T MPI_UNSIGNED_LONG -#elif SIZE_MAX == ULLONG_MAX - #define MPI_SIZE_T MPI_UNSIGNED_LONG_LONG -#else - #error "Unable to find MPI_SIZE_T equivalent type" -#endif - -#include "mpi_tools.hpp" #endif diff --git a/xios_2311_src/src/mpi_garbage_collector.hpp b/xios_2311_src/src/mpi_garbage_collector.hpp deleted file mode 100755 index 621a7704..00000000 --- a/xios_2311_src/src/mpi_garbage_collector.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __MPI_GARBAGE_COLLECTOR_HPP__ -#define __MPI_GARBAGE_COLLECTOR_HPP__ -#include "mpi.hpp" -namespace xios -{ - class CMpiGarbageCollector - { - - private: - - struct SType - { - enum {COMM, WIN} type ; - MPI_Comm comm ; - MPI_Win win ; - std::string str; - } ; - std::list stack_ ; - - public: - - void registerCommunicator(MPI_Comm& comm, std::string str="") { stack_.push_back(SType{SType::COMM, comm, MPI_WIN_NULL, str}) ;} - void registerWindow(MPI_Win& win, std::string str="") { stack_.push_back(SType{SType::WIN, MPI_COMM_NULL, win, str}) ;} - void release(void) - { - for( auto& it : stack_) - if (it.type==SType::COMM) MPI_Comm_free(&it.comm); - else if (it.type==SType::WIN) MPI_Win_free(&it.win); - } - } ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/mpi_tag.hpp b/xios_2311_src/src/mpi_tag.hpp index 4b9e7ab1..3f5586a4 100644 --- a/xios_2311_src/src/mpi_tag.hpp +++ b/xios_2311_src/src/mpi_tag.hpp @@ -43,6 +43,7 @@ /* Tag for mpi communication to send and receive info of DOMAIN in domain interpolation*/ #define MPI_DOMAIN_INTERPOLATION_WEIGHT 9 - +/* Tag for mpi communication to send and receive info of DOMAIN in domain interpolation*/ +#define MPI_DOMAIN_INTERPOLATION_SOURCE_RANK 10 #endif diff --git a/xios_2311_src/src/mpi_tools.cpp b/xios_2311_src/src/mpi_tools.cpp deleted file mode 100755 index 1daeac75..00000000 --- a/xios_2311_src/src/mpi_tools.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "mpi.hpp" -#include "mpi_tools.hpp" - - -#include - -namespace xios -{ - int MPI_Bcast_string(std::string& str, int root, MPI_Comm comm) - { - int commRank ; - int ret ; - MPI_Comm_rank(comm,&commRank) ; - int strSize ; - if (commRank==root) strSize=str.size() ; - MPI_Bcast(&strSize,1,MPI_INT,root,comm) ; - - if (commRank==root) ret=MPI_Bcast((char*)str.data(), strSize, MPI_CHAR, root, comm) ; - else - { - char* tmp=new char[strSize] ; - ret=MPI_Bcast(tmp, strSize, MPI_CHAR, root, comm) ; - str=std::string(tmp,strSize) ; - delete [] tmp ; - } - return ret ; - } - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_CHAR ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_SHORT ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_INT ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_SIZE_T ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_FLOAT ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_DOUBLE ;} - - template<> - MPI_Datatype MPI_GetType(void) { return MPI_LONG_DOUBLE ;} - -} diff --git a/xios_2311_src/src/mpi_tools.hpp b/xios_2311_src/src/mpi_tools.hpp deleted file mode 100755 index c2b414d1..00000000 --- a/xios_2311_src/src/mpi_tools.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __XIOS_MPI_TOOLS_HPP__ -#define __XIOS_MPI_TOOLS_HPP__ - -#include - -namespace xios -{ - - int MPI_Bcast_string(std::string& str, int root, MPI_Comm comm) ; - - template - MPI_Datatype MPI_GetType(void) ; - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - template<> - MPI_Datatype MPI_GetType(void); - - -} -#endif diff --git a/xios_2311_src/src/node/axis.cpp b/xios_2311_src/src/node/axis.cpp index 4f068d99..4d1625f6 100755 --- a/xios_2311_src/src/node/axis.cpp +++ b/xios_2311_src/src/node/axis.cpp @@ -13,28 +13,31 @@ #include "client_server_mapping_distributed.hpp" #include "distribution_client.hpp" -#include -#include - namespace xios { /// ////////////////////// Definitions ////////////////////// /// CAxis::CAxis(void) : CObjectTemplate() - , CAxisAttributes(), isChecked(false), relFiles() + , CAxisAttributes(), isChecked(false), relFiles(), areClientAttributesChecked_(false) + , isClientAfterTransformationChecked(false) , hasBounds(false), isCompressible_(false) + , numberWrittenIndexes_(), totalNumberWrittenIndexes_(), offsetWrittenIndexes_() , transformationMap_(), hasValue(false), hasLabel(false) - , clients() + , computedWrittenIndex_(false) + , clients() { } CAxis::CAxis(const StdString & id) : CObjectTemplate(id) - , CAxisAttributes(), isChecked(false), relFiles() + , CAxisAttributes(), isChecked(false), relFiles(), areClientAttributesChecked_(false) + , isClientAfterTransformationChecked(false) , hasBounds(false), isCompressible_(false) + , numberWrittenIndexes_(), totalNumberWrittenIndexes_(), offsetWrittenIndexes_() , transformationMap_(), hasValue(false), hasLabel(false) - , clients() + , computedWrittenIndex_(false) + , clients() { } @@ -55,16 +58,11 @@ namespace xios { m["extract_domain"] = TRANS_EXTRACT_DOMAIN_TO_AXIS; m["temporal_splitting"] = TRANS_TEMPORAL_SPLITTING; m["duplicate_scalar"] = TRANS_DUPLICATE_SCALAR_TO_AXIS; - return true; + + return true ; + } CATCH - - void CAxis::releaseStaticAllocation(void) - { - transformationMapList_.clear() ; - CTransformation::unregisterAllTransformations() ; - CGridTransformationFactory::unregisterAllTransformations() ; - } ///--------------------------------------------------------------- @@ -96,27 +94,20 @@ namespace xios { (!this->n.isEmpty() && (this->n != this->n_glo)); // A condition to make sure that if there is only one client, axis // should be considered to be distributed. This should be a temporary solution - distributed |= (1 == CContext::getCurrent()->intraCommSize_); + distributed |= (1 == CContext::getCurrent()->client->clientSize); return distributed; } CATCH /*! - * Compute if the axis can be ouput in a compressed way. - * In this case the workflow view on server side must be the same - * than the full view for all context rank. The result is stored on - * internal isCompressible_ attribute. + * Test whether the data defined on the axis can be outputted in a compressed way. + * + * \return true if and only if a mask was defined for this axis */ - void CAxis::computeIsCompressible(void) + bool CAxis::isCompressible(void) const TRY { - // mesh is compressible contains some masked or indexed value, ie if full view is different of workflow view. - // But now assume that the size of the 2 view must be equal for everybody. True on server side - int isSameView = getLocalView(CElementView::FULL)->getSize() == getLocalView(CElementView::WORKFLOW)->getSize(); - MPI_Allreduce(MPI_IN_PLACE, &isSameView, 1, MPI_INT, MPI_LAND, CContext::getCurrent()->getIntraComm()) ; - if (isSameView) isCompressible_ = false ; - else isCompressible_ = true ; - isCompressibleComputed_=true ; + return isCompressible_; } CATCH @@ -134,7 +125,57 @@ namespace xios { } CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //---------------------------------------------------------------- + + /*! + Returns the number of indexes written by each server. + \return the number of indexes written by each server + */ + int CAxis::getNumberWrittenIndexes(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return numberWrittenIndexes_[writtenSize]; + } + CATCH_DUMP_ATTR + + /*! + Returns the total number of indexes written by the servers. + \return the total number of indexes written by the servers + */ + int CAxis::getTotalNumberWrittenIndexes(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return totalNumberWrittenIndexes_[writtenSize]; + } + CATCH_DUMP_ATTR + + /*! + Returns the offset of indexes written by each server. + \return the offset of indexes written by each server + */ + int CAxis::getOffsetWrittenIndexes(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return offsetWrittenIndexes_[writtenSize]; + } + CATCH_DUMP_ATTR + + CArray& CAxis::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return compressedIndexToWriteOnServer[writtenSize]; + } + CATCH_DUMP_ATTR + + //---------------------------------------------------------------- /*! * Compute the minimum buffer size required to send the attributes to the server(s). @@ -227,135 +268,19 @@ namespace xios { } CATCH - CAxis* CAxis::get(const string& id, bool noError) - { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CAxis* CAxis::get(string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CAxis* CAxis::get(string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - if (!CField::has(fieldId)) - if (noError) return nullptr ; - else ERROR("CAxis* CAxis::get(string& id, bool noError)", <<" id = "< field Id : < "< doesn't exist"); - CField* field=CField::get(fieldId) ; - return field->getAssociatedAxis(suffix, noError) ; - } - { - if (noError) if(!CObjectFactory::HasObject(id)) return nullptr ; - return CObjectFactory::GetObject(id).get(); - } - } - - bool CAxis::has(const string& id) - { - if (CAxis::get(id,true)==nullptr) return false ; - else return true ; - } - - CField* CAxis::getFieldFromId(const string& id) - { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CField* CAxis::getFieldFromId(const string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CField* CAxis::getFieldFromId(const string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - CField* field=CField::get(fieldId) ; - return field ; - } - else return nullptr; - } - /*! Check common attributes of an axis. This check should be done in the very beginning of work flow */ - void CAxis::checkAttributes(void) - { - if (checkAttributes_done_) return ; - checkGeometricAttributes(true) ; - initializeLocalElement() ; - addFullView() ; - addWorkflowView() ; - addModelView() ; - - checkAttributes_done_ = true ; - } - - void CAxis::resetGeometricAttributes(void) - { - n_glo.reset(); - index.reset(); - n.reset(); - begin.reset(); - mask.reset(); - data_index.reset(); - data_n.reset(); - data_begin.reset(); - value.reset(); - bounds.reset(); - label.reset() ; - } - - void CAxis::setGeometricAttributes(const CAxis& axisSrc) - { - resetGeometricAttributes() ; - n_glo=axisSrc.n_glo; - if (!axisSrc.index.isEmpty()) - { - index.resize(axisSrc.index.shape()) ; - index=axisSrc.index; - } - - n=axisSrc.n; - begin=axisSrc.begin; - if (!axisSrc.mask.isEmpty()) - { - mask.resize(axisSrc.mask.shape()) ; - mask=axisSrc.mask; - } - if (!axisSrc.data_index.isEmpty()) - { - data_index.resize(axisSrc.data_index.shape()) ; - data_index=axisSrc.data_index; - } - data_n=axisSrc.data_n; - data_begin=axisSrc.data_begin; - if (!axisSrc.value.isEmpty()) - { - value.resize(axisSrc.value.shape()) ; - value=axisSrc.value; - } - - if (!axisSrc.bounds.isEmpty()) - { - bounds.resize(axisSrc.bounds.shape()) ; - bounds=axisSrc.bounds; - } - if (!axisSrc.label.isEmpty()) - { - label.resize(axisSrc.label.shape()) ; - label=axisSrc.label; - } - - } - - bool CAxis::checkGeometricAttributes(bool generateError) TRY { CContext* context=CContext::getCurrent(); if (this->n_glo.isEmpty()) - if (generateError) ERROR("CAxis::checkAttributes(void)", - << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " - << "The axis is wrongly defined, attribute 'n_glo' must be specified") - else return false ; + ERROR("CAxis::checkAttributes(void)", + << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " + << "The axis is wrongly defined, attribute 'n_glo' must be specified"); StdSize size = this->n_glo.getValue(); if (!this->index.isEmpty()) @@ -371,22 +296,18 @@ namespace xios { if (!this->begin.isEmpty()) { if (begin < 0 || begin > size - 1) - if (generateError) ERROR("CAxis::checkAttributes(void)", - << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " - << "The axis is wrongly defined, attribute 'begin' (" - << begin.getValue() << ") must be non-negative and smaller than size-1 (" << size - 1 << ").") - else return false ; + ERROR("CAxis::checkAttributes(void)", + << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " + << "The axis is wrongly defined, attribute 'begin' (" << begin.getValue() << ") must be non-negative and smaller than size-1 (" << size - 1 << ")."); } else this->begin.setValue(0); if (!this->n.isEmpty()) { if (n < 0 || n > size) - if (generateError) ERROR("CAxis::checkAttributes(void)", - << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " - << "The axis is wrongly defined, attribute 'n' (" << n.getValue() << ") must be non-negative and smaller than size (" - << size << ").") - else return false ; + ERROR("CAxis::checkAttributes(void)", + << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " + << "The axis is wrongly defined, attribute 'n' (" << n.getValue() << ") must be non-negative and smaller than size (" << size << ")."); } else this->n.setValue(size); @@ -398,30 +319,34 @@ namespace xios { if (!this->value.isEmpty()) { - StdSize true_size = value.numElements(); - if (this->n.getValue() != true_size) - if (generateError) ERROR("CAxis::checkAttributes(void)", - << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " - << "The axis is wrongly defined, attribute 'value' has a different size (" << true_size - << ") than the one defined by the \'size\' attribute (" << n.getValue() << ").") - else return false ; + // Avoid this check at writing because it fails in case of a hole + if (context->hasClient) + { + StdSize true_size = value.numElements(); + if (this->n.getValue() != true_size) + ERROR("CAxis::checkAttributes(void)", + << "[ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] " + << "The axis is wrongly defined, attribute 'value' has a different size (" << true_size + << ") than the one defined by the \'size\' attribute (" << n.getValue() << ")."); + } this->hasValue = true; } - if (!this->checkBounds(generateError)) return false; - if (!this->checkMask(generateError)) return false; - if (!this->checkData(generateError)) return false; - if (!this->checkLabel(generateError)) return false; - - return true ; + this->checkBounds(); + + if (context->hasClient) + { + this->checkMask(); + this->checkData(); + this->checkLabel(); + } } CATCH_DUMP_ATTR - /*! Check the validity of data, fill in values if any, and apply mask. */ - bool CAxis::checkData(bool generateError) + void CAxis::checkData() TRY { if (data_begin.isEmpty()) data_begin.setValue(0); @@ -432,10 +357,9 @@ namespace xios { } else if (data_n.getValue() < 0) { - if (generateError) ERROR("CAxis::checkData(void)", - << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " - << "The data size should be strictly positive ('data_n' = " << data_n.getValue() << ").") - else return false ; + ERROR("CAxis::checkData(void)", + << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " + << "The data size should be strictly positive ('data_n' = " << data_n.getValue() << ")."); } if (data_index.isEmpty()) @@ -458,38 +382,40 @@ namespace xios { { if (data_index.numElements() != data_n) { - if (generateError) ERROR("CAxis::checkData(void)", - << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " - << "The size of data_index = "<< data_index.numElements() << "is not equal to the data size data_n = " - << data_n.getValue() << ").") - else return false ; + ERROR("CAxis::checkData(void)", + << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " + << "The size of data_index = "<< data_index.numElements() << "is not equal to the data size data_n = " << data_n.getValue() << ")."); } for (int i = 0; i < data_n; ++i) { - if (data_index(i) >= 0 && data_index(i)& globalDim, int orderPositionInGrid, const string& fieldId, int posInGrid) + /*! + Check attributes on client side (This name is still adequate???) + */ + void CAxis::checkAttributesOnClient() + TRY { - if (sendAxisToCouplerOut_done_.count(client)!=0) return ; - else sendAxisToCouplerOut_done_.insert(client) ; - - string axisId="_axis["+std::to_string(posInGrid)+"]_of_"+fieldId ; + if (this->areClientAttributesChecked_) return; - } + CContext* context=CContext::getCurrent(); + if (context->hasClient && !context->hasServer) this->checkAttributes(); - string CAxis::getCouplingAlias(const string& fieldId, int posInGrid) - { - return "_axis["+std::to_string(posInGrid)+"]_of_"+fieldId ; - } + this->areClientAttributesChecked_ = true; + } + CATCH_DUMP_ATTR + + /* + The (spatial) transformation sometimes can change attributes of an axis (e.g zoom can change mask or generate can change whole attributes) + Therefore, we should recheck them. + */ + void CAxis::checkAttributesOnClientAfterTransformation(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType) + TRY + { + CContext* context=CContext::getCurrent() ; + + if (this->isClientAfterTransformationChecked) return; + if (context->hasClient) + { + if (orderPositionInGrid == CServerDistributionDescription::defaultDistributedDimension(globalDim.size(), distType)) + computeConnectedClients(globalDim, orderPositionInGrid, distType); + else if (index.numElements() != n_glo) computeConnectedClients(globalDim, orderPositionInGrid, CServerDistributionDescription::ROOT_DISTRIBUTION); + } + + this->isClientAfterTransformationChecked = true; + } + CATCH_DUMP_ATTR + + /* + Send all checked attributes to server? (We dont have notion of server any more so client==server) + \param [in] globalDim global dimension of grid containing this axis + \param [in] orderPositionInGrid the relative order of this axis in the grid (e.g grid composed of domain+axis -> orderPositionInGrid is 2) + \param [in] distType distribution type of the server. For now, we only have band distribution. + + */ + void CAxis::sendCheckedAttributes(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType) + TRY + { + if (!this->areClientAttributesChecked_) checkAttributesOnClient(); + if (!this->isClientAfterTransformationChecked) checkAttributesOnClientAfterTransformation(globalDim, orderPositionInGrid, distType); + CContext* context = CContext::getCurrent(); + + if (this->isChecked) return; + if (context->hasClient) sendAttributes(globalDim, orderPositionInGrid, distType); + + this->isChecked = true; + } + CATCH_DUMP_ATTR - void CAxis::makeAliasForCoupling(const string& fieldId, int posInGrid) + /*! + Send attributes from one client to other clients + \param[in] globalDim global dimension of grid which contains this axis + \param[in] order + */ + void CAxis::sendAttributes(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType) + TRY { - const string axisId = getCouplingAlias(fieldId,posInGrid) ; - this->createAlias(axisId) ; + sendDistributionAttribute(globalDim, orderPositionInGrid, distType); + + // if (index.numElements() == n_glo.getValue()) + if ((orderPositionInGrid == CServerDistributionDescription::defaultDistributedDimension(globalDim.size(), distType)) + || (index.numElements() != n_glo)) + { + sendDistributedAttributes(); + } + else + { + sendNonDistributedAttributes(); + } } + CATCH_DUMP_ATTR - - /*! - Compare two axis objects. - They are equal if only if they have identical attributes as well as their values. - Moreover, they must have the same transformations. - \param [in] axis Compared axis - \return result of the comparison + /* + Compute the connection between group of clients (or clients/servers). + (E.g: Suppose we have 2 group of clients in two model: A (client role) connect to B (server role), + this function calculate number of clients B connect to one client of A) + \param [in] globalDim global dimension of grid containing this axis + \param [in] orderPositionInGrid the relative order of this axis in the grid (e.g grid composed of domain+axis -> orderPositionInGrid is 2) + \param [in] distType distribution type of the server. For now, we only have band distribution. */ - bool CAxis::isEqual(CAxis* obj) + void CAxis::computeConnectedClients(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType) TRY { - vector excludedAttr; - excludedAttr.push_back("axis_ref"); + CContext* context = CContext::getCurrent(); - bool objEqual = SuperClass::isEqual(obj, excludedAttr); - if (!objEqual) return objEqual; + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; - TransMapTypes thisTrans = this->getAllTransformations(); - TransMapTypes objTrans = obj->getAllTransformations(); + connectedServerRank_.clear(); + nbSenders.clear(); - TransMapTypes::const_iterator it, itb, ite; - std::vector thisTransType, objTransType; - for (it = thisTrans.begin(); it != thisTrans.end(); ++it) - thisTransType.push_back(it->first); - for (it = objTrans.begin(); it != objTrans.end(); ++it) - objTransType.push_back(it->first); + for (int p = 0; p < nbSrvPools; ++p) + { + CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; + int nbServer = client->serverSize; + int range, clientSize = client->clientSize; + int rank = client->clientRank; - if (thisTransType.size() != objTransType.size()) return false; - for (int idx = 0; idx < thisTransType.size(); ++idx) - objEqual &= (thisTransType[idx] == objTransType[idx]); + if (connectedServerRank_.find(nbServer) == connectedServerRank_.end()) + { + size_t ni = this->n.getValue(); + size_t ibegin = this->begin.getValue(); + size_t nbIndex = index.numElements(); - return objEqual; + // First of all, we should compute the mapping of the global index and local index of the current client + if (globalLocalIndexMap_.empty()) + { + for (size_t idx = 0; idx < nbIndex; ++idx) + { + globalLocalIndexMap_[index(idx)] = idx; + } + } + + // Calculate the compressed index if any +// std::set writtenInd; +// if (isCompressible_) +// { +// for (int idx = 0; idx < data_index.numElements(); ++idx) +// { +// int ind = CDistributionClient::getAxisIndex(data_index(idx), data_begin, ni); +// +// if (ind >= 0 && ind < ni && mask(ind)) +// { +// ind += ibegin; +// writtenInd.insert(ind); +// } +// } +// } + + // Compute the global index of the current client (process) hold + std::vector nGlobAxis(1); + nGlobAxis[0] = n_glo.getValue(); + + size_t globalSizeIndex = 1, indexBegin, indexEnd; + for (int i = 0; i < nGlobAxis.size(); ++i) globalSizeIndex *= nGlobAxis[i]; + indexBegin = 0; + if (globalSizeIndex <= clientSize) + { + indexBegin = rank%globalSizeIndex; + indexEnd = indexBegin; + } + else + { + for (int i = 0; i < clientSize; ++i) + { + range = globalSizeIndex / clientSize; + if (i < (globalSizeIndex%clientSize)) ++range; + if (i == client->clientRank) break; + indexBegin += range; + } + indexEnd = indexBegin + range - 1; + } + + CArray globalIndex(index.numElements()); + for (size_t idx = 0; idx < globalIndex.numElements(); ++idx) + globalIndex(idx) = index(idx); + + // Describe the distribution of server side + + CServerDistributionDescription serverDescription(nGlobAxis, nbServer, distType); + + std::vector serverZeroIndex; + serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair(indexBegin, indexEnd), 0); + + std::list serverZeroIndexLeader; + std::list serverZeroIndexNotLeader; + CContextClient::computeLeader(client->clientRank, client->clientSize, serverZeroIndex.size(), serverZeroIndexLeader, serverZeroIndexNotLeader); + for (std::list::iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + *it = serverZeroIndex[*it]; + + // Find out the connection between client and server side + CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(), client->intraComm); + clientServerMap->computeServerIndexMapping(globalIndex, nbServer); + CClientServerMapping::GlobalIndexMap& globalIndexAxisOnServer = clientServerMap->getGlobalIndexOnServer(); + + indSrv_[nbServer].swap(globalIndexAxisOnServer); + + if (distType==CServerDistributionDescription::ROOT_DISTRIBUTION) + { + for(int i=1; i >(i,indSrv_[nbServer][0]) ) ; + serverZeroIndexLeader.clear() ; + } + + CClientServerMapping::GlobalIndexMap::const_iterator it = indSrv_[nbServer].begin(), + ite = indSrv_[nbServer].end(); + + for (it = indSrv_[nbServer].begin(); it != ite; ++it) connectedServerRank_[nbServer].push_back(it->first); + + for (std::list::const_iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + connectedServerRank_[nbServer].push_back(*it); + + // Even if a client has no index, it must connect to at least one server and + // send an "empty" data to this server + if (connectedServerRank_[nbServer].empty()) + connectedServerRank_[nbServer].push_back(client->clientRank % client->serverSize); + + nbSenders[nbServer] = CClientServerMapping::computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_[nbServer]); + + delete clientServerMap; + } + } } CATCH_DUMP_ATTR /* - Add transformation into axis. This function only servers for Fortran interface - \param [in] transType transformation type - \param [in] id identifier of the transformation object + Compute the index of data to write into file + (Different from the previous version, this version of XIOS allows data be written into file (classical role), + or transfered to another clients) */ - CTransformation* CAxis::addTransformation(ETranformationType transType, const StdString& id) + void CAxis::computeWrittenIndex() + TRY + { + if (computedWrittenIndex_) return; + computedWrittenIndex_ = true; + + CContext* context=CContext::getCurrent(); + CContextServer* server = context->server; + + // We describe the distribution of client (server) on which data are written + std::vector nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); + nBegin[0] = begin; + nSize[0] = n; + nBeginGlobal[0] = 0; + nGlob[0] = n_glo; + CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); + const CArray& writtenGlobalIndex = srvDist.getGlobalIndex(); + + // Because all written data are local on a client, + // we need to compute the local index on the server from its corresponding global index + size_t nbWritten = 0, indGlo; + std::unordered_map::const_iterator itb = globalLocalIndexMap_.begin(), + ite = globalLocalIndexMap_.end(), it; + CArray::const_iterator itSrvb = writtenGlobalIndex.begin(), + itSrve = writtenGlobalIndex.end(), itSrv; + + localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements()); + nbWritten = 0; + for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) + { + indGlo = *itSrv; + if (ite != globalLocalIndexMap_.find(indGlo)) + { + localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; + } + else + { + localIndexToWriteOnServer(nbWritten) = -1; + } + ++nbWritten; + } + + } + CATCH_DUMP_ATTR + + void CAxis::computeWrittenCompressedIndex(MPI_Comm writtenComm) TRY { - transformationMap_.push_back(std::make_pair(transType, CTransformation::createTransformation(transType,id))); - return transformationMap_.back().second; + int writtenCommSize; + MPI_Comm_size(writtenComm, &writtenCommSize); + if (compressedIndexToWriteOnServer.find(writtenCommSize) != compressedIndexToWriteOnServer.end()) + return; + + if (isCompressible()) + { + size_t nbWritten = 0, indGlo; + CContext* context=CContext::getCurrent(); + CContextServer* server = context->server; + + // We describe the distribution of client (server) on which data are written + std::vector nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); + nBegin[0] = 0; + nSize[0] = n; + nBeginGlobal[0] = 0; + nGlob[0] = n_glo; + CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); + const CArray& writtenGlobalIndex = srvDist.getGlobalIndex(); + std::unordered_map::const_iterator itb = globalLocalIndexMap_.begin(), + ite = globalLocalIndexMap_.end(), it; + + CArray::const_iterator itSrvb = writtenGlobalIndex.begin(), + itSrve = writtenGlobalIndex.end(), itSrv; + std::unordered_map localGlobalIndexMap; + for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) + { + indGlo = *itSrv; + if (ite != globalLocalIndexMap_.find(indGlo)) + { + localGlobalIndexMap[localIndexToWriteOnServer(nbWritten)] = indGlo; + ++nbWritten; + } + } +// +// nbWritten = 0; +// for (int idx = 0; idx < data_index.numElements(); ++idx) +// { +// if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) +// { +// ++nbWritten; +// } +// } +// +// compressedIndexToWriteOnServer[writtenCommSize].resize(nbWritten); +// nbWritten = 0; +// for (int idx = 0; idx < data_index.numElements(); ++idx) +// { +// if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) +// { +// compressedIndexToWriteOnServer[writtenCommSize](nbWritten) = localGlobalIndexMap[data_index(idx)]; +// ++nbWritten; +// } +// } + + nbWritten = 0; + for (int idx = 0; idx < data_index.numElements(); ++idx) + { + if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) + { + ++nbWritten; + } + } + + compressedIndexToWriteOnServer[writtenCommSize].resize(nbWritten); + nbWritten = 0; + for (int idx = 0; idx < data_index.numElements(); ++idx) + { + if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) + { + compressedIndexToWriteOnServer[writtenCommSize](nbWritten) = localGlobalIndexMap[data_index(idx)]; + ++nbWritten; + } + } + + numberWrittenIndexes_[writtenCommSize] = nbWritten; + + bool distributed_glo, distributed=isDistributed() ; + MPI_Allreduce(&distributed,&distributed_glo, 1, MPI_INT, MPI_LOR, writtenComm) ; + if (distributed_glo) + { + + MPI_Allreduce(&numberWrittenIndexes_[writtenCommSize], &totalNumberWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); + MPI_Scan(&numberWrittenIndexes_[writtenCommSize], &offsetWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); + offsetWrittenIndexes_[writtenCommSize] -= numberWrittenIndexes_[writtenCommSize]; + } + else + totalNumberWrittenIndexes_[writtenCommSize] = numberWrittenIndexes_[writtenCommSize]; + } } CATCH_DUMP_ATTR - /* - Check whether an axis has (spatial) transformation + /*! + Send distribution information from a group of client (client role) to another group of client (server role) + The distribution of a group of client (server role) is imposed by the group of client (client role) + \param [in] globalDim global dimension of grid containing this axis + \param [in] orderPositionInGrid the relative order of this axis in the grid (e.g grid composed of domain+axis -> orderPositionInGrid is 2) + \param [in] distType distribution type of the server. For now, we only have band distribution. */ - bool CAxis::hasTransformation() + void CAxis::sendDistributionAttribute(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType) TRY { - return (!transformationMap_.empty()); + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + int nbServer = client->serverSize; + + CServerDistributionDescription serverDescription(globalDim, nbServer); + serverDescription.computeServerDistribution(); + + std::vector > serverIndexBegin = serverDescription.getServerIndexBegin(); + std::vector > serverDimensionSizes = serverDescription.getServerDimensionSizes(); + + CEventClient event(getType(),EVENT_ID_DISTRIBUTION_ATTRIBUTE); + if (client->isServerLeader()) + { + std::list msgs; + + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + // Use const int to ensure CMessage holds a copy of the value instead of just a reference + const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; + const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; + + msgs.push_back(CMessage()); + CMessage& msg = msgs.back(); + msg << this->getId(); + msg << ni << begin; + msg << isCompressible_; + + event.push(*itRank,1,msg); + } + client->sendEvent(event); + } + else client->sendEvent(event); + } } CATCH_DUMP_ATTR /* - Set transformation - \param [in] axisTrans transformation to set + Receive distribution attribute from another client + \param [in] event event containing data of these attributes */ - void CAxis::setTransformations(const TransMapTypes& axisTrans) + void CAxis::recvDistributionAttribute(CEventServer& event) TRY { - transformationMap_ = axisTrans; + CBufferIn* buffer = event.subEvents.begin()->buffer; + string axisId; + *buffer >> axisId; + get(axisId)->recvDistributionAttribute(*buffer); } - CATCH_DUMP_ATTR + CATCH /* - Return all transformation held by the axis - \return transformation the axis has + Receive distribution attribute from another client + \param [in] buffer buffer containing data of these attributes */ - CAxis::TransMapTypes CAxis::getAllTransformations(void) + void CAxis::recvDistributionAttribute(CBufferIn& buffer) TRY { - return transformationMap_; + int ni_srv, begin_srv; + buffer >> ni_srv >> begin_srv; + buffer >> isCompressible_; + + // Set up new local size of axis on the receiving clients + n.setValue(ni_srv); + begin.setValue(begin_srv); } CATCH_DUMP_ATTR /* - Duplicate transformation of another axis - \param [in] src axis whose transformations are copied + Send attributes of axis from a group of client to other group of clients/servers + on supposing that these attributes are not distributed among the sending group + In the future, if new attributes are added, they should also be processed in this function */ - void CAxis::duplicateTransformation(CAxis* src) + void CAxis::sendNonDistributedAttributes() TRY { - if (src->hasTransformation()) - { - this->setTransformations(src->getAllTransformations()); + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + + CEventClient event(getType(), EVENT_ID_NON_DISTRIBUTED_ATTRIBUTES); + size_t nbIndex = index.numElements(); + size_t nbDataIndex = 0; + + for (int idx = 0; idx < data_index.numElements(); ++idx) + { + int ind = data_index(idx); + if (ind >= 0 && ind < nbIndex) ++nbDataIndex; + } + + CArray dataIndex(nbDataIndex); + nbDataIndex = 0; + for (int idx = 0; idx < data_index.numElements(); ++idx) + { + int ind = data_index(idx); + if (ind >= 0 && ind < nbIndex) + { + dataIndex(nbDataIndex) = ind; + ++nbDataIndex; + } + } + + if (client->isServerLeader()) + { + std::list msgs; + + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + msgs.push_back(CMessage()); + CMessage& msg = msgs.back(); + msg << this->getId(); + msg << index.getValue() << dataIndex << mask.getValue(); + msg << hasValue; + if (hasValue) msg << value.getValue(); + msg << hasBounds; + if (hasBounds) msg << bounds.getValue(); + msg << hasLabel; + if (hasLabel) msg << label.getValue(); + + event.push(*itRank, 1, msg); + } + client->sendEvent(event); + } + else client->sendEvent(event); } } CATCH_DUMP_ATTR - /*! - * Go through the hierarchy to find the axis from which the transformations must be inherited - */ - void CAxis::solveInheritanceTransformation_old() + /* + Receive the non-distributed attributes from another group of clients + \param [in] event event containing data of these attributes + */ + void CAxis::recvNonDistributedAttributes(CEventServer& event) TRY { - if (hasTransformation() || !hasDirectAxisReference()) - return; - - CAxis* axis = this; - std::vector refAxis; - while (!axis->hasTransformation() && axis->hasDirectAxisReference()) + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) { - refAxis.push_back(axis); - axis = axis->getDirectAxisReference(); + CBufferIn* buffer = it->buffer; + string axisId; + *buffer >> axisId; + get(axisId)->recvNonDistributedAttributes(it->rank, *buffer); } - - if (axis->hasTransformation()) - for (size_t i = 0; i < refAxis.size(); ++i) - refAxis[i]->setTransformations(axis->getAllTransformations()); } - CATCH_DUMP_ATTR + CATCH - void CAxis::solveInheritanceTransformation() + /* + Receive the non-distributed attributes from another group of clients + \param [in] rank rank of the sender + \param [in] buffer buffer containing data sent from the sender + */ + void CAxis::recvNonDistributedAttributes(int rank, CBufferIn& buffer) TRY - { - if (solveInheritanceTransformation_done_) return; - else solveInheritanceTransformation_done_=true ; + { + CArray tmp_index, tmp_data_index; + CArray tmp_mask; + CArray tmp_val; + CArray tmp_bnds; + CArray tmp_label; + + buffer >> tmp_index; + index.reference(tmp_index); + buffer >> tmp_data_index; + data_index.reference(tmp_data_index); + buffer >> tmp_mask; + mask.reference(tmp_mask); + + buffer >> hasValue; + if (hasValue) + { + buffer >> tmp_val; + value.reference(tmp_val); + } - CAxis* axis = this; - std::list refAxis; - bool out=false ; - vector excludedAttr; - excludedAttr.push_back("axis_ref"); - - refAxis.push_front(axis) ; - while (axis->hasDirectAxisReference() && !out) + buffer >> hasBounds; + if (hasBounds) { - CAxis* lastAxis=axis ; - axis = axis->getDirectAxisReference(); - axis->solveRefInheritance() ; - if (!axis->SuperClass::isEqual(lastAxis,excludedAttr)) out=true ; - refAxis.push_front(axis) ; + buffer >> tmp_bnds; + bounds.reference(tmp_bnds); } - CTransformationPaths::TPath path ; - auto& pathList = std::get<2>(path) ; - std::get<0>(path) = EElement::AXIS ; - std::get<1>(path) = refAxis.front()->getId() ; - for (auto& axis : refAxis) + buffer >> hasLabel; + if (hasLabel) { - CAxis::TransMapTypes transformations = axis->getAllTransformations(); - for(auto& transformation : transformations) pathList.push_back({transformation.second->getTransformationType(), - transformation.second->getId()}) ; + buffer >> tmp_label; + label.reference(tmp_label); } - transformationPaths_.addPath(path) ; + // Some value should be reset here + data_begin.setValue(0); + globalLocalIndexMap_.rehash(std::ceil(index.numElements()/globalLocalIndexMap_.max_load_factor())); +// for (int idx = 0; idx < index.numElements(); ++idx) globalLocalIndexMap_[idx] = index(idx); + for (int idx = 0; idx < index.numElements(); ++idx) globalLocalIndexMap_[index(idx)] = idx; } CATCH_DUMP_ATTR - bool CAxis::activateFieldWorkflow(CGarbageCollector& gc) + /* + Send axis attributes from a group of clients to another group of clients/servers + supposing that these attributes are distributed among the clients of the sending group + In future, if new attributes are added, they should also be processed in this function + */ + void CAxis::sendDistributedAttributes(void) TRY { - if (!axis_ref.isEmpty()) + int ind, idx; + std::list::iterator it; + + for (it=clients.begin(); it!=clients.end(); ++it) { - CField* field=getFieldFromId(axis_ref) ; - if (field!=nullptr) + CContextClient* client = *it; + int nbServer = client->serverSize; + + CEventClient eventData(getType(), EVENT_ID_DISTRIBUTED_ATTRIBUTES); + + list listData; + list > list_indi, list_dataInd; + list > list_val; + list > list_bounds; + list > list_label; + + // Cut off the ghost points + int nbIndex = index.numElements(); + CArray dataIndex(nbIndex); + dataIndex = -1; + for (idx = 0; idx < data_index.numElements(); ++idx) { - bool ret = field->buildWorkflowGraph(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state + if (0 <= data_index(idx) && data_index(idx) < nbIndex) + dataIndex(data_index(idx)) = 1; } - else + + std::unordered_map >::const_iterator it, iteMap; + iteMap = indSrv_[nbServer].end(); + for (int k = 0; k < connectedServerRank_[nbServer].size(); ++k) { - CAxis* axis = get(axis_ref) ; - bool ret = axis->activateFieldWorkflow(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state - axis_ref=axis->getId() ; // replace domain_ref by solved reference + int nbData = 0, nbDataCount = 0; + int rank = connectedServerRank_[nbServer][k]; + it = indSrv_[nbServer].find(rank); + if (iteMap != it) + nbData = it->second.size(); + + list_indi.push_back(CArray(nbData)); + list_dataInd.push_back(CArray(nbData)); + + if (hasValue) + list_val.push_back(CArray(nbData)); + + if (hasBounds) + list_bounds.push_back(CArray(2,nbData)); + + if (hasLabel) + list_label.push_back(CArray(nbData)); + + CArray& indi = list_indi.back(); + CArray& dataIndi = list_dataInd.back(); + dataIndi = -1; + + for (int n = 0; n < nbData; ++n) + { + idx = static_cast(it->second[n]); + indi(n) = idx; + + ind = globalLocalIndexMap_[idx]; + dataIndi(n) = dataIndex(ind); + + if (hasValue) + { + CArray& val = list_val.back(); + val(n) = value(ind); + } + + if (hasBounds) + { + CArray& boundsVal = list_bounds.back(); + boundsVal(0, n) = bounds(0,ind); + boundsVal(1, n) = bounds(1,ind); + } + + if (hasLabel) + { + CArray& labelVal = list_label.back(); + labelVal(n) = label(ind); + } + } + + listData.push_back(CMessage()); + listData.back() << this->getId() + << list_indi.back() << list_dataInd.back(); + + listData.back() << hasValue; + if (hasValue) + listData.back() << list_val.back(); + + listData.back() << hasBounds; + if (hasBounds) + listData.back() << list_bounds.back(); + + listData.back() << hasLabel; + if (hasLabel) + listData.back() << list_label.back(); + + eventData.push(rank, nbSenders[nbServer][rank], listData.back()); } + + client->sendEvent(eventData); } - activateFieldWorkflow_done_=true ; - return true ; } CATCH_DUMP_ATTR - - void CAxis::setContextClient(CContextClient* contextClient) + /* + Receive the distributed attributes from another group of clients + \param [in] event event containing data of these attributes + */ + void CAxis::recvDistributedAttributes(CEventServer& event) TRY { - if (clientsSet.find(contextClient)==clientsSet.end()) + string axisId; + vector ranks; + vector buffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) { - clients.push_back(contextClient) ; - clientsSet.insert(contextClient); + ranks.push_back(it->rank); + CBufferIn* buffer = it->buffer; + *buffer >> axisId; + buffers.push_back(buffer); } + get(axisId)->recvDistributedAttributes(ranks, buffers); } - CATCH_DUMP_ATTR + CATCH - void CAxis::parse(xml::CXMLNode & node) + /* + Receive the non-distributed attributes from another group of clients + \param [in] ranks rank of the sender + \param [in] buffers buffer containing data sent from the sender + */ + void CAxis::recvDistributedAttributes(vector& ranks, vector buffers) TRY { - SuperClass::parse(node); + int nbReceived = ranks.size(), idx, ind, gloInd, locInd; + vector > vec_indi(nbReceived), vec_dataInd(nbReceived); + vector > vec_val(nbReceived); + vector > vec_bounds(nbReceived); + vector > vec_label(nbReceived); + + for (idx = 0; idx < nbReceived; ++idx) + { + CBufferIn& buffer = *buffers[idx]; + buffer >> vec_indi[idx]; + buffer >> vec_dataInd[idx]; + + buffer >> hasValue; + if (hasValue) + buffer >> vec_val[idx]; + + buffer >> hasBounds; + if (hasBounds) + buffer >> vec_bounds[idx]; + + buffer >> hasLabel; + if (hasLabel) + buffer >> vec_label[idx]; + } - if (node.goToChildElement()) + // Estimate size of index array + int nbIndexGlob = 0; + for (idx = 0; idx < nbReceived; ++idx) { - StdString nodeElementName; - do - { - StdString nodeId(""); - if (node.getAttributes().end() != node.getAttributes().find("id")) - { nodeId = node.getAttributes()["id"]; } - - nodeElementName = node.getElementName(); - std::map::const_iterator ite = transformationMapList_.end(), it; - it = transformationMapList_.find(nodeElementName); - if (ite != it) - { - transformationMap_.push_back(std::make_pair(it->second, CTransformation::createTransformation(it->second, - nodeId, - &node))); - } - else - { - ERROR("void CAxis::parse(xml::CXMLNode & node)", - << "The transformation " << nodeElementName << " has not been supported yet."); - } - } while (node.goToNextElement()) ; - node.goToParentElement(); + nbIndexGlob += vec_indi[idx].numElements(); } - } - CATCH_DUMP_ATTR - - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - - void CAxis::initializeLocalElement(void) - { - // after checkAttribute index of size n - int rank = CContext::getCurrent()->getIntraCommRank() ; - - CArray ind(n) ; - for (int i=0;i(rank, n_glo, ind) ; - } - - void CAxis::addFullView(void) - { - CArray index(n) ; - for(int i=0; i addView(CElementView::FULL, index) ; - } + // Recompute global index + // Take account of the overlapped index + index.resize(nbIndexGlob); + globalLocalIndexMap_.rehash(std::ceil(index.numElements()/globalLocalIndexMap_.max_load_factor())); + nbIndexGlob = 0; + int nbIndLoc = 0; + for (idx = 0; idx < nbReceived; ++idx) + { + CArray& tmp = vec_indi[idx]; + for (ind = 0; ind < tmp.numElements(); ++ind) + { + gloInd = tmp(ind); + nbIndLoc = (gloInd % n_glo)-begin; + if (0 == globalLocalIndexMap_.count(gloInd)) + { + index(nbIndexGlob) = gloInd % n_glo; + globalLocalIndexMap_[gloInd] = nbIndexGlob; + ++nbIndexGlob; + } + } + } - void CAxis::addWorkflowView(void) - { - // mask + data are included into data_index - int nk=data_index.numElements() ; - int nMask=0 ; - for(int k=0;k=0 && data_index(k) index(nMask) ; - nMask=0 ; - for(int k=0;k=0 && data_index(k) addView(CElementView::WORKFLOW, index) ; - } + // Resize index to its real size + if (nbIndexGlob==0) index.resize(nbIndexGlob) ; + else index.resizeAndPreserve(nbIndexGlob); - void CAxis::addModelView(void) - { - // information for model view is stored in data_index - localElement_->addView(CElementView::MODEL, data_index) ; - } + int nbData = nbIndexGlob; + CArray nonCompressedData(nbData); + nonCompressedData = -1; + // Mask is incorporated into data_index and is not sent/received anymore + mask.resize(0); + if (hasValue) + value.resize(nbData); + if (hasBounds) + bounds.resize(2,nbData); + if (hasLabel) + label.resize(nbData); - void CAxis::computeModelToWorkflowConnector(void) - { - shared_ptr srcView=getLocalView(CElementView::MODEL) ; - shared_ptr dstView=getLocalView(CElementView::WORKFLOW) ; - modelToWorkflowConnector_ = make_shared(srcView, dstView); - modelToWorkflowConnector_->computeConnector() ; - } + nbData = 0; + for (idx = 0; idx < nbReceived; ++idx) + { + CArray& indi = vec_indi[idx]; + CArray& dataIndi = vec_dataInd[idx]; + int nb = indi.numElements(); + for (int n = 0; n < nb; ++n) + { + locInd = globalLocalIndexMap_[size_t(indi(n))]; + nonCompressedData(locInd) = (-1 == nonCompressedData(locInd)) ? dataIndi(n) : nonCompressedData(locInd); - void CAxis::computeRemoteElement(CContextClient* client, EDistributionType type) - { - CContext* context = CContext::getCurrent(); - map> globalIndex ; + if (hasValue) + value(locInd) = vec_val[idx](n); - if (type==EDistributionType::BANDS) // Bands distribution to send to file server - { - int nbServer = client->serverSize; - int nbClient = client->clientSize ; - int rankClient = client->clientRank ; - int size = nbServer / nbClient ; - int start ; - if (nbServer%nbClient > rankClient) - { - start = (size+1) * rankClient ; - size++ ; - } - else start = size*rankClient + nbServer%nbClient ; - - for(int i=0; i rank) + if (hasBounds) { - indStart = (indSize+1) * rank ; - indSize++ ; + bounds(0,locInd) = vec_bounds[idx](0,n); + bounds(1,locInd) = vec_bounds[idx](1,n); } - else indStart = indSize*rank + n_glo%nbServer ; - - auto& globalInd = globalIndex[rank] ; - globalInd.resize(indSize) ; - for(size_t n = 0 ; nserverSize; - size_t nglo=n_glo ; - CArray indGlo(nglo) ; - for(size_t i=0;igetRanksServerLeader()) globalIndex[rankServer].reference(indGlo.copy()); - } - remoteElement_[client] = make_shared(n_glo, globalIndex) ; - remoteElement_[client]->addFullView() ; - } - - void CAxis::distributeToServer(CContextClient* client, std::map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr &scattererConnector, const string& axisId) - { - string serverAxisId = axisId.empty() ? this->getId() : axisId ; - CContext* context = CContext::getCurrent(); - - this->sendAllAttributesToServer(client, serverAxisId) ; - - auto scatteredElement = make_shared(n_glo,globalIndexOut) ; - scatteredElement->addFullView() ; - scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - - // phase 0 - // send remote element to construct the full view on server, ie without hole - CEventClient event0(getType(), EVENT_ID_AXIS_DISTRIBUTION); - CMessage message0 ; - message0<sendToServer(client,event0,message0) ; - // phase 1 - // send the full view of element to construct the connector which connect distributed data coming from client to the full local view - CEventClient event1(getType(), EVENT_ID_AXIS_DISTRIBUTION); - CMessage message1 ; - message1<getView(CElementView::FULL)->getGlobalSize() ; - scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; - - sendDistributedAttributes(client, scattererConnector, axisId) ; - - // phase 2 send the mask : data index + mask2D + int nbCompressedData = 0; + for (idx = 0; idx < nonCompressedData.numElements(); ++idx) { - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - // prepare grid scatterer connector to send data from client to server - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - // create new workflow view for scattered element - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION); - CMessage message2 ; - message2<sendToServer(client, event2, message2) ; - clientToServerConnector_[client] = make_shared(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - clientToServerConnector_[client]->computeConnector() ; + if (0 <= nonCompressedData(idx)) + ++nbCompressedData; } - //////////// - // phase 3 : compute connector to receive from server - //////////// + data_index.resize(nbCompressedData); + nbCompressedData = 0; + for (idx = 0; idx < nonCompressedData.numElements(); ++idx) { - auto scatteredElement = make_shared(n_glo, globalIndexIn) ; - scatteredElement->addFullView() ; - auto scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2, false) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event3(getType(), EVENT_ID_AXIS_DISTRIBUTION); - CMessage message3 ; - message3<sendToServer(client, event3, message3) ; - - clientFromServerConnector_[client] = make_shared(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); - clientFromServerConnector_[client]->computeConnector() ; + if (0 <= nonCompressedData(idx)) + { + data_index(nbCompressedData) = idx % n; + ++nbCompressedData; + } } -// clientFromServerConnector_[client] = make_shared(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); -// clientFromServerConnector_[client]->computeConnector() ; + data_begin.setValue(0); + data_n.setValue(data_index.numElements()); + } + CATCH_DUMP_ATTR + + /*! + Compare two axis objects. + They are equal if only if they have identical attributes as well as their values. + Moreover, they must have the same transformations. + \param [in] axis Compared axis + \return result of the comparison + */ + bool CAxis::isEqual(CAxis* obj) + TRY + { + vector excludedAttr; + excludedAttr.push_back("axis_ref"); + + bool objEqual = SuperClass::isEqual(obj, excludedAttr); + if (!objEqual) return objEqual; + + TransMapTypes thisTrans = this->getAllTransformations(); + TransMapTypes objTrans = obj->getAllTransformations(); + TransMapTypes::const_iterator it, itb, ite; + std::vector thisTransType, objTransType; + for (it = thisTrans.begin(); it != thisTrans.end(); ++it) + thisTransType.push_back(it->first); + for (it = objTrans.begin(); it != objTrans.end(); ++it) + objTransType.push_back(it->first); + if (thisTransType.size() != objTransType.size()) return false; + for (int idx = 0; idx < thisTransType.size(); ++idx) + objEqual &= (thisTransType[idx] == objTransType[idx]); + + return objEqual; } + CATCH_DUMP_ATTR - void CAxis::recvAxisDistribution(CEventServer& event) + /* + Add transformation into axis. This function only servers for Fortran interface + \param [in] transType transformation type + \param [in] id identifier of the transformation object + */ + CTransformation* CAxis::addTransformation(ETranformationType transType, const StdString& id) TRY { - string axisId; - int phasis ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> axisId >> phasis ; - get(axisId)->receivedAxisDistribution(event, phasis); + transformationMap_.push_back(std::make_pair(transType, CTransformation::createTransformation(transType,id))); + return transformationMap_.back().second; } - CATCH - + CATCH_DUMP_ATTR - void CAxis::receivedAxisDistribution(CEventServer& event, int phasis) + /* + Check whether an axis has (spatial) transformation + */ + bool CAxis::hasTransformation() TRY { - CContext* context = CContext::getCurrent(); - if (phasis==0) // receive the remote element to construct the full view - { - localElement_ = make_shared(context->getIntraCommRank(),event) ; - localElement_->addFullView() ; - // construct the local dimension and indexes - auto& globalIndex=localElement_->getGlobalIndex() ; - int nk=globalIndex.numElements() ; - int minK=n_glo,maxK=-1 ; - int nGlo=n_glo ; - int indGlo ; - for(int k=0;kmaxK) maxK=indGlo ; - } - if (maxK>=minK) { begin=minK ; n=maxK-minK+1 ; } - else {begin=0; n=0 ;} - - } - else if (phasis==1) // receive the sent view from client to construct the full distributed full view on server - { - CContext* context = CContext::getCurrent(); - shared_ptr elementFrom = make_shared(event) ; - elementFrom->addFullView() ; - gathererConnector_ = make_shared(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; - gathererConnector_->computeConnector() ; - } - else if (phasis==2) - { -// delete gathererConnector_ ; - elementFrom_ = make_shared(event) ; - elementFrom_->addFullView() ; -// gathererConnector_ = make_shared(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; -// gathererConnector_ -> computeConnector() ; - } - else if (phasis==3) - { - elementTo_ = make_shared(event) ; - elementTo_->addFullView() ; - } + return (!transformationMap_.empty()); } - CATCH + CATCH_DUMP_ATTR - void CAxis::setServerMask(CArray& serverMask, CContextClient* client) + /* + Set transformation + \param [in] axisTrans transformation to set + */ + void CAxis::setTransformations(const TransMapTypes& axisTrans) TRY { - CContext* context = CContext::getCurrent(); - localElement_->addView(CElementView::WORKFLOW, serverMask) ; - mask.reference(serverMask.copy()) ; - - serverFromClientConnector_ = make_shared(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; - serverFromClientConnector_->computeConnector() ; - - serverToClientConnector_ = make_shared(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - serverToClientConnector_->computeConnector() ; + transformationMap_ = axisTrans; } CATCH_DUMP_ATTR - void CAxis::sendDistributedAttributes(CContextClient* client, shared_ptr scattererConnector, const string& axisId) + /* + Return all transformation held by the axis + \return transformation the axis has + */ + CAxis::TransMapTypes CAxis::getAllTransformations(void) + TRY { - string serverAxisId = axisId.empty() ? this->getId() : axisId ; - CContext* context = CContext::getCurrent(); + return transformationMap_; + } + CATCH_DUMP_ATTR - if (hasValue) + /* + Duplicate transformation of another axis + \param [in] src axis whose transformations are copied + */ + void CAxis::duplicateTransformation(CAxis* src) + TRY + { + if (src->hasTransformation()) { - { // send level value - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(value, client, event,message) ; - } + this->setTransformations(src->getAllTransformations()); } + } + CATCH_DUMP_ATTR - if (hasBounds) - { - { // send bounds level value - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(2, bounds, client, event,message) ; - } - } + /*! + * Go through the hierarchy to find the axis from which the transformations must be inherited + */ + void CAxis::solveInheritanceTransformation() + TRY + { + if (hasTransformation() || !hasDirectAxisReference()) + return; - if (hasLabel) + CAxis* axis = this; + std::vector refAxis; + while (!axis->hasTransformation() && axis->hasDirectAxisReference()) { - { // send label - // need to transform array of string (no fixed size for string) into array of array of char - // to use connector to transfer - // the strings must have fixed size which the maximum lenght over the string label. - int maxSize=0 ; - for(int i=0; igetIntraComm()) ; - maxSize=maxSize+1 ; - CArray charArray(maxSize,label.numElements()) ; - for(int j=0; jtransfer(maxSize, charArray, client, event,message) ; - } + refAxis.push_back(axis); + axis = axis->getDirectAxisReference(); } + + if (axis->hasTransformation()) + for (size_t i = 0; i < refAxis.size(); ++i) + refAxis[i]->setTransformations(axis->getAllTransformations()); } + CATCH_DUMP_ATTR - void CAxis::recvDistributedAttributes(CEventServer& event) + void CAxis::setContextClient(CContextClient* contextClient) TRY { - string axisId; - string type ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> axisId >> type ; - get(axisId)->recvDistributedAttributes(event, type); + if (clientsSet.find(contextClient)==clientsSet.end()) + { + clients.push_back(contextClient) ; + clientsSet.insert(contextClient); + } } - CATCH + CATCH_DUMP_ATTR - void CAxis::recvDistributedAttributes(CEventServer& event, const string& type) + void CAxis::parse(xml::CXMLNode & node) TRY { - if (type=="value") - { - gathererConnector_->transfer(event, value, 0.); - } - else if (type=="bounds") - { - CArray value ; - gathererConnector_->transfer(event, 2, value, 0.); - bounds.resize(2,n) ; - if (bounds.numElements() > 0 ) bounds=CArray(value.dataFirst(),shape(2,n),neverDeleteData) ; - } - else if (type=="label") + SuperClass::parse(node); + + if (node.goToChildElement()) { - int maxSize ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> maxSize ; - CArray value ; - gathererConnector_->transfer(event, maxSize, value, '\0'); - CArray charArray(maxSize,n) ; - label.resize(n) ; - if (n>0) + StdString nodeElementName; + do { - charArray=CArray(value.dataFirst(),shape(maxSize,n),neverDeleteData) ; - for(int j=0;j::const_iterator ite = transformationMapList_.end(), it; + it = transformationMapList_.find(nodeElementName); + if (ite != it) + { + transformationMap_.push_back(std::make_pair(it->second, CTransformation::createTransformation(it->second, + nodeId, + &node))); + } + else { - int strSize ; - for(int i=0;i::TransformationMapTypes TransMapTypes; public: /// Constructeurs /// @@ -68,16 +61,17 @@ namespace xios explicit CAxis(const StdString & id); CAxis(const CAxis & axis); // Not implemented yet. CAxis(const CAxis * const axis); // Not implemented yet. - static void releaseStaticAllocation(void) ; // release static allocation on heap static CAxis* createAxis(); - static CAxis* get(const string& id, bool noError=false) ; // & getRelFiles(void) const; - + + int getNumberWrittenIndexes(MPI_Comm writtenCom); + int getTotalNumberWrittenIndexes(MPI_Comm writtenCom); + int getOffsetWrittenIndexes(MPI_Comm writtenCom); + CArray& getCompressedIndexToWriteOnServer(MPI_Comm writtenCom); + std::map getAttributesBufferSize(CContextClient* client, const std::vector& globalDim, int orderPositionInGrid, CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION); @@ -85,26 +79,14 @@ namespace xios bool IsWritten(const StdString & filename) const; bool isWrittenCompressed(const StdString& filename) const; bool isDistributed(void) const; - - public: - /*! - \brief return if the axis can be written or not in a compressed way. - ie if there are some masked or indexed point on the domain. Valid only on server side. - \return true if domain can be writtedn in a compressed way - */ - bool isCompressible(void) { if (!isCompressibleComputed_) computeIsCompressible() ; return isCompressible_ ;} - private: - bool isCompressible_ ; /** specify if the domain can be written in a compressed way */ - bool isCompressibleComputed_=false ; /** Indicate if compressability has been computed*/ - void computeIsCompressible() ; - - public: + bool isCompressible(void) const; /// Mutateur /// void addRelFile(const StdString & filename); void addRelFileCompressed(const StdString& filename); - + /// Vérifications /// + void checkAttributes(void); /// Destructeur /// virtual ~CAxis(void); @@ -119,54 +101,23 @@ namespace xios static ENodeType GetType(void); static bool dispatchEvent(CEventServer& event); - - /// Vérifications /// - void checkAttributes(void); - bool checkAttributes_done_ = false ; - bool checkGeometricAttributes(bool generateError) ; - void setGeometricAttributes(const CAxis& axisSrc) ; - void resetGeometricAttributes(void) ; + + void checkAttributesOnClient(); + void checkAttributesOnClientAfterTransformation(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType = CServerDistributionDescription::BAND_DISTRIBUTION); + void sendCheckedAttributes(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION); + void checkEligibilityForCompressedOutput(); size_t getGlobalWrittenSize(void) ; - ////////////////////////// - ///// transformations //// - ////////////////////////// - public: - typedef CTransformation::TransformationMapTypes TransMapTypes; - private: - static bool initializeTransformationMap(std::map& m); - static std::map transformationMapList_; - static bool dummyTransformationMapList_; - TransMapTypes transformationMap_; - - public: - CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); - CTransformation* addTransformation(ETranformationType transType, CTransformation* transformation) ; - void setTransformations(const TransMapTypes&); - void duplicateTransformation(CAxis*); - TransMapTypes getAllTransformations(); - bool hasTransformation(); - void solveInheritanceTransformation_old(); // to remove later - void solveInheritanceTransformation(); - private: - bool solveInheritanceTransformation_done_= false ; - public: - bool activateFieldWorkflow(CGarbageCollector& gc) ; - private: - bool activateFieldWorkflow_done_=false ; - private: - shared_ptr transformationAlgorithm_ = nullptr ; - public: - void setTransformationAlgorithm(shared_ptr transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;} - shared_ptr getTransformationAlgorithm(void) { return transformationAlgorithm_ ;} - private: - CTransformationPaths transformationPaths_ ; - public: - CTransformationPaths getTransformationPaths(void) {return transformationPaths_;} - void setTransformationPaths(const CTransformationPaths& transformationPaths) { transformationPaths_=transformationPaths ;} - - //////////////////////////// + void computeWrittenIndex(); + void computeWrittenCompressedIndex(MPI_Comm); + bool hasTransformation(); + void solveInheritanceTransformation(); + TransMapTypes getAllTransformations(); + void duplicateTransformation(CAxis*); + CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); bool isEqual(CAxis* axis); public: @@ -174,116 +125,59 @@ namespace xios bool hasBounds; bool hasLabel; + CArray localIndexToWriteOnServer; + private: - bool checkData(bool generateError); - bool checkMask(bool generateError); - bool checkBounds(bool generateError); - bool checkLabel(bool generateError); - - public: - void sendAxisToCouplerOut(CContextClient* client, const std::vector& globalDim, int orderPositionInGrid, const string& fieldId, int posInGrid) ; - private: - std::set sendAxisToCouplerOut_done_ ; - - public: - void makeAliasForCoupling(const string& fieldId, int posInGrid) ; - string getCouplingAlias(const string& fieldId, int posInGrid) ; + void checkData(); + void checkMask(); + void checkBounds(); + void checkLabel(); + void sendAttributes(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType); + void sendDistributionAttribute(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType); + void computeConnectedClients(const std::vector& globalDim, int orderPositionInGrid, + CServerDistributionDescription::ServerDistributionType distType); + + void sendNonDistributedAttributes(void); + void sendDistributedAttributes(void); + + static void recvNonDistributedAttributes(CEventServer& event); + static void recvDistributedAttributes(CEventServer& event); + static void recvDistributionAttribute(CEventServer& event); + void recvNonDistributedAttributes(int rank, CBufferIn& buffer); + void recvDistributedAttributes(vector& rank, vector buffers); + void recvDistributionAttribute(CBufferIn& buffer); + + void setTransformations(const TransMapTypes&); private: -/** Clients that have to send a axis. There can be multiple clients in case of secondary server, otherwise only one client. */ +/** Clients that have to send a domain. There can be multiple clients in case of secondary server, otherwise only one client. */ std::list clients; std::set clientsSet; - private: - /** define if the axis is completed or not ie all attributes have been received before in case - of grid reading from file or coupling */ - bool isCompleted_=true ; - public: - /*! - \brief Check if a axis is completed - Before make any axis processing, we must be sure that all axis informations have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling). So all direct reference of the axis (axis_ref) must be also completed - \return true if axis and axis reference are completed - */ - bool isCompleted(void) - { - if (hasDirectAxisReference()) if (!getDirectAxisReference()->isCompleted()) return false; - else return isCompleted_ ; - - MISSING_RETURN( "bool CAxis::isCompleted() " ); - return true; - } - void setCompleted(void) { isCompleted_=true ; } - void unsetCompleted(void) { isCompleted_=false ; } - - private: bool isChecked; + bool areClientAttributesChecked_; + bool isClientAfterTransformationChecked; std::set relFiles, relFilesCompressed; - std::map > > indSrv_; // Global index of each client sent to server + TransMapTypes transformationMap_; + //! True if and only if the data defined on the axis can be outputted in a compressed way + bool isCompressible_; + std::map > nbSenders; // Mapping of number of communicating client to a server + std::map > > indSrv_; // Global index of each client sent to server + // std::map > indWrittenSrv_; // Global written index of each client sent to server + std::unordered_map globalLocalIndexMap_; + std::vector indexesToWrite; + std::map numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_; + std::map > compressedIndexToWriteOnServer; std::map > connectedServerRank_; - - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - - private: - shared_ptr localElement_ ; - void initializeLocalElement(void) ; - public: - shared_ptr getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } - shared_ptr getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} - private: - void addFullView(void) ; - void addWorkflowView(void) ; - void addModelView(void) ; - - private: - shared_ptr modelToWorkflowConnector_ ; - void computeModelToWorkflowConnector(void) ; - public: - shared_ptr getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} - - public: - void computeRemoteElement(CContextClient* client, EDistributionType) ; - void distributeToServer(CContextClient* client, std::map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr& scattererConnector, const string& axisId="") ; - - static void recvAxisDistribution(CEventServer& event) ; - void receivedAxisDistribution(CEventServer& event, int phasis) ; - void setServerMask(CArray& serverMask, CContextClient* client ) ; - void sendDistributedAttributes(CContextClient* client, shared_ptr scattererConnector, const string& axisId) ; - static void recvDistributedAttributes(CEventServer& event) ; - void recvDistributedAttributes(CEventServer& event, const string& type) ; - private: - map> remoteElement_ ; - public: - shared_ptr getRemoteElement(CContextClient* client) {return remoteElement_[client] ;} - private: - map> clientToServerConnector_ ; - public: - shared_ptr getClientToServerConnector(CContextClient* client) { return clientToServerConnector_[client] ;} - private: - shared_ptr gathererConnector_ ; - public: - shared_ptr getGathererConnector(void) { return gathererConnector_ ;} - private: - shared_ptr serverFromClientConnector_ ; - shared_ptr elementFrom_ ; - public: - shared_ptr getServerFromClientConnector(void) { return serverFromClientConnector_ ;} - - private: - shared_ptr serverToClientConnector_ = nullptr ; - shared_ptr elementTo_ ; - public: - shared_ptr getServerToClientConnector(void) { return serverToClientConnector_ ;} + bool computedWrittenIndex_; private: - map> clientFromServerConnector_ ; - public: - shared_ptr getClientFromServerConnector(CContextClient* client) { return clientFromServerConnector_[client] ;} + static bool initializeTransformationMap(std::map& m); + static std::map transformationMapList_; + static bool dummyTransformationMapList_; DECLARE_REF_FUNC(Axis,axis) }; // class CAxis diff --git a/xios_2311_src/src/node/calendar_wrapper.hpp b/xios_2311_src/src/node/calendar_wrapper.hpp index 02b46dec..11a90bbc 100644 --- a/xios_2311_src/src/node/calendar_wrapper.hpp +++ b/xios_2311_src/src/node/calendar_wrapper.hpp @@ -81,7 +81,6 @@ namespace xios { }; // class CCalendarWrapper - typedef CCalendarWrapper CCalendarWrapperGroup; typedef CCalendarWrapper CCalendarWrapperDefinition; } // namespace xios diff --git a/xios_2311_src/src/node/compute_connectivity_domain.cpp b/xios_2311_src/src/node/compute_connectivity_domain.cpp index 5a972e74..e1f449c2 100644 --- a/xios_2311_src/src/node/compute_connectivity_domain.cpp +++ b/xios_2311_src/src/node/compute_connectivity_domain.cpp @@ -1,5 +1,4 @@ #include "compute_connectivity_domain.hpp" -#include "domain_algorithm_compute_connectivity.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CComputeConnectivityDomain::_dummyRegistered = CComputeConnectivityDomain::registerTrans(); bool CComputeConnectivityDomain::registerTrans() { - return registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, CComputeConnectivityDomain::create); } //---------------------------------------------------------------- @@ -51,18 +50,4 @@ namespace xios { if (local_neighbor.isEmpty()) local_neighbor.resize(1,1); } - shared_ptr CComputeConnectivityDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmComputeConnectivity::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } } diff --git a/xios_2311_src/src/node/compute_connectivity_domain.hpp b/xios_2311_src/src/node/compute_connectivity_domain.hpp index c2f78fc4..137eaf0f 100644 --- a/xios_2311_src/src/node/compute_connectivity_domain.hpp +++ b/xios_2311_src/src/node/compute_connectivity_domain.hpp @@ -19,8 +19,6 @@ namespace xios { class CComputeConnectivityDomainAttributes; class CComputeConnectivityDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; ///-------------------------------------------------------------- @@ -42,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CComputeConnectivityDomainAttributes SuperClassAttribute; - typedef CComputeConnectivityDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -59,25 +55,11 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_COMPUTE_CONNECTIVITY_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); static bool _dummyRegistered; - public: - }; // class CComputeConnectivityDomain + }; // class CComputeConnectivityDomain DECLARE_GROUP(CComputeConnectivityDomain); } // namespace xios diff --git a/xios_2311_src/src/node/context.cpp b/xios_2311_src/src/node/context.cpp index 99bc5d8f..a33e23ca 100644 --- a/xios_2311_src/src/node/context.cpp +++ b/xios_2311_src/src/node/context.cpp @@ -19,21 +19,8 @@ #include #include "server.hpp" #include "distribute_file_server2.hpp" -#include "services_manager.hpp" -#include "contexts_manager.hpp" -#include "cxios.hpp" -#include "client.hpp" -#include "coupler_in.hpp" -#include "coupler_out.hpp" -#include "servers_ressource.hpp" -#include "pool_ressource.hpp" -#include "services.hpp" -#include "contexts_manager.hpp" -#include -#include - -namespace xios -{ + +namespace xios { std::shared_ptr CContext::root; @@ -43,8 +30,8 @@ namespace xios : CObjectTemplate(), CContextAttributes() , calendar(), hasClient(false), hasServer(false) , isPostProcessed(false), finalized(false) - , client(nullptr), server(nullptr) - , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) + , idServer_(), client(0), server(0) + , allProcessed(false), countChildCtx_(0) { /* Ne rien faire de plus */ } @@ -52,8 +39,8 @@ namespace xios : CObjectTemplate(id), CContextAttributes() , calendar(), hasClient(false), hasServer(false) , isPostProcessed(false), finalized(false) - , client(nullptr), server(nullptr) - , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) + , idServer_(), client(0), server(0) + , allProcessed(false), countChildCtx_(0) { /* Ne rien faire de plus */ } CContext::~CContext(void) @@ -62,8 +49,7 @@ namespace xios delete server; for (std::vector::iterator it = clientPrimServer.begin(); it != clientPrimServer.end(); it++) delete *it; for (std::vector::iterator it = serverPrimServer.begin(); it != serverPrimServer.end(); it++) delete *it; - if (registryIn!=nullptr) delete registryIn ; - if (registryOut!=nullptr) delete registryOut ; + } //---------------------------------------------------------------- @@ -74,20 +60,6 @@ namespace xios //---------------------------------------------------------------- - void CContext::initEventScheduler(void) - { - SRegisterContextInfo contextInfo ; - CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ; - - eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; - - // generate unique hash for server - auto time=chrono::system_clock::now().time_since_epoch().count() ; - std::default_random_engine rd(time); // not reproducible from a run to another - std::uniform_int_distribution dist; - hashId_=dist(rd) ; - MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context - } /*! \brief Get context group (context root) \return Context root @@ -100,16 +72,6 @@ namespace xios } CATCH - void CContext::releaseStaticAllocation(void) - TRY - { - CDomain::releaseStaticAllocation(); - CAxis::releaseStaticAllocation(); - CScalar::releaseStaticAllocation(); - if (root) root.reset() ; - } - CATCH - //---------------------------------------------------------------- /*! @@ -299,143 +261,119 @@ namespace xios } CATCH -void CContext::removeContext(const string& contextId) -{ - #define DECLARE_NODE(Name_, name_) CObjectFactory::deleteContext< C##Name_ >(contextId); - #define DECLARE_NODE_PAR(Name_, name_) CObjectFactory::deleteContext< C##Name_ >(contextId); - #include "node_type.conf" - #define DECLARE_NODE(Name_, name_) CObjectFactory::deleteContext< C##Name_##Group >(contextId); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" - -/* - #define DECLARE_NODE(Name_, name_) CObjectFactory::dumpObjects< C##Name_##Group >(); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" - - #define DECLARE_NODE(Name_, name_) CObjectFactory::dumpObjects< C##Name_>(); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" -*/ -} - -void CContext::removeAllContexts(void) -{ - #define DECLARE_NODE(Name_, name_) CObjectFactory::deleteAllContexts< C##Name_ >(); - #define DECLARE_NODE_PAR(Name_, name_) CObjectFactory::deleteAllContexts< C##Name_ >(); - #include "node_type.conf" - #define DECLARE_NODE(Name_, name_) CObjectFactory::deleteAllContexts< C##Name_##Group >(); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" -/* - #define DECLARE_NODE(Name_, name_) CObjectFactory::dumpObjects< C##Name_##Group >(); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" - - #define DECLARE_NODE(Name_, name_) CObjectFactory::dumpObjects< C##Name_>(); - #define DECLARE_NODE_PAR(Name_, name_) - #include "node_type.conf" -*/ - CObjectFactory::deleteAllContexts() ; - CObjectFactory::deleteAllContexts() ; - CObjectFactory::clearCurrentContextId(); - CGroupFactory::clearCurrentContextId(); -} ///--------------------------------------------------------------- - - /*! - * Compute the required buffer size to send the fields data. - * \param maxEventSize [in/out] the size of the bigger event for each connected server - * \param [in] contextClient - * \param [in] bufferForWriting True if buffers are used for sending data for writing - This flag is only true for client and server-1 for communication with server-2 - */ - std::map CContext::getDataBufferSize(std::map& maxEventSize, - CContextClient* contextClient, bool bufferForWriting /*= "false"*/) + //! Initialize client side + void CContext::initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer /*= 0*/) TRY { - std::map dataSize; - // Find all reference domain and axis of all active fields - std::vector& fileList = bufferForWriting ? this->enabledWriteModeFiles : this->enabledReadModeFiles; - size_t numEnabledFiles = fileList.size(); - for (size_t i = 0; i < numEnabledFiles; ++i) + hasClient = true; + MPI_Comm intraCommServer, interCommServer; + + + if (CServer::serverLevel != 1) + // initClient is called by client { - CFile* file = fileList[i]; - if (file->getContextClient() == contextClient) + client = new CContextClient(this, intraComm, interComm, cxtServer); + if (cxtServer) // Attached mode { - std::vector enabledFields = file->getEnabledFields(); - size_t numEnabledFields = enabledFields.size(); - for (size_t j = 0; j < numEnabledFields; ++j) - { - // const std::vector > mapSize = enabledFields[j]->getGridDataBufferSize(contextClient); - const std::map mapSize = enabledFields[j]->getGridDataBufferSize(contextClient,bufferForWriting); - std::map::const_iterator it = mapSize.begin(), itE = mapSize.end(); - for (; it != itE; ++it) - { - // If dataSize[it->first] does not exist, it will be zero-initialized - // so we can use it safely without checking for its existance - if (CXios::isOptPerformance) - dataSize[it->first] += it->second; - else if (dataSize[it->first] < it->second) - dataSize[it->first] = it->second; - - if (maxEventSize[it->first] < it->second) - maxEventSize[it->first] = it->second; - } - } + intraCommServer = intraComm; + interCommServer = interComm; + } + else + { + MPI_Comm_dup(intraComm, &intraCommServer); + comms.push_back(intraCommServer); + MPI_Comm_dup(interComm, &interCommServer); + comms.push_back(interCommServer); } +/* for registry take the id of client context */ +/* for servers, supress the _server_ from id */ + string contextRegistryId=getId() ; + size_t pos=contextRegistryId.find("_server_") ; + if (pos!=std::string::npos) contextRegistryId=contextRegistryId.substr(0,pos) ; + + registryIn=new CRegistry(intraComm); + registryIn->setPath(contextRegistryId) ; + if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; + registryIn->bcastRegistry() ; + registryOut=new CRegistry(intraComm) ; + + registryOut->setPath(contextRegistryId) ; + + server = new CContextServer(this, intraCommServer, interCommServer); + } + else + // initClient is called by primary server + { + clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); + MPI_Comm_dup(intraComm, &intraCommServer); + comms.push_back(intraCommServer); + MPI_Comm_dup(interComm, &interCommServer); + comms.push_back(interCommServer); + serverPrimServer.push_back(new CContextServer(this, intraCommServer, interCommServer)); } - return dataSize; } CATCH_DUMP_ATTR -/*! - * Compute the required buffer size to send the attributes (mostly those grid related). - * \param maxEventSize [in/out] the size of the bigger event for each connected server - * \param [in] contextClient - * \param [in] bufferForWriting True if buffers are used for sending data for writing - This flag is only true for client and server-1 for communication with server-2 - */ - std::map CContext::getAttributesBufferSize(std::map& maxEventSize, - CContextClient* contextClient, bool bufferForWriting /*= "false"*/) + /*! + Sets client buffers. + \param [in] contextClient + \param [in] bufferForWriting True if buffers are used for sending data for writing + This flag is only true for client and server-1 for communication with server-2 + */ + void CContext::setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting) TRY { - // As calendar attributes are sent even if there are no active files or fields, maps are initialized according the size of calendar attributes - std::map attributesSize = CCalendarWrapper::get(CCalendarWrapper::GetDefName())->getMinimumBufferSizeForAttributes(contextClient); - maxEventSize = CCalendarWrapper::get(CCalendarWrapper::GetDefName())->getMinimumBufferSizeForAttributes(contextClient); + // Estimated minimum event size for small events (10 is an arbitrary constant just for safety) + const size_t minEventSize = CEventClient::headerSize + getIdServer().size() + 10 * sizeof(int); - std::vector& fileList = this->enabledFiles; - size_t numEnabledFiles = fileList.size(); - for (size_t i = 0; i < numEnabledFiles; ++i) + // Ensure there is at least some room for 20 of such events in the buffers + size_t minBufferSize = std::max(CXios::minBufferSize, 20 * minEventSize); + +#define DECLARE_NODE(Name_, name_) \ + if (minBufferSize < sizeof(C##Name_##Definition)) minBufferSize = sizeof(C##Name_##Definition); +#define DECLARE_NODE_PAR(Name_, name_) +#include "node_type.conf" +#undef DECLARE_NODE +#undef DECLARE_NODE_PAR + + // Compute the buffer sizes needed to send the attributes and data corresponding to fields + std::map maxEventSize; + std::map bufferSize = getAttributesBufferSize(maxEventSize, contextClient, bufferForWriting); + std::map dataBufferSize = getDataBufferSize(maxEventSize, contextClient, bufferForWriting); + + std::map::iterator it, ite = dataBufferSize.end(); + for (it = dataBufferSize.begin(); it != ite; ++it) + if (it->second > bufferSize[it->first]) bufferSize[it->first] = it->second; + + // Apply the buffer size factor, check that we are above the minimum buffer size and below the maximum size + ite = bufferSize.end(); + for (it = bufferSize.begin(); it != ite; ++it) { -// CFile* file = this->enabledWriteModeFiles[i]; - CFile* file = fileList[i]; - std::vector enabledFields = file->getEnabledFields(); - size_t numEnabledFields = enabledFields.size(); - for (size_t j = 0; j < numEnabledFields; ++j) - { - const std::map mapSize = enabledFields[j]->getGridAttributesBufferSize(contextClient, bufferForWriting); - std::map::const_iterator it = mapSize.begin(), itE = mapSize.end(); - for (; it != itE; ++it) - { - // If attributesSize[it->first] does not exist, it will be zero-initialized - // so we can use it safely without checking for its existence - if (attributesSize[it->first] < it->second) - attributesSize[it->first] = it->second; + it->second *= CXios::bufferSizeFactor; + if (it->second < minBufferSize) it->second = minBufferSize; + if (it->second > CXios::maxBufferSize) it->second = CXios::maxBufferSize; + } - if (maxEventSize[it->first] < it->second) - maxEventSize[it->first] = it->second; - } - } + // Leaders will have to send some control events so ensure there is some room for those in the buffers + if (contextClient->isServerLeader()) + { + const std::list& ranks = contextClient->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + if (!bufferSize.count(*itRank)) + { + bufferSize[*itRank] = minBufferSize; + maxEventSize[*itRank] = minEventSize; + } + } } - return attributesSize; + contextClient->setBufferSize(bufferSize, maxEventSize); } CATCH_DUMP_ATTR - - //! Verify whether a context is initialized bool CContext::isInitialized(void) TRY @@ -444,395 +382,176 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - - void CContext::init(CServerContext* parentServerContext, MPI_Comm intraComm, int serviceType) - TRY - { - parentServerContext_ = parentServerContext ; - if (serviceType==CServicesManager::CLIENT) - initClient(intraComm, serviceType) ; - else - initServer(intraComm, serviceType) ; - initEventScheduler() ; - } - CATCH_DUMP_ATTR - - - -//! Initialize client side - void CContext::initClient(MPI_Comm intraComm, int serviceType) - TRY - { - intraComm_=intraComm ; - MPI_Comm_rank(intraComm_, &intraCommRank_) ; - MPI_Comm_size(intraComm_, &intraCommSize_) ; - - serviceType_ = CServicesManager::CLIENT ; - if (serviceType_==CServicesManager::CLIENT) - { - hasClient=true ; - hasServer=false ; - } - contextId_ = getId() ; - - attached_mode=true ; - if (!CXios::isUsingServer()) attached_mode=false ; - - - string contextRegistryId=getId() ; - registryIn=new CRegistry(CXios::getRegistryManager()->getRegistryIn()); - registryIn->setPath(contextRegistryId) ; - - registryOut=new CRegistry(intraComm_) ; - registryOut->setPath(contextRegistryId) ; - - } - CATCH_DUMP_ATTR - - - void CContext::initServer(MPI_Comm intraComm, int serviceType) + void CContext::initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient /*= 0*/) TRY { hasServer=true; - intraComm_=intraComm ; - MPI_Comm_rank(intraComm_, &intraCommRank_) ; - MPI_Comm_size(intraComm_, &intraCommSize_) ; + server = new CContextServer(this,intraComm,interComm); - serviceType_=serviceType ; +/* for registry take the id of client context */ +/* for servers, supress the _server_ from id */ + string contextRegistryId=getId() ; + size_t pos=contextRegistryId.find("_server_") ; + if (pos!=std::string::npos) contextRegistryId=contextRegistryId.substr(0,pos) ; + + registryIn=new CRegistry(intraComm); + registryIn->setPath(contextRegistryId) ; + if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; + registryIn->bcastRegistry() ; + registryOut=new CRegistry(intraComm) ; + registryOut->setPath(contextRegistryId) ; - if (serviceType_==CServicesManager::GATHERER) + MPI_Comm intraCommClient, interCommClient; + if (cxtClient) // Attached mode { - hasClient=true ; - hasServer=true ; + intraCommClient = intraComm; + interCommClient = interComm; } - else if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) + else { - hasClient=false ; - hasServer=true ; + MPI_Comm_dup(intraComm, &intraCommClient); + comms.push_back(intraCommClient); + MPI_Comm_dup(interComm, &interCommClient); + comms.push_back(interCommClient); } - - CXios::getContextsManager()->getContextId(getId(), contextId_, intraComm) ; - - string contextRegistryId=getId() ; - registryIn=new CRegistry(CXios::getRegistryManager()->getRegistryIn()); - registryIn->setPath(contextRegistryId) ; - - registryOut=new CRegistry(intraComm_) ; - registryOut->setPath(contextRegistryId) ; - + client = new CContextClient(this,intraCommClient,interCommClient, cxtClient); } CATCH_DUMP_ATTR - - void CContext::createClientInterComm(MPI_Comm interCommClient, MPI_Comm interCommServer) // for servers - TRY - { - MPI_Comm intraCommClient ; - MPI_Comm_dup(intraComm_, &intraCommClient); - comms.push_back(intraCommClient); - // attached_mode=parentServerContext_->isAttachedMode() ; //ym probably inherited from source context - server = new CContextServer(this,intraComm_, interCommServer); // check if we need to dupl. intraComm_ ? - client = new CContextClient(this,intraCommClient,interCommClient); - client->setAssociatedServer(server) ; - server->setAssociatedClient(client) ; - - } - CATCH_DUMP_ATTR - - void CContext::createServerInterComm(void) + //! Try to send the buffers and receive possible answers + bool CContext::checkBuffersAndListen(bool enableEventsProcessing /*= true*/) TRY { - - MPI_Comm interCommClient, interCommServer ; + bool clientReady, serverFinished; - if (serviceType_ == CServicesManager::CLIENT) + // Only classical servers are non-blocking + if (CServer::serverLevel == 0) { - - int commRank ; - MPI_Comm_rank(intraComm_,&commRank) ; - if (commRank==0) - { - if (attached_mode) CXios::getContextsManager()->createServerContext(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId()) ; - else if (CXios::usingServer2) CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId()) ; - else CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId()) ; - } - - MPI_Comm interComm ; - - if (attached_mode) - { - parentServerContext_->createIntercomm(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId(), intraComm_, - interCommClient, interCommServer) ; - int type ; - if (commRank==0) CXios::getServicesManager()->getServiceType(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type) ; - MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; - setCurrent(getId()) ; // getCurrent/setCurrent may be supress, it can cause a lot of trouble - } - else if (CXios::usingServer2) - { -// CXios::getContextsManager()->createServerContextIntercomm(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId(), intraComm_, interComm) ; - parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId(), intraComm_, - interCommClient, interCommServer) ; - int type ; - if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultGathererId, 0, type) ; - MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; - } - else - { - //CXios::getContextsManager()->createServerContextIntercomm(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId(), intraComm_, interComm) ; - parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId(), intraComm_, - interCommClient, interCommServer) ; - int type ; - if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ; - MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; - } - - // intraComm client is not duplicated. In all the code we use client->intraComm for MPI - // in future better to replace it by intracommuncator associated to the context - - MPI_Comm intraCommClient, intraCommServer ; - intraCommClient=intraComm_ ; - MPI_Comm_dup(intraComm_, &intraCommServer) ; - client = new CContextClient(this, intraCommClient, interCommClient); - server = new CContextServer(this, intraCommServer, interCommServer); - client->setAssociatedServer(server) ; - server->setAssociatedClient(client) ; + client->checkBuffers(); + bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); + if (hasTmpBufferedEvent) + hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); + // Don't process events if there is a temporarily buffered event + return server->eventLoop(!hasTmpBufferedEvent || !enableEventsProcessing); } - - if (serviceType_ == CServicesManager::GATHERER) + else if (CServer::serverLevel == 1) { - int commRank ; - MPI_Comm_rank(intraComm_,&commRank) ; - - int nbPartitions ; - if (commRank==0) - { - CXios::getServicesManager()->getServiceNbPartitions(CXios::defaultPoolId, CXios::defaultServerId, 0, nbPartitions) ; - for(int i=0 ; icreateServerContext(CXios::defaultPoolId, CXios::defaultServerId, i, getContextId()) ; - } - MPI_Bcast(&nbPartitions, 1, MPI_INT, 0, intraComm_) ; - - MPI_Comm interComm ; - for(int i=0 ; icheckBuffers(); + bool serverFinished = true; + if (!finalized) + serverFinished = server->eventLoop(enableEventsProcessing); + bool serverPrimFinished = true; + for (int i = 0; i < clientPrimServer.size(); ++i) { - parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultServerId, i, getContextId(), intraComm_, interCommClient, interCommServer) ; - int type ; - if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ; - MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; - primServerId_.push_back(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultServerId, i, type, getContextId())) ; - - // intraComm client is not duplicated. In all the code we use client->intraComm for MPI - // in future better to replace it by intracommuncator associated to the context - - MPI_Comm intraCommClient, intraCommServer ; - - intraCommClient=intraComm_ ; - MPI_Comm_dup(intraComm_, &intraCommServer) ; - - CContextClient* client = new CContextClient(this, intraCommClient, interCommClient) ; - CContextServer* server = new CContextServer(this, intraCommServer, interCommServer) ; - client->setAssociatedServer(server) ; - server->setAssociatedClient(client) ; - clientPrimServer.push_back(client); - serverPrimServer.push_back(server); - - + if (!finalized) + clientPrimServer[i]->checkBuffers(); + if (!finalized) + serverPrimFinished *= serverPrimServer[i]->eventLoop(enableEventsProcessing); } + return ( serverFinished && serverPrimFinished); } - } - CATCH_DUMP_ATTR - void CContext::globalEventLoop(void) - { - lockContext() ; - CXios::getDaemonsManager()->eventLoop() ; - unlockContext() ; - setCurrent(getId()) ; - } - - bool CContext::scheduledEventLoop(bool enableEventsProcessing) - { - bool out, finished; - size_t timeLine=timeLine_ ; - if (serviceType_==CServicesManager::CLIENT) + else if (CServer::serverLevel == 2) { - timeLine_++ ; - eventScheduler_->registerEvent(timeLine, hashId_) ; + client->checkBuffers(); + return server->eventLoop(enableEventsProcessing); } - - do - { - finished=eventLoop(enableEventsProcessing) ; - if (serviceType_==CServicesManager::CLIENT) - { - out = eventScheduler_->queryEvent(timeLine,hashId_) ; - if (out) eventScheduler_->popEvent() ; - } - - else out=true ; - } while(!out) ; - - return finished ; - } - - bool CContext::eventLoop(bool enableEventsProcessing) - { - bool finished(true); - if (isLockedContext()) return false; - - setCurrent(getId()) ; - - if (client!=nullptr && !finalized) client->checkBuffers(); - - for (int i = 0; i < clientPrimServer.size(); ++i) - { - if (!finalized) clientPrimServer[i]->checkBuffers(); - if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing); - } - - for (auto couplerOut : couplerOutClient_) - if (!finalized) couplerOut.second->checkBuffers(); - - for (auto couplerIn : couplerInClient_) - if (!finalized) couplerIn.second->checkBuffers(); - - for (auto couplerOut : couplerOutServer_) - if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing); - - for (auto couplerIn : couplerInServer_) - if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing); - - if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing); - setCurrent(getId()) ; - return finalized && finished ; } + CATCH_DUMP_ATTR - void CContext::addCouplingChanel(const std::string& fullContextId, bool out) - { - int contextLeader ; - - if (out) - { - if (couplerOutClient_.find(fullContextId)==couplerOutClient_.end()) - { - bool ok=CXios::getContextsManager()->getContextLeader(fullContextId, contextLeader, getIntraComm()) ; - - MPI_Comm interComm, interCommClient, interCommServer ; - MPI_Comm intraCommClient, intraCommServer ; - - if (ok) MPI_Intercomm_create(getIntraComm(), 0, CXios::getXiosComm(), contextLeader, 0, &interComm) ; - - MPI_Comm_dup(intraComm_, &intraCommClient) ; - MPI_Comm_dup(intraComm_, &intraCommServer) ; - MPI_Comm_dup(interComm, &interCommClient) ; - MPI_Comm_dup(interComm, &interCommServer) ; - CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); - CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); - client->setAssociatedServer(server) ; - server->setAssociatedClient(client) ; - MPI_Comm_free(&interComm) ; - couplerOutClient_[fullContextId] = client ; - couplerOutServer_[fullContextId] = server ; - } - } - else if (couplerInClient_.find(fullContextId)==couplerInClient_.end()) - { - bool ok=CXios::getContextsManager()->getContextLeader(fullContextId, contextLeader, getIntraComm()) ; - - MPI_Comm interComm, interCommClient, interCommServer ; - MPI_Comm intraCommClient, intraCommServer ; - - if (ok) MPI_Intercomm_create(getIntraComm(), 0, CXios::getXiosComm(), contextLeader, 0, &interComm) ; - - MPI_Comm_dup(intraComm_, &intraCommClient) ; - MPI_Comm_dup(intraComm_, &intraCommServer) ; - MPI_Comm_dup(interComm, &interCommServer) ; - MPI_Comm_dup(interComm, &interCommClient) ; - CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); - CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); - client->setAssociatedServer(server) ; - server->setAssociatedClient(client) ; - MPI_Comm_free(&interComm) ; - - couplerInClient_[fullContextId] = client ; - couplerInServer_[fullContextId] = server ; - } - } - + //! Terminate a context void CContext::finalize(void) TRY { - registryOut->hierarchicalGatherRegistry() ; - if (server->intraCommRank==0) CXios::getRegistryManager()->merge(*registryOut) ; - - if (serviceType_==CServicesManager::CLIENT) + if (hasClient && !hasServer) // For now we only use server level 1 to read data { -//ym doPreTimestepOperationsForEnabledReadModeFiles(); // For now we only use server level 1 to read data + doPreTimestepOperationsForEnabledReadModeFiles(); + } + // Send registry upon calling the function the first time + if (countChildCtx_ == 0) + if (hasClient) sendRegistry() ; + + // Client: + // (1) blocking send context finalize to its server + // (2) blocking receive context finalize from its server + // (3) some memory deallocations + if (CXios::isClient) + { + // Make sure that client (model) enters the loop only once + if (countChildCtx_ < 1) + { + ++countChildCtx_; - triggerLateFields() ; + client->finalize(); + while (client->havePendingRequests()) + client->checkBuffers(); - // inform couplerIn that I am finished - for(auto& couplerInClient : couplerInClient_) sendCouplerInContextFinalized(couplerInClient.second) ; + while (!server->hasFinished()) + server->eventLoop(); - // wait until received message from couplerOut that they have finished - bool couplersInFinalized ; - do - { - couplersInFinalized=true ; - for(auto& couplerOutClient : couplerOutClient_) couplersInFinalized &= isCouplerInContextFinalized(couplerOutClient.second) ; - globalEventLoop() ; - } while (!couplersInFinalized) ; - - info(100)<<"DEBUG: context "<finalize(); - info(100)<<"DEBUG: context "<havePendingRequests()) client->checkBuffers(); - info(100)<<"DEBUG: context "<isNotifiedFinalized() ; - } while (!notifiedFinalized) ; + if (hasServer) // Mode attache + { + closeAllFile(); + registryOut->hierarchicalGatherRegistry() ; + if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; + } - server->releaseBuffers(); - client->releaseBuffers(); - info(100)<<"DEBUG: context "<releaseBuffers(); + + //! Free internally allocated communicators + for (std::list::iterator it = comms.begin(); it != comms.end(); ++it) + /* MPI_Comm_free(&(*it)) */ ; // WARNING remove freeing communicator !! --> deadlock raised, to be checked + comms.clear(); + + info(20)<<"CContext: Context <"< is finalized."<finalize(); - bool bufferReleased; - do - { - clientPrimServer[i]->checkBuffers(); - bufferReleased = !clientPrimServer[i]->havePendingRequests(); - } while (!bufferReleased); - - bool notifiedFinalized=false ; - do - { - notifiedFinalized=clientPrimServer[i]->isNotifiedFinalized() ; - } while (!notifiedFinalized) ; - clientPrimServer[i]->releaseBuffers(); + + // (Last) context finalized message received + if (countChildCtx_ == clientPrimServer.size()) + { + // Blocking send of context finalize message to its client (e.g. primary server or model) + info(100)<<"DEBUG: context "<finalize(); + bool bufferReleased; + do + { + client->checkBuffers(); + bufferReleased = !client->havePendingRequests(); + } while (!bufferReleased); + finalized = true; + + closeAllFile(); // Just move to here to make sure that server-level 1 can close files + if (hasServer && !hasClient) + { + registryOut->hierarchicalGatherRegistry() ; + if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; } - closeAllFile(); - } - else if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) - { - closeAllFile(); - client->releaseBuffers(); - server->releaseBuffers(); - } + //! Deallocate client buffers + client->releaseBuffers(); + for (int i = 0; i < clientPrimServer.size(); ++i) + clientPrimServer[i]->releaseBuffers(); - freeComms() ; - - parentServerContext_->freeComm() ; - finalized = true; - info(20)<<"CContext: Context <"< is finalized."<::iterator it = comms.begin(); it != comms.end(); ++it) + /* MPI_Comm_free(&(*it)) */; // WARNING remove freeing communicator !! --> deadlock raised, to be checked + comms.clear(); + + info(20)<<"CContext: Context <"< is finalized."<::iterator it = comms.begin(); it != comms.end(); ++it) - MPI_Comm_free(&(*it)); + /* MPI_Comm_free(&(*it)) */ ; // WARNING remove freeing communicator !! --> deadlock raised, to be checked comms.clear(); } CATCH_DUMP_ATTR @@ -856,367 +575,279 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - - /*! - \brief Close all the context defintion and do processing data - After everything is well defined on client side, they will be processed and sent to server - From the version 2.0, sever and client work no more on the same database. Moreover, client(s) will send - all necessary information to server, from which each server can build its own database. - Because the role of server is to write out field data on a specific netcdf file, - the only information that it needs is the enabled files - and the active fields (fields will be written onto active files) - */ - void CContext::closeDefinition(void) + void CContext::postProcessingGlobalAttributes() TRY { - CTimer::get("Context : close definition").resume() ; + if (allProcessed) return; - // create intercommunicator with servers. - // not sure it is the good place to be called here - createServerInterComm() ; - - // After xml is parsed, there are some more works with post processing -// postProcessing(); + postProcessing(); - - // Make sure the calendar was correctly created - if (serviceType_!=CServicesManager::CLIENT) CCalendarWrapper::get(CCalendarWrapper::GetDefName())->createCalendar(); - if (!calendar) - ERROR("CContext::postProcessing()", << "A calendar must be defined for the context \"" << getId() << "!\"") - else if (calendar->getTimeStep() == NoneDu) - ERROR("CContext::postProcessing()", << "A timestep must be defined for the context \"" << getId() << "!\"") - // Calendar first update to set the current date equals to the start date - calendar->update(0); - - // Résolution des héritages descendants (càd des héritages de groupes) - // pour chacun des contextes. - solveDescInheritance(true); + // Check grid and calculate its distribution + checkGridEnabledFields(); - // Solve inheritance for field to know if enabled or not. - for (auto field : CField::getAll()) field->solveRefInheritance(); + // Distribute files between secondary servers according to the data size + distributeFiles(); - // Check if some axis, domains or grids are eligible to for compressed indexed output. - // Warning: This must be done after solving the inheritance and before the rest of post-processing - // --> later ???? checkAxisDomainsGridsEligibilityForCompressedOutput(); - - // Check if some automatic time series should be generated - // Warning: This must be done after solving the inheritance and before the rest of post-processing - - // The timeseries should only be prepared in client - prepareTimeseries(); - - //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. - findEnabledFiles(); - findEnabledWriteModeFiles(); - findEnabledReadModeFiles(); - findEnabledCouplerIn(); - findEnabledCouplerOut(); - createCouplerInterCommunicator() ; - - // Find all enabled fields of each file - vector&& fileOutField = findAllEnabledFieldsInFileOut(this->enabledWriteModeFiles); - vector&& fileInField = findAllEnabledFieldsInFileIn(this->enabledReadModeFiles); - vector&& couplerOutField = findAllEnabledFieldsCouplerOut(this->enabledCouplerOut); - vector&& couplerInField = findAllEnabledFieldsCouplerIn(this->enabledCouplerIn); - findFieldsWithReadAccess(); - vector& fieldWithReadAccess = fieldsWithReadAccess_ ; - vector fieldModelIn ; // fields potentially from model - - // define if files are on clientSied or serverSide - if (serviceType_==CServicesManager::CLIENT) - { - for (auto& file : enabledWriteModeFiles) file->setClientSide() ; - for (auto& file : enabledReadModeFiles) file->setClientSide() ; - } - else - { - for (auto& file : enabledWriteModeFiles) file->setServerSide() ; - for (auto& file : enabledReadModeFiles) file->setServerSide() ; - } - - - for (auto& field : couplerInField) - { - field->unsetGridCompleted() ; - } -// find all field potentially at workflow end - vector endWorkflowFields ; - endWorkflowFields.reserve(fileOutField.size()+couplerOutField.size()+fieldWithReadAccess.size()) ; - endWorkflowFields.insert(endWorkflowFields.end(),fileOutField.begin(), fileOutField.end()) ; - endWorkflowFields.insert(endWorkflowFields.end(),couplerOutField.begin(), couplerOutField.end()) ; - endWorkflowFields.insert(endWorkflowFields.end(),fieldWithReadAccess.begin(), fieldWithReadAccess.end()) ; - - bool workflowGraphIsCompleted ; - - bool first=true ; - - do - { - workflowGraphIsCompleted=true; - for(auto endWorkflowField : endWorkflowFields) - { - workflowGraphIsCompleted &= endWorkflowField->buildWorkflowGraph(garbageCollector) ; - } - - for(auto couplerIn : enabledCouplerIn) couplerIn->assignContext() ; - for(auto field : couplerInField) field->makeGridAliasForCoupling(); - for(auto field : couplerInField) this->sendCouplerInReady(field->getContextClient()) ; - - - // assign context to coupler out and related fields - for(auto couplerOut : enabledCouplerOut) couplerOut->assignContext() ; - // for now supose that all coupling out endpoint are succesfull. The difficultie is client/server buffer evaluation - for(auto field : couplerOutField) - { - // connect to couplerOut -> to do - } - - bool couplersReady ; - do - { - couplersReady=true ; - for(auto field : couplerOutField) - { - bool ready = isCouplerInReady(field->getContextClient()) ; - if (ready) field->sendFieldToCouplerOut() ; - couplersReady &= ready ; - } - this->scheduledEventLoop() ; + setClientServerBuffer(client, (hasClient && !hasServer)); + for (int i = 0; i < clientPrimServer.size(); ++i) + setClientServerBuffer(clientPrimServer[i], true); - } while (!couplersReady) ; + if (hasClient) + { + // Send all attributes of current context to server + this->sendAllAttributesToServer(); + + // Send all attributes of current calendar + CCalendarWrapper::get(CCalendarWrapper::GetDefName())->sendAllAttributesToServer(); + + // We have enough information to send to server + // First of all, send all enabled files + sendEnabledFiles(this->enabledWriteModeFiles); + // We only use server-level 1 (for now) to read data + if (!hasServer) + sendEnabledFiles(this->enabledReadModeFiles); + + // Then, send all enabled fields + sendEnabledFieldsInFiles(this->enabledWriteModeFiles); + if (!hasServer) + sendEnabledFieldsInFiles(this->enabledReadModeFiles); + + // Then, check whether we have domain_ref, axis_ref or scalar_ref attached to the enabled fields + // If any, so send them to server + sendRefDomainsAxisScalars(this->enabledWriteModeFiles); + if (!hasServer) + sendRefDomainsAxisScalars(this->enabledReadModeFiles); + + // Check whether enabled fields have grid_ref, if any, send this info to server + sendRefGrid(this->enabledFiles); + // This code may be useful in the future when we want to seperate completely read and write + // sendRefGrid(this->enabledWriteModeFiles); + // if (!hasServer) + // sendRefGrid(this->enabledReadModeFiles); - first=false ; - this->scheduledEventLoop() ; - - } while (!workflowGraphIsCompleted) ; - + // A grid of enabled fields composed of several components which must be checked then their + // checked attributes should be sent to server + sendGridComponentEnabledFieldsInFiles(this->enabledFiles); // This code can be seperated in two (one for reading, another for writing) - for( auto field : couplerInField) couplerInFields_.push_back(field) ; + // We have a xml tree on the server side and now, it should be also processed + sendPostProcessing(); + + // Finally, we send information of grid itself to server + sendGridEnabledFieldsInFiles(this->enabledWriteModeFiles); + if (!hasServer) + sendGridEnabledFieldsInFiles(this->enabledReadModeFiles); + } + allProcessed = true; + } + CATCH_DUMP_ATTR - // get all field coming potentially from model - for (auto field : CField::getAll() ) if (field->getModelIn()) fieldModelIn.push_back(field) ; + void CContext::sendPostProcessingGlobalAttributes() + TRY + { + // Use correct context client to send message + // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; + CEventClient event(getType(),EVENT_ID_POST_PROCESS_GLOBAL_ATTRIBUTES); - // Distribute files between secondary servers according to the data size => assign a context to a file and then to fields - if (serviceType_==CServicesManager::GATHERER) distributeFiles(this->enabledWriteModeFiles); - else if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledWriteModeFiles) file->setContextClient(client) ; + if (contextClientTmp->isServerLeader()) + { + CMessage msg; + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } + } + CATCH_DUMP_ATTR - // client side, assign context for file reading - if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledReadModeFiles) file->setContextClient(client) ; - - // server side, assign context where to send file data read - if (serviceType_==CServicesManager::CServicesManager::GATHERER || serviceType_==CServicesManager::IO_SERVER) - for(auto file : this->enabledReadModeFiles) file->setContextClient(client) ; - - // workflow endpoint => sent to IO/SERVER - if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) - { - for(auto field : fileOutField) - { - field->connectToFileServer(garbageCollector) ; // connect the field to server filter - } - for(auto field : fileOutField) field->sendFieldToFileServer() ; - } + void CContext::recvPostProcessingGlobalAttributes(CEventServer& event) + TRY + { + CBufferIn* buffer=event.subEvents.begin()->buffer; + string id; + *buffer>>id; + get(id)->recvPostProcessingGlobalAttributes(*buffer); + } + CATCH - // workflow endpoint => write to file - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) - { - for(auto field : fileOutField) - { - field->connectToFileWriter(garbageCollector) ; // connect the field to server filter - } - } - - // workflow endpoint => Send data from server to client - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::GATHERER) - { - for(auto field : fileInField) - { - field->connectToServerToClient(garbageCollector) ; - } - } + void CContext::recvPostProcessingGlobalAttributes(CBufferIn& buffer) + TRY + { + postProcessingGlobalAttributes(); + } + CATCH_DUMP_ATTR - // workflow endpoint => sent to model on client side - if (serviceType_==CServicesManager::CLIENT) - { - for(auto field : fieldWithReadAccess) field->connectToModelOutput(garbageCollector) ; - } + /*! + \brief Close all the context defintion and do processing data + After everything is well defined on client side, they will be processed and sent to server + From the version 2.0, sever and client work no more on the same database. Moreover, client(s) will send + all necessary information to server, from which each server can build its own database. + Because the role of server is to write out field data on a specific netcdf file, + the only information that it needs is the enabled files + and the active fields (fields will be written onto active files) + */ + void CContext::closeDefinition(void) + TRY + { + CTimer::get("Context : close definition").resume() ; + postProcessingGlobalAttributes(); - // workflow startpoint => data from model - if (serviceType_==CServicesManager::CLIENT) - { - for(auto field : fieldModelIn) - { - field->connectToModelInput(garbageCollector) ; // connect the field to server filter - // grid index will be computed on the fly - } - } - - // workflow startpoint => data from client on server side - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::GATHERER || serviceType_==CServicesManager::OUT_SERVER) - { - for(auto field : fieldModelIn) - { - field->connectToClientInput(garbageCollector) ; // connect the field to server filter - } - } + if (hasClient) sendPostProcessingGlobalAttributes(); + // There are some processings that should be done after all of above. For example: check mask or index + this->buildFilterGraphOfEnabledFields(); - for(auto field : couplerInField) + if (hasClient && !hasServer) { - field->connectToCouplerIn(garbageCollector) ; // connect the field to server filter + buildFilterGraphOfFieldsWithReadAccess(); + postProcessFilterGraph(); } - - for(auto field : couplerOutField) - { - field->connectToCouplerOut(garbageCollector) ; // for now the same kind of filter that for file server - } - - // workflow startpoint => data from server on client side - if (serviceType_==CServicesManager::CLIENT) - { - for(auto field : fileInField) - { - field->sendFieldToInputFileServer() ; - field->connectToServerInput(garbageCollector) ; // connect the field to server filter - fileInFields_.push_back(field) ; - } - } + checkGridEnabledFields(); - // workflow startpoint => data read from file on server side - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::GATHERER) - { - for(auto field : fileInField) - { - field->connectToFileReader(garbageCollector) ; - } - } - - // construct slave server list - if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) - { - for(auto field : fileOutField) slaveServers_.insert(field->getContextClient()) ; - for(auto field : fileInField) slaveServers_.insert(field->getContextClient()) ; - } + if (hasClient) this->sendProcessingGridOfEnabledFields(); + if (hasClient) this->sendCloseDefinition(); - for(auto& slaveServer : slaveServers_) sendCloseDefinition(slaveServer) ; + // Nettoyage de l'arborescence + if (hasClient) CleanTree(); // Only on client side?? - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) + if (hasClient) { - createFileHeader(); + sendCreateFileHeader(); + if (!hasServer) startPrefetchingOfEnabledReadModeFiles(); } + CTimer::get("Context : close definition").suspend() ; + } + CATCH_DUMP_ATTR - if (serviceType_==CServicesManager::CLIENT) startPrefetchingOfEnabledReadModeFiles(); - - // send signal to couplerIn context that definition phasis is done - - for(auto& couplerInClient : couplerInClient_) sendCouplerInCloseDefinition(couplerInClient.second) ; - - // wait until all couplerIn signal that closeDefition is done. - bool ok; - do - { - ok = true ; - for(auto& couplerOutClient : couplerOutClient_) ok &= isCouplerInCloseDefinition(couplerOutClient.second) ; - this->scheduledEventLoop() ; - } while (!ok) ; - - // Now evaluate the size of the context client buffers - map> fieldBufferEvaluation ; - for(auto field : fileOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to server - for(auto field : couplerOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to coupler - for(auto field : fieldModelIn) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // server to client (for io servers) - - // fix size for each context client - for(auto& it : fieldBufferEvaluation) it.first->setBufferSize(it.second) ; + void CContext::findAllEnabledFieldsInFiles(const std::vector& activeFiles) + TRY + { + for (unsigned int i = 0; i < activeFiles.size(); i++) + (void)activeFiles[i]->getEnabledFields(); + } + CATCH_DUMP_ATTR + void CContext::readAttributesOfEnabledFieldsInReadModeFiles() + TRY + { + for (unsigned int i = 0; i < this->enabledReadModeFiles.size(); ++i) + (void)this->enabledReadModeFiles[i]->readAttributesOfEnabledFieldsInReadMode(); + } + CATCH_DUMP_ATTR - CTimer::get("Context : close definition").suspend() ; - } - CATCH_DUMP_ATTR + void CContext::sendGridComponentEnabledFieldsInFiles(const std::vector& activeFiles) + TRY + { + int size = activeFiles.size(); + for (int i = 0; i < size; ++i) + { + activeFiles[i]->sendGridComponentOfEnabledFields(); + } + } + CATCH_DUMP_ATTR + /*! + Send active (enabled) fields in file from a client to others + \param [in] activeFiles files contains enabled fields to send + */ + void CContext::sendGridEnabledFieldsInFiles(const std::vector& activeFiles) + TRY + { + int size = activeFiles.size(); + for (int i = 0; i < size; ++i) + { + activeFiles[i]->sendGridOfEnabledFields(); + } + } + CATCH_DUMP_ATTR - vector CContext::findAllEnabledFieldsInFileOut(const std::vector& activeFiles) + void CContext::checkGridEnabledFields() TRY { - vector fields ; - for(auto file : activeFiles) + int size = enabledFiles.size(); + for (int i = 0; i < size; ++i) { - const vector&& fieldList=file->getEnabledFields() ; - for(auto field : fieldList) field->setFileOut(file) ; - fields.insert(fields.end(),fieldList.begin(),fieldList.end()); + enabledFiles[i]->checkGridOfEnabledFields(); } - return fields ; } CATCH_DUMP_ATTR - vector CContext::findAllEnabledFieldsInFileIn(const std::vector& activeFiles) + /*! + Check grid of active (enabled) fields in file + \param [in] activeFiles files contains enabled fields whose grid needs checking + */ + void CContext::checkGridEnabledFieldsInFiles(const std::vector& activeFiles) TRY { - vector fields ; - for(auto file : activeFiles) + int size = activeFiles.size(); + for (int i = 0; i < size; ++i) { - const vector&& fieldList=file->getEnabledFields() ; - for(auto field : fieldList) field->setFileIn(file) ; - fields.insert(fields.end(),fieldList.begin(),fieldList.end()); + activeFiles[i]->checkGridOfEnabledFields(); } - return fields ; } CATCH_DUMP_ATTR - vector CContext::findAllEnabledFieldsCouplerOut(const std::vector& activeCouplerOut) + /*! + Go up the hierachical tree via field_ref and do check of attributes of fields + This can be done in a client then all computed information will be sent from this client to others + \param [in] sendToServer Flag to indicate whether calculated information will be sent + */ + void CContext::solveOnlyRefOfEnabledFields(bool sendToServer) TRY { - vector fields ; - for (auto couplerOut :activeCouplerOut) + int size = this->enabledFiles.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFiles[i]->solveOnlyRefOfEnabledFields(sendToServer); + } + + for (int i = 0; i < size; ++i) { - const vector&& fieldList=couplerOut->getEnabledFields() ; - for(auto field : fieldList) field->setCouplerOut(couplerOut) ; - fields.insert(fields.end(),fieldList.begin(),fieldList.end()); + this->enabledFiles[i]->generateNewTransformationGridDest(); } - return fields ; } CATCH_DUMP_ATTR - vector CContext::findAllEnabledFieldsCouplerIn(const std::vector& activeCouplerIn) + /*! + Go up the hierachical tree via field_ref and do check of attributes of fields. + The transformation can be done in this step. + All computed information will be sent from this client to others. + \param [in] sendToServer Flag to indicate whether calculated information will be sent + */ + void CContext::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer) TRY { - vector fields ; - for (auto couplerIn :activeCouplerIn) + int size = this->enabledFiles.size(); + for (int i = 0; i < size; ++i) { - const vector&& fieldList=couplerIn->getEnabledFields() ; - for(auto field : fieldList) field->setCouplerIn(couplerIn) ; - fields.insert(fields.end(),fieldList.begin(),fieldList.end()); + this->enabledFiles[i]->solveAllRefOfEnabledFieldsAndTransform(sendToServer); } - return fields ; } CATCH_DUMP_ATTR - /*! - * Send context attribute and calendar to file server, it must be done once by context file server - * \param[in] client : context client to send - */ - void CContext::sendContextToFileServer(CContextClient* client) - { - if (sendToFileServer_done_.count(client)!=0) return ; - else sendToFileServer_done_.insert(client) ; - - this->sendAllAttributesToServer(client); // Send all attributes of current context to server - CCalendarWrapper::get(CCalendarWrapper::GetDefName())->sendAllAttributesToServer(client); // Send all attributes of current cale - } - - - void CContext::readAttributesOfEnabledFieldsInReadModeFiles() + void CContext::buildFilterGraphOfEnabledFields() TRY { - for (unsigned int i = 0; i < this->enabledReadModeFiles.size(); ++i) - (void)this->enabledReadModeFiles[i]->readAttributesOfEnabledFieldsInReadMode(); + int size = this->enabledFiles.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFiles[i]->buildFilterGraphOfEnabledFields(garbageCollector); + } } CATCH_DUMP_ATTR - void CContext::postProcessFilterGraph() TRY { @@ -1264,21 +895,36 @@ void CContext::removeAllContexts(void) void CContext::findFieldsWithReadAccess(void) TRY { - fieldsWithReadAccess_.clear(); + fieldsWithReadAccess.clear(); const vector allFields = CField::getAll(); for (size_t i = 0; i < allFields.size(); ++i) { CField* field = allFields[i]; - if (!field->read_access.isEmpty() && field->read_access && (field->enabled.isEmpty() || field->enabled)) - { - fieldsWithReadAccess_.push_back(field); - field->setModelOut() ; - } + + if (field->file && !field->file->mode.isEmpty() && field->file->mode == CFile::mode_attr::read) + field->read_access = true; + else if (!field->read_access.isEmpty() && field->read_access && (field->enabled.isEmpty() || field->enabled)) + fieldsWithReadAccess.push_back(field); } } CATCH_DUMP_ATTR - + void CContext::solveAllRefOfFieldsWithReadAccess() + TRY + { + for (size_t i = 0; i < fieldsWithReadAccess.size(); ++i) + fieldsWithReadAccess[i]->solveAllReferenceEnabledField(false); + } + CATCH_DUMP_ATTR + + void CContext::buildFilterGraphOfFieldsWithReadAccess() + TRY + { + for (size_t i = 0; i < fieldsWithReadAccess.size(); ++i) + fieldsWithReadAccess[i]->buildFilterGraph(garbageCollector, true); + } + CATCH_DUMP_ATTR + void CContext::solveAllInheritance(bool apply) TRY { @@ -1288,26 +934,19 @@ void CContext::removeAllContexts(void) // Résolution des héritages par référence au niveau des fichiers. const vector allFiles=CFile::getAll(); - const vector allCouplerIn=CCouplerIn::getAll(); - const vector allCouplerOut=CCouplerOut::getAll(); const vector allGrids= CGrid::getAll(); - if (serviceType_==CServicesManager::CLIENT) + if (hasClient && !hasServer) + //if (hasClient) { for (unsigned int i = 0; i < allFiles.size(); i++) allFiles[i]->solveFieldRefInheritance(apply); - - for (unsigned int i = 0; i < allCouplerIn.size(); i++) - allCouplerIn[i]->solveFieldRefInheritance(apply); - - for (unsigned int i = 0; i < allCouplerOut.size(); i++) - allCouplerOut[i]->solveFieldRefInheritance(apply); } unsigned int vecSize = allGrids.size(); unsigned int i = 0; for (i = 0; i < vecSize; ++i) - allGrids[i]->solveElementsRefInheritance(apply); + allGrids[i]->solveDomainAxisRefInheritance(apply); } CATCH_DUMP_ATTR @@ -1364,194 +1003,192 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - void CContext::findEnabledCouplerIn(void) - TRY - { - const std::vector allCouplerIn = CCouplerIn::getAll(); - bool enabled ; - for (size_t i = 0; i < allCouplerIn.size(); i++) - { - if (allCouplerIn[i]->enabled.isEmpty()) enabled=true ; - else enabled=allCouplerIn[i]->enabled ; - if (enabled) enabledCouplerIn.push_back(allCouplerIn[i]) ; - } - } - CATCH_DUMP_ATTR - - void CContext::findEnabledCouplerOut(void) - TRY - { - const std::vector allCouplerOut = CCouplerOut::getAll(); - bool enabled ; - for (size_t i = 0; i < allCouplerOut.size(); i++) - { - if (allCouplerOut[i]->enabled.isEmpty()) enabled=true ; - else enabled=allCouplerOut[i]->enabled ; - if (enabled) enabledCouplerOut.push_back(allCouplerOut[i]) ; - } - } - CATCH_DUMP_ATTR - - - - - void CContext::distributeFiles(const vector& files) + void CContext::distributeFiles(void) TRY { bool distFileMemory=false ; distFileMemory=CXios::getin("server2_dist_file_memory", distFileMemory); - if (distFileMemory) distributeFileOverMemoryBandwith(files) ; - else distributeFileOverBandwith(files) ; + if (distFileMemory) distributeFileOverMemoryBandwith() ; + else distributeFileOverBandwith() ; } CATCH_DUMP_ATTR - void CContext::distributeFileOverBandwith(const vector& files) + void CContext::distributeFileOverBandwith(void) TRY { double eps=std::numeric_limits::epsilon()*10 ; - std::ofstream ofs(("distribute_file_"+getId()+".dat").c_str(), std::ofstream::out); - int nbPools = clientPrimServer.size(); - - // (1) Find all enabled files in write mode - // for (int i = 0; i < this->enabledFiles.size(); ++i) - // { - // if (enabledFiles[i]->mode.isEmpty() || (!enabledFiles[i]->mode.isEmpty() && enabledFiles[i]->mode.getValue() == CFile::mode_attr::write )) - // enabledWriteModeFiles.push_back(enabledFiles[i]); - // } - - // (2) Estimate the data volume for each file - int size = files.size(); - std::vector > dataSizeMap; - double dataPerPool = 0; - int nfield=0 ; - ofs<getId()< enabledFields = file->getEnabledFields(); - size_t numEnabledFields = enabledFields.size(); - ofs<enabledFiles.size(); ++i) + // { + // if (enabledFiles[i]->mode.isEmpty() || (!enabledFiles[i]->mode.isEmpty() && enabledFiles[i]->mode.getValue() == CFile::mode_attr::write )) + // enabledWriteModeFiles.push_back(enabledFiles[i]); + // } + + // (2) Estimate the data volume for each file + int size = this->enabledWriteModeFiles.size(); + std::vector > dataSizeMap; + double dataPerPool = 0; + int nfield=0 ; + ofs<getGlobalWrittenSize() ; - ofs<getGrid()->getId()<getGlobalWrittenSize()<getCurrentDate()+file->output_freq)-(Time)(calendar->getCurrentDate()) ; - double dataSizeSec= dataSize/ outFreqSec; - ofs<enabledWriteModeFiles[i]; + ofs<getId()< enabledFields = file->getEnabledFields(); + size_t numEnabledFields = enabledFields.size(); + ofs<getGlobalWrittenSize() ; + ofs<grid->getId()<getGlobalWrittenSize()<getCurrentDate()+file->output_freq)-(Time)(calendar->getCurrentDate()) ; + double dataSizeSec= dataSize/ outFreqSec; + ofs< poolDataSize ; + std::multimap poolDataSize ; // multimap is not garanty to preserve stable sorting in c++98 but it seems it does for c++11 - int j; - double dataSize ; - for (j = 0 ; j < nbPools ; ++j) poolDataSize.insert(std::pair(0.,j)) ; - - for (int i = dataSizeMap.size()-1; i >= 0; --i) + int j; + double dataSize ; + for (j = 0 ; j < nbPools ; ++j) poolDataSize.insert(std::pair(0.,j)) ; + + for (int i = dataSizeMap.size()-1; i >= 0; --i) + { + dataSize=(*poolDataSize.begin()).first ; + j=(*poolDataSize.begin()).second ; + dataSizeMap[i].second->setContextClient(clientPrimServer[j]); + dataSize+=dataSizeMap[i].first; + poolDataSize.erase(poolDataSize.begin()) ; + poolDataSize.insert(std::pair(dataSize,j)) ; + } + + for (std::multimap:: iterator it=poolDataSize.begin() ; it!=poolDataSize.end(); ++it) info(30)<<"Load Balancing for servers (perfect=1) : "<second<<" : ratio "<first*1./dataPerPool<enabledReadModeFiles.size(); ++i) + { + enabledReadModeFiles[i]->setContextClient(client); + } + } + else { - dataSize=(*poolDataSize.begin()).first ; - j=(*poolDataSize.begin()).second ; - dataSizeMap[i].second->setContextClient(clientPrimServer[j]); - dataSize+=dataSizeMap[i].first; - poolDataSize.erase(poolDataSize.begin()) ; - poolDataSize.insert(std::pair(dataSize,j)) ; + for (int i = 0; i < this->enabledFiles.size(); ++i) + enabledFiles[i]->setContextClient(client); } - - for (std::multimap:: iterator it=poolDataSize.begin() ; it!=poolDataSize.end(); ++it) info(30)<<"Load Balancing for servers (perfect=1) : "<second<<" : ratio "<first*1./dataPerPool<& filesList) + void CContext::distributeFileOverMemoryBandwith(void) TRY { - int nbPools = clientPrimServer.size(); - double ratio=0.5 ; - ratio=CXios::getin("server2_dist_file_memory_ratio", ratio); - - int nFiles = filesList.size(); - vector files(nFiles); - vector grids; - map gridMap ; - string gridId; - int gridIndex=0 ; - - for (size_t i = 0; i < nFiles; ++i) + // If primary server + if (hasServer && hasClient) { - StdSize dataSize=0; - CFile* file = filesList[i]; - std::vector enabledFields = file->getEnabledFields(); - size_t numEnabledFields = enabledFields.size(); - - files[i].id_=file->getId() ; - files[i].nbGrids_=numEnabledFields; - files[i].assignedGrid_ = new int[files[i].nbGrids_] ; - - for (size_t j = 0; j < numEnabledFields; ++j) + int nbPools = clientPrimServer.size(); + double ratio=0.5 ; + ratio=CXios::getin("server2_dist_file_memory_ratio", ratio); + + int nFiles = this->enabledWriteModeFiles.size(); + vector files(nFiles); + vector grids; + map gridMap ; + string gridId; + int gridIndex=0 ; + + for (size_t i = 0; i < nFiles; ++i) { - gridId=enabledFields[j]->getGrid()->getId() ; - if (gridMap.find(gridId)==gridMap.end()) + StdSize dataSize=0; + CFile* file = this->enabledWriteModeFiles[i]; + std::vector enabledFields = file->getEnabledFields(); + size_t numEnabledFields = enabledFields.size(); + + files[i].id_=file->getId() ; + files[i].nbGrids_=numEnabledFields; + files[i].assignedGrid_ = new int[files[i].nbGrids_] ; + + for (size_t j = 0; j < numEnabledFields; ++j) { - gridMap[gridId]=gridIndex ; - SDistGrid newGrid; - grids.push_back(newGrid) ; - gridIndex++ ; + gridId=enabledFields[j]->grid->getId() ; + if (gridMap.find(gridId)==gridMap.end()) + { + gridMap[gridId]=gridIndex ; + SDistGrid newGrid; + grids.push_back(newGrid) ; + gridIndex++ ; + } + files[i].assignedGrid_[j]=gridMap[gridId] ; + grids[files[i].assignedGrid_[j]].size_=enabledFields[j]->getGlobalWrittenSize() ; + dataSize += enabledFields[j]->getGlobalWrittenSize() ; // usefull } - files[i].assignedGrid_[j]=gridMap[gridId] ; - grids[files[i].assignedGrid_[j]].size_=enabledFields[j]->getGlobalWrittenSize() ; - dataSize += enabledFields[j]->getGlobalWrittenSize() ; // usefull + double outFreqSec = (Time)(calendar->getCurrentDate()+file->output_freq)-(Time)(calendar->getCurrentDate()) ; + files[i].bandwith_= dataSize/ outFreqSec ; } - double outFreqSec = (Time)(calendar->getCurrentDate()+file->output_freq)-(Time)(calendar->getCurrentDate()) ; - files[i].bandwith_= dataSize/ outFreqSec ; - } - double bandwith=0 ; - double memory=0 ; + double bandwith=0 ; + double memory=0 ; - for(int i=0; i memorySize(nbPools,0.) ; - vector< set > serverGrids(nbPools) ; - vector bandwithSize(nbPools,0.) ; + vector memorySize(nbPools,0.) ; + vector< set > serverGrids(nbPools) ; + vector bandwithSize(nbPools,0.) ; - for (size_t i = 0; i < nFiles; ++i) - { - bandwithSize[files[i].assignedServer_] += files[i].bandwith_* bandwith /ratio ; - for(int j=0 ; jsetContextClient(clientPrimServer[files[i].assignedServer_]) ; + delete [] files[i].assignedGrid_ ; } - filesList[i]->setContextClient(clientPrimServer[files[i].assignedServer_]) ; - delete [] files[i].assignedGrid_ ; - } - for (int i = 0; i < nbPools; ++i) info(100)<<"Pool server level2 "<enabledReadModeFiles.size(); ++i) + { + enabledReadModeFiles[i]->setContextClient(client); + } } + else + { + for (int i = 0; i < this->enabledFiles.size(); ++i) + enabledFiles[i]->setContextClient(client); + } +} CATCH_DUMP_ATTR /*! @@ -1627,18 +1264,21 @@ void CContext::removeAllContexts(void) recvCreateFileHeader(event); return true; break; - case EVENT_ID_COUPLER_IN_READY: - recvCouplerInReady(event); + case EVENT_ID_POST_PROCESS: + recvPostProcessing(event); + return true; + case EVENT_ID_SEND_REGISTRY: + recvRegistry(event); return true; break; - case EVENT_ID_COUPLER_IN_CLOSE_DEFINITION: - recvCouplerInCloseDefinition(event); + case EVENT_ID_POST_PROCESS_GLOBAL_ATTRIBUTES: + recvPostProcessingGlobalAttributes(event); return true; break; - case EVENT_ID_COUPLER_IN_CONTEXT_FINALIZED: - recvCouplerInContextFinalized(event); + case EVENT_ID_PROCESS_GRID_ENABLED_FIELDS: + recvProcessingGridOfEnabledFields(event); return true; - break; + break; default : ERROR("bool CContext::dispatchEvent(CEventServer& event)", <<"Unknown Event"); @@ -1649,24 +1289,22 @@ void CContext::removeAllContexts(void) CATCH //! Client side: Send a message to server to make it close - // ym obsolete void CContext::sendCloseDefinition(void) TRY { - int nbSrvPools ; - if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; - else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; - else nbSrvPools = 0 ; - CContextClient* contextClientTmp ; - - for (int i = 0; i < nbSrvPools; ++i) + // Use correct context client to send message + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) { - if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; - else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; + CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); if (contextClientTmp->isServerLeader()) { CMessage msg; + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); const std::list& ranks = contextClientTmp->getRanksServerLeader(); for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) event.push(*itRank,1,msg); @@ -1676,98 +1314,178 @@ void CContext::removeAllContexts(void) } } CATCH_DUMP_ATTR - - // ! Client side: Send a message to server to make it close - void CContext::sendCloseDefinition(CContextClient* client) + + //! Server side: Receive a message of client announcing a context close + void CContext::recvCloseDefinition(CEventServer& event) TRY { - if (sendCloseDefinition_done_.count(client)!=0) return ; - else sendCloseDefinition_done_.insert(client) ; + CBufferIn* buffer=event.subEvents.begin()->buffer; + string id; + *buffer>>id; + get(id)->closeDefinition(); + } + CATCH - CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); - if (client->isServerLeader()) - { - CMessage msg; - for(auto rank : client->getRanksServerLeader()) event.push(rank,1,msg); - client->sendEvent(event); - } - else client->sendEvent(event); + //! Client side: Send a message to update calendar in each time step + void CContext::sendUpdateCalendar(int step) + TRY + { + // Use correct context client to send message + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; + CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); + + if (contextClientTmp->isServerLeader()) + { + CMessage msg; + if (hasServer) + msg<getIdServer(i)<getIdServer()<& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } } CATCH_DUMP_ATTR - //! Server side: Receive a message of client announcing a context close - void CContext::recvCloseDefinition(CEventServer& event) + //! Server side: Receive a message of client annoucing calendar update + void CContext::recvUpdateCalendar(CEventServer& event) TRY { CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->closeDefinition(); + string id; + *buffer>>id; + get(id)->recvUpdateCalendar(*buffer); } CATCH - //! Client side: Send a message to update calendar in each time step - void CContext::sendUpdateCalendar(int step) + //! Server side: Receive a message of client annoucing calendar update + void CContext::recvUpdateCalendar(CBufferIn& buffer) + TRY + { + int step; + buffer>>step; + updateCalendar(step); + if (hasClient && hasServer) + { + sendUpdateCalendar(step); + } + } + CATCH_DUMP_ATTR + + //! Client side: Send a message to create header part of netcdf file + void CContext::sendCreateFileHeader(void) TRY { - CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); - for(auto client : slaveServers_) + // Use correct context client to send message + // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) { - if (client->isServerLeader()) + CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; + CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); + + if (contextClientTmp->isServerLeader()) { CMessage msg; - msg<getRanksServerLeader() ) event.push(rank,1,msg); - client->sendEvent(event); + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg) ; + contextClientTmp->sendEvent(event); } - else client->sendEvent(event); + else contextClientTmp->sendEvent(event); } } CATCH_DUMP_ATTR - //! Server side: Receive a message of client annoucing calendar update - void CContext::recvUpdateCalendar(CEventServer& event) + //! Server side: Receive a message of client annoucing the creation of header part of netcdf file + void CContext::recvCreateFileHeader(CEventServer& event) TRY { CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->recvUpdateCalendar(*buffer); + string id; + *buffer>>id; + get(id)->recvCreateFileHeader(*buffer); } CATCH - //! Server side: Receive a message of client annoucing calendar update - void CContext::recvUpdateCalendar(CBufferIn& buffer) + //! Server side: Receive a message of client annoucing the creation of header part of netcdf file + void CContext::recvCreateFileHeader(CBufferIn& buffer) + TRY + { + createFileHeader(); + } + CATCH_DUMP_ATTR + + //! Client side: Send a message to do some post processing on server + void CContext::sendProcessingGridOfEnabledFields() + TRY + { + // Use correct context client to send message + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; + CEventClient event(getType(),EVENT_ID_PROCESS_GRID_ENABLED_FIELDS); + + if (contextClientTmp->isServerLeader()) + { + CMessage msg; + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } + } + CATCH_DUMP_ATTR + + //! Server side: Receive a message to do some post processing + void CContext::recvProcessingGridOfEnabledFields(CEventServer& event) TRY { - int step; - buffer>>step; - updateCalendar(step); - if (serviceType_==CServicesManager::GATHERER) - { - sendUpdateCalendar(step); - } + CBufferIn* buffer=event.subEvents.begin()->buffer; + string id; + *buffer>>id; } - CATCH_DUMP_ATTR + CATCH - //! Client side: Send a message to create header part of netcdf file - void CContext::sendCreateFileHeader(void) + //! Client side: Send a message to do some post processing on server + void CContext::sendPostProcessing() TRY { - int nbSrvPools ; - if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; - else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; - else nbSrvPools = 0 ; - CContextClient* contextClientTmp ; - + // Use correct context client to send message + // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; for (int i = 0; i < nbSrvPools; ++i) { - if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; - else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; - CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); - + CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; + CEventClient event(getType(),EVENT_ID_POST_PROCESS); if (contextClientTmp->isServerLeader()) { CMessage msg; + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); const std::list& ranks = contextClientTmp->getRanksServerLeader(); for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) - event.push(*itRank,1,msg) ; + event.push(*itRank,1,msg); contextClientTmp->sendEvent(event); } else contextClientTmp->sendEvent(event); @@ -1775,75 +1493,212 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - //! Server side: Receive a message of client annoucing the creation of header part of netcdf file - void CContext::recvCreateFileHeader(CEventServer& event) + //! Server side: Receive a message to do some post processing + void CContext::recvPostProcessing(CEventServer& event) TRY { CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->recvCreateFileHeader(*buffer); + string id; + *buffer>>id; + get(id)->recvPostProcessing(*buffer); } CATCH - //! Server side: Receive a message of client annoucing the creation of header part of netcdf file - void CContext::recvCreateFileHeader(CBufferIn& buffer) + //! Server side: Receive a message to do some post processing + void CContext::recvPostProcessing(CBufferIn& buffer) + TRY + { + CCalendarWrapper::get(CCalendarWrapper::GetDefName())->createCalendar(); + postProcessing(); + } + CATCH_DUMP_ATTR + + const StdString& CContext::getIdServer() + TRY + { + if (hasClient) + { + idServer_ = this->getId(); + idServer_ += "_server"; + return idServer_; + } + if (hasServer) return (this->getId()); + } + CATCH_DUMP_ATTR + + const StdString& CContext::getIdServer(const int i) TRY { - if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) - createFileHeader(); + idServer_ = this->getId(); + idServer_ += "_server_"; + idServer_ += std::to_string(static_cast(i)); + return idServer_; } CATCH_DUMP_ATTR - void CContext::createCouplerInterCommunicator(void) + /*! + \brief Do some simple post processings after parsing xml file + After the xml file (iodef.xml) is parsed, it is necessary to build all relations among + created object, e.g: inhertance among fields, domain, axis. After that, all fiels as well as their parents (reference fields), + which will be written out into netcdf files, are processed + */ + void CContext::postProcessing() TRY { - int rank=this->getIntraCommRank() ; - map> listCouplerOut ; - map> listCouplerIn ; + if (isPostProcessed) return; + + // Make sure the calendar was correctly created + if (!calendar) + ERROR("CContext::postProcessing()", << "A calendar must be defined for the context \"" << getId() << "!\"") + else if (calendar->getTimeStep() == NoneDu) + ERROR("CContext::postProcessing()", << "A timestep must be defined for the context \"" << getId() << "!\"") + // Calendar first update to set the current date equals to the start date + calendar->update(0); + + // Find all inheritance in xml structure + this->solveAllInheritance(); + +// ShowTree(info(10)); + + // Check if some axis, domains or grids are eligible to for compressed indexed output. + // Warning: This must be done after solving the inheritance and before the rest of post-processing + checkAxisDomainsGridsEligibilityForCompressedOutput(); - for(auto couplerOut : enabledCouplerOut) listCouplerOut[couplerOut->getCouplingContextId()].push_back(couplerOut) ; - for(auto couplerIn : enabledCouplerIn) listCouplerIn[couplerIn->getCouplingContextId()].push_back(couplerIn) ; + // Check if some automatic time series should be generated + // Warning: This must be done after solving the inheritance and before the rest of post-processing + + // The timeseries should only be prepared in client + if (hasClient && !hasServer) prepareTimeseries(); + + //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. + findEnabledFiles(); + findEnabledWriteModeFiles(); + findEnabledReadModeFiles(); - CCouplerManager* couplerManager = CXios::getCouplerManager() ; - if (rank==0) + // For now, only read files with client and only one level server + // if (hasClient && !hasServer) findEnabledReadModeFiles(); + + // Find all enabled fields of each file + findAllEnabledFieldsInFiles(this->enabledWriteModeFiles); + findAllEnabledFieldsInFiles(this->enabledReadModeFiles); + + // For now, only read files with client and only one level server + // if (hasClient && !hasServer) + // findAllEnabledFieldsInFiles(this->enabledReadModeFiles); + + if (hasClient && !hasServer) { - for(auto couplerOut : listCouplerOut) couplerManager->registerCoupling(this->getContextId(),couplerOut.first) ; - for(auto couplerIn : listCouplerIn) couplerManager->registerCoupling(couplerIn.first,this->getContextId()) ; + initReadFiles(); + // Try to read attributes of fields in file then fill in corresponding grid (or domain, axis) + this->readAttributesOfEnabledFieldsInReadModeFiles(); } - do - { - for(auto couplerOut : listCouplerOut) - { - bool isNextCoupling ; - if (rank==0) isNextCoupling = couplerManager->isNextCoupling(this->getContextId(),couplerOut.first) ; - MPI_Bcast(&isNextCoupling,1,MPI_C_BOOL, 0, getIntraComm()) ; - if (isNextCoupling) - { - addCouplingChanel(couplerOut.first, true) ; - listCouplerOut.erase(couplerOut.first) ; - break ; - } - } - for(auto couplerIn : listCouplerIn) + // Only search and rebuild all reference objects of enable fields, don't transform + this->solveOnlyRefOfEnabledFields(false); + + // Search and rebuild all reference object of enabled fields, and transform + this->solveAllRefOfEnabledFieldsAndTransform(false); + + // Find all fields with read access from the public API + if (hasClient && !hasServer) findFieldsWithReadAccess(); + // and solve the all reference for them + if (hasClient && !hasServer) solveAllRefOfFieldsWithReadAccess(); + + isPostProcessed = true; + } + CATCH_DUMP_ATTR + + /*! + * Compute the required buffer size to send the attributes (mostly those grid related). + * \param maxEventSize [in/out] the size of the bigger event for each connected server + * \param [in] contextClient + * \param [in] bufferForWriting True if buffers are used for sending data for writing + This flag is only true for client and server-1 for communication with server-2 + */ + std::map CContext::getAttributesBufferSize(std::map& maxEventSize, + CContextClient* contextClient, bool bufferForWriting /*= "false"*/) + TRY + { + // As calendar attributes are sent even if there are no active files or fields, maps are initialized according the size of calendar attributes + std::map attributesSize = CCalendarWrapper::get(CCalendarWrapper::GetDefName())->getMinimumBufferSizeForAttributes(contextClient); + maxEventSize = CCalendarWrapper::get(CCalendarWrapper::GetDefName())->getMinimumBufferSizeForAttributes(contextClient); + + std::vector& fileList = this->enabledFiles; + size_t numEnabledFiles = fileList.size(); + for (size_t i = 0; i < numEnabledFiles; ++i) + { +// CFile* file = this->enabledWriteModeFiles[i]; + CFile* file = fileList[i]; + std::vector enabledFields = file->getEnabledFields(); + size_t numEnabledFields = enabledFields.size(); + for (size_t j = 0; j < numEnabledFields; ++j) { - bool isNextCoupling ; - if (rank==0) isNextCoupling = couplerManager->isNextCoupling(couplerIn.first,this->getContextId()); - MPI_Bcast(&isNextCoupling,1,MPI_C_BOOL, 0, getIntraComm()) ; - if (isNextCoupling) + const std::map mapSize = enabledFields[j]->getGridAttributesBufferSize(contextClient, bufferForWriting); + std::map::const_iterator it = mapSize.begin(), itE = mapSize.end(); + for (; it != itE; ++it) { - addCouplingChanel(couplerIn.first, false) ; - listCouplerIn.erase(couplerIn.first) ; - break ; - } + // If attributesSize[it->first] does not exist, it will be zero-initialized + // so we can use it safely without checking for its existence + if (attributesSize[it->first] < it->second) + attributesSize[it->first] = it->second; + + if (maxEventSize[it->first] < it->second) + maxEventSize[it->first] = it->second; + } } + } + return attributesSize; + } + CATCH_DUMP_ATTR + + /*! + * Compute the required buffer size to send the fields data. + * \param maxEventSize [in/out] the size of the bigger event for each connected server + * \param [in] contextClient + * \param [in] bufferForWriting True if buffers are used for sending data for writing + This flag is only true for client and server-1 for communication with server-2 + */ + std::map CContext::getDataBufferSize(std::map& maxEventSize, + CContextClient* contextClient, bool bufferForWriting /*= "false"*/) + TRY + { + std::map dataSize; - } while (!listCouplerOut.empty() || !listCouplerIn.empty()) ; + // Find all reference domain and axis of all active fields + std::vector& fileList = bufferForWriting ? this->enabledWriteModeFiles : this->enabledReadModeFiles; + size_t numEnabledFiles = fileList.size(); + for (size_t i = 0; i < numEnabledFiles; ++i) + { + CFile* file = fileList[i]; + if (file->getContextClient() == contextClient) + { + std::vector enabledFields = file->getEnabledFields(); + size_t numEnabledFields = enabledFields.size(); + for (size_t j = 0; j < numEnabledFields; ++j) + { + // const std::vector > mapSize = enabledFields[j]->getGridDataBufferSize(contextClient); + const std::map mapSize = enabledFields[j]->getGridDataBufferSize(contextClient,bufferForWriting); + std::map::const_iterator it = mapSize.begin(), itE = mapSize.end(); + for (; it != itE; ++it) + { + // If dataSize[it->first] does not exist, it will be zero-initialized + // so we can use it safely without checking for its existance + if (CXios::isOptPerformance) + dataSize[it->first] += it->second; + else if (dataSize[it->first] < it->second) + dataSize[it->first] = it->second; + if (maxEventSize[it->first] < it->second) + maxEventSize[it->first] = it->second; + } + } + } + } + return dataSize; } CATCH_DUMP_ATTR - - //! Client side: Send infomation of active files (files are enabled to write out) + //! Client side: Send infomation of active files (files are enabled to write out) void CContext::sendEnabledFiles(const std::vector& activeFiles) TRY { @@ -1877,11 +1732,32 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - + //! Client side: Check if the defined axis, domains and grids are eligible for compressed indexed output + void CContext::checkAxisDomainsGridsEligibilityForCompressedOutput() + TRY + { + if (!hasClient) return; + + const vector allAxis = CAxis::getAll(); + for (vector::const_iterator it = allAxis.begin(); it != allAxis.end(); it++) + (*it)->checkEligibilityForCompressedOutput(); + + const vector allDomains = CDomain::getAll(); + for (vector::const_iterator it = allDomains.begin(); it != allDomains.end(); it++) + (*it)->checkEligibilityForCompressedOutput(); + + const vector allGrids = CGrid::getAll(); + for (vector::const_iterator it = allGrids.begin(); it != allGrids.end(); it++) + (*it)->checkEligibilityForCompressedOutput(); + } + CATCH_DUMP_ATTR + //! Client side: Prepare the timeseries by adding the necessary files void CContext::prepareTimeseries() TRY { + if (!hasClient) return; + const std::vector allFiles = CFile::getAll(); for (size_t i = 0; i < allFiles.size(); i++) { @@ -1978,12 +1854,44 @@ void CContext::removeAllContexts(void) } CATCH_DUMP_ATTR - + //! Client side: Send information of reference grid of active fields + void CContext::sendRefGrid(const std::vector& activeFiles) + TRY + { + std::set gridIds; + int sizeFile = activeFiles.size(); + CFile* filePtr(NULL); + + // Firstly, find all reference grids of all active fields + for (int i = 0; i < sizeFile; ++i) + { + filePtr = activeFiles[i]; + std::vector enabledFields = filePtr->getEnabledFields(); + int sizeField = enabledFields.size(); + for (int numField = 0; numField < sizeField; ++numField) + { + if (0 != enabledFields[numField]->getRelGrid()) + gridIds.insert(CGrid::get(enabledFields[numField]->getRelGrid())->getId()); + } + } + + // Create all reference grids on server side + StdString gridDefRoot("grid_definition"); + CGridGroup* gridPtr = CGridGroup::get(gridDefRoot); + std::set::const_iterator it, itE = gridIds.end(); + for (it = gridIds.begin(); it != itE; ++it) + { + gridPtr->sendCreateChild(*it); + CGrid::get(*it)->sendGrid() ; + } + } + CATCH_DUMP_ATTR + //! Client side: Send information of reference domain, axis and scalar of active fields void CContext::sendRefDomainsAxisScalars(const std::vector& activeFiles) TRY { - std::set> domainIds, axisIds, scalarIds; + std::set domainIds, axisIds, scalarIds; // Find all reference domain and axis of all active fields int numEnabledFiles = activeFiles.size(); @@ -1993,11 +1901,10 @@ void CContext::removeAllContexts(void) int numEnabledFields = enabledFields.size(); for (int j = 0; j < numEnabledFields; ++j) { - CContextClient* contextClient=enabledFields[j]->getContextClient() ; const std::vector& prDomAxisScalarId = enabledFields[j]->getRefDomainAxisIds(); - if ("" != prDomAxisScalarId[0]) domainIds.insert(make_pair(prDomAxisScalarId[0],contextClient)); - if ("" != prDomAxisScalarId[1]) axisIds.insert(make_pair(prDomAxisScalarId[1],contextClient)); - if ("" != prDomAxisScalarId[2]) scalarIds.insert(make_pair(prDomAxisScalarId[2],contextClient)); + if ("" != prDomAxisScalarId[0]) domainIds.insert(prDomAxisScalarId[0]); + if ("" != prDomAxisScalarId[1]) axisIds.insert(prDomAxisScalarId[1]); + if ("" != prDomAxisScalarId[2]) scalarIds.insert(prDomAxisScalarId[2]); } } @@ -2007,50 +1914,42 @@ void CContext::removeAllContexts(void) StdString scalarDefRoot("scalar_definition"); CScalarGroup* scalarPtr = CScalarGroup::get(scalarDefRoot); - - for (auto itScalar = scalarIds.begin(); itScalar != scalarIds.end(); ++itScalar) + itE = scalarIds.end(); + for (itScalar = scalarIds.begin(); itScalar != itE; ++itScalar) { - if (!itScalar->first.empty()) + if (!itScalar->empty()) { - scalarPtr->sendCreateChild(itScalar->first,itScalar->second); - CScalar::get(itScalar->first)->sendAllAttributesToServer(itScalar->second); + scalarPtr->sendCreateChild(*itScalar); + CScalar::get(*itScalar)->sendAllAttributesToServer(); } } StdString axiDefRoot("axis_definition"); CAxisGroup* axisPtr = CAxisGroup::get(axiDefRoot); - - for (auto itAxis = axisIds.begin(); itAxis != axisIds.end(); ++itAxis) + itE = axisIds.end(); + for (itAxis = axisIds.begin(); itAxis != itE; ++itAxis) { - if (!itAxis->first.empty()) + if (!itAxis->empty()) { - axisPtr->sendCreateChild(itAxis->first, itAxis->second); - CAxis::get(itAxis->first)->sendAllAttributesToServer(itAxis->second); + axisPtr->sendCreateChild(*itAxis); + CAxis::get(*itAxis)->sendAllAttributesToServer(); } } // Create all reference domains on server side StdString domDefRoot("domain_definition"); CDomainGroup* domPtr = CDomainGroup::get(domDefRoot); - - for (auto itDom = domainIds.begin(); itDom != domainIds.end(); ++itDom) + itE = domainIds.end(); + for (itDom = domainIds.begin(); itDom != itE; ++itDom) { - if (!itDom->first.empty()) { - domPtr->sendCreateChild(itDom->first, itDom->second); - CDomain::get(itDom->first)->sendAllAttributesToServer(itDom->second); + if (!itDom->empty()) { + domPtr->sendCreateChild(*itDom); + CDomain::get(*itDom)->sendAllAttributesToServer(); } } } CATCH_DUMP_ATTR - void CContext::triggerLateFields(void) - TRY - { - for(auto& field : fileInFields_) field->triggerLateField() ; - for(auto& field : couplerInFields_) field->triggerLateField() ; - } - CATCH_DUMP_ATTR - //! Update calendar in each time step void CContext::updateCalendar(int step) TRY @@ -2059,9 +1958,9 @@ void CContext::removeAllContexts(void) if (prevStep < step) { - if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data + if (hasClient && !hasServer) // For now we only use server level 1 to read data { - triggerLateFields(); + doPreTimestepOperationsForEnabledReadModeFiles(); } info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl; @@ -2071,7 +1970,7 @@ void CContext::removeAllContexts(void) info(50) << " Current memory used by XIOS : "<< MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte, at timestep "<getId()<getCurrentDate()); @@ -2102,12 +2001,10 @@ void CContext::removeAllContexts(void) TRY { vector::const_iterator it; - - //for (it=enabledFiles.begin(); it != enabledFiles.end(); it++) - for (it=enabledWriteModeFiles.begin(); it != enabledWriteModeFiles.end(); it++) - { - (*it)->initWrite(); - } + if (!hasClient && hasServer) + for (it=enabledFiles.begin(); it != enabledFiles.end(); it++) (*it)->initWrite(); + else if (hasClient && hasServer) + for (it=enabledReadModeFiles.begin(); it != enabledReadModeFiles.end(); it++) (*it)->initWrite(); } CATCH_DUMP_ATTR @@ -2155,171 +2052,57 @@ void CContext::removeAllContexts(void) } CATCH - - void CContext::sendFinalizeClient(CContextClient* contextClient, const string& contextClientId) - TRY - { - CEventClient event(getType(),EVENT_ID_CONTEXT_FINALIZE_CLIENT); - if (contextClient->isServerLeader()) - { - CMessage msg; - msg<& ranks = contextClient->getRanksServerLeader(); - for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) - event.push(*itRank,1,msg); - contextClient->sendEvent(event); - } - else contextClient->sendEvent(event); - } - CATCH_DUMP_ATTR - - - void CContext::recvFinalizeClient(CEventServer& event) + //! Server side: Receive a message to do some post processing + void CContext::recvRegistry(CEventServer& event) TRY { CBufferIn* buffer=event.subEvents.begin()->buffer; string id; *buffer>>id; - get(id)->recvFinalizeClient(*buffer); + get(id)->recvRegistry(*buffer); } CATCH - void CContext::recvFinalizeClient(CBufferIn& buffer) + void CContext::recvRegistry(CBufferIn& buffer) TRY { - countChildContextFinalized_++ ; + if (server->intraCommRank==0) + { + CRegistry registry(server->intraComm) ; + registry.fromBuffer(buffer) ; + registryOut->mergeRegistry(registry) ; + } } CATCH_DUMP_ATTR + void CContext::sendRegistry(void) + TRY + { + registryOut->hierarchicalGatherRegistry() ; - - - //! Client side: Send a message announcing that context can receive grid definition from coupling - void CContext::sendCouplerInReady(CContextClient* client) - TRY - { - if (sendCouplerInReady_done_.count(client)!=0) return ; - else sendCouplerInReady_done_.insert(client) ; - - CEventClient event(getType(),EVENT_ID_COUPLER_IN_READY); - - if (client->isServerLeader()) - { - CMessage msg; - msg<getId(); - for (auto& rank : client->getRanksServerLeader()) event.push(rank,1,msg); - client->sendEvent(event); - } - else client->sendEvent(event); - } - CATCH_DUMP_ATTR - - //! Server side: Receive a message announcing that context can send grid definition for context coupling - void CContext::recvCouplerInReady(CEventServer& event) - TRY - { - CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->recvCouplerInReady(*buffer); - } - CATCH - - //! Server side: Receive a message announcing that context can send grid definition for context coupling - void CContext::recvCouplerInReady(CBufferIn& buffer) - TRY - { - string contextId ; - buffer>>contextId; - couplerInReady_.insert(getCouplerOutClient(contextId)) ; - } - CATCH_DUMP_ATTR - - - - - - //! Client side: Send a message announcing that a coupling context have done it closeDefinition, so data can be sent now. - void CContext::sendCouplerInCloseDefinition(CContextClient* client) - TRY - { - if (sendCouplerInCloseDefinition_done_.count(client)!=0) return ; - else sendCouplerInCloseDefinition_done_.insert(client) ; - - CEventClient event(getType(),EVENT_ID_COUPLER_IN_CLOSE_DEFINITION); - - if (client->isServerLeader()) - { - CMessage msg; - msg<getId(); - for (auto& rank : client->getRanksServerLeader()) event.push(rank,1,msg); - client->sendEvent(event); - } - else client->sendEvent(event); - } - CATCH_DUMP_ATTR - - //! Server side: Receive a message announcing that a coupling context have done it closeDefinition, so data can be sent now. - void CContext::recvCouplerInCloseDefinition(CEventServer& event) - TRY - { - CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->recvCouplerInCloseDefinition(*buffer); - } - CATCH - - //! Server side: Receive a message announcing that a coupling context have done it closeDefinition, so data can be sent now. - void CContext::recvCouplerInCloseDefinition(CBufferIn& buffer) - TRY - { - string contextId ; - buffer>>contextId; - couplerInCloseDefinition_.insert(getCouplerOutClient(contextId)) ; - } - CATCH_DUMP_ATTR - - - - -//! Client side: Send a message announcing that a coupling context have done it contextFinalize, so it can also close it own context. - void CContext::sendCouplerInContextFinalized(CContextClient* client) - TRY - { - if (sendCouplerInContextFinalized_done_.count(client)!=0) return ; - else sendCouplerInContextFinalized_done_.insert(client) ; - - CEventClient event(getType(),EVENT_ID_COUPLER_IN_CONTEXT_FINALIZED); - - if (client->isServerLeader()) - { - CMessage msg; - msg<getId(); - for (auto& rank : client->getRanksServerLeader()) event.push(rank,1,msg); - client->sendEvent(event); - } - else client->sendEvent(event); - } - CATCH_DUMP_ATTR - - //! Server side: Receive a message announcing that a coupling context have done it contextFinalize, so it can also close it own context. - void CContext::recvCouplerInContextFinalized(CEventServer& event) - TRY - { - CBufferIn* buffer=event.subEvents.begin()->buffer; - getCurrent()->recvCouplerInContextFinalized(*buffer); - } - CATCH - - //! Server side: Receive a message announcing that a coupling context have done it contextFinalize, so it can also close it own context. - void CContext::recvCouplerInContextFinalized(CBufferIn& buffer) - TRY - { - string contextId ; - buffer>>contextId; - couplerInContextFinalized_.insert(getCouplerOutClient(contextId)) ; - } - CATCH_DUMP_ATTR - - - + // Use correct context client to send message + int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; + CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); + if (contextClientTmp->isServerLeader()) + { + CMessage msg ; + if (hasServer) + msg<getIdServer(i); + else + msg<getIdServer(); + if (contextClientTmp->clientRank==0) msg<<*registryOut ; + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } + } + CATCH_DUMP_ATTR /*! * \fn bool CContext::isFinalized(void) diff --git a/xios_2311_src/src/node/context.hpp b/xios_2311_src/src/node/context.hpp index 2974effd..bb921f8a 100644 --- a/xios_2311_src/src/node/context.hpp +++ b/xios_2311_src/src/node/context.hpp @@ -11,13 +11,9 @@ #include "garbage_collector.hpp" #include "registry.hpp" #include "mpi.hpp" -#include "services_manager.hpp" -#include "server_context.hpp" -#include "event_scheduler.hpp" -namespace xios -{ +namespace xios { class CContextClient; class CContextServer; @@ -27,8 +23,6 @@ namespace xios class CContextAttributes; class CContext; class CFile; - class CCouplerIn ; - class CCouplerOut ; ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -54,10 +48,9 @@ namespace xios { EVENT_ID_CLOSE_DEFINITION,EVENT_ID_UPDATE_CALENDAR, EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE, - EVENT_ID_CONTEXT_FINALIZE_CLIENT, - EVENT_ID_COUPLER_IN_READY, - EVENT_ID_COUPLER_IN_CLOSE_DEFINITION, - EVENT_ID_COUPLER_IN_CONTEXT_FINALIZED, + EVENT_ID_POST_PROCESS, EVENT_ID_SEND_REGISTRY, + EVENT_ID_POST_PROCESS_GLOBAL_ATTRIBUTES, + EVENT_ID_PROCESS_GRID_ENABLED_FIELDS }; /// typedef /// @@ -82,8 +75,6 @@ namespace xios /// Destructeur /// virtual ~CContext(void); - static void releaseStaticAllocation(void) ; - //--------------------------------------------------------- public : @@ -96,89 +87,80 @@ namespace xios public : // Initialize server or client - void init(CServerContext* parentServerContext, MPI_Comm intraComm, int serviceType); - void initClient(MPI_Comm intraComm, int serviceType); - - void initServer(MPI_Comm intraComm, int serviceType ); - void createClientInterComm(MPI_Comm interCommClient, MPI_Comm interCommServer) ; - void createServerInterComm(void) ; - + void initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer = 0); + void initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient = 0); bool isInitialized(void); StdString dumpClassAttributes(void); // Put sever or client into loop state - bool eventLoop(bool enableEventsProcessing=true); - bool scheduledEventLoop(bool enableEventsProcessing=true) ; - void globalEventLoop(void); + bool checkBuffersAndListen(bool enableEventsProcessing=true); // Finalize a context void finalize(void); - bool isFinalized(void); void closeDefinition(void); - // to be removed - std::vector findAllEnabledFieldsInFiles(const std::vector& activeFiles); // Some functions to process context - std::vector findAllEnabledFieldsInFileOut(const std::vector& activeFiles); - std::vector findAllEnabledFieldsInFileIn(const std::vector& activeFiles); - std::vector findAllEnabledFieldsCouplerOut(const std::vector& activeCouplerOut); - std::vector findAllEnabledFieldsCouplerIn(const std::vector& activeCouplerIn); + void findAllEnabledFieldsInFiles(const std::vector& activeFiles); // void findAllEnabledFields(void); // void findAllEnabledFieldsInReadModeFiles(void); void readAttributesOfEnabledFieldsInReadModeFiles(); void solveAllInheritance(bool apply=true); void findEnabledFiles(void); - void findEnabledCouplerIn(void); - void findEnabledCouplerOut(void); - void createCouplerInterCommunicator(void) ; void findEnabledWriteModeFiles(void); void findEnabledReadModeFiles(void); void closeAllFile(void); void updateCalendar(int step); void createFileHeader(void); void initReadFiles(void); + void checkAxisDomainsGridsEligibilityForCompressedOutput(); void prepareTimeseries(void); + void solveOnlyRefOfEnabledFields(bool sendToServer); + void buildFilterGraphOfEnabledFields(); void postProcessFilterGraph(); void startPrefetchingOfEnabledReadModeFiles(); void doPreTimestepOperationsForEnabledReadModeFiles(); void doPostTimestepOperationsForEnabledReadModeFiles(); void findFieldsWithReadAccess(void); - void triggerLateFields(void) ; - + void solveAllRefOfFieldsWithReadAccess(); + void buildFilterGraphOfFieldsWithReadAccess(); + void postProcessing(); + void postProcessingGlobalAttributes(); + + void solveAllRefOfEnabledFieldsAndTransform(bool sendToServer); + void checkGridEnabledFields(); + void checkGridEnabledFieldsInFiles(const std::vector& activeFiles); + void sendGridEnabledFieldsInFiles(const std::vector& activeFiles); + void sendGridComponentEnabledFieldsInFiles(const std::vector& activeFiles) ; + std::map getAttributesBufferSize(std::map& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false); std::map getDataBufferSize(std::map& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false); + void setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting = false); // Distribute files (in write mode) among secondary-server pools according to the estimated data flux - void distributeFiles(const std::vector& files); - void distributeFileOverBandwith(const std::vector& files) ; - void distributeFileOverMemoryBandwith(const std::vector& files) ; + void distributeFiles(void); + void distributeFileOverBandwith() ; + void distributeFileOverMemoryBandwith() ; // Send context close definition void sendCloseDefinition(void); - public: - void sendCloseDefinition(CContextClient* client) ; - private: - set sendCloseDefinition_done_ ; - public: // There are something to send on closing context defintion void sendUpdateCalendar(int step); void sendCreateFileHeader(void); void sendEnabledFiles(const std::vector& activeFiles); void sendEnabledFieldsInFiles(const std::vector& activeFiles); void sendRefDomainsAxisScalars(const std::vector& activeFiles); + void sendRefGrid(const std::vector& activeFiles); + void sendPostProcessing(); + void sendPostProcessingGlobalAttributes(); + void sendProcessingGridOfEnabledFields(); //!< after be gathered to the root process of the context, merged registry is sent to the root process of the servers - void sendFinalizeClient(CContextClient* contextClient, const string& contextClientId); - - public: - void sendContextToFileServer(CContextClient* client) ; - private: - std::set sendToFileServer_done_ ; - - public: - std::string getContextId() {return contextId_;} + void sendRegistry(void) ; + + const StdString& getIdServer(); + const StdString& getIdServer(const int srvPoolNb); // Client side: Receive and process messages static void recvUpdateCalendar(CEventServer& event); @@ -188,38 +170,16 @@ namespace xios void recvCreateFileHeader(CBufferIn& buffer); static void recvSolveInheritanceContext(CEventServer& event); void recvSolveInheritanceContext(CBufferIn& buffer); - static void recvFinalizeClient(CEventServer& event) ; - void recvFinalizeClient(CBufferIn& buffer); - - public: - void sendCouplerInReady(CContextClient* client); - private: - set sendCouplerInReady_done_; - public: - static void recvCouplerInReady(CEventServer& event) ; - void recvCouplerInReady(CBufferIn& buffer) ; //!< coupler is ready to receive grid definition. - set couplerInReady_; - bool isCouplerInReady(CContextClient* client) { return couplerInReady_.count(client)!=0 ;} - - public: - void sendCouplerInCloseDefinition(CContextClient* client) ; - set sendCouplerInCloseDefinition_done_; - static void recvCouplerInCloseDefinition(CEventServer& event) ; - void recvCouplerInCloseDefinition(CBufferIn& buffer) ; //!< coupler has finished it defintion, data can be sent - set couplerInCloseDefinition_ ; - bool isCouplerInCloseDefinition(CContextClient* client) { return couplerInCloseDefinition_.count(client)!=0 ;} - - public: - void sendCouplerInContextFinalized(CContextClient* client) ; - set sendCouplerInContextFinalized_done_; - static void recvCouplerInContextFinalized(CEventServer& event) ; - void recvCouplerInContextFinalized(CBufferIn& buffer) ; //!< coupler has finished it defintion, data can be sent - set couplerInContextFinalized_ ; - bool isCouplerInContextFinalized(CContextClient* client) { return couplerInContextFinalized_.count(client)!=0 ;} - - public: - void freeComms(void); //!< Free internally allcoated communicators - void releaseClientBuffers(void); //! Deallocate buffers allocated by clientContexts + static void recvPostProcessing(CEventServer& event); + void recvPostProcessing(CBufferIn& buffer); + static void recvProcessingGridOfEnabledFields(CEventServer& event); + static void recvPostProcessingGlobalAttributes(CEventServer& event); + void recvPostProcessingGlobalAttributes(CBufferIn& buffer); + static void recvRegistry(CEventServer& event) ; + void recvRegistry(CBufferIn& buffer) ; //!< registry is received by the servers + + void freeComms(void); //!< Free internally allcoated communicators + void releaseClientBuffers(void); //! Deallocate buffers allocated by clientContexts // dispatch event static bool dispatchEvent(CEventServer& event); @@ -230,7 +190,7 @@ namespace xios // Get context root static CContextGroup* getRoot(void); - + // Set current context static void setCurrent(const string& id); @@ -247,9 +207,6 @@ namespace xios // Some functions to visualize structure of current context static void ShowTree(StdOStream & out = std::clog); static void CleanTree(void); - static void removeContext(const std::string& contextId); - static void removeAllContexts(void) ; - int getServiceType(void) {return serviceType_;} public : // Parse xml node and write all info into context @@ -265,14 +222,6 @@ namespace xios // Verify if all root definition in a context have children virtual bool hasChild(void) const; - bool isProcessingEvent(void) {return isProcessingEvent_;} - bool setProcessingEvent(void) {isProcessingEvent_=true ;} - bool unsetProcessingEvent(void) {isProcessingEvent_=false ;} - MPI_Comm getIntraComm(void) {return intraComm_ ;} - int getIntraCommRank(void) {return intraCommRank_;} - int getIntraCommSize(void) {return intraCommSize_;} - - void addCouplingChanel(const std::string& contextId, bool out) ; public : // Calendar of context @@ -285,16 +234,9 @@ namespace xios // List of all enabled files in write mode std::vector enabledWriteModeFiles; - std::vector enabledCouplerIn; - std::vector enabledCouplerOut; - - // List of all enabled fields whose instant data is accessible from the public API // but which are not part of a file - std::vector fieldsWithReadAccess_; - std::vector couplerInFields_; - std::vector fileInFields_; - + std::vector fieldsWithReadAccess; // Context root static std::shared_ptr root; @@ -310,60 +252,18 @@ namespace xios std::vector serverPrimServer; std::vector clientPrimServer; - // list of slave servers (IO server or others) - set slaveServers_ ; - private: - // the map containing context client associated to it string id for coupling out ; - std::map couplerOutClient_ ; - // the map containing context server associated to it string id for coupling out ; - std::map couplerOutServer_ ; - // the map containing context client associated to it string id for coupling in ; - std::map couplerInClient_ ; - // the map containing context server associated to it string id for coupling in ; - std::map couplerInServer_ ; - public: - CContextClient* getCouplerInClient(const string& contextId) { return couplerInClient_[contextId] ;} - CContextServer* getCouplerInServer(const string& contextId) { return couplerInServer_[contextId] ;} - CContextClient* getCouplerOutClient(const string& contextId) { return couplerOutClient_[contextId] ;} - CContextServer* getCouplerOutServer(const string& contextId) { return couplerOutServer_[contextId] ;} - - - std::vector primServerId_; - - CRegistry* registryIn=nullptr ; //!< input registry which is read from file - CRegistry* registryOut=nullptr ; //!< output registry which will be written into file at the finalize - - - MPI_Comm intraComm_ ; //! context intra communicator - int intraCommRank_ ; //! context intra communicator rank - int intraCommSize_ ; //! context intra communicator size - - private: - CEventScheduler* eventScheduler_ ; //! The local event scheduler for context - size_t hashId_ ; //! the local hashId for scheduler - size_t timeLine_=0 ; - void initEventScheduler(void) ; + CRegistry* registryIn ; //!< input registry which is read from file + CRegistry* registryOut ; //!< output registry which will be written into file at the finalize + private: bool isPostProcessed; bool allProcessed; bool finalized; - int countChildContextFinalized_; //!< Counter of child contexts (for now it is the number of secondary server pools) + int countChildCtx_; //!< Counter of child contexts (for now it is the number of secondary server pools) + StdString idServer_; CGarbageCollector garbageCollector; std::list comms; //!< Communicators allocated internally - int serviceType_; //!< service associated to the context - string contextId_ ; //!< context client id for the servers. For clients this is same as getId() - bool isProcessingEvent_ ; - private: - CServerContext* parentServerContext_ ; - public: - CServerContext* getParentServerContext(void) { return parentServerContext_; } - private: - bool lockedContext_=false; - public: - void lockContext(void) {lockedContext_=true; } - void unlockContext(void) {lockedContext_=false; } - bool isLockedContext(void) { return lockedContext_;} public: // Some function maybe removed in the near future // virtual void toBinary (StdOStream & os) const; // virtual void fromBinary(StdIStream & is); diff --git a/xios_2311_src/src/node/coupler_in.cpp b/xios_2311_src/src/node/coupler_in.cpp deleted file mode 100755 index 45be9d4c..00000000 --- a/xios_2311_src/src/node/coupler_in.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#include "coupler_in.hpp" -#include "attribute_template.hpp" -#include "object_template.hpp" -#include "group_template.hpp" -#include "object_factory.hpp" -#include "context.hpp" -#include "xios_spl.hpp" - -namespace xios -{ - - CCouplerIn::CCouplerIn(void) : CObjectTemplate(), CCouplerInAttributes(), - virtualFieldGroup(), enabledFields() - { - setVirtualFieldGroup(CFieldGroup::create(getId() + "_virtual_field_group")); - } - - CCouplerIn::CCouplerIn(const StdString & id) : CObjectTemplate(id), CCouplerInAttributes(), - virtualFieldGroup(), enabledFields() - { - setVirtualFieldGroup(CFieldGroup::create(getId() + "_virtual_field_group")); - } - - CCouplerIn::~CCouplerIn(void) - { /* Ne rien faire de plus */ } - - ///--------------------------------------------------------------- - //! Get name of coupler_in - StdString CCouplerIn::GetName(void) { return (StdString("coupler_in")); } - StdString CCouplerIn::GetDefName(void){ return (CCouplerIn::GetName()); } - ENodeType CCouplerIn::GetType(void) { return (eCouplerIn); } - - std::vector CCouplerIn::getEnabledFields(void) - TRY - { - if (enabledFields.empty()) - { - this->enabledFields = this->getAllFields(); - std::vector newEnabledFields; - bool enabled ; - for ( auto it = this->enabledFields.begin(); it != this->enabledFields.end(); it++ ) - { - if ((*it)->enabled.isEmpty()) enabled=true ; - else enabled=(*it)->enabled ; - if (enabled) newEnabledFields.push_back(*it); - } - enabledFields = newEnabledFields; - } - return (this->enabledFields); - } - CATCH_DUMP_ATTR - - const string& CCouplerIn::getCouplingContextId(void) - { - if (couplingContextId_.empty()) - { - vector vectStr=splitRegex(context,"::") ; - string poolId=vectStr[0] ; - string serviceId=poolId ; - string contextId=vectStr[1] ; - int contextLeader ; - int type = CServicesManager::CLIENT ; - couplingContextId_=CXios::getContextsManager()->getServerContextName(poolId, serviceId, 0, type, contextId) ; - } - return couplingContextId_ ; - } - - void CCouplerIn::createInterCommunicator(void) - TRY - { - if (context.isEmpty()) - { - ERROR("void CCouplerOut::createInterCommunicator(void)", - "The attribute must be defined to specify the target coupling context"); - } - CContext* contextPtr = CContext::getCurrent(); - contextPtr->addCouplingChanel(getCouplingContextId(), false) ; - } - CATCH_DUMP_ATTR - - - /*! - \brief Parse xml file and write information into coupler_in object - \param [in] node xmld node corresponding in xml coupler_in - */ - void CCouplerIn::parse(xml::CXMLNode & node) - TRY - { - SuperClass::parse(node); - - if (node.goToChildElement()) - { - do - { - if (node.getElementName()=="field" || node.getElementName()=="field_group") this->getVirtualFieldGroup()->parseChild(node); - } while (node.goToNextElement()); - node.goToParentElement(); - } - } - CATCH_DUMP_ATTR - - /*! - \brief Get virtual field group - In each CCouplerIn, there always exists a field group which is the ancestor of all - fields in the CCouplerIn. This is considered be virtual because it is created automatically during - CCouplerIn initialization and it normally doesn't appear on xml file - \return Pointer to field group - */ - CFieldGroup* CCouplerIn::getVirtualFieldGroup(void) const - TRY - { - return (this->virtualFieldGroup); - } - CATCH - - void CCouplerIn::solveDescInheritance(bool apply, const CAttributeMap * const parent) - TRY - { - SuperClassAttribute::setAttributes(parent,apply); - this->getVirtualFieldGroup()->solveDescInheritance(apply, NULL); - } - CATCH_DUMP_ATTR - - void CCouplerIn::solveFieldRefInheritance(bool apply) - TRY - { - // Rsolution des hritages par rfrence de chacun des champs contenus dans le fichier. - std::vector allF = this->getAllFields(); - for (unsigned int i = 0; i < allF.size(); i++) - allF[i]->solveRefInheritance(apply); - } - CATCH_DUMP_ATTR - /*! - \brief Get virtual variable group - In each CCouplerIn, there always exists a variable group which is the ancestor of all - variable in the CCouplerIn. This is considered be virtual because it is created automatically during - CCouplerIn initialization and it normally doesn't appear on xml file - \return Pointer to variable group - */ - - //! Get all fields of a file - std::vector CCouplerIn::getAllFields(void) const - TRY - { - return (this->virtualFieldGroup->getAllChildren()); - } - CATCH - - /*! - * assign the context associated to the coupler to the enabled fields - */ - void CCouplerIn::assignContext(void) - { - client_ = CContext::getCurrent()->getCouplerInClient(getCouplingContextId()); - for (auto& field : getEnabledFields()) field->setContextClient(client_) ; - } - - //---------------------------------------------------------------- - //! Change virtual field group to a new one - void CCouplerIn::setVirtualFieldGroup(CFieldGroup* newVirtualFieldGroup) - TRY - { - this->virtualFieldGroup = newVirtualFieldGroup; - } - CATCH_DUMP_ATTR - - ///-------------------------------------------------------------- - /*! - */ - StdString CCouplerIn::dumpClassAttributes(void) - { - StdString str; - CContext* context = CContext::getCurrent(); - str.append("context=\""); - str.append(context->getId()); - str.append("\""); - str.append(" enabled fields=\""); - int size = this->enabledFields.size(); - for (int i = 0; i < size; ++i) - { - str.append(this->enabledFields[i]->getId()); - str.append(" "); - } - str.append("\""); - return str; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/node/coupler_in.hpp b/xios_2311_src/src/node/coupler_in.hpp deleted file mode 100755 index b047c9d9..00000000 --- a/xios_2311_src/src/node/coupler_in.hpp +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __XIOS_CCouplerIn__ -#define __XIOS_CCouplerIn__ - -/// XIOS headers /// -#include "xios_spl.hpp" -#include "field.hpp" -#include "declare_group.hpp" -#include "date.hpp" -#include "attribute_enum.hpp" -#include "attribute_enum_impl.hpp" -#include "context_client.hpp" -#include "mpi.hpp" -#include "string_tools.hpp" - -namespace xios -{ - - /// ////////////////////// Déclarations ////////////////////// /// - - class CCouplerInGroup; - class CCouplerInAttributes; - class CCouplerIn; - - class CGarbageCollector; - - ///-------------------------------------------------------------- - - // Declare/Define CCouplerInAttribute - BEGIN_DECLARE_ATTRIBUTE_MAP(CCouplerIn) -# include "coupler_in_attribute.conf" - END_DECLARE_ATTRIBUTE_MAP(CCouplerIn) - - ///-------------------------------------------------------------- - - /*! - \class CCouplerIn - This class corresponds to file component of the xml. - The class contains all the nessceary information to write data into a netcdf file: The most important thing - is the field(s) which will be written into file. Besides, there are some options to write - data into file, e.g: writting into only one file or multiple file; splitting a running into several files. - Moreover, there are some other attributes of netcdf file which are also stored in this class - */ - class CCouplerIn - : public CObjectTemplate - , public CCouplerInAttributes - { - /// typedef /// - typedef CObjectTemplate SuperClass; - typedef CCouplerInAttributes SuperClassAttribute; - - public : - enum EEventId - { - NO_EVENT - }; - - typedef CCouplerInAttributes RelAttributes; - typedef CCouplerInGroup RelGroup; - - /// Constructeurs /// - CCouplerIn(void); - explicit CCouplerIn(const StdString& id); - CCouplerIn(const CCouplerIn& couplerIn); // Not implemented yet. - CCouplerIn(const CCouplerIn* const couplerIn); // Not implemented yet. - - /// Destructeur /// - virtual ~CCouplerIn(void); - - public: - /// Accesseurs /// - CFieldGroup* getVirtualFieldGroup(void) const; - std::vector getAllFields(void) const; - std::vector getEnabledFields(void); - - StdString dumpClassAttributes(void); - - public : - void setVirtualFieldGroup(CFieldGroup* newVFieldGroup); - - // Add component into coupler - CField* addField(const string& id = ""); - CFieldGroup* addFieldGroup(const string& id = ""); - - public: - /// Accesseurs statiques /// - static StdString GetName(void); - static StdString GetDefName(void); - static ENodeType GetType(void); - public: - /// Traitements /// - virtual void parse(xml::CXMLNode& node); -// virtual StdString toString(void) const; - - public: - virtual void solveDescInheritance(bool apply, const CAttributeMap* const parent = 0); - void solveFieldRefInheritance(bool apply); - void createInterCommunicator(void) ; - void assignContext(void) ; - - private: - CContextClient* client_=nullptr ; - public: - CContextClient* getContextClient(void) {return client_; } - - private: - string couplingContextId_ ; - public: - const string& getCouplingContextId(void) ; - - private : - - CFieldGroup* virtualFieldGroup; - -// std::shared_ptr data_out; -// std::shared_ptr data_in; - std::vector enabledFields; - - - public: - - }; // class CCouplerIn - - ///-------------------------------------------------------------- - - // Declare/Define CCouplerInGroup and CCouplerInDefinition - DECLARE_GROUP(CCouplerIn); - - ///-------------------------------------------------------------- - -} // namespace xios - -#endif // __XIOS_CCouplingIn__ \ No newline at end of file diff --git a/xios_2311_src/src/node/coupler_out.cpp b/xios_2311_src/src/node/coupler_out.cpp deleted file mode 100755 index 41000094..00000000 --- a/xios_2311_src/src/node/coupler_out.cpp +++ /dev/null @@ -1,204 +0,0 @@ -#include "coupler_out.hpp" -#include "attribute_template.hpp" -#include "object_template.hpp" -#include "group_template.hpp" -#include "object_factory.hpp" -#include "context.hpp" -#include "xios_spl.hpp" -#include "string_tools.hpp" -#include "contexts_manager.hpp" -#include "services_manager.hpp" - - -namespace xios -{ - - CCouplerOut::CCouplerOut(void) : CObjectTemplate(), CCouplerOutAttributes(), - virtualFieldGroup(), enabledFields() - { - setVirtualFieldGroup(CFieldGroup::create(getId() + "_virtual_field_group")); - } - - CCouplerOut::CCouplerOut(const StdString & id) : CObjectTemplate(id), CCouplerOutAttributes(), - virtualFieldGroup(), enabledFields() - { - setVirtualFieldGroup(CFieldGroup::create(getId() + "_virtual_field_group")); - } - - CCouplerOut::~CCouplerOut(void) - { /* Ne rien faire de plus */ } - - ///--------------------------------------------------------------- - //! Get name of file - StdString CCouplerOut::GetName(void) { return (StdString("coupler_out")); } - StdString CCouplerOut::GetDefName(void){ return (CCouplerOut::GetName()); } - ENodeType CCouplerOut::GetType(void) { return (eCouplerIn); } - - /*! - \brief Parse xml file and write information into coupler_in object - \param [in] node xmld node corresponding in xml coupler_in - */ - void CCouplerOut::parse(xml::CXMLNode & node) - TRY - { - SuperClass::parse(node); - - if (node.goToChildElement()) - { - do - { - if (node.getElementName()=="field" || node.getElementName()=="field_group") this->getVirtualFieldGroup()->parseChild(node); - } while (node.goToNextElement()); - node.goToParentElement(); - } - } - CATCH_DUMP_ATTR - - const string& CCouplerOut::getCouplingContextId(void) - { - if (couplingContextId_.empty()) - { - vector vectStr=splitRegex(context,"::") ; - string poolId=vectStr[0] ; - string serviceId=poolId ; - string contextId=vectStr[1] ; - int contextLeader ; - int type = CServicesManager::CLIENT ; - couplingContextId_=CXios::getContextsManager()->getServerContextName(poolId, serviceId, 0, type, contextId) ; - } - return couplingContextId_ ; - } - - std::vector CCouplerOut::getEnabledFields(void) - TRY - { - if (enabledFields.empty()) - { - this->enabledFields = this->getAllFields(); - std::vector newEnabledFields; - bool enabled ; - for ( auto it = this->enabledFields.begin(); it != this->enabledFields.end(); it++ ) - { - if ((*it)->enabled.isEmpty()) enabled=true ; - else enabled=(*it)->enabled ; - if (enabled) newEnabledFields.push_back(*it); - } - enabledFields = newEnabledFields; - } - return (this->enabledFields); - } - CATCH_DUMP_ATTR - - /*! - * assign the context associated to the coupler to the enabled fields - */ - void CCouplerOut::assignContext(void) - { - client_ = CContext::getCurrent()->getCouplerOutClient(getCouplingContextId()); - for (auto& field : getEnabledFields()) field->setContextClient(client_) ; - } - - /*! - \brief Get virtual field group - In each CCouplerIn, there always exists a field group which is the ancestor of all - fields in the CCouplerIn. This is considered be virtual because it is created automatically during - CCouplerIn initialization and it normally doesn't appear on xml file - \return Pointer to field group - */ - CFieldGroup* CCouplerOut::getVirtualFieldGroup(void) const - TRY - { - return (this->virtualFieldGroup); - } - CATCH - - - /*! - \brief Get virtual variable group - In each CCouplerIn, there always exists a variable group which is the ancestor of all - variable in the CCouplerIn. This is considered be virtual because it is created automatically during - CCouplerIn initialization and it normally doesn't appear on xml file - \return Pointer to variable group - */ - - //! Get all fields of a file - std::vector CCouplerOut::getAllFields(void) const - TRY - { - return (this->virtualFieldGroup->getAllChildren()); - } - CATCH - - void CCouplerOut::solveDescInheritance(bool apply, const CAttributeMap * const parent) - TRY - { - SuperClassAttribute::setAttributes(parent,apply); - this->getVirtualFieldGroup()->solveDescInheritance(apply, NULL); - } - CATCH_DUMP_ATTR - - void CCouplerOut::solveFieldRefInheritance(bool apply) - TRY - { - // Rsolution des hritages par rfrence de chacun des champs contenus dans le fichier. - std::vector allF = this->getAllFields(); - for (unsigned int i = 0; i < allF.size(); i++) - allF[i]->solveRefInheritance(apply); - } - CATCH_DUMP_ATTR - - void CCouplerOut::createInterCommunicator(void) - TRY - { - if (context.isEmpty()) - { - ERROR("void CCouplerOut::createInterCommunicator(void)", - "The attribute must be defined to specify the target coupling context"); - } - CContext* contextPtr = CContext::getCurrent(); - contextPtr->addCouplingChanel(getCouplingContextId(), true) ; - } - CATCH_DUMP_ATTR - - - void CCouplerOut::checkGridOfEnabledFields(void) - TRY - { - int size = this->enabledFields.size(); - for (int i = 0; i < size; ++i) - { - this->enabledFields[i]->checkGridOfEnabledFields(); - } - } - CATCH_DUMP_ATTR - - //---------------------------------------------------------------- - //! Change virtual field group to a new one - void CCouplerOut::setVirtualFieldGroup(CFieldGroup* newVirtualFieldGroup) - TRY - { - this->virtualFieldGroup = newVirtualFieldGroup; - } - CATCH_DUMP_ATTR - - ///-------------------------------------------------------------- - /*! - */ - StdString CCouplerOut::dumpClassAttributes(void) - { - StdString str; - CContext* context = CContext::getCurrent(); - str.append("context=\""); - str.append(context->getId()); - str.append("\""); - str.append(" enabled fields=\""); - int size = this->enabledFields.size(); - for (int i = 0; i < size; ++i) - { - str.append(this->enabledFields[i]->getId()); - str.append(" "); - } - str.append("\""); - return str; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/node/coupler_out.hpp b/xios_2311_src/src/node/coupler_out.hpp deleted file mode 100755 index eca7e29f..00000000 --- a/xios_2311_src/src/node/coupler_out.hpp +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef __XIOS_CCouplerOut__ -#define __XIOS_CCouplerOut__ - -/// XIOS headers /// -#include "xios_spl.hpp" -#include "field.hpp" -#include "declare_group.hpp" -#include "date.hpp" -#include "attribute_enum.hpp" -#include "attribute_enum_impl.hpp" -#include "context_client.hpp" -#include "mpi.hpp" - -namespace xios -{ - - /// ////////////////////// Déclarations ////////////////////// /// - - class CCouplerOutGroup; - class CCouplerOutAttributes; - class CCouplerOut; - - class CGarbageCollector; - - ///-------------------------------------------------------------- - - // Declare/Define CCouplerOutAttribute - BEGIN_DECLARE_ATTRIBUTE_MAP(CCouplerOut) -# include "coupler_out_attribute.conf" - END_DECLARE_ATTRIBUTE_MAP(CCouplerOut) - - ///-------------------------------------------------------------- - - /*! - \class CCouplerOut - - */ - class CCouplerOut - : public CObjectTemplate - , public CCouplerOutAttributes - { - /// typedef /// - typedef CObjectTemplate SuperClass; - typedef CCouplerOutAttributes SuperClassAttribute; - - public : - enum EEventId - { - NO_EVENT - }; - - typedef CCouplerOutAttributes RelAttributes; - typedef CCouplerOutGroup RelGroup; - - /// Constructeurs /// - CCouplerOut(void); - explicit CCouplerOut(const StdString& id); - CCouplerOut(const CCouplerOut& couplerOut); // Not implemented yet. - CCouplerOut(const CCouplerOut* const couplerOut); // Not implemented yet. - - /// Destructeur /// - virtual ~CCouplerOut(void); - - public: - /// Accesseurs /// - CFieldGroup* getVirtualFieldGroup(void) const; - std::vector getAllFields(void) const; - std::vector getEnabledFields(void); - - StdString dumpClassAttributes(void); - - public : - void setVirtualFieldGroup(CFieldGroup* newVFieldGroup); - - // Add component into coupler - CField* addField(const string& id = ""); - CFieldGroup* addFieldGroup(const string& id = ""); - - public: - /// Accesseurs statiques /// - static StdString GetName(void); - static StdString GetDefName(void); - static ENodeType GetType(void); - public: - /// Traitements /// - virtual void parse(xml::CXMLNode& node); -// virtual StdString toString(void) const; - - public: - virtual void solveDescInheritance(bool apply, const CAttributeMap* const parent = 0); - void solveFieldRefInheritance(bool apply); - void createInterCommunicator(void) ; - void checkGridOfEnabledFields(void) ; - void assignContext(void) ; - private: - // the contextClient associated to the context Id attribute - CContextClient* client_=nullptr ; - public: - CContextClient* getContextClient(void) {return client_; } - - private: - string couplingContextId_ ; - public: - const string& getCouplingContextId(void) ; - private: - CFieldGroup* virtualFieldGroup; - -// std::shared_ptr data_out; -// std::shared_ptr data_in; - std::vector enabledFields; - - - public: - - }; // class CCouplerOut - - ///-------------------------------------------------------------- - - // Declare/Define CFileGroup and CFileDefinition - DECLARE_GROUP(CCouplerOut); - - ///-------------------------------------------------------------- - -} // namespace xios - -#endif // __XIOS_CCouplingIn__2 \ No newline at end of file diff --git a/xios_2311_src/src/node/domain.cpp b/xios_2311_src/src/node/domain.cpp index a6add8ff..05fcbf70 100755 --- a/xios_2311_src/src/node/domain.cpp +++ b/xios_2311_src/src/node/domain.cpp @@ -1,4 +1,5 @@ #include "domain.hpp" + #include "attribute_template.hpp" #include "object_template.hpp" #include "group_template.hpp" @@ -16,19 +17,8 @@ #include "distribution_client.hpp" #include "server_distribution_description.hpp" #include "client_server_mapping_distributed.hpp" -#include "local_connector.hpp" -#include "grid_local_connector.hpp" -#include "remote_connector.hpp" -#include "gatherer_connector.hpp" -#include "scatterer_connector.hpp" -#include "grid_scatterer_connector.hpp" -#include "grid_gatherer_connector.hpp" -#include "transformation_path.hpp" -#include "grid_transformation_factory_impl.hpp" #include -#include - namespace xios { @@ -36,25 +26,29 @@ namespace xios { CDomain::CDomain(void) : CObjectTemplate(), CDomainAttributes() - , isChecked(false), relFiles(), indSrv_(), connectedServerRank_() + , isChecked(false), relFiles(), isClientChecked(false), nbSenders(), indSrv_(), connectedServerRank_() , hasBounds(false), hasArea(false), isCompressible_(false), isUnstructed_(false) - , hasLonLat(false) + , isClientAfterTransformationChecked(false), hasLonLat(false) , isRedistributed_(false), hasPole(false) , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() + , globalLocalIndexMap_(), computedWrittenIndex_(false) , clients(), hasLatInReadFile_(false), hasBoundsLatInReadFile_(false) , hasLonInReadFile_(false), hasBoundsLonInReadFile_(false) + , isTiled_(false), isTiledOnly_(false) { } CDomain::CDomain(const StdString & id) : CObjectTemplate(id), CDomainAttributes() - , isChecked(false), relFiles(), indSrv_(), connectedServerRank_() + , isChecked(false), relFiles(), isClientChecked(false), nbSenders(), indSrv_(), connectedServerRank_() , hasBounds(false), hasArea(false), isCompressible_(false), isUnstructed_(false) - , hasLonLat(false) + , isClientAfterTransformationChecked(false), hasLonLat(false) , isRedistributed_(false), hasPole(false) , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() + , globalLocalIndexMap_(), computedWrittenIndex_(false) , clients(), hasLatInReadFile_(false), hasBoundsLatInReadFile_(false) , hasLonInReadFile_(false), hasBoundsLonInReadFile_(false) + , isTiled_(false), isTiledOnly_(false) { } @@ -62,12 +56,6 @@ namespace xios { { } - void CDomain::releaseStaticAllocation(void) - { - transformationMapList_.clear() ; - CTransformation::unregisterAllTransformations() ; - CGridTransformationFactory::unregisterAllTransformations() ; - } ///--------------------------------------------------------------- void CDomain::assignMesh(const StdString meshName, const int nvertex) @@ -85,59 +73,80 @@ namespace xios { } CATCH - CDomain* CDomain::get(const string& id, bool noError) + std::map CDomain::transformationMapList_ = std::map(); + bool CDomain::_dummyTransformationMapList = CDomain::initializeTransformationMap(CDomain::transformationMapList_); + + bool CDomain::initializeTransformationMap(std::map& m) + TRY { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CDomain* CDomain::get(string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CDomain* CDomain::get(string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - if (!CField::has(fieldId)) - if (noError) return nullptr ; - else ERROR("CDomain* CDomain::get(string& id)", <<" id = "< field Id : < "< doesn't exist"); - CField* field=CField::get(fieldId) ; - return field->getAssociatedDomain(suffix, noError) ; - } - else - { - if (noError) if(!CObjectFactory::HasObject(id)) return nullptr ; - return CObjectFactory::GetObject(id).get(); - } + m["zoom_domain"] = TRANS_ZOOM_DOMAIN; + m["interpolate_domain"] = TRANS_INTERPOLATE_DOMAIN; + m["generate_rectilinear_domain"] = TRANS_GENERATE_RECTILINEAR_DOMAIN; + m["compute_connectivity_domain"] = TRANS_COMPUTE_CONNECTIVITY_DOMAIN; + m["expand_domain"] = TRANS_EXPAND_DOMAIN; + m["reorder_domain"] = TRANS_REORDER_DOMAIN; + m["extract_domain"] = TRANS_EXTRACT_DOMAIN; + + return true ; } + CATCH - bool CDomain::has(const string& id) + const std::set & CDomain::getRelFiles(void) const + TRY { - if (CDomain::get(id,true)==nullptr) return false ; - else return true ; + return (this->relFiles); } - - CField* CDomain::getFieldFromId(const string& id) + CATCH + + /*! + Returns the number of indexes written by each server. + \return the number of indexes written by each server + */ + int CDomain::getNumberWrittenIndexes(MPI_Comm writtenCom) + TRY { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CField* CDomain::getFieldFromId(const string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CField* CDomain::getFieldFromId(const string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - CField* field=CField::get(fieldId) ; - return field ; - } - else return nullptr; + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return numberWrittenIndexes_[writtenSize]; } + CATCH_DUMP_ATTR - const std::set & CDomain::getRelFiles(void) const + /*! + Returns the total number of indexes written by the servers. + \return the total number of indexes written by the servers + */ + int CDomain::getTotalNumberWrittenIndexes(MPI_Comm writtenCom) TRY { - return (this->relFiles); + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return totalNumberWrittenIndexes_[writtenSize]; } - CATCH + CATCH_DUMP_ATTR + + /*! + Returns the offset of indexes written by each server. + \return the offset of indexes written by each server + */ + int CDomain::getOffsetWrittenIndexes(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return offsetWrittenIndexes_[writtenSize]; + } + CATCH_DUMP_ATTR + + CArray& CDomain::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom) + TRY + { + int writtenSize; + MPI_Comm_size(writtenCom, &writtenSize); + return compressedIndexToWriteOnServer[writtenSize]; + } + CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //---------------------------------------------------------------- /*! * Compute the minimum buffer size required to send the attributes to the server(s). @@ -221,7 +230,7 @@ namespace xios { bool distributed = !((!ni.isEmpty() && (ni == ni_glo) && !nj.isEmpty() && (nj == nj_glo)) || (!i_index.isEmpty() && i_index.numElements() == ni_glo*nj_glo)); bool distributed_glo ; - distributed |= (1 == CContext::getCurrent()->intraCommSize_); + distributed |= (1 == CContext::getCurrent()->client->clientSize); return distributed; } @@ -230,21 +239,44 @@ namespace xios { //---------------------------------------------------------------- /*! - * Compute if the domain can be ouput in a compressed way. - * In this case the workflow view on server side must be the same - * than the full view for all context rank. The result is stored on - * internal isCompressible_ attribute. + * Test whether the data defined on the domain can be outputted in a compressed way. + * + * \return true if and only if a mask was defined for this domain */ - void CDomain::computeIsCompressible(void) + bool CDomain::isCompressible(void) const + TRY + { + return isCompressible_; + } + CATCH + + bool CDomain::isTiled(void) const TRY { - // mesh is compressible contains some masked or indexed value, ie if full view is different of workflow view. - // But now assume that the size of the 2 view must be equal for everybody. True on server side - int isSameView = getLocalView(CElementView::FULL)->getSize() == getLocalView(CElementView::WORKFLOW)->getSize(); - MPI_Allreduce(MPI_IN_PLACE, &isSameView, 1, MPI_INT, MPI_LAND, CContext::getCurrent()->getIntraComm()) ; - if (isSameView) isCompressible_ = false ; - else isCompressible_ = true ; - isCompressibleComputed_=true ; + return isTiled_; + } + CATCH + + bool CDomain::isTiledOnly(void) const + TRY + { + return isTiledOnly_; + } + CATCH + + int CDomain::getTileId(int i, int j) const + TRY + { + int tileId = 0; + bool stop = false; + while (!stop) + { + if ((i >= tile_ibegin(tileId) ) && (i < tile_ni(tileId)+tile_ibegin(tileId) ) + && (j >= tile_jbegin(tileId) ) && (j < tile_nj(tileId)+tile_jbegin(tileId) ) ) + stop = true; + ++tileId; + } + return (tileId - 1); } CATCH @@ -303,8 +335,8 @@ namespace xios { CContext* context = CContext::getCurrent(); // For now the assumption is that secondary server pools consist of the same number of procs. // CHANGE the line below if the assumption changes. - - int rankClient = context->intraCommRank_; + CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; + int rankClient = client->clientRank; int rankOnDomain = rankClient%nbLocalDomain; if (ni_glo.isEmpty() || ni_glo <= 0 ) @@ -681,27 +713,27 @@ namespace xios { CContext* context = CContext::getCurrent(); // For now the assumption is that secondary server pools consist of the same number of procs. // CHANGE the line below if the assumption changes. - int clientSize = context->intraCommSize_ ; + CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; lon_g.resize(ni_glo) ; lat_g.resize(nj_glo) ; - int* ibegin_g = new int[clientSize] ; - int* jbegin_g = new int[clientSize] ; - int* ni_g = new int[clientSize] ; - int* nj_g = new int[clientSize] ; + int* ibegin_g = new int[client->clientSize] ; + int* jbegin_g = new int[client->clientSize] ; + int* ni_g = new int[client->clientSize] ; + int* nj_g = new int[client->clientSize] ; int v ; v=ibegin ; - MPI_Allgather(&v,1,MPI_INT,ibegin_g,1,MPI_INT,context->intraComm_) ; + MPI_Allgather(&v,1,MPI_INT,ibegin_g,1,MPI_INT,client->intraComm) ; v=jbegin ; - MPI_Allgather(&v,1,MPI_INT,jbegin_g,1,MPI_INT,context->intraComm_) ; + MPI_Allgather(&v,1,MPI_INT,jbegin_g,1,MPI_INT,client->intraComm) ; v=ni ; - MPI_Allgather(&v,1,MPI_INT,ni_g,1,MPI_INT,context->intraComm_) ; + MPI_Allgather(&v,1,MPI_INT,ni_g,1,MPI_INT,client->intraComm) ; v=nj ; - MPI_Allgather(&v,1,MPI_INT,nj_g,1,MPI_INT,context->intraComm_) ; + MPI_Allgather(&v,1,MPI_INT,nj_g,1,MPI_INT,client->intraComm) ; - MPI_Allgatherv(lon.dataFirst(),ni,MPI_DOUBLE,lon_g.dataFirst(),ni_g, ibegin_g,MPI_DOUBLE,context->intraComm_) ; - MPI_Allgatherv(lat.dataFirst(),nj,MPI_DOUBLE,lat_g.dataFirst(),nj_g, jbegin_g,MPI_DOUBLE,context->intraComm_) ; + MPI_Allgatherv(lon.dataFirst(),ni,MPI_DOUBLE,lon_g.dataFirst(),ni_g, ibegin_g,MPI_DOUBLE,client->intraComm) ; + MPI_Allgatherv(lat.dataFirst(),nj,MPI_DOUBLE,lat_g.dataFirst(),nj_g, jbegin_g,MPI_DOUBLE,client->intraComm) ; delete[] ibegin_g ; delete[] jbegin_g ; @@ -855,15 +887,12 @@ namespace xios { nj_glo = 1; nj = 1; jbegin = 0; - if (!i_index.isEmpty()) - { - ni = i_index.numElements(); - j_index.resize(ni); - for(int i=0;i to be checked why is it transposed + if (!area.isEmpty()) + area.transposeSelf(1, 0); } if (ni_glo.isEmpty()) @@ -951,13 +980,8 @@ namespace xios { if (i_index(idx) < minIndex) minIndex = i_index(idx); if (i_index(idx) > maxIndex) maxIndex = i_index(idx); } - if (i_index.numElements()) { - ni = maxIndex - minIndex + 1; - minIIndex = minIndex; - } - else { - ni = 0; - } + ni = maxIndex - minIndex + 1; + minIIndex = minIIndex; } // It's not so correct but if ibegin is not the first value of i_index @@ -1018,12 +1042,8 @@ namespace xios { if (j_index(idx) < minIndex) minIndex = j_index(idx); if (j_index(idx) > maxIndex) maxIndex = j_index(idx); } - if (j_index.numElements()) { - nj = maxIndex - minIndex + 1; - minJIndex = minIndex; - } - else - nj = 0; + nj = maxIndex - minIndex + 1; + minJIndex = minIndex; } // It's the same as checkLocalIDomain. It's not so correct but if jbegin is not the first value of j_index // then data on local domain has user-defined distribution. In this case, jbegin has no meaning. @@ -1175,7 +1195,7 @@ namespace xios { if (i>=0 && i=0 && j=0 && i < domainMask.size()) { - if ( (i<0)||(!domainMask(i)) ) - data_i_index(k) = -1; - else + if (domainMask(i)) data_i_index(k) = k; + else + data_i_index(k) = -1; } else data_i_index(k) = -1; @@ -1251,15 +1271,15 @@ namespace xios { ind=j*ni+i ; if (i>=0 && i=0 && j& dataIndexI, CArray& dataIndexJ, + CArray& infoIndexI, CArray& infoIndexJ) + TRY + { + const int dsize = ni * nj; + dataIndexI.resize(dsize); + dataIndexJ.resize(dsize); + + dataIndexJ = 0; + for (int k = 0; k < ni * nj; ++k) + dataIndexI(k) = k; + + infoIndexI.resize(ni*nj); + for (int j = 0; j < nj; ++j) + for (int i = 0; i < ni; ++i) infoIndexI(i+j*ni) = i+ibegin; + + infoIndexJ.resize(ni*nj); + for (int j = 0; j < nj; ++j) + for (int i = 0; i < ni; ++i) infoIndexJ(i+j*ni) = j+jbegin; + } + CATCH_DUMP_ATTR + //---------------------------------------------------------------- void CDomain::computeLocalMask(void) TRY @@ -1310,6 +1363,13 @@ namespace xios { } CATCH_DUMP_ATTR + void CDomain::checkEligibilityForCompressedOutput(void) + TRY + { + // We don't check if the mask or the indexes are valid here, just if they have been defined at this point. + isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !data_i_index.isEmpty(); + } + CATCH_DUMP_ATTR //---------------------------------------------------------------- @@ -1727,579 +1787,1220 @@ namespace xios { } CATCH_DUMP_ATTR - void CDomain::checkAttributes(void) + //---------------------------------------------------------------- + void CDomain::checkTiles() TRY { - if (this->checkAttributes_done_) return; - this->checkDomain(); - this->checkLonLat(); - this->checkBounds(); - this->checkArea(); - this->checkMask(); - this->checkDomainData(); - this->checkCompression(); - this->computeLocalMask() ; - this->completeLonLatClient(); - this->initializeLocalElement() ; - this->addFullView() ; // probably do not automatically add View, but only if requested - this->addWorkflowView() ; // probably do not automatically add View, but only if requested - this->addModelView() ; // probably do not automatically add View, but only if requested - // testing ? - /* - shared_ptr local = localElement_->getView(CElementView::WORKFLOW) ; - shared_ptr model = localElement_->getView(CElementView::MODEL) ; - - CLocalConnector test1(model, local) ; - test1.computeConnector() ; - CLocalConnector test2(local, model) ; - test2.computeConnector() ; - CGridLocalConnector gridTest1(vector{&test1}) ; - CGridLocalConnector gridTest2(vector{&test2}) ; - - - CArray out1 ; - CArray out2 ; - test1.transfer(data_i_index,out1,-111) ; - test2.transfer(out1,out2,-111) ; - - out1 = 0 ; - out2 = 0 ; - gridTest1.transfer(data_i_index,out1,-111) ; - gridTest2.transfer(out1, out2,-111) ; - */ - this->checkAttributes_done_ = true; + if (!ntiles.isEmpty() && ntiles.getValue() >=1) isTiled_ = true; + if (!tile_only.isEmpty() && tile_only.getValue() == true) { + isTiled_ = true; + isTiledOnly_ = true; + } + + if (isTiled_) + { + + // Attributes tile_ni/nj and tile_i/jbegin are mandatory for tiled domains + if (tile_ni.numElements() != ntiles || tile_ibegin.numElements() != ntiles) + ERROR("CDomain::checkTiles()", + << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " + << "'tile_ni' or 'tile_ibegin' are ill defined: these attributes must be specified for tiled domains and be of the size 'ntiles'." << std::endl + << "The number of tiles is " << ntiles.getValue() << " while the size of 'tile_ni' is " << tile_ni.numElements() + << " and the size of 'tile_ibegin' is " << tile_ibegin.numElements() << "."); + + if (tile_nj.numElements() != ntiles || tile_jbegin.numElements() != ntiles) + ERROR("CDomain::checkTiles()", + << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " + << "'tile_nj' or 'tile_jbegin' are ill defined: these attributes must be specified for tiled domains and be of the size 'ntiles'." << std::endl + << "The number of tiles is " << ntiles.getValue() << " while the size of 'tile_nj' is " << tile_nj.numElements() + << " and the size of 'tile_jbegin' is " << tile_jbegin.numElements() << "."); + + // Check on consistency of individual tile sizes and local domain size + int sizeTiles = 0; + for (int iTile = 0; iTile < ntiles.getValue(); ++iTile) + { + sizeTiles += tile_ni(iTile) * tile_nj(iTile); + } + if (sizeTiles != (ni*nj)) + ERROR("CDomain::checkTiles()", + << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " + << "tiles should cover the entire local domain and cannot overlap." << std::endl << "."); + + + // Fill in tile_data_ni/nj and tile_data_i/jbegin if they are not specified + if (tile_data_ni.numElements() == 0 || tile_data_nj.numElements() == 0) + { + tile_data_ni.resize(ntiles); + tile_data_nj.resize(ntiles); + for (int iTile = 0; iTile < ntiles.getValue(); ++iTile) + { + tile_data_ni(iTile) = tile_ni(iTile); + tile_data_nj(iTile) = tile_nj(iTile); + } + } + + if (tile_data_ibegin.numElements() == 0 || tile_data_jbegin.numElements() == 0) + { + tile_data_ibegin.resize(ntiles); + tile_data_jbegin.resize(ntiles); + tile_data_ibegin = 0; + tile_data_jbegin = 0; + } + + } // isTiled_ } CATCH_DUMP_ATTR + //---------------------------------------------------------------- + int CDomain::getTileDataISize(int tileId) const + TRY + { + int retvalue = (tile_data_ni(tileId) > tile_ni(tileId)) ? tile_data_ni(tileId) : tile_ni(tileId); + return retvalue; + } + CATCH - void CDomain::initializeLocalElement(void) + //---------------------------------------------------------------- + int CDomain::getTileDataJSize(int tileId) const + TRY { - // after checkDomain i_index and j_index of size (ni*nj) - int nij = ni*nj ; - CArray ij_index(ni*nj) ; - for(int ij=0; ijgetIntraCommRank() ; - localElement_ = make_shared(rank, ni_glo*nj_glo, ij_index) ; + int retvalue = (tile_data_nj(tileId) > tile_nj(tileId)) ? tile_data_nj(tileId) : tile_nj(tileId); + return retvalue; } + CATCH - void CDomain::addFullView(void) + void CDomain::checkAttributesOnClientAfterTransformation() + TRY { - CArray index(ni*nj) ; - int nij=ni*nj ; - for(int ij=0; ij addView(CElementView::FULL, index) ; + CContext* context=CContext::getCurrent() ; + + if (this->isClientAfterTransformationChecked) return; + if (context->hasClient) + { + this->computeConnectedClients(); + if (hasLonLat) + if (!context->hasServer) + this->completeLonLatClient(); + } + + this->isClientAfterTransformationChecked = true; } + CATCH_DUMP_ATTR - void CDomain::addWorkflowView(void) + //---------------------------------------------------------------- + // Divide function checkAttributes into 2 seperate ones + // This function only checks all attributes of current domain + void CDomain::checkAttributesOnClient() + TRY { - // information for workflow view is stored in localMask - int nij=ni*nj ; - int nMask=0 ; - for(int ij=0; ij index(nMask) ; - - nMask=0 ; - for(int ij=0; ijisClientChecked) return; + CContext* context=CContext::getCurrent(); + + if (context->hasClient && !context->hasServer) { - index(nMask)=ij ; - nMask++ ; + this->checkDomain(); + this->checkBounds(); + this->checkArea(); + this->checkLonLat(); + this->checkTiles(); + } + + if (context->hasClient && !context->hasServer) + { // Ct client uniquement + this->checkMask(); + this->checkDomainData(); + this->checkCompression(); + this->computeLocalMask() ; + } + else + { // Ct serveur uniquement } - localElement_ -> addView(CElementView::WORKFLOW, index) ; + + this->isClientChecked = true; } + CATCH_DUMP_ATTR - void CDomain::addModelView(void) + // Send all checked attributes to server + void CDomain::sendCheckedAttributes() + TRY { - // information for model view is stored in data_i_index/data_j_index - // very weird, do not mix data_i_index and data_i_begin => in future only keep data_i_index - int dataSize = data_i_index.numElements() ; - CArray index(dataSize) ; - int i,j ; - for(int k=0;kisClientChecked) checkAttributesOnClient(); + if (!this->isClientAfterTransformationChecked) checkAttributesOnClientAfterTransformation(); + CContext* context=CContext::getCurrent() ; + + if (this->isChecked) return; + if (context->hasClient) { - if (data_dim==2) - { - i=data_i_index(k)+data_ibegin ; // bad - j=data_j_index(k)+data_jbegin ; // bad - if (i>=0 && i=0 && j=0 && iaddView(CElementView::MODEL, index) ; - } - - void CDomain::computeModelToWorkflowConnector(void) - { - shared_ptr srcView=getLocalView(CElementView::MODEL) ; - shared_ptr dstView=getLocalView(CElementView::WORKFLOW) ; - modelToWorkflowConnector_ = make_shared(srcView, dstView); - modelToWorkflowConnector_->computeConnector() ; + this->isChecked = true; } + CATCH_DUMP_ATTR + void CDomain::checkAttributes(void) + TRY + { + if (this->isChecked) return; + CContext* context=CContext::getCurrent() ; - string CDomain::getCouplingAlias(const string& fieldId, int posInGrid) - { - return "_domain["+std::to_string(posInGrid)+"]_of_"+fieldId ; - } - - /* to be removed later when coupling will be reimplemented, just to not forget */ - void CDomain::sendDomainToCouplerOut(CContextClient* client, const string& fieldId, int posInGrid) - { - if (sendDomainToFileServer_done_.count(client)!=0) return ; - else sendDomainToFileServer_done_.insert(client) ; - - const string domainId = getCouplingAlias(fieldId, posInGrid) ; - - if (!domain_ref.isEmpty()) - { - auto domain_ref_tmp=domain_ref.getValue() ; - domain_ref.reset() ; // remove the reference, find an other way to do that more cleanly - this->sendAllAttributesToServer(client, domainId) ; - domain_ref = domain_ref_tmp ; - } - else this->sendAllAttributesToServer(client, domainId) ; - } + this->checkDomain(); + this->checkLonLat(); + this->checkBounds(); + this->checkArea(); + + if (context->hasClient) + { // Ct client uniquement + this->checkMask(); + this->checkDomainData(); + this->checkCompression(); + this->computeLocalMask() ; + } + else + { // Ct serveur uniquement + } + if (context->hasClient) + { + this->computeConnectedClients(); + this->completeLonLatClient(); + } + this->isChecked = true; + } + CATCH_DUMP_ATTR - void CDomain::makeAliasForCoupling(const string& fieldId, int posInGrid) - { - const string domainId = getCouplingAlias(fieldId, posInGrid); - this->createAlias(domainId) ; - } + void CDomain::initLonLatValue(void) + TRY + { + CContext* context=CContext::getCurrent() ; + if (context->hasClient) + { + this->completeLonLatClient(); + } - void CDomain::computeRemoteElement(CContextClient* client, EDistributionType distType) + } + CATCH_DUMP_ATTR + /*! + Compute the connection of a client to other clients to determine which clients to send attributes to. + The sending clients are supposed to already know the distribution of receiving clients (In simple cases, it's band) + The connection among clients is calculated by using global index. + A client connects to other clients which holds the same global index as it. + */ + void CDomain::computeConnectedClients() TRY { - CContext* context = CContext::getCurrent(); - map> globalIndex ; -/* old method - if (type==EDistributionType::BANDS) // Bands distribution to send to file server - { - int nbServer = client->serverSize; - std::vector nGlobDomain(2); - nGlobDomain[0] = this->ni_glo; - nGlobDomain[1] = this->nj_glo; + CContext* context=CContext::getCurrent() ; + + // This line should be changed soon. + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; - // to be changed in future, need to rewrite more simply domain distribution - CServerDistributionDescription serverDescription(nGlobDomain, nbServer); - int distributedPosition ; - if (isUnstructed_) distributedPosition = 0 ; - else distributedPosition = 1 ; - - std::vector > serverIndexBegin = serverDescription.getServerIndexBegin(); - std::vector > serverDimensionSizes = serverDescription.getServerDimensionSizes(); - vector>> indexServerOnElement ; - CArray axisDomainOrder(1) ; axisDomainOrder(0)=2 ; - auto zeroIndex=serverDescription.computeServerGlobalByElement(indexServerOnElement, context->getIntraCommRank(), context->getIntraCommSize(), - axisDomainOrder,distributedPosition) ; - // distribution is very bad => to redo - // convert indexServerOnElement => map> - need to be changed later - map> vectGlobalIndex ; - for(auto& indexRanks : indexServerOnElement[0]) - { - size_t index=indexRanks.first ; - auto& ranks=indexRanks.second ; - for(int rank : ranks) vectGlobalIndex[rank].push_back(index) ; - } - for(auto& vect : vectGlobalIndex ) globalIndex.emplace(vect.first, CArray(vect.second.data(), shape(vect.second.size()),duplicateData)) ; - // some servers receves no index (zeroIndex array) => root process take them into account. - if (context->getIntraCommRank()==0) - for(auto& rank : zeroIndex) globalIndex[rank] = CArray() ; - } -*/ - if (distType==EDistributionType::BANDS && isUnstructed_) distType=EDistributionType::COLUMNS ; + nbSenders.clear(); + connectedServerRank_.clear(); - if (distType==EDistributionType::BANDS) // Bands distribution to send to file server + for (int p = 0; p < nbSrvPools; ++p) { + CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; int nbServer = client->serverSize; - int nbClient = client->clientSize ; - int rankClient = client->clientRank ; - int size = nbServer / nbClient ; - int start ; - if (nbServer%nbClient > rankClient) + int nbClient = client->clientSize; + int rank = client->clientRank; + bool doComputeGlobalIndexServer = true; + + if (connectedServerRank_.find(nbServer) == connectedServerRank_.end()) { - start = (size+1) * rankClient ; - size++ ; - } - else start = size*rankClient + nbServer%nbClient ; - - for(int i=0; i rank) + + if (indSrv_.find(nbServer) == indSrv_.end()) { - indStart = (indSize+1) * rank ; - indSize++ ; + int i,j,i_ind,j_ind, nbIndex=i_index.numElements(); + int globalIndexCount = i_index.numElements(); + // Fill in index + CArray globalIndexDomain(nbIndex); + size_t globalIndex; + + for (i = 0; i < nbIndex; ++i) + { + i_ind=i_index(i); + j_ind=j_index(i); + globalIndex = i_ind + j_ind * ni_glo; + globalIndexDomain(i) = globalIndex; + } + + if (globalLocalIndexMap_.empty()) + { + for (i = 0; i < nbIndex; ++i) + globalLocalIndexMap_[globalIndexDomain(i)] = i; + } + + size_t globalSizeIndex = 1, indexBegin, indexEnd; + int range, clientSize = client->clientSize; + std::vector nGlobDomain(2); + nGlobDomain[0] = this->ni_glo; + nGlobDomain[1] = this->nj_glo; + for (int i = 0; i < nGlobDomain.size(); ++i) globalSizeIndex *= nGlobDomain[i]; + indexBegin = 0; + if (globalSizeIndex <= clientSize) + { + indexBegin = rank%globalSizeIndex; + indexEnd = indexBegin; + } + else + { + for (int i = 0; i < clientSize; ++i) + { + range = globalSizeIndex / clientSize; + if (i < (globalSizeIndex%clientSize)) ++range; + if (i == client->clientRank) break; + indexBegin += range; + } + indexEnd = indexBegin + range - 1; + } + + // Even if servers have no index, they must received something from client + // We only use several client to send "empty" message to these servers + CServerDistributionDescription serverDescription(nGlobDomain, nbServer); + std::vector serverZeroIndex; + if (isUnstructed_) serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair(indexBegin, indexEnd), 0); + else serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair(indexBegin, indexEnd), 1); + + std::list serverZeroIndexLeader; + std::list serverZeroIndexNotLeader; + CContextClient::computeLeader(client->clientRank, client->clientSize, serverZeroIndex.size(), serverZeroIndexLeader, serverZeroIndexNotLeader); + for (std::list::iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + *it = serverZeroIndex[*it]; + + CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(), client->intraComm); + clientServerMap->computeServerIndexMapping(globalIndexDomain, nbServer); + CClientServerMapping::GlobalIndexMap& globalIndexDomainOnServer = clientServerMap->getGlobalIndexOnServer(); + + CClientServerMapping::GlobalIndexMap::const_iterator it = globalIndexDomainOnServer.begin(), + ite = globalIndexDomainOnServer.end(); + indSrv_[nbServer].swap(globalIndexDomainOnServer); + connectedServerRank_[nbServer].clear(); + for (it = indSrv_[nbServer].begin(); it != ite; ++it) + connectedServerRank_[nbServer].push_back(it->first); + + for (std::list::const_iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + connectedServerRank_[nbServer].push_back(*it); + + // Even if a client has no index, it must connect to at least one server and + // send an "empty" data to this server + if (connectedServerRank_[nbServer].empty()) + connectedServerRank_[nbServer].push_back(client->clientRank % client->serverSize); + + // Now check if all servers have data to receive. If not, master client will send empty data. + // This ensures that all servers will participate in collective calls upon receiving even if they have no date to receive. + std::vector counts (clientSize); + std::vector displs (clientSize); + displs[0] = 0; + int localCount = connectedServerRank_[nbServer].size() ; + MPI_Gather(&localCount, 1, MPI_INT, &counts[0], 1, MPI_INT, 0, client->intraComm) ; + for (int i = 0; i < clientSize-1; ++i) + { + displs[i+1] = displs[i] + counts[i]; + } + std::vector allConnectedServers(displs[clientSize-1]+counts[clientSize-1]); + MPI_Gatherv(&(connectedServerRank_[nbServer])[0], localCount, MPI_INT, &allConnectedServers[0], &counts[0], &displs[0], MPI_INT, 0, client->intraComm); + + if ((allConnectedServers.size() != nbServer) && (rank == 0)) + { + std::vector isSrvConnected (nbServer, false); + for (int i = 0; i < allConnectedServers.size(); ++i) isSrvConnected[allConnectedServers[i]] = true; + for (int i = 0; i < nbServer; ++i) + { + if (!isSrvConnected[i]) connectedServerRank_[nbServer].push_back(i); + } + } + nbSenders[nbServer] = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_[nbServer]); + delete clientServerMap; } - else indStart = indSize*rank + nj_glo%nbServer ; - - indStart=indStart*ni_glo ; - indSize=indSize*ni_glo ; - auto& globalInd = globalIndex[rank] ; - globalInd.resize(indSize) ; - for(size_t n = 0 ; nserverSize; - int nbClient = client->clientSize ; - int rankClient = client->clientRank ; - int size = nbServer / nbClient ; - int start ; - if (nbServer%nbClient > rankClient) + } + CATCH_DUMP_ATTR + + /*! + Compute index to write data. We only write data on the zoomed region, therefore, there should + be a map between the complete grid and the reduced grid where we write data. + By using global index we can easily create this kind of mapping. + */ + void CDomain::computeWrittenIndex() + TRY + { + if (computedWrittenIndex_) return; + computedWrittenIndex_ = true; + + CContext* context=CContext::getCurrent(); + CContextServer* server = context->server; + + std::vector nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2); + nBegin[0] = ibegin; nBegin[1] = jbegin; + nSize[0] = ni; nSize[1] = nj; + nBeginGlobal[0] = 0; nBeginGlobal[1] = 0; + nGlob[0] = ni_glo; nGlob[1] = nj_glo; + CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); + const CArray& writtenGlobalIndex = srvDist.getGlobalIndex(); + + size_t nbWritten = 0, indGlo; + std::unordered_map::const_iterator itb = globalLocalIndexMap_.begin(), + ite = globalLocalIndexMap_.end(), it; + CArray::const_iterator itSrvb = writtenGlobalIndex.begin(), + itSrve = writtenGlobalIndex.end(), itSrv; + + localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements()); + nbWritten = 0; + for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) { - start = (size+1) * rankClient ; - size++ ; - } - else start = size*rankClient + nbServer%nbClient ; - - for(int i=0; i rank) + indGlo = *itSrv; + if (ite != globalLocalIndexMap_.find(indGlo)) { - indStart = (indSize+1) * rank ; - indSize++ ; + localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; } - else indStart = indSize*rank + ni_glo%nbServer ; - - auto& globalInd = globalIndex[rank] ; - globalInd.resize(indSize*nj_glo) ; - size_t n=0 ; - for(int j=0; jserverSize; - int nglo=ni_glo*nj_glo ; - CArray indGlo ; - for(size_t i=0;igetRanksServerLeader()) globalIndex[rankServer] = indGlo ; - } - remoteElement_[client] = make_shared(ni_glo*nj_glo, globalIndex) ; - remoteElement_[client]->addFullView() ; - } - CATCH - - + } + CATCH_DUMP_ATTR - void CDomain::distributeToServer(CContextClient* client, map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr &scattererConnector, const string& domainId) + void CDomain::computeWrittenCompressedIndex(MPI_Comm writtenComm) TRY { - string serverDomainId = domainId.empty() ? this->getId() : domainId ; - CContext* context = CContext::getCurrent(); - - this->sendAllAttributesToServer(client, serverDomainId) ; - - auto scatteredElement = make_shared(ni_glo*nj_glo, globalIndexOut) ; - scatteredElement->addFullView() ; - scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - - // phase 0 - // send remote element to construct the full view on server, ie without hole - CEventClient event0(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); - CMessage message0 ; - message0<sendToServer(client,event0,message0) ; - - // phase 1 - // send the full view of element to construct the connector which connect distributed data coming from client to the full local view - CEventClient event1(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); - CMessage message1 ; - message1<getView(CElementView::FULL)->getGlobalSize() ; - scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; - - sendDistributedAttributes(client, scattererConnector, domainId) ; + int writtenCommSize; + MPI_Comm_size(writtenComm, &writtenCommSize); + if (compressedIndexToWriteOnServer.find(writtenCommSize) != compressedIndexToWriteOnServer.end()) + return; - - // phase 2 send the mask : data index + mask2D - { - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - - // prepare grid scatterer connector to send data from client to server - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2, false) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - // create new workflow view for scattered element - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); - CMessage message2 ; - message2<sendToServer(client, event2, message2) ; - clientToServerConnector_[client] = make_shared(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - clientToServerConnector_[client]->computeConnector() ; - } - //////////// - // phase 3 : compute connector to receive from server - //////////// + if (isCompressible()) { - auto scatteredElement = make_shared(ni_glo*nj_glo, globalIndexIn) ; - scatteredElement->addFullView() ; - auto scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2, false) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event3(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); - CMessage message3 ; - message3<sendToServer(client, event3, message3) ; - - clientFromServerConnector_[client] = make_shared(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); - clientFromServerConnector_[client]->computeConnector() ; - } + size_t nbWritten = 0, indGlo; + CContext* context=CContext::getCurrent(); + CContextServer* server = context->server; + + std::vector nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2); + nBegin[0] = ibegin; nBegin[1] = jbegin; + nSize[0] = ni; nSize[1] = nj; + nBeginGlobal[0] = 0; nBeginGlobal[1] = 0; + nGlob[0] = ni_glo; nGlob[1] = nj_glo; + CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); + const CArray& writtenGlobalIndex = srvDist.getGlobalIndex(); + + std::unordered_map::const_iterator itb = globalLocalIndexMap_.begin(), + ite = globalLocalIndexMap_.end(), it; + CArray::const_iterator itSrvb = writtenGlobalIndex.begin(), + itSrve = writtenGlobalIndex.end(), itSrv; + std::unordered_map localGlobalIndexMap; + for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) + { + indGlo = *itSrv; + if (ite != globalLocalIndexMap_.find(indGlo)) + { + localGlobalIndexMap[localIndexToWriteOnServer(nbWritten)] = indGlo; + ++nbWritten; + } + } + + nbWritten = 0; + for (int idx = 0; idx < data_i_index.numElements(); ++idx) + { + if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_i_index(idx))) + { + ++nbWritten; + } + } + + compressedIndexToWriteOnServer[writtenCommSize].resize(nbWritten); + nbWritten = 0; + for (int idx = 0; idx < data_i_index.numElements(); ++idx) + { + if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_i_index(idx))) + { + compressedIndexToWriteOnServer[writtenCommSize](nbWritten) = localGlobalIndexMap[data_i_index(idx)]; + ++nbWritten; + } + } + + numberWrittenIndexes_[writtenCommSize] = nbWritten; + bool distributed_glo, distributed=isDistributed() ; + MPI_Allreduce(&distributed,&distributed_glo, 1, MPI_INT, MPI_LOR, writtenComm) ; + + if (distributed_glo) + { + + MPI_Allreduce(&numberWrittenIndexes_[writtenCommSize], &totalNumberWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); + MPI_Scan(&numberWrittenIndexes_[writtenCommSize], &offsetWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm); + offsetWrittenIndexes_[writtenCommSize] -= numberWrittenIndexes_[writtenCommSize]; + } + else + totalNumberWrittenIndexes_[writtenCommSize] = numberWrittenIndexes_[writtenCommSize]; + } } - CATCH - - void CDomain::recvDomainDistribution(CEventServer& event) + CATCH_DUMP_ATTR + + /*! + Send all attributes from client to connected clients + The attributes will be rebuilt on receiving side + */ + void CDomain::sendAttributes() TRY { - string domainId; - int phasis ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> domainId >> phasis ; - get(domainId)->receivedDomainDistribution(event, phasis); + sendDistributionAttributes(); + sendIndex(); + sendLonLat(); + sendArea(); + sendDataIndex(); } CATCH - - void CDomain::receivedDomainDistribution(CEventServer& event, int phasis) + /*! + Send global index from client to connected client(s) + */ + void CDomain::sendIndex() TRY { - CContext* context = CContext::getCurrent(); - if (phasis==0) // receive the remote element to construct the full view + int ns, n, i, j, ind, nv, idx; + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) { - localElement_ = make_shared(context->getIntraCommRank(),event) ; - localElement_->addFullView() ; - // construct the local dimension and indexes - auto& globalIndex=localElement_->getGlobalIndex() ; - int nij=globalIndex.numElements() ; - int minI=ni_glo,maxI=-1,minJ=nj_glo,maxJ=-1 ; - int i,j ; - int niGlo=ni_glo, njGlo=njGlo ; - for(int ij=0;ijserverSize; + CEventClient eventIndex(getType(), EVENT_ID_INDEX); + + list list_msgsIndex; + list > list_indGlob; + + std::unordered_map >::const_iterator itIndex, iteIndex; + iteIndex = indSrv_[serverSize].end(); + for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) { - j=globalIndex(ij)/niGlo ; - i=globalIndex(ij)%niGlo ; - if (imaxI) maxI=i ; - if (jmaxJ) maxJ=j ; - } - if (maxI>=minI) { ibegin=minI ; ni=maxI-minI+1 ; } - else {ibegin=0; ni=0 ;} - if (maxJ>=minJ) { jbegin=minJ ; nj=maxJ-minJ+1 ; } - else {jbegin=0; nj=0 ;} + int nbIndGlob = 0; + int rank = connectedServerRank_[serverSize][k]; + itIndex = indSrv_[serverSize].find(rank); + if (iteIndex != itIndex) + nbIndGlob = itIndex->second.size(); + list_indGlob.push_back(CArray(nbIndGlob)); + + CArray& indGlob = list_indGlob.back(); + for (n = 0; n < nbIndGlob; ++n) + { + indGlob(n) = static_cast(itIndex->second[n]); + } + + list_msgsIndex.push_back(CMessage()); + list_msgsIndex.back() << this->getId() << (int)type; // enum ne fonctionne pour les message => ToFix + list_msgsIndex.back() << isCurvilinear; + list_msgsIndex.back() << list_indGlob.back(); //list_indi.back() << list_indj.back(); + + eventIndex.push(rank, nbSenders[serverSize][rank], list_msgsIndex.back()); + } + + client->sendEvent(eventIndex); } - else if (phasis==1) // receive the sent view from client to construct the full distributed full view on server - { - CContext* context = CContext::getCurrent(); - shared_ptr elementFrom = make_shared(event) ; - elementFrom->addFullView() ; - gathererConnector_ = make_shared(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; - gathererConnector_->computeConnector() ; - } - else if (phasis==2) - { - elementFrom_ = make_shared(event) ; - elementFrom_->addFullView() ; - } - else if (phasis==3) + } + CATCH_DUMP_ATTR + + /*! + Send distribution from client to other clients + Because a client in a level knows correctly the grid distribution of client on the next level + it calculates this distribution then sends it to the corresponding clients on the next level + */ + void CDomain::sendDistributionAttributes(void) + TRY + { + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) { - elementTo_ = make_shared(event) ; - elementTo_->addFullView() ; + CContextClient* client = *it; + int nbServer = client->serverSize; + std::vector nGlobDomain(2); + nGlobDomain[0] = this->ni_glo; + nGlobDomain[1] = this->nj_glo; + + CServerDistributionDescription serverDescription(nGlobDomain, nbServer); + if (isUnstructed_) serverDescription.computeServerDistribution(false, 0); + else serverDescription.computeServerDistribution(false, 1); + + std::vector > serverIndexBegin = serverDescription.getServerIndexBegin(); + std::vector > serverDimensionSizes = serverDescription.getServerDimensionSizes(); + + CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); + if (client->isServerLeader()) + { + std::list msgs; + + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + // Use const int to ensure CMessage holds a copy of the value instead of just a reference + const int ibegin_srv = serverIndexBegin[*itRank][0]; + const int jbegin_srv = serverIndexBegin[*itRank][1]; + const int ni_srv = serverDimensionSizes[*itRank][0]; + const int nj_srv = serverDimensionSizes[*itRank][1]; + + msgs.push_back(CMessage()); + CMessage& msg = msgs.back(); + msg << this->getId() ; + msg << isUnstructed_; + msg << ni_srv << ibegin_srv << nj_srv << jbegin_srv; + msg << ni_glo.getValue() << nj_glo.getValue(); + msg << isCompressible_; + + event.push(*itRank,1,msg); + } + client->sendEvent(event); + } + else client->sendEvent(event); } } - CATCH + CATCH_DUMP_ATTR - void CDomain::setServerMask(CArray& serverMask, CContextClient* client) + /*! + Send area from client to connected client(s) + */ + void CDomain::sendArea() TRY { - // nota : the client is needed to get the remote size for the scatterer connector. Maybe it is not the good place for this - // Later, server to client connector can be computed on demand, with "client" as argument - CContext* context = CContext::getCurrent(); - localElement_->addView(CElementView::WORKFLOW, serverMask) ; - mask_1d.reference(serverMask.copy()) ; - - serverFromClientConnector_ = make_shared(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; - serverFromClientConnector_->computeConnector() ; - - serverToClientConnector_ = make_shared(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - serverToClientConnector_->computeConnector() ; + if (!hasArea) return; + + int ns, n, i, j, ind, nv, idx; + std::list::iterator it; + + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + int serverSize = client->serverSize; + + // send area for each connected server + CEventClient eventArea(getType(), EVENT_ID_AREA); + + list list_msgsArea; + list > list_area; + + std::unordered_map >::const_iterator it, iteMap; + iteMap = indSrv_[serverSize].end(); + for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) + { + int nbData = 0; + int rank = connectedServerRank_[serverSize][k]; + it = indSrv_[serverSize].find(rank); + if (iteMap != it) + nbData = it->second.size(); + list_area.push_back(CArray(nbData)); + + const std::vector& temp = it->second; + for (n = 0; n < nbData; ++n) + { + idx = static_cast(it->second[n]); + list_area.back()(n) = areavalue(globalLocalIndexMap_[idx]); + } + + list_msgsArea.push_back(CMessage()); + list_msgsArea.back() << this->getId() << hasArea; + list_msgsArea.back() << list_area.back(); + eventArea.push(rank, nbSenders[serverSize][rank], list_msgsArea.back()); + } + client->sendEvent(eventArea); + } } CATCH_DUMP_ATTR - - void CDomain::sendDistributedAttributes(CContextClient* client, shared_ptr scattererConnector, const string& domainId) + /*! + Send longitude and latitude from client to servers + Each client send long and lat information to corresponding connected clients(s). + Because longitude and latitude are optional, this function only called if latitude and longitude exist + */ + void CDomain::sendLonLat() + TRY { - string serverDomainId = domainId.empty() ? this->getId() : domainId ; - CContext* context = CContext::getCurrent(); + if (!hasLonLat) return; - if (hasLonLat) + int ns, n, i, j, ind, nv, idx; + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) { - { // send longitude - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(lonvalue, client, event,message) ; - } - - { // send latitude - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(latvalue, client, event, message) ; + CContextClient* client = *it; + int serverSize = client->serverSize; + + // send lon lat for each connected server + CEventClient eventLon(getType(), EVENT_ID_LON); + CEventClient eventLat(getType(), EVENT_ID_LAT); + + list list_msgsLon, list_msgsLat; + list > list_lon, list_lat; + list > list_boundslon, list_boundslat; + + std::unordered_map >::const_iterator it, iteMap; + iteMap = indSrv_[serverSize].end(); + for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) + { + int nbData = 0; + int rank = connectedServerRank_[serverSize][k]; + it = indSrv_[serverSize].find(rank); + if (iteMap != it) + nbData = it->second.size(); + + list_lon.push_back(CArray(nbData)); + list_lat.push_back(CArray(nbData)); + + if (hasBounds) + { + list_boundslon.push_back(CArray(nvertex, nbData)); + list_boundslat.push_back(CArray(nvertex, nbData)); + } + + CArray& lon = list_lon.back(); + CArray& lat = list_lat.back(); + const std::vector& temp = it->second; + for (n = 0; n < nbData; ++n) + { + idx = static_cast(it->second[n]); + int localInd = globalLocalIndexMap_[idx]; + lon(n) = lonvalue(localInd); + lat(n) = latvalue(localInd); + + if (hasBounds) + { + CArray& boundslon = list_boundslon.back(); + CArray& boundslat = list_boundslat.back(); + + for (nv = 0; nv < nvertex; ++nv) + { + boundslon(nv, n) = bounds_lonvalue(nv, localInd); + boundslat(nv, n) = bounds_latvalue(nv, localInd); + } + } + } + + list_msgsLon.push_back(CMessage()); + list_msgsLat.push_back(CMessage()); + + list_msgsLon.back() << this->getId() << hasLonLat; + if (hasLonLat) + list_msgsLon.back() << list_lon.back(); + list_msgsLon.back() << hasBounds; + if (hasBounds) + { + list_msgsLon.back() << list_boundslon.back(); + } + + list_msgsLat.back() << this->getId() << hasLonLat; + if (hasLonLat) + list_msgsLat.back() << list_lat.back(); + list_msgsLat.back() << hasBounds; + if (hasBounds) + { + list_msgsLat.back() << list_boundslat.back(); + } + + eventLon.push(rank, nbSenders[serverSize][rank], list_msgsLon.back()); + eventLat.push(rank, nbSenders[serverSize][rank], list_msgsLat.back()); } + client->sendEvent(eventLon); + client->sendEvent(eventLat); } + } + CATCH_DUMP_ATTR + + /*! + Send data index to corresponding connected clients. + Data index can be compressed however, we always send decompressed data index + and they will be compressed on receiving. + The compressed index are represented with 1 and others are represented with -1 + */ + void CDomain::sendDataIndex() + TRY + { + int ns, n, i, j, ind, nv, idx; + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + + int serverSize = client->serverSize; - if (hasBounds) - { - { // send longitude boudaries - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(nvertex, bounds_lonvalue, client, event, message ) ; + // send area for each connected server + CEventClient eventDataIndex(getType(), EVENT_ID_DATA_INDEX); + + list list_msgsDataIndex; + list > list_data_i_index, list_data_j_index; + + int nbIndex = i_index.numElements(); + int niByIndex = max(i_index) - min(i_index) + 1; + int njByIndex = max(j_index) - min(j_index) + 1; + int dataIindexBound = (1 == data_dim) ? (niByIndex * njByIndex) : niByIndex; + int dataJindexBound = (1 == data_dim) ? (niByIndex * njByIndex) : njByIndex; + + + CArray dataIIndex(nbIndex), dataJIndex(nbIndex); + dataIIndex = -1; + dataJIndex = -1; + ind = 0; + + for (idx = 0; idx < data_i_index.numElements(); ++idx) + { + int dataIidx = data_i_index(idx) + data_ibegin; + int dataJidx = data_j_index(idx) + data_jbegin; + if ((0 <= dataIidx) && (dataIidx < dataIindexBound) && + (0 <= dataJidx) && (dataJidx < dataJindexBound)) + { + dataIIndex((1 == data_dim) ? dataIidx : dataJidx * ni + dataIidx) = 1; //i_index(dataIidx);//dataIidx; + dataJIndex((1 == data_dim) ? dataIidx : dataJidx * ni + dataIidx) = 1; //j_index(dataJidx);// + } } - { // send latitude boudaries - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(nvertex, bounds_latvalue, client, event, message ) ; + std::unordered_map >::const_iterator it, iteMap; + iteMap = indSrv_[serverSize].end(); + for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) + { + int nbData = 0; + int rank = connectedServerRank_[serverSize][k]; + it = indSrv_[serverSize].find(rank); + if (iteMap != it) + nbData = it->second.size(); + list_data_i_index.push_back(CArray(nbData)); + list_data_j_index.push_back(CArray(nbData)); + + const std::vector& temp = it->second; + for (n = 0; n < nbData; ++n) + { + idx = static_cast(it->second[n]); + i = globalLocalIndexMap_[idx]; + list_data_i_index.back()(n) = dataIIndex(i); + list_data_j_index.back()(n) = dataJIndex(i); + } + + list_msgsDataIndex.push_back(CMessage()); + list_msgsDataIndex.back() << this->getId(); + list_msgsDataIndex.back() << list_data_i_index.back() << list_data_j_index.back(); + eventDataIndex.push(rank, nbSenders[serverSize][rank], list_msgsDataIndex.back()); } + client->sendEvent(eventDataIndex); } - - if (hasArea) - { // send area - CEventClient event(getType(), EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE); - CMessage message ; - message<transfer(areavalue, client, event,message) ; + } + CATCH + + bool CDomain::dispatchEvent(CEventServer& event) + TRY + { + if (SuperClass::dispatchEvent(event)) return true; + else + { + switch(event.type) + { + case EVENT_ID_SERVER_ATTRIBUT: + recvDistributionAttributes(event); + return true; + break; + case EVENT_ID_INDEX: + recvIndex(event); + return true; + break; + case EVENT_ID_LON: + recvLon(event); + return true; + break; + case EVENT_ID_LAT: + recvLat(event); + return true; + break; + case EVENT_ID_AREA: + recvArea(event); + return true; + break; + case EVENT_ID_DATA_INDEX: + recvDataIndex(event); + return true; + break; + default: + ERROR("bool CDomain::dispatchEvent(CEventServer& event)", + << "Unknown Event"); + return false; + } } } + CATCH - void CDomain::recvDistributedAttributes(CEventServer& event) + /*! + Receive index event from clients(s) + \param[in] event event contain info about rank and associated index + */ + void CDomain::recvIndex(CEventServer& event) TRY { string domainId; - string type ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> domainId >> type ; - get(domainId)->recvDistributedAttributes(event, type); + std::map rankBuffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + CBufferIn* buffer = it->buffer; + *buffer >> domainId; + rankBuffers[it->rank] = buffer; + } + get(domainId)->recvIndex(rankBuffers); } CATCH - void CDomain::recvDistributedAttributes(CEventServer& event, const string& type) + /*! + Receive index information from client(s). We use the global index for mapping index between + sending clients and receiving clients. + \param[in] rankBuffers rank of sending client and the corresponding receive buffer + */ + void CDomain::recvIndex(std::map& rankBuffers) TRY { - if (type=="lon") + int nbReceived = rankBuffers.size(), i, ind, index, type_int, iIndex, jIndex; + recvClientRanks_.resize(nbReceived); + + std::map::iterator it = rankBuffers.begin(), ite = rankBuffers.end(); + ind = 0; + for (ind = 0; it != ite; ++it, ++ind) + { + recvClientRanks_[ind] = it->first; + CBufferIn& buffer = *(it->second); + buffer >> type_int >> isCurvilinear >> indGlob_[it->first]; + type.setValue((type_attr::t_enum)type_int); // probleme des type enum avec les buffers : ToFix + } + int nbIndGlob = 0; + for (i = 0; i < nbReceived; ++i) { - CArray value ; - gathererConnector_->transfer(event, value, 0.); - lonvalue_2d.resize(ni,nj) ; - if (lonvalue_2d.numElements()>0) lonvalue_2d=CArray(value.dataFirst(),shape(ni,nj),neverDeleteData) ; + nbIndGlob += indGlob_[recvClientRanks_[i]].numElements(); } - else if (type=="lat") + + globalLocalIndexMap_.rehash(std::ceil(nbIndGlob/globalLocalIndexMap_.max_load_factor())); + i_index.resize(nbIndGlob); + j_index.resize(nbIndGlob); + int nbIndexGlobMax = nbIndGlob, nbIndLoc; + + nbIndGlob = 0; + for (i = 0; i < nbReceived; ++i) { - CArray value ; - gathererConnector_->transfer(event, value, 0.); - latvalue_2d.resize(ni,nj) ; - if (latvalue_2d.numElements()>0) latvalue_2d=CArray(value.dataFirst(),shape(ni,nj),neverDeleteData) ; + CArray& tmp = indGlob_[recvClientRanks_[i]]; + for (ind = 0; ind < tmp.numElements(); ++ind) + { + index = tmp(ind); + if (0 == globalLocalIndexMap_.count(index)) + { + iIndex = (index%ni_glo)-ibegin; + iIndex = (iIndex < 0) ? 0 : iIndex; + jIndex = (index/ni_glo)-jbegin; + jIndex = (jIndex < 0) ? 0 : jIndex; + nbIndLoc = iIndex + ni * jIndex; + i_index(nbIndGlob) = index % ni_glo; + j_index(nbIndGlob) = index / ni_glo; + globalLocalIndexMap_[index] = nbIndGlob; + ++nbIndGlob; + } + } + } + + if (nbIndGlob==0) + { + i_index.resize(nbIndGlob); + j_index.resize(nbIndGlob); } - else if (type=="boundslon") + else { - CArray value ; - gathererConnector_->transfer(event, nvertex, value, 0.); - bounds_lon_2d.resize(nvertex,ni,nj) ; - if (bounds_lon_2d.numElements()>0) bounds_lon_2d=CArray(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ; + i_index.resizeAndPreserve(nbIndGlob); + j_index.resizeAndPreserve(nbIndGlob); } - else if (type=="boundslat") + + domainMask.resize(0); // Mask is not defined anymore on servers + } + CATCH + + /*! + Receive attributes event from clients(s) + \param[in] event event contain info about rank and associated attributes + */ + void CDomain::recvDistributionAttributes(CEventServer& event) + TRY + { + CBufferIn* buffer=event.subEvents.begin()->buffer; + string domainId ; + *buffer>>domainId ; + get(domainId)->recvDistributionAttributes(*buffer); + } + CATCH + + /*! + Receive attributes from client(s) + \param[in] rank rank of client source + \param[in] buffer message containing attributes info + */ + void CDomain::recvDistributionAttributes(CBufferIn& buffer) + TRY + { + int ni_tmp, ibegin_tmp, nj_tmp, jbegin_tmp; + int ni_glo_tmp, nj_glo_tmp; + buffer >> isUnstructed_ >> ni_tmp >> ibegin_tmp >> nj_tmp >> jbegin_tmp + >> ni_glo_tmp >> nj_glo_tmp + >> isCompressible_; + + ni.setValue(ni_tmp); + ibegin.setValue(ibegin_tmp); + nj.setValue(nj_tmp); + jbegin.setValue(jbegin_tmp); + ni_glo.setValue(ni_glo_tmp); + nj_glo.setValue(nj_glo_tmp); + + } + CATCH_DUMP_ATTR + /*! + Receive longitude event from clients(s) + \param[in] event event contain info about rank and associated longitude + */ + void CDomain::recvLon(CEventServer& event) + TRY + { + string domainId; + std::map rankBuffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + CBufferIn* buffer = it->buffer; + *buffer >> domainId; + rankBuffers[it->rank] = buffer; + } + get(domainId)->recvLon(rankBuffers); + } + CATCH + + /*! + Receive longitude information from client(s) + \param[in] rankBuffers rank of sending client and the corresponding receive buffer + */ + void CDomain::recvLon(std::map& rankBuffers) + TRY + { + int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd; + if (nbReceived != recvClientRanks_.size()) + ERROR("void CDomain::recvLon(std::map& rankBuffers)", + << "The number of sending clients is not correct." + << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived); + + vector > recvLonValue(nbReceived); + vector > recvBoundsLonValue(nbReceived); + for (i = 0; i < recvClientRanks_.size(); ++i) { - CArray value ; - gathererConnector_->transfer(event, nvertex, value, 0.); - bounds_lat_2d.resize(nvertex,ni,nj) ; - if (bounds_lat_2d.numElements()>0) bounds_lat_2d=CArray(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ; + int rank = recvClientRanks_[i]; + CBufferIn& buffer = *(rankBuffers[rank]); + buffer >> hasLonLat; + if (hasLonLat) + buffer >> recvLonValue[i]; + buffer >> hasBounds; + if (hasBounds) + buffer >> recvBoundsLonValue[i]; } - else if (type=="area") + + if (hasLonLat) { - CArray value ; - gathererConnector_->transfer(event, value, 0.); - area.resize(ni,nj) ; - if (area.numElements()>0) area=CArray(value.dataFirst(),shape(ni,nj),neverDeleteData) ; + int nbLonInd = 0; + for (i = 0; i < nbReceived; ++i) + { + nbLonInd += recvLonValue[i].numElements(); + } + + if (nbLonInd != globalLocalIndexMap_.size()) + info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes " + << "something must be wrong with longitude index "<< std::endl; + + nbLonInd = globalLocalIndexMap_.size(); + lonvalue.resize(nbLonInd); + if (hasBounds) + { + bounds_lonvalue.resize(nvertex,nbLonInd); + bounds_lonvalue = 0.; + } + + nbLonInd = 0; + for (i = 0; i < nbReceived; ++i) + { + CArray& tmpInd = indGlob_[recvClientRanks_[i]]; + CArray& tmp = recvLonValue[i]; + for (ind = 0; ind < tmp.numElements(); ++ind) + { + lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; + lonvalue(lInd) = tmp(ind); + if (hasBounds) + { + for (int nv = 0; nv < nvertex; ++nv) + bounds_lonvalue(nv, lInd) = recvBoundsLonValue[i](nv, ind); + } + } + } } } + CATCH_DUMP_ATTR + + /*! + Receive latitude event from clients(s) + \param[in] event event contain info about rank and associated latitude + */ + void CDomain::recvLat(CEventServer& event) + TRY + { + string domainId; + std::map rankBuffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + CBufferIn* buffer = it->buffer; + *buffer >> domainId; + rankBuffers[it->rank] = buffer; + } + get(domainId)->recvLat(rankBuffers); + } CATCH - - bool CDomain::dispatchEvent(CEventServer& event) + + /*! + Receive latitude information from client(s) + \param[in] rankBuffers rank of sending client and the corresponding receive buffer + */ + void CDomain::recvLat(std::map& rankBuffers) TRY { - if (SuperClass::dispatchEvent(event)) return true; - else + int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd; + if (nbReceived != recvClientRanks_.size()) + ERROR("void CDomain::recvLat(std::map& rankBuffers)", + << "The number of sending clients is not correct." + << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived); + + vector > recvLatValue(nbReceived); + vector > recvBoundsLatValue(nbReceived); + for (i = 0; i < recvClientRanks_.size(); ++i) { - switch(event.type) + int rank = recvClientRanks_[i]; + CBufferIn& buffer = *(rankBuffers[rank]); + buffer >> hasLonLat; + if (hasLonLat) + buffer >> recvLatValue[i]; + buffer >> hasBounds; + if (hasBounds) + buffer >> recvBoundsLatValue[i]; + } + + if (hasLonLat) + { + int nbLatInd = 0; + for (i = 0; i < nbReceived; ++i) { - case EVENT_ID_DOMAIN_DISTRIBUTION: - recvDomainDistribution(event); - return true; - break; - case EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE: - recvDistributedAttributes(event); - return true; - break; - default: - ERROR("bool CDomain::dispatchEvent(CEventServer& event)", - << "Unknown Event"); - return false; - } + nbLatInd += recvLatValue[i].numElements(); + } + + if (nbLatInd != globalLocalIndexMap_.size()) + info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes " + << "something must be wrong with latitude index "<< std::endl; + + nbLatInd = globalLocalIndexMap_.size(); + latvalue.resize(nbLatInd); + if (hasBounds) + { + bounds_latvalue.resize(nvertex,nbLatInd); + bounds_latvalue = 0. ; + } + + nbLatInd = 0; + for (i = 0; i < nbReceived; ++i) + { + CArray& tmpInd = indGlob_[recvClientRanks_[i]]; + CArray& tmp = recvLatValue[i]; + for (ind = 0; ind < tmp.numElements(); ++ind) + { + lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; + latvalue(lInd) = tmp(ind); + if (hasBounds) + { + CArray& boundslat = recvBoundsLatValue[i]; + for (int nv = 0; nv < nvertex; ++nv) + bounds_latvalue(nv, lInd) = boundslat(nv, ind); + } + ++nbLatInd; + } + } + } + } + CATCH_DUMP_ATTR + + /*! + Receive area event from clients(s) + \param[in] event event contain info about rank and associated area + */ + void CDomain::recvArea(CEventServer& event) + TRY + { + string domainId; + std::map rankBuffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + CBufferIn* buffer = it->buffer; + *buffer >> domainId; + rankBuffers[it->rank] = buffer; } + get(domainId)->recvArea(rankBuffers); } CATCH - + /*! + Receive area information from client(s) + \param[in] rankBuffers rank of sending client and the corresponding receive buffer + */ + void CDomain::recvArea(std::map& rankBuffers) + TRY + { + int nbReceived = rankBuffers.size(), i, ind, index, lInd; + if (nbReceived != recvClientRanks_.size()) + ERROR("void CDomain::recvArea(std::map& rankBuffers)", + << "The number of sending clients is not correct." + << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived); + + vector > recvAreaValue(nbReceived); + for (i = 0; i < recvClientRanks_.size(); ++i) + { + int rank = recvClientRanks_[i]; + CBufferIn& buffer = *(rankBuffers[rank]); + buffer >> hasArea; + if (hasArea) + buffer >> recvAreaValue[i]; + } + + if (hasArea) + { + int nbAreaInd = 0; + for (i = 0; i < nbReceived; ++i) + { + nbAreaInd += recvAreaValue[i].numElements(); + } + + if (nbAreaInd != globalLocalIndexMap_.size()) + info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes " + << "something must be wrong with area index "<< std::endl; + + nbAreaInd = globalLocalIndexMap_.size(); + areavalue.resize(nbAreaInd); + nbAreaInd = 0; + for (i = 0; i < nbReceived; ++i) + { + CArray& tmpInd = indGlob_[recvClientRanks_[i]]; + CArray& tmp = recvAreaValue[i]; + for (ind = 0; ind < tmp.numElements(); ++ind) + { + lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; + areavalue(lInd) = tmp(ind); + } + } + + } + } + CATCH_DUMP_ATTR + /*! Compare two domain objects. They are equal if only if they have identical attributes as well as their values. @@ -2333,43 +3034,114 @@ namespace xios { } CATCH_DUMP_ATTR -///////////////////////////////////////////////////////////////////////// -/////////////// TRANSFORMATIONS ////////// -///////////////////////////////////////////////////////////////////////// - - std::map CDomain::transformationMapList_ = std::map(); - bool CDomain::dummyTransformationMapList_ = CDomain::initializeTransformationMap(CDomain::transformationMapList_); - - bool CDomain::initializeTransformationMap(std::map& m) + /*! + Receive data index event from clients(s) + \param[in] event event contain info about rank and associated index + */ + void CDomain::recvDataIndex(CEventServer& event) TRY { - m["zoom_domain"] = TRANS_ZOOM_DOMAIN; - m["interpolate_domain"] = TRANS_INTERPOLATE_DOMAIN; - m["generate_rectilinear_domain"] = TRANS_GENERATE_RECTILINEAR_DOMAIN; - m["compute_connectivity_domain"] = TRANS_COMPUTE_CONNECTIVITY_DOMAIN; - m["expand_domain"] = TRANS_EXPAND_DOMAIN; - m["reorder_domain"] = TRANS_REORDER_DOMAIN; - m["extract_domain"] = TRANS_EXTRACT_DOMAIN; - return true; + string domainId; + std::map rankBuffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + CBufferIn* buffer = it->buffer; + *buffer >> domainId; + rankBuffers[it->rank] = buffer; + } + get(domainId)->recvDataIndex(rankBuffers); } CATCH + /*! + Receive data index information from client(s) + A client receives data index from different clients to rebuild its own data index. + Because we use global index + mask info to calculate the sending data to client(s), + this data index must be updated with mask info (maybe it will change in the future) + Because the data index is local, to rebuild data index of received client, we should use global index along with. - CTransformation* CDomain::addTransformation(ETranformationType transType, const StdString& id) + \param[in] rankBuffers rank of sending client and the corresponding receive buffer + */ + void CDomain::recvDataIndex(std::map& rankBuffers) TRY { - transformationMap_.push_back(std::make_pair(transType, CTransformation::createTransformation(transType,id))); - return transformationMap_.back().second; + int nbReceived = rankBuffers.size(), i, ind, index, indexI, indexJ, type_int, lInd; + if (nbReceived != recvClientRanks_.size()) + ERROR("void CDomain::recvDataIndex(std::map& rankBuffers)", + << "The number of sending clients is not correct." + << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived); + + vector > recvDataIIndex(nbReceived),recvDataJIndex(nbReceived); + for (i = 0; i < recvClientRanks_.size(); ++i) + { + int rank = recvClientRanks_[i]; + CBufferIn& buffer = *(rankBuffers[rank]); + buffer >> recvDataIIndex[i]; + buffer >> recvDataJIndex[i]; + } + + int nbIndex = i_index.numElements(); + CArray dataIIndex(nbIndex), dataJIndex(nbIndex); + dataIIndex = -1; dataJIndex = -1; + + nbIndex = 0; + for (i = 0; i < nbReceived; ++i) + { + CArray& tmpInd = indGlob_[recvClientRanks_[i]]; + CArray& tmpI = recvDataIIndex[i]; + CArray& tmpJ = recvDataJIndex[i]; + if ((tmpI.numElements() != tmpInd.numElements()) || (tmpJ.numElements() != tmpInd.numElements())) + ERROR("void CDomain::recvDataIndex(std::map& rankBuffers)", + << "The number of global received index is not coherent with the number of received data index." + << "Expected number of global index: " << tmpI.numElements() << " but received " << tmpInd.numElements()); + + for (ind = 0; ind < tmpI.numElements(); ++ind) + { + lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; + dataIIndex(lInd) = (-1 == dataIIndex(lInd)) ? tmpI(ind) : dataIIndex(lInd); // Only fill in dataIndex if there is no data + dataJIndex(lInd) = (-1 == dataJIndex(lInd)) ? tmpJ(ind) : dataJIndex(lInd); + } + } + + int nbCompressedData = 0; + for (ind = 0; ind < dataIIndex.numElements(); ++ind) + { + indexI = dataIIndex(ind); indexJ = dataJIndex(ind); + if ((0 <= indexI) && (0 <= indexJ)) + ++nbCompressedData; + } + + data_i_index.resize(nbCompressedData); + data_j_index.resize(nbCompressedData); + + nbCompressedData = 0; + for (ind = 0; ind < dataIIndex.numElements(); ++ind) + { + indexI = dataIIndex(ind); indexJ = dataJIndex(ind); + if ((0 <= indexI) && (0 <= indexJ)) + { + data_i_index(nbCompressedData) = (1 == data_dim) ? ind : ind % ni; + data_j_index(nbCompressedData) = (1 == data_dim) ? 0 : ind / ni; + ++nbCompressedData; + } + } + + // Reset data_ibegin, data_jbegin + data_ibegin.setValue(0); + data_jbegin.setValue(0); } CATCH_DUMP_ATTR - CTransformation* CDomain::addTransformation(ETranformationType transType, CTransformation* transformation) + CTransformation* CDomain::addTransformation(ETranformationType transType, const StdString& id) TRY { - transformationMap_.push_back(std::make_pair(transType, transformation)); + transformationMap_.push_back(std::make_pair(transType, CTransformation::createTransformation(transType,id))); return transformationMap_.back().second; } CATCH_DUMP_ATTR + /*! Check whether a domain has transformation \return true if domain has transformation @@ -2412,11 +3184,11 @@ namespace xios { } } CATCH_DUMP_ATTR - + /*! * Go through the hierarchy to find the domain from which the transformations must be inherited */ - void CDomain::solveInheritanceTransformation_old() + void CDomain::solveInheritanceTransformation() TRY { if (hasTransformation() || !hasDirectDomainReference()) @@ -2436,72 +3208,6 @@ namespace xios { } CATCH_DUMP_ATTR - - void CDomain::solveInheritanceTransformation() - TRY - { - if (solveInheritanceTransformation_done_) return; - else solveInheritanceTransformation_done_=true ; - - CDomain* domain = this; - CDomain* Lastdomain ; - std::list refDomains; - bool out=false ; - vector excludedAttr; - excludedAttr.push_back("domain_ref"); - - refDomains.push_front(domain) ; - while (domain->hasDirectDomainReference() && !out) - { - CDomain* lastDomain=domain ; - domain = domain->getDirectDomainReference(); - domain->solveRefInheritance() ; - if (!domain->SuperClass::isEqual(lastDomain,excludedAttr)) out=true ; - refDomains.push_front(domain) ; - } - - CTransformationPaths::TPath path ; - auto& pathList = std::get<2>(path) ; - std::get<0>(path) = EElement::DOMAIN ; - std::get<1>(path) = refDomains.front()->getId() ; - for (auto& domain : refDomains) - { - CDomain::TransMapTypes transformations = domain->getAllTransformations(); - for(auto& transformation : transformations) pathList.push_back({transformation.second->getTransformationType(), - transformation.second->getId()}) ; - } - transformationPaths_.addPath(path) ; - - } - CATCH_DUMP_ATTR - - - bool CDomain::activateFieldWorkflow(CGarbageCollector& gc) - TRY - { - if (!domain_ref.isEmpty()) - { - CField* field=getFieldFromId(domain_ref) ; - if (field!=nullptr) - { - bool ret = field->buildWorkflowGraph(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state - } - else - { - CDomain* domain = get(domain_ref) ; - bool ret = domain->activateFieldWorkflow(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state - domain_ref=domain->getId() ; // replace domain_ref by solved reference - } - } - activateFieldWorkflow_done_=true ; - return true ; - } - CATCH_DUMP_ATTR -///////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////// - void CDomain::setContextClient(CContextClient* contextClient) TRY { diff --git a/xios_2311_src/src/node/domain.hpp b/xios_2311_src/src/node/domain.hpp index 876def71..61bfa3c7 100644 --- a/xios_2311_src/src/node/domain.hpp +++ b/xios_2311_src/src/node/domain.hpp @@ -15,19 +15,10 @@ #include "attribute_enum.hpp" #include "transformation.hpp" #include "transformation_enum.hpp" -#include "transformation_path.hpp" #include "server_distribution_description.hpp" #include "mesh.hpp" -#include "element.hpp" -#include "local_connector.hpp" -#include "scatterer_connector.hpp" -#include "gatherer_connector.hpp" -#include "distribution_type.hpp" -#include "generic_algorithm_transformation.hpp" - -namespace xios -{ +namespace xios { /// ////////////////////// Déclarations ////////////////////// /// @@ -35,7 +26,6 @@ namespace xios class CDomainAttributes; class CDomain; class CFile; - class CField ; ///-------------------------------------------------------------- @@ -57,26 +47,25 @@ namespace xios public: enum EEventId { - EVENT_ID_DOMAIN_DISTRIBUTION, EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE + EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT, + EVENT_ID_AREA, + EVENT_ID_DATA_INDEX, EVENT_ID_SERVER_ATTRIBUT } ; public: typedef CDomainAttributes RelAttributes; typedef CDomainGroup RelGroup; - + typedef CTransformation::TransformationMapTypes TransMapTypes; + /// Constructeurs /// CDomain(void); explicit CDomain(const StdString & id); CDomain(const CDomain & domain); // Not implemented yet. CDomain(const CDomain * const domain); // Not implemented yet. - static void releaseStaticAllocation(void) ; // release static allocation on heap static CDomain* createDomain(); - static CDomain* get(const string& id, bool noError=false) ; //::TransformationMapTypes TransMapTypes; - private: - static bool initializeTransformationMap(std::map& m); - static std::map transformationMapList_; - static bool dummyTransformationMapList_; - TransMapTypes transformationMap_; - - public: - CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); - CTransformation* addTransformation(ETranformationType transType, CTransformation* transformation) ; - void setTransformations(const TransMapTypes&); - void duplicateTransformation(CDomain*); - TransMapTypes getAllTransformations(); - bool hasTransformation(); - void solveInheritanceTransformation_old(); // to remove later - void solveInheritanceTransformation(); - private: - bool solveInheritanceTransformation_done_= false ; - public: - bool activateFieldWorkflow(CGarbageCollector& gc) ; - private: - bool activateFieldWorkflow_done_=false ; - - private: - shared_ptr transformationAlgorithm_ = nullptr ; - public: - void setTransformationAlgorithm(shared_ptr transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;} - shared_ptr getTransformationAlgorithm(void) { return transformationAlgorithm_ ;} - private: - CTransformationPaths transformationPaths_ ; - public: - CTransformationPaths getTransformationPaths(void) {return transformationPaths_;} - void setTransformationPaths(const CTransformationPaths& transformationPaths) { transformationPaths_=transformationPaths ;} - - //////////////////////////// + void sendCheckedAttributes(); + bool hasTransformation(); + void solveInheritanceTransformation(); + TransMapTypes getAllTransformations(); void redistribute(int nbLocalDomain); + void duplicateTransformation(CDomain*); + CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); public: const std::set & getRelFiles(void) const; bool IsWritten(const StdString & filename) const; bool isWrittenCompressed(const StdString& filename) const; + int getNumberWrittenIndexes(MPI_Comm writtenCom); + int getTotalNumberWrittenIndexes(MPI_Comm writtenCom); + int getOffsetWrittenIndexes(MPI_Comm writtenCom); + CArray& getCompressedIndexToWriteOnServer(MPI_Comm writtenCom); + std::map getAttributesBufferSize(CContextClient* client, bool bufferForWriting = false); bool isEmpty(void) const; bool isDistributed(void) const; + bool isCompressible(void) const; + + bool isTiled(void) const; + bool isTiledOnly(void) const; + int getTileId(int i, int j) const; + int getTileDataISize(int tileId) const; + int getTileDataJSize(int tileId) const; + void computeCompressionTiled(CArray& dataIndexI, CArray& dataIndexJ, + CArray& infoIndexI, CArray& infoIndexJ); - public : - /*! - \brief return if the domain can be written or not in a compressed way. - ie if there are some masked or indexed point on the domain. Valid only on server side. - \return true if domain can be writtedn in a compressed way - */ - bool isCompressible(void) { if (!isCompressibleComputed_) computeIsCompressible() ; return isCompressible_ ;} - private : - bool isCompressible_ ; /** specify if the domain can be written in a compressed way */ - bool isCompressibleComputed_=false ; /** Indicate if compressability has been computed*/ - void computeIsCompressible() ; - - public : + std::vector getNbGlob(); bool isEqual(CDomain* domain); static bool dispatchEvent(CEventServer& event); - - private: - /** define if the domain is completed or not ie all attributes have been received before in case - of grid reading from file or coupling */ - bool isCompleted_=true ; - public: - /*! - \brief Check if a domain is completed - Before make any domain processing, we must be sure that all domain informations have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling). So all direct reference of the domain (domain_ref) must be also completed - \return true if domain and domain reference are completed - */ - bool isCompleted(void) - { - if (hasDirectDomainReference()) if (!getDirectDomainReference()->isCompleted()) return false; - else return isCompleted_ ; - - MISSING_RETURN( "bool CDomain::isCompleted() " ); - return true; - } - void setCompleted(void) { isCompleted_=true ; } - void unsetCompleted(void) { isCompleted_=false ; } public: /// Mutateur /// void addRelFile(const StdString & filename); void addRelFileCompressed(const StdString& filename); + void computeWrittenIndex(); + void computeWrittenCompressedIndex(MPI_Comm); + void AllgatherRectilinearLonLat(CArray& lon, CArray& lat, CArray& lon_g, CArray& lat_g); @@ -193,6 +132,7 @@ namespace xios CArray& boundsLon, CArray& boundsLat); void fillInLonLat(); + void initLonLatValue(); bool distributionAttributesHaveValue() const; size_t getGlobalWrittenSize() ; @@ -210,6 +150,7 @@ namespace xios CArray bounds_lonvalue, bounds_latvalue; CArray areavalue; + CArray localIndexToWriteOnServer; CArray domainMask; // mask_1d, mask_2d -> domainMask CArray localMask; // domainMask + indexing @@ -224,10 +165,6 @@ namespace xios bool hasBoundsLonInReadFile_ ; // specify if longitude boundaries are defined on read file, so it can be read later when grid distribution will be defined void computeLocalMask(void) ; - - /** The number of server of a context client. Avoid to re-compute indice computed in a previous computeConnectedClient */ - private: std::set listNbServer_ ; - private: void checkDomain(void); void checkLocalIDomain(void); @@ -240,115 +177,76 @@ namespace xios void checkBounds(void); void checkArea(void); void checkLonLat(); - - public: - void sendDomainToFileServer(CContextClient* client) ; - private: - std::set sendDomainToFileServer_done_ ; - public: - void sendDomainToCouplerOut(CContextClient* client, const string& fieldId, int posInGrid) ; - private: - std::set sendDomainToCouplerOut_done_ ; - - public: - void makeAliasForCoupling(const string& fieldId, int posInGrid) ; - string getCouplingAlias(const string& fieldId, int posInGrid) ; - private: - + void checkTiles(); + + void setTransformations(const TransMapTypes&); + void computeNGlobDomain(); + void sendAttributes(); + void sendIndex(); + void sendDistributionAttributes(); + void sendArea(); + void sendLonLat(); + void sendDataIndex(); void convertLonLatValue(); void fillInRectilinearLonLat(); void fillInCurvilinearLonLat(); void fillInUnstructuredLonLat(); - void completeLonLatClient(void); - + static void recvDistributionAttributes(CEventServer& event); + static void recvIndex(CEventServer& event); + static void recvLon(CEventServer& event); + static void recvLat(CEventServer& event); + static void recvArea(CEventServer& event); + static void recvDataIndex(CEventServer& event); + void recvDistributionAttributes(CBufferIn& buffer); + void recvIndex(std::map& rankBuffers); + void recvLon(std::map& rankBuffers); + void recvLat(std::map& rankBuffers); + void recvArea(std::map& rankBuffers); + void recvDataIndex(std::map& rankBuffers); + + void completeLonLatClient(void); + void computeConnectedClients(); + private: /** Clients that have to send a domain. There can be multiple clients in case of secondary server, otherwise only one client. */ std::list clients; std::set clientsSet; - bool isChecked ; + bool isChecked, computedWrittenIndex_; std::set relFiles, relFilesCompressed; + bool isClientChecked; // Verify whether all attributes of domain on the client side are good + bool isClientAfterTransformationChecked; + std::map > indGlob_; + std::map > nbSenders; // Mapping of number of communicating client to a server -/** only on client side : Global index of each client sent to server: map> - indSrv_[nbServers] --> first map is related to the server distribution (ie associated with the contextClient) - indSrv_[nbServers][server_rank] -> array of global index sent to the server of rank "server_rank" - indSrv_[nbServers][server_rank](ind) --> global index on server of the local element "ind" sent (for lon, lat, mask, etc...) -*/ +/** Global index of each client sent to server: map> */ std::map > > indSrv_; - + // std::map > > indWrittenSrv_; // Global written index of each client sent to server + std::vector indexesToWrite; + std::vector recvClientRanks_; + std::map numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_; + std::map > compressedIndexToWriteOnServer; + std::map > connectedDataSize_; std::map > connectedServerRank_; +//! True if and only if the data defined on the domain can be outputted in a compressed way + bool isCompressible_; bool isRedistributed_; + TransMapTypes transformationMap_; bool isUnstructed_; + std::unordered_map globalLocalIndexMap_; - - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - private: - shared_ptr localElement_ = nullptr ; - void initializeLocalElement(void) ; - - public: - shared_ptr getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } - shared_ptr getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} - - private: - void addFullView(void) ; - void addWorkflowView(void) ; - void addModelView(void) ; - - private: - shared_ptr modelToWorkflowConnector_ ; - void computeModelToWorkflowConnector(void) ; - public: - shared_ptr getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} - - public: - void computeRemoteElement(CContextClient* client, EDistributionType) ; - void distributeToServer(CContextClient* client, std::map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr &scattererConnector, const string& domainId="") ; - - static void recvDomainDistribution(CEventServer& event) ; - void receivedDomainDistribution(CEventServer& event, int phasis) ; - - void sendDistributedAttributes(CContextClient* client, shared_ptr scaterrerConnector, const string& domainId) ; - static void recvDistributedAttributes(CEventServer& event) ; - void recvDistributedAttributes(CEventServer& event, const string& type) ; - void setServerMask(CArray& serverMask, CContextClient* client) ; - - private: - map> remoteElement_ ; - public: - shared_ptr getRemoteElement(CContextClient* client) {return remoteElement_[client] ;} - private: - map> clientToServerConnector_ ; - public: - shared_ptr getClientToServerConnector(CContextClient* client) { return clientToServerConnector_[client] ;} - - private: - shared_ptr gathererConnector_ ; - public: - shared_ptr getGathererConnector(void) { return gathererConnector_ ;} - private: - shared_ptr serverFromClientConnector_ ; - shared_ptr elementFrom_ ; - public: - shared_ptr getServerFromClientConnector(void) { return serverFromClientConnector_ ;} +//! True if tiled data is defined on the domain + bool isTiled_; +//! True if ONLY tiled data is defined on the domain + bool isTiledOnly_; private: - shared_ptr serverToClientConnector_ = nullptr ; - shared_ptr elementTo_ ; - public: - shared_ptr getServerToClientConnector(void) { return serverToClientConnector_ ;} - - private: - map> clientFromServerConnector_ ; - public: - shared_ptr getClientFromServerConnector(CContextClient* client) { return clientFromServerConnector_[client] ;} - + static bool initializeTransformationMap(std::map& m); + static std::map transformationMapList_; + static bool _dummyTransformationMapList; DECLARE_REF_FUNC(Domain,domain) diff --git a/xios_2311_src/src/node/duplicate_scalar_to_axis.cpp b/xios_2311_src/src/node/duplicate_scalar_to_axis.cpp index a949f252..f3fa0edf 100644 --- a/xios_2311_src/src/node/duplicate_scalar_to_axis.cpp +++ b/xios_2311_src/src/node/duplicate_scalar_to_axis.cpp @@ -1,5 +1,4 @@ #include "duplicate_scalar_to_axis.hpp" -#include "axis_algorithm_duplicate_scalar.hpp" #include "type.hpp" #include "axis.hpp" #include "scalar.hpp" @@ -28,7 +27,7 @@ namespace xios { bool CDuplicateScalarToAxis::registerTrans() { - return registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, CDuplicateScalarToAxis::create); } bool CDuplicateScalarToAxis::_dummyRegistered = CDuplicateScalarToAxis::registerTrans(); @@ -43,19 +42,5 @@ namespace xios { { } - - shared_ptr CDuplicateScalarToAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmDuplicateScalar::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } + } diff --git a/xios_2311_src/src/node/duplicate_scalar_to_axis.hpp b/xios_2311_src/src/node/duplicate_scalar_to_axis.hpp index b2acab58..6b4a9092 100644 --- a/xios_2311_src/src/node/duplicate_scalar_to_axis.hpp +++ b/xios_2311_src/src/node/duplicate_scalar_to_axis.hpp @@ -19,8 +19,6 @@ namespace xios { class CDuplicateScalarToAxis; class CAxis; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; ///-------------------------------------------------------------- @@ -42,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CDuplicateScalarToAxisAttributes SuperClassAttribute; - typedef CDuplicateScalarToAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -59,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_DUPLICATE_SCALAR_TO_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/element_type.hpp b/xios_2311_src/src/node/element_type.hpp deleted file mode 100755 index 3d9b9fa4..00000000 --- a/xios_2311_src/src/node/element_type.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __XIOS_ELEMENT_TYPE_HPP__ -#define __XIOS_ELEMENT_TYPE_HPP__ - -namespace xios -{ - enum class EElement { DOMAIN, AXIS, SCALAR} ; -} - -#endif // __XIOS_ELEMENT_TYPE_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/node/expand_domain.cpp b/xios_2311_src/src/node/expand_domain.cpp index 14b6c901..c3fdafe6 100644 --- a/xios_2311_src/src/node/expand_domain.cpp +++ b/xios_2311_src/src/node/expand_domain.cpp @@ -1,5 +1,4 @@ #include "expand_domain.hpp" -#include "domain_algorithm_expand.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CExpandDomain::_dummyRegistered = CExpandDomain::registerTrans(); bool CExpandDomain::registerTrans() { - return registerTransformation(TRANS_EXPAND_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_EXPAND_DOMAIN, CExpandDomain::create); } //---------------------------------------------------------------- @@ -47,19 +46,5 @@ namespace xios { if (this->type.isEmpty()) this->type.setValue(CExpandDomain::type_attr::edge); } - - shared_ptr CExpandDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmExpand::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } + } diff --git a/xios_2311_src/src/node/expand_domain.hpp b/xios_2311_src/src/node/expand_domain.hpp index 5bbf359f..bc8f8166 100644 --- a/xios_2311_src/src/node/expand_domain.hpp +++ b/xios_2311_src/src/node/expand_domain.hpp @@ -19,8 +19,6 @@ namespace xios { class CExpandDomainAttributes; class CExpandDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; ///-------------------------------------------------------------- @@ -42,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CExpandDomainAttributes SuperClassAttribute; - typedef CExpandDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -59,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_EXPAND_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/extract_axis.cpp b/xios_2311_src/src/node/extract_axis.cpp index 3e205aa2..8dce4abb 100644 --- a/xios_2311_src/src/node/extract_axis.cpp +++ b/xios_2311_src/src/node/extract_axis.cpp @@ -1,5 +1,4 @@ #include "extract_axis.hpp" -#include "axis_algorithm_extract.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CExtractAxis::registerTrans() { - return registerTransformation(TRANS_EXTRACT_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_EXTRACT_AXIS, CExtractAxis::create); } bool CExtractAxis::_dummyRegistered = CExtractAxis::registerTrans(); @@ -77,18 +76,4 @@ namespace xios { } - shared_ptr CExtractAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmExtract::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/extract_axis.hpp b/xios_2311_src/src/node/extract_axis.hpp index e8c816ee..b013bb90 100644 --- a/xios_2311_src/src/node/extract_axis.hpp +++ b/xios_2311_src/src/node/extract_axis.hpp @@ -19,8 +19,7 @@ namespace xios { class CExtractAxisAttributes; class CExtractAxis; class CAxis; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CExtractAxisAttributes SuperClassAttribute; - typedef CExtractAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_EXTRACT_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/extract_axis_to_scalar.cpp b/xios_2311_src/src/node/extract_axis_to_scalar.cpp index 2d297a89..d99be46a 100644 --- a/xios_2311_src/src/node/extract_axis_to_scalar.cpp +++ b/xios_2311_src/src/node/extract_axis_to_scalar.cpp @@ -1,6 +1,4 @@ #include "extract_axis_to_scalar.hpp" -#include "scalar_algorithm_extract_axis.hpp" - #include "type.hpp" #include "axis.hpp" #include "scalar.hpp" @@ -29,7 +27,7 @@ namespace xios { bool CExtractAxisToScalar::registerTrans() { - return registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, {create, getTransformation}); + return registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, CExtractAxisToScalar::create); } bool CExtractAxisToScalar::_dummyRegistered = CExtractAxisToScalar::registerTrans(); @@ -58,18 +56,4 @@ namespace xios { << "CScalar destination " << scalarDst->getId() << std::endl); } - shared_ptr CExtractAxisToScalar::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CScalarAlgorithmExtractAxis::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } } diff --git a/xios_2311_src/src/node/extract_axis_to_scalar.hpp b/xios_2311_src/src/node/extract_axis_to_scalar.hpp index b68cc6e7..a19ccab8 100644 --- a/xios_2311_src/src/node/extract_axis_to_scalar.hpp +++ b/xios_2311_src/src/node/extract_axis_to_scalar.hpp @@ -19,8 +19,7 @@ namespace xios { class CExtractAxisToScalar; class CAxis; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CExtractAxisToScalarAttributes SuperClassAttribute; - typedef CExtractAxisToScalar MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_EXTRACT_AXIS_TO_SCALAR ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/extract_domain.cpp b/xios_2311_src/src/node/extract_domain.cpp index 818e3bce..bca3dcbd 100644 --- a/xios_2311_src/src/node/extract_domain.cpp +++ b/xios_2311_src/src/node/extract_domain.cpp @@ -1,5 +1,4 @@ #include "extract_domain.hpp" -#include "domain_algorithm_extract.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CExtractDomain::_dummyRegistered = CExtractDomain::registerTrans(); bool CExtractDomain::registerTrans() { - return registerTransformation(TRANS_EXTRACT_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_EXTRACT_DOMAIN, CExtractDomain::create); } //---------------------------------------------------------------- @@ -72,18 +71,4 @@ namespace xios { } } - shared_ptr CExtractDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmExtract::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/extract_domain.hpp b/xios_2311_src/src/node/extract_domain.hpp index ae8fcdcb..176bb062 100644 --- a/xios_2311_src/src/node/extract_domain.hpp +++ b/xios_2311_src/src/node/extract_domain.hpp @@ -19,8 +19,7 @@ namespace xios { class CExtractDomainAttributes; class CExtractDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CExtractDomainAttributes SuperClassAttribute; - typedef CExtractDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,23 +55,10 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_EXTRACT_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; - private: + private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); - static bool _dummyRegistered; + static bool _dummyRegistered; }; // class CExtractDomain DECLARE_GROUP(CExtractDomain); diff --git a/xios_2311_src/src/node/extract_domain_to_axis.cpp b/xios_2311_src/src/node/extract_domain_to_axis.cpp index 24986806..f02f4029 100644 --- a/xios_2311_src/src/node/extract_domain_to_axis.cpp +++ b/xios_2311_src/src/node/extract_domain_to_axis.cpp @@ -1,5 +1,4 @@ #include "extract_domain_to_axis.hpp" -#include "axis_algorithm_extract_domain.hpp" #include "type.hpp" #include "axis.hpp" #include "domain.hpp" @@ -28,7 +27,7 @@ namespace xios { bool CExtractDomainToAxis::registerTrans() { - return registerTransformation(TRANS_EXTRACT_DOMAIN_TO_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_EXTRACT_DOMAIN_TO_AXIS, CExtractDomainToAxis::create); } bool CExtractDomainToAxis::_dummyRegistered = CExtractDomainToAxis::registerTrans(); @@ -47,6 +46,7 @@ namespace xios { << "Domain source " <getId() << std::endl << "Axis destination " << axisDst->getId()); + int axis_n_glo = axisDst->n_glo; int domain_ni_glo = domainSrc->ni_glo; int domain_nj_glo = domainSrc->nj_glo; @@ -65,6 +65,11 @@ namespace xios { switch (direction) { case direction_attr::jDir: + if (axis_n_glo != domain_nj_glo) + ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", + << "Extract domain along j, axis destination should have n_glo equal to nj_glo of domain source" + << "Domain source " <getId() << " has nj_glo " << domain_nj_glo << std::endl + << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); if ((position < 0) || (position >= domain_ni_glo)) ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "Extract domain along j, position should be inside 0 and ni_glo-1 of domain source" @@ -74,6 +79,11 @@ namespace xios { break; case direction_attr::iDir: + if (axis_n_glo != domain_ni_glo) + ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", + << "Extract domain along i, axis destination should have n_glo equal to ni_glo of domain source" + << "Domain source " <getId() << " has ni_glo " << domain_ni_glo << std::endl + << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); if ((position < 0) || (position >= domain_nj_glo)) ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "Extract domain along i, position should be inside 0 and nj_glo-1 of domain source" @@ -87,18 +97,4 @@ namespace xios { } } - shared_ptr CExtractDomainToAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmExtractDomain::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/extract_domain_to_axis.hpp b/xios_2311_src/src/node/extract_domain_to_axis.hpp index 80ae0801..e02dd92d 100644 --- a/xios_2311_src/src/node/extract_domain_to_axis.hpp +++ b/xios_2311_src/src/node/extract_domain_to_axis.hpp @@ -19,8 +19,7 @@ namespace xios { class CExtractDomainToAxis; class CAxis; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,9 +40,7 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CExtractDomainToAxisAttributes SuperClassAttribute; - typedef CExtractDomainToAxis MyClass ; - typedef CTransformation SuperTransform ; - + public : /// Constructeurs /// CExtractDomainToAxis(void); @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_EXTRACT_DOMAIN_TO_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/field.cpp b/xios_2311_src/src/node/field.cpp index 7b0e44da..324a598c 100755 --- a/xios_2311_src/src/node/field.cpp +++ b/xios_2311_src/src/node/field.cpp @@ -14,79 +14,98 @@ #include "context_server.hpp" #include #include "garbage_collector.hpp" +#include "source_filter.hpp" +#include "store_filter.hpp" +#include "file_writer_filter.hpp" #include "pass_through_filter.hpp" #include "filter_expr_node.hpp" #include "lex_parser.hpp" #include "temporal_filter.hpp" -#include "server_from_client_source_filter.hpp" -#include "file_reader_source_filter.hpp" -#include "tracer.hpp" -#include "graph_package.hpp" - -namespace xios -{ - - /// ////////////////////// Définitions ////////////////////// /// - - CField::CField(void) - : CObjectTemplate(), CFieldAttributes() - , written(false) - , hasOutputFile(false) - , domAxisScalarIds_(vector(3,"")) - , areAllReferenceSolved(false), isReferenceSolved(false), isReferenceSolvedAndTransformed(false) - , isGridChecked(false) - , useCompressedOutput(false) - , hasTimeInstant(false) - , hasTimeCentered(false) - , mustAutoTrigger(false) - { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } - - CField::CField(const StdString& id) - : CObjectTemplate(id), CFieldAttributes() - , written(false) - , hasOutputFile(false) - , domAxisScalarIds_(vector(3,"")) - , areAllReferenceSolved(false), isReferenceSolved(false), isReferenceSolvedAndTransformed(false) - , isGridChecked(false) - , useCompressedOutput(false) - , hasTimeInstant(false) - , hasTimeCentered(false) - , mustAutoTrigger(false) - { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } - - CField::~CField(void) - {} +#include "spatial_transform_filter.hpp" +#include "file_server_writer_filter.hpp" +#include "workflow_graph.hpp" + +#include "yacc_var.hpp" +namespace xios{ + + /// ////////////////////// Définitions ////////////////////// /// + + CField::CField(void) + : CObjectTemplate(), CFieldAttributes() + , grid(), file() + , written(false) + , nstep(0), nstepMax(0) + , hasOutputFile(false) + , domAxisScalarIds_(vector(3,"")) + , areAllReferenceSolved(false), isReferenceSolved(false), isReferenceSolvedAndTransformed(false) + , isGridChecked(false) + , useCompressedOutput(false) + , hasTimeInstant(false) + , hasTimeCentered(false) + , wasDataRequestedFromServer(false) + , wasDataAlreadyReceivedFromServer(false) + , mustAutoTrigger(false) + , isEOF(false), nstepMaxRead(false) + { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); + field_graph_start = -2; + field_graph_end = -2; + } + + CField::CField(const StdString& id) + : CObjectTemplate(id), CFieldAttributes() + , grid(), file() + , written(false) + , nstep(0), nstepMax(0) + , hasOutputFile(false) + , domAxisScalarIds_(vector(3,"")) + , areAllReferenceSolved(false), isReferenceSolved(false), isReferenceSolvedAndTransformed(false) + , isGridChecked(false) + , useCompressedOutput(false) + , hasTimeInstant(false) + , hasTimeCentered(false) + , wasDataRequestedFromServer(false) + , wasDataAlreadyReceivedFromServer(false) + , mustAutoTrigger(false) + , isEOF(false), nstepMaxRead(false) + { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); + field_graph_start = -2; + field_graph_end = -2; + } + + + CField::~CField(void) + {} //---------------------------------------------------------------- - void CField::setVirtualVariableGroup(CVariableGroup* newVVariableGroup) - TRY - { - this->vVariableGroup = newVVariableGroup; - } - CATCH + void CField::setVirtualVariableGroup(CVariableGroup* newVVariableGroup) + TRY + { + this->vVariableGroup = newVVariableGroup; + } + CATCH - CVariableGroup* CField::getVirtualVariableGroup(void) const - TRY - { - return this->vVariableGroup; - } - CATCH + CVariableGroup* CField::getVirtualVariableGroup(void) const + TRY + { + return this->vVariableGroup; + } + CATCH - std::vector CField::getAllVariables(void) const - TRY - { - return this->vVariableGroup->getAllChildren(); - } - CATCH + std::vector CField::getAllVariables(void) const + TRY + { + return this->vVariableGroup->getAllChildren(); + } + CATCH - void CField::solveDescInheritance(bool apply, const CAttributeMap* const parent) - TRY - { - SuperClassAttribute::setAttributes(parent, apply); - this->getVirtualVariableGroup()->solveDescInheritance(apply, NULL); - } - CATCH_DUMP_ATTR + void CField::solveDescInheritance(bool apply, const CAttributeMap* const parent) + TRY + { + SuperClassAttribute::setAttributes(parent, apply); + this->getVirtualVariableGroup()->solveDescInheritance(apply, NULL); + } + CATCH_DUMP_ATTR //---------------------------------------------------------------- @@ -99,7 +118,6 @@ namespace xios switch(event.type) { case EVENT_ID_UPDATE_DATA : - // return true; // temporary recvUpdateData(event); return true; break; @@ -123,11 +141,7 @@ namespace xios recvAddVariableGroup(event); return true; break; - - case EVENT_ID_GRID_COMPLETED : - recvGridCompleted(event); - return true; - break; + default : ERROR("bool CField::dispatchEvent(CEventServer& event)", << "Unknown Event"); return false; @@ -135,64 +149,175 @@ namespace xios } } CATCH - - bool CField::isCollectiveEvent(CEventServer& event) + + void CField::sendUpdateData(const CArray& data) TRY { - switch(event.type) + CTimer::get("Field : send data").resume(); + + CContext* context = CContext::getCurrent(); + CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); + int receiverSize = client->serverSize; + + CEventClient event(getType(), EVENT_ID_UPDATE_DATA); + + map >::iterator it; + list list_msg; + list > list_data; + + if (!grid->doGridHaveDataDistributed(client)) { - case EVENT_ID_UPDATE_DATA : - recvUpdateData(event); - return true; - break; + if (client->isServerLeader()) + { + for (it = grid->storeIndex_toSrv[client].begin(); it != grid->storeIndex_toSrv[client].end(); it++) + { + int rank = it->first; + CArray& index = it->second; - case EVENT_ID_READ_DATA : - recvReadDataRequest(event); - return true; - break; + list_msg.push_back(CMessage()); + list_data.push_back(CArray(index.numElements())); - case EVENT_ID_READ_DATA_READY : - recvReadDataReady(event); - return false; - break; + CArray& data_tmp = list_data.back(); + for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); - case EVENT_ID_ADD_VARIABLE : - recvAddVariable(event); - return false; - break; + list_msg.back() << getId() << data_tmp; + event.push(rank, 1, list_msg.back()); + } + client->sendEvent(event); + } + else client->sendEvent(event); + } + else + { + for (it = grid->storeIndex_toSrv[client].begin(); it != grid->storeIndex_toSrv[client].end(); it++) + { + int rank = it->first; + CArray& index = it->second; - case EVENT_ID_ADD_VARIABLE_GROUP : - recvAddVariableGroup(event); - return false; - break; - - case EVENT_ID_GRID_COMPLETED : - recvGridCompleted(event); - return true; - break; - default : - ERROR("bool CField::dispatchEvent(CEventServer& event)", << "Unknown Event"); - return false; + list_msg.push_back(CMessage()); + list_data.push_back(CArray(index.numElements())); + + CArray& data_tmp = list_data.back(); + for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); + + list_msg.back() << getId() << data_tmp; + event.push(rank, grid->nbSenders[receiverSize][rank], list_msg.back()); + } + client->sendEvent(event); } + + CTimer::get("Field : send data").suspend(); } - CATCH + CATCH_DUMP_ATTR void CField::recvUpdateData(CEventServer& event) TRY { + std::map rankBuffers; + + list::iterator it; string fieldId; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> fieldId ; - get(fieldId)->receiveUpdateData(event); + CTimer::get("Field : recv data").resume(); + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + int rank = it->rank; + CBufferIn* buffer = it->buffer; + *buffer >> fieldId; + rankBuffers[rank] = buffer; + } + get(fieldId)->recvUpdateData(rankBuffers); + CTimer::get("Field : recv data").suspend(); } CATCH - void CField::receiveUpdateData(CEventServer& event) + void CField::recvUpdateData(std::map& rankBuffers) TRY { - if (hasCouplerIn()) clientFromClientSourceFilter_->streamData(event) ; - else serverFromClientSourceFilter_->streamData(event) ; + CContext* context = CContext::getCurrent(); + + size_t sizeData = 0; + if (0 == recvDataSrv.numElements()) + { + CArray& storeClient = grid->storeIndex_client; + + // Gather all data from different clients + recvDataSrv.resize(storeClient.numElements()); + recvFoperationSrv = std::shared_ptr(new func::CInstant(recvDataSrv)); + } + + CArray recv_data_tmp(recvDataSrv.numElements()); + const CDate& currDate = context->getCalendar()->getCurrentDate(); + CDuration offsetAllButMonth (freq_offset.getValue().year, 0 , freq_offset.getValue().day, + freq_offset.getValue().hour, freq_offset.getValue().minute, + freq_offset.getValue().second, freq_offset.getValue().timestep); + const CDate opeDate = (last_operation_srv - offsetAllButMonth + context->getCalendar()->getTimeStep()) + + freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep() + offsetAllButMonth; + + if (opeDate <= currDate) + { + for (map >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) + { + CArray tmp; + CArray& indexTmp = it->second; + *(rankBuffers[it->first]) >> tmp; + for (int idx = 0; idx < indexTmp.numElements(); ++idx) + { + recv_data_tmp(indexTmp(idx)) = tmp(idx); + } + } + } + + this->setData(recv_data_tmp); + // delete incomming flux for server only + recvFoperationSrv.reset() ; + recvDataSrv.reset() ; } - CATCH + CATCH_DUMP_ATTR + + void CField::writeUpdateData(const CArray& data) + TRY + { + CContext* context = CContext::getCurrent(); + + const CDate& currDate = context->getCalendar()->getCurrentDate(); + CDuration offsetAllButMonth (freq_offset.getValue().year, 0 , freq_offset.getValue().day, + freq_offset.getValue().hour, freq_offset.getValue().minute, + freq_offset.getValue().second, freq_offset.getValue().timestep); + const CDate opeDate = (last_operation_srv - offsetAllButMonth + context->getCalendar()->getTimeStep()) + + freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep() + offsetAllButMonth; + const CDate writeDate = last_Write_srv + freq_write_srv; + + if (opeDate <= currDate) + { + (*recvFoperationSrv)(data); + last_operation_srv = currDate; + } + + if (writeDate < (currDate + freq_operation_srv)) + { + recvFoperationSrv->final(); + last_Write_srv = writeDate; + grid->computeWrittenIndex(); + writeField(); + lastlast_Write_srv = last_Write_srv; + } + } + CATCH_DUMP_ATTR + + void CField::writeField(void) + TRY + { + if (!getRelFile()->isEmptyZone()) + { + if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) + { + getRelFile()->checkWriteFile(); + this->incrementNStep(); + getRelFile()->getDataOutput()->writeFieldData(CField::get(this)); + } + } + } + CATCH_DUMP_ATTR /* Send a request for reading data. @@ -204,11 +329,38 @@ namespace xios bool CField::sendReadDataRequest(const CDate& tsDataRequested) TRY { - return clientFromServerSourceFilter_->sendReadDataRequest(tsDataRequested) ; + CContext* context = CContext::getCurrent(); + // CContextClient* client = context->client; + + // This code is for future: If we want to read file with level-2 servers + CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); + + lastDataRequestedFromServer = tsDataRequested; + + // No need to send the request if we are sure that we are already at EOF + if (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF) + { + CEventClient event(getType(), EVENT_ID_READ_DATA); + if (client->isServerLeader()) + { + CMessage msg; + msg << getId(); + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank, 1, msg); + client->sendEvent(event); + } + else client->sendEvent(event); + } + else + serverSourceFilter->signalEndOfStream(tsDataRequested); + + wasDataRequestedFromServer = true; + + return !isEOF; } CATCH_DUMP_ATTR - - + /*! Send request new data read from file if need be, that is the current data is out-of-date. \return true if and only if some data was requested @@ -216,11 +368,24 @@ namespace xios bool CField::sendReadDataRequestIfNeeded(void) TRY { - return clientFromServerSourceFilter_->sendReadDataRequestIfNeeded() ; + const CDate& currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate(); + + bool dataRequested = false; + + while (currentDate >= lastDataRequestedFromServer) + { + info(20) << "currentDate : " << currentDate << endl ; + info(20) << "lastDataRequestedFromServer : " << lastDataRequestedFromServer << endl ; + info(20) << "file->output_freq.getValue() : " << file->output_freq.getValue() << endl ; + info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ; + + dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq); + } + + return dataRequested; } CATCH_DUMP_ATTR - void CField::recvReadDataRequest(CEventServer& event) TRY { @@ -230,7 +395,7 @@ namespace xios get(fieldId)->recvReadDataRequest(); } CATCH - + /*! Receive data request sent from client and process it Every time server receives this request, it will try to read data and sent read data back to client @@ -240,11 +405,148 @@ namespace xios void CField::recvReadDataRequest(void) TRY { - fileReaderSourceFilter_->streamData() ; + CContext* context = CContext::getCurrent(); + CContextClient* client = context->client; + + CEventClient event(getType(), EVENT_ID_READ_DATA_READY); + std::list msgs; + + EReadField hasData = readField(); + + map >::iterator it; + if (!grid->doGridHaveDataDistributed(client)) + { + if (client->isServerLeader()) + { + if (0 != recvDataSrv.numElements()) + { + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + msgs.push_back(CMessage()); + CMessage& msg = msgs.back(); + msg << getId(); + switch (hasData) + { + case RF_DATA: + msg << getNStep() - 1 << recvDataSrv; + break; + case RF_NODATA: + msg << int(-2) << recvDataSrv; + break; + case RF_EOF: + default: + msg << int(-1); + break; + } + + event.push(*itRank, 1, msg); + } + } + client->sendEvent(event); + } + else + { + client->sendEvent(event); + } + } + else + { + for (map >::iterator it = grid->outLocalIndexStoreOnClient.begin(); + it != grid->outLocalIndexStoreOnClient.end(); ++it) + { + CArray& indexTmp = it->second; + CArray tmp(indexTmp.numElements()); + for (int idx = 0; idx < indexTmp.numElements(); ++idx) + { + tmp(idx) = recvDataSrv(indexTmp(idx)); + } + + msgs.push_back(CMessage()); + CMessage& msg = msgs.back(); + msg << getId(); + switch (hasData) + { + case RF_DATA: + msg << getNStep() - 1 << tmp; + break; + case RF_NODATA: + msg << int(-2) << tmp; + break; + case RF_EOF: + default: + msg << int(-1); + break; + } + + event.push(it->first, grid->nbReadSenders[client][it->first], msg); + } + client->sendEvent(event); + } + } + CATCH_DUMP_ATTR + + /*! + Read field from a file. + A field is read with the distribution of data on the server side + \return State of field can be read from a file + */ + CField::EReadField CField::readField(void) + TRY + { + CContext* context = CContext::getCurrent(); + grid->computeWrittenIndex(); + getRelFile()->initRead(); + EReadField readState = RF_DATA; + + if (!getRelFile()->isEmptyZone()) + { + if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) + { + if (0 == recvDataSrv.numElements()) + { + CArray& storeClient = grid->storeIndex_client; + recvDataSrv.resize(storeClient.numElements()); + } + + getRelFile()->checkReadFile(); + + if (!nstepMax) + { + nstepMax = getRelFile()->getDataInput()->getFieldNbRecords(CField::get(this)); + } + + this->incrementNStep(); + + if (getNStep() > nstepMax && (getRelFile()->cyclic.isEmpty() || !getRelFile()->cyclic) ) + readState = RF_EOF; + + if (RF_EOF != readState) + getRelFile()->getDataInput()->readFieldData(CField::get(this)); + } + } + else + { + this->incrementNStep(); + if (getNStep() > nstepMax && (getRelFile()->cyclic.isEmpty() || !getRelFile()->cyclic) ) + readState = RF_EOF; + else + readState = RF_NODATA; + + if (!nstepMaxRead) // This can be a bug if we try to read field from zero time record + readState = RF_NODATA; + } + + if (!nstepMaxRead) + { + MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context->server->intraComm); + nstepMaxRead = true; + } + + return readState; } - CATCH_DUMP_ATTR + CATCH_DUMP_ATTR - /* Receive read data from server. At the moment, this function is called in the client side. @@ -255,80 +557,105 @@ namespace xios TRY { string fieldId; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> fieldId ; - get(fieldId)->receiveReadDataReady(event); + vector ranks; + vector buffers; + + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + ranks.push_back(it->rank); + CBufferIn* buffer = it->buffer; + *buffer >> fieldId; + buffers.push_back(buffer); + } + get(fieldId)->recvReadDataReady(ranks, buffers); } CATCH - void CField::receiveReadDataReady(CEventServer& event) + /*! + Receive read data from server + \param [in] ranks Ranks of sending processes + \param [in] buffers buffers containing read data + */ + void CField::recvReadDataReady(vector ranks, vector buffers) TRY { - clientFromServerSourceFilter_->streamData(event) ; - } - CATCH_DUMP_ATTR + CContext* context = CContext::getCurrent(); + std::map > data; + const bool wasEOF = isEOF; + for (int i = 0; i < ranks.size(); i++) + { + int rank = ranks[i]; + int record; + *buffers[i] >> record; + isEOF = (record == int(-1)); - void CField::checkForLateDataFromCoupler(void) - TRY - { - CContext* context = CContext::getCurrent(); - const CDate& currentDate = context->getCalendar()->getCurrentDate(); + if (!isEOF) + *buffers[i] >> data[rank]; + else + break; + } - CTimer timer("CField::checkForLateDataFromCoupler"); - timer.resume(); - traceOff() ; - timer.suspend(); - - bool isDataLate; - do + if (wasDataAlreadyReceivedFromServer) + lastDataReceivedFromServer = lastDataReceivedFromServer + file->output_freq; + else { - isDataLate=clientFromClientSourceFilter_->isDataLate() ; - if (isDataLate) - { - timer.resume(); - context->globalEventLoop(); - timer.suspend(); - } - } while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout); - - timer.resume(); - traceOn() ; - timer.suspend() ; + lastDataReceivedFromServer = context->getCalendar()->getInitDate(); + wasDataAlreadyReceivedFromServer = true; + } - if (isDataLate) ERROR("void CField::checkForLateDataFromCoupler(void)", - << "Late data at timestep = " << currentDate); + if (isEOF) + { + if (!wasEOF) + dateEOF = lastDataReceivedFromServer; + + serverSourceFilter->signalEndOfStream(lastDataReceivedFromServer); + } + else + serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data); } CATCH_DUMP_ATTR void CField::checkForLateDataFromServer(void) TRY { - clientFromServerSourceFilter_->checkForLateData() ; - } - CATCH_DUMP_ATTR - - - void CField::triggerLateField(void) - TRY - { - if (hasFileIn()) - { - checkForLateDataFromServer() ; - clientFromServerSourceFilter_->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate()) ; - } - else if (hasCouplerIn()) + CContext* context = CContext::getCurrent(); + const CDate& currentDate = context->getCalendar()->getCurrentDate(); + + // Check if data previously requested has been received as expected + if (wasDataRequestedFromServer && !isEOF) { - checkForLateDataFromCoupler() ; - clientFromClientSourceFilter_->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate()) ; + CTimer timer("CField::checkForLateDataFromServer"); + + bool isDataLate; + do + { + const CDate nextDataDue = wasDataAlreadyReceivedFromServer ? (lastDataReceivedFromServer + file->output_freq) : context->getCalendar()->getInitDate(); + isDataLate = (nextDataDue <= currentDate); + + if (isDataLate) + { + timer.resume(); + + context->checkBuffersAndListen(); + + timer.suspend(); + } + } + while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout); + + if (isDataLate) + ERROR("void CField::checkForLateDataFromServer(void)", + << "Late data at timestep = " << currentDate); } } CATCH_DUMP_ATTR - void CField::checkIfMustAutoTrigger(void) TRY { - mustAutoTrigger = clientFromServerSourceFilter_ ? clientFromServerSourceFilter_->mustAutoTrigger() : false; + mustAutoTrigger = serverSourceFilter ? serverSourceFilter->mustAutoTrigger() : false; } CATCH_DUMP_ATTR @@ -336,776 +663,875 @@ namespace xios TRY { if (mustAutoTrigger) - clientFromServerSourceFilter_->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate()); + serverSourceFilter->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate()); } CATCH_DUMP_ATTR + //---------------------------------------------------------------- - //---------------------------------------------------------------- - - StdString CField::GetName(void) { return StdString("field"); } - StdString CField::GetDefName(void) { return CField::GetName(); } - ENodeType CField::GetType(void) { return eField; } + void CField::setRelFile(CFile* _file) + TRY + { + this->file = _file; + hasOutputFile = true; + } + CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //---------------------------------------------------------------- - CGrid* CField::getRelGrid(void) const - TRY - { - return this->grid_; - } - CATCH + StdString CField::GetName(void) { return StdString("field"); } + StdString CField::GetDefName(void) { return CField::GetName(); } + ENodeType CField::GetType(void) { return eField; } - //---------------------------------------------------------------- + //---------------------------------------------------------------- - CFile* CField::getRelFile(void) const - TRY - { - if (hasFileIn()) return this->fileIn_; - else if (hasFileOut()) return this->fileOut_ ; - else return nullptr ; - } - CATCH + CGrid* CField::getRelGrid(void) const + TRY + { + return this->grid; + } + CATCH - CGrid* CField::getAssociatedGrid(void) const - TRY - { - return this->grid_; - } - CATCH + //---------------------------------------------------------------- - CDomain* CField::getAssociatedDomain(const string& domainId, bool noError) const - { - if (grid_==nullptr) - { - if (noError) return nullptr ; - else ERROR("CDomain* CField::getAssociatedDomain(const string& domainId)", <<" field with id="<getAssociatedDomain(domainId, noError) ; - } + CFile* CField::getRelFile(void) const + TRY + { + return this->file; + } + CATCH - CAxis* CField::getAssociatedAxis(const string& axisId, bool noError) const - { - if (grid_==nullptr) - { - if (noError) return nullptr ; - else ERROR("CAxis* CField::getAssociatedAxis(const string& axisId)", <<" field with id="<getAssociatedAxis(axisId, noError) ; - } + int CField::getNStep(void) const + TRY + { + return this->nstep; + } + CATCH - CScalar* CField::getAssociatedScalar(const string& scalarId, bool noError) const - { - if (grid_==nullptr) - { - if (noError) return nullptr ; - else ERROR("CScalar* CField::getAssociatedScalar(const string& scalarId)", <<" field with id="<getAssociatedScalar(scalarId, noError) ; - } + func::CFunctor::ETimeType CField::getOperationTimeType() const + TRY + { + return operationTimeType; + } + CATCH + //---------------------------------------------------------------- - func::CFunctor::ETimeType CField::getOperationTimeType() const - TRY - { - return operationTimeType; - } - CATCH + void CField::incrementNStep(void) + TRY + { + this->nstep++; + } + CATCH_DUMP_ATTR + void CField::resetNStep(int nstep /*= 0*/) + TRY + { + this->nstep = nstep; + } + CATCH_DUMP_ATTR - //---------------------------------------------------------------- + void CField::resetNStepMax(void) + TRY + { + this->nstepMax = 0; + nstepMaxRead = false; + } + CATCH_DUMP_ATTR - bool CField::isActive(bool atCurrentTimestep /*= false*/) const - TRY - { - if (modelToClientSourceFilter_) - return atCurrentTimestep ? modelToClientSourceFilter_->isDataExpected(CContext::getCurrent()->getCalendar()->getCurrentDate()) : true; - else if (clientToModelStoreFilter_) return true; - else if (instantDataFilter) - ERROR("bool CField::isActive(bool atCurrentTimestep)", - << "Impossible to check if field [ id = " << getId() << " ] is active as it cannot be used to receive nor send data."); - - return false; - } - CATCH + //---------------------------------------------------------------- - //---------------------------------------------------------------- + bool CField::isActive(bool atCurrentTimestep /*= false*/) const + TRY + { + if (clientSourceFilter) + return atCurrentTimestep ? clientSourceFilter->isDataExpected(CContext::getCurrent()->getCalendar()->getCurrentDate()) : true; + else if (storeFilter) + return true; + else if (instantDataFilter) + ERROR("bool CField::isActive(bool atCurrentTimestep)", + << "Impossible to check if field [ id = " << getId() << " ] is active as it cannot be used to receive nor send data."); - bool CField::wasWritten() const - TRY - { - return written; - } - CATCH + return false; + } + CATCH - void CField::setWritten() - TRY - { - written = true; - } - CATCH_DUMP_ATTR + //---------------------------------------------------------------- - //---------------------------------------------------------------- + bool CField::wasWritten() const + TRY + { + return written; + } + CATCH - bool CField::getUseCompressedOutput() const - TRY - { - return useCompressedOutput; - } - CATCH + void CField::setWritten() + TRY + { + written = true; + } + CATCH_DUMP_ATTR - void CField::setUseCompressedOutput() - TRY - { - useCompressedOutput = true; - } - CATCH_DUMP_ATTR + //---------------------------------------------------------------- - - //---------------------------------------------------------------- - + bool CField::getUseCompressedOutput() const + TRY + { + return useCompressedOutput; + } + CATCH - void CField::checkGridOfEnabledFields() - TRY - { - if (!isGridChecked) - { - isGridChecked = true; - solveCheckMaskIndex(false); - } - } - CATCH_DUMP_ATTR + void CField::setUseCompressedOutput() + TRY + { + useCompressedOutput = true; + } + CATCH_DUMP_ATTR - void CField::sendGridComponentOfEnabledFields() - TRY - { - solveGridDomainAxisRef(true); - // solveCheckMaskIndex(true); - } - CATCH_DUMP_ATTR + //---------------------------------------------------------------- - void CField::sendGridOfEnabledFields() - TRY - { - // solveGridDomainAxisRef(true); - solveCheckMaskIndex(true); - } - CATCH_DUMP_ATTR + std::shared_ptr CField::getInstantDataFilter() + TRY + { + return instantDataFilter; + } + CATCH_DUMP_ATTR - /*! - * Compute the required buffer size to send the fields data. - * \param [in/out] bufferSize Modifying the bufferSize for the client context - * \param [in/out] maxEventSize Modifying the maximum event size for the client context - * \param [in] bufferForWriting True if buffers are used for sending data for writing - */ - void CField::setContextClientDataBufferSize(map>& bufferSize, - map>& maxEventSize, - bool bufferForWriting) - { - auto& contextBufferSize = bufferSize[client] ; - auto& contextMaxEventSize = maxEventSize[client] ; - const std::map mapSize = grid_->getDataBufferSize(client, getId(), bufferForWriting); - for(auto& it : mapSize ) - { - // If contextBufferSize[it.first] does not exist, it will be zero-initialized - // so we can use it safely without checking for its existance - if (CXios::isOptPerformance) contextBufferSize[it.first] += it.second; - else if (contextBufferSize[it.first] < it.second) contextBufferSize[it.first] = it.second; + //---------------------------------------------------------------- - if (contextMaxEventSize[it.first] < it.second) contextMaxEventSize[it.first] = it.second; - } + /*! + Build up graph of grids which plays role of destination and source in grid transformation + This function should be called before \func solveGridReference() + */ + void CField::buildGridTransformationGraph() + TRY + { + CContext* context = CContext::getCurrent(); + if (context->hasClient && !context->hasServer) + { + if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) + { + grid->addTransGridSource(getDirectFieldReference()->grid); + } + } + } + CATCH_DUMP_ATTR - } + /*! + Generate a new grid destination if there are more than one grid source pointing to a same grid destination + */ + void CField::generateNewTransformationGridDest() + TRY + { + CContext* context = CContext::getCurrent(); + if (context->hasClient && !context->hasServer) + { + std::map >& gridSrcMap = grid->getTransGridSource(); + if (1 < gridSrcMap.size()) + { + // Search for grid source + CGrid* gridSrc = grid; + CField* currField = this; + std::vector hieraField; + + while (currField->hasDirectFieldReference() && (gridSrc == grid)) + { + hieraField.push_back(currField); + CField* tmp = currField->getDirectFieldReference(); + currField = tmp; + gridSrc = currField->grid; + } - void CField::setContextClientAttributesBufferSize(map>& bufferSize, - map>& maxEventSize, - bool bufferForWriting) - { - auto& contextBufferSize = bufferSize[client] ; - auto& contextMaxEventSize = maxEventSize[client] ; - const std::map mapSize = grid_->getAttributesBufferSize(client, bufferForWriting); - for(auto& it : mapSize ) - { - // If contextBufferSize[it.first] does not exist, it will be zero-initialized - // so we can use it safely without checking for its existance - if (contextBufferSize[it.first] < it.second) contextBufferSize[it.first] = it.second; - if (contextMaxEventSize[it.first] < it.second) contextMaxEventSize[it.first] = it.second; - } + if (gridSrcMap.end() != gridSrcMap.find(gridSrc)) + { + CGrid* gridTmp; + std::pair newGridDest = gridSrcMap[gridSrc]; + if (newGridDest.first) + { + StdString newIdGridDest = newGridDest.second; + if (!CGrid::has(newIdGridDest)) + { + ERROR("CGrid* CGrid::generateNewTransformationGridDest()", + << " Something wrong happened! Grid whose id " << newIdGridDest + << "should exist "); + } + gridTmp = CGrid::get(newIdGridDest); + } + else + { + StdString newIdGridDest = CGrid::generateId(gridSrc, grid); + gridTmp = CGrid::cloneGrid(newIdGridDest, grid); + + (gridSrcMap[gridSrc]).first = true; + (gridSrcMap[gridSrc]).second = newIdGridDest; + } + + // Update all descendants + for (std::vector::iterator it = hieraField.begin(); it != hieraField.end(); ++it) + { + (*it)->grid = gridTmp; + (*it)->updateRef((*it)->grid); + } + } + } + } + } + CATCH_DUMP_ATTR - } + void CField::updateRef(CGrid* grid) + TRY + { + if (!grid_ref.isEmpty()) grid_ref.setValue(grid->getId()); + else + { + std::vector axisTmp = grid->getAxis(); + std::vector domainTmp = grid->getDomains(); + if ((1getId()); + + if ((!domain_ref.isEmpty()) && (domainTmp.empty())) + ERROR("void CField::updateRef(CGrid* grid)", + << "Incoherent between available domain and domain_ref of field " << this->getId()); + if ((!axis_ref.isEmpty()) && (axisTmp.empty())) + ERROR("void CField::updateRef(CGrid* grid)", + << "Incoherent between available axis and axis_ref of field " << this->getId()); + + if (!domain_ref.isEmpty()) domain_ref.setValue(domainTmp[0]->getId()); + if (!axis_ref.isEmpty()) axis_ref.setValue(axisTmp[0]->getId()); + } + } + CATCH_DUMP_ATTR + + /*! + Solve reference of all enabled fields even the source fields . + In this step, we do transformations. + */ + void CField::solveAllEnabledFieldsAndTransform() + TRY + { + CContext* context = CContext::getCurrent(); + bool hasClient = context->hasClient; + bool hasServer = context->hasServer; + if (!isReferenceSolvedAndTransformed) + { + isReferenceSolvedAndTransformed = true; -// ym obsolete to be removed - std::map CField::getGridAttributesBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/) - TRY - { - return grid_->getAttributesBufferSize(client, bufferForWriting); - } - CATCH_DUMP_ATTR + if (hasClient && !hasServer) + { + solveRefInheritance(true); + if (hasDirectFieldReference()) getDirectFieldReference()->solveAllEnabledFieldsAndTransform(); + } -// ym obsolete to be removed - std::map CField::getGridDataBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/) - TRY - { - return grid_->getDataBufferSize(client, getId(), bufferForWriting); - } - CATCH_DUMP_ATTR + if (hasServer) + solveServerOperation(); - bool CField::evaluateBufferSize(map>& evaluateBuffer, bool isOptPerformance) - { - CContextClient* client=nullptr ; + solveGridReference(); - for(int i=0;i<2;i++) - { - map dataSize ; - if (i==0 && clientToServerStoreFilter_) client = clientToServerStoreFilter_-> getTransferedDataSize(dataSize) ; - if (i==1 && serverToClientStoreFilter_) client = serverToClientStoreFilter_-> getTransferedDataSize(dataSize) ; + if (hasClient && !hasServer) + { + solveGenerateGrid(); + buildGridTransformationGraph(); + } - if (client!=nullptr) - { - map bufferSize ; - - if (evaluateBuffer.count(client)!=0) bufferSize = evaluateBuffer[client] ; - if (isOptPerformance) + solveGridDomainAxisRef(false); + + if (hasClient && !hasServer) + { + solveTransformedGrid(); + } + + solveGridDomainAxisRef(false); + } + } + CATCH_DUMP_ATTR + + void CField::checkGridOfEnabledFields() + TRY + { + if (!isGridChecked) + { + isGridChecked = true; + solveCheckMaskIndex(false); + } + } + CATCH_DUMP_ATTR + + void CField::sendGridComponentOfEnabledFields() + TRY + { + solveGridDomainAxisRef(true); + // solveCheckMaskIndex(true); + } + CATCH_DUMP_ATTR + + void CField::sendGridOfEnabledFields() + TRY + { + // solveGridDomainAxisRef(true); + solveCheckMaskIndex(true); + } + CATCH_DUMP_ATTR + + void CField::solveOnlyReferenceEnabledField(bool doSending2Server) + TRY + { + CContext* context = CContext::getCurrent(); + if (!isReferenceSolved) + { + isReferenceSolved = true; + + if (context->hasClient && !context->hasServer) { - for(auto& it : dataSize) - { - if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ; - else bufferSize[it.first]+=it.second ; - } + solveRefInheritance(true); + if (hasDirectFieldReference()) getDirectFieldReference()->solveOnlyReferenceEnabledField(false); } - else + + if (context->hasServer) + solveServerOperation(); + + solveGridReference(); + grid->solveDomainAxisRefInheritance(true); // make it again to solve grid reading from file + + if (context->hasClient && !context->hasServer) + { + solveGenerateGrid(); + buildGridTransformationGraph(); + } + } + } + CATCH_DUMP_ATTR + + void CField::solveAllReferenceEnabledField(bool doSending2Server) + TRY + { + CContext* context = CContext::getCurrent(); + solveOnlyReferenceEnabledField(doSending2Server); + + if (!areAllReferenceSolved) + { + areAllReferenceSolved = true; + + if (context->hasClient && !context->hasServer) { - for(auto& it : dataSize) - { - if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ; - else bufferSize[it.first]=std::max(bufferSize[it.first],(size_t)it.second) ; - } + solveRefInheritance(true); + if (hasDirectFieldReference()) getDirectFieldReference()->solveAllReferenceEnabledField(false); } - evaluateBuffer[client] = bufferSize ; - client=nullptr ; - } - } - if (client==nullptr) return false ; - else return true; - } + else if (context->hasServer) + solveServerOperation(); + solveGridReference(); + } - size_t CField::getGlobalWrittenSize() - TRY - { - return grid_->getGlobalWrittenSize(); - } - CATCH_DUMP_ATTR + solveGridDomainAxisRef(doSending2Server); - //---------------------------------------------------------------- + if (context->hasClient && !context->hasServer) + { + solveTransformedGrid(); + } - void CField::solveServerOperation(void) - TRY - { - CContext* context = CContext::getCurrent(); + solveCheckMaskIndex(doSending2Server); + } + CATCH_DUMP_ATTR + + std::map CField::getGridAttributesBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/) + TRY + { + return grid->getAttributesBufferSize(client, bufferForWriting); + } + CATCH_DUMP_ATTR + + std::map CField::getGridDataBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/) + TRY + { + return grid->getDataBufferSize(client, getId(), bufferForWriting); + } + CATCH_DUMP_ATTR + + size_t CField::getGlobalWrittenSize() + TRY + { + return grid->getGlobalWrittenSize(); + } + CATCH_DUMP_ATTR + + //---------------------------------------------------------------- + + void CField::solveServerOperation(void) + TRY + { + CContext* context = CContext::getCurrent(); - if (freq_op.isEmpty()) freq_op.setValue(TimeStep); + if (!context->hasServer || !hasOutputFile) return; - if (freq_offset.isEmpty()) freq_offset.setValue(NoneDu); + if (freq_op.isEmpty()) + freq_op.setValue(TimeStep); - if (operation.isEmpty()) - ERROR("void CField::solveServerOperation(void)", - << "An operation must be defined for field \"" << getId() << "\"."); + if (freq_offset.isEmpty()) + freq_offset.setValue(NoneDu); - std::shared_ptr functor; - CArray dummyData; + freq_operation_srv = file->output_freq.getValue(); + freq_write_srv = file->output_freq.getValue(); + + lastlast_Write_srv = context->getCalendar()->getInitDate(); + last_Write_srv = context->getCalendar()->getInitDate(); + last_operation_srv = context->getCalendar()->getInitDate(); + + const CDuration toffset = freq_operation_srv - freq_offset.getValue() - context->getCalendar()->getTimeStep(); + last_operation_srv = last_operation_srv - toffset; + + if (operation.isEmpty()) + ERROR("void CField::solveServerOperation(void)", + << "An operation must be defined for field \"" << getId() << "\"."); + + std::shared_ptr functor; + CArray dummyData; #define DECLARE_FUNCTOR(MType, mtype) \ - if (operation.getValue().compare(#mtype) == 0) \ - { \ - functor.reset(new func::C##MType(dummyData)); \ - } + if (operation.getValue().compare(#mtype) == 0) \ + { \ + functor.reset(new func::C##MType(dummyData)); \ + } #include "functor_type.conf" - if (!functor) - ERROR("void CField::solveServerOperation(void)", - << "\"" << operation << "\" is not a valid operation."); + if (!functor) + ERROR("void CField::solveServerOperation(void)", + << "\"" << operation << "\" is not a valid operation."); - operationTimeType = functor->timeType(); - } - CATCH_DUMP_ATTR + operationTimeType = functor->timeType(); + } + CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //---------------------------------------------------------------- - bool CField::buildWorkflowGraph(CGarbageCollector& gc) - { - if (buildWorkflowGraphDone_) return true ; + /*! + * Constructs the graph filter for the field, enabling or not the data output. + * This method should not be called more than once with enableOutput equal to true. + * + * \param gc the garbage collector to use when building the filter graph + * \param enableOutput must be true when the field data is to be + * read by the client or/and written to a file + */ + void CField::buildFilterGraph(CGarbageCollector& gc, bool enableOutput, Time start_graph, Time end_graph) + TRY + { + if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); + if (!isGridChecked) checkGridOfEnabledFields(); - - const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); - const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); - bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; + const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); + + const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); + if(buildWorkflowGraph && this->operation.getValue()=="once") + { + CDuration tmp_dur = 0; + tmp_dur.timestep = 1; + this->build_workflow_graph_start.setValue(tmp_dur) ; + this->build_workflow_graph_end.setValue(tmp_dur) ; + } + + const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); - if (!inputFilter) inputFilter = std::shared_ptr(new CPassThroughFilter(gc)); + CContext* context = CContext::getCurrent(); + + Time filter_start; + if(!build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = context->calendar->getInitDate()+build_workflow_graph_start; + else if(build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = 0; + else filter_start = -1; + + Time filter_end; + if(!build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = context->calendar->getInitDate()+build_workflow_graph_end; + else if(build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = 9223372036854775807; + else filter_end = -1; + + if(this->field_graph_start==-2) this->field_graph_start = filter_start; + if(this->field_graph_end==-2) this->field_graph_end = filter_end; // init + + + if(start_graph == -1) + { + //nothing + } + else //if(start_graph != -1) + { + if(this->field_graph_start == -1) this->field_graph_start = start_graph; + else this->field_graph_start = min(this->field_graph_start, start_graph); + } + + + if(end_graph == -1) + { + //nothing + } + else + { + if(this->field_graph_end == -1) this->field_graph_end = end_graph; + else this->field_graph_end = max(this->field_graph_end, end_graph); + + } - if (hasDirectFieldReference()) - { - CField* fieldRef = getDirectFieldReference(); - - //------ build_workflow_graph start - if(buildGraph_) - { - (*fieldRef).build_workflow_graph.set(build_workflow_graph); - } - else - { - this->build_workflow_graph.set(fieldRef->build_workflow_graph); - buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - } - - // if(buildGraph_) this->build_workflow_graph.set(build_workflow_graph); - //------ build_workflow_graph end + filter_start = this->field_graph_start; + filter_end = this->field_graph_end; - bool ret=fieldRef->buildWorkflowGraph(gc); - if (!ret) return false ; // workflow graph cannot be built at this stage - - this->build_workflow_graph.set(fieldRef->build_workflow_graph); - buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - } + - // now construct grid and check if element are enabled - solveGridReference() ; // grid_ is now defined - if (!isGridCompleted()) return false; - if (grid_->activateFieldWorkflow(gc)==false) return false; // workflow graph cannot be built at this stage + bool hasWriterServer = context->hasServer && !context->hasClient; + bool hasIntermediateServer = context->hasServer && context->hasClient; - // Check if we have an expression to parse - std::shared_ptr filterExpr ; - if (hasExpression()) - { - boost::scoped_ptr expr(parseExpr(getExpression() + '\0')); - filterExpr = expr->reduce(gc, *this); - - - if (!filterExpr) return false ; // workflow graph cannot be built at this stage - } - - // prepare transformation. Need to know before if workflow of auxillary field can be built - if (hasDirectFieldReference()) - { - auto gridPath=getGridPath() ; - gridPath.push_back(grid_) ; - - CGrid* gridSrc=getDirectFieldReference()->getGrid() ; - std::shared_ptr lastFilter ; - if (filterExpr) lastFilter=filterExpr ; - else lastFilter = inputFilter ; - CGrid* newGrid ; - - for(auto grid : gridPath) - { - grid->solveElementsRefInheritance() ; - std::pair, std::shared_ptr > filters = grid->buildTransformationGraph(gc, false, gridSrc, detectMissingValues, defaultValue, newGrid, buildGraph_, this) ; - lastFilter->connectOutput(filters.first, 0); - lastFilter = filters.second; - gridSrc = newGrid ; - } + if (hasWriterServer) + { + if (!instantDataFilter) + instantDataFilter = clientSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, true, false)); - grid_=newGrid ; - grid_ref=grid_->getId() ; // for server - instantDataFilter = lastFilter ; - - // connect the input Filter to the reference - getDirectFieldReference()->getInstantDataFilter()->connectOutput(inputFilter,0); - if(buildGraph_) - { - inputFilter->graphEnabled=true; - inputFilter->graphPackage = new CGraphPackage; - inputFilter->graphPackage->inFields.push_back(this); - inputFilter->label_field_id = getDirectFieldReference()->getId(); - } - } - else - { - std::shared_ptr lastFilter = inputFilter; - if (hasExpression()) - { - if (filterExpr) + + // If the field data is to be read by the client or/and written to a file + if (enableOutput && !storeFilter && !fileWriterFilter) + { + if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) { - lastFilter=filterExpr ; + fileServerWriterFilter = std::shared_ptr(new CFileServerWriterFilter(gc, this)); + instantDataFilter->connectOutput(fileServerWriterFilter, 0); } - } - - if (hasFileIn()) // input file, attemp to read the grid from file - { - // must be checked - fileIn_->initRead() ; - fileIn_->checkReadFile(); - grid_->solveElementsRefInheritance() ; - if (fileIn_->isClientSide()) fileIn_->readFieldAttributesMetaData(this); - CGrid* newGrid ; - std::pair, std::shared_ptr > filters = grid_->buildTransformationGraph(gc, true, nullptr, detectMissingValues, defaultValue, newGrid, buildGraph_, this) ; - grid_ = newGrid ; - grid_ref=grid_->getId() ; // for server - //grid_->completeGrid(); // grid generation, to be checked - if (fileIn_->isClientSide()) fileIn_->readFieldAttributesValues(this); - grid_->checkElementsAttributes() ; -// grid_->solveDomainAxisBaseRef(); - // probably in future tag grid incomplete if coming from a reading - instantDataFilter=lastFilter ; - } - else if (hasCouplerIn()) - { - grid_->checkElementsAttributes() ; - instantDataFilter=lastFilter ; - } - else - { - setModelIn() ; // no reference, the field is potentially a source field from model - - grid_->solveElementsRefInheritance() ; - CGrid* newGrid ; - std::pair, std::shared_ptr > filters = grid_->buildTransformationGraph(gc, true, nullptr, detectMissingValues, defaultValue, newGrid, buildGraph_, this) ; - newGrid->duplicateAttributes(grid_) ; // for grid attributes (mask) - grid_ = newGrid ; - grid_ref=grid_->getId() ; // for server - grid_->checkElementsAttributes() ; - instantDataFilter=lastFilter ; - } - } - - if (hasFileOut()) - { - if (fileOut_->isServerSide()) - { - this->solveServerOperation() ; - } - } - - buildWorkflowGraphDone_ = true ; - workflowEnabled_ = true ; - return true ; - } - - /*! - * Connect field to filter to send data to server. A temporal filter is inserted before accordingly to the - * output frequency of the file - * \param gc the garbage collector to use when building the filter graph - */ - void CField::connectToFileServer(CGarbageCollector& gc) - { - // insert temporal filter before sending to files - clientToServerStoreFilter_ = std::shared_ptr(new CClientToServerStoreFilter(gc, this, client)); - // insert temporal filter before sending to files - getTemporalDataFilter(gc, fileOut_->output_freq)->connectOutput(clientToServerStoreFilter_, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - clientToServerStoreFilter_->graphPackage = new CGraphPackage; - clientToServerStoreFilter_->graphEnabled = true; - clientToServerStoreFilter_->graphPackage->inFields.push_back(this); - } - } - - void CField::connectToCouplerOut(CGarbageCollector& gc) - { - // insert temporal filter before sending to files - clientToServerStoreFilter_ = std::shared_ptr(new CClientToServerStoreFilter(gc, this, client)); - instantDataFilter->connectOutput(clientToServerStoreFilter_, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - clientToServerStoreFilter_->graphPackage = new CGraphPackage; - clientToServerStoreFilter_->graphEnabled = true; - clientToServerStoreFilter_->graphPackage->inFields.push_back(this); - } - } - - - /*! - * Connect field to a source filter to receive data from model. - */ - void CField::connectToModelInput(CGarbageCollector& gc) - { - const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); - const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); - - if (check_if_active.isEmpty()) check_if_active = false; - modelToClientSourceFilter_ = std::shared_ptr(new CModelToClientSourceFilter(gc, grid_, detectMissingValues, defaultValue)); - modelToClientSourceFilter_ -> connectOutput(inputFilter,0) ; - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_ ) - { - modelToClientSourceFilter_->graphPackage = new CGraphPackage; - modelToClientSourceFilter_->graphEnabled = true; - modelToClientSourceFilter_->graphPackage->inFields.push_back(this); - } - } - - /*! - * Connect field to a source filter to receive data from a client (on server side). - */ - void CField::connectToClientInput(CGarbageCollector& gc) - { - serverFromClientSourceFilter_ = std::shared_ptr(new CServerFromClientSourceFilter(gc, grid_)); - serverFromClientSourceFilter_ -> connectOutput(inputFilter,0) ; - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - serverFromClientSourceFilter_->graphPackage = new CGraphPackage; - serverFromClientSourceFilter_->graphEnabled = true; - serverFromClientSourceFilter_->graphPackage->inFields.push_back(this); - } - } - + } + } + else if (hasIntermediateServer) + { + if (!instantDataFilter) + instantDataFilter = clientSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, false, false)); + + // If the field data is to be read by the client or/and written to a file + if (enableOutput && !storeFilter && !fileWriterFilter) + { + if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) + { + fileWriterFilter = std::shared_ptr(new CFileWriterFilter(gc, this)); + instantDataFilter->connectOutput(fileWriterFilter, 0); + } + } + } + else + { + // Start by building a filter which can provide the field's instant data + if (!instantDataFilter) + { + // Check if we have an expression to parse + if (hasExpression()) + { + boost::scoped_ptr expr(parseExpr(getExpression() + '\0')); + std::shared_ptr filter = expr->reduce(gc, *this, filter_start, filter_end); + + // Check if a spatial transformation is needed + if (!field_ref.isEmpty()) + { + CGrid* gridRef = CField::get(field_ref)->grid; + + if (grid && grid != gridRef && grid->hasTransform()) + { + std::pair, std::shared_ptr > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue); + + filter->connectOutput(filters.first, 0); + filter = filters.second; + } + } + + instantDataFilter = filter; + instantDataFilter->field = this; + filter->tag = buildWorkflowGraph; + + filter->start_graph = filter_start; + filter->end_graph = filter_end; + + for(int i=0; iparent_filters.size(); i++) + { + filter->tag = filter->tag || filter->parent_filters[i]->tag; + } + } + // Check if we have a reference on another field + else if (!field_ref.isEmpty()) + { + instantDataFilter = getFieldReference(gc, filter_start, filter_end); + instantDataFilter->tag = buildWorkflowGraph; + instantDataFilter->start_graph = filter_start; + instantDataFilter->end_graph = filter_end; + } + // Check if the data is to be read from a file + else if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) + { + checkTimeAttributes(); + instantDataFilter = serverSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, true, false, freq_offset, true, + detectMissingValues, defaultValue)); + instantDataFilter->tag = buildWorkflowGraph; + instantDataFilter->start_graph = filter_start; + instantDataFilter->end_graph = filter_end; + instantDataFilter->field = this; - /*! - * Connect field to a source filter to receive data from a server (on client side). - */ - void CField::connectToServerInput(CGarbageCollector& gc) - { - checkTimeAttributes(); - clientFromServerSourceFilter_ = std::shared_ptr(new CClientFromServerSourceFilter(gc,this)) ; - clientFromServerSourceFilter_ -> connectOutput(inputFilter,0) ; - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - clientFromServerSourceFilter_->graphPackage = new CGraphPackage; - clientFromServerSourceFilter_->graphEnabled = true; - clientFromServerSourceFilter_->graphPackage->inFields.push_back(this); - } - } + } + else // The data might be passed from the model + { + if (check_if_active.isEmpty()) check_if_active = false; + instantDataFilter = clientSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, false, true, NoneDu, false, + detectMissingValues, defaultValue)); + instantDataFilter->tag = buildWorkflowGraph; + instantDataFilter->start_graph = filter_start; + instantDataFilter->end_graph = filter_end; + instantDataFilter->field = this; + } + } - /*! - * Connect field to a source filter to receive data from coupler (on client side). - */ - void CField::connectToCouplerIn(CGarbageCollector& gc) - { - CContext* context = CContext::getCurrent(); + // If the field data is to be read by the client or/and written to a file + if (enableOutput && !storeFilter && !fileWriterFilter) + { + if (!read_access.isEmpty() && read_access) + { + storeFilter = std::shared_ptr(new CStoreFilter(gc, CContext::getCurrent(), grid, + detectMissingValues, defaultValue)); + instantDataFilter->connectOutput(storeFilter, 0); + + storeFilter->tag = (instantDataFilter->tag || buildWorkflowGraph); + instantDataFilter->start_graph = filter_start; + instantDataFilter->end_graph = filter_end; + + instantDataFilter->setParentFiltersTag(); + storeFilter->start_graph = filter_start; + storeFilter->end_graph = filter_end; + storeFilter->field = this; + storeFilter->distance = instantDataFilter->distance+1; + } - if (freq_op.isEmpty()) freq_op.setValue(TimeStep); - if (freq_offset.isEmpty()) freq_offset.setValue(freq_op.getValue() - TimeStep); - clientFromClientSourceFilter_ = std::shared_ptr(new CClientFromClientSourceFilter(gc, this)) ; - clientFromClientSourceFilter_ -> connectOutput(inputFilter,0) ; - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - clientFromClientSourceFilter_->graphPackage = new CGraphPackage; - clientFromClientSourceFilter_->graphEnabled = true; - clientFromClientSourceFilter_->graphPackage->inFields.push_back(this); - } - } + if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) + { + fileWriterFilter = std::shared_ptr(new CFileWriterFilter(gc, this)); + getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); + + fileWriterFilter->tag = (getTemporalDataFilter(gc, file->output_freq)->tag || buildWorkflowGraph); + getTemporalDataFilter(gc, file->output_freq)->start_graph = filter_start; + getTemporalDataFilter(gc, file->output_freq)->end_graph = filter_end; + getTemporalDataFilter(gc, file->output_freq)->tag = buildWorkflowGraph; + getTemporalDataFilter(gc, file->output_freq)->setParentFiltersTag(); + fileWriterFilter->start_graph = filter_start; + fileWriterFilter->end_graph = filter_end; + fileWriterFilter->distance = getTemporalDataFilter(gc, file->output_freq)->distance+1; - /*! - * Connect field to a file writer filter to write data in file (on server side). - */ - void CField::connectToFileWriter(CGarbageCollector& gc) - { - fileWriterStoreFilter_ = std::shared_ptr(new CFileWriterStoreFilter(gc, this)); - instantDataFilter->connectOutput(fileWriterStoreFilter_, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - fileWriterStoreFilter_->graphPackage = new CGraphPackage; - fileWriterStoreFilter_->graphEnabled = true; - fileWriterStoreFilter_->graphPackage->inFields.push_back(this); - } - } - /*! - * Connect field to a file reader filter to read data from file (on server side). - */ - void CField::connectToFileReader(CGarbageCollector& gc) - { - fileReaderSourceFilter_ = std::shared_ptr(new CFileReaderSourceFilter(gc, this)); - fileReaderSourceFilter_->connectOutput(inputFilter, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - fileReaderSourceFilter_->graphPackage = new CGraphPackage; - fileReaderSourceFilter_->graphEnabled = true; - fileReaderSourceFilter_->graphPackage->inFields.push_back(this); - } - } + } + } + } + } + CATCH_DUMP_ATTR + /*! + * Returns the filter needed to handle the field reference. + * This method should only be called when building the filter graph corresponding to the field. + * + * \param gc the garbage collector to use + * \return the output pin corresponding to the field reference + */ + std::shared_ptr CField::getFieldReference(CGarbageCollector& gc, Time start_graph, Time end_graph) + TRY + { + if (instantDataFilter || field_ref.isEmpty()) + ERROR("COutputPin* CField::getFieldReference(CGarbageCollector& gc)", + "Impossible to get the field reference for a field which has already been parsed or which does not have a field_ref."); + + CField* fieldRef = CField::get(field_ref); + fieldRef->buildFilterGraph(gc, false, start_graph, end_graph); + const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); + + CContext* context = CContext::getCurrent(); + + Time filter_start; + if(!build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = context->calendar->getInitDate()+build_workflow_graph_start; + else if(build_workflow_graph_start.isEmpty() && buildWorkflowGraph) filter_start = 0; + else filter_start = -1; + + Time filter_end; + if(!build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = context->calendar->getInitDate()+build_workflow_graph_end; + else if(build_workflow_graph_end.isEmpty() && buildWorkflowGraph) filter_end = 9223372036854775807; + else filter_end = -1; + + if(this->field_graph_start==-2) this->field_graph_start = filter_start; + if(this->field_graph_end==-2) this->field_graph_end = filter_end; // init + + + if(start_graph == -1) + { + //nothing + } + else //if(start_graph != -1) + { + if(this->field_graph_start == -1) this->field_graph_start = start_graph; + else this->field_graph_start = min(this->field_graph_start, start_graph); + } + + if(end_graph == -1) + { + //nothing + } + else + { + if(this->field_graph_end == -1) this->field_graph_end = end_graph; + else this->field_graph_end = max(this->field_graph_end, end_graph); + } + + filter_start = this->field_graph_start; + filter_end = this->field_graph_end; + + + std::pair, std::shared_ptr > filters; + // Check if a spatial transformation is needed + if (grid && grid != fieldRef->grid && grid->hasTransform()) + { + bool hasMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); + double defaultValue = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0); + filters = CSpatialTransformFilter::buildFilterGraph(gc, fieldRef->grid, grid, hasMissingValue, defaultValue); + + fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); - /*! - * Connect field to a store filter to output data to model on client Side - */ - void CField::connectToModelOutput(CGarbageCollector& gc) - { - clientToModelStoreFilter_ = std::shared_ptr(new CClientToModelStoreFilter(gc, this)); - instantDataFilter->connectOutput(clientToModelStoreFilter_, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - clientToModelStoreFilter_->graphPackage = new CGraphPackage; - clientToModelStoreFilter_->graphEnabled = true; - clientToModelStoreFilter_->graphPackage->inFields.push_back(this); - } - } + + filters.second->parent_filters.resize(1); + filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); + + filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); + + filters.second->start_graph = filter_start; + filters.second->end_graph = filter_end; + filters.second->field = this; + + } + else + { + filters.first = filters.second = std::shared_ptr(new CPassThroughFilter(gc)); + + fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); + - - void CField::connectToServerToClient(CGarbageCollector& gc) - { - serverToClientStoreFilter_ = std::shared_ptr(new CServerToClientStoreFilter(gc, this, client)); - instantDataFilter->connectOutput(serverToClientStoreFilter_, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - serverToClientStoreFilter_->graphPackage = new CGraphPackage; - serverToClientStoreFilter_->graphEnabled = true; - serverToClientStoreFilter_->graphPackage->inFields.push_back(this); - } - } + filters.second->parent_filters.resize(1); + filters.second->parent_filters[0]= fieldRef->getInstantDataFilter(); - /*! - * Transform the grid_path attribut into vector of grid. - * \return the vector CGrid* containing the list of grid path for tranformation - */ - vector CField::getGridPath(void) - { - std::vector gridPath; + filters.second->tag = (buildWorkflowGraph || filters.second->parent_filters[0]->tag); - if (hasDirectFieldReference() && grid_ != getDirectFieldReference()->grid_) - { - if (!grid_path.isEmpty()) - { - std::string gridId; - size_t start = 0, end; + filters.second->start_graph = filter_start; + filters.second->end_graph = filter_end; + filters.second->field = this; - do - { - end = grid_path.getValue().find(',', start); - if (end != std::string::npos) - { - gridId = grid_path.getValue().substr(start, end - start); - start = end + 1; - } - else gridId = grid_path.getValue().substr(start); + } - if (!CGrid::has(gridId)) - ERROR("void CField::solveTransformedGrid()", - << "Invalid grid_path, the grid '" << gridId << "' does not exist."); + return filters.second; + } + CATCH_DUMP_ATTR - gridPath.push_back(CGrid::get(gridId)); - } - while (end != std::string::npos); - } - } - return gridPath ; - } + /*! + * Returns the filter needed to handle a self reference in the field's expression. + * If the needed filter does not exist, it is created, otherwise it is reused. + * This method should only be called when building the filter graph corresponding + * to the field's expression. + * + * \param gc the garbage collector to use + * \return the output pin corresponding to a self reference + */ + std::shared_ptr CField::getSelfReference(CGarbageCollector& gc, Time start_graph, Time end_graph) + TRY + { - - - /*! - * Returns the filter needed to handle a self reference in the field's expression. - * If the needed filter does not exist, it is created, otherwise it is reused. - * This method should only be called when building the filter graph corresponding - * to the field's expression. - * - * \param gc the garbage collector to use - * \return the output pin corresponding to a self reference - */ + if (instantDataFilter || !hasExpression()) + ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", + "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); + + bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); -/* old version - std::shared_ptr CField::getSelfReference(CGarbageCollector& gc) - TRY - { - if (instantDataFilter || !hasExpression()) - ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)", - "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); + if (!selfReferenceFilter) + { + const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); + const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); - if (!selfReferenceFilter) - { - const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); - const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); + if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) + { + if (!serverSourceFilter) + { + checkTimeAttributes(); + serverSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, true, false, freq_offset, true, + detectMissingValues, defaultValue)); + } - if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) - { - if (!serverSourceFilter) - { - checkTimeAttributes(); - serverSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid_, true, false, freq_offset, true, - detectMissingValues, defaultValue)); + selfReferenceFilter = serverSourceFilter; + } + else if (!field_ref.isEmpty()) + { + CField* fieldRef = CField::get(field_ref); + fieldRef->buildFilterGraph(gc, false); + selfReferenceFilter = fieldRef->getInstantDataFilter(); + } + else + { + if (!clientSourceFilter) + { + if (check_if_active.isEmpty()) check_if_active = false; + clientSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid, true, true, NoneDu, false, + detectMissingValues, defaultValue)); } - selfReferenceFilter = serverSourceFilter; - } - else if (!field_ref.isEmpty()) - { - CField* fieldRef = CField::get(field_ref); - fieldRef->buildFilterGraph(gc, false); - selfReferenceFilter = fieldRef->getInstantDataFilter(); - } - else - { - if (!clientSourceFilter) - { - if (check_if_active.isEmpty()) check_if_active = false; - clientSourceFilter = std::shared_ptr(new CSourceFilter(gc, grid_, true, true, NoneDu, false, - detectMissingValues, defaultValue)); - } + selfReferenceFilter = clientSourceFilter; + } + } - selfReferenceFilter = clientSourceFilter; - } - } + selfReferenceFilter->tag = buildWorkflowGraph; + selfReferenceFilter->field = this; + return selfReferenceFilter; + } + CATCH_DUMP_ATTR - return selfReferenceFilter; - } - CATCH_DUMP_ATTR -*/ - std::shared_ptr CField::getSelfReference(CGarbageCollector& gc) - TRY - { - return inputFilter ; - } - CATCH_DUMP_ATTR + /*! + * Returns the temporal filter corresponding to the field's temporal operation + * for the specified operation frequency. The filter is created if it does not + * exist, otherwise it is reused. + * + * \param gc the garbage collector to use + * \param outFreq the operation frequency, i.e. the frequency at which the output data will be computed + * \return the output pin corresponding to the requested temporal filter + */ + std::shared_ptr CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) + TRY + { + std::map >::iterator it = temporalDataFilters.find(outFreq); + const bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); - /*! - * Returns the temporal filter corresponding to the field's temporal operation - * for the specified operation frequency. The filter is created if it does not - * exist, otherwise it is reused. - * - * \param gc the garbage collector to use - * \param outFreq the operation frequency, i.e. the frequency at which the output data will be computed - * \return the output pin corresponding to the requested temporal filter - */ - std::shared_ptr CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) - TRY - { - std::map >::iterator it = temporalDataFilters.find(outFreq); + CContext* context = CContext::getCurrent(); - if (it == temporalDataFilters.end()) - { - if (operation.isEmpty()) - ERROR("void CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", - << "An operation must be defined for field \"" << getId() << "\"."); - checkTimeAttributes(&outFreq); + if (it == temporalDataFilters.end()) + { + if (operation.isEmpty()) + ERROR("void CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", + << "An operation must be defined for field \"" << getId() << "\"."); - const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); - std::shared_ptr temporalFilter(new CTemporalFilter(gc, operation, + checkTimeAttributes(&outFreq); + + const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); + std::shared_ptr temporalFilter(new CTemporalFilter(gc, operation, CContext::getCurrent()->getCalendar()->getInitDate(), freq_op, freq_offset, outFreq, detectMissingValues)); - instantDataFilter->connectOutput(temporalFilter, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - info(100)<<"=== Workflow Graph === field "<getId()<<" calls a getTemporalDataFilter ============== "<graphPackage = new CGraphPackage; - temporalFilter->graphEnabled = true; - temporalFilter->graphPackage->inFields.push_back(this); - } + instantDataFilter->connectOutput(temporalFilter, 0); + + temporalFilter->parent_filters.resize(1); + temporalFilter->parent_filters[0] = instantDataFilter; + - it = temporalDataFilters.insert(std::make_pair(outFreq, temporalFilter)).first; - } + temporalFilter->tag = temporalFilter->parent_filters[0]->tag; + temporalFilter->start_graph = temporalFilter->parent_filters[0]->start_graph; + temporalFilter->end_graph = temporalFilter->parent_filters[0]->end_graph; - return it->second; - } - CATCH_DUMP_ATTR + temporalFilter->field = this; + + it = temporalDataFilters.insert(std::make_pair(outFreq, temporalFilter)).first; + } + + return it->second; + } + CATCH_DUMP_ATTR /*! * Returns the temporal filter corresponding to the field's temporal operation @@ -1115,87 +1541,46 @@ namespace xios * \param outFreq the operation frequency, i.e. the frequency at which the output data will be computed * \return the output pin corresponding to the requested temporal filter */ - - std::shared_ptr CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) - TRY - { - if (instantDataFilter || !hasExpression()) - ERROR("COutputPin* CField::getSelfTemporalDataFilter(CGarbageCollector& gc)", - "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); - - if (selfTemporalDataFilter) return selfTemporalDataFilter; - - if (hasDirectFieldReference()) - { - CField* fieldRef=getDirectFieldReference(); - return fieldRef->getTemporalDataFilter(gc, outFreq) ; - } - else - { - if (selfTemporalDataFilter) return selfTemporalDataFilter ; - - if (operation.isEmpty()) - ERROR("void CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", - << "An operation must be defined for field \"" << getId() << "\"."); - - checkTimeAttributes(&outFreq); //bof - - const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); - selfTemporalDataFilter = std::shared_ptr(new CTemporalFilter(gc, operation, - CContext::getCurrent()->getCalendar()->getInitDate(), - freq_op, freq_offset, outFreq, detectMissingValues)); - - inputFilter->connectOutput(selfTemporalDataFilter, 0); - const bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ; - if(buildGraph_) - { - info(100)<<"=== Workflow Graph === field "<getId()<<" calls a getSelfTemporalDataFilter ============== "<graphPackage = new CGraphPackage; - selfTemporalDataFilter->graphEnabled = true; - selfTemporalDataFilter->graphPackage->inFields.push_back(this); - } - return selfTemporalDataFilter ; - } - } - CATCH_DUMP_ATTR - -/* old version - std::shared_ptr CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) - TRY - { - if (instantDataFilter || !hasExpression()) - ERROR("COutputPin* CField::getSelfTemporalDataFilter(CGarbageCollector& gc)", - "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); - - if (!selfReferenceFilter) getSelfReference(gc) ; - - if (serverSourceFilter || clientSourceFilter) - { - if (operation.isEmpty()) - ERROR("void CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", - << "An operation must be defined for field \"" << getId() << "\"."); - - checkTimeAttributes(&outFreq); - - const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); - std::shared_ptr temporalFilter(new CTemporalFilter(gc, operation, - CContext::getCurrent()->getCalendar()->getInitDate(), - freq_op, freq_offset, outFreq, detectMissingValues)); - - selfReferenceFilter->connectOutput(temporalFilter, 0); - return temporalFilter ; - } - else if (!field_ref.isEmpty()) - { - CField* fieldRef = CField::get(field_ref); - fieldRef->buildFilterGraph(gc, false); - return fieldRef->getTemporalDataFilter(gc, outFreq) ; - } + + std::shared_ptr CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) + TRY + { + if (instantDataFilter || !hasExpression()) + ERROR("COutputPin* CField::getSelfTemporalDataFilter(CGarbageCollector& gc)", + "Impossible to add a self reference to a field which has already been parsed or which does not have an expression."); + + if (!selfReferenceFilter) getSelfReference(gc) ; + + if (serverSourceFilter || clientSourceFilter) + { + if (operation.isEmpty()) + ERROR("void CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)", + << "An operation must be defined for field \"" << getId() << "\"."); + + checkTimeAttributes(&outFreq); + + const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); + bool buildWorkflowGraph = (!build_workflow_graph.isEmpty() && build_workflow_graph == true); + std::shared_ptr temporalFilter(new CTemporalFilter(gc, operation, + CContext::getCurrent()->getCalendar()->getInitDate(), + freq_op, freq_offset, outFreq, detectMissingValues)); + + selfReferenceFilter->connectOutput(temporalFilter, 0); + temporalFilter->tag = buildWorkflowGraph; + temporalFilter->field = this; + + return temporalFilter ; + } + else if (!field_ref.isEmpty()) + { + CField* fieldRef = CField::get(field_ref); + fieldRef->buildFilterGraph(gc, false); + return fieldRef->getTemporalDataFilter(gc, outFreq) ; + } } - CATCH_DUMP_ATTR -*/ + CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //---------------------------------------------------------------- /* void CField::fromBinary(StdIStream& is) { @@ -1211,486 +1596,513 @@ namespace xios */ //---------------------------------------------------------------- - void CField::solveGridReference(void) - TRY - { - if (grid_!=nullptr) return ; // already done + void CField::solveGridReference(void) + TRY + { + if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty() && scalar_ref.isEmpty()) + { + ERROR("CField::solveGridReference(void)", + << "A grid must be defined for field '" << getFieldOutputName() << "' ."); + } + else if (!grid_ref.isEmpty() && (!domain_ref.isEmpty() || !axis_ref.isEmpty() || !scalar_ref.isEmpty())) + { + ERROR("CField::solveGridReference(void)", + << "Field '" << getFieldOutputName() << "' has both a grid and a domain/axis/scalar." << std::endl + << "Please define either 'grid_ref' or 'domain_ref'/'axis_ref'/'scalar_ref'."); + } - if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty() && scalar_ref.isEmpty()) - { - ERROR("CField::solveGridReference(void)", - << "A grid must be defined for field '" << getFieldOutputName() << "' ."); - } - else if (!grid_ref.isEmpty() && (!domain_ref.isEmpty() || !axis_ref.isEmpty() || !scalar_ref.isEmpty())) - { - ERROR("CField::solveGridReference(void)", - << "Field '" << getFieldOutputName() << "' has both a grid and a domain/axis/scalar." << std::endl - << "Please define either 'grid_ref' or 'domain_ref'/'axis_ref'/'scalar_ref'."); - } + if (grid_ref.isEmpty()) + { + std::vector vecDom; + std::vector vecAxis; + std::vector vecScalar; + std::vector axisDomainOrderTmp; + + std::vector vecDomRef; + std::vector vecAxisRef; + std::vector vecScalarRef; - if (grid_ref.isEmpty()) - { - std::vector vecDom; - std::vector vecAxis; - std::vector vecScalar; - std::vector axisDomainOrderTmp; - - std::vector vecDomRef; - std::vector vecAxisRef; - std::vector vecScalarRef; - if (!domain_ref.isEmpty()) - { - CField* field=CDomain::getFieldFromId(domain_ref) ; - if (field!=nullptr) field->solveGridReference() ; - if (CDomain::has(domain_ref)) + if (!domain_ref.isEmpty()) { - vecDom.push_back(CDomain::get(domain_ref)); - vecDomRef.push_back(CDomain::createDomain()); - vecDomRef.back()->domain_ref=domain_ref; - axisDomainOrderTmp.push_back(2); + StdString tmp = domain_ref.getValue(); + if (CDomain::has(domain_ref)) + { + vecDom.push_back(CDomain::get(domain_ref)); + vecDomRef.push_back(CDomain::createDomain()); + vecDomRef.back()->domain_ref=domain_ref; + axisDomainOrderTmp.push_back(2); + } + else ERROR("CField::solveGridReference(void)", + << "Invalid reference to domain '" << domain_ref.getValue() << "'."); } - else ERROR("CField::solveGridReference(void)", - << "Invalid reference to domain '" << domain_ref.getValue() << "'."); - } - if (!axis_ref.isEmpty()) - { - CField* field=CAxis::getFieldFromId(axis_ref) ; - if (field!=nullptr) field->solveGridReference() ; - if (CAxis::has(axis_ref)) + if (!axis_ref.isEmpty()) { - vecAxis.push_back(CAxis::get(axis_ref)); - vecAxisRef.push_back(CAxis::createAxis()); - vecAxisRef.back()->axis_ref=axis_ref; - axisDomainOrderTmp.push_back(1); + if (CAxis::has(axis_ref)) + { + vecAxis.push_back(CAxis::get(axis_ref)); + vecAxisRef.push_back(CAxis::createAxis()); + vecAxisRef.back()->axis_ref=axis_ref; + axisDomainOrderTmp.push_back(1); + } + else ERROR("CField::solveGridReference(void)", + << "Invalid reference to axis '" << axis_ref.getValue() << "'."); } - else ERROR("CField::solveGridReference(void)", - << "Invalid reference to axis '" << axis_ref.getValue() << "'."); - } - if (!scalar_ref.isEmpty()) - { - CField* field=CScalar::getFieldFromId(scalar_ref) ; - if (field!=nullptr) field->solveGridReference() ; - if (CScalar::has(scalar_ref)) + if (!scalar_ref.isEmpty()) { - vecScalar.push_back(CScalar::get(scalar_ref)); - vecScalarRef.push_back(CScalar::createScalar()); - vecScalarRef.back()->scalar_ref=scalar_ref; - axisDomainOrderTmp.push_back(0); + if (CScalar::has(scalar_ref)) + { + vecScalar.push_back(CScalar::get(scalar_ref)); + vecScalarRef.push_back(CScalar::createScalar()); + vecScalarRef.back()->scalar_ref=scalar_ref; + axisDomainOrderTmp.push_back(0); + } + else ERROR("CField::solveGridReference(void)", + << "Invalid reference to scalar '" << scalar_ref.getValue() << "'."); } - else ERROR("CField::solveGridReference(void)", - << "Invalid reference to scalar '" << scalar_ref.getValue() << "'."); - } - CArray axisDomainOrder(axisDomainOrderTmp.size()); - for (int idx = 0; idx < axisDomainOrderTmp.size(); ++idx) + CArray axisDomainOrder(axisDomainOrderTmp.size()); + for (int idx = 0; idx < axisDomainOrderTmp.size(); ++idx) + { + axisDomainOrder(idx) = axisDomainOrderTmp[idx]; + } + + // Warning: the gridId shouldn't be set as the grid_ref since it could be inherited + StdString gridId = CGrid::generateId(vecDom, vecAxis, vecScalar,axisDomainOrder); + if (CGrid::has(gridId)) this->grid = CGrid::get(gridId); + else this->grid = CGrid::createGrid(gridId, vecDomRef, vecAxisRef, vecScalarRef,axisDomainOrder); + } + else { - axisDomainOrder(idx) = axisDomainOrderTmp[idx]; + if (CGrid::has(grid_ref)) this->grid = CGrid::get(grid_ref); + else ERROR("CField::solveGridReference(void)", + << "Invalid reference to grid '" << grid_ref.getValue() << "'."); } + } + CATCH_DUMP_ATTR - // Warning: the gridId shouldn't be set as the grid_ref since it could be inherited - StdString gridId = CGrid::generateId(vecDom, vecAxis, vecScalar,axisDomainOrder); - if (CGrid::has(gridId)) this->grid_ = CGrid::get(gridId); - else this->grid_ = CGrid::createGrid(gridId, vecDomRef, vecAxisRef, vecScalarRef,axisDomainOrder); - } - else - { - if (CGrid::has(grid_ref)) this->grid_ = CGrid::get(grid_ref); - else ERROR("CField::solveGridReference(void)", - << "Invalid reference to grid '" << grid_ref.getValue() << "'."); - } - } - CATCH_DUMP_ATTR + void CField::solveGridDomainAxisRef(bool checkAtt) + TRY + { + grid->solveDomainAxisRef(checkAtt); + } + CATCH_DUMP_ATTR - void CField::solveGridDomainAxisRef(bool checkAtt) - TRY - { - grid_->solveDomainAxisRef(checkAtt); - } - CATCH_DUMP_ATTR + void CField::solveCheckMaskIndex(bool doSendingIndex) + TRY + { + grid->checkMaskIndex(doSendingIndex); + } + CATCH_DUMP_ATTR - void CField::solveCheckMaskIndex(bool doSendingIndex) - TRY - { - grid_->checkMaskIndex(doSendingIndex); - } - CATCH_DUMP_ATTR + void CField::solveTransformedGrid() + TRY + { + if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) + { + std::vector grids; + // Source grid + grids.push_back(getDirectFieldReference()->grid); + // Intermediate grids + if (!grid_path.isEmpty()) + { + std::string gridId; + size_t start = 0, end; + + do + { + end = grid_path.getValue().find(',', start); + if (end != std::string::npos) + { + gridId = grid_path.getValue().substr(start, end - start); + start = end + 1; + } + else + gridId = grid_path.getValue().substr(start); + + if (!CGrid::has(gridId)) + ERROR("void CField::solveTransformedGrid()", + << "Invalid grid_path, the grid '" << gridId << "' does not exist."); + + grids.push_back(CGrid::get(gridId)); + } + while (end != std::string::npos); + } + // Destination grid + grids.push_back(grid); + + for (size_t i = 0, count = grids.size() - 1; i < count; ++i) + { + CGrid *gridSrc = grids[i]; + CGrid *gridDest = grids[i + 1]; + if (!gridDest->isTransformed()) + gridDest->transformGrid(gridSrc); + } + } + else if (grid && grid->hasTransform() && !grid->isTransformed()) + { + // Temporarily deactivate the self-transformation of grid + // grid->transformGrid(grid); + } + } + CATCH_DUMP_ATTR - - void CField::solveGridDomainAxisBaseRef() - TRY - { - grid_->solveDomainAxisRef(false); - grid_->solveDomainAxisBaseRef(); - } - CATCH_DUMP_ATTR + void CField::solveGenerateGrid() + TRY + { + if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) + grid->completeGrid(getDirectFieldReference()->grid); + else + grid->completeGrid(); + } + CATCH_DUMP_ATTR + + void CField::solveGridDomainAxisBaseRef() + TRY + { + grid->solveDomainAxisRef(false); + grid->solveDomainAxisBaseRef(); + } + CATCH_DUMP_ATTR - ///------------------------------------------------------------------- + ///------------------------------------------------------------------- - template <> - void CGroupTemplate::solveRefInheritance(void) - TRY - { - if (this->group_ref.isEmpty()) return; - StdString gref = this->group_ref.getValue(); + template <> + void CGroupTemplate::solveRefInheritance(void) + TRY + { + if (this->group_ref.isEmpty()) return; + StdString gref = this->group_ref.getValue(); - if (!CFieldGroup::has(gref)) - ERROR("CGroupTemplate::solveRefInheritance(void)", - << "[ gref = " << gref << "]" - << " invalid group name !"); + if (!CFieldGroup::has(gref)) + ERROR("CGroupTemplate::solveRefInheritance(void)", + << "[ gref = " << gref << "]" + << " invalid group name !"); - CFieldGroup* group = CFieldGroup::get(gref); - CFieldGroup* owner = CFieldGroup::get(boost::polymorphic_downcast(this)); - owner->setAttributes(group); // inherite of attributes of group reference + CFieldGroup* group = CFieldGroup::get(gref); + CFieldGroup* owner = CFieldGroup::get(boost::polymorphic_downcast(this)); + owner->setAttributes(group); // inherite of attributes of group reference - std::vector allChildren = group->getAllChildren(); - std::vector::iterator it = allChildren.begin(), end = allChildren.end(); + std::vector allChildren = group->getAllChildren(); + std::vector::iterator it = allChildren.begin(), end = allChildren.end(); - for (; it != end; it++) - { - CField* child = *it; - if (child->hasId()) owner->createChild()->field_ref.setValue(child->getId()); - } - } - CATCH_DUMP_ATTR + for (; it != end; it++) + { + CField* child = *it; + if (child->hasId()) owner->createChild()->field_ref.setValue(child->getId()); - ///------------------------------------------------------------------- + } + } + CATCH_DUMP_ATTR - void CField::parse(xml::CXMLNode& node) - TRY - { - string newContent ; - SuperClass::parse(node); - if (node.goToChildElement()) - { - do - { - if (node.getElementName() == "variable" || node.getElementName() == "variable_group") this->getVirtualVariableGroup()->parseChild(node); - else if (node.getElementName() == "expr") if (node.getContent(newContent)) content+=newContent ; - } while (node.goToNextElement()); - node.goToParentElement(); - } - if (node.getContent(newContent)) content=newContent ; - } - CATCH_DUMP_ATTR + void CField::scaleFactorAddOffset(double scaleFactor, double addOffset) + TRY + { + recvDataSrv = (recvDataSrv - addOffset) / scaleFactor; + } + CATCH_DUMP_ATTR - /*! - This function retrieves Id of corresponding domain_ref and axis_ref (if any) - of a field. In some cases, only domain exists but axis doesn't - \return pair of Domain and Axis id - */ - const std::vector& CField::getRefDomainAxisIds() - TRY - { - CGrid* cgPtr = getRelGrid(); - if (NULL != cgPtr) - { - std::vector::iterator it; - if (!domain_ref.isEmpty()) + void CField::invertScaleFactorAddOffset(double scaleFactor, double addOffset) + TRY + { + recvDataSrv = recvDataSrv * scaleFactor + addOffset; + } + CATCH_DUMP_ATTR + + void CField::outputField(CArray& fieldOut) + TRY + { + CArray& outIndexClient = grid->localIndexToWriteOnClient; + CArray& outIndexServer = grid->localIndexToWriteOnServer; + for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) { - std::vector domainList = cgPtr->getDomainList(); - it = std::find(domainList.begin(), domainList.end(), domain_ref.getValue()); - if (domainList.end() != it) domAxisScalarIds_[0] = *it; + fieldOut(outIndexServer(idx)) = recvDataSrv(outIndexClient(idx)); } + } + CATCH_DUMP_ATTR - if (!axis_ref.isEmpty()) + void CField::inputField(CArray& fieldIn) + TRY + { + CArray& outIndexClient = grid->localIndexToWriteOnClient; + CArray& outIndexServer = grid->localIndexToWriteOnServer; + for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) { - std::vector axisList = cgPtr->getAxisList(); - it = std::find(axisList.begin(), axisList.end(), axis_ref.getValue()); - if (axisList.end() != it) domAxisScalarIds_[1] = *it; + recvDataSrv(outIndexClient(idx)) = fieldIn(outIndexServer(idx)); } + } + CATCH_DUMP_ATTR - if (!scalar_ref.isEmpty()) + void CField::outputCompressedField(CArray& fieldOut) + TRY + { + CArray& outIndexClient = grid->localIndexToWriteOnClient; + CArray& outIndexServer = grid->localIndexToWriteOnServer; + for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) { - std::vector scalarList = cgPtr->getScalarList(); - it = std::find(scalarList.begin(), scalarList.end(), scalar_ref.getValue()); - if (scalarList.end() != it) domAxisScalarIds_[2] = *it; + fieldOut((idx)) = recvDataSrv(outIndexClient(idx)); } - } - return (domAxisScalarIds_); - } - CATCH_DUMP_ATTR - - CVariable* CField::addVariable(const string& id) - TRY - { - return vVariableGroup->createChild(id); - } - CATCH + } + CATCH_DUMP_ATTR - CVariableGroup* CField::addVariableGroup(const string& id) - TRY - { - return vVariableGroup->createChildGroup(id); - } - CATCH + ///------------------------------------------------------------------- - void CField::setContextClient(CContextClient* contextClient) - TRY - { - CContext* context = CContext::getCurrent(); - client = contextClient; - - // A grid is sent by a client (both for read or write) or by primary server (write only) - if (context->getServiceType()==CServicesManager::GATHERER) - { - if (getRelFile()->mode.isEmpty() || (!getRelFile()->mode.isEmpty() && getRelFile()->mode == CFile::mode_attr::write)) - grid_->setContextClient(contextClient); - } - else if (context->getServiceType()==CServicesManager::CLIENT) - { - if (grid_) - grid_->setContextClient(contextClient); - else - ERROR( "CField::setContextClient(contextClient)", - << "Grid not defined for " << getId() - << " (if field is an input field, set read_access to true)" - ); + void CField::parse(xml::CXMLNode& node) + TRY + { + string newContent ; + SuperClass::parse(node); + if (node.goToChildElement()) + { + do + { + if (node.getElementName() == "variable" || node.getElementName() == "variable_group") this->getVirtualVariableGroup()->parseChild(node); + else if (node.getElementName() == "expr") if (node.getContent(newContent)) content+=newContent ; + } while (node.goToNextElement()); + node.goToParentElement(); + } + if (node.getContent(newContent)) content=newContent ; } - } - CATCH_DUMP_ATTR - - void CField::sendCloseDefinition(void) - { - CContext::getCurrent()->sendCloseDefinition(client) ; - } - - void CField::sendFieldToFileServer(void) - { - CContext::getCurrent()->sendContextToFileServer(client); - getRelFile()->sendFileToFileServer(client); - sentGrid_ = grid_-> duplicateSentGrid() ; - sentGrid_->sendGridToFileServer(client); - name = getFieldOutputName() ; - this->sendAllAttributesToServer(client); - this->sendAddAllVariables(client); - } - - void CField::sendFieldToInputFileServer(void) - { - CContext::getCurrent()->sendContextToFileServer(client); - getRelFile()->sendFileToFileServer(client); - sentGrid_ = grid_-> duplicateSentGrid() ; - sentGrid_->sendGridToFileServer(client); - read_access=true ; // not the best solution, but on server side, the field must be a starting point of the workflow - // must be replace by a better solution when implementing filters for reading and send to client - // on server side - this->sendAllAttributesToServer(client); - this->sendAddAllVariables(client); - } + CATCH_DUMP_ATTR - void CField::sendFieldToCouplerOut(void) - { - if (sendFieldToCouplerOut_done_) return ; - else sendFieldToCouplerOut_done_=true ; - sentGrid_ = grid_-> duplicateSentGrid() ; - sentGrid_->sendGridToCouplerOut(client, this->getId()); - this->sendGridCompleted(); + /*! + This function retrieves Id of corresponding domain_ref and axis_ref (if any) + of a field. In some cases, only domain exists but axis doesn't + \return pair of Domain and Axis id + */ + const std::vector& CField::getRefDomainAxisIds() + TRY + { + CGrid* cgPtr = getRelGrid(); + if (NULL != cgPtr) + { + std::vector::iterator it; + if (!domain_ref.isEmpty()) + { + std::vector domainList = cgPtr->getDomainList(); + it = std::find(domainList.begin(), domainList.end(), domain_ref.getValue()); + if (domainList.end() != it) domAxisScalarIds_[0] = *it; + } + + if (!axis_ref.isEmpty()) + { + std::vector axisList = cgPtr->getAxisList(); + it = std::find(axisList.begin(), axisList.end(), axis_ref.getValue()); + if (axisList.end() != it) domAxisScalarIds_[1] = *it; + } + + if (!scalar_ref.isEmpty()) + { + std::vector scalarList = cgPtr->getScalarList(); + it = std::find(scalarList.begin(), scalarList.end(), scalar_ref.getValue()); + if (scalarList.end() != it) domAxisScalarIds_[2] = *it; + } + } + return (domAxisScalarIds_); + } + CATCH_DUMP_ATTR - } - - void CField::makeGridAliasForCoupling(void) - { - grid_->makeAliasForCoupling(this->getId()); - } + CVariable* CField::addVariable(const string& id) + TRY + { + return vVariableGroup->createChild(id); + } + CATCH - //! Client side: Send a message announcing that the grid definition has been received from a coupling context - void CField::sendGridCompleted(void) + CVariableGroup* CField::addVariableGroup(const string& id) TRY { - CEventClient event(getType(),EVENT_ID_GRID_COMPLETED); + return vVariableGroup->createChildGroup(id); + } + CATCH - if (client->isServerLeader()) - { - CMessage msg; - msg<getId(); - for (auto& rank : client->getRanksServerLeader()) event.push(rank,1,msg); - client->sendEvent(event); - } - else client->sendEvent(event); + void CField::setContextClient(CContextClient* contextClient) + TRY + { + CContext* context = CContext::getCurrent(); + client = contextClient; + if (context->hasClient) + { + // A grid is sent by a client (both for read or write) or by primary server (write only) + if (context->hasServer) + { + if (file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write)) + grid->setContextClient(contextClient); + } + else + grid->setContextClient(contextClient); + } } CATCH_DUMP_ATTR - //! Server side: Receive a message announcing that the grid definition has been received from a coupling context - void CField::recvGridCompleted(CEventServer& event) + CContextClient* CField::getContextClient() TRY { - CBufferIn* buffer=event.subEvents.begin()->buffer; - string id; - *buffer>>id ; - get(id)->recvGridCompleted(*buffer); + return client; } CATCH - //! Server side: Receive a message message announcing that the grid definition has been received from a coupling context - void CField::recvGridCompleted(CBufferIn& buffer) + void CField::sendAddAllVariables(CContextClient* client) TRY { - setGridCompleted() ; + std::vector allVar = getAllVariables(); + std::vector::const_iterator it = allVar.begin(); + std::vector::const_iterator itE = allVar.end(); + + for (; it != itE; ++it) + { + this->sendAddVariable((*it)->getId(), client); + (*it)->sendAllAttributesToServer(client); + (*it)->sendValue(client); + } } CATCH_DUMP_ATTR - bool CField::isGridCompleted(void) - TRY - { - bool isFullCompleted ; - MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ; - if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ; - return isFullCompleted ; - } - CATCH_DUMP_ATTR - - void CField::sendAddAllVariables(CContextClient* client) - TRY - { - std::vector allVar = getAllVariables(); - std::vector::const_iterator it = allVar.begin(); - std::vector::const_iterator itE = allVar.end(); - - for (; it != itE; ++it) - { - this->sendAddVariable((*it)->getId(), client); - (*it)->sendAllAttributesToServer(client); - (*it)->sendValue(client); - } - } - CATCH_DUMP_ATTR - - /*! - * Send all Attributes to server. This method is overloaded, since only grid_ref attribute - * must be sent to server and not domain_ref/axis_ref/scalar_ref. - */ + /*! + * Send all Attributes to server. This method is overloaded, since only grid_ref attribute + * must be sent to server and not domain_ref/axis_ref/scalar_ref. + */ - void CField::sendAllAttributesToServer(CContextClient* client) - TRY - { - if (grid_ref.isEmpty()) - { - grid_ref=sentGrid_->getId() ; - SuperClass::sendAllAttributesToServer(client) ; - domain_ref.reset() ; - axis_ref.reset() ; - scalar_ref.reset() ; - grid_ref.reset(); - } - else - { - string tmp = grid_ref; - grid_ref = sentGrid_->getId() ; - SuperClass::sendAllAttributesToServer(client) ; - grid_ref = tmp ; - } - } - CATCH_DUMP_ATTR + void CField::sendAllAttributesToServer(CContextClient* client) + TRY + { + if (grid_ref.isEmpty()) + { + grid_ref=grid->getId() ; + SuperClass::sendAllAttributesToServer(client) ; + grid_ref.reset(); + } + else SuperClass::sendAllAttributesToServer(client) ; + } + CATCH_DUMP_ATTR - void CField::sendAddVariable(const string& id, CContextClient* client) - TRY - { - sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client); - } - CATCH_DUMP_ATTR + void CField::sendAddVariable(const string& id, CContextClient* client) + TRY + { + sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client); + } + CATCH_DUMP_ATTR - void CField::sendAddVariableGroup(const string& id, CContextClient* client) - TRY - { - sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP, client); - } - CATCH_DUMP_ATTR + void CField::sendAddVariableGroup(const string& id, CContextClient* client) + TRY + { + sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP, client); + } + CATCH_DUMP_ATTR - void CField::recvAddVariable(CEventServer& event) - TRY - { - CBufferIn* buffer = event.subEvents.begin()->buffer; - string id; - *buffer >> id; - get(id)->recvAddVariable(*buffer); - } - CATCH + void CField::recvAddVariable(CEventServer& event) + TRY + { - void CField::recvAddVariable(CBufferIn& buffer) - TRY - { - string id; - buffer >> id; - addVariable(id); - } - CATCH_DUMP_ATTR + CBufferIn* buffer = event.subEvents.begin()->buffer; + string id; + *buffer >> id; + get(id)->recvAddVariable(*buffer); + } + CATCH - void CField::recvAddVariableGroup(CEventServer& event) - TRY - { - CBufferIn* buffer = event.subEvents.begin()->buffer; - string id; - *buffer >> id; - get(id)->recvAddVariableGroup(*buffer); - } - CATCH + void CField::recvAddVariable(CBufferIn& buffer) + TRY + { + string id; + buffer >> id; + addVariable(id); + } + CATCH_DUMP_ATTR - void CField::recvAddVariableGroup(CBufferIn& buffer) - TRY - { - string id; - buffer >> id; - addVariableGroup(id); - } - CATCH_DUMP_ATTR + void CField::recvAddVariableGroup(CEventServer& event) + TRY + { - /*! - * Check on freq_off and freq_op attributes. - */ - void CField::checkTimeAttributes(CDuration* freqOp) - TRY - { - if (hasFileIn() && !(operation.getValue() == "instant" || operation.getValue() == "once") ) - ERROR("void CField::checkTimeAttributes(void)", - << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl - << "Currently only \"instant\" is supported for fields read from file.") + CBufferIn* buffer = event.subEvents.begin()->buffer; + string id; + *buffer >> id; + get(id)->recvAddVariableGroup(*buffer); + } + CATCH - if (freq_op.isEmpty()) - { - if (operation.getValue() == "instant") - { - if (hasFileIn() || hasFileOut()) freq_op.setValue(getRelFile()->output_freq.getValue()); - else freq_op=*freqOp ; - } - else freq_op.setValue(TimeStep); - } - if (freq_offset.isEmpty()) freq_offset.setValue(hasFileIn() ? NoneDu : (freq_op.getValue() - TimeStep)); - } - CATCH_DUMP_ATTR + void CField::recvAddVariableGroup(CBufferIn& buffer) + TRY + { + string id; + buffer >> id; + addVariableGroup(id); + } + CATCH_DUMP_ATTR - /*! - * Returns string arithmetic expression associated to the field. - * \return if content is defined return content string, otherwise, if "expr" attribute is defined, return expr string. - */ - const string& CField::getExpression(void) - TRY - { - if (!expr.isEmpty() && content.empty()) - { - content = expr; - expr.reset(); - } + /*! + * Check on freq_off and freq_op attributes. + */ + void CField::checkTimeAttributes(CDuration* freqOp) + TRY + { + bool isFieldRead = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read; + bool isFieldWrite = file && ( file->mode.isEmpty() || file->mode == CFile::mode_attr::write); + if (isFieldRead && !(operation.getValue() == "instant" || operation.getValue() == "once") ) + ERROR("void CField::checkTimeAttributes(void)", + << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl + << "Currently only \"instant\" is supported for fields read from file.") + + if (freq_op.isEmpty()) + { + if (operation.getValue() == "instant") + { + if (isFieldRead || isFieldWrite) freq_op.setValue(file->output_freq.getValue()); + else freq_op=*freqOp ; + } + else + freq_op.setValue(TimeStep); + } + else + { + //if(file->output_freq.getValue() < freq_op.getValue()) + if((isFieldRead || isFieldWrite) && (file!=nullptr) && (freq_op.getValue() > file->output_freq.getValue() )) + { + ERROR("void CField::checkTimeAttributes(void)", + << "output file has output_freq < freq_op" << std::endl + << "field_id = "<< getId() << std::endl + << "file_id = "<< file->getId() << std::endl + << "output_freq = "<< file->output_freq.getValue() << std::endl + << "freq_op = "<< freq_op.getValue() << std::endl) + } + } + if (freq_offset.isEmpty()) + freq_offset.setValue(isFieldRead ? NoneDu : (freq_op.getValue() - TimeStep)); + } + CATCH_DUMP_ATTR - return content; - } - CATCH_DUMP_ATTR + /*! + * Returns string arithmetic expression associated to the field. + * \return if content is defined return content string, otherwise, if "expr" attribute is defined, return expr string. + */ + const string& CField::getExpression(void) + TRY + { + if (!expr.isEmpty() && content.empty()) + { + content = expr; + expr.reset(); + } - bool CField::hasExpression(void) const - TRY - { - return (!expr.isEmpty() || !content.empty()); - } - CATCH + return content; + } + CATCH_DUMP_ATTR - bool CField::hasGridMask(void) const - TRY - { - return (this->grid_->hasMask()); - } - CATCH + bool CField::hasExpression(void) const + TRY + { + return (!expr.isEmpty() || !content.empty()); + } + CATCH + + bool CField::hasGridMask(void) const + TRY + { + return (this->grid->hasMask()); + } + CATCH - DEFINE_REF_FUNC(Field,field) + DEFINE_REF_FUNC(Field,field) } // namespace xios diff --git a/xios_2311_src/src/node/field.hpp b/xios_2311_src/src/node/field.hpp index e765d2b9..6f8568c6 100755 --- a/xios_2311_src/src/node/field.hpp +++ b/xios_2311_src/src/node/field.hpp @@ -6,6 +6,7 @@ #include "group_factory.hpp" #include "functor.hpp" #include "functor_type.hpp" +#include "filter.hpp" #include "duration.hpp" #include "date.hpp" #include "declare_group.hpp" @@ -16,24 +17,9 @@ #include "transformation_enum.hpp" #include "variable.hpp" #include "context_client.hpp" -#include "pass_through_filter.hpp" -#include "temporal_filter.hpp" -#include "model_to_client_source_filter.hpp" -#include "client_from_client_source_filter.hpp" -#include "client_from_server_source_filter.hpp" -#include "client_to_model_store_filter.hpp" -#include "server_to_client_store_filter.hpp" -#include "server_from_client_source_filter.hpp" -#include "file_writer_store_filter.hpp" -#include "client_to_server_store_filter.hpp" -#include "file_reader_source_filter.hpp" - - - -namespace xios -{ +namespace xios { /// ////////////////////// Déclarations ////////////////////// /// @@ -42,19 +28,17 @@ namespace xios class CField; class CFile; - class CCouplerIn ; - class CCouplerOut ; class CGrid; class CContext; class CGenericFilter; - class CDomain ; - class CAxis ; - class CScalar ; class CGarbageCollector; class COutputPin; class CSourceFilter; - class CServerToClientFilter; + class CStoreFilter; + class CFileWriterFilter; + class CFileServerWriterFilter; + ///-------------------------------------------------------------- // Declare/Define CFieldAttribute @@ -62,8 +46,6 @@ namespace xios # include "field_attribute.conf" END_DECLARE_ATTRIBUTE_MAP(CField) - class CContextClient ; - ///-------------------------------------------------------------- class CField : public CObjectTemplate @@ -76,7 +58,6 @@ namespace xios typedef CObjectTemplate SuperClass; typedef CFieldAttributes SuperClassAttribute; - public : enum EReadField { RF_NODATA, RF_EOF, RF_DATA @@ -90,7 +71,7 @@ namespace xios enum EEventId { EVENT_ID_UPDATE_DATA, EVENT_ID_READ_DATA, EVENT_ID_READ_DATA_READY, - EVENT_ID_ADD_VARIABLE, EVENT_ID_ADD_VARIABLE_GROUP, EVENT_ID_GRID_COMPLETED + EVENT_ID_ADD_VARIABLE, EVENT_ID_ADD_VARIABLE_GROUP }; /// Constructeurs /// @@ -103,24 +84,29 @@ namespace xios CGrid* getRelGrid(void) const; CFile* getRelFile(void) const; - CGrid* getAssociatedGrid(void) const ; - CDomain* getAssociatedDomain(const std::string& domainId, bool noError=false) const; - CAxis* getAssociatedAxis(const std::string& axisId, bool noError=false) const; - CScalar* getAssociatedScalar(const std::string& scalarId, bool noError=false) const; func::CFunctor::ETimeType getOperationTimeType() const; public: + int getNStep(void) const; + template void getData(CArray& _data) const; + std::shared_ptr getInstantDataFilter(); + + /// Mutateur /// + void setRelFile(CFile* _file); + void incrementNStep(void); + void resetNStep(int nstep = 0); + void resetNStepMax(); + std::map getGridAttributesBufferSize(CContextClient* client, bool bufferForWriting = false); // Grid data buffer size for each connection of contextclient std::map getGridDataBufferSize(CContextClient* client, bool bufferForWriting = false); - - // evaluation the size of the buffer for the field - bool evaluateBufferSize(map>& evaluateBuffer, bool isOptPerformance) ; - public: - void makeGridAliasForCoupling(void) ; + + void setContextClient(CContextClient* newContextClient); + CContextClient* getContextClient(); + public: bool isActive(bool atCurrentTimestep = false) const; bool hasOutputFile; @@ -135,34 +121,30 @@ namespace xios void solveGridReference(void); void solveServerOperation(void); void solveCheckMaskIndex(bool doSendingIndex); + void solveAllReferenceEnabledField(bool doSending2Server); + void solveOnlyReferenceEnabledField(bool doSending2Server); + void generateNewTransformationGridDest(); + void updateRef(CGrid* grid); + void buildGridTransformationGraph(); void solveGridDomainAxisRef(bool checkAtt); + void solveTransformedGrid(); + void solveGenerateGrid(); void solveGridDomainAxisBaseRef(); + void solveAllEnabledFieldsAndTransform(); void checkGridOfEnabledFields(); void sendGridOfEnabledFields(); void sendGridComponentOfEnabledFields(); - void sendFieldToFileServer(void) ; - void sendCloseDefinition(void) ; - - public: - void sendFieldToCouplerOut(void) ; - private: - bool sendFieldToCouplerOut_done_=false; - public: - - void sendFieldToInputFileServer(void) ; - /// Vérifications /// void checkTimeAttributes(CDuration* freqOp=NULL); - bool buildWorkflowGraph(CGarbageCollector& gc) ; - bool buildWorkflowGraphDone_ = false ; - + void buildFilterGraph(CGarbageCollector& gc, bool enableOutput, Time start_graph=-1, Time end_graph=-1); size_t getGlobalWrittenSize(void) ; - std::shared_ptr getSelfReference(CGarbageCollector& gc); + std::shared_ptr getFieldReference(CGarbageCollector& gc, Time start_graph=-1, Time end_graph=-1); + std::shared_ptr getSelfReference(CGarbageCollector& gc, Time start_graph=-1, Time end_graph=-1); std::shared_ptr getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq); std::shared_ptr getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq); @@ -177,29 +159,33 @@ namespace xios static ENodeType GetType(void); - template void setData(const CArray& _data); + template void setData(const CArray& _data, int ntile = -1); static bool dispatchEvent(CEventServer& event); - static bool isCollectiveEvent(CEventServer& event); void sendAllAttributesToServer(CContextClient* client) ; - + void sendUpdateData(const CArray& data); + void sendUpdateData(const CArray& data, CContextClient* client); static void recvUpdateData(CEventServer& event); - void receiveUpdateData(CEventServer& event); - + void recvUpdateData(std::map& rankBuffers); + void writeField(void); bool sendReadDataRequest(const CDate& tsDataRequested); bool sendReadDataRequestIfNeeded(void); static void recvReadDataRequest(CEventServer& event); void recvReadDataRequest(void); + EReadField readField(void); static void recvReadDataReady(CEventServer& event); - void receiveReadDataReady(CEventServer& event); - void recvReadDataReady(vector ranks, vector buffers); // old interface to remove - void recvDataFromCoupler(vector ranks, vector buffers) ; // old interface to remove + void recvReadDataReady(vector ranks, vector buffers); void checkForLateDataFromServer(void); - void checkForLateDataFromCoupler(void) ; - - void checkIfMustAutoTrigger(void); // ym obsolete - void autoTriggerIfNeeded(void); //ym obsolete - void triggerLateField(void) ; - + void checkIfMustAutoTrigger(void); + void autoTriggerIfNeeded(void); + void outputField(CArray& fieldOut); + void outputField(CArray& fieldOut); + void outputField(CArray& fieldOut); + void inputField(CArray& fieldOut); + void inputField(CArray& fieldOut); + void inputField(CArray& fieldOut); + void outputCompressedField(CArray& fieldOut); + void scaleFactorAddOffset(double scaleFactor, double addOffset); + void invertScaleFactorAddOffset(double scaleFactor, double addOffset); void parse(xml::CXMLNode& node); void setVirtualVariableGroup(CVariableGroup* newVVariableGroup); @@ -216,6 +202,7 @@ namespace xios static void recvAddVariableGroup(CEventServer& event); void recvAddVariableGroup(CBufferIn& buffer); void sendAddAllVariables(CContextClient* client); + void writeUpdateData(const CArray& data); const std::vector& getRefDomainAxisIds(); @@ -223,94 +210,30 @@ namespace xios bool hasExpression(void) const; bool hasGridMask(void) const; - - void connectToFileServer(CGarbageCollector& gc) ; - void connectToCouplerOut(CGarbageCollector& gc) ; - void connectToCouplerIn(CGarbageCollector& gc) ; - void connectToModelInput(CGarbageCollector& gc) ; - void connectToFileWriter(CGarbageCollector& gc) ; - void connectToClientInput(CGarbageCollector& gc) ; - void connectToServerInput(CGarbageCollector& gc) ; - void connectToModelOutput(CGarbageCollector& gc); - void connectToFileReader(CGarbageCollector& gc) ; - void connectToServerToClient(CGarbageCollector& gc) ; - - void setContextClientDataBufferSize(map>& bufferSize, - map>& maxEventSize, - bool bufferForWriting) ; - void setContextClientAttributesBufferSize(map>& bufferSize, - map>& maxEventSize, - bool bufferForWriting) ; - private: - bool isGridCompleted_ = true ; - public: - bool isGridCompleted() ; - void setGridCompleted(void) { isGridCompleted_= true; } - void unsetGridCompleted(void) { isGridCompleted_ = false ;} - - public: - void sendGridCompleted(void) ; - private: - static void recvGridCompleted(CEventServer& event); - void recvGridCompleted(CBufferIn& buffer); - - - private: - std::vector getGridPath(void) ; public: /// Propriétés privées /// CVariableGroup* vVariableGroup; - CGrid* grid_=nullptr; - CGrid* getGrid(void) { return grid_; } - - private: - CGrid* sentGrid_=nullptr ; - public: - CGrid* getSentGrid(void) { return sentGrid_; } + CGrid* grid; + CFile* file; - public: -// CFile* file; - - CFile* fileIn_ = nullptr ; // > foperation_srv; + + // map > data_srv; + CArray recvDataSrv; + + std::shared_ptr recvFoperationSrv; string content; std::vector domAxisScalarIds_; @@ -320,89 +243,41 @@ namespace xios bool hasTimeInstant; bool hasTimeCentered; + Time field_graph_start; + Time field_graph_end; + DECLARE_REF_FUNC(Field,field) - - private: - CContextClient* client; - public: - void setContextClient(CContextClient* newContextClient); - CContextClient* getContextClient(void) {return client;} private: + CContextClient* client; bool areAllReferenceSolved; bool isReferenceSolved; bool isReferenceSolvedAndTransformed; bool isGridChecked; - - private: - //! define if the field is part of the active workflow. It will be tagged to true when CField::buildWorkflowGraph is successfull - bool workflowEnabled_ = false ; - public: - /*! workflowEnabled_ public accessor - * \return Value of workflowEnabled_ */ - bool getWorkflowEnabled(void) { return workflowEnabled_; } - + bool nstepMaxRead; private: - //! The type of operation attached to the field func::CFunctor::ETimeType operationTimeType; - //! The output pin of the input filter of the field - std::shared_ptr inputFilter; - - //! The self temporal data filter - std::shared_ptr selfTemporalDataFilter ; - //! The output pin of the filter providing the instant data for the field std::shared_ptr instantDataFilter; - public: - std::shared_ptr getInstantDataFilter(void) { return instantDataFilter;} - - private: - //! The output pin of the filters providing the result of the field's temporal operation std::map, DurationFakeLessComparator> temporalDataFilters; - //! The output pin of the filter providing the instant data for self references - std::shared_ptr selfReferenceFilter; // probably redondant with inputFilter - + std::shared_ptr selfReferenceFilter; //! The source filter for data provided by the client -// std::shared_ptr clientSourceFilter; // obsolete to remove - - //! The source filter for data provided by the model to enter the client workflow - std::shared_ptr modelToClientSourceFilter_; - - //! The source filter for data provided by the model to enter the client workflow - std::shared_ptr clientToModelStoreFilter_; - - //! The source filter for data provided by the client that send data to server workflow - std::shared_ptr serverFromClientSourceFilter_; - - //! The source filter for data provided by an other to enter the current client workflow (coupling mode) - std::shared_ptr clientFromClientSourceFilter_; - - //! The source filter for data provided by server to enter the current client workflow (reading mode) - std::shared_ptr clientFromServerSourceFilter_; - - //! The source filter for data read from file on server side - std::shared_ptr fileReaderSourceFilter_; - + std::shared_ptr clientSourceFilter; //! The source filter for data provided by the server -// std::shared_ptr serverSourceFilter; // obsolete to remove - - //! The terminal filter which send data to server for writing - std::shared_ptr clientToServerStoreFilter_; - + std::shared_ptr serverSourceFilter; + //! The terminal filter which stores the instant data + std::shared_ptr storeFilter; + //! The terminal filter which writes the data to file + std::shared_ptr fileWriterFilter; //! The terminal filter which writes data to file - std::shared_ptr fileWriterStoreFilter_; - - //! The terminal filter which send data from server to client - std::shared_ptr serverToClientStoreFilter_; - - + std::shared_ptr fileServerWriterFilter; }; // class CField ///-------------------------------------------------------------- diff --git a/xios_2311_src/src/node/field_decl.cpp b/xios_2311_src/src/node/field_decl.cpp index 1854c173..bfbc1a79 100644 --- a/xios_2311_src/src/node/field_decl.cpp +++ b/xios_2311_src/src/node/field_decl.cpp @@ -2,13 +2,13 @@ namespace xios { - template void CField::setData<1>(const CArray& _data); - template void CField::setData<2>(const CArray& _data); - template void CField::setData<3>(const CArray& _data); - template void CField::setData<4>(const CArray& _data); - template void CField::setData<5>(const CArray& _data); - template void CField::setData<6>(const CArray& _data); - template void CField::setData<7>(const CArray& _data); + template void CField::setData<1>(const CArray& _data, int ntile); + template void CField::setData<2>(const CArray& _data, int ntile); + template void CField::setData<3>(const CArray& _data, int ntile); + template void CField::setData<4>(const CArray& _data, int ntile); + template void CField::setData<5>(const CArray& _data, int ntile); + template void CField::setData<6>(const CArray& _data, int ntile); + template void CField::setData<7>(const CArray& _data, int ntile); template void CField::getData<1>(CArray& _data) const; template void CField::getData<2>(CArray& _data) const; diff --git a/xios_2311_src/src/node/field_impl.hpp b/xios_2311_src/src/node/field_impl.hpp index a79a7f23..af7d223e 100644 --- a/xios_2311_src/src/node/field_impl.hpp +++ b/xios_2311_src/src/node/field_impl.hpp @@ -8,18 +8,23 @@ #include "grid.hpp" #include "timer.hpp" #include "array_new.hpp" +#include "source_filter.hpp" +#include "store_filter.hpp" namespace xios { template - void CField::setData(const CArray& _data) + void CField::setData(const CArray& _data, int tileid) TRY { - if (modelToClientSourceFilter_) + if (clientSourceFilter) { if (check_if_active.isEmpty() || (!check_if_active.isEmpty() && (!check_if_active) || isActive(true))) - modelToClientSourceFilter_->streamData(CContext::getCurrent()->getCalendar()->getCurrentDate(), _data); + if (tileid > -1) + clientSourceFilter->streamTile(CContext::getCurrent()->getCalendar()->getCurrentDate(), _data, tileid); // tiled domain + else + clientSourceFilter->streamData(CContext::getCurrent()->getCalendar()->getCurrentDate(), _data); } else if (instantDataFilter) ERROR("void CField::setData(const CArray& _data)", @@ -31,9 +36,9 @@ namespace xios { void CField::getData(CArray& _data) const TRY { - if (clientToModelStoreFilter_) + if (storeFilter) { - CDataPacket::StatusCode status = clientToModelStoreFilter_->getData(CContext::getCurrent()->getCalendar()->getCurrentDate(), _data); + CDataPacket::StatusCode status = storeFilter->getData(CContext::getCurrent()->getCalendar()->getCurrentDate(), _data); if (status == CDataPacket::END_OF_STREAM) ERROR("void CField::getData(CArray& _data) const", diff --git a/xios_2311_src/src/node/file.cpp b/xios_2311_src/src/node/file.cpp index fe1a4b4a..ab15526a 100644 --- a/xios_2311_src/src/node/file.cpp +++ b/xios_2311_src/src/node/file.cpp @@ -144,9 +144,11 @@ namespace xios { bool default_enabled) TRY { - if (!this->enabledFields.empty()) return (this->enabledFields); + if (!this->enabledFields.empty()) + return (this->enabledFields); - const int _outputlevel = (!output_level.isEmpty()) ? output_level.getValue() : default_outputlevel; + const int _outputlevel = + (!output_level.isEmpty()) ? output_level.getValue() : default_outputlevel; std::vector::iterator it; this->enabledFields = this->getAllFields(); @@ -173,6 +175,8 @@ namespace xios { } newEnabledFields.push_back(*it); + // Le champ est finalement actif, on y ajoute la rfrence au champ de base. + (*it)->setRelFile(CFile::get(this)); } enabledFields = newEnabledFields; @@ -221,6 +225,7 @@ namespace xios { { CContext* context = CContext::getCurrent(); const CDate& currentDate = context->calendar->getCurrentDate(); + CContextServer* server = context->server; lastSync = currentDate; lastSplit = currentDate; @@ -239,6 +244,11 @@ namespace xios { } isOpen = false; +// if (!record_offset.isEmpty() && record_offset < 0) +// ERROR("void CFile::initFile(void)", +// "Invalid 'record_offset', this attribute cannot be negative."); + const int recordOffset = record_offset.isEmpty() ? 0 : record_offset; + set setAxis; set setDomains; @@ -246,20 +256,22 @@ namespace xios { for (it = this->enabledFields.begin(); it != end; it++) { CField* field = *it; - std::vector vecAxis = field->getGrid()->getAxis(); + std::vector vecAxis = field->grid->getAxis(); for (size_t i = 0; i < vecAxis.size(); ++i) setAxis.insert(vecAxis[i]->getAxisOutputName()); - std::vector vecDomains = field->getGrid()->getDomains(); + std::vector vecDomains = field->grid->getDomains(); for (size_t i = 0; i < vecDomains.size(); ++i) setDomains.insert(vecDomains[i]->getDomainOutputName()); + + field->resetNStep(recordOffset); } nbAxis = setAxis.size(); nbDomains = setDomains.size(); // create sub communicator for file - //createSubComFile(); // NetCDF runs now write of null data - MPI_Comm_dup(context->intraComm_, &fileComm) ; + createSubComFile(); + // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; } CATCH_DUMP_ATTR @@ -268,23 +280,20 @@ namespace xios { void CFile::initRead(void) TRY { - CContext* context = CContext::getCurrent(); if (checkRead) return; - //createSubComFile(); - allZoneEmpty = false; - MPI_Comm_dup(context->intraComm_, &fileComm) ; + createSubComFile(); checkRead = true; } CATCH_DUMP_ATTR /*! Create a sub communicator in which processes participate in reading/opening file - Seems to be deprecated (allZoneEmpty too, which is always false) */ void CFile::createSubComFile() TRY { CContext* context = CContext::getCurrent(); + CContextServer* server = context->server; // create sub communicator for file allZoneEmpty = true; @@ -292,12 +301,12 @@ namespace xios { for (it = this->enabledFields.begin(); it != end; it++) { CField* field = *it; - bool nullGrid = (nullptr == field->getGrid()); - allZoneEmpty &= nullGrid ? false : !field->getGrid()->doGridHaveDataToWrite(); + bool nullGrid = (0 == field->grid); + allZoneEmpty &= nullGrid ? false : !field->grid->doGridHaveDataToWrite(); } int color = allZoneEmpty ? 0 : 1; - MPI_Comm_split(context->intraComm_, color, context->intraCommRank_, &fileComm); + MPI_Comm_split(server->intraComm, color, server->intraCommRank, &fileComm); if (allZoneEmpty) MPI_Comm_free(&fileComm); } CATCH_DUMP_ATTR @@ -311,15 +320,19 @@ namespace xios { TRY { CContext* context = CContext::getCurrent(); - - if (mode.isEmpty() || mode.getValue() == mode_attr::write) + // Done by classical server or secondary server + // This condition should be changed soon + if (CServer::serverLevel == 0 || CServer::serverLevel == 2) { - CTimer::get("Files : create headers").resume(); - if (!isOpen) createHeader(); - CTimer::get("Files : create headers").suspend(); - checkSync(); - } - checkSplit(); + if (mode.isEmpty() || mode.getValue() == mode_attr::write) + { + CTimer::get("Files : create headers").resume(); + if (!isOpen) createHeader(); + CTimer::get("Files : create headers").suspend(); + checkSync(); + } + checkSplit(); // REally need this? + } } CATCH_DUMP_ATTR @@ -335,11 +348,8 @@ namespace xios { CContext* context = CContext::getCurrent(); // Done by classical server or secondary server // TODO: This condition should be changed soon. It only works with maximum number of level as 2 - -//ym if (CServer::serverLevel == 0 || CServer::serverLevel == 1) -// ym client must doing it also -// if (context->getServiceType()==CServicesManager::IO_SERVER || context->getServiceType()==CServicesManager::GATHERER) -// { + if (CServer::serverLevel == 0 || CServer::serverLevel == 1) + { if (!mode.isEmpty() && mode.getValue() == mode_attr::read) { CTimer::get("Files : open headers").resume(); @@ -349,7 +359,7 @@ namespace xios { CTimer::get("Files : open headers").suspend(); } //checkSplit(); // Really need for reading? - // } + } } CATCH_DUMP_ATTR @@ -405,11 +415,11 @@ namespace xios { { lastSplit = lastSplit + split_freq.getValue(); std::vector::iterator it, end = this->enabledFields.end(); -/* for (it = this->enabledFields.begin(); it != end; it++) + for (it = this->enabledFields.begin(); it != end; it++) { (*it)->resetNStep(); (*it)->resetNStepMax(); - }*/ + } if (mode.isEmpty() || mode.getValue() == mode_attr::write) createHeader(); else @@ -421,7 +431,6 @@ namespace xios { } CATCH_DUMP_ATTR - /*! \brief Create header of netcdf file There are some information to fill in header of each netcdf. @@ -430,7 +439,8 @@ namespace xios { TRY { CContext* context = CContext::getCurrent(); - + CContextServer* server = context->server; + if (!allZoneEmpty) { StdString filename = getFileOutputName(); @@ -546,7 +556,7 @@ namespace xios { MPI_Comm_size(fileComm, &commSize); MPI_Comm_rank(fileComm, &commRank); - if (context->intraCommSize_ > 1) + if (commSize > 1) { oss << "_" ; int width=0; int n = commSize-1; @@ -622,6 +632,7 @@ namespace xios { TRY { CContext* context = CContext::getCurrent(); + CContextServer* server = context->server; MPI_Comm readComm = this->fileComm; if (!allZoneEmpty) @@ -668,7 +679,7 @@ namespace xios { MPI_Comm_size(readComm, &commSize); MPI_Comm_rank(readComm, &commRank); - if (context->intraCommSize_ > 1) + if (server->intraCommSize > 1) { oss << "_"; int width = 0, n = commSize - 1; @@ -684,7 +695,7 @@ namespace xios { bool isCollective = par_access.isEmpty() || par_access == par_access_attr::collective; bool readMetaDataPar = true; - if (context->getServiceType()==CServicesManager::CLIENT) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par; + if (!context->hasServer) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par; if (isOpen) data_out->closeFile(); bool ugridConvention = !convention.isEmpty() ? (convention == convention_attr::UGRID) : false; @@ -735,10 +746,7 @@ namespace xios { this->data_in->readFieldAttributesMetaData(enabledFields[idx]); // Now complete domain and axis associated with this field - - //ym => this a problem in wich order are done the grid generation. Probably metadata are read in file and after the grid is ditributed by the filter - // => must be checked in detail. But solveGenerated grid is not existing any more with new transformation framework - // enabledFields[idx]->solveGenerateGrid(); + enabledFields[idx]->solveGenerateGrid(); // Read necessary value from file this->data_in->readFieldAttributesValues(enabledFields[idx]); @@ -752,15 +760,6 @@ namespace xios { } CATCH_DUMP_ATTR - void CFile::readFieldAttributesMetaData(CField* field) - { - this->data_in->readFieldAttributesMetaData(field); - } - - void CFile::readFieldAttributesValues(CField* field) - { - this->data_in->readFieldAttributesValues(field); - } /*! \brief Parse xml file and write information into file object \param [in] node xmld node corresponding in xml file @@ -823,6 +822,25 @@ namespace xios { //---------------------------------------------------------------- + /*! + \brief Resolve all reference of active fields. + In order to know exactly which data each active field has, a search for all its + reference to find its parents or/and its base reference object must be done. Moreover + during this search, there are some information that can only be sent to server AFTER + all information of active fields are created on server side, e.g: checking mask or index + \param [in] sendToServer: Send all info to server (true) or only a part of it (false) + */ + void CFile::solveOnlyRefOfEnabledFields(bool sendToServer) + TRY + { + int size = this->enabledFields.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFields[i]->solveOnlyReferenceEnabledField(sendToServer); + } + } + CATCH_DUMP_ATTR + void CFile::checkGridOfEnabledFields() TRY { @@ -848,6 +866,8 @@ namespace xios { /*! \brief Sorting domains with the same name (= describing the same mesh) in the decreasing order of nvertex for UGRID files. This insures that the domain with the highest nvertex is written first and thus all known mesh connectivity is generated at once by this domain. + Secondly, we associate the UGRID mesh to the domain in incresing order, i.e. nvertex=1 first, nvertex=2 and then nvertex>2. + In this case the connectivity of each component of the mesh (node, edge and face) are fully coherent. */ void CFile::sortEnabledFieldsForUgrid() TRY @@ -855,6 +875,7 @@ namespace xios { int size = this->enabledFields.size(); std::vector domainNvertices; std::vector domainNames; + std::map,set,set>> registeredDomains ; for (int i = 0; i < size; ++i) { @@ -897,6 +918,58 @@ namespace xios { domainNames.push_back(domainName); domainNvertices.push_back(nvertex); } + + if (nvertex==1) std::get<0>(registeredDomains[domainName]).insert(domain[0]) ; + else if (nvertex==2) std::get<1>(registeredDomains[domainName]).insert(domain[0]) ; + else std::get<2>(registeredDomains[domainName]).insert(domain[0]) ; + } + + for(auto& it:registeredDomains) + { + list domains ; + string domainName=it.first ; + + for(auto& domain : std::get<0>(it.second) ) domains.push_back(domain) ; + for(auto& domain : std::get<1>(it.second) ) domains.push_back(domain) ; + for(auto& domain : std::get<2>(it.second) ) domains.push_back(domain) ; + + // for each component of a given mesh (i.e. domains with same name but different number of vertices) + // associate the UGRID mesh in increasing order + for(auto& domain : domains ) + { + domain-> computeWrittenIndex(); + CArray& indexToWrite = domain->localIndexToWriteOnServer; + int nbWritten = indexToWrite.numElements(); + CArray writtenLat, writtenLon; + CArray writtenBndsLat, writtenBndsLon; + + writtenLat.resize(nbWritten); + writtenLon.resize(nbWritten); + for (int idx = 0; idx < nbWritten; ++idx) + { + writtenLat(idx) = domain->latvalue(indexToWrite(idx)); + writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); + } + + int nvertex = domain->nvertex, idx; + if (nvertex>1) + { + writtenBndsLat.resize(nvertex, nbWritten); + writtenBndsLon.resize(nvertex, nbWritten); + CArray& boundslat = domain->bounds_latvalue; + CArray& boundslon = domain->bounds_lonvalue; + for (idx = 0; idx < nbWritten; ++idx) + for (int nv = 0; nv < nvertex; ++nv) + { + writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); + writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); + } + } + domain->assignMesh(domainName, domain->nvertex); + CContextServer* server=CContext::getCurrent()->server ; + domain->mesh->createMeshEpsilon(server->intraComm, writtenLon, writtenLat, writtenBndsLon, writtenBndsLat); + } + } } CATCH_DUMP_ATTR @@ -912,6 +985,51 @@ namespace xios { } CATCH_DUMP_ATTR + void CFile::generateNewTransformationGridDest() + TRY + { + int size = this->enabledFields.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFields[i]->generateNewTransformationGridDest(); + } + } + CATCH_DUMP_ATTR + + /*! + \brief Resolve all reference of active fields. + In order to know exactly which data each active field has, a search for all its + reference to find its parents or/and its base reference object must be done. Moreover + during this search, there are some information that can only be sent to server AFTER + all information of active fields are created on server side, e.g: checking mask or index + \param [in] sendToServer: Send all info to server (true) or only a part of it (false) + */ + void CFile::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer) + TRY + { + int size = this->enabledFields.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFields[i]->solveAllEnabledFieldsAndTransform(); + } + } + CATCH_DUMP_ATTR + + /*! + * Constructs the filter graph for each active field. + * + * \param gc the garbage collector to use when building the filter graph + */ + void CFile::buildFilterGraphOfEnabledFields(CGarbageCollector& gc) + TRY + { + int size = this->enabledFields.size(); + for (int i = 0; i < size; ++i) + { + this->enabledFields[i]->buildFilterGraph(gc, true); + } + } + CATCH_DUMP_ATTR /*! * Post-process the filter graph for each active field. @@ -1286,26 +1404,6 @@ namespace xios { } CATCH_DUMP_ATTR - - - /*! - * Send file attribute, related variable and chield field tree to a given file server. - * \param[in] client : the context client where to send file - */ - void CFile::sendFileToFileServer(CContextClient* client) - TRY - { - if (sendFileToFileServer_done_.count(client)!=0) return ; - else sendFileToFileServer_done_.insert(client) ; - - StdString fileDefRoot("file_definition"); - CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); - cfgrpPtr->sendCreateChild(this->getId(), client); - this->sendAllAttributesToServer(client); - this->sendAddAllVariables(client); - for(auto field : enabledFields) this->sendAddField(field->getId(), client); - } - CATCH_DUMP_ATTR /*! \brief Dispatch event received from client Whenever a message is received in buffer of server, it will be processed depending on diff --git a/xios_2311_src/src/node/file.hpp b/xios_2311_src/src/node/file.hpp index 8aa8c31d..47079c2f 100644 --- a/xios_2311_src/src/node/file.hpp +++ b/xios_2311_src/src/node/file.hpp @@ -103,17 +103,20 @@ namespace xios { void openInReadMode(void); void close(void); void readAttributesOfEnabledFieldsInReadMode(); - void readFieldAttributesMetaData(CField* field) ; - void readFieldAttributesValues(CField* field) ; + // Some processing on file void solveFieldRefInheritance(bool apply); void processEnabledFile(void); + void solveOnlyRefOfEnabledFields(bool sendToServer); + void generateNewTransformationGridDest(); + void buildFilterGraphOfEnabledFields(CGarbageCollector& gc); void postProcessFilterGraph(); void prefetchEnabledReadModeFields(); void doPreTimestepOperationsForEnabledReadModeFields(); void doPostTimestepOperationsForEnabledReadModeFields(); + void solveAllRefOfEnabledFieldsAndTransform(bool sendToServer); void checkGridOfEnabledFields(); void sendGridOfEnabledFields(); void sendGridComponentOfEnabledFields(); @@ -138,12 +141,7 @@ namespace xios { void sendAddVariable(const string& id, CContextClient* client); void sendAddVariableGroup(const string& id, CContextClient* client); void sendAddAllVariables(CContextClient* client); - public: - void sendFileToFileServer(CContextClient* client) ; - private: - std::set sendFileToFileServer_done_ ; - - public: + // Receive info from client static void recvAddField(CEventServer& event); void recvAddField(CBufferIn& buffer); @@ -174,9 +172,6 @@ namespace xios { CDate lastSync; CDate lastSplit; - - const CDate& getLastSplit(void) { return lastSplit ; } - int nbAxis, nbDomains; bool isOpen; MPI_Comm fileComm; @@ -196,16 +191,6 @@ namespace xios { std::shared_ptr data_in; std::vector enabledFields; - private: - bool isClientSide_ ; // the file is on client side or on server side ? - public: - bool isClientSide(void) { return isClientSide_ ;} - bool isServerSide(void) { return !isClientSide_ ;} - void setClientSide(void) { isClientSide_=true ;} - void setServerSide(void) { isClientSide_=false ;} - - private: - public: // virtual void toBinary (StdOStream& os) const; diff --git a/xios_2311_src/src/node/generate_rectilinear_domain.cpp b/xios_2311_src/src/node/generate_rectilinear_domain.cpp index a2aa81bb..a4134c11 100644 --- a/xios_2311_src/src/node/generate_rectilinear_domain.cpp +++ b/xios_2311_src/src/node/generate_rectilinear_domain.cpp @@ -1,5 +1,4 @@ #include "generate_rectilinear_domain.hpp" -#include "domain_algorithm_generate_rectilinear.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CGenerateRectilinearDomain::_dummyRegistered = CGenerateRectilinearDomain::registerTrans(); bool CGenerateRectilinearDomain::registerTrans() { - return registerTransformation(TRANS_GENERATE_RECTILINEAR_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_GENERATE_RECTILINEAR_DOMAIN, create); } //---------------------------------------------------------------- @@ -138,18 +137,4 @@ namespace xios { } - shared_ptr CGenerateRectilinearDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmGenerateRectilinear::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/generate_rectilinear_domain.hpp b/xios_2311_src/src/node/generate_rectilinear_domain.hpp index abbc22ae..1d209726 100644 --- a/xios_2311_src/src/node/generate_rectilinear_domain.hpp +++ b/xios_2311_src/src/node/generate_rectilinear_domain.hpp @@ -19,8 +19,7 @@ namespace xios { class CGenerateRectilinearDomainAttributes; class CGenerateRectilinearDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CGenerateRectilinearDomainAttributes SuperClassAttribute; - typedef CGenerateRectilinearDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_GENERATE_RECTILINEAR_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/grid.cpp b/xios_2311_src/src/node/grid.cpp index 5f3d4ea0..4b140831 100755 --- a/xios_2311_src/src/node/grid.cpp +++ b/xios_2311_src/src/node/grid.cpp @@ -15,24 +15,11 @@ #include "server_distribution_description.hpp" #include "client_server_mapping_distributed.hpp" #include "distribution_client.hpp" +#include "grid_transformation.hpp" +#include "grid_generate.hpp" #include "server.hpp" -#include "distribution_type.hpp" -#include "grid_client_server_remote_connector.hpp" -#include "grid_elements.hpp" -#include "grid_local_view.hpp" -#include "grid_mask_connector.hpp" -#include "transformation_path.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "transform_filter.hpp" -#include "grid_algorithm.hpp" -#include "grid_algorithm_generic.hpp" -#include "generic_algorithm_transformation.hpp" -#include "algo_types.hpp" - -#include - -namespace xios -{ + +namespace xios { /// ////////////////////// Dfinitions ////////////////////// /// @@ -42,12 +29,18 @@ namespace xios , vDomainGroup_(), domList_(), isDomListSet(false) , vAxisGroup_(), axisList_(), isAxisListSet(false) , vScalarGroup_(), scalarList_(), isScalarListSet(false) - , clientDistribution_(0), isIndexSent(false) + , clientDistribution_(0), isIndexSent(false) , serverDistribution_(0), clientServerMap_(0) + , writtenDataSize_(0), numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) , connectedDataSize_(), connectedServerRank_(), connectedServerRankRead_(), connectedDataSizeRead_() - , isCompressible_(false) + , isDataDistributed_(true), isCompressible_(false) + , transformations_(0), isTransformed_(false) , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) - , gridSrc_(), order_() + , gridSrc_(), hasTransform_(false), isGenerated_(false), order_(), globalIndexOnServer_() + , computedWrittenIndex_(false) , clients() + , nTiles_(0) + , isTiled_(false), isTiledOnly_(false) + , storeTileIndex() { setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); setVirtualAxisGroup(CAxisGroup::create(getId() + "_virtual_axis_group")); @@ -60,12 +53,18 @@ namespace xios , vDomainGroup_(), domList_(), isDomListSet(false) , vAxisGroup_(), axisList_(), isAxisListSet(false) , vScalarGroup_(), scalarList_(), isScalarListSet(false) - , clientDistribution_(0), isIndexSent(false) + , clientDistribution_(0), isIndexSent(false) , serverDistribution_(0), clientServerMap_(0) + , writtenDataSize_(0), numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) , connectedDataSize_(), connectedServerRank_(), connectedServerRankRead_(), connectedDataSizeRead_() - , isCompressible_(false) + , isDataDistributed_(true), isCompressible_(false) + , transformations_(0), isTransformed_(false) , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) - , gridSrc_(), order_() + , gridSrc_(), hasTransform_(false), isGenerated_(false), order_(), globalIndexOnServer_() + , computedWrittenIndex_(false) , clients() + , nTiles_(0) + , isTiled_(false), isTiledOnly_(false) + , storeTileIndex() { setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); setVirtualAxisGroup(CAxisGroup::create(getId() + "_virtual_axis_group")); @@ -75,6 +74,9 @@ namespace xios CGrid::~CGrid(void) { if (0 != clientDistribution_) delete clientDistribution_; + if (0 != serverDistribution_) delete serverDistribution_; + if (0 != clientServerMap_) delete clientServerMap_; + if (0 != transformations_) delete transformations_; } ///--------------------------------------------------------------- @@ -84,1193 +86,2071 @@ namespace xios ENodeType CGrid::GetType(void) { return eGrid; } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ///////// MEMBER FUNCTION RELATED TO GRID CONSTRUCTION by ELEMNTS AND MANAGEMENT ///// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - CGrid* CGrid::createGrid(CDomain* domain) + StdSize CGrid::getDimension(void) TRY { - std::vector vecDom(1, domain); - std::vector vecAxis; - return createGrid(vecDom, vecAxis); + return getGlobalDimension().size(); } - CATCH - - CGrid* CGrid::createGrid(CDomain* domain, CAxis* axis) - TRY - { - std::vector vecDom(1, domain); - std::vector vecAxis(1, axis); + CATCH_DUMP_ATTR - return createGrid(vecDom, vecAxis); - } - CATCH + //--------------------------------------------------------------- - CGrid* CGrid::createGrid(const std::vector& domains, const std::vector& axis, - const CArray& axisDomainOrder) + StdSize CGrid::getDataSize(void) const TRY { - std::vector vecScalar; - return createGrid(generateId(domains, axis, vecScalar, axisDomainOrder), domains, axis, vecScalar, axisDomainOrder); + StdSize retvalue = 1; + if (!isScalarGrid()) + { + std::vector dataNindex = clientDistribution_->getDataNIndex(); + for (int i = 0; i < dataNindex.size(); ++i) retvalue *= dataNindex[i]; + } + return retvalue; } CATCH - CGrid* CGrid::createGrid(const std::vector& domains, const std::vector& axis, - const std::vector& scalars, const CArray& axisDomainOrder) + //--------------------------------------------------------------- + /*! + * Returns size of tile data + */ + + StdSize CGrid::getTileDataSize(int tileId) TRY { - return createGrid(generateId(domains, axis, scalars, axisDomainOrder), domains, axis, scalars, axisDomainOrder); + StdSize tileGridSize =1 ; + int numElement = axis_domain_order.numElements(); + + std::vector axisListP = this->getAxis(); + std::vector domainListP = this->getDomains(); + + int axisIndex = 0, domIndex = 0; + for (int idx = 0; idx < numElement; ++idx) + { + int eleDim = axis_domain_order(idx); + if (2 == eleDim) + { + tileGridSize *= domainListP[domIndex]->tile_data_ni(tileId); + tileGridSize *= domainListP[domIndex]->tile_data_nj(tileId); + ++domIndex; + } + else if (1 == eleDim) + { + tileGridSize *= axisListP[axisIndex]->n.getValue(); + ++axisIndex; + } + } // loop over grid elements + return tileGridSize; } CATCH - CGrid* CGrid::createGrid(StdString id, const std::vector& domains, const std::vector& axis, - const std::vector& scalars, const CArray& axisDomainOrder) + //--------------------------------------------------------------- + /*! + * Returns tile size + */ + + StdSize CGrid::getTileSize(int tileId) TRY { - if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) - ERROR("CGrid* CGrid::createGrid(...)", - << "The size of axisDomainOrder (" << axisDomainOrder.numElements() - << ") is not coherent with the number of elements (" << domains.size() + axis.size() <<")."); + StdSize tileGridSize =1 ; + int numElement = axis_domain_order.numElements(); - CGrid* grid = CGridGroup::get("grid_definition")->createChild(id); - grid->setDomainList(domains); - grid->setAxisList(axis); - grid->setScalarList(scalars); + std::vector axisListP = this->getAxis(); + std::vector domainListP = this->getDomains(); - // By default, domains are always the first elements of a grid - if (0 == axisDomainOrder.numElements()) - { - int size = domains.size() + axis.size() + scalars.size(); - int nb = 0; - grid->axis_domain_order.resize(size); - for (int i = 0; i < size; ++i) - { - if (i < domains.size()) - { - grid->axis_domain_order(i) = 2; - grid->order_.push_back(2) ; - } - else if ((scalars.size() < (size-nb)) < size) - { - grid->axis_domain_order(i) = 1; - grid->order_.push_back(1) ; - } - else - { - grid->axis_domain_order(i) = 0; - grid->order_.push_back(0) ; + int axisIndex = 0, domIndex = 0; + for (int idx = 0; idx < numElement; ++idx) + { + int eleDim = axis_domain_order(idx); + if (2 == eleDim) + { + tileGridSize *= domainListP[domIndex]->tile_ni(tileId); + tileGridSize *= domainListP[domIndex]->tile_nj(tileId); + ++domIndex; } - ++nb; - } - } - else - { - grid->axis_domain_order.resize(axisDomainOrder.numElements()); - grid->axis_domain_order = axisDomainOrder; - grid->order_.clear() ; - for(int i=0; iorder_.push_back(axisDomainOrder(i)) ; - - } - - // grid->solveElementsRefInheritance(true); - grid->computeElements() ; - return grid; + else if (1 == eleDim)// So it's an axis + { + tileGridSize *= axisListP[axisIndex]->n.getValue(); + ++axisIndex; + } + } // loop over grid elements + return tileGridSize; } CATCH + //--------------------------------------------------------------- - CGrid* CGrid::get(const string& id, bool noError) + /*! + * Compute the minimum buffer size required to send the attributes to the server(s). + * + * \return A map associating the server rank with its minimum buffer size. + * TODO: Refactor code + */ + std::map CGrid::getAttributesBufferSize(CContextClient* client, bool bufferForWriting) + TRY { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) + std::map attributesSizes = getMinimumBufferSizeForAttributes(client); + + // The grid indexes require a similar size as the actual data + std::map dataSizes = getDataBufferSize(client, "", bufferForWriting); + std::map::iterator it, itE = dataSizes.end(); + for (it = dataSizes.begin(); it != itE; ++it) { - if (m.size()!=1) ERROR("CGrid* Cgrid::get(string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CGrid* CGrid::get(string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - if (!suffix.empty()) ERROR("CGrid* CGrid::get(string& id)", <<" id = "< bad format id, suffix is not empty"); - if (!CField::has(fieldId)) - if (noError) return nullptr ; - else ERROR("CGrid* CGrid::get(string& id)", <<" id = "< field Id : < "< doesn't exist"); - CField* field=CField::get(fieldId) ; - return field->getAssociatedGrid() ; + it->second += 2 * sizeof(bool); + if (it->second > attributesSizes[it->first]) + attributesSizes[it->first] = it->second; } - else + + // Account for the axis attributes + std::vector axisList = getAxis(); + for (size_t i = 0; i < axisList.size(); ++i) { - if (noError) if(!CObjectFactory::HasObject(id)) return nullptr ; - return CObjectFactory::GetObject(id).get(); + std::map axisAttBuffSize = axisList[i]->getAttributesBufferSize(client, getGlobalDimension(),axisPositionInGrid_[i]); + for (it = axisAttBuffSize.begin(), itE = axisAttBuffSize.end(); it != itE; ++it) + { + it->second += 2 * sizeof(bool); + if (it->second > attributesSizes[it->first]) + attributesSizes[it->first] = it->second; + } } - } - - bool CGrid::has(const string& id) - { - if (CGrid::get(id,true)==nullptr) return false ; - else return true ; - } - //---------------------------------------------------------------- + // Account for the domain attributes + std::vector domList = getDomains(); + for (size_t i = 0; i < domList.size(); ++i) + { + std::map domAttBuffSize = domList[i]->getAttributesBufferSize(client); + for (it = domAttBuffSize.begin(), itE = domAttBuffSize.end(); it != itE; ++it) + { + it->second += 2 * sizeof(bool); + if (it->second > attributesSizes[it->first]) + attributesSizes[it->first] = it->second; + } + } - //! Change virtual field group to a new one - void CGrid::setVirtualDomainGroup(CDomainGroup* newVDomainGroup) + return attributesSizes; + } + CATCH_DUMP_ATTR + + /*! + * Compute the minimum buffer size required to send the data. + * \param client contextClient used to determine the size of connected receivers + * \param id the id used to tag the data + * \param bufferForWriting flag indicating if a buffer is used to send data for writing + * \return A map associating the sender rank with its minimum buffer size. + */ + std::map CGrid::getDataBufferSize(CContextClient* client, const std::string& id /*= ""*/, bool bufferForWriting /*= "false"*/) TRY - { - this->vDomainGroup_ = newVDomainGroup; + { + // The record index is sometimes sent along with the data but we always + // include it in the size calculation for the sake of simplicity + const size_t extraSize = CEventClient::headerSize + (id.empty() ? getId() : id).size() + + 2 * sizeof(size_t) + + sizeof(size_t); + + std::map dataSizes; + int receiverSize = client->serverSize; + std::map& dataSizeMap = bufferForWriting ? connectedDataSize_[receiverSize]: connectedDataSizeRead_; + std::vector& connectedServerRanks = bufferForWriting ? connectedServerRank_[receiverSize] : connectedServerRankRead_; + + std::map::const_iterator itEnd = dataSizeMap.end(); + for (size_t k = 0; k < connectedServerRanks.size(); ++k) + { + int rank = connectedServerRanks[k]; + std::map::const_iterator it = dataSizeMap.find(rank); + size_t count = (it != itEnd) ? it->second : 0; + + dataSizes.insert(std::make_pair(rank, extraSize + CArray::size(count))); + } + + return dataSizes; } CATCH_DUMP_ATTR - //! Change virtual variable group to new one - void CGrid::setVirtualAxisGroup(CAxisGroup* newVAxisGroup) + size_t CGrid::getGlobalWrittenSize(void) TRY { - this->vAxisGroup_ = newVAxisGroup; + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + + size_t globalGridSize=1 ; + for (std::vector::iterator it=domainP.begin(); it!=domainP.end();++it) globalGridSize*=(*it)->getGlobalWrittenSize() ; + for (std::vector::iterator it=axisP.begin(); it!=axisP.end();++it) globalGridSize*=(*it)->getGlobalWrittenSize() ; + return globalGridSize ; } CATCH_DUMP_ATTR - - //! Change virtual variable group to new one - void CGrid::setVirtualScalarGroup(CScalarGroup* newVScalarGroup) + + void CGrid::checkAttributesAfterTransformation() TRY { - this->vScalarGroup_ = newVScalarGroup; + setAxisList(); + std::vector axisListP = this->getAxis(); + if (!axisListP.empty()) + { + int idx = 0; + axisPositionInGrid_.resize(0); + for (int i = 0; i < axis_domain_order.numElements(); ++i) + { + int elementDimension = axis_domain_order(i); + if (1 == elementDimension) + { + axisPositionInGrid_.push_back(idx); + ++idx; + } + else if (2 == elementDimension) idx += 2; + } + + for (int i = 0; i < axisListP.size(); ++i) + { + axisListP[i]->checkAttributesOnClientAfterTransformation(getGlobalDimension(),axisPositionInGrid_[i]); + } + } + + setDomainList(); + std::vector domListP = this->getDomains(); + if (!domListP.empty()) + { + for (int i = 0; i < domListP.size(); ++i) + { + domListP[i]->checkAttributesOnClientAfterTransformation(); + } + } } CATCH_DUMP_ATTR - //---------------------------------------------------------------- + //--------------------------------------------------------------- - CDomainGroup* CGrid::getVirtualDomainGroup() const + /*! + * Test whether the data defined on the grid can be outputted in a compressed way. + * + * \return true if and only if a mask was defined for this grid + */ + bool CGrid::isCompressible(void) const TRY { - return this->vDomainGroup_; + return isCompressible_; } CATCH - CAxisGroup* CGrid::getVirtualAxisGroup() const + //--------------------------------------------------------------- + + void CGrid::addRelFileCompressed(const StdString& filename) TRY { - return this->vAxisGroup_; + this->relFilesCompressed.insert(filename); } - CATCH + CATCH_DUMP_ATTR - CScalarGroup* CGrid::getVirtualScalarGroup() const + bool CGrid::isWrittenCompressed(const StdString& filename) const TRY { - return this->vScalarGroup_; + return (this->relFilesCompressed.find(filename) != this->relFilesCompressed.end()); } CATCH - ///--------------------------------------------------------------- - - CDomain* CGrid::addDomain(const std::string& id) + //--------------------------------------------------------------- + /* + Find all reference of grid's components and inherite attributes if necessary + */ + void CGrid::solveDomainAxisRef(bool areAttributesChecked) TRY { - order_.push_back(2); - axis_domain_order.resize(order_.size()); - for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; - CDomain* domain = vDomainGroup_->createChild(id); - isDomListSet=false ; - computeElements(); - return domain ; + if (this->isDomainAxisChecked) return; + + this->solveScalarRef(areAttributesChecked); + this->solveAxisRef(areAttributesChecked); + this->solveDomainRef(areAttributesChecked); + this->isDomainAxisChecked = areAttributesChecked; } CATCH_DUMP_ATTR - CAxis* CGrid::addAxis(const std::string& id) + /* + Go up hierachy reference and fill in the base reference with attributes of the children + This function should be only used after reading component's attributes from file + */ + void CGrid::solveDomainAxisBaseRef() TRY { - order_.push_back(1); - axis_domain_order.resize(order_.size()); - for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; - CAxis* axis=vAxisGroup_->createChild(id); - isAxisListSet=false ; - computeElements(); - return axis ; + if (this->hasDomainAxisBaseRef_) return; + // Account for the scalar attributes + std::vector scalarList = getScalars(); + for (size_t i = 0; i < scalarList.size(); ++i) + { + scalarList[i]->setAttributesReference(); + } + + // Account for the axis attributes + std::vector axisList = getAxis(); + for (size_t i = 0; i < axisList.size(); ++i) + { + axisList[i]->setAttributesReference(); + } + + // Account for the domain attributes + std::vector domList = getDomains(); + for (size_t i = 0; i < domList.size(); ++i) + { + domList[i]->setAttributesReference(); + } + + this->hasDomainAxisBaseRef_ = true; } CATCH_DUMP_ATTR - CScalar* CGrid::addScalar(const std::string& id) + void CGrid::checkEligibilityForCompressedOutput() TRY { - order_.push_back(0); - axis_domain_order.resize(order_.size()); - for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; - CScalar* scalar = vScalarGroup_->createChild(id); - isScalarListSet=false ; - computeElements(); - return scalar; + // We don't check if the mask is valid here, just if a mask has been defined at this point. + isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty(); } CATCH_DUMP_ATTR + void CGrid::checkMaskIndex(bool doSendingIndex) + TRY + { + CContext* context = CContext::getCurrent(); + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; + nbSrvPools = 1; + for (int p = 0; p < nbSrvPools; ++p) + { + if (context->hasClient && this->isChecked && doSendingIndex && !isIndexSent) + { + if (isScalarGrid()) + sendIndexScalarGrid(); + else + sendIndex(); + this->isIndexSent = true; + } + // Not sure about this + //if (!(this->hasTransform() && !this->isTransformed())) + // this->isChecked = true; + //return; + } + + if (this->isChecked) return; + this->checkAttributesAfterTransformation(); + // TODO: Transfer grid attributes + //if (!context->hasClient && context->hasServer) this->createMask(); + this->computeIndex(); - /*! - \brief Get the list of domain pointers - \return list of domain pointers - */ - std::vector CGrid::getDomains() - TRY - { - setDomainList(); - std::vector domList; - if (!domList_.empty()) - { - for (int i = 0; i < domList_.size(); ++i) domList.push_back(CDomain::get(domList_[i])); - } - return domList; - } - CATCH_DUMP_ATTR - - /*! - \brief Get the list of axis pointers - \return list of axis pointers - */ - std::vector CGrid::getAxis() - TRY - { - setAxisList(); - std::vector aList; - if (!axisList_.empty()) - for (int i =0; i < axisList_.size(); ++i) aList.push_back(CAxis::get(axisList_[i])); - - return aList; - } - CATCH_DUMP_ATTR + if (!(this->hasTransform() && !this->isTransformed())) + this->isChecked = true; - /*! - \brief Get the list of axis pointers - \return list of axis pointers - */ - std::vector CGrid::getScalars() - TRY - { - setScalarList() ; - std::vector sList; - if (!scalarList_.empty()) - for (int i =0; i < scalarList_.size(); ++i) sList.push_back(CScalar::get(scalarList_[i])); + if (!(this->hasTransform() && (!this->isGenerated()))) + this->isChecked = true; + } + CATCH_DUMP_ATTR + bool CGrid::hasMask() const + TRY + { + return (!mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty() || + !mask_4d.isEmpty() || !mask_5d.isEmpty() || !mask_6d.isEmpty() || !mask_7d.isEmpty()); + } + CATCH - return sList; - } - CATCH_DUMP_ATTR + /* + Create mask of grid from mask of its components + */ + void CGrid::createMask(void) + TRY + { + using namespace std; + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + int dim = domainP.size() * 2 + axisP.size(); + + std::vector* > domainMasks(domainP.size()); + for (int i = 0; i < domainMasks.size(); ++i) domainMasks[i] = &(domainP[i]->domainMask); + std::vector* > axisMasks(axisP.size()); + for (int i = 0; i < axisMasks.size(); ++i) axisMasks[i] = &(axisP[i]->mask); + + switch (dim) { + case 1: + checkGridMask(mask_1d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 2: + checkGridMask(mask_2d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 3: + checkGridMask(mask_3d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 4: + checkGridMask(mask_4d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 5: + checkGridMask(mask_5d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 6: + checkGridMask(mask_6d, domainMasks, axisMasks, axis_domain_order, true); + break; + case 7: + checkGridMask(mask_7d, domainMasks, axisMasks, axis_domain_order, true); + break; + default: + break; + } + } + CATCH_DUMP_ATTR - /*! - \brief Get domain pointer with index - \return domain pointer - */ - CDomain* CGrid::getDomain(int domainIndex) - TRY - { - std::vector domainListP = this->getDomains(); - if (domainListP.empty()) - { - ERROR("CGrid::getDomain(int domainIndex)", - << "No domain associated to this grid. " << std::endl - << "Grid id = " << this->getId()); - } + /* + Check validity of grid's mask by using the masks of its components + */ + void CGrid::checkMask(void) + TRY + { + using namespace std; + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + int dim = domainP.size() * 2 + axisP.size(); + + std::vector* > domainMasks(domainP.size()); + for (int i = 0; i < domainMasks.size(); ++i) domainMasks[i] = &(domainP[i]->domainMask); + std::vector* > axisMasks(axisP.size()); + for (int i = 0; i < axisMasks.size(); ++i) axisMasks[i] = &(axisP[i]->mask); + + switch (dim) { + case 1: + checkGridMask(mask_1d, domainMasks, axisMasks, axis_domain_order); + break; + case 2: + checkGridMask(mask_2d, domainMasks, axisMasks, axis_domain_order); + break; + case 3: + checkGridMask(mask_3d, domainMasks, axisMasks, axis_domain_order); + break; + case 4: + checkGridMask(mask_4d, domainMasks, axisMasks, axis_domain_order); + break; + case 5: + checkGridMask(mask_5d, domainMasks, axisMasks, axis_domain_order); + break; + case 6: + checkGridMask(mask_6d, domainMasks, axisMasks, axis_domain_order); + break; + case 7: + checkGridMask(mask_7d, domainMasks, axisMasks, axis_domain_order); + break; + default: + break; + } + } + CATCH_DUMP_ATTR - if (domainIndex >= domainListP.size() || (domainIndex < 0)) - ERROR("CGrid::getDomain(int domainIndex)", - << "Domain with the index doesn't exist " << std::endl - << "Grid id = " << this->getId() << std::endl - << "Grid has only " << domainListP.size() << " domain but domain index required is " << domainIndex << std::endl); + /* + Modify value of mask in a certain index + This function can be used to correct the mask of grid after being constructed with createMask + \param [in] indexToModify + \param [in] modifyValue + */ + void CGrid::modifyMask(const CArray& indexToModify, bool modifyValue) + TRY + { + using namespace std; + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + int dim = domainP.size() * 2 + axisP.size(); + + switch (dim) { + case 0: + modifyGridMask(mask_0d, indexToModify, modifyValue); + break; + case 1: + modifyGridMask(mask_1d, indexToModify, modifyValue); + break; + case 2: + modifyGridMask(mask_2d, indexToModify, modifyValue); + break; + case 3: + modifyGridMask(mask_3d, indexToModify, modifyValue); + break; + case 4: + modifyGridMask(mask_4d, indexToModify, modifyValue); + break; + case 5: + modifyGridMask(mask_5d, indexToModify, modifyValue); + break; + case 6: + modifyGridMask(mask_6d, indexToModify, modifyValue); + break; + case 7: + modifyGridMask(mask_7d, indexToModify, modifyValue); + break; + default: + break; + } + } + CATCH_DUMP_ATTR - return domainListP[domainIndex]; - } - CATCH_DUMP_ATTR + /* + Change the mask size. This function is used on reconstructing mask in server side + \param [in] newDimensionSize + \param [in] newValue + */ + void CGrid::modifyMaskSize(const std::vector& newDimensionSize, bool newValue) + TRY + { + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + int dim = domainP.size() * 2 + axisP.size(); + + switch (dim) { + case 0: + modifyGridMaskSize(mask_0d, newDimensionSize, newValue); + break; + case 1: + modifyGridMaskSize(mask_1d, newDimensionSize, newValue); + break; + case 2: + modifyGridMaskSize(mask_2d, newDimensionSize, newValue); + break; + case 3: + modifyGridMaskSize(mask_3d, newDimensionSize, newValue); + break; + case 4: + modifyGridMaskSize(mask_4d, newDimensionSize, newValue); + break; + case 5: + modifyGridMaskSize(mask_5d, newDimensionSize, newValue); + break; + case 6: + modifyGridMaskSize(mask_6d, newDimensionSize, newValue); + break; + case 7: + modifyGridMaskSize(mask_7d, newDimensionSize, newValue); + break; + default: + break; + } + } + CATCH_DUMP_ATTR - /*! - \brief Get the axis pointer with index - \return axis pointer - */ - CAxis* CGrid::getAxis(int axisIndex) - TRY - { - std::vector axisListP = this->getAxis(); - if (axisListP.empty()) - { - ERROR("CGrid::getDomain(int axisIndex)", - << "No axis associated to this grid. " << std::endl - << "Grid id = " << this->getId()); - } + //--------------------------------------------------------------- - if (axisIndex >= axisListP.size() || (axisIndex < 0)) - ERROR("CGrid::getDomain(int axisIndex)", - << "Domain with the index doesn't exist " << std::endl - << "Grid id = " << this->getId() << std::endl - << "Grid has only " << axisListP.size() << " axis but axis index required is " << axisIndex << std::endl); + void CGrid::solveDomainRef(bool sendAtt) + TRY + { + setDomainList(); + std::vector domListP = this->getDomains(); + if (!domListP.empty()) + { + for (int i = 0; i < domListP.size(); ++i) + { + if (sendAtt) domListP[i]->sendCheckedAttributes(); + else domListP[i]->checkAttributesOnClient(); + if (domListP[i]->isTiled()) this->isTiled_ = true; + if (domListP[i]->isTiledOnly()) this->isTiledOnly_ = true; + } + } + } + CATCH_DUMP_ATTR - return axisListP[axisIndex]; - } - CATCH_DUMP_ATTR + //--------------------------------------------------------------- - /*! - \brief Get the a scalar pointer - \return scalar pointer - */ - CScalar* CGrid::getScalar(int scalarIndex) - TRY - { - std::vector scalarListP = this->getScalars(); - if (scalarListP.empty()) - { - ERROR("CGrid::getScalar(int scalarIndex)", - << "No scalar associated to this grid. " << std::endl - << "Grid id = " << this->getId()); - } + void CGrid::solveAxisRef(bool sendAtt) + TRY + { + setAxisList(); + std::vector axisListP = this->getAxis(); + if (!axisListP.empty()) + { + int idx = 0; + axisPositionInGrid_.resize(0); + for (int i = 0; i < axis_domain_order.numElements(); ++i) + { + int elementDimension = axis_domain_order(i); + if (1 == elementDimension) + { + axisPositionInGrid_.push_back(idx); + ++idx; + } + else if (2 == elementDimension) idx += 2; + } - if (scalarIndex >= scalarListP.size() || (scalarIndex < 0)) - ERROR("CGrid::getScalar(int scalarIndex)", - << "Scalar with the index doesn't exist " << std::endl - << "Grid id = " << this->getId() << std::endl - << "Grid has only " << scalarListP.size() << " scalar but scalar index required is " << scalarIndex << std::endl); + for (int i = 0; i < axisListP.size(); ++i) + { + if (sendAtt) + axisListP[i]->sendCheckedAttributes(getGlobalDimension(),axisPositionInGrid_[i]); + else + axisListP[i]->checkAttributesOnClient(); + } + } + } + CATCH_DUMP_ATTR - return scalarListP[scalarIndex]; - } - CATCH_DUMP_ATTR + //--------------------------------------------------------------- - CDomain* CGrid::getAssociatedDomain(const string& domainId, bool noError) - { - const regex r("\\[[0-9]*\\]"); - smatch m; - string id=domainId ; - int pos=-1 ; - if (regex_search(domainId, m, r)) - { - if (m.size()!=1) ERROR("CGrid::getAssociatedDomain(const string& domainId)", <<" domainId = "< bad format id, separator [] append more than one time"); - id=m.prefix() ; - pos = stoi(m.str(0).substr(1,m.str(0).size()-2)) ; - } - std::vector domainList = this->getDomains(); - if (domainList.empty()) - if (noError) return nullptr ; - else ERROR("CGrid::getAssociatedDomain(const string& domainId)", <<"no domain is composing the grid"); - if (id.empty()) - { - if (pos==-1) + void CGrid::solveScalarRef(bool sendAtt) + TRY + { + setScalarList(); + std::vector scalarListP = this->getScalars(); + if (!scalarListP.empty()) { - if (domainList.size()==1) return domainList[0] ; - else - if (noError) return nullptr ; - else ERROR("CGrid::getAssociatedDomain(const string& domainId)", <<"the grid contain more than 1 domain, use [#n] to specify which one must be retrieved"); + for (int i = 0; i < scalarListP.size(); ++i) + { + /*Nothing to do for now */ +// if (sendAtt) scalarListP[i]->sendCheckedAttributes(); +// else scalarListP[i]->checkAttributesOnClient(); + } } - else + } + CATCH_DUMP_ATTR + + /*! + Compute the index to for write data into a file + */ + void CGrid::computeWrittenIndex() + TRY + { + if (computedWrittenIndex_) return; + computedWrittenIndex_ = true; + + if (isScalarGrid()) { - if (domainList.size()>pos) return domainList[pos] ; - else if (noError) return nullptr ; - else ERROR("CGrid::getAssociatedDomain(const string& domainId)", <<"the position of the requested domain [ pos = "<getGlobalDataIndexOnClient(); + CDistributionClient::GlobalLocalDataMap::const_iterator itb = globalDataIndex.begin(), + ite = globalDataIndex.end(), it; + const CDistributionServer::GlobalLocalMap& globalLocalIndex = serverDistribution_->getGlobalLocalIndex(); + CDistributionServer::GlobalLocalMap::const_iterator itSrvb = globalLocalIndex.begin(), + itSrve = globalLocalIndex.end(), itSrv; + for (it = itb; it != ite; ++it) { - int nbDomain=0 ; - for(int i=0; igetTemplateId()==id) nbDomain++ ; - if (nbDomain>1) - if (noError) return nullptr ; - else ERROR("CGrid::getAssociatedDomain(const string& domainId)", <<"no domain with the id = "<getTemplateId()==id) return domainList[i] ; + indGlo = it->first; + if (globalLocalIndex.end() != globalLocalIndex.find(indGlo)) ++nbWritten; } - else + + localIndexToWriteOnClient.resize(nbWritten); + localIndexToWriteOnServer.resize(nbWritten); + { - int currentPos=0 ; - for(int i=0; igetTemplateId()==id && pos==currentPos) return domainList[i] ; - currentPos++ ; + CContextServer* server = CContext::getCurrent()->server; + MPI_Allreduce(&numberWrittenIndexes_, &totalNumberWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); + MPI_Scan(&numberWrittenIndexes_, &offsetWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); + offsetWrittenIndexes_ -= numberWrittenIndexes_; } - if (noError) return nullptr ; - else ERROR("CGrid::getAssociatedDomain(const string& domainId)",<<"Cannot find domain with [ id = "<< id <<" ] at [ pos = "< bad format id, separator [] append more than one time"); - id=m.prefix() ; - pos = stoi(m.str(0).substr(1,m.str(0).size()-2)) ; - } - std::vector axisList = this->getAxis(); - if (axisList.empty()) - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedAxis(const string& AxisId)", <<"no axis is composing the grid"); - if (id.empty()) - { - if (pos==-1) + nbWritten = 0; + for (it = itb; it != ite; ++it) { - if (axisList.size()==1) return axisList[0] ; - else - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedAxis(const string& axisId)", <<"the grid contain more than 1 axis, use [#n] to specify which one must be retrieved"); + indGlo = it->first; + itSrv = globalLocalIndex.find(indGlo); + if (itSrve != itSrv) + { + localIndexToWriteOnServer(nbWritten) = itSrv->second; + localIndexToWriteOnClient(nbWritten) = it->second; + ++nbWritten; + } } - else - { - if (axisList.size()>pos) return axisList[pos] ; - else - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedAxis(const string& axisId)", <<"the position of the requested axis [ pos = "<getTemplateId()==id) nbAxis++ ; - if (nbAxis>1) - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedAxis(const string& axisId)", <<"no axis with the id = "<getTemplateId()==id) return axisList[i] ; + } + CATCH_DUMP_ATTR + + //--------------------------------------------------------------- + + /* + Compute the global index and its local index taking account mask and data index. + These global indexes will be used to compute the connection of this client (sender) to its servers (receivers) + (via function computeConnectedClient) + These global indexes also correspond to data sent to servers (if any) + */ + void CGrid::computeClientIndex() + TRY + { + CContext* context = CContext::getCurrent(); + + CContextClient* client = context->client; + int rank = client->clientRank; + + clientDistribution_ = new CDistributionClient(rank, this); + // Get local data index on client + int nbStoreIndex = clientDistribution_->getLocalDataIndexOnClient().size(); + int nbStoreGridMask = clientDistribution_->getLocalMaskIndexOnClient().size(); + // nbStoreGridMask = nbStoreIndex if grid mask is defined, and 0 otherwise + storeIndex_client.resize(nbStoreIndex); + storeMask_client.resize(nbStoreGridMask); + for (int idx = 0; idx < nbStoreIndex; ++idx) storeIndex_client(idx) = (clientDistribution_->getLocalDataIndexOnClient())[idx]; + for (int idx = 0; idx < nbStoreGridMask; ++idx) storeMask_client(idx) = (clientDistribution_->getLocalMaskIndexOnClient())[idx]; + + if (0 == serverDistribution_) isDataDistributed_= clientDistribution_->isDataDistributed(); + else + { + // Mapping global index received from clients to the storeIndex_client + CDistributionClient::GlobalLocalDataMap& globalDataIndex = clientDistribution_->getGlobalDataIndexOnClient(); + CDistributionClient::GlobalLocalDataMap::const_iterator itGloe = globalDataIndex.end(); + map >::iterator itb = outGlobalIndexFromClient.begin(), + ite = outGlobalIndexFromClient.end(), it; + + for (it = itb; it != ite; ++it) + { + int rank = it->first; + CArray& globalIndex = outGlobalIndexFromClient[rank]; + outLocalIndexStoreOnClient.insert(make_pair(rank, CArray(globalIndex.numElements()))); + CArray& localIndex = outLocalIndexStoreOnClient[rank]; + size_t nbIndex = 0; + + // Keep this code for this moment but it should be removed (or moved to DEBUG) to improve performance + for (size_t idx = 0; idx < globalIndex.numElements(); ++idx) + { + if (itGloe != globalDataIndex.find(globalIndex(idx))) + { + ++nbIndex; + } + } + + if (doGridHaveDataDistributed(client) && (nbIndex != localIndex.numElements())) + ERROR("void CGrid::computeClientIndex()", + << "Number of local index on client is different from number of received global index" + << "Rank of sent client " << rank <<"." + << "Number of local index " << nbIndex << ". " + << "Number of received global index " << localIndex.numElements() << "."); + + nbIndex = 0; + for (size_t idx = 0; idx < globalIndex.numElements(); ++idx) + { + if (itGloe != globalDataIndex.find(globalIndex(idx))) + { + localIndex(idx) = globalDataIndex[globalIndex(idx)]; + } + } + } } - else - { - int currentPos=0 ; - for(int i=0; iclient; + int rank = client->clientRank; + + clientDistributionTiled_ = new CDistributionClient(rank, this, true); + // Get local data index on client + int nbStoreIndex = clientDistributionTiled_->getLocalDataIndexOnClient().size(); + int nbStoreGridMask = clientDistributionTiled_->getLocalMaskIndexOnClient().size(); + // nbStoreGridMask = nbStoreIndex if grid mask is defined, and 0 otherwise + storeIndexTiled_client.resize(nbStoreIndex); + storeMaskTiled_client.resize(nbStoreGridMask); + for (int idx = 0; idx < nbStoreIndex; ++idx) storeIndexTiled_client(idx) = (clientDistributionTiled_->getLocalDataIndexOnClient())[idx]; + for (int idx = 0; idx < nbStoreGridMask; ++idx) storeMaskTiled_client(idx) = (clientDistributionTiled_->getLocalMaskIndexOnClient())[idx]; + + if (0 == serverDistribution_) isDataDistributed_= clientDistributionTiled_->isDataDistributed(); + else + { + // Mapping global index received from clients to the storeIndex_client + CDistributionClient::GlobalLocalDataMap& globalDataIndex = clientDistributionTiled_->getGlobalDataIndexOnClient(); + CDistributionClient::GlobalLocalDataMap::const_iterator itGloe = globalDataIndex.end(); + map >::iterator itb = outGlobalIndexFromClientTiled.begin(), + ite = outGlobalIndexFromClientTiled.end(), it; + + for (it = itb; it != ite; ++it) { - if (axisList[i]->getTemplateId()==id && pos==currentPos) return axisList[i] ; - currentPos++ ; + int rank = it->first; + CArray& globalIndex = outGlobalIndexFromClientTiled[rank]; + outLocalIndexStoreOnClientTiled.insert(make_pair(rank, CArray(globalIndex.numElements()))); + CArray& localIndex = outLocalIndexStoreOnClientTiled[rank]; + size_t nbIndex = 0; + + // Keep this code for this moment but it should be removed (or moved to DEBUG) to improve performance + for (size_t idx = 0; idx < globalIndex.numElements(); ++idx) + { + if (itGloe != globalDataIndex.find(globalIndex(idx))) + { + ++nbIndex; + } + } + + if (doGridHaveDataDistributed(client) && (nbIndex != localIndex.numElements())) + ERROR("void CGrid::computeClientIndex()", + << "Number of local index on client is different from number of received global index" + << "Rank of sent client " << rank <<"." + << "Number of local index " << nbIndex << ". " + << "Number of received global index " << localIndex.numElements() << "."); + + nbIndex = 0; + for (size_t idx = 0; idx < globalIndex.numElements(); ++idx) + { + if (itGloe != globalDataIndex.find(globalIndex(idx))) + { + localIndex(idx) = globalDataIndex[globalIndex(idx)]; + } + } } - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedAxis(const string& axisId)",<<"Cannot find axis with [ id = "<< id <<" ] at [ pos = "<clientPrimServer.size() == 0) ? 1 : context->clientPrimServer.size(); + connectedServerRank_.clear(); + connectedDataSize_.clear(); + globalIndexOnServer_.clear(); + nbSenders.clear(); - CScalar* CGrid::getAssociatedScalar(const string& scalarId, bool noError) - { - const regex r("\\[[0-9]*\\]"); - smatch m; - string id=scalarId ; - int pos=-1 ; - if (regex_search(scalarId, m, r)) + for (int p = 0; p < nbSrvPools; ++p) + { + CContextClient* client = (context->clientPrimServer.size() == 0) ? context->client : context->clientPrimServer[p]; + int receiverSize = client->serverSize; +// connectedServerRank_[client].clear(); + + if (connectedServerRank_.find(receiverSize) == connectedServerRank_.end()) + { + if (!doGridHaveDataDistributed(client)) + { + if (client->isServerLeader()) + { + size_t ssize = clientDistribution_->getLocalDataIndexOnClient().size(); + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + connectedServerRank_[receiverSize].push_back(*itRank); + connectedDataSize_[receiverSize][*itRank] = ssize; + } + } + return; + } + + // Compute mapping between client and server + std::vector > > indexServerOnElement; + CServerDistributionDescription serverDistributionDescription(getGlobalDimension(), client->serverSize); + std::vector serverZeroIndex = serverDistributionDescription.computeServerGlobalByElement(indexServerOnElement, + client->clientRank, + client->clientSize, + axis_domain_order, + getDistributedDimension()); + + // Even if servers have no index, they must received something from client + // We only use several client to send "empty" message to these servers + std::list serverZeroIndexLeader; + std::list serverZeroIndexNotLeader; + CContextClient::computeLeader(client->clientRank, client->clientSize, serverZeroIndex.size(), serverZeroIndexLeader, serverZeroIndexNotLeader); + for (std::list::iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + *it = serverZeroIndex[*it]; + + if (globalIndexOnServer_.find(receiverSize) == globalIndexOnServer_.end()) + computeIndexByElement(indexServerOnElement, client, globalIndexOnServer_[receiverSize]); + + const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = clientDistribution_->getGlobalLocalDataSendToServer(); + CDistributionClient::GlobalLocalDataMap::const_iterator iteGlobalLocalIndexMap = globalLocalIndexSendToServer.end(), itGlobalLocalIndexMap; + CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itbGlobalMap, itGlobalMap; + itbGlobalMap = globalIndexOnServer_[receiverSize].begin(); + iteGlobalMap = globalIndexOnServer_[receiverSize].end(); + + for (itGlobalMap = itbGlobalMap; itGlobalMap != iteGlobalMap; ++itGlobalMap) + { + int serverRank = itGlobalMap->first; + int indexSize = itGlobalMap->second.size(); + const std::vector& indexVec = itGlobalMap->second; + for (int idx = 0; idx < indexSize; ++idx) + { + itGlobalLocalIndexMap = globalLocalIndexSendToServer.find(indexVec[idx]); + if (iteGlobalLocalIndexMap != itGlobalLocalIndexMap) + { + if (connectedDataSize_[receiverSize].end() == connectedDataSize_[receiverSize].find(serverRank)) + connectedDataSize_[receiverSize][serverRank] = 1; + else + ++connectedDataSize_[receiverSize][serverRank]; + } + } + } + + // Connected servers which really have index + for (itGlobalMap = itbGlobalMap; itGlobalMap != iteGlobalMap; ++itGlobalMap) { + connectedServerRank_[receiverSize].push_back(itGlobalMap->first); + } + + // Connected servers which have no index at all + for (std::list::iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it) + connectedServerRank_[receiverSize].push_back(*it); + + // Even if a client has no index, it must connect to at least one server and + // send an "empty" data to this server + if (connectedServerRank_[receiverSize].empty()) + connectedServerRank_[receiverSize].push_back(client->clientRank % client->serverSize); + + // Now check if all servers have data to receive. If not, master client will send empty data. + // This ensures that all servers will participate in collective calls upon receiving even if they have no date to receive. + std::vector counts (client->clientSize); + std::vector displs (client->clientSize); + displs[0] = 0; + int localCount = connectedServerRank_[receiverSize].size() ; + MPI_Gather(&localCount, 1, MPI_INT, &counts[0], 1, MPI_INT, 0, client->intraComm) ; + for (int i = 0; i < client->clientSize-1; ++i) + { + displs[i+1] = displs[i] + counts[i]; + } + std::vector allConnectedServers(displs[client->clientSize-1]+counts[client->clientSize-1]); + MPI_Gatherv(&(connectedServerRank_[receiverSize])[0], localCount, MPI_INT, &allConnectedServers[0], &counts[0], &displs[0], MPI_INT, 0, client->intraComm); + + if ((allConnectedServers.size() != receiverSize) && (client->clientRank == 0)) + { + std::vector isSrvConnected (receiverSize, false); + for (int i = 0; i < allConnectedServers.size(); ++i) isSrvConnected[allConnectedServers[i]] = true; + for (int i = 0; i < receiverSize; ++i) + { + if (!isSrvConnected[i]) connectedServerRank_[receiverSize].push_back(i); + } + } + + nbSenders[receiverSize] = clientServerMap_->computeConnectedClients(receiverSize, client->clientSize, client->intraComm, connectedServerRank_[receiverSize]); + } + } + } + CATCH_DUMP_ATTR + + /*! + Compute the global index of grid to send to server as well as the connected server of the current client. + First of all, from the local data on each element of grid, we can calculate their local index which also allows us to know + their global index. We can have a map of global index of grid and local index that each client holds + Then, each client holds a piece of information about the distribution of servers, which permits to compute the connected server(s) + of the current client. + */ + void CGrid::computeIndex(void) + TRY + { + CContext* context = CContext::getCurrent(); + if (isScalarGrid()) + { + computeClientIndexScalarGrid(); + if (context->hasClient) + { + computeConnectedClientsScalarGrid(); + } + } + else + { + if (this->isTiled_) + { + computeClientIndexTiled(); + if (!this->isTiledOnly_) + computeClientIndex(); + } + else + computeClientIndex(); + + if (this->isTiled_) computeTileIndex(); + if (context->hasClient) + { + computeConnectedClients(); + } + } + if (CServer::serverLevel==2) + { + computeWrittenIndex() ; + if (serverDistribution_!=0) serverDistribution_->partialClear() ; + if (clientDistribution_!=0) clientDistribution_->partialClear() ; + outGlobalIndexFromClient.clear() ; + } + } + CATCH_DUMP_ATTR + + /*! + Compute the global of (client) grid to send to server with the global index of each element of grid + Each element of grid has its own global index associated to a groups of server. We only search for the global index of each element whose + server is the same, then calculate the global index of grid. This way can reduce so much the time for executing DHT, which only needs to run + on each element whose size is much smaller than one of whole grid. + \param [in] indexServerOnElement global index of each element and the rank of server associated with these index + \param [in] client contextClient + \param [out] globalIndexOnServer global index of grid and its corresponding rank of server. + */ + void CGrid::computeIndexByElement(const std::vector > >& indexServerOnElement, + const CContextClient* client, + CClientServerMapping::GlobalIndexMap& globalIndexOnServer) + TRY + { + int serverSize = client->serverSize; + + std::vector domList = getDomains(); + std::vector axisList = getAxis(); + + // Some pre-calculations of global index on each element of current grid. + int nbElement = axis_domain_order.numElements(); + std::vector > globalIndexElement(nbElement); + int domainIdx = 0, axisIdx = 0, scalarIdx = 0; + std::vector elementNGlobal(nbElement); + elementNGlobal[0] = 1; + size_t globalSize = 1; + for (int idx = 0; idx < nbElement; ++idx) + { + elementNGlobal[idx] = globalSize; + size_t elementSize; + size_t elementGlobalSize = 1; + if (2 == axis_domain_order(idx)) // This is domain + { + elementSize = domList[domainIdx]->i_index.numElements(); + globalIndexElement[idx].resize(elementSize); + for (int jdx = 0; jdx < elementSize; ++jdx) + { + globalIndexElement[idx](jdx) = (domList[domainIdx]->i_index)(jdx) + domList[domainIdx]->ni_glo * (domList[domainIdx]->j_index)(jdx); + } + elementGlobalSize = domList[domainIdx]->ni_glo.getValue() * domList[domainIdx]->nj_glo.getValue(); + ++domainIdx; + } + else if (1 == axis_domain_order(idx)) // This is axis + { + elementSize = axisList[axisIdx]->index.numElements(); + globalIndexElement[idx].resize(elementSize); + for (int jdx = 0; jdx < elementSize; ++jdx) + { + globalIndexElement[idx](jdx) = (axisList[axisIdx]->index)(jdx); + } + elementGlobalSize = axisList[axisIdx]->n_glo.getValue(); + ++axisIdx; + } + else // Of course, this is scalar + { + globalIndexElement[idx].resize(1); + globalIndexElement[idx](0) = 0; + elementGlobalSize = 1; + } + globalSize *= elementGlobalSize; + } + + std::vector > elementOnServer(nbElement, std::vector(serverSize, false)); + std::vector > > globalElementIndexOnServer(nbElement); + CArray nbIndexOnServer(serverSize); // Number of distributed global index held by each client for each server + // Number of temporary distributed global index held by each client for each server + // We have this variable for the case of non-distributed element (often axis) to check the duplicate server rank + CArray nbIndexOnServerTmp(serverSize); + for (int idx = 0; idx < nbElement; ++idx) + { + nbIndexOnServer = 0; + const std::unordered_map >& indexServerElement = indexServerOnElement[idx]; + const CArray& globalIndexElementOnClient = globalIndexElement[idx]; + CClientClientDHTInt clientClientDHT(indexServerElement, client->intraComm); + clientClientDHT.computeIndexInfoMapping(globalIndexElementOnClient); + const CClientClientDHTInt::Index2VectorInfoTypeMap& globalIndexElementOnServerMap = clientClientDHT.getInfoIndexMap(); + CClientClientDHTInt::Index2VectorInfoTypeMap::const_iterator itb = globalIndexElementOnServerMap.begin(), + ite = globalIndexElementOnServerMap.end(), it; + for (it = itb; it != ite; ++it) + { + const std::vector& tmp = it->second; + nbIndexOnServerTmp = 0; + for (int i = 0; i < tmp.size(); ++i) + { + if (0 == nbIndexOnServerTmp(tmp[i])) ++nbIndexOnServerTmp(tmp[i]); + } + nbIndexOnServer += nbIndexOnServerTmp; + } + + for (int i = 0; i < serverSize; ++i) + { + if (0 != nbIndexOnServer(i)) + { + globalElementIndexOnServer[idx][i].resize(nbIndexOnServer(i)); + elementOnServer[idx][i] = true; + } + } + + nbIndexOnServer = 0; + for (size_t j = 0; j < globalIndexElementOnServerMap.size(); ++j) + { + it = globalIndexElementOnServerMap.find(globalIndexElementOnClient(j)); + if (it != ite) + { + const std::vector& tmp = it->second; + nbIndexOnServerTmp = 0; + for (int i = 0; i < tmp.size(); ++i) + { + if (0 == nbIndexOnServerTmp(tmp[i])) + { + globalElementIndexOnServer[idx][tmp[i]][nbIndexOnServer(tmp[i])] = it->first; + ++nbIndexOnServerTmp(tmp[i]); + } + } + nbIndexOnServer += nbIndexOnServerTmp; + } + } + } + + // Determine server which contain global source index + std::vector intersectedProc(serverSize, true); + for (int idx = 0; idx < nbElement; ++idx) { - if (m.size()!=1) ERROR("CGrid::getAssociatedScalar(const string& scalarId)", <<" scalarId = "< bad format id, separator [] append more than one time"); - id=m.prefix() ; - pos = stoi(m.str(0).substr(1,m.str(0).size()-2)) ; + std::transform(elementOnServer[idx].begin(), elementOnServer[idx].end(), + intersectedProc.begin(), intersectedProc.begin(), + std::logical_and()); } - std::vector scalarList = this->getScalars(); - if (scalarList.empty()) - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedScalar(const string& scalarId)", <<"no scalar is composing the grid"); - if (id.empty()) + + std::vector srcRank; + for (int idx = 0; idx < serverSize; ++idx) { - if (pos==-1) - { - if (scalarList.size()==1) return scalarList[0] ; - else - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedScalar(const string& scalarId)", <<"the grid contain more than 1 scalar, use [#n] to specify which one must be retrieved"); - } - else - { - if (scalarList.size()>pos) return scalarList[pos] ; - else - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedScalar(const string& scalarId)", <<"the position of the requested scalar [ pos = "<* > globalIndexOfElementTmp(nbElement); + std::vector currentIndex(nbElement,0); + for (int idx = 0; idx < nbElement; ++idx) { - int nbScalar=0 ; - for(int i=0; igetTemplateId()==id) nbScalar++ ; - if (nbScalar>1) - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedScalar(const string& scalarId)", <<"no scalar with the id = "<getTemplateId()==id) return scalarList[i] ; + ssize *= (globalElementIndexOnServer[idx][rankSrc]).size(); + globalIndexOfElementTmp[idx] = &(globalElementIndexOnServer[idx][rankSrc]); } - else + globalIndexOnServer[rankSrc].resize(ssize); + + std::vector idxLoop(nbElement,0); + int innnerLoopSize = (globalIndexOfElementTmp[0])->size(); + size_t idx = 0; + while (idx < ssize) { - int currentPos=0 ; - for(int i=0; igetTemplateId()==id && pos==currentPos) return scalarList[i] ; - currentPos++ ; + if (idxLoop[ind] == (globalIndexOfElementTmp[ind])->size()) + { + idxLoop[ind] = 0; + ++idxLoop[ind+1]; + } + + currentIndex[ind] = (*(globalIndexOfElementTmp[ind]))[idxLoop[ind]]; + } + + for (int ind = 0; ind < innnerLoopSize; ++ind) + { + currentIndex[0] = (*globalIndexOfElementTmp[0])[ind]; + size_t globalSrcIndex = 0; + for (int idxElement = 0; idxElement < nbElement; ++idxElement) + { + globalSrcIndex += currentIndex[idxElement] * elementNGlobal[idxElement]; + } + globalIndexOnServer[rankSrc][idx] = globalSrcIndex; + ++idx; + ++idxLoop[0]; } - if (noError) return nullptr; - else ERROR("CGrid::getAssociatedScalar(const string& scalarId)",<<"Cannot find scalar with [ id = "<< id <<" ] at [ pos = "< domains) - TRY - { - if (isDomListSet) return; - std::vector domList = this->getVirtualDomainGroup()->getAllChildren(); - if (!domains.empty() && domList.empty()) - { - for (int i = 0; i < domains.size(); ++i) - this->getVirtualDomainGroup()->addChild(domains[i]); - domList = this->getVirtualDomainGroup()->getAllChildren(); - } + std::vector axisListP = this->getAxis(); + std::vector domainListP = this->getDomains(); - if (!domList.empty()) - { - int sizeDom = domList.size(); - domList_.resize(sizeDom); - for (int i = 0; i < sizeDom; ++i) - { - domList_[i] = domList[i]->getId(); - } - isDomListSet = true; - } - } - CATCH_DUMP_ATTR + // First, allocate storeTileIndex[0..ntiles] + for (int iTile = 0; iTile < nTiles_; ++iTile) + { + int tileGridSize = 1; + int axisIndex = 0, domIndex = 0; + for (int idx = 0; idx < numElement; ++idx) + { + int eleDim = axis_domain_order(idx); + if (2 == eleDim) + { + tileGridSize *= domainListP[domIndex]->getTileDataISize(iTile); + tileGridSize *= domainListP[domIndex]->getTileDataJSize(iTile); + ++domIndex; + } + else if (1 == eleDim)// So it's an axis + { + tileGridSize *= axisListP[axisIndex]->n.getValue(); + ++axisIndex; + } + } // loop over grid elements + storeTileIndex[iTile].resize(tileGridSize); + storeTileIndex[iTile] = -1; + } // loop over tiles + + // Now fill in storeTileIndex + // Currently assuming two possible situations : (1) domain x axis or (2) domain + std::vector tileIndexCount (nTiles_,0); + int axisSize = 1; + if (axisListP.size() != 0) axisSize = axisListP[0]->n.getValue(); + int ni = domainListP[0]->ni.getValue(); + int nj = domainListP[0]->nj.getValue(); + + for (int idxAxis = 0; idxAxis < axisSize; ++idxAxis) + { + for (int jIdxDom = 0; jIdxDom < nj; ++jIdxDom) + { + for (int iIdxDom = 0; iIdxDom < ni; ++iIdxDom) + { + int tile = domainListP[0]->getTileId(iIdxDom, jIdxDom); + int tileOffset = domainListP[0]->tile_data_ibegin(tile); // only sign of offset matters + + // case 1: data size corresponds to tile size + if (tileOffset == 0) + { + storeTileIndex[tile](tileIndexCount[tile]) = idxAxis*nj*ni + jIdxDom * ni + iIdxDom; + ++tileIndexCount[tile]; + } + // case 2: masked data + else if (tileOffset > 0) + { + int iBegin = domainListP[0]->tile_ibegin(tile) + domainListP[0]->tile_data_ibegin(tile); // tile data relative to domain + int jBegin = domainListP[0]->tile_jbegin(tile) + domainListP[0]->tile_data_jbegin(tile); // tile data relative to domain + int iEnd = iBegin + domainListP[0]->tile_data_ni(tile); + int jEnd = jBegin + domainListP[0]->tile_data_nj(tile); + if ((jIdxDom >= jBegin) && (jIdxDom < jEnd) && (iIdxDom >= iBegin) && (iIdxDom < iEnd)) + { + storeTileIndex[tile](tileIndexCount[tile]) = idxAxis*nj*ni + jIdxDom * ni + iIdxDom; + } + ++tileIndexCount[tile]; + } + // case 3: ghost zones + else + { + int tileDataNi = domainListP[0]->tile_data_ni(tile); + int tileDataNj = domainListP[0]->tile_data_nj(tile); + int tileDomSize = tileDataNi * tileDataNj; + int tileNi = domainListP[0]->tile_ni(tile); + int iBegin = domainListP[0]->tile_data_ibegin(tile); + int jBegin = domainListP[0]->tile_data_jbegin(tile); + + // add the ghost zone at the beginning of a domain tile + if (tileIndexCount[tile] % tileDomSize == 0) + tileIndexCount[tile] += (abs(jBegin)*tileDataNi + abs(iBegin)); + + storeTileIndex[tile](tileIndexCount[tile]) = idxAxis*nj*ni + jIdxDom*ni + iIdxDom; + + // add two ghost zones at the right end of a tile + if ( (iIdxDom+1) % tileNi == 0 ) + tileIndexCount[tile] += (2*abs(iBegin)); + + // add ghost zone at the end of a domain tile + if ((tileIndexCount[tile] + abs(jBegin)*tileDataNi-abs(iBegin) + 1) % tileDomSize == 0) + tileIndexCount[tile] += (abs(jBegin)*tileDataNi -abs(iBegin)); + + ++tileIndexCount[tile]; + } + } // loop over domain first dimension + } // loop over domain second dimension + } // loop over axis dimension - /*! - \brief Set axis(s) of a grid from a list - \param[in] axis list of axis - */ - void CGrid::setAxisList(const std::vector axis) - TRY - { - if (isAxisListSet) return; - std::vector aList = this->getVirtualAxisGroup()->getAllChildren(); - if (!axis.empty() && aList.empty()) - { - for (int i = 0; i < axis.size(); ++i) - this->getVirtualAxisGroup()->addChild(axis[i]); - aList = this->getVirtualAxisGroup()->getAllChildren(); - } + } + CATCH_DUMP_ATTR - if (!aList.empty()) - { - int sizeAxis = aList.size(); - axisList_.resize(sizeAxis); - for (int i = 0; i < sizeAxis; ++i) - { - axisList_[i] = aList[i]->getId(); - } - isAxisListSet = true; - } - } - CATCH_DUMP_ATTR +//---------------------------------------------------------------- - /*! - \brief Set scalar(s) of a grid from a list - \param[in] scalars list of scalars - */ - void CGrid::setScalarList(const std::vector scalars) - TRY - { - if (isScalarListSet) return; - std::vector sList = this->getVirtualScalarGroup()->getAllChildren(); - if (!scalars.empty() && sList.empty()) - { - for (int i = 0; i < scalars.size(); ++i) - this->getVirtualScalarGroup()->addChild(scalars[i]); - sList = this->getVirtualScalarGroup()->getAllChildren(); - } + CGrid* CGrid::createGrid(CDomain* domain) + TRY + { + std::vector vecDom(1, domain); + std::vector vecAxis; - if (!sList.empty()) - { - int sizeScalar = sList.size(); - scalarList_.resize(sizeScalar); - for (int i = 0; i < sizeScalar; ++i) - { - scalarList_[i] = sList[i]->getId(); - } - isScalarListSet = true; - } - } - CATCH_DUMP_ATTR + return createGrid(vecDom, vecAxis); + } + CATCH - /*! - \brief Get list of id of domains - \return id list of domains - */ - std::vector CGrid::getDomainList() - TRY + CGrid* CGrid::createGrid(CDomain* domain, CAxis* axis) + TRY { - setDomainList(); - return domList_; - } - CATCH + std::vector vecDom(1, domain); + std::vector vecAxis(1, axis); - /*! - \brief Get list of id of axis - \return id list of axis - */ - std::vector CGrid::getAxisList() - TRY - { - setAxisList(); - return axisList_; - } - CATCH + return createGrid(vecDom, vecAxis); + } + CATCH - /*! - \brief Get list of id of scalar - \return id list of scalar - */ - std::vector CGrid::getScalarList() - TRY - { - setScalarList(); - return scalarList_; - } - CATCH + CGrid* CGrid::createGrid(const std::vector& domains, const std::vector& axis, + const CArray& axisDomainOrder) + TRY + { + std::vector vecScalar; + return createGrid(generateId(domains, axis, vecScalar, axisDomainOrder), domains, axis, vecScalar, axisDomainOrder); + } + CATCH + CGrid* CGrid::createGrid(const std::vector& domains, const std::vector& axis, + const std::vector& scalars, const CArray& axisDomainOrder) + TRY + { + return createGrid(generateId(domains, axis, scalars, axisDomainOrder), domains, axis, scalars, axisDomainOrder); + } + CATCH - void CGrid::computeElements(void) - { - const auto& domains = getDomains() ; - const auto& axis = getAxis() ; - const auto& scalars = getScalars() ; - int idxDomain = 0, idxAxis=0 , idxScalar=0 ; - - elements_.clear() ; - for(auto type : order_) - { - if (type == 0) { elements_.push_back({scalars[idxScalar], TYPE_SCALAR, scalars[idxScalar], nullptr, nullptr } ) ; idxScalar++;} - else if (type == 1) { elements_.push_back({axis[idxAxis], TYPE_AXIS, nullptr, axis[idxAxis], nullptr}) ; idxAxis++;} - else if (type == 2) { elements_.push_back({domains[idxDomain], TYPE_DOMAIN, nullptr, nullptr, domains[idxDomain] }) ; idxDomain++;} - } - elementsComputed_ = true ; - } - - - /*! - Parse a grid, for now, it contains only domain, axis and scalar - */ - void CGrid::parse(xml::CXMLNode& node) - TRY - { - SuperClass::parse(node); + CGrid* CGrid::createGrid(StdString id, const std::vector& domains, const std::vector& axis, + const std::vector& scalars, const CArray& axisDomainOrder) + TRY + { + if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) + ERROR("CGrid* CGrid::createGrid(...)", + << "The size of axisDomainOrder (" << axisDomainOrder.numElements() + << ") is not coherent with the number of elements (" << domains.size() + axis.size() <<")."); - if (node.goToChildElement()) - { - StdString domainName("domain"); - StdString axisName("axis"); - StdString scalarName("scalar"); - do + CGrid* grid = CGridGroup::get("grid_definition")->createChild(id); + grid->setDomainList(domains); + grid->setAxisList(axis); + grid->setScalarList(scalars); + + // By default, domains are always the first elements of a grid + if (0 == axisDomainOrder.numElements()) { - if (node.getElementName() == domainName) { - order_.push_back(2); - this->getVirtualDomainGroup()->parseChild(node); - } - if (node.getElementName() == axisName) { - order_.push_back(1); - this->getVirtualAxisGroup()->parseChild(node); - } - if (node.getElementName() == scalarName) { - order_.push_back(0); - this->getVirtualScalarGroup()->parseChild(node); + int size = domains.size() + axis.size() + scalars.size(); + int nb = 0; + grid->axis_domain_order.resize(size); + for (int i = 0; i < size; ++i) + { + if (i < domains.size()) { + grid->axis_domain_order(i) = 2; + + } + else if ((scalars.size() < (size-nb)) < size) { + grid->axis_domain_order(i) = 1; + } + else + grid->axis_domain_order(i) = 0; + ++nb; } - } while (node.goToNextElement()); - node.goToParentElement(); - } + } + else + { + grid->axis_domain_order.resize(axisDomainOrder.numElements()); + grid->axis_domain_order = axisDomainOrder; + } - if (!order_.empty()) - { - int sizeOrd = order_.size(); - axis_domain_order.resize(sizeOrd); - for (int i = 0; i < sizeOrd; ++i) + grid->solveDomainAxisRefInheritance(true); + + return grid; + } + CATCH + + CGrid* CGrid::cloneGrid(const StdString& idNewGrid, CGrid* gridSrc) + TRY + { + std::vector domainSrcTmp = gridSrc->getDomains(), domainSrc; + std::vector axisSrcTmp = gridSrc->getAxis(), axisSrc; + std::vector scalarSrcTmp = gridSrc->getScalars(), scalarSrc; + + for (int idx = 0; idx < domainSrcTmp.size(); ++idx) + { + CDomain* domain = CDomain::createDomain(); + domain->duplicateAttributes(domainSrcTmp[idx]); + domain->duplicateTransformation(domainSrcTmp[idx]); + domain->solveRefInheritance(true); + domain->solveInheritanceTransformation(); + domainSrc.push_back(domain); + } + + for (int idx = 0; idx < axisSrcTmp.size(); ++idx) + { + CAxis* axis = CAxis::createAxis(); + axis->duplicateAttributes(axisSrcTmp[idx]); + axis->duplicateTransformation(axisSrcTmp[idx]); + axis->solveRefInheritance(true); + axis->solveInheritanceTransformation(); + axisSrc.push_back(axis); + } + + for (int idx = 0; idx < scalarSrcTmp.size(); ++idx) + { + CScalar* scalar = CScalar::createScalar(); + scalar->duplicateAttributes(scalarSrcTmp[idx]); + scalar->duplicateTransformation(scalarSrcTmp[idx]); + scalar->solveRefInheritance(true); + scalar->solveInheritanceTransformation(); + scalarSrc.push_back(scalar); + } + + CGrid* grid = CGrid::createGrid(idNewGrid, domainSrc, axisSrc, scalarSrc, gridSrc->axis_domain_order); + + return grid; + } + CATCH + + StdString CGrid::generateId(const std::vector& domains, const std::vector& axis, + const std::vector& scalars, const CArray& axisDomainOrder) + TRY + { + if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) + ERROR("CGrid* CGrid::generateId(...)", + << "The size of axisDomainOrder (" << axisDomainOrder.numElements() + << ") is not coherent with the number of elements (" << domains.size() + axis.size() <<")."); + + std::ostringstream id; + + if (domains.empty() && axis.empty() && !scalars.empty()) + id << "__scalar_"; + + if (0 != (domains.size() + axis.size() + scalars.size())) { - axis_domain_order(i) = order_[i]; + id << "__grid"; + + if (0 == axisDomainOrder.numElements()) + { + for (size_t i = 0; i < domains.size(); ++i) id << "_" << domains[i]->getId(); + for (size_t i = 0; i < axis.size(); ++i) id << "_" << axis[i]->getId(); + for (size_t i = 0; i < scalars.size(); ++i) id << "_" << scalars[i]->getId(); + } + else + { + size_t iDomain = 0, iAxis = 0, iScalar = 0; + for (size_t i = 0; i < axisDomainOrder.numElements(); ++i) + { + if (2 == axisDomainOrder(i)) + id << "_" << domains[iDomain++]->getId(); + else if (1 == axisDomainOrder(i)) + id << "_" << axis[iAxis++]->getId(); + else + id << "_" << scalars[iScalar++]->getId(); + } + } + + id << "__"; } - } - setDomainList(); - setAxisList(); - setScalarList(); - computeElements() ; + return id.str(); } - CATCH_DUMP_ATTR + CATCH + StdString CGrid::generateId(const CGrid* gridSrc, const CGrid* gridDest) + TRY + { + StdString idSrc = gridSrc->getId(); + StdString idDest = gridDest->getId(); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + std::ostringstream id; + id << idSrc << "__" << idDest; + return id.str(); + } + CATCH + //---------------------------------------------------------------- - StdSize CGrid::getDimension(void) + CDomainGroup* CGrid::getVirtualDomainGroup() const TRY { - return getGlobalDimension().size(); + return this->vDomainGroup_; } - CATCH_DUMP_ATTR - - //--------------------------------------------------------------- + CATCH - StdSize CGrid::getDataSize(void) + CAxisGroup* CGrid::getVirtualAxisGroup() const TRY { - StdSize retvalue = 1; - if (!isScalarGrid()) - { - std::vector dataNindex = getClientDistribution()->getDataNIndex(); - for (int i = 0; i < dataNindex.size(); ++i) retvalue *= dataNindex[i]; - } - return retvalue; + return this->vAxisGroup_; } CATCH - - /*! - * Get the local data grid size, ie the size of the compressed grid (inside the workflow) - * \return The size od the compressed grid - */ - StdSize CGrid::getLocalDataSize(void) { return getClientDistribution()->getLocalDataSize();} - - /*! - * Compute the minimum buffer size required to send the attributes to the server(s). - * - * \return A map associating the server rank with its minimum buffer size. - * TODO: Refactor code - */ - std::map CGrid::getAttributesBufferSize(CContextClient* client, bool bufferForWriting) + CScalarGroup* CGrid::getVirtualScalarGroup() const TRY { - std::map attributesSizes = getMinimumBufferSizeForAttributes(client); - - // The grid indexes require a similar size as the actual data - std::map dataSizes = getDataBufferSize(client, "", bufferForWriting); - std::map::iterator it, itE = dataSizes.end(); - for (it = dataSizes.begin(); it != itE; ++it) - { - it->second += 2 * sizeof(bool); - if (it->second > attributesSizes[it->first]) - attributesSizes[it->first] = it->second; - } - - // Account for the axis attributes - std::vector axisList = getAxis(); - for (size_t i = 0; i < axisList.size(); ++i) - { - std::map axisAttBuffSize = axisList[i]->getAttributesBufferSize(client, getGlobalDimension(),getAxisPositionInGrid()[i]); - for (it = axisAttBuffSize.begin(), itE = axisAttBuffSize.end(); it != itE; ++it) - { - it->second += 2 * sizeof(bool); - if (it->second > attributesSizes[it->first]) - attributesSizes[it->first] = it->second; - } - } - - // Account for the domain attributes - std::vector domList = getDomains(); - for (size_t i = 0; i < domList.size(); ++i) - { - std::map domAttBuffSize = domList[i]->getAttributesBufferSize(client); - for (it = domAttBuffSize.begin(), itE = domAttBuffSize.end(); it != itE; ++it) - { - it->second += 2 * sizeof(bool); - if (it->second > attributesSizes[it->first]) - attributesSizes[it->first] = it->second; - } - } - - return attributesSizes; - } - CATCH_DUMP_ATTR - - /*! - * Compute the minimum buffer size required to send the data. - * \param client contextClient used to determine the size of connected receivers - * \param id the id used to tag the data - * \param bufferForWriting flag indicating if a buffer is used to send data for writing - * \return A map associating the sender rank with its minimum buffer size. - */ - std::map CGrid::getDataBufferSize(CContextClient* client, const std::string& id /*= ""*/, bool bufferForWriting /*= "false"*/) - TRY - { - // The record index is sometimes sent along with the data but we always - // include it in the size calculation for the sake of simplicity - const size_t extraSize = CEventClient::headerSize + (id.empty() ? getId() : id).size() - + 2 * sizeof(size_t) - + sizeof(size_t); - - std::map dataSizes; - int receiverSize = client->serverSize; - std::map& dataSizeMap = bufferForWriting ? connectedDataSize_[receiverSize]: connectedDataSizeRead_; - std::vector& connectedServerRanks = bufferForWriting ? connectedServerRank_[receiverSize] : connectedServerRankRead_; + return this->vScalarGroup_; + } + CATCH - std::map::const_iterator itEnd = dataSizeMap.end(); - for (size_t k = 0; k < connectedServerRanks.size(); ++k) +/* + void CGrid::outputField(int rank, const CArray& stored, double* field) + { + const CArray& out_i = outIndexFromClient[rank]; + StdSize numElements = stored.numElements(); + for (StdSize n = 0; n < numElements; ++n) { - int rank = connectedServerRanks[k]; - std::map::const_iterator it = dataSizeMap.find(rank); - size_t count = (it != itEnd) ? it->second : 0; - - dataSizes.insert(std::make_pair(rank, extraSize + CArray::size(count))); + field[out_i(n)] = stored(n); } - - return dataSizes; } - CATCH_DUMP_ATTR - size_t CGrid::getGlobalWrittenSize(void) - TRY + void CGrid::inputField(int rank, const double* const field, CArray& stored) { - std::vector domainP = this->getDomains(); - std::vector axisP = this->getAxis(); - - size_t globalGridSize=1 ; - for (std::vector::iterator it=domainP.begin(); it!=domainP.end();++it) globalGridSize*=(*it)->getGlobalWrittenSize() ; - for (std::vector::iterator it=axisP.begin(); it!=axisP.end();++it) globalGridSize*=(*it)->getGlobalWrittenSize() ; - return globalGridSize ; + const CArray& out_i = outIndexFromClient[rank]; + StdSize numElements = stored.numElements(); + for (StdSize n = 0; n < numElements; ++n) + { + stored(n) = field[out_i(n)]; + } } - CATCH_DUMP_ATTR - - void CGrid::computeAxisPositionInGrid(void) + void CGrid::outputCompressedField(int rank, const CArray& stored, double* field) { - axisPositionInGrid_.resize(0); - int idx = 0; - for (int i = 0; i < axis_domain_order.numElements(); ++i) + const CArray& out_i = compressedOutIndexFromClient[rank]; + StdSize numElements = stored.numElements(); + for (StdSize n = 0; n < numElements; ++n) { - int elementDimension = axis_domain_order(i); - if (1 == elementDimension) - { - axisPositionInGrid_.push_back(idx); - ++idx; - } - else if (2 == elementDimension) idx += 2; + field[out_i(n)] = stored(n); } } +*/ + //---------------------------------------------------------------- - - /*! - * Test whether the data defined on the grid can be outputted in a compressed way. - * - * \return true if and only if a mask was defined for this grid - */ - bool CGrid::isCompressible(void) const + void CGrid::storeField_arr(const double* const data, CArray& stored) const TRY { - return isCompressible_; + const StdSize size = storeIndex_client.numElements(); + + stored.resize(size); + for(StdSize i = 0; i < size; i++) stored(i) = data[storeIndex_client(i)]; } CATCH - //--------------------------------------------------------------- - - void CGrid::addRelFileCompressed(const StdString& filename) + void CGrid::restoreField_arr(const CArray& stored, double* const data) const TRY { - this->relFilesCompressed.insert(filename); - } - CATCH_DUMP_ATTR + const StdSize size = storeIndex_client.numElements(); - bool CGrid::isWrittenCompressed(const StdString& filename) const - TRY - { - return (this->relFilesCompressed.find(filename) != this->relFilesCompressed.end()); + for(StdSize i = 0; i < size; i++) data[storeIndex_client(i)] = stored(i); } CATCH - //--------------------------------------------------------------- - /* - Find all reference of grid's components and inherite attributes if necessary - */ - void CGrid::solveDomainAxisRef(bool areAttributesChecked) + void CGrid::maskField_arr(const double* const data, CArray& stored, bool isTiled) const TRY { - if (this->isDomainAxisChecked) return; - - this->solveScalarRef(areAttributesChecked); - this->solveAxisRef(areAttributesChecked); - this->solveDomainRef(areAttributesChecked); - this->isDomainAxisChecked = areAttributesChecked; + const CArray& storeIndex_clientP = isTiled ? storeIndexTiled_client : storeIndex_client; + const CArray& storeMask_clientP = isTiled ? storeMaskTiled_client : storeMask_client; + const StdSize size = storeIndex_clientP.numElements(); + stored.resize(size); + const double nanValue = std::numeric_limits::quiet_NaN(); + + if (storeMask_clientP.numElements() != 0) + for(StdSize i = 0; i < size; i++) stored(i) = (storeMask_clientP(i)) ? data[storeIndex_clientP(i)] : nanValue; + else + for(StdSize i = 0; i < size; i++) stored(i) = data[storeIndex_clientP(i)]; } - CATCH_DUMP_ATTR + CATCH - /* - Go up hierachy reference and fill in the base reference with attributes of the children - This function should be only used after reading component's attributes from file - */ - void CGrid::solveDomainAxisBaseRef() + void CGrid::copyTile_arr(const double* const tileData, CArray& stored, int tileId) TRY { - if (this->hasDomainAxisBaseRef_) return; - // Account for the scalar attributes - std::vector scalarList = getScalars(); - for (size_t i = 0; i < scalarList.size(); ++i) - { - scalarList[i]->setAttributesReference(); - } + StdSize tileSize = this->getTileSize(tileId); + const StdSize tileDataSize = this->getTileDataSize(tileId); - // Account for the axis attributes - std::vector axisList = getAxis(); - for (size_t i = 0; i < axisList.size(); ++i) + // case 1: data correspond in size to a tile + if (tileSize == tileDataSize) { - axisList[i]->setAttributesReference(); + for(StdSize i = 0; i < tileDataSize; i++) + stored(storeTileIndex[tileId](i)) = tileData[i]; } - - // Account for the domain attributes - std::vector domList = getDomains(); - for (size_t i = 0; i < domList.size(); ++i) + // case 2: masked data + else if (tileSize > tileDataSize) { - domList[i]->setAttributesReference(); + int tileDataCount = 0; + for(StdSize i = 0; i < tileSize; i++) + if (storeTileIndex[tileId](i) >= 0) + { + stored(storeTileIndex[tileId](i)) = tileData[tileDataCount]; + ++tileDataCount; + } } + // case 3: ghost zones + else + { + for(StdSize i = 0; i < tileDataSize; i++) + if (storeTileIndex[tileId](i) >= 0) + { + stored(storeTileIndex[tileId](i)) = tileData[i]; + } - this->hasDomainAxisBaseRef_ = true; + } } - CATCH_DUMP_ATTR + CATCH - void CGrid::checkEligibilityForCompressedOutput() + void CGrid::uncompressField_arr(const double* const data, CArray& out) const TRY { - // We don't check if the mask is valid here, just if a mask has been defined at this point. - isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty(); + const std::vector& localMaskedDataIndex = clientDistribution_->getLocalMaskedDataIndexOnClient(); + const int size = localMaskedDataIndex.size(); + for(int i = 0; i < size; ++i) out(localMaskedDataIndex[i]) = data[i]; } - CATCH_DUMP_ATTR + CATCH - //ym obsolete -> to be removed later - void CGrid::checkMaskIndex(bool doSendingIndex) - TRY - { - CContext* context = CContext::getCurrent(); - - if (this->isChecked) return; - this->checkElementsAttributes(); - this->isChecked = true; - } - CATCH_DUMP_ATTR + void CGrid::computeClientIndexScalarGrid() + TRY + { + CContext* context = CContext::getCurrent(); + { + CContextClient* client = context->client; + + int rank = client->clientRank; + + clientDistribution_ = new CDistributionClient(rank, this); + + storeIndex_client.resize(1); + storeIndex_client(0) = 0; + + if (0 != serverDistribution_) + { + map >::iterator itb = outGlobalIndexFromClient.begin(), + ite = outGlobalIndexFromClient.end(), it; + for (it = itb; it != ite; ++it) + { + int rank = it->first; + CArray& globalIndex = outGlobalIndexFromClient[rank]; + outLocalIndexStoreOnClient.insert(make_pair(rank, CArray(globalIndex.numElements()))); + CArray& localIndex = outLocalIndexStoreOnClient[rank]; + if (1 != globalIndex.numElements()) + ERROR("void CGrid::computeClientIndexScalarGrid()", + << "Something wrong happened. " + << "Number of received global index on scalar grid should equal to 1" + << "Number of received global index " << globalIndex.numElements() << "."); + + localIndex(0) = globalIndex(0); + } + } + } + } + CATCH_DUMP_ATTR + + void CGrid::computeConnectedClientsScalarGrid() + TRY + { + CContext* context = CContext::getCurrent(); + int nbSrvPools = (context->clientPrimServer.size()==0) ? 1 : context->clientPrimServer.size(); + connectedServerRank_.clear(); + connectedDataSize_.clear(); + nbSenders.clear(); + + for (int p = 0; p < nbSrvPools; ++p) + { + CContextClient* client = (context->clientPrimServer.size()==0) ? context->client : context->clientPrimServer[p]; + int receiverSize = client->serverSize; + +// connectedServerRank_[client].clear(); + + if (connectedServerRank_.find(receiverSize)==connectedServerRank_.end()) + { + if (client->isServerLeader()) + { + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + int rank = *itRank; + int nb = 1; + connectedServerRank_[receiverSize].push_back(rank); + connectedDataSize_[receiverSize][rank] = nb; + nbSenders[receiverSize][rank] = nb; + } + } + else + { + const std::list& ranks = client->getRanksServerNotLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + int rank = *itRank; + int nb = 1; + connectedServerRank_[receiverSize].push_back(rank); + connectedDataSize_[receiverSize][rank] = nb; + nbSenders[receiverSize][rank] = nb; + } + } + } + isDataDistributed_ = false; + } + } + CATCH_DUMP_ATTR + + void CGrid::sendIndexScalarGrid() + TRY + { + CContext* context = CContext::getCurrent(); + storeIndex_toSrv.clear(); + std::list::iterator it; + + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + int receiverSize = client->serverSize; + CEventClient event(getType(), EVENT_ID_INDEX); + list listMsg; + list > listOutIndex; - bool CGrid::hasMask() const - TRY - { - return (!mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty() || - !mask_4d.isEmpty() || !mask_5d.isEmpty() || !mask_6d.isEmpty() || !mask_7d.isEmpty()); - } - CATCH + if (client->isServerLeader()) + { + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + int rank = *itRank; + int nb = 1; + storeIndex_toSrv[client].insert(std::make_pair(rank, CArray(nb))); + listOutIndex.push_back(CArray(nb)); - - CArray& CGrid::getMask(void) - { - - if (mask_.isEmpty()) - { - if (!mask_0d.isEmpty()) mask_.reference(CArray(mask_0d.dataFirst(),shape(mask_0d.numElements()), neverDeleteData)) ; - if (!mask_1d.isEmpty()) mask_.reference(CArray(mask_1d.dataFirst(),shape(mask_1d.numElements()), neverDeleteData)) ; - if (!mask_2d.isEmpty()) mask_.reference(CArray(mask_2d.dataFirst(),shape(mask_2d.numElements()), neverDeleteData)) ; - if (!mask_3d.isEmpty()) mask_.reference(CArray(mask_3d.dataFirst(),shape(mask_3d.numElements()), neverDeleteData)) ; - if (!mask_4d.isEmpty()) mask_.reference(CArray(mask_4d.dataFirst(),shape(mask_4d.numElements()), neverDeleteData)) ; - if (!mask_5d.isEmpty()) mask_.reference(CArray(mask_5d.dataFirst(),shape(mask_5d.numElements()), neverDeleteData)) ; - if (!mask_6d.isEmpty()) mask_.reference(CArray(mask_6d.dataFirst(),shape(mask_6d.numElements()), neverDeleteData)) ; - if (!mask_7d.isEmpty()) mask_.reference(CArray(mask_7d.dataFirst(),shape(mask_7d.numElements()), neverDeleteData)) ; - } - return mask_ ; - } + CArray& outLocalIndexToServer = storeIndex_toSrv[client][rank]; + CArray& outGlobalIndexOnServer = listOutIndex.back(); - - //--------------------------------------------------------------- + for (int k = 0; k < nb; ++k) + { + outGlobalIndexOnServer(k) = 0; + outLocalIndexToServer(k) = 0; + } - void CGrid::solveDomainRef(bool sendAtt) - TRY - { - setDomainList(); - std::vector domListP = this->getDomains(); - if (!domListP.empty()) - for (int i = 0; i < domListP.size(); ++i) domListP[i]->checkAttributes(); - } - CATCH_DUMP_ATTR + if (context->hasClient && !context->hasServer) + storeIndex_fromSrv.insert(std::make_pair(rank, CArray(outLocalIndexToServer))); - //--------------------------------------------------------------- + listMsg.push_back(CMessage()); + listMsg.back() << getId( )<< isDataDistributed_ << isCompressible_ << listOutIndex.back(); - void CGrid::solveAxisRef(bool sendAtt) - TRY - { - setAxisList(); - std::vector axisListP = this->getAxis(); - if (!axisListP.empty()) - for (int i = 0; i < axisListP.size(); ++i) axisListP[i]->checkAttributes(); - } - CATCH_DUMP_ATTR + event.push(rank, 1, listMsg.back()); + } + client->sendEvent(event); + } + else + { + const std::list& ranks = client->getRanksServerNotLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + int rank = *itRank; + int nb = 1; + CArray outLocalIndexToServer(nb); + for (int k = 0; k < nb; ++k) + { + outLocalIndexToServer(k) = 0; + } - //--------------------------------------------------------------- + if (context->hasClient && !context->hasServer) + storeIndex_fromSrv.insert(std::make_pair(rank, CArray(outLocalIndexToServer))); + } + client->sendEvent(event); + } + } + } + CATCH_DUMP_ATTR - void CGrid::solveScalarRef(bool sendAtt) - TRY - { - setScalarList(); - std::vector scalarListP = this->getScalars(); - if (!scalarListP.empty()) - for (int i = 0; i < scalarListP.size(); ++i) scalarListP[i]->checkAttributes() ; - } - CATCH_DUMP_ATTR + void CGrid::sendIndex(void) + TRY + { + CContext* context = CContext::getCurrent(); + storeIndex_toSrv.clear(); + std::list::iterator it; + for (it=clients.begin(); it!=clients.end(); ++it) + { + CContextClient* client = *it; + int receiverSize = client->serverSize; + + CEventClient event(getType(), EVENT_ID_INDEX); + int rank; + list listMsg; + list > listOutIndex; + const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = clientDistribution_->getGlobalLocalDataSendToServer(); + CDistributionClient::GlobalLocalDataMap::const_iterator itbIndex = globalLocalIndexSendToServer.begin(), itIndex, + iteIndex = globalLocalIndexSendToServer.end(); + itIndex = itbIndex; + + if (!doGridHaveDataDistributed(client)) + { + if (client->isServerLeader()) + { + int indexSize = globalLocalIndexSendToServer.size(); + CArray outGlobalIndexOnServer(indexSize); + CArray outLocalIndexToServer(indexSize); + for (int idx = 0; itIndex != iteIndex; ++itIndex, ++idx) + { + outGlobalIndexOnServer(idx) = itIndex->first; + outLocalIndexToServer(idx) = itIndex->second; + } - //--------------------------------------------------------------- - CDistributionClient* CGrid::getClientDistribution() - TRY - { - if (!computeClientDistribution_done_) computeClientDistribution() ; - return clientDistribution_; - } - CATCH_DUMP_ATTR - - void CGrid::computeClientDistribution(void) - { - if (computeClientDistribution_done_) return ; - else computeClientDistribution_done_ = true ; + const std::list& ranks = client->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + storeIndex_toSrv[client].insert(std::make_pair(*itRank, CArray(outLocalIndexToServer))); + if (context->hasClient && !context->hasServer) + storeIndex_fromSrv.insert(std::make_pair(*itRank, CArray(outLocalIndexToServer))); + + listOutIndex.push_back(CArray(outGlobalIndexOnServer)); - CContext* context = CContext::getCurrent(); - int rank = context-> getIntraCommRank(); - clientDistribution_ = new CDistributionClient(rank, this); - } + listMsg.push_back(CMessage()); + listMsg.back() << getId() << isDataDistributed_ << isCompressible_ << listOutIndex.back(); + event.push(*itRank, 1, listMsg.back()); + } + client->sendEvent(event); + } + else + { + int indexSize = globalLocalIndexSendToServer.size(); + CArray outLocalIndexToServer(indexSize); + for (int idx = 0; itIndex != iteIndex; ++itIndex, ++idx) + { + outLocalIndexToServer(idx) = itIndex->second; + } + + const std::list& ranks = client->getRanksServerNotLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + { + storeIndex_fromSrv.insert(std::make_pair(*itRank, CArray(outLocalIndexToServer))); + } + client->sendEvent(event); + } + } + else + { + CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap; + itGlobalMap = globalIndexOnServer_[receiverSize].begin(); + iteGlobalMap = globalIndexOnServer_[receiverSize].end(); - bool CGrid::isDataDistributed(void) - { - return getClientDistribution()->isDataDistributed() ; - } + std::map >localIndexTmp; + std::map > globalIndexTmp; + for (; itGlobalMap != iteGlobalMap; ++itGlobalMap) + { + int serverRank = itGlobalMap->first; + int indexSize = itGlobalMap->second.size(); + const std::vector& indexVec = itGlobalMap->second; + for (int idx = 0; idx < indexSize; ++idx) + { + itIndex = globalLocalIndexSendToServer.find(indexVec[idx]); + if (iteIndex != itIndex) + { + globalIndexTmp[serverRank].push_back(itIndex->first); + localIndexTmp[serverRank].push_back(itIndex->second); + } + } + } - + for (int ns = 0; ns < connectedServerRank_[receiverSize].size(); ++ns) + { + rank = connectedServerRank_[receiverSize][ns]; + int nb = 0; + if (globalIndexTmp.end() != globalIndexTmp.find(rank)) + nb = globalIndexTmp[rank].size(); - CGrid* CGrid::cloneGrid(const StdString& idNewGrid, CGrid* gridSrc) - TRY - { - std::vector domainSrcTmp = gridSrc->getDomains(), domainSrc; - std::vector axisSrcTmp = gridSrc->getAxis(), axisSrc; - std::vector scalarSrcTmp = gridSrc->getScalars(), scalarSrc; + storeIndex_toSrv[client].insert(make_pair(rank, CArray(nb))); + listOutIndex.push_back(CArray(nb)); - for (int idx = 0; idx < domainSrcTmp.size(); ++idx) - { - CDomain* domain = CDomain::createDomain(); - domain->duplicateAttributes(domainSrcTmp[idx]); - domain->duplicateTransformation(domainSrcTmp[idx]); - domain->solveRefInheritance(true); - domain->solveInheritanceTransformation(); - domainSrc.push_back(domain); - } + CArray& outLocalIndexToServer = storeIndex_toSrv[client][rank]; + CArray& outGlobalIndexOnServer = listOutIndex.back(); - for (int idx = 0; idx < axisSrcTmp.size(); ++idx) - { - CAxis* axis = CAxis::createAxis(); - axis->duplicateAttributes(axisSrcTmp[idx]); - axis->duplicateTransformation(axisSrcTmp[idx]); - axis->solveRefInheritance(true); - axis->solveInheritanceTransformation(); - axisSrc.push_back(axis); - } + for (int k = 0; k < nb; ++k) + { + outGlobalIndexOnServer(k) = globalIndexTmp[rank].at(k); + outLocalIndexToServer(k) = localIndexTmp[rank].at(k); + } - for (int idx = 0; idx < scalarSrcTmp.size(); ++idx) - { - CScalar* scalar = CScalar::createScalar(); - scalar->duplicateAttributes(scalarSrcTmp[idx]); - scalar->duplicateTransformation(scalarSrcTmp[idx]); - scalar->solveRefInheritance(true); - scalar->solveInheritanceTransformation(); - scalarSrc.push_back(scalar); - } + storeIndex_fromSrv.insert(make_pair(rank, CArray(outLocalIndexToServer))); + listMsg.push_back(CMessage()); + listMsg.back() << getId() << isDataDistributed_ << isCompressible_ << listOutIndex.back(); - CGrid* grid = CGrid::createGrid(idNewGrid, domainSrc, axisSrc, scalarSrc, gridSrc->axis_domain_order); + event.push(rank, nbSenders[receiverSize][rank], listMsg.back()); + } - return grid; - } - CATCH + client->sendEvent(event); + } + } + } + CATCH_DUMP_ATTR - StdString CGrid::generateId(const std::vector& domains, const std::vector& axis, - const std::vector& scalars, const CArray& axisDomainOrder) - TRY - { - if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) - ERROR("CGrid* CGrid::generateId(...)", - << "The size of axisDomainOrder (" << axisDomainOrder.numElements() - << ") is not coherent with the number of elements (" << domains.size() + axis.size() <<")."); + void CGrid::recvIndex(CEventServer& event) + TRY + { + string gridId; + vector ranks; + vector buffers; - std::ostringstream id; + list::iterator it; + for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) + { + ranks.push_back(it->rank); + CBufferIn* buffer = it->buffer; + *buffer >> gridId; + buffers.push_back(buffer); + } + get(gridId)->recvIndex(ranks, buffers); + } + CATCH - if (domains.empty() && axis.empty() && !scalars.empty()) - id << "__scalar_"; + void CGrid::recvIndex(vector ranks, vector buffers) + TRY + { + CContext* context = CContext::getCurrent(); + connectedServerRankRead_ = ranks; - if (0 != (domains.size() + axis.size() + scalars.size())) + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; + nbSrvPools = 1; + nbReadSenders.clear(); + for (int p = 0; p < nbSrvPools; ++p) + { + CContextServer* server = (!context->hasClient) ? context->server : context->serverPrimServer[p]; + CContextClient* client = context->client; //(!context->hasClient) ? context->client : context->clientPrimServer[p]; + + int idx = 0, numElement = axis_domain_order.numElements(); + int ssize = numElement; + std::vector indexMap(numElement); + for (int i = 0; i < numElement; ++i) { - id << "__grid"; - - if (0 == axisDomainOrder.numElements()) + indexMap[i] = idx; + if (2 == axis_domain_order(i)) { - for (size_t i = 0; i < domains.size(); ++i) id << "_" << domains[i]->getId(); - for (size_t i = 0; i < axis.size(); ++i) id << "_" << axis[i]->getId(); - for (size_t i = 0; i < scalars.size(); ++i) id << "_" << scalars[i]->getId(); + ++ssize; + idx += 2; } else + ++idx; + } + + for (int n = 0; n < ranks.size(); n++) + { + int rank = ranks[n]; + CBufferIn& buffer = *buffers[n]; + + buffer >> isDataDistributed_ >> isCompressible_; + size_t dataSize = 0; + + if (0 == serverDistribution_) { - size_t iDomain = 0, iAxis = 0, iScalar = 0; - for (size_t i = 0; i < axisDomainOrder.numElements(); ++i) + int axisId = 0, domainId = 0, scalarId = 0, globalSize = 1; + std::vector domainList = getDomains(); + std::vector axisList = getAxis(); + std::vector nBegin(ssize), nSize(ssize), nGlob(ssize), nBeginGlobal(ssize), nGlobElement(numElement); + std::vector > globalIndex(numElement); + for (int i = 0; i < numElement; ++i) { - if (2 == axisDomainOrder(i)) - id << "_" << domains[iDomain++]->getId(); - else if (1 == axisDomainOrder(i)) - id << "_" << axis[iAxis++]->getId(); - else - id << "_" << scalars[iScalar++]->getId(); + nGlobElement[i] = globalSize; + if (2 == axis_domain_order(i)) //domain + { + nBegin[indexMap[i]] = domainList[domainId]->ibegin; + nSize[indexMap[i]] = domainList[domainId]->ni; + nBeginGlobal[indexMap[i]] = 0; + nGlob[indexMap[i]] = domainList[domainId]->ni_glo; + + nBegin[indexMap[i] + 1] = domainList[domainId]->jbegin; + nSize[indexMap[i] + 1] = domainList[domainId]->nj; + nBeginGlobal[indexMap[i] + 1] = 0; + nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; + + { + int count = 0; + globalIndex[i].resize(nSize[indexMap[i]]*nSize[indexMap[i]+1]); + for (int jdx = 0; jdx < nSize[indexMap[i]+1]; ++jdx) + for (int idx = 0; idx < nSize[indexMap[i]]; ++idx) + { + globalIndex[i](count) = (nBegin[indexMap[i]] + idx) + (nBegin[indexMap[i]+1] + jdx) * nGlob[indexMap[i]]; + ++count; + } + } + + ++domainId; + } + else if (1 == axis_domain_order(i)) // axis + { + nBegin[indexMap[i]] = axisList[axisId]->begin; + nSize[indexMap[i]] = axisList[axisId]->n; + nBeginGlobal[indexMap[i]] = 0; + nGlob[indexMap[i]] = axisList[axisId]->n_glo; + globalIndex[i].resize(nSize[indexMap[i]]); + for (int idx = 0; idx < nSize[indexMap[i]]; ++idx) + globalIndex[i](idx) = nBegin[indexMap[i]] + idx; + + ++axisId; + } + else // scalar + { + nBegin[indexMap[i]] = 0; + nSize[indexMap[i]] = 1; + nBeginGlobal[indexMap[i]] = 0; + nGlob[indexMap[i]] = 1; + globalIndex[i].resize(1); + globalIndex[i](0) = 0; + ++scalarId; + } } + dataSize = 1; + + for (int i = 0; i < nSize.size(); ++i) + dataSize *= nSize[i]; + serverDistribution_ = new CDistributionServer(server->intraCommRank, + globalIndex, axis_domain_order, + nBegin, nSize, nBeginGlobal, nGlob); } - id << "__"; + CArray outIndex; + buffer >> outIndex; + outGlobalIndexFromClient.insert(std::make_pair(rank, outIndex)); + connectedDataSizeRead_[rank] = outIndex.numElements(); + + if (doGridHaveDataDistributed(client)) + {} + else + { + // THE PROBLEM HERE IS THAT DATA CAN BE NONDISTRIBUTED ON CLIENT AND DISTRIBUTED ON SERVER + // BELOW IS THE TEMPORARY FIX only for a single type of element (domain, asix, scalar) + dataSize = serverDistribution_->getGridSize(); + } + writtenDataSize_ += dataSize; } - return id.str(); - } - CATCH - StdString CGrid::generateId(const CGrid* gridSrc, const CGrid* gridDest) - TRY - { - StdString idSrc = gridSrc->getId(); - StdString idDest = gridDest->getId(); + // Compute mask of the current grid + { + int axisId = 0, domainId = 0, scalarId = 0, globalSize = 1; + std::vector domainList = getDomains(); + std::vector axisList = getAxis(); + int dimSize = 2 * domainList.size() + axisList.size(); + std::vector nBegin(dimSize), nSize(dimSize), nGlob(dimSize), nBeginGlobal(dimSize); + for (int i = 0; i < numElement; ++i) + { + if (2 == axis_domain_order(i)) //domain + { + nBegin[indexMap[i]] = domainList[domainId]->ibegin; + nSize[indexMap[i]] = domainList[domainId]->ni; + nBeginGlobal[indexMap[i]] = 0; + nGlob[indexMap[i]] = domainList[domainId]->ni_glo; - std::ostringstream id; - id << idSrc << "__" << idDest; + nBegin[indexMap[i] + 1] = domainList[domainId]->jbegin; + nSize[indexMap[i] + 1] = domainList[domainId]->nj; + nBeginGlobal[indexMap[i] + 1] = 0; + nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; - return id.str(); - } - CATCH + ++domainId; + } + else if (1 == axis_domain_order(i)) // axis + { + nBegin[indexMap[i]] = axisList[axisId]->begin; + nSize[indexMap[i]] = axisList[axisId]->n; + nBeginGlobal[indexMap[i]] = 0; + nGlob[indexMap[i]] = axisList[axisId]->n_glo; + ++axisId; + } + else // scalar + { + } + } + + if (nSize.empty()) // Scalar grid + { + nBegin.push_back(0); + nSize.push_back(1); + nBeginGlobal.push_back(0); + nGlob.push_back(1); + } + } + if (isScalarGrid()) return; - //---------------------------------------------------------------- + nbReadSenders[client] = CClientServerMappingDistributed::computeConnectedClients(context->client->serverSize, context->client->clientSize, context->client->intraComm, ranks); + } + } + CATCH_DUMP_ATTR - - - /* Compute on the fly the global dimension of a grid with its elements \param[in/out] globalDim global dimension of grid @@ -1363,24 +2243,80 @@ namespace xios bool CGrid::doGridHaveDataToWrite() TRY { - return (0 != getGridLocalElements()->getView(CElementView::FULL)->getSize()); + return (0 != writtenDataSize_); + } + CATCH_DUMP_ATTR + + /*! + Return size of data which is written on each server + Whatever dimension of a grid, data which are written on server must be presented as + an one dimension array. + \return size of data written on server + */ + size_t CGrid::getWrittenDataSize() const + TRY + { + return writtenDataSize_; + } + CATCH + + /*! + Returns the number of indexes written by each server. + \return the number of indexes written by each server + */ + int CGrid::getNumberWrittenIndexes() const + TRY + { + return numberWrittenIndexes_; + } + CATCH + + /*! + Returns the total number of indexes written by the servers. + \return the total number of indexes written by the servers + */ + int CGrid::getTotalNumberWrittenIndexes() const + TRY + { + return totalNumberWrittenIndexes_; + } + CATCH + + /*! + Returns the offset of indexes written by each server. + \return the offset of indexes written by each server + */ + int CGrid::getOffsetWrittenIndexes() const + TRY + { + return offsetWrittenIndexes_; + } + CATCH + + CDistributionServer* CGrid::getDistributionServer() + TRY + { + return serverDistribution_; + } + CATCH_DUMP_ATTR + + CDistributionClient* CGrid::getDistributionClient() + TRY + { + return clientDistribution_; } CATCH_DUMP_ATTR - bool CGrid::doGridHaveDataDistributed(CContextClient* client) TRY { - // This function is now useless because it will return false only if server and client size are equal to 1 - // to be seriously check in future - if (isScalarGrid()) return false; else if (0 != client) { - return (isDataDistributed() || (1 != client->clientSize) || (1 != client->serverSize)); + return (isDataDistributed_ || (1 != client->clientSize) || (1 != client->serverSize)); } else - return isDataDistributed(); + return isDataDistributed_; } CATCH_DUMP_ATTR @@ -1400,6 +2336,11 @@ namespace xios { switch(event.type) { + case EVENT_ID_INDEX : + recvIndex(event); + return true; + break; + case EVENT_ID_ADD_DOMAIN : recvAddDomain(event); return true; @@ -1414,13 +2355,8 @@ namespace xios recvAddScalar(event); return true; break; - - case EVENT_ID_SEND_MASK : - recvMask(event); - return true; - break; default : - ERROR("bool CGrid::dispatchEvent(CEventServer& event)", + ERROR("bool CDomain::dispatchEvent(CEventServer& event)", << "Unknown Event"); return false; } @@ -1428,908 +2364,653 @@ namespace xios } CATCH - + ///--------------------------------------------------------------- - void CGrid::sendGridToFileServer(CContextClient* client) - { - if (sendGridToFileServer_done_.count(client)!=0) return ; - else sendGridToFileServer_done_.insert(client) ; - - StdString gridDefRoot("grid_definition"); - CGridGroup* gridPtr = CGridGroup::get(gridDefRoot); - gridPtr->sendCreateChild(this->getId(),client); - this->sendAllAttributesToServer(client); - distributeGridToServer(client) ; - } + CDomain* CGrid::addDomain(const std::string& id) + TRY + { + order_.push_back(2); + axis_domain_order.resize(order_.size()); + for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; + return vDomainGroup_->createChild(id); + } + CATCH_DUMP_ATTR + + CAxis* CGrid::addAxis(const std::string& id) + TRY + { + order_.push_back(1); + axis_domain_order.resize(order_.size()); + for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; + return vAxisGroup_->createChild(id); + } + CATCH_DUMP_ATTR + + CScalar* CGrid::addScalar(const std::string& id) + TRY + { + order_.push_back(0); + axis_domain_order.resize(order_.size()); + for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; + return vScalarGroup_->createChild(id); + } + CATCH_DUMP_ATTR + + //! Change virtual field group to a new one + void CGrid::setVirtualDomainGroup(CDomainGroup* newVDomainGroup) + TRY + { + this->vDomainGroup_ = newVDomainGroup; + } + CATCH_DUMP_ATTR + + //! Change virtual variable group to new one + void CGrid::setVirtualAxisGroup(CAxisGroup* newVAxisGroup) + TRY + { + this->vAxisGroup_ = newVAxisGroup; + } + CATCH_DUMP_ATTR + //! Change virtual variable group to new one + void CGrid::setVirtualScalarGroup(CScalarGroup* newVScalarGroup) + TRY + { + this->vScalarGroup_ = newVScalarGroup; + } + CATCH_DUMP_ATTR - void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId) + /*! + \brief Send a message to create a domain on server side + \param[in] id String identity of domain that will be created on server + */ + void CGrid::sendAddDomain(const string& id) + TRY { - if (sendGridToCouplerOut_done_.count(client)!=0) return ; - else sendGridToCouplerOut_done_.insert(client) ; - this->sendAllAttributesToServer(client, getCouplingAlias(fieldId)); - distributeGridToServer(client, fieldId) ; - } + sendAddItem(id, (int)EVENT_ID_ADD_DOMAIN); + } + CATCH_DUMP_ATTR + + /*! + \brief Send a message to create an axis on server side + \param[in] id String identity of axis that will be created on server + */ + void CGrid::sendAddAxis(const string& id) + TRY + { + sendAddItem(id, (int)EVENT_ID_ADD_AXIS); + } + CATCH_DUMP_ATTR + + /*! + \brief Send a message to create a scalar on server side + \param[in] id String identity of scalar that will be created on server + */ + void CGrid::sendAddScalar(const string& id) + TRY + { + sendAddItem(id, (int)EVENT_ID_ADD_SCALAR); + } + CATCH_DUMP_ATTR + + /*! + \brief Receive a message annoucing the creation of a domain on server side + \param[in] event Received event + */ + void CGrid::recvAddDomain(CEventServer& event) + TRY + { + + CBufferIn* buffer = event.subEvents.begin()->buffer; + string id; + *buffer >> id; + get(id)->recvAddDomain(*buffer); + } + CATCH + + /*! + \brief Receive a message annoucing the creation of a domain on server side + \param[in] buffer Buffer containing message + */ + void CGrid::recvAddDomain(CBufferIn& buffer) + TRY + { + string id; + buffer >> id; + addDomain(id); + } + CATCH_DUMP_ATTR + + /*! + \brief Receive a message annoucing the creation of an axis on server side + \param[in] event Received event + */ + void CGrid::recvAddAxis(CEventServer& event) + TRY + { + + CBufferIn* buffer = event.subEvents.begin()->buffer; + string id; + *buffer >> id; + get(id)->recvAddAxis(*buffer); + } + CATCH + /*! + \brief Receive a message annoucing the creation of an axis on server side + \param[in] buffer Buffer containing message + */ + void CGrid::recvAddAxis(CBufferIn& buffer) + TRY + { + string id; + buffer >> id; + addAxis(id); + } + CATCH_DUMP_ATTR + + /*! + \brief Receive a message annoucing the creation of an scalar on server side + \param[in] event Received event + */ + void CGrid::recvAddScalar(CEventServer& event) + TRY + { + + CBufferIn* buffer = event.subEvents.begin()->buffer; + string id; + *buffer >> id; + get(id)->recvAddScalar(*buffer); + } + CATCH + + /*! + \brief Receive a message annoucing the creation of an scalar on server side + \param[in] buffer Buffer containing message + */ + void CGrid::recvAddScalar(CBufferIn& buffer) + TRY + { + string id; + buffer >> id; + addScalar(id); + } + CATCH_DUMP_ATTR - void CGrid::distributeGridToServer(CContextClient* client, const string& fieldId) + /*! + \brief Solve domain and axis references + As field, domain and axis can refer to other domains or axis. In order to inherit correctly + all attributes from their parents, they should be processed with this function + \param[in] apply inherit all attributes of parents (true) + */ + void CGrid::solveDomainAxisRefInheritance(bool apply) + TRY { CContext* context = CContext::getCurrent(); - bool isCoupling = !fieldId.empty() ; - // simple Distribution for now - // distribute over the fisrt element except if it is a scalar - auto& elements = getElements() ; - int posDistributed = 0 ; - for(auto& element : elements) - { - if (element.type==TYPE_DOMAIN) break ; - else if (element.type==TYPE_AXIS) break ; - else if (element.type==TYPE_SCALAR) posDistributed++ ; - } - if (posDistributed==elements.size()) posDistributed=0 ; // grid composed only of scalar - - vector> localViews ; - vector> workflowView ; - vector> remoteViews ; - - for(int i=0 ; i::iterator it, itE; + setDomainList(); + it = domList_.begin(); itE = domList_.end(); + for (; it != itE; ++it) { - if (elements[i].type==TYPE_DOMAIN) - { - CDomain* domain = (CDomain*) elements[i].ptr ; - domain->computeRemoteElement(client, posDistributed==i ? EDistributionType::BANDS : EDistributionType::NONE) ; - remoteViews.push_back(domain->getRemoteElement(client)->getView(CElementView::FULL)) ; - localViews.push_back(domain->getLocalView(CElementView::FULL)) ; - workflowView.push_back(domain->getLocalView(CElementView::WORKFLOW)) ; - } - else if (elements[i].type==TYPE_AXIS) - { - CAxis* axis = (CAxis*) elements[i].ptr ; - axis->computeRemoteElement(client, posDistributed==i ? EDistributionType::BANDS : EDistributionType::NONE) ; - remoteViews.push_back(axis->getRemoteElement(client)->getView(CElementView::FULL)) ; - localViews.push_back(axis->getLocalView(CElementView::FULL)) ; - workflowView.push_back(axis->getLocalView(CElementView::WORKFLOW)) ; - } - else if (elements[i].type==TYPE_SCALAR) + CDomain* pDom = CDomain::get(*it); + if (context->hasClient && !context->hasServer) { - CScalar* scalar = (CScalar*) elements[i].ptr ; - scalar->computeRemoteElement(client, posDistributed==i ? EDistributionType::ROOT : EDistributionType::NONE) ; - remoteViews.push_back(scalar->getRemoteElement(client)->getView(CElementView::FULL)) ; - localViews.push_back(scalar->getLocalView(CElementView::FULL)) ; - workflowView.push_back(scalar->getLocalView(CElementView::WORKFLOW)) ; + pDom->solveRefInheritance(apply); + pDom->solveInheritanceTransformation(); + if (!pDom->ntiles.isEmpty() && pDom->ntiles.getValue()>0) nTiles_=pDom->ntiles.getValue(); } } - - // CGridClientServerRemoteConnector : workflowView is added to avoid spurious optimisation with only the fullview - auto gridRemoteConnector = make_shared(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; - gridRemoteConnector->computeConnector(true) ; - - auto gridRemoteConnectorIn = make_shared(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; - gridRemoteConnectorIn->computeConnector(false) ; - - vector> scattererConnectors ; - shared_ptr scattererConnector; - for(int i=0 ; idistributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), - scattererConnector, domain->getCouplingAlias(fieldId,i)) ; - else - { - sendAddDomain(domain->getId(),client) ; - domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; - } - scattererConnectors.push_back(scattererConnector) ; - } - else if (elements[i].type==TYPE_AXIS) - { - CAxis* axis = (CAxis*) elements[i].ptr ; - if (isCoupling) axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), - scattererConnector, axis->getCouplingAlias(fieldId,i)) ; - else - { - sendAddAxis(axis->getId(),client) ; - axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; - } - scattererConnectors.push_back(scattererConnector) ; - } - else if (elements[i].type==TYPE_SCALAR) + CAxis* pAxis = CAxis::get(*it); + if (context->hasClient && !context->hasServer) { - CScalar* scalar = (CScalar*) elements[i].ptr ; - if (isCoupling) scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), - scattererConnector, scalar->getCouplingAlias(fieldId,i)) ; - else - { - sendAddScalar(scalar->getId(),client) ; - scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; - } - scattererConnectors.push_back(scattererConnector) ; + pAxis->solveRefInheritance(apply); + pAxis->solveInheritanceTransformation(); } } - auto gridScattererConnector = make_shared(scattererConnectors) ; - shared_ptr workflowToFull = getGridLocalElements()->getConnector(CElementView::WORKFLOW, CElementView::FULL) ; - CArray maskIn(workflowToFull->getSrcSize()) ; - CArray maskOut(workflowToFull->getDstSize()) ; - maskIn = true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - CEventClient event(getType(), EVENT_ID_SEND_MASK); - CMessage message ; - if (isCoupling) message<transfer(maskOut, client, event, message) ; - - vector> clientToServerConnectors ; - vector> clientFromServerConnectors ; - for(auto& element : elements) + setScalarList(); + it = scalarList_.begin(); itE = scalarList_.end(); + for (; it != itE; ++it) { - if (element.type==TYPE_DOMAIN) - { - clientToServerConnectors.push_back(element.domain->getClientToServerConnector(client)) ; - clientFromServerConnectors.push_back(element.domain->getClientFromServerConnector(client)) ; - } - else if (element.type==TYPE_AXIS) - { - clientToServerConnectors.push_back(element.axis->getClientToServerConnector(client)) ; - clientFromServerConnectors.push_back(element.axis->getClientFromServerConnector(client)) ; - - } - else if (element.type==TYPE_SCALAR) + CScalar* pScalar = CScalar::get(*it); + if (context->hasClient && !context->hasServer) { - clientToServerConnectors.push_back(element.scalar->getClientToServerConnector(client)) ; - clientFromServerConnectors.push_back(element.scalar->getClientFromServerConnector(client)) ; + pScalar->solveRefInheritance(apply); + pScalar->solveInheritanceTransformation(); } } - - // compute the grid clientToServerConnector to send flux from client to servers - clientToServerConnector_[client] = make_shared(clientToServerConnectors) ; - clientFromServerConnector_[client] = make_shared(clientFromServerConnectors) ; + } + CATCH_DUMP_ATTR + + int CGrid::getNTiles() + TRY + { + return nTiles_; + } + CATCH_DUMP_ATTR + + bool CGrid::isTiled(void) const + TRY + { + return isTiled_; + } + CATCH + bool CGrid::isTiledOnly(void) const + TRY + { + return isTiledOnly_; } + CATCH + bool CGrid::isTransformed() + TRY + { + return isTransformed_; + } + CATCH_DUMP_ATTR - void CGrid::recvMask(CEventServer& event) + void CGrid::setTransformed() + TRY { - string gridId; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> gridId ; - get(gridId)->receiveMask(event); + isTransformed_ = true; } - - void CGrid::receiveMask(CEventServer& event) + CATCH_DUMP_ATTR + + CGridTransformation* CGrid::getTransformations() + TRY + { + return transformations_; + } + CATCH_DUMP_ATTR + + void CGrid::addTransGridSource(CGrid* gridSrc) + TRY { - vector> gathererConnectors ; - vector> fullViews ; + if (gridSrc_.end() == gridSrc_.find(gridSrc)) + gridSrc_.insert(make_pair(gridSrc,make_pair(false,""))); + } + CATCH_DUMP_ATTR + + std::map >& CGrid::getTransGridSource() + TRY + { + return gridSrc_; + } + CATCH_DUMP_ATTR - for(auto& element : getElements()) + /*! + Complete all the necessary (and lacking) attributes of a grid + This function is similar to gridTransformation but works only (till now) on generate_rectilinear_domain transformation + */ + void CGrid::completeGrid(CGrid* transformGridSrc) + TRY + { + if (0 != transformGridSrc) { - if (element.type==TYPE_DOMAIN) - { - gathererConnectors.push_back(element.domain->getGathererConnector()); - fullViews.push_back(element.domain->getLocalElement()->getView(CElementView::FULL)); - - } - else if (element.type==TYPE_AXIS) - { - gathererConnectors.push_back(element.axis->getGathererConnector()); - fullViews.push_back(element.axis->getLocalElement()->getView(CElementView::FULL)); - } - else if (element.type==TYPE_SCALAR) + if (axis_domain_order.numElements() != transformGridSrc->axis_domain_order.numElements()) { - gathererConnectors.push_back(element.scalar->getGathererConnector()); - fullViews.push_back(element.scalar->getLocalElement()->getView(CElementView::FULL)); + ERROR("CGrid::completeGrid(CGrid* transformGridSrc)", + << "Two grids have different number of elements. " << std::endl + << "Number of element of grid destination " << this->getId() << " is " << axis_domain_order.numElements() << std::endl + << "Number of element of grid source " << transformGridSrc->getId() << " is " << transformGridSrc->axis_domain_order.numElements()); } } - auto gridGathererConnector = make_shared(gathererConnectors) ; - auto gridMaskConnector = make_shared(fullViews) ; - CArray maskOut ; - gridGathererConnector->transfer_or(event,maskOut) ; - gridMaskConnector->computeConnector(maskOut) ; + if (isGenerated()) return; + setGenerated(); - CContextClient* client = event.getContextServer()->getAssociatedClient() ; - int i=0 ; - for(auto& element : getElements()) - { - if (element.type==TYPE_DOMAIN) element.domain->setServerMask(gridMaskConnector->getElementMask(i),client); - else if (element.type==TYPE_AXIS) element.axis->setServerMask(gridMaskConnector->getElementMask(i),client); - else if (element.type==TYPE_SCALAR) element.scalar->setServerMask(gridMaskConnector->getElementMask(i),client); - i++ ; - } + CGridGenerate gridGenerate(this, transformGridSrc); + gridGenerate.completeGrid(); + } + CATCH_DUMP_ATTR + + bool CGrid::isGenerated() + TRY + { + return isGenerated_; } + CATCH - string CGrid::getCouplingAlias(const string& fieldId) + void CGrid::setGenerated() + TRY { - return "_grid_of_"+fieldId; + isGenerated_ = true; } + CATCH_DUMP_ATTR - void CGrid::makeAliasForCoupling(const string& fieldId) + void CGrid::transformGrid(CGrid* transformGridSrc) + TRY { - string gridId=getCouplingAlias(fieldId) ; - createAlias(gridId) ; + if (!transformGridSrc) + ERROR("CGrid::transformGrid(CGrid* transformGridSrc)", + << "Impossible to transform grid '" << getId() << "', the source grid is null."); - auto& elements = getElements() ; - for(int i=0 ; iaxis_domain_order.numElements()) + { + ERROR("CGrid::transformGrid(CGrid* transformGridSrc)", + << "Two grids have different number of elements. " << std::endl + << "Number of element of grid destination " << this->getId() << " is " << axis_domain_order.numElements() << std::endl + << "Number of element of grid source " << transformGridSrc->getId() << " is " << transformGridSrc->axis_domain_order.numElements()); + } + else { - if (elements[i].type==TYPE_DOMAIN) elements[i].domain->makeAliasForCoupling(fieldId, i); - else if (elements[i].type==TYPE_AXIS) elements[i].axis->makeAliasForCoupling(fieldId, i); - else if (elements[i].type==TYPE_SCALAR) elements[i].scalar->makeAliasForCoupling(fieldId, i); } - } - - /*! - \brief Send a message to create a domain on server side - \param[in] id String identity of domain that will be created on server - */ - void CGrid::sendAddDomain(const string& id, CContextClient* contextClient) - TRY - { - sendAddItem(id, (int)EVENT_ID_ADD_DOMAIN, contextClient); - } - CATCH_DUMP_ATTR - /*! - \brief Send a message to create an axis on server side - \param[in] id String identity of axis that will be created on server - */ - void CGrid::sendAddAxis(const string& id, CContextClient* contextClient) - TRY - { - sendAddItem(id, (int)EVENT_ID_ADD_AXIS, contextClient); - } - CATCH_DUMP_ATTR + transformations_ = new CGridTransformation(this, transformGridSrc); + transformations_->computeAll(); + if (0 < transformations_->getNbAlgo()) hasTransform_ = true; - /*! - \brief Send a message to create a scalar on server side - \param[in] id String identity of scalar that will be created on server - */ - void CGrid::sendAddScalar(const string& id, CContextClient* contextClient) - TRY - { - sendAddItem(id, (int)EVENT_ID_ADD_SCALAR, contextClient); - } - CATCH_DUMP_ATTR + // Ok, now need to compute index of grid source + transformGridSrc->checkMaskIndex(false); + } + CATCH_DUMP_ATTR - /*! - \brief Receive a message annoucing the creation of a domain on server side - \param[in] event Received event - */ - void CGrid::recvAddDomain(CEventServer& event) - TRY - { + bool CGrid::hasTransform() + TRY + { + if (hasTransform_) return hasTransform_; - CBufferIn* buffer = event.subEvents.begin()->buffer; - string id; - *buffer >> id; - get(id)->recvAddDomain(*buffer); - } - CATCH + std::vector domList = getDomains(); + std::vector axisList = getAxis(); + std::vector scalarList = getScalars(); - /*! - \brief Receive a message annoucing the creation of a domain on server side - \param[in] buffer Buffer containing message - */ - void CGrid::recvAddDomain(CBufferIn& buffer) - TRY - { - string id; - buffer >> id; - addDomain(id); - } - CATCH_DUMP_ATTR + for (int idx = 0; idx < domList.size(); ++idx) hasTransform_ |= domList[idx]->hasTransformation(); + for (int idx = 0; idx < axisList.size(); ++idx) hasTransform_ |= axisList[idx]->hasTransformation(); + for (int idx = 0; idx < scalarList.size(); ++idx) hasTransform_ |= scalarList[idx]->hasTransformation(); - /*! - \brief Receive a message annoucing the creation of an axis on server side - \param[in] event Received event - */ - void CGrid::recvAddAxis(CEventServer& event) - TRY - { + return hasTransform_; + } + CATCH_DUMP_ATTR - CBufferIn* buffer = event.subEvents.begin()->buffer; - string id; - *buffer >> id; - get(id)->recvAddAxis(*buffer); - } - CATCH + /*! + \brief Get the list of domain pointers + \return list of domain pointers + */ + std::vector CGrid::getDomains() + TRY + { + std::vector domList; + if (!domList_.empty()) + { + for (int i = 0; i < domList_.size(); ++i) domList.push_back(CDomain::get(domList_[i])); + } + return domList; + } + CATCH_DUMP_ATTR - /*! - \brief Receive a message annoucing the creation of an axis on server side - \param[in] buffer Buffer containing message - */ - void CGrid::recvAddAxis(CBufferIn& buffer) - TRY - { - string id; - buffer >> id; - addAxis(id); - } - CATCH_DUMP_ATTR + /*! + \brief Get the list of axis pointers + \return list of axis pointers + */ + std::vector CGrid::getAxis() + TRY + { + std::vector aList; + if (!axisList_.empty()) + for (int i =0; i < axisList_.size(); ++i) aList.push_back(CAxis::get(axisList_[i])); - /*! - \brief Receive a message annoucing the creation of an scalar on server side - \param[in] event Received event - */ - void CGrid::recvAddScalar(CEventServer& event) - TRY - { + return aList; + } + CATCH_DUMP_ATTR - CBufferIn* buffer = event.subEvents.begin()->buffer; - string id; - *buffer >> id; - get(id)->recvAddScalar(*buffer); - } - CATCH + /*! + \brief Get the list of axis pointers + \return list of axis pointers + */ + std::vector CGrid::getScalars() + TRY + { + std::vector sList; + if (!scalarList_.empty()) + for (int i =0; i < scalarList_.size(); ++i) sList.push_back(CScalar::get(scalarList_[i])); - /*! - \brief Receive a message annoucing the creation of an scalar on server side - \param[in] buffer Buffer containing message - */ - void CGrid::recvAddScalar(CBufferIn& buffer) - TRY - { - string id; - buffer >> id; - addScalar(id); - } - CATCH_DUMP_ATTR + return sList; + } + CATCH_DUMP_ATTR /*! - \brief Check if all elements of the grid are complete - Before make any grid processing, we must be sure that all grid information elements have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling) + \brief Get domain pointer with index + \return domain pointer */ - bool CGrid::isCompleted(void) + CDomain* CGrid::getDomain(int domainIndex) + TRY { - setDomainList(); - for (auto domainId : domList_) if (!CDomain::get(domainId)->isCompleted()) return false ; - setAxisList() ; - for (auto axisId : axisList_) if (!CAxis::get(axisId)->isCompleted()) return false ; - setScalarList() ; - for (auto scalarId : scalarList_) if (!CScalar::get(scalarId)->isCompleted()) return false ; - return true ; + std::vector domainListP = this->getDomains(); + if (domainListP.empty()) + { + ERROR("CGrid::getDomain(int domainIndex)", + << "No domain associated to this grid. " << std::endl + << "Grid id = " << this->getId()); + } + + if (domainIndex >= domainListP.size() || (domainIndex < 0)) + ERROR("CGrid::getDomain(int domainIndex)", + << "Domain with the index doesn't exist " << std::endl + << "Grid id = " << this->getId() << std::endl + << "Grid has only " << domainListP.size() << " domain but domain index required is " << domainIndex << std::endl); + + return domainListP[domainIndex]; } + CATCH_DUMP_ATTR /*! - \brief impose that all elements of the grid are complete - Before make any grid processing, we must be sure that all grid information elements have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling) + \brief Get the axis pointer with index + \return axis pointer */ - void CGrid::setCompleted(void) + CAxis* CGrid::getAxis(int axisIndex) + TRY { - setDomainList(); - for (auto domainId : domList_) CDomain::get(domainId)->setCompleted() ; - setAxisList() ; - for (auto axisId : axisList_) CAxis::get(axisId)->setCompleted() ; - setScalarList() ; - for (auto scalarId : scalarList_) CScalar::get(scalarId)->setCompleted() ; + std::vector axisListP = this->getAxis(); + if (axisListP.empty()) + { + ERROR("CGrid::getDomain(int axisIndex)", + << "No axis associated to this grid. " << std::endl + << "Grid id = " << this->getId()); + } + + if (axisIndex >= axisListP.size() || (axisIndex < 0)) + ERROR("CGrid::getDomain(int axisIndex)", + << "Domain with the index doesn't exist " << std::endl + << "Grid id = " << this->getId() << std::endl + << "Grid has only " << axisListP.size() << " axis but axis index required is " << axisIndex << std::endl); + + return axisListP[axisIndex]; } + CATCH_DUMP_ATTR -/*! - \brief impose that all elements of the grid are incomplete - Before make any grid processing, we must be sure that all grid information elements have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling) + /*! + \brief Get the a scalar pointer + \return scalar pointer */ - void CGrid::unsetCompleted(void) + CScalar* CGrid::getScalar(int scalarIndex) + TRY { - setDomainList(); - for (auto domainId : domList_) CDomain::get(domainId)->unsetCompleted() ; - setAxisList() ; - for (auto axisId : axisList_) CAxis::get(axisId)->unsetCompleted() ; - setScalarList() ; - for (auto scalarId : scalarList_) CScalar::get(scalarId)->unsetCompleted() ; + std::vector scalarListP = this->getScalars(); + if (scalarListP.empty()) + { + ERROR("CGrid::getScalar(int scalarIndex)", + << "No scalar associated to this grid. " << std::endl + << "Grid id = " << this->getId()); + } + + if (scalarIndex >= scalarListP.size() || (scalarIndex < 0)) + ERROR("CGrid::getScalar(int scalarIndex)", + << "Scalar with the index doesn't exist " << std::endl + << "Grid id = " << this->getId() << std::endl + << "Grid has only " << scalarListP.size() << " scalar but scalar index required is " << scalarIndex << std::endl); + + return scalarListP[scalarIndex]; } + CATCH_DUMP_ATTR /*! - \brief Solve domain and axis references - As field, domain and axis can refer to other domains or axis. In order to inherit correctly - all attributes from their parents, they should be processed with this function - \param[in] apply inherit all attributes of parents (true) + \brief Set domain(s) of a grid from a list + \param[in] domains list of domains */ - void CGrid::solveElementsRefInheritance(bool apply) + void CGrid::setDomainList(const std::vector domains) TRY { - setDomainList(); - for (auto domainId : domList_) + if (isDomListSet) return; + std::vector domList = this->getVirtualDomainGroup()->getAllChildren(); + if (!domains.empty() && domList.empty()) { - CDomain* pDom = CDomain::get(domainId); - pDom->solveRefInheritance(apply); - if (apply) pDom->solveInheritanceTransformation(); + for (int i = 0; i < domains.size(); ++i) + this->getVirtualDomainGroup()->addChild(domains[i]); + domList = this->getVirtualDomainGroup()->getAllChildren(); } - setAxisList(); - for (auto axisId : axisList_) + if (!domList.empty()) + { + int sizeDom = domList.size(); + domList_.resize(sizeDom); + for (int i = 0; i < sizeDom; ++i) + { + domList_[i] = domList[i]->getId(); + } + isDomListSet = true; + } + } + CATCH_DUMP_ATTR + + /*! + \brief Set axis(s) of a grid from a list + \param[in] axis list of axis + */ + void CGrid::setAxisList(const std::vector axis) + TRY + { + if (isAxisListSet) return; + std::vector aList = this->getVirtualAxisGroup()->getAllChildren(); + if (!axis.empty() && aList.empty()) { - CAxis* pAxis = CAxis::get(axisId); - pAxis->solveRefInheritance(apply); - if (apply) pAxis->solveInheritanceTransformation(); + for (int i = 0; i < axis.size(); ++i) + this->getVirtualAxisGroup()->addChild(axis[i]); + aList = this->getVirtualAxisGroup()->getAllChildren(); } - setScalarList(); - for (auto scalarId : scalarList_) + if (!aList.empty()) { - CScalar* pScalar = CScalar::get(scalarId); - pScalar->solveRefInheritance(apply); - if (apply) pScalar->solveInheritanceTransformation(); + int sizeAxis = aList.size(); + axisList_.resize(sizeAxis); + for (int i = 0; i < sizeAxis; ++i) + { + axisList_[i] = aList[i]->getId(); + } + isAxisListSet = true; } } CATCH_DUMP_ATTR - bool CGrid::activateFieldWorkflow(CGarbageCollector& gc) + /*! + \brief Set scalar(s) of a grid from a list + \param[in] scalars list of scalars + */ + void CGrid::setScalarList(const std::vector scalars) TRY { - setDomainList(); - for (auto domainId : domList_) - { - CDomain* pDom = CDomain::get(domainId); - bool ret = pDom->activateFieldWorkflow(gc); - if (!ret) return false ; - } - - setAxisList(); - for (auto axisId : axisList_) + if (isScalarListSet) return; + std::vector sList = this->getVirtualScalarGroup()->getAllChildren(); + if (!scalars.empty() && sList.empty()) { - CAxis* pAxis = CAxis::get(axisId); - bool ret = pAxis->activateFieldWorkflow(gc); - if (!ret) return false ; + for (int i = 0; i < scalars.size(); ++i) + this->getVirtualScalarGroup()->addChild(scalars[i]); + sList = this->getVirtualScalarGroup()->getAllChildren(); } - setScalarList(); - for (auto scalarId : scalarList_) + if (!sList.empty()) { - CScalar* pScalar = CScalar::get(scalarId); - bool ret = pScalar->activateFieldWorkflow(gc); - if (!ret) return false ; + int sizeScalar = sList.size(); + scalarList_.resize(sizeScalar); + for (int i = 0; i < sizeScalar; ++i) + { + scalarList_[i] = sList[i]->getId(); + } + isScalarListSet = true; } - return true ; } CATCH_DUMP_ATTR - /*! - \brief check attributes of all elements of the grid + /*! + \brief Get list of id of domains + \return id list of domains */ - void CGrid::checkElementsAttributes(void) + std::vector CGrid::getDomainList() TRY { setDomainList(); - for (auto domainId : domList_) CDomain::get(domainId)->checkAttributes(); + return domList_; + } + CATCH + /*! + \brief Get list of id of axis + \return id list of axis + */ + std::vector CGrid::getAxisList() + TRY + { setAxisList(); - for (auto axisId : axisList_) CAxis::get(axisId)->checkAttributes(); - - setScalarList(); - for (auto scalarId : scalarList_) CScalar::get(scalarId)->checkAttributes(); + return axisList_; } - CATCH_DUMP_ATTR - - - -//********************************************************** -//************** New transformation method ************** -//********************************************************** + CATCH - std::pair, std::shared_ptr > - CGrid::buildTransformationGraph(CGarbageCollector& gc, bool isSource, CGrid* gridSrc, double detectMissingValues, double defaultValue, CGrid*& newGrid, bool graphEnabled, CField* field) + /*! + \brief Get list of id of scalar + \return id list of scalar + */ + std::vector CGrid::getScalarList() TRY { - static bool transformationGoing = false; - registerAlgorithmTransformation() ; // needed to enable self-registration of the transformations - // big mystery why it doesn't work witout that... - // problem with the linker ?? - - std::shared_ptr inputFilter = std::shared_ptr(new CPassThroughFilter(gc)); - std::shared_ptr outputFilter = inputFilter ; - - - string newId ; - if (gridSrc!=nullptr) newId = gridSrc->getId() + " --> " + this->getId() ; - else newId = " --> " + this->getId() ; - bool isNewGrid ; - if (CGrid::has(newId)) - { - cout<<"Retrive existing grid : "< algo ; - int pos ; - - for(int i=0 ; igetTransformationPaths() ; - else if (dstElement.type==TYPE_AXIS) transformationPath = dstElement.axis->getTransformationPaths() ; - else if (dstElement.type==TYPE_SCALAR) transformationPath = dstElement.scalar->getTransformationPaths() ; - - SElement srcElement ; - if (gridSrc==nullptr) srcElement = this->elements_[i] ; - else srcElement = gridSrc->elements_[i] ; - - if (gridSrc==nullptr) transformationPath.mergePaths() ; - else - { - if (srcElement.type==TYPE_DOMAIN) transformationPath.mergePaths(srcElement.domain->getTransformationPaths()) ; - else if (srcElement.type==TYPE_AXIS) transformationPath.mergePaths(srcElement.axis->getTransformationPaths()) ; - else if (srcElement.type==TYPE_SCALAR) transformationPath.mergePaths(srcElement.scalar->getTransformationPaths()) ; - } - - hasTransform=transformationPath.hasTransform() ; - - if (hasTransform && !hadTransform) - { - pos=i ; - EElement dstElementType=transformationPath.getNextElementType() ; - string dstElementId=transformationPath.getNextElementId() ; - string srcElementId=transformationPath.getNextElementSrcId() ; - auto transType = transformationPath.getNextTransformationType() ; - auto transId = transformationPath.getNextTransformationId() ; - - CGrid* tmpGridSrc=CGrid::create(); // source grid - if (srcElement.type==TYPE_DOMAIN) tmpGridSrc->addDomain(srcElement.domain->getId()) ; - else if (srcElement.type==TYPE_AXIS) tmpGridSrc->addAxis(srcElement.axis->getId()) ; - else if (srcElement.type==TYPE_SCALAR) tmpGridSrc->addScalar(srcElement.scalar->getId()) ; - // WARNING -> suppress checkElement attribute ? What append ? - // tmpGridSrc->checkElementsAttributes() ; - CGrid* tmpGridDst=CGrid::create(); // destination Grid - map posInGrid={{0,0}} ; - - cout<<"--> New transform from "<createAlias(dstElementId) ; - cout<<"Create new domain : "<getId()<<" with alias : "<duplicateAttributes(lastDstDomain) ; - dstDomain->setTemplateId(lastDstDomain) ; - } - else if (srcElementId=="" && srcElement.type==TYPE_DOMAIN) - { - dstDomain->duplicateAttributes(srcElement.domain) ; // make a copy - dstDomain->setTemplateId(srcElement.domain) ; - } - else - { - dstDomain->duplicateAttributes(dstElement.domain) ; // make a copy - dstDomain->setTemplateId(dstElement.domain) ; - } - CTransformation* transformation = CTransformation::createTransformation(transType,"") ; - auto srcTransform = CTransformation::getTransformation(transType, transId) ; - transformation->inheritFrom(srcTransform) ; - CGrid* tmpGridDst=CGrid::create(); // destination Grid - tmpGridDst->addDomain(dstDomain->getId()) ; - - algo = transformation -> createAlgorithm(false, tmpGridDst, tmpGridSrc, 0, - posInGrid,posInGrid,posInGrid, - posInGrid,posInGrid,posInGrid ); - - - dstDomain->setTransformationAlgorithm(algo) ; - dstDomain->setTransformationPaths(transformationPath) ; - } - algo=dstDomain->getTransformationAlgorithm() ; - isGenerate = algo->isGenerateTransformation() ; - transformationPath.removeNextTransform() ; - dstElementId=transformationPath.getNextElementId() ; - srcElementId=transformationPath.getNextElementSrcId() ; - transType = transformationPath.getNextTransformationType() ; - transId = transformationPath.getNextTransformationId() ; - lastDstDomain=dstDomain ; - dstDomain->setTransformationPaths(transformationPath) ; - } while(transformationPath.hasTransform() && isGenerate) ; - - if (isNewGrid) newGrid->addDomain(dstDomain->getId()) ; - algo = dstDomain->getTransformationAlgorithm() ; - } - else if (dstElementType==EElement::AXIS) - { - CAxis* dstAxis ; - CAxis* lastDstAxis ; - bool isGenerate=false ; - - do - { - if (CAxis::has(dstElementId)) - { - dstAxis = CAxis::get(dstElementId) ; - cout<<"Retrive existing axis : "<createAlias(dstElementId) ; - cout<<"Create new axis : "<getId()<<" with alias : "<duplicateAttributes(lastDstAxis) ; - dstAxis->setTemplateId(lastDstAxis) ; - } - else if (srcElementId=="" && srcElement.type==TYPE_AXIS) - { - dstAxis->duplicateAttributes(srcElement.axis) ; // make a copy - dstAxis->setTemplateId(srcElement.axis) ; - } - else - { - dstAxis->duplicateAttributes(dstElement.axis) ; // make a copy$ - dstAxis->setTemplateId(dstElement.axis) ; - } - CTransformation* transformation = CTransformation::createTransformation(transType,"") ; - auto srcTransform = CTransformation::getTransformation(transType, transId) ; - transformation->inheritFrom(srcTransform) ; - tmpGridDst->addAxis(dstAxis->getId()) ; - - algo = transformation -> createAlgorithm(false, tmpGridDst, tmpGridSrc, 0, - posInGrid,posInGrid,posInGrid, - posInGrid,posInGrid,posInGrid ); - - dstAxis->setTransformationAlgorithm(algo) ; - dstAxis->setTransformationPaths(transformationPath) ; - } - - algo=dstAxis->getTransformationAlgorithm() ; - isGenerate = algo->isGenerateTransformation() ; - transformationPath.removeNextTransform() ; - dstElementId=transformationPath.getNextElementId() ; - srcElementId=transformationPath.getNextElementSrcId() ; - transType = transformationPath.getNextTransformationType() ; - transId = transformationPath.getNextTransformationId() ; - lastDstAxis=dstAxis ; - dstAxis->setTransformationPaths(transformationPath) ; - } while(transformationPath.hasTransform() && isGenerate) ; - - if (isNewGrid) newGrid->addAxis(dstAxis->getId()) ; - algo = dstAxis->getTransformationAlgorithm() ; - } - else if (dstElementType==EElement::SCALAR) - { - CScalar* dstScalar ; - CScalar* lastDstScalar ; - bool isGenerate=false ; + setScalarList(); + return scalarList_; + } + CATCH - do - { - if (CScalar::has(dstElementId)) - { - dstScalar = CScalar::get(dstElementId) ; - cout<<"Retrive existing scalar : "<createAlias(dstElementId) ; - cout<<"Create new scalar : "<getId()<<" with alias : "<duplicateAttributes(lastDstScalar) ; - dstScalar->setTemplateId(lastDstScalar) ; - } - else if (srcElementId=="" && srcElement.type==TYPE_SCALAR) - { - dstScalar->duplicateAttributes(srcElement.scalar) ; // make a copy - dstScalar->setTemplateId(srcElement.scalar) ; - } - else - { - dstScalar->duplicateAttributes(dstElement.scalar) ; // make a copy - dstScalar->setTemplateId(dstElement.scalar) ; - } - CTransformation* transformation = CTransformation::createTransformation(transType,"") ; - auto srcTransform = CTransformation::getTransformation(transType, transId) ; - transformation->inheritFrom(srcTransform) ; - tmpGridDst->addScalar(dstScalar->getId()) ; - - algo = transformation -> createAlgorithm(false, tmpGridDst, tmpGridSrc, 0, - posInGrid,posInGrid,posInGrid, - posInGrid,posInGrid,posInGrid ); - - dstScalar->setTransformationAlgorithm(algo) ; - dstScalar->setTransformationPaths(transformationPath) ; - } - algo=dstScalar->getTransformationAlgorithm() ; - isGenerate = algo->isGenerateTransformation() ; - transformationPath.removeNextTransform() ; - dstElementId=transformationPath.getNextElementId() ; - srcElementId=transformationPath.getNextElementSrcId() ; - transType = transformationPath.getNextTransformationType() ; - transId = transformationPath.getNextTransformationId() ; - lastDstScalar=dstScalar ; - dstScalar->setTransformationPaths(transformationPath) ; - } while(transformationPath.hasTransform() && isGenerate) ; - - if (isNewGrid) newGrid->addScalar(dstScalar->getId()) ; - algo = dstScalar->getTransformationAlgorithm() ; - } - // here create a new spatial filter with algo - - hadTransform=true ; - hasTransform=false ; - } - else - { - string srcElementId=transformationPath.getNextElementSrcId() ; + /*! + Send all attributes of grid and all domain, axis, scalar from client to server + */ - if (srcElement.type==TYPE_DOMAIN) - { - CDomain* domain ; - if (srcElementId=="") srcElementId=srcElement.domain->getId() ; - if (!CDomain::has(srcElementId)) - { - domain=srcElement.domain ; - domain->createAlias(srcElementId) ; - } - else domain = CDomain::get(srcElementId) ; - domain->checkAttributes() ; - - if (isNewGrid) newGrid->addDomain(srcElementId) ; - } - else if (srcElement.type==TYPE_AXIS) - { - CAxis* axis ; - if (srcElementId=="") srcElementId=srcElement.axis->getId() ; - if (!CAxis::has(srcElementId)) - { - axis=srcElement.axis ; - axis->createAlias(srcElementId) ; - } - else axis = CAxis::get(srcElementId) ; - axis->checkAttributes() ; - - if (isNewGrid) newGrid->addAxis(srcElementId) ; - } - else if (srcElement.type==TYPE_SCALAR) - { - CScalar* scalar ; - if (srcElementId=="") srcElementId=srcElement.scalar->getId() ; - if (!CScalar::has(srcElementId)) - { - scalar=srcElement.scalar ; - scalar->createAlias(srcElementId) ; - } - else scalar = CScalar::get(srcElementId) ; - scalar->checkAttributes() ; - - if (isNewGrid) newGrid->addScalar(srcElementId) ; - } - } - - if (transformationPath.hasTransform() && hadTransform) hasRemainTransform=true ; - } + void CGrid::sendGrid(void) + TRY + { + this->sendAllAttributesToServer(); + auto domainList=getDomains() ; + auto axisList=getAxis() ; + auto scalarList=getScalars() ; + int domainIdx = 0, axisIdx = 0, scalarIdx = 0; - - if (hadTransform) + for (int idx = 0; idx < axis_domain_order.numElements(); ++idx) { - - if (!isSource) + if (2 == axis_domain_order(idx)) // This is domain { - shared_ptr gridAlgorithm ; - if (isNewGrid) - { - gridAlgorithm = algo->createGridAlgorithm(gridSrc, newGrid, pos) ; - newGrid->setGridAlgorithm(gridAlgorithm); - } - else gridAlgorithm = newGrid->getGridAlgorithm() ; - - shared_ptr transformFilter = shared_ptr(gridAlgorithm->createTransformFilter(gc, detectMissingValues, defaultValue)) ; - outputFilter->connectOutput(transformFilter,0) ; - if(graphEnabled) - { - transformFilter->graphEnabled=true; - transformFilter->graphPackage = new CGraphPackage; - transformFilter->graphPackage->inFields.push_back(field); - transformFilter->graphPackage->show = !transformationGoing; - } - - vector auxFieldId = algo->getAuxFieldId() ; // better to do that at transformation not algo ?? - int i=1; - for (auto& it : auxFieldId) - { - CField* auxField = CField::get(it) ; - auxField->buildWorkflowGraph(gc) ; - auxField->getInstantDataFilter()->connectOutput(transformFilter,i) ; - i++ ; - } - outputFilter = transformFilter ; + sendAddDomain(domainList[domainIdx]->getId()) ; + domainList[domainIdx]->sendAllAttributesToServer(); + domainIdx++ ; } - - if (hasRemainTransform) + else if (1 == axis_domain_order(idx)) // This is axis { - transformationGoing = true; - gridSrc=newGrid ; - CField *field_bis = field; - pair, shared_ptr > filters = this->buildTransformationGraph(gc, isSource, gridSrc, detectMissingValues, defaultValue, newGrid, graphEnabled, field_bis) ; - outputFilter->connectOutput(filters.first,0) ; - outputFilter=filters.second ; + sendAddAxis(axisList[axisIdx]->getId()) ; + axisList[axisIdx]->sendAllAttributesToServer(); + axisIdx++ ; } - transformationGoing = false; - } - - return {inputFilter,outputFilter} ; - } - CATCH_DUMP_ATTR - - -//**************************************************************** -//**************************************************************** - -//---------------------------------------------------------------- - - CGrid* CGrid::duplicateSentGrid(void) - { - CGrid* newGrid ; - string sentGridId="sent__"+getId() ; - if (has(sentGridId)) newGrid = get(sentGridId) ; - else - { - newGrid = CGrid::create(sentGridId) ; - for(auto element : elements_) + else // Of course, this is scalar { - if (element.type==TYPE_DOMAIN) - { - CDomain* domain = CDomain::create(); - domain->duplicateAttributes(element.domain) ; - domain->setTemplateId(element.domain) ; - domain->name = element.domain->getId() ; - newGrid->addDomain(domain->getId()) ; - } - else if (element.type==TYPE_AXIS) - { - CAxis* axis = CAxis::create(); - axis->duplicateAttributes(element.axis) ; - axis->setTemplateId(element.axis) ; - axis->name = element.axis->getId() ; - newGrid->addAxis(axis->getId()) ; - } - else if (element.type==TYPE_SCALAR) - { - CScalar* scalar = CScalar::create(); - scalar->duplicateAttributes(element.scalar) ; - scalar->setTemplateId(element.scalar) ; - scalar->name = element.scalar->getId() ; - newGrid->addScalar(scalar->getId()) ; - } + sendAddScalar(scalarList[scalarIdx]->getId()) ; + scalarList[scalarIdx]->sendAllAttributesToServer(); + scalarIdx++ ; } - newGrid->checkElementsAttributes() ; } - return newGrid ; } - + CATCH_DUMP_ATTR void CGrid::setContextClient(CContextClient* contextClient) TRY @@ -2339,104 +3020,58 @@ namespace xios clients.push_back(contextClient) ; clientsSet.insert(contextClient); } - for (auto domain : getDomains()) domain->setContextClient(contextClient); - for (auto axis : getAxis()) axis->setContextClient(contextClient); - for (auto scalar : getScalars()) scalar->setContextClient(contextClient); - + for (int i=0; igetDomains().size(); i++) + this->getDomains()[i]->setContextClient(contextClient); + for (int i=0; igetAxis().size(); i++) + this->getAxis()[i]->setContextClient(contextClient); } CATCH_DUMP_ATTR - - void CGrid::computeGridLocalElements() - { - std::vector domainList = this->getDomains(); - std::vector axisList = this->getAxis(); - std::vector scalarList = this->getScalars(); - auto domain=domainList.begin() ; - auto axis=axisList.begin() ; - auto scalar=scalarList.begin() ; - vector> elements; - for(auto order : order_) - { - if (order==2) - { - elements.push_back((*domain)->getLocalElement()); - domain++ ; - } - else if (order==1) - { - elements.push_back((*axis)->getLocalElement()); - axis++ ; - } - else if (order==0) - { - elements.push_back((*scalar)->getLocalElement()); - scalar++ ; - } - } - if (hasMask()) - { - vector mask(getMask().getVector()) ; - gridLocalElements_ = make_shared(elements, mask) ; - } - else gridLocalElements_ = make_shared(elements) ; - } - - void CGrid::computeModelToWorkflowConnector(void) - { - modelToWorkflowConnector_ = getGridLocalElements()->getConnector(CElementView::MODEL,CElementView::WORKFLOW,true) ; - } - - void CGrid::computeWorkflowToFullConnector(void) - { - workflowToFullConnector_ = getGridLocalElements()->getConnector(CElementView::WORKFLOW,CElementView::FULL) ; - } - - void CGrid::computeWorkflowToModelConnector(void) - { - workflowToModelConnector_ = getGridLocalElements()->getConnector(CElementView::WORKFLOW,CElementView::MODEL,true) ; - } - - void CGrid::computeFullToWorkflowConnector(void) + /*! + Parse a grid, for now, it contains only domain, axis and scalar + */ + void CGrid::parse(xml::CXMLNode& node) + TRY { - fullToWorkflowConnector_ = getGridLocalElements()->getConnector(CElementView::FULL,CElementView::WORKFLOW) ; - } + SuperClass::parse(node); - void CGrid::computeServerFromClientConnector(void) - { - vector> connectors ; - for(auto& element : getElements()) + if (node.goToChildElement()) { - if (element.type==TYPE_DOMAIN) connectors.push_back(element.domain->getServerFromClientConnector()) ; - else if (element.type==TYPE_AXIS) connectors.push_back(element.axis->getServerFromClientConnector()) ; - else if (element.type==TYPE_SCALAR) connectors.push_back(element.scalar->getServerFromClientConnector()) ; + StdString domainName("domain"); + StdString axisName("axis"); + StdString scalarName("scalar"); + do + { + if (node.getElementName() == domainName) { + order_.push_back(2); + this->getVirtualDomainGroup()->parseChild(node); + } + if (node.getElementName() == axisName) { + order_.push_back(1); + this->getVirtualAxisGroup()->parseChild(node); + } + if (node.getElementName() == scalarName) { + order_.push_back(0); + this->getVirtualScalarGroup()->parseChild(node); + } + } while (node.goToNextElement()); + node.goToParentElement(); } - serverFromClientConnector_ = make_shared(connectors) ; - } - void CGrid::computeServerToClientConnector(void) - { - vector> connectors ; - for(auto& element : getElements()) + if (!order_.empty()) { - if (element.type==TYPE_DOMAIN) connectors.push_back(element.domain->getServerToClientConnector()) ; - else if (element.type==TYPE_AXIS) connectors.push_back(element.axis->getServerToClientConnector()) ; - else if (element.type==TYPE_SCALAR) connectors.push_back(element.scalar->getServerToClientConnector()) ; + int sizeOrd = order_.size(); + axis_domain_order.resize(sizeOrd); + for (int i = 0; i < sizeOrd; ++i) + { + axis_domain_order(i) = order_[i]; + } } - serverToClientConnector_ = make_shared(connectors) ; - } - void CGrid::computeClientFromClientConnector(void) - { - vector> connectors ; - for(auto& element : getElements()) - { - if (element.type==TYPE_DOMAIN) connectors.push_back(element.domain->getServerFromClientConnector()) ; - else if (element.type==TYPE_AXIS) connectors.push_back(element.axis->getServerFromClientConnector()) ; - else if (element.type==TYPE_SCALAR) connectors.push_back(element.scalar->getServerFromClientConnector()) ; - } - clientFromClientConnector_ = make_shared(connectors) ; - } + setDomainList(); + setAxisList(); + setScalarList(); + } + CATCH_DUMP_ATTR - } // namespace xios diff --git a/xios_2311_src/src/node/grid.hpp b/xios_2311_src/src/node/grid.hpp index a7572512..8b1bf4ec 100755 --- a/xios_2311_src/src/node/grid.hpp +++ b/xios_2311_src/src/node/grid.hpp @@ -15,14 +15,6 @@ #include "client_server_mapping.hpp" #include "utils.hpp" #include "transformation_enum.hpp" -#include "grid_local_connector.hpp" -#include "grid_elements.hpp" -#include "grid_scatterer_connector.hpp" -#include "grid_gatherer_connector.hpp" -#include "transformation_path.hpp" -#include "filter.hpp" -#include "grid_algorithm.hpp" - namespace xios { @@ -38,7 +30,8 @@ namespace xios { class CDistributionServer; class CServerDistributionDescription; class CClientServerMapping; - + class CGridTransformation; + ///-------------------------------------------------------------- // Declare/Define CGridAttribute @@ -56,19 +49,6 @@ namespace xios { typedef CObjectTemplate SuperClass; typedef CGridAttributes SuperClassAttribute; - private: - - // define a structure to store elements (CDomain, CAxis, CScalar) using a void* and a type to cast the pointer - enum EElementType { TYPE_SCALAR, TYPE_AXIS, TYPE_DOMAIN } ; - struct SElement {void* ptr ; EElementType type ; CScalar* scalar ; CAxis* axis ; CDomain* domain ; } ; - vector elements_ ; - bool elementsComputed_ = false ; - /** retrieve the vector of elements as a structure containing a void* and the type of pointer */ - vector& getElements(void) { if (!elementsComputed_) computeElements() ; return elements_ ; } - void computeElements(void) ; - /** List order of axis and domain in a grid, if there is a domain, it will take value 2, axis 1, scalar 0 */ - std::vector order_; - public: typedef CGridAttributes RelAttributes; @@ -76,9 +56,7 @@ namespace xios { enum EEventId { - EVENT_ID_ADD_DOMAIN, EVENT_ID_ADD_AXIS, EVENT_ID_ADD_SCALAR, - EVENT_ID_SEND_MASK, - + EVENT_ID_INDEX, EVENT_ID_ADD_DOMAIN, EVENT_ID_ADD_AXIS, EVENT_ID_ADD_SCALAR }; /// Constructeurs /// @@ -91,8 +69,8 @@ namespace xios { // void solveReference(void); void checkEligibilityForCompressedOutput(); - + void solveDomainAxisRef(bool areAttributesChecked); void checkMaskIndex(bool doCalculateIndex); @@ -110,15 +88,24 @@ namespace xios { /// Accesseurs /// StdSize getDimension(void); - StdSize getDataSize(void) ; + StdSize getDataSize(void) const; - /** - * Get the local data grid size, ie the size of the compressed grid (inside the workflow) - * \return The size od the compressed grid - */ - StdSize getLocalDataSize(void) ; + StdSize getTileDataSize(int tileId); + + StdSize getTileSize(int tileId); + + /// Entrees-sorties de champs + template + void inputField(const CArray& field, CArray& stored) const; + template + void maskField(const CArray& field, CArray& stored, bool isTiled = false) const; + template + void outputField(const CArray& stored, CArray& field) const; + template + void uncompressField(const CArray& data, CArray& outData) const; + template + void copyTile(const CArray& tileData, CArray& stored, int tileId); - virtual void parse(xml::CXMLNode& node); /// Destructeur /// @@ -141,51 +128,32 @@ namespace xios { const std::vector& scalars, const CArray& axisDomainOrder = CArray()); static CGrid* createGrid(const std::vector& domains, const std::vector& axis, const std::vector& scalars, const CArray& axisDomainOrder); - static CGrid* get(const string& id, bool noError=false) ; //& domains, const std::vector& axis, const std::vector& scalars, const CArray& axisDomainOrder = CArray()); static StdString generateId(const CGrid* gridSrc, const CGrid* gridDest); static CGrid* cloneGrid(const StdString& idNewGrid, CGrid* gridSrc); - CDomain* getAssociatedDomain(const string& domainId, bool noError=false) ; - CAxis* getAssociatedAxis(const string& axisId, bool noError=false) ; - CScalar* getAssociatedScalar(const string& scalarId, bool noError=false) ; public: - void solveDomainAxisRef(bool areAttributesChecked); - void checkElementsAttributes(void) ; + void computeIndexServer(void); + void computeIndex(void); + void computeIndexScalarGrid(); + void computeWrittenIndex(); void solveDomainRef(bool checkAtt); void solveAxisRef(bool checkAtt); void solveScalarRef(bool checkAtt); - void solveElementsRefInheritance(bool apply = true); - bool activateFieldWorkflow(CGarbageCollector& gc) ; - // void solveTransformations(); + void solveDomainAxisRefInheritance(bool apply = true); + void solveTransformations(); void solveDomainAxisBaseRef(); CDomain* addDomain(const std::string& id=StdString()); CAxis* addAxis(const std::string& id=StdString()); CScalar* addScalar(const std::string& id=StdString()); + void sendAddDomain(const std::string& id=""); + void sendAddAxis(const std::string& id=""); + void sendAddScalar(const std::string& id=""); + void sendGrid(void) ; - public: - void sendGridToFileServer(CContextClient* client) ; - private: - std::set sendGridToFileServer_done_ ; - - public: - void sendGridToCouplerOut(CContextClient* client, const string& fieldId) ; - private: - std::set sendGridToCouplerOut_done_ ; - - public: - void makeAliasForCoupling(const string& fieldId) ; - string getCouplingAlias(const string& fieldId) ; - - public: - void sendAddDomain(const std::string& id,CContextClient* contextClient); - void sendAddAxis(const std::string& id,CContextClient* contextClient); - void sendAddScalar(const std::string& id,CContextClient* contextClient); - static void recvAddDomain(CEventServer& event); void recvAddDomain(CBufferIn& buffer); static void recvAddAxis(CEventServer& event); @@ -194,10 +162,15 @@ namespace xios { void recvAddScalar(CBufferIn& buffer); static bool dispatchEvent(CEventServer& event); - - public: + static void recvIndex(CEventServer& event); + void recvIndex(vector ranks, vector buffers); + void sendIndex(void); + void sendIndexScalarGrid(); + void setContextClient(CContextClient* contextClient); + void computeDomConServer(); + std::map getDomConServerSide(); std::map getAttributesBufferSize(CContextClient* client, bool bufferForWriting = false); std::map getDataBufferSize(CContextClient* client, const std::string& id = "", bool bufferForWriting = false); std::vector getDomainList(); @@ -215,45 +188,112 @@ namespace xios { bool doGridHaveDataToWrite(); bool doGridHaveDataDistributed(CContextClient* client = 0); - - /////////////////////////////////////////// - //////// TRANSFORMATIONS ///// - /////////////////////////////////////////// - public: - pair, shared_ptr > buildTransformationGraph(CGarbageCollector& gc, bool isSource, CGrid* gridSrc, double detectMissingValues, - double defaultValue, CGrid*& newGrid, bool graphEnabled=false, CField* field=0) ; - private: - shared_ptr gridAlgorithm_ = nullptr ; - public: - void setGridAlgorithm(shared_ptr gridAlgorithm) {gridAlgorithm_ = gridAlgorithm;} - shared_ptr getGridAlgorithm(void) { return gridAlgorithm_ ;} - - /////////////////////////////////////////// + size_t getWrittenDataSize() const; + int getNumberWrittenIndexes() const; + int getTotalNumberWrittenIndexes() const; + int getOffsetWrittenIndexes() const; + + CDistributionServer* getDistributionServer(); + CDistributionClient* getDistributionClient(); + CGridTransformation* getTransformations(); + + void transformGrid(CGrid* transformGridSrc); + void completeGrid(CGrid* transformGridSrc = 0); + void doAutoDistribution(CGrid* transformGridSrc); + bool isTransformed(); + void setTransformed(); + bool isGenerated(); + void setGenerated(); + void addTransGridSource(CGrid* gridSrc); + std::map >& getTransGridSource(); + bool hasTransform(); + size_t getGlobalWrittenSize(void) ; public: + CArray storeIndex_client; + CArray storeIndexTiled_client; + CArray storeMask_client; + CArray storeMaskTiled_client; - size_t getGlobalWrittenSize(void) ; - - bool isCompleted(void) ; - void setCompleted(void) ; - void unsetCompleted(void) ; +/** Map containing indexes that will be sent in sendIndex(). */ + std::map > > storeIndex_toSrv; +/** Map storing the number of senders. Key = size of receiver's intracomm */ + std::map > nbSenders; + + std::map > nbReadSenders; + + map > storeIndex_fromSrv; // Support, for now, reading with level-1 server + + map > outIndexFromClient; // Deprecated + + map > compressedOutIndexFromClient; + +/** Map storing received indexes. Key = sender rank, value = index array. */ + map > outGlobalIndexFromClient; + +/** Map storing received indexes. Key = sender rank, value = index array for tiled domains */ + map > outGlobalIndexFromClientTiled; + +// Manh Ha's comment: " A client receives global index from other clients (via recvIndex) +// then does mapping these index into local index of STORE_CLIENTINDEX +// In this way, store_clientIndex can be used as an input of a source filter +// Maybe we need a flag to determine whether a client wants to write. TODO " + +/** Map storing received data. Key = sender rank, value = data array. + * The map is created in CGrid::computeClientIndex and filled upon receiving data in CField::recvUpdateData() */ + map > outLocalIndexStoreOnClient; + +/** Map storing received data. Key = sender rank, value = data array. + * The map is created in CGrid::computeClientIndex and filled upon receiving data in CField::recvUpdateData() */ + map > outLocalIndexStoreOnClientTiled; + + +/** Indexes calculated based on server-like distribution. + * They are used for writing/reading data and only calculated for server level that does the writing/reading. + * Along with localIndexToWriteOnClient, these indexes are used to correctly place incoming data. */ + CArray localIndexToWriteOnServer; + +/** Indexes calculated based on client-like distribution. + * They are used for writing/reading data and only calculated for server level that does the writing/reading. + * Along with localIndexToWriteOnServer, these indexes are used to correctly place incoming data. */ + CArray localIndexToWriteOnClient; + + CArray indexFromClients; bool hasMask(void) const; - /** get mask pointer stored in mask_1d, or mask_2d, or..., or mask_7d */ - CArray mask_ ; - CArray& getMask(void) ; + void checkMask(void); + void createMask(void); + void modifyMask(const CArray& indexToModify, bool valueToModify = false); + void modifyMaskSize(const std::vector& newDimensionSize, bool newValue = false); + + void computeGridGlobalDimension(const std::vector& domains, + const std::vector& axis, + const std::vector& scalars, + const CArray& axisDomainOrder); + + int getNTiles(); + bool isTiled(void) const; + bool isTiledOnly(void) const; private: - /** Client-like distribution calculated based on the knowledge of the entire grid */ - CDistributionClient* clientDistribution_; - public: - void computeClientDistribution(void) ; - private: - bool computeClientDistribution_done_ = false ; - public: - CDistributionClient* getClientDistribution(void); - - private: + template + void checkGridMask(CArray& gridMask, + const std::vector* >& domainMasks, + const std::vector* >& axisMasks, + const CArray& axisDomainOrder, + bool createMask = false); + template + void modifyGridMask(CArray& gridMask, const CArray& indexToModify, bool valueToModify); + + template + void modifyGridMaskSize(CArray& gridMask, const std::vector& eachDimSize, bool newValue); + + void storeField_arr(const double* const data, CArray& stored) const; + void restoreField_arr(const CArray& stored, double* const data) const; + void uncompressField_arr(const double* const data, CArray& outData) const; + void maskField_arr(const double* const data, CArray& stored, bool isTiled = false) const; + void copyTile_arr(const double* const tileData, CArray& stored, int tileId); + void setVirtualDomainGroup(CDomainGroup* newVDomainGroup); void setVirtualAxisGroup(CAxisGroup* newVAxisGroup); void setVirtualScalarGroup(CScalarGroup* newVScalarGroup); @@ -266,32 +306,65 @@ namespace xios { CAxisGroup* getVirtualAxisGroup() const; CScalarGroup* getVirtualScalarGroup() const; + void checkAttributesAfterTransformation(); + void setTransformationAlgorithms(); + void computeIndexByElement(const std::vector > >& indexServerOnElement, + const CContextClient* client, + CClientServerMapping::GlobalIndexMap& globalIndexOnServer); int computeGridGlobalDimension(std::vector& globalDim, const std::vector domains, const std::vector axis, const std::vector scalars, const CArray& axisDomainOrder); int getDistributedDimension(); - public: - bool isDataDistributed(void) ; + void computeClientIndex(); + void computeClientIndexTiled(); + void computeConnectedClients(); + void computeClientIndexScalarGrid(); + void computeConnectedClientsScalarGrid(); + + void computeTileIndex(); + private: /** Clients that have to send a grid. There can be multiple clients in case of secondary server, otherwise only one client. */ std::list clients; std::set clientsSet; - private: bool isChecked; bool isDomainAxisChecked; bool isIndexSent; + int nTiles_; +/** True if tiled data is defined on the grid */ + bool isTiled_; +/** True if ONLY tiled data is defined on the grid */ + bool isTiledOnly_; + +/** Vector containing local domain indexes for each tile */ + std::vector > storeTileIndex; + CDomainGroup* vDomainGroup_; CAxisGroup* vAxisGroup_; CScalarGroup* vScalarGroup_; std::vector axisList_, domList_, scalarList_; bool isAxisListSet, isDomListSet, isScalarListSet; +/** Client-like distribution calculated based on the knowledge of the entire grid */ + CDistributionClient* clientDistribution_; + +/** Client-like distribution calculated based on the knowledge of the entire grid in case of a tiled domain */ + CDistributionClient* clientDistributionTiled_; + + +/** Server-like distribution calculated upon receiving indexes */ + CDistributionServer* serverDistribution_; + + CClientServerMapping* clientServerMap_; + size_t writtenDataSize_; + int numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_; + /** Map storing local ranks of connected receivers. Key = size of receiver's intracomm. * It is calculated in computeConnectedClients(). */ std::map > connectedServerRank_; @@ -305,100 +378,246 @@ namespace xios { /** Size of data to be send in case of reading. It is calculated in recvIndex(). */ std::map connectedDataSizeRead_; - + + bool isDataDistributed_; //! True if and only if the data defined on the grid can be outputted in a compressed way bool isCompressible_; std::set relFilesCompressed; - + bool isTransformed_, isGenerated_; + bool computedWrittenIndex_; std::vector axisPositionInGrid_; - void computeAxisPositionInGrid(void) ; - bool computeAxisPositionInGrid_done_ = false ; - std::vector& getAxisPositionInGrid(void) { if (!computeAxisPositionInGrid_done_) computeAxisPositionInGrid() ; return axisPositionInGrid_ ;} - + CGridTransformation* transformations_; bool hasDomainAxisBaseRef_; std::map > gridSrc_; + bool hasTransform_; - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - public: - CGrid* duplicateSentGrid(void) ; - private: - static void recvMask(CEventServer& event) ; - void receiveMask(CEventServer& event) ; - - private: - shared_ptr gridLocalElements_= nullptr ; - void computeGridLocalElements(void) ; - public: - shared_ptr getGridLocalElements(void) { if (gridLocalElements_==nullptr) computeGridLocalElements() ; return gridLocalElements_ ;} +/** Map storing global indexes of server-like (band-wise) distribution for sending to receivers. + * Key = size of receiver's intracomm. + */ +// std::map globalIndexOnServer_; + std::map globalIndexOnServer_; - private: - shared_ptr modelToWorkflowConnector_ = nullptr ; - public: - void computeModelToWorkflowConnector(void) ; - shared_ptr getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_;} - private: - shared_ptr workflowToModelConnector_ = nullptr; - public: - void computeWorkflowToModelConnector(void) ; - shared_ptr getWorkflowToModelConnector(void) { if (workflowToModelConnector_==nullptr) computeWorkflowToModelConnector() ; return workflowToModelConnector_;} +/** List order of axis and domain in a grid, if there is a domain, it will take value 1 (true), axis 0 (false) */ + std::vector order_; - public: //? - void distributeGridToServer(CContextClient* client, const string& fieldId=""); - - - private: - shared_ptr workflowToFullConnector_ = nullptr; - public: - void computeWorkflowToFullConnector(void) ; - shared_ptr getWorkflowToFullConnector(void) { if (workflowToFullConnector_==nullptr) computeWorkflowToFullConnector() ; return workflowToFullConnector_;} - - private: - shared_ptr fullToWorkflowConnector_ = nullptr; - public: - void computeFullToWorkflowConnector(void) ; - shared_ptr getFullToWorkflowConnector(void) { if (fullToWorkflowConnector_==nullptr) computeFullToWorkflowConnector() ; return fullToWorkflowConnector_;} + }; // class CGrid - + ///-------------------------------------------------------------- - private: - shared_ptr clientFromClientConnector_ = nullptr ; - public: - shared_ptr getClientFromClientConnector(void) { if (clientFromClientConnector_==nullptr) computeClientFromClientConnector() ; return clientFromClientConnector_;} - void computeClientFromClientConnector(void) ; + template + void CGrid::inputField(const CArray& field, CArray& stored) const + TRY + { +//#ifdef __XIOS_DEBUG + if (this->getDataSize() != field.numElements()) + ERROR("void CGrid::inputField(const CArray& field, CArray& stored) const", + << "[ Awaiting data of size = " << this->getDataSize() << ", " + << "Received data size = " << field.numElements() << " ] " + << "The data array does not have the right size! " + << "Grid = " << this->getId()) +//#endif + this->storeField_arr(field.dataFirst(), stored); + } + CATCH + + template + void CGrid::copyTile(const CArray& tileData, CArray& storedData, int tileId) + { + this->copyTile_arr(tileData.dataFirst(), storedData, tileId); + } - private: - map> clientToClientConnector_ ; - public: - shared_ptr getClientToClientConnector(CContextClient* client) { return clientToClientConnector_[client] ;} // make some test to see if connector exits for the given client - + template + void CGrid::maskField(const CArray& field, CArray& stored, bool isTiled) const + { +//#ifdef __XIOS_DEBUG + if (this->getDataSize() != field.numElements()) + ERROR("void CGrid::maskField(const CArray& field, CArray& stored) const", + << "[ Awaiting data of size = " << this->getDataSize() << ", " + << "Received data size = " << field.numElements() << " ] " + << "The data array does not have the right size! " + << "Grid = " << this->getId()) +//#endif + this->maskField_arr(field.dataFirst(), stored, isTiled); + } + + template + void CGrid::outputField(const CArray& stored, CArray& field) const + TRY + { +//#ifdef __XIOS_DEBUG + if (this->getDataSize() != field.numElements()) + ERROR("void CGrid::outputField(const CArray& stored, CArray& field) const", + << "[ Size of the data = " << this->getDataSize() << ", " + << "Output data size = " << field.numElements() << " ] " + << "The ouput array does not have the right size! " + << "Grid = " << this->getId()) +//#endif + this->restoreField_arr(stored, field.dataFirst()); + } + CATCH + + /*! + This function removes the effect of mask on received data on the server. + This function only serve for the checking purpose. TODO: Something must be done to seperate mask and data_index from each other in received data + \data data received data with masking effect on the server + \outData data without masking effect + */ + template + void CGrid::uncompressField(const CArray& data, CArray& outData) const + TRY + { + uncompressField_arr(data.dataFirst(), outData); + } + CATCH + + template + void CGrid::checkGridMask(CArray& gridMask, + const std::vector* >& domainMasks, + const std::vector* >& axisMasks, + const CArray& axisDomainOrder, + bool createMask) + TRY + { + int idx = 0; + int numElement = axisDomainOrder.numElements(); + int dim = domainMasks.size() * 2 + axisMasks.size(); + std::vector domainP = this->getDomains(); + std::vector axisP = this->getAxis(); + + std::vector idxLoop(dim,0), indexMap(numElement), eachDimSize(dim); + std::vector currentIndex(dim); + int idxDomain = 0, idxAxis = 0; + for (int i = 0; i < numElement; ++i) + { + indexMap[i] = idx; + if (2 == axisDomainOrder(i)) { + eachDimSize[indexMap[i]] = domainP[idxDomain]->ni; + eachDimSize[indexMap[i]+1] = domainP[idxDomain]->nj; + idx += 2; ++idxDomain; + } + else if (1 == axisDomainOrder(i)) { +// eachDimSize[indexMap[i]] = axisMasks[idxAxis]->numElements(); + eachDimSize[indexMap[i]] = axisP[idxAxis]->n; + ++idx; ++idxAxis; + } + else {}; + } + + if (!gridMask.isEmpty() && !createMask) + { + for (int i = 0; i < dim; ++i) + { + if (gridMask.extent(i) != eachDimSize[i]) + ERROR("CGrid::checkMask(void)", + << "The mask has one dimension whose size is different from the one of the local grid." << std::endl + << "Local size of dimension " << i << " is " << eachDimSize[i] << "." << std::endl + << "Mask size for dimension " << i << " is " << gridMask.extent(i) << "." << std::endl + << "Grid = " << this->getId()) + } + } + else { + CArrayBoolTraits >::resizeArray(gridMask,eachDimSize); + gridMask = true; + } + + int ssize = gridMask.numElements(); + idx = 0; + while (idx < ssize) + { + for (int i = 0; i < dim-1; ++i) + { + if (idxLoop[i] == eachDimSize[i]) + { + idxLoop[i] = 0; + ++idxLoop[i+1]; + } + } + + // Find out outer index + idxDomain = idxAxis = 0; + bool maskValue = true; + for (int i = 0; i < numElement; ++i) + { + if (2 == axisDomainOrder(i)) + { + int idxTmp = idxLoop[indexMap[i]] + idxLoop[indexMap[i]+1] * eachDimSize[indexMap[i]]; + if (idxTmp < (*domainMasks[idxDomain]).numElements()) + maskValue = maskValue && (*domainMasks[idxDomain])(idxTmp); + else + maskValue = false; + ++idxDomain; + } + else if (1 == axisDomainOrder(i)) + { + int idxTmp = idxLoop[indexMap[i]]; + if (idxTmp < (*axisMasks[idxAxis]).numElements()) + maskValue = maskValue && (*axisMasks[idxAxis])(idxTmp); + else + maskValue = false; + + ++idxAxis; + } + } + + int maskIndex = idxLoop[0]; + int mulDim = 1; + for (int k = 1; k < dim; ++k) + { + mulDim *= eachDimSize[k-1]; + maskIndex += idxLoop[k]*mulDim; + } + *(gridMask.dataFirst()+maskIndex) &= maskValue; + + ++idxLoop[0]; + ++idx; + } + } + CATCH_DUMP_ATTR + + template + void CGrid::modifyGridMaskSize(CArray& gridMask, + const std::vector& eachDimSize, + bool newValue) + TRY + { + if (N != eachDimSize.size()) + { + // ERROR("CGrid::modifyGridMaskSize(CArray& gridMask, + // const std::vector& eachDimSize, + // bool newValue)", + // << "Dimension size of the mask is different from input dimension size." << std::endl + // << "Mask dimension is " << N << "." << std::endl + // << "Input dimension is " << eachDimSize.size() << "." << std::endl + // << "Grid = " << this->getId()) + } + CArrayBoolTraits >::resizeArray(gridMask,eachDimSize); + gridMask = newValue; + } + CATCH_DUMP_ATTR + + + /*! + Modify the current mask of grid, the local index to be modified will take value false + \param [in/out] gridMask current mask of grid + \param [in] indexToModify local index to modify + */ + template + void CGrid::modifyGridMask(CArray& gridMask, const CArray& indexToModify, bool valueToModify) + TRY + { + int num = indexToModify.numElements(); + for (int idx = 0; idx < num; ++idx) + { + *(gridMask.dataFirst()+indexToModify(idx)) = valueToModify; + } + } + CATCH_DUMP_ATTR - private: - map> clientFromServerConnector_ ; - public: - shared_ptr getClientFromServerConnector(CContextClient* client) { return clientFromServerConnector_[client];} - void computeClientFromServerConnector(void) ; + ///-------------------------------------------------------------- - private: - shared_ptr serverToClientConnector_=nullptr ; - public: - shared_ptr getServerToClientConnector(void) { if (serverToClientConnector_==nullptr) computeServerToClientConnector() ; return serverToClientConnector_;} - void computeServerToClientConnector(void) ; - private: - map> clientToServerConnector_ ; - public: - shared_ptr getClientToServerConnector(CContextClient* client) { return clientToServerConnector_[client] ;} // make some test to see if connector exits for the given client - - private: - shared_ptr serverFromClientConnector_ = nullptr ; - public: - shared_ptr getServerFromClientConnector(void) { if (serverFromClientConnector_==nullptr) computeServerFromClientConnector() ; return serverFromClientConnector_;} - void computeServerFromClientConnector(void) ; - }; // class CGrid // Declare/Define CGridGroup and CGridDefinition DECLARE_GROUP(CGrid); diff --git a/xios_2311_src/src/node/interpolate_axis.cpp b/xios_2311_src/src/node/interpolate_axis.cpp index 1f0e1db1..ae758670 100644 --- a/xios_2311_src/src/node/interpolate_axis.cpp +++ b/xios_2311_src/src/node/interpolate_axis.cpp @@ -1,6 +1,4 @@ #include "interpolate_axis.hpp" -#include "axis_algorithm_interpolate_coordinate.hpp" -#include "axis_algorithm_interpolate.hpp" #include "type.hpp" #include "field.hpp" @@ -28,7 +26,7 @@ namespace xios { bool CInterpolateAxis::registerTrans() { - return registerTransformation(TRANS_INTERPOLATE_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_INTERPOLATE_AXIS, CInterpolateAxis::create); } bool CInterpolateAxis::_dummyRegistered = CInterpolateAxis::registerTrans(); @@ -42,6 +40,8 @@ namespace xios { void CInterpolateAxis::checkValid(CAxis* axisSrc) { if (this->order.isEmpty()) this->order.setValue(1); + if (this->coordinate.isEmpty() && !this->coordinate_src.isEmpty()) this->coordinate.setValue(this->coordinate_src.getValue()); + if (this->coordinate_src.isEmpty() && !this->coordinate.isEmpty()) this->coordinate_src.setValue(this->coordinate.getValue()); int order = this->order.getValue(); if (order >= axisSrc->n_glo.getValue()) { @@ -59,74 +59,56 @@ namespace xios { << "Order of interpolation is " << order ); } - if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty())) - { - ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", - << " is incompatible with or attributes. attribute is present only for backward" - << "compatibility and is now declared obsolete") ; - } if (!this->coordinate.isEmpty()) { + StdString coordinate = this->coordinate.getValue(); if (!CField::has(coordinate)) ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", << "Coordinate field whose id " << coordinate << "does not exist " << "Please define one"); } - - if (!this->coordinate_src.isEmpty()) - { - if (!CField::has(coordinate_src)) - ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", - << "Coordinate field whose id " << coordinate_src << "does not exist " - << "Please define one"); - } - + if (!this->coordinate_dst.isEmpty()) { - if (!CField::has(coordinate_dst)) + StdString coordinate = this->coordinate_dst.getValue(); + if (!CField::has(coordinate)) ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", - << "Coordinate field whose id " << coordinate_dst << "does not exist " + << "Coordinate field whose id " << coordinate << "does not exist " << "Please define one"); } + } std::vector CInterpolateAxis::checkAuxInputs_() { std::vector auxInputs; - - if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty())) - { - ERROR("std::vector CInterpolateAxis::checkAuxInputs_()", - << " is incompatible with or attributes. attribute is present only for backward" - << "compatibility and is now declared obsolete") ; - } - - if (!this->coordinate.isEmpty()) + if (!this->coordinate.isEmpty() && this->coordinate_src.isEmpty()) { StdString coordinate = this->coordinate.getValue(); + this->coordinate_src.setValue(coordinate); if (!CField::has(coordinate)) - ERROR("std::vector CInterpolateAxis::checkAuxInputs_()", + ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", << "Coordinate field whose id " << coordinate << "does not exist " << "Please define one"); auxInputs.push_back(coordinate); } - - if (!this->coordinate_src.isEmpty()) + if (!this->coordinate_src.isEmpty() || !this->coordinate.isEmpty()) { - StdString coordinate = this->coordinate_src.getValue(); + StdString coordinate = !this->coordinate.isEmpty()? this->coordinate.getValue():this->coordinate_src.getValue(); + this->coordinate.setValue(coordinate); if (!CField::has(coordinate)) - ERROR("std::vector CInterpolateAxis::checkAuxInputs_()", + ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", << "Coordinate field whose id " << coordinate << "does not exist " << "Please define one"); auxInputs.push_back(coordinate); } - + if (!this->coordinate_dst.isEmpty()) { StdString coordinate = this->coordinate_dst.getValue(); if (!CField::has(coordinate)) - ERROR("std::vector CInterpolateAxis::checkAuxInputs_()", + ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)", << "Coordinate field whose id " << coordinate << "does not exist " << "Please define one"); auxInputs.push_back(coordinate); @@ -134,24 +116,4 @@ namespace xios { return auxInputs; } - - shared_ptr CInterpolateAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - if (!coordinate.isEmpty() || !coordinate_src.isEmpty() || !coordinate_dst.isEmpty()) - return CAxisAlgorithmInterpolateCoordinate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - - else return CAxisAlgorithmInterpolate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/interpolate_axis.hpp b/xios_2311_src/src/node/interpolate_axis.hpp index 006422b8..2cecc5b0 100644 --- a/xios_2311_src/src/node/interpolate_axis.hpp +++ b/xios_2311_src/src/node/interpolate_axis.hpp @@ -19,8 +19,7 @@ namespace xios { class CInterpolateAxisAttributes; class CInterpolateAxis; class CAxis; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CInterpolateAxisAttributes SuperClassAttribute; - typedef CInterpolateAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -60,19 +57,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_INTERPOLATE_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/interpolate_domain.cpp b/xios_2311_src/src/node/interpolate_domain.cpp index 076524ee..58917b53 100644 --- a/xios_2311_src/src/node/interpolate_domain.cpp +++ b/xios_2311_src/src/node/interpolate_domain.cpp @@ -1,5 +1,4 @@ #include "interpolate_domain.hpp" -#include "domain_algorithm_interpolate.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CInterpolateDomain::_dummyRegistered = CInterpolateDomain::registerTrans(); bool CInterpolateDomain::registerTrans() { - return registerTransformation(TRANS_INTERPOLATE_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_INTERPOLATE_DOMAIN, create); } //---------------------------------------------------------------- @@ -68,18 +67,4 @@ namespace xios { } - shared_ptr CInterpolateDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmInterpolate::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/interpolate_domain.hpp b/xios_2311_src/src/node/interpolate_domain.hpp index e21cb980..c850fc5a 100644 --- a/xios_2311_src/src/node/interpolate_domain.hpp +++ b/xios_2311_src/src/node/interpolate_domain.hpp @@ -19,8 +19,7 @@ namespace xios { class CInterpolateDomainAttributes; class CInterpolateDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CInterpolateDomainAttributes SuperClassAttribute; - typedef CInterpolateDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_INTERPOLATE_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/inverse_axis.cpp b/xios_2311_src/src/node/inverse_axis.cpp index f05b7000..999cd5b4 100644 --- a/xios_2311_src/src/node/inverse_axis.cpp +++ b/xios_2311_src/src/node/inverse_axis.cpp @@ -1,5 +1,4 @@ #include "inverse_axis.hpp" -#include "axis_algorithm_inverse.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CInverseAxis::registerTrans() { - return registerTransformation(TRANS_INVERSE_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_INVERSE_AXIS, CInverseAxis::create); } bool CInverseAxis::_dummyRegistered = CInverseAxis::registerTrans(); @@ -39,18 +38,4 @@ namespace xios { void CInverseAxis::checkValid(CAxis* axisSrc) {} - shared_ptr CInverseAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmInverse::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } } diff --git a/xios_2311_src/src/node/inverse_axis.hpp b/xios_2311_src/src/node/inverse_axis.hpp index b8f0e675..18875671 100644 --- a/xios_2311_src/src/node/inverse_axis.hpp +++ b/xios_2311_src/src/node/inverse_axis.hpp @@ -18,8 +18,6 @@ namespace xios { class CInverseAxisAttributes; class CInverseAxis; class CAxis; - class CGenericAlgorithmTransformation ; - class CGrid; ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -40,8 +38,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CInverseAxisAttributes SuperClassAttribute; - typedef CInverseAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -57,19 +53,7 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_INVERSE_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; + private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/mesh.cpp b/xios_2311_src/src/node/mesh.cpp index ee046263..18071bad 100755 --- a/xios_2311_src/src/node/mesh.cpp +++ b/xios_2311_src/src/node/mesh.cpp @@ -66,9 +66,6 @@ namespace xios { CMesh::meshList.insert( make_pair(meshName, newMesh) ); return &meshList[meshName]; } - - MISSING_RETURN( "CMesh* CMesh::getMesh (StdString meshName, int nvertex)" ); - return nullptr; } ///---------------------------------------------------------------- @@ -429,29 +426,48 @@ namespace xios { if (nvertex == 1) { + if (nodesAreWritten) return ; + nbNodes_ = lonvalue.numElements(); node_lon.resize(nbNodes_); node_lat.resize(nbNodes_); node_lon = lonvalue; node_lat = latvalue; + unsigned long nodeCount = nbNodes_; + unsigned long nodeStart, nbNodes; + MPI_Scan(&nodeCount, &nodeStart, 1, MPI_UNSIGNED_LONG, MPI_SUM, comm); + int nNodes = nodeStart; + MPI_Bcast(&nNodes, 1, MPI_UNSIGNED_LONG, mpiSize-1, comm); + nbNodesGlo = nNodes; + + nodeStart -= nodeCount; + node_start = nodeStart; + node_count = nodeCount; + // Global node indexes vector hashValues(4); CClientClientDHTSizet::Index2VectorInfoTypeMap nodeHash2IdxGlo; for (size_t nn = 0; nn < nbNodes_; ++nn) { +// cout<<"MESH : "<<"node inserted : ("<< lonvalue(nn)<<","<< latvalue(nn)<<") index glo "< " ; hashValues = CMesh::createHashes(lonvalue(nn), latvalue(nn)); for (size_t nh = 0; nh < 4; ++nh) { - nodeHash2IdxGlo[hashValues[nh]].push_back(mpiRank*nbNodes_ + nn); + nodeHash2IdxGlo[hashValues[nh]].push_back(nodeStart + nn); +// cout<second[0]; else nodeIdxGlo2 = it->second[0]; + +// cout<<"("< 2 { + if (facesAreWritten) return ; + nbFaces_ = bounds_lon.shape()[1]; face_lon.resize(nbFaces_); face_lat.resize(nbFaces_); @@ -688,6 +714,8 @@ namespace xios { unsigned long nbFacesAccum; MPI_Scan(&nbFacesOnProc, &nbFacesAccum, 1, MPI_UNSIGNED_LONG, MPI_SUM, comm); nbFacesAccum -= nbFaces_; +// cout<getInfoIndexMap(); CClientClientDHTSizet::Index2VectorInfoTypeMap::iterator it1, it2; CArray edgeHashList(nbFaces_*nvertex); + size_t nEdge = 0; for (int nf = 0; nf < nbFaces_; ++nf) { @@ -770,6 +799,8 @@ namespace xios { { size_t faceIdxGlo = nbFacesAccum + nf; size_t edgeHash = hashPairOrdered(it1->second[0], it2->second[0]); +// cout<<"MESH : "<<"find edge : ("<second[0]<<" & "<second[0]<second[0]; face_edges(nv1,nf) = edgeIdxGlo; @@ -989,8 +1020,7 @@ namespace xios { } } } - if (nEdgeHash==0) edgeHashList.resize(nEdgeHash); - else edgeHashList.resizeAndPreserve(nEdgeHash); + edgeHashList.resizeAndPreserve(nEdgeHash); // (2.3) Generating global edge indexes // The ownership criterion: priority of the process with smaller rank @@ -1295,7 +1325,7 @@ namespace xios { } } -// CDHTAutoIndexing dhtNodeIdxGlo = CDHTAutoIndexing(nodeIdx2Idx, comm); + // CDHTAutoIndexing dhtNodeIdxGlo = CDHTAutoIndexing(nodeIdx2Idx, comm); // CDHTAutoIndexing will not give consistent node numbering for varying number of procs. => // Solution: global node indexing by hand. // Maps modified in this step: @@ -1331,17 +1361,17 @@ namespace xios { } } } - if (nIdx==0) nodeIdxList.resize(nIdx); - else nodeIdxList.resizeAndPreserve(nIdx); + nodeIdxList.resizeAndPreserve(nIdx); CClientClientDHTSizet dhtNodeIdx(nodeIdx2Idx, comm); dhtNodeIdx.computeIndexInfoMapping(nodeIdxList); CClientClientDHTSizet::Index2VectorInfoTypeMap& nodeIdx2IdxGlo = dhtNodeIdx.getInfoIndexMap(); // (3.3) Saving node data: node_lon, node_lat, and face_nodes // Generating edgeHash2Info = > and edgeHashList -// nbNodesGlo = dhtNodeIdxGlo.getNbIndexesGlobal(); -// node_count = dhtNodeIdxGlo.getIndexCount(); -// node_start = dhtNodeIdxGlo.getIndexStart(); + + // nbNodesGlo = dhtNodeIdxGlo.getNbIndexesGlobal(); + // node_count = dhtNodeIdxGlo.getIndexCount(); + // node_start = dhtNodeIdxGlo.getIndexStart(); node_lon.resize(node_count); node_lat.resize(node_count); size_t nodeIdxGlo1 = 0; @@ -1382,8 +1412,7 @@ namespace xios { face_nodes(nv1,nf) = nodeIdxGlo1; } } - if (nEdgeHash==0) edgeHashList.resize(nEdgeHash); - else edgeHashList.resizeAndPreserve(nEdgeHash); + edgeHashList.resizeAndPreserve(nEdgeHash); // (3.4) Generating global edge indexes // Maps generated in this step are: @@ -1471,9 +1500,9 @@ namespace xios { // (3.5) Saving variables: edge_lon, edge_lat, face_edges // Creating map edgeIdxGlo2Face -// nbEdgesGlo = dhtEdgeIdxGlo.getNbIndexesGlobal(); -// edge_count = dhtEdgeIdxGlo.getIndexCount(); -// edge_start = dhtEdgeIdxGlo.getIndexStart(); + // nbEdgesGlo = dhtEdgeIdxGlo.getNbIndexesGlobal(); + // edge_count = dhtEdgeIdxGlo.getIndexCount(); + // edge_start = dhtEdgeIdxGlo.getIndexStart(); edge_lon.resize(edge_count); edge_lat.resize(edge_count); @@ -1607,6 +1636,7 @@ namespace xios { } // createMeshEpsilon + ///---------------------------------------------------------------- /*! * \fn void CMesh::getGloNghbFacesNodeType(const MPI_Comm& comm, const CArray& face_idx, @@ -1760,8 +1790,7 @@ namespace xios { } } } - if (nbNghb==0) nghbFaces.resize(2, nbNghb); - else nghbFaces.resizeAndPreserve(2, nbNghb); + nghbFaces.resizeAndPreserve(2, nbNghb); } // getGloNghbFacesNodeType ///---------------------------------------------------------------- @@ -1813,8 +1842,7 @@ namespace xios { } } } - if (iIdx==0) nodeHashList.resize(iIdx); - else nodeHashList.resizeAndPreserve(iIdx); + nodeHashList.resizeAndPreserve(iIdx); // (1.2) Generating node indexes // The ownership criterion: priority of the process holding the smaller index @@ -1942,8 +1970,7 @@ namespace xios { } // nodeIdxMin1 != nodeIdxMin2 } } - if (nbNghb==0) nghbFaces.resize(2, nbNghb); - else nghbFaces.resizeAndPreserve(2, nbNghb); + nghbFaces.resizeAndPreserve(2, nbNghb); } // getGloNghbFacesEdgeType ///---------------------------------------------------------------- diff --git a/xios_2311_src/src/node/node_enum.hpp b/xios_2311_src/src/node/node_enum.hpp index f00d26ad..6d6e69d1 100644 --- a/xios_2311_src/src/node/node_enum.hpp +++ b/xios_2311_src/src/node/node_enum.hpp @@ -14,8 +14,6 @@ namespace xios eDomain,gDomain, eField,gField, eFile,gFile, - eCouplerIn,gCouplerIn, - eCouplerOut,gCouplerOut, eGrid,gGrid, eVariable,gVariable, eContext,gContext, diff --git a/xios_2311_src/src/node/node_type.hpp b/xios_2311_src/src/node/node_type.hpp index 4902d32c..ad72c8f8 100644 --- a/xios_2311_src/src/node/node_type.hpp +++ b/xios_2311_src/src/node/node_type.hpp @@ -5,8 +5,6 @@ #include "domain.hpp" #include "field.hpp" #include "file.hpp" -#include "coupler_in.hpp" -#include "coupler_out.hpp" #include "grid.hpp" #include "variable.hpp" #include "context.hpp" diff --git a/xios_2311_src/src/node/reduce_axis_to_axis.cpp b/xios_2311_src/src/node/reduce_axis_to_axis.cpp index 2396173a..6393d81b 100644 --- a/xios_2311_src/src/node/reduce_axis_to_axis.cpp +++ b/xios_2311_src/src/node/reduce_axis_to_axis.cpp @@ -1,5 +1,4 @@ #include "reduce_axis_to_axis.hpp" -#include "axis_algorithm_reduce_axis.hpp" #include "type.hpp" #include "axis.hpp" @@ -27,7 +26,7 @@ namespace xios { bool CReduceAxisToAxis::registerTrans() { - return registerTransformation(TRANS_REDUCE_AXIS_TO_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_REDUCE_AXIS_TO_AXIS, CReduceAxisToAxis::create); } bool CReduceAxisToAxis::_dummyRegistered = CReduceAxisToAxis::registerTrans(); @@ -56,18 +55,4 @@ namespace xios { } - shared_ptr CReduceAxisToAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmReduceAxis::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/reduce_axis_to_axis.hpp b/xios_2311_src/src/node/reduce_axis_to_axis.hpp index 3059c02c..326d011e 100644 --- a/xios_2311_src/src/node/reduce_axis_to_axis.hpp +++ b/xios_2311_src/src/node/reduce_axis_to_axis.hpp @@ -18,8 +18,7 @@ namespace xios { class CReduceAxisToAxisAttributes; class CReduceAxisToAxis; class CAxis; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -40,8 +39,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReduceAxisToAxisAttributes SuperClassAttribute; - typedef CReduceAxisToAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -57,20 +54,7 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REDUCE_AXIS_TO_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; - private: + private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); static bool _dummyRegistered; diff --git a/xios_2311_src/src/node/reduce_axis_to_scalar.cpp b/xios_2311_src/src/node/reduce_axis_to_scalar.cpp index 776717e7..d0cc1b68 100644 --- a/xios_2311_src/src/node/reduce_axis_to_scalar.cpp +++ b/xios_2311_src/src/node/reduce_axis_to_scalar.cpp @@ -1,5 +1,4 @@ #include "reduce_axis_to_scalar.hpp" -#include "scalar_algorithm_reduce_axis.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CReduceAxisToScalar::registerTrans() { - return registerTransformation(TRANS_REDUCE_AXIS_TO_SCALAR, {create, getTransformation}); + return registerTransformation(TRANS_REDUCE_AXIS_TO_SCALAR, CReduceAxisToScalar::create); } bool CReduceAxisToScalar::_dummyRegistered = CReduceAxisToScalar::registerTrans(); @@ -41,18 +40,4 @@ namespace xios { { } - shared_ptr CReduceAxisToScalar::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CScalarAlgorithmReduceAxis::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/reduce_axis_to_scalar.hpp b/xios_2311_src/src/node/reduce_axis_to_scalar.hpp index fee4dcd9..de5f89ab 100644 --- a/xios_2311_src/src/node/reduce_axis_to_scalar.hpp +++ b/xios_2311_src/src/node/reduce_axis_to_scalar.hpp @@ -18,8 +18,7 @@ namespace xios { class CReduceAxisToScalarAttributes; class CReduceAxisToScalar; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -40,8 +39,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReduceAxisToScalarAttributes SuperClassAttribute; - typedef CReduceAxisToScalar MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -57,19 +54,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REDUCE_AXIS_TO_SCALAR ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/reduce_domain_to_axis.cpp b/xios_2311_src/src/node/reduce_domain_to_axis.cpp index 0fdc48fb..9038137c 100644 --- a/xios_2311_src/src/node/reduce_domain_to_axis.cpp +++ b/xios_2311_src/src/node/reduce_domain_to_axis.cpp @@ -1,5 +1,4 @@ #include "reduce_domain_to_axis.hpp" -#include "axis_algorithm_reduce_domain.hpp" #include "type.hpp" #include "axis.hpp" #include "domain.hpp" @@ -28,7 +27,7 @@ namespace xios { bool CReduceDomainToAxis::registerTrans() { - return registerTransformation(TRANS_REDUCE_DOMAIN_TO_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_REDUCE_DOMAIN_TO_AXIS, CReduceDomainToAxis::create); } bool CReduceDomainToAxis::_dummyRegistered = CReduceDomainToAxis::registerTrans(); @@ -47,6 +46,10 @@ namespace xios { << "Domain source " <getId() << std::endl << "Axis destination " << axisDst->getId()); + int axis_n_glo = axisDst->n_glo; + int domain_ni_glo = domainSrc->ni_glo; + int domain_nj_glo = domainSrc->nj_glo; + if (this->operation.isEmpty()) ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "An operation must be defined." @@ -60,20 +63,27 @@ namespace xios { << "Axis destination " << axisDst->getId()); if (this->local.isEmpty()) local=false ; - } + switch (direction) + { + case direction_attr::jDir: + if (axis_n_glo != domain_ni_glo) + ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", + << "Extract domain along j, axis destination should have n_glo equal to ni_glo of domain source" + << "Domain source " <getId() << " has nj_glo " << domain_ni_glo << std::endl + << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); + break; - shared_ptr CReduceDomainToAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmReduceDomain::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; + case direction_attr::iDir: + if (axis_n_glo != domain_nj_glo) + ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", + << "Extract domain along i, axis destination should have n_glo equal to nj_glo of domain source" + << "Domain source " <getId() << " has nj_glo " << domain_nj_glo << std::endl + << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo); + break; + + default: + break; + } } + } diff --git a/xios_2311_src/src/node/reduce_domain_to_axis.hpp b/xios_2311_src/src/node/reduce_domain_to_axis.hpp index 212800c5..90753ba3 100644 --- a/xios_2311_src/src/node/reduce_domain_to_axis.hpp +++ b/xios_2311_src/src/node/reduce_domain_to_axis.hpp @@ -19,8 +19,7 @@ namespace xios { class CReduceDomainToAxis; class CAxis; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReduceDomainToAxisAttributes SuperClassAttribute; - typedef CReduceDomainToAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,20 +55,7 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REDUCE_DOMAIN_TO_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; - private: + private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); static bool _dummyRegistered; diff --git a/xios_2311_src/src/node/reduce_domain_to_scalar.cpp b/xios_2311_src/src/node/reduce_domain_to_scalar.cpp index b6b7e86a..a7f7bce2 100644 --- a/xios_2311_src/src/node/reduce_domain_to_scalar.cpp +++ b/xios_2311_src/src/node/reduce_domain_to_scalar.cpp @@ -1,5 +1,4 @@ #include "reduce_domain_to_scalar.hpp" -#include "scalar_algorithm_reduce_domain.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CReduceDomainToScalar::registerTrans() { - return registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, {create, getTransformation}); + return registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, CReduceDomainToScalar::create); } bool CReduceDomainToScalar::_dummyRegistered = CReduceDomainToScalar::registerTrans(); @@ -42,18 +41,4 @@ namespace xios { if (this->local.isEmpty()) local=false ; } - shared_ptr CReduceDomainToScalar::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CScalarAlgorithmReduceDomain::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; - } } diff --git a/xios_2311_src/src/node/reduce_domain_to_scalar.hpp b/xios_2311_src/src/node/reduce_domain_to_scalar.hpp index a735ffee..4d5efbfa 100644 --- a/xios_2311_src/src/node/reduce_domain_to_scalar.hpp +++ b/xios_2311_src/src/node/reduce_domain_to_scalar.hpp @@ -19,8 +19,7 @@ namespace xios { class CReduceDomainToScalar; class CDomain; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReduceDomainToScalarAttributes SuperClassAttribute; - typedef CReduceDomainToScalar MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REDUCE_DOMAIN_TO_SCALAR ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/reduce_scalar_to_scalar.cpp b/xios_2311_src/src/node/reduce_scalar_to_scalar.cpp index 7e0bc7f8..da1b0d3a 100644 --- a/xios_2311_src/src/node/reduce_scalar_to_scalar.cpp +++ b/xios_2311_src/src/node/reduce_scalar_to_scalar.cpp @@ -1,5 +1,4 @@ #include "reduce_scalar_to_scalar.hpp" -#include "scalar_algorithm_reduce_scalar.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CReduceScalarToScalar::registerTrans() { - return registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, {create, getTransformation}); + return registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, CReduceScalarToScalar::create); } bool CReduceScalarToScalar::_dummyRegistered = CReduceScalarToScalar::registerTrans(); @@ -41,18 +40,4 @@ namespace xios { { } - shared_ptr CReduceScalarToScalar::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CScalarAlgorithmReduceScalar::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/reduce_scalar_to_scalar.hpp b/xios_2311_src/src/node/reduce_scalar_to_scalar.hpp index ad081539..fd5ad89d 100644 --- a/xios_2311_src/src/node/reduce_scalar_to_scalar.hpp +++ b/xios_2311_src/src/node/reduce_scalar_to_scalar.hpp @@ -18,8 +18,7 @@ namespace xios { class CReduceScalarToScalarAttributes; class CReduceScalarToScalar; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -40,8 +39,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReduceScalarToScalarAttributes SuperClassAttribute; - typedef CReduceScalarToScalar MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -57,19 +54,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REDUCE_SCALAR_TO_SCALAR ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/reorder_domain.cpp b/xios_2311_src/src/node/reorder_domain.cpp index 4ff9ec7e..a767692c 100644 --- a/xios_2311_src/src/node/reorder_domain.cpp +++ b/xios_2311_src/src/node/reorder_domain.cpp @@ -1,5 +1,4 @@ #include "reorder_domain.hpp" -#include "domain_algorithm_reorder.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CReorderDomain::_dummyRegistered = CReorderDomain::registerTrans(); bool CReorderDomain::registerTrans() { - return registerTransformation(TRANS_REORDER_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_REORDER_DOMAIN, CReorderDomain::create); } //---------------------------------------------------------------- @@ -41,18 +40,4 @@ namespace xios { } - shared_ptr CReorderDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmReorder::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/reorder_domain.hpp b/xios_2311_src/src/node/reorder_domain.hpp index e4cb3a95..3813c63f 100644 --- a/xios_2311_src/src/node/reorder_domain.hpp +++ b/xios_2311_src/src/node/reorder_domain.hpp @@ -19,8 +19,7 @@ namespace xios { class CReorderDomainAttributes; class CReorderDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CReorderDomainAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CReorderDomainAttributes SuperClassAttribute; - typedef CReorderDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,20 +55,7 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_REORDER_DOMAIN ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; - private: + private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); static bool _dummyRegistered; diff --git a/xios_2311_src/src/node/scalar.cpp b/xios_2311_src/src/node/scalar.cpp index 1b903548..c5e2cdd1 100644 --- a/xios_2311_src/src/node/scalar.cpp +++ b/xios_2311_src/src/node/scalar.cpp @@ -6,126 +6,65 @@ #include "object_factory.hpp" #include "xios_spl.hpp" #include "type.hpp" -#include "context.hpp" -#include -#include +namespace xios { -namespace xios -{ + /// ////////////////////// Définitions ////////////////////// /// - /// ////////////////////// Définitions ////////////////////// /// + CScalar::CScalar(void) + : CObjectTemplate() + , CScalarAttributes() + , relFiles() + { /* Ne rien faire de plus */ } - CScalar::CScalar(void) - : CObjectTemplate() - , CScalarAttributes() - , relFiles() - { /* Ne rien faire de plus */ } + CScalar::CScalar(const StdString & id) + : CObjectTemplate(id) + , CScalarAttributes() + , relFiles() + { /* Ne rien faire de plus */ } - CScalar::CScalar(const StdString & id) - : CObjectTemplate(id) - , CScalarAttributes() - , relFiles() - { /* Ne rien faire de plus */ } + CScalar::~CScalar(void) + { /* Ne rien faire de plus */ } - CScalar::~CScalar(void) - { /* Ne rien faire de plus */ } - - void CScalar::releaseStaticAllocation(void) - { - transformationMapList_.clear() ; - CTransformation::unregisterAllTransformations() ; - CGridTransformationFactory::unregisterAllTransformations() ; - } - - std::map CScalar::transformationMapList_ = std::map(); - bool CScalar::dummyTransformationMapList_ = CScalar::initializeTransformationMap(CScalar::transformationMapList_); - bool CScalar::initializeTransformationMap(std::map& m) - { - m["reduce_axis"] = TRANS_REDUCE_AXIS_TO_SCALAR; - m["extract_axis"] = TRANS_EXTRACT_AXIS_TO_SCALAR; - m["reduce_domain"] = TRANS_REDUCE_DOMAIN_TO_SCALAR; - m["reduce_scalar"] = TRANS_REDUCE_SCALAR_TO_SCALAR; - return true; - } + std::map CScalar::transformationMapList_ = std::map(); + bool CScalar::dummyTransformationMapList_ = CScalar::initializeTransformationMap(CScalar::transformationMapList_); + bool CScalar::initializeTransformationMap(std::map& m) + { + m["reduce_axis"] = TRANS_REDUCE_AXIS_TO_SCALAR; + m["extract_axis"] = TRANS_EXTRACT_AXIS_TO_SCALAR; + m["reduce_domain"] = TRANS_REDUCE_DOMAIN_TO_SCALAR; + m["reduce_scalar"] = TRANS_REDUCE_SCALAR_TO_SCALAR; - StdString CScalar::GetName(void) { return (StdString("scalar")); } - StdString CScalar::GetDefName(void){ return (CScalar::GetName()); } - ENodeType CScalar::GetType(void) { return (eScalar); } + return true ; + } - CScalar* CScalar::createScalar() - { - CScalar* scalar = CScalarGroup::get("scalar_definition")->createChild(); - return scalar; - } + StdString CScalar::GetName(void) { return (StdString("scalar")); } + StdString CScalar::GetDefName(void){ return (CScalar::GetName()); } + ENodeType CScalar::GetType(void) { return (eScalar); } - CScalar* CScalar::get(const string& id, bool noError) - { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CScalar* CScalar::get(string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CScalar* CScalar::get(string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - if (!CField::has(fieldId)) - if (noError) return nullptr ; - else ERROR("CScalar* CScalar::get(const string& id, bool noError)", <<" id = "< field Id : < "< doesn't exist"); - CField* field=CField::get(fieldId) ; - return field->getAssociatedScalar(suffix, noError) ; - } - else - { - if (noError) if(!CObjectFactory::HasObject(id)) return nullptr ; - return CObjectFactory::GetObject(id).get(); - } + CScalar* CScalar::createScalar() + { + CScalar* scalar = CScalarGroup::get("scalar_definition")->createChild(); + return scalar; } - bool CScalar::has(const string& id) + bool CScalar::IsWritten(const StdString & filename) const { - if (CScalar::get(id,true)==nullptr) return false ; - else return true ; + return (this->relFiles.find(filename) != this->relFiles.end()); } - - CField* CScalar::getFieldFromId(const string& id) + + void CScalar::addRelFile(const StdString& filename) { - const regex r("::"); - smatch m; - if (regex_search(id, m, r)) - { - if (m.size()!=1) ERROR("CField* CScalar::getFieldFromId(const string& id)", <<" id = "< bad format id, separator :: append more than one time"); - string fieldId=m.prefix() ; - if (fieldId.empty()) ERROR("CField* CScalar::getFieldFromId(const string& id)", <<" id = "< bad format id, field name is empty"); - string suffix=m.suffix() ; - CField* field=CField::get(fieldId) ; - return field ; - } - else return nullptr; + this->relFiles.insert(filename); } - bool CScalar::IsWritten(const StdString & filename) const - { - return (this->relFiles.find(filename) != this->relFiles.end()); - } + void CScalar::checkAttributes(void) + { + } - void CScalar::addRelFile(const StdString& filename) + void CScalar::checkAttributesOnClient() { - this->relFiles.insert(filename); - } - void CScalar::checkAttributes(void) - { - if (checkAttributes_done_) return ; - checkAttributes_done_ = true ; - - if (n.isEmpty()) n=1 ; - if (mask.isEmpty()) mask=true ; - - initializeLocalElement() ; - addFullView() ; - addWorkflowView() ; - addModelView() ; } /*! @@ -191,7 +130,7 @@ namespace xios /*! * Go through the hierarchy to find the scalar from which the transformations must be inherited */ - void CScalar::solveInheritanceTransformation_old() + void CScalar::solveInheritanceTransformation() { if (hasTransformation() || !hasDirectScalarReference()) return; @@ -208,102 +147,7 @@ namespace xios for (size_t i = 0; i < refScalar.size(); ++i) refScalar[i]->setTransformations(scalar->getAllTransformations()); } - - void CScalar::solveInheritanceTransformation() - TRY - { - if (solveInheritanceTransformation_done_) return; - else solveInheritanceTransformation_done_=true ; - CScalar* scalar = this; - CScalar* Lastscalar ; - std::list refScalars; - bool out=false ; - vector excludedAttr; - excludedAttr.push_back("scalar_ref"); - - refScalars.push_front(scalar) ; - while (scalar->hasDirectScalarReference() && !out) - { - CScalar* lastScalar=scalar ; - scalar = scalar->getDirectScalarReference(); - scalar->solveRefInheritance() ; - if (!scalar->SuperClass::isEqual(lastScalar,excludedAttr)) out=true ; - refScalars.push_front(scalar) ; - } - - CTransformationPaths::TPath path ; - auto& pathList = std::get<2>(path) ; - std::get<0>(path) = EElement::SCALAR ; - std::get<1>(path) = refScalars.front()->getId() ; - for (auto& scalar : refScalars) - { - CScalar::TransMapTypes transformations = scalar->getAllTransformations(); - for(auto& transformation : transformations) pathList.push_back({transformation.second->getTransformationType(), - transformation.second->getId()}) ; - } - transformationPaths_.addPath(path) ; - - } - CATCH_DUMP_ATTR - - bool CScalar::activateFieldWorkflow(CGarbageCollector& gc) - TRY - { - if (!scalar_ref.isEmpty()) - { - CField* field=getFieldFromId(scalar_ref) ; - if (field!=nullptr) - { - bool ret = field->buildWorkflowGraph(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state - } - else - { - CScalar* scalar = get(scalar_ref) ; - bool ret = scalar->activateFieldWorkflow(gc) ; - if (!ret) return false ; // cannot build workflow graph at this state - scalar_ref=scalar->getId() ; // replace domain_ref by solved reference - } - } - activateFieldWorkflow_done_=true ; - return true ; - } - CATCH_DUMP_ATTR - - - /* obsolete, to remove after reimplementing coupling */ - void CScalar::sendScalarToCouplerOut(CContextClient* client, const string& fieldId, int posInGrid) - { - if (sendScalarToCouplerOut_done_.count(client)!=0) return ; - else sendScalarToCouplerOut_done_.insert(client) ; - - string scalarId = getCouplingAlias(fieldId, posInGrid) ; - - this->sendAllAttributesToServer(client, scalarId); - } - - string CScalar::getCouplingAlias(const string& fieldId, int posInGrid) - { - return "_scalar["+std::to_string(posInGrid)+"]_of_"+fieldId ; - } - - void CScalar::makeAliasForCoupling(const string& fieldId, int posInGrid) - { - const string scalarId = getCouplingAlias(fieldId, posInGrid) ; - this->createAlias(scalarId) ; - } - - void CScalar::setContextClient(CContextClient* contextClient) - TRY - { - if (clientsSet.find(contextClient)==clientsSet.end()) - { - clients.push_back(contextClient) ; - clientsSet.insert(contextClient); - } - } - CATCH_DUMP_ATTR /*! Parse children nodes of a scalar in xml file. \param node child node to process @@ -340,290 +184,6 @@ namespace xios } } - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - - void CScalar::initializeLocalElement(void) - { - // after checkAttribute index of size n - int rank = CContext::getCurrent()->getIntraCommRank() ; - - - CArray index(n) ; - if (n==1) index(0)=0 ; - localElement_ = make_shared(rank, 1, index) ; - } - - void CScalar::addFullView(void) - { - CArray index(n) ; - if (n==1) index(0)=0 ; - localElement_ -> addView(CElementView::FULL, index) ; - } - - void CScalar::addWorkflowView(void) - { - CArray index ; - if (mask && n==1) - { - index.resize(1) ; - index(0)=0 ; - } - else index.resize(0) ; - localElement_ -> addView(CElementView::WORKFLOW, index) ; - } - - void CScalar::addModelView(void) - { - CArray index(1) ; - for(int i=0; i<1 ; i++) index(0)=0 ; - localElement_->addView(CElementView::MODEL, index) ; - } - - void CScalar::computeModelToWorkflowConnector(void) - { - shared_ptr srcView=getLocalView(CElementView::MODEL) ; - shared_ptr dstView=getLocalView(CElementView::WORKFLOW) ; - modelToWorkflowConnector_ = make_shared(srcView, dstView); - modelToWorkflowConnector_->computeConnector() ; - } - - - void CScalar::computeRemoteElement(CContextClient* client, EDistributionType type) - { - CContext* context = CContext::getCurrent(); - map> globalIndex ; - size_t nglo=1 ; - - if (type==EDistributionType::ROOT) // Bands distribution to send to file server - { - for (auto& rankServer : client->getRanksServerLeader()) - { - auto& globalInd = globalIndex[rankServer] ; - if (rankServer==0) - { - globalInd.resize(1) ; - globalInd(0)=0 ; - } - } - } - else if (type==EDistributionType::NONE) // domain is not distributed ie all servers get the same local domain - { - int nbServer = client->serverSize; - CArray indGlo(nglo) ; - for(size_t i=0;igetRanksServerLeader()) globalIndex[rankServer].reference(indGlo.copy()) ; - } - remoteElement_[client] = make_shared(nglo, globalIndex) ; - remoteElement_[client]->addFullView() ; - } - - void CScalar::distributeToServer(CContextClient* client, std::map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr &scattererConnector, const string& scalarId) - { - string serverScalarId = scalarId.empty() ? this->getId() : scalarId ; - CContext* context = CContext::getCurrent(); - - this->sendAllAttributesToServer(client, serverScalarId) ; - - auto scatteredElement = make_shared(1,globalIndexOut) ; - scatteredElement->addFullView() ; - scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - - // phase 0 - // send remote element to construct the full view on server, ie without hole - CEventClient event0(getType(), EVENT_ID_SCALAR_DISTRIBUTION); - CMessage message0 ; - message0<sendToServer(client,event0,message0) ; - - // phase 1 - // send the full view of element to construct the connector which connect distributed data coming from client to the full local view - CEventClient event1(getType(), EVENT_ID_SCALAR_DISTRIBUTION); - CMessage message1 ; - message1<getView(CElementView::FULL)->getGlobalSize() ; - scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; - - sendDistributedAttributes(client, scattererConnector, scalarId) ; - - // phase 2 send the mask : data index + mask2D - { - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - // prepare grid scatterer connector to send data from client to server - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - // create new workflow view for scattered element - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); - CMessage message2 ; - message2<sendToServer(client, event2, message2) ; - clientToServerConnector_[client] = make_shared(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - clientToServerConnector_[client]->computeConnector() ; - } - - //////////// - // phase 3 : compute connector to receive from server - //////////// - { - auto scatteredElement = make_shared(1, globalIndexIn) ; - scatteredElement->addFullView() ; - auto scattererConnector = make_shared(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - scattererConnector->computeConnector() ; - - CArray maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); - CArray maskOut ; - auto workflowToFull = make_shared(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; - workflowToFull->computeConnector() ; - maskIn=true ; - workflowToFull->transfer(maskIn,maskOut,false) ; - - map> workflowGlobalIndex ; - map> maskOut2 ; - scattererConnector->transfer(maskOut, maskOut2, false) ; - scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; - scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; - auto clientToServerElement = make_shared(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; - clientToServerElement->addFullView() ; - CEventClient event3(getType(), EVENT_ID_SCALAR_DISTRIBUTION); - CMessage message3 ; - message3<sendToServer(client, event3, message3) ; - - clientFromServerConnector_[client] = make_shared(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); - clientFromServerConnector_[client]->computeConnector() ; - } - } - - void CScalar::recvScalarDistribution(CEventServer& event) - TRY - { - string scalarId; - int phasis ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> scalarId >> phasis ; - get(scalarId)->receivedScalarDistribution(event, phasis); - } - CATCH - - void CScalar::receivedScalarDistribution(CEventServer& event, int phasis) - TRY - { - CContext* context = CContext::getCurrent(); - if (phasis==0) // receive the remote element to construct the full view - { - localElement_ = make_shared(context->getIntraCommRank(),event) ; - localElement_->addFullView() ; - // construct the local dimension and indexes - auto& globalIndex=localElement_->getGlobalIndex() ; - n=globalIndex.numElements() ; - // no distribution for scalar => nk ==1 or maybe 0 ? - } - else if (phasis==1) // receive the sent view from client to construct the full distributed full view on server - { - CContext* context = CContext::getCurrent(); - shared_ptr elementFrom = make_shared(event) ; - elementFrom->addFullView() ; - gathererConnector_ = make_shared(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; - gathererConnector_->computeConnector() ; - } - else if (phasis==2) - { -// delete gathererConnector_ ; - elementFrom_ = make_shared(event) ; - elementFrom_->addFullView() ; -// gathererConnector_ = make_shared(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; -// gathererConnector_ -> computeConnector() ; - } - else if (phasis==3) - { - elementTo_ = make_shared(event) ; - elementTo_->addFullView() ; - } - } - CATCH - - void CScalar::setServerMask(CArray& serverMask, CContextClient* client) - TRY - { - CContext* context = CContext::getCurrent(); - localElement_->addView(CElementView::WORKFLOW, serverMask) ; - if (serverMask.numElements()==1) mask = serverMask(0) ; - - serverFromClientConnector_ = make_shared(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)) ; - serverFromClientConnector_->computeConnector() ; - - serverToClientConnector_ = make_shared(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), - context->getIntraComm(), client->getRemoteSize()) ; - serverToClientConnector_->computeConnector() ; - } - CATCH_DUMP_ATTR - - void CScalar::sendDistributedAttributes(CContextClient* client, shared_ptr scattererConnector, const string& scalarId) - { - string serverScalarId = scalarId.empty() ? this->getId() : scalarId ; - CContext* context = CContext::getCurrent(); - - // nothing for now - } - - void CScalar::recvDistributedAttributes(CEventServer& event) - TRY - { - string scalarId; - string type ; - for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> scalarId >> type ; - get(scalarId)->recvDistributedAttributes(event, type); - } - CATCH - - void CScalar::recvDistributedAttributes(CEventServer& event, const string& type) - TRY - { - // nothing for now - } - CATCH - - bool CScalar::dispatchEvent(CEventServer& event) - TRY - { - if (SuperClass::dispatchEvent(event)) return true; - else - { - switch(event.type) - { - case EVENT_ID_SCALAR_DISTRIBUTION: - recvScalarDistribution(event); - return true; - break; - case EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE: - recvDistributedAttributes(event); - return true; - break; - default : - ERROR("bool CScalar::dispatchEvent(CEventServer& event)", - << "Unknown Event"); - return false; - } - } - } - CATCH - - // Definition of some macros DEFINE_REF_FUNC(Scalar,scalar) diff --git a/xios_2311_src/src/node/scalar.hpp b/xios_2311_src/src/node/scalar.hpp index d771d265..c9be8805 100644 --- a/xios_2311_src/src/node/scalar.hpp +++ b/xios_2311_src/src/node/scalar.hpp @@ -12,241 +12,91 @@ #include "attribute_array.hpp" #include "transformation.hpp" #include "transformation_enum.hpp" -#include "transformation_path.hpp" -#include "element.hpp" -#include "local_connector.hpp" -#include "scatterer_connector.hpp" -#include "gatherer_connector.hpp" -#include "distribution_type.hpp" -#include "generic_algorithm_transformation.hpp" -#include "grid_transformation_factory_impl.hpp" - namespace xios { - /// ////////////////////// Déclarations ////////////////////// /// + /// ////////////////////// Déclarations ////////////////////// /// - class CScalarGroup; - class CScalarAttributes; - class CScalar; - class CField; - ///-------------------------------------------------------------- + class CScalarGroup; + class CScalarAttributes; + class CScalar; + ///-------------------------------------------------------------- - // Declare/Define CVarAttribute - BEGIN_DECLARE_ATTRIBUTE_MAP(CScalar) + // Declare/Define CVarAttribute + BEGIN_DECLARE_ATTRIBUTE_MAP(CScalar) #include "scalar_attribute.conf" - END_DECLARE_ATTRIBUTE_MAP(CScalar) + END_DECLARE_ATTRIBUTE_MAP(CScalar) - ///-------------------------------------------------------------- + ///-------------------------------------------------------------- - class CScalar: public CObjectTemplate - , public CScalarAttributes - { - friend class CScalarGroup; + class CScalar + : public CObjectTemplate + , public CScalarAttributes + { + /// typedef /// + typedef CObjectTemplate SuperClass; + typedef CScalarAttributes SuperClassAttribute; - /// typedef /// - typedef CObjectTemplate SuperClass; - typedef CScalarAttributes SuperClassAttribute; + friend class CScalarGroup; - public: - enum EEventId - { - EVENT_ID_SCALAR_DISTRIBUTION, - EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE, - } ; - static bool dispatchEvent(CEventServer& event); - - - public : - - typedef CScalarAttributes RelAttributes; - typedef CScalarGroup RelGroup; - - /// Constructeurs /// - CScalar(void); - explicit CScalar(const StdString & id); - CScalar(const CScalar & var); // Not implemented yet. - CScalar(const CScalar * const var); // Not implemented yet. - static void releaseStaticAllocation(void) ; // release static allocation on heap - - /// Destructeur /// - virtual ~CScalar(void); - - public : - /// Accesseurs statiques /// - static StdString GetName(void); - static StdString GetDefName(void); - static ENodeType GetType(void); - - public: - static CScalar* createScalar(); - static CScalar* get(const string& id, bool noError=false) ; // sendScalarToCouplerOut_done_ ; - - public: - void makeAliasForCoupling(const string& fieldId, int posInGrid) ; - string getCouplingAlias(const string& fieldId, int posInGrid) ; - - //////////////////////////////// - //// TRANSFORMATIONS //// - //////////////////////////////// - public: - typedef CTransformation::TransformationMapTypes TransMapTypes; - private: - static bool initializeTransformationMap(std::map& m); - static std::map transformationMapList_; - static bool dummyTransformationMapList_; TransMapTypes transformationMap_; - void setTransformations(const TransMapTypes&); - - public: - bool hasTransformation(); - TransMapTypes getAllTransformations(); - void duplicateTransformation(CScalar*); - CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); - - void solveInheritanceTransformation_old(); - void solveInheritanceTransformation(); - private: - bool solveInheritanceTransformation_done_= false ; - public: - bool activateFieldWorkflow(CGarbageCollector& gc) ; - private: - bool activateFieldWorkflow_done_=false ; - private: - shared_ptr transformationAlgorithm_ = nullptr ; - public: - void setTransformationAlgorithm(shared_ptr transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;} - shared_ptr getTransformationAlgorithm(void) { return transformationAlgorithm_ ;} - private: - CTransformationPaths transformationPaths_ ; - public: - CTransformationPaths getTransformationPaths(void) {return transformationPaths_;} - void setTransformationPaths(const CTransformationPaths& transformationPaths) { transformationPaths_=transformationPaths ;} - //////////////////////////////// - //////////////////////////////// - - bool isEqual(CScalar* scalar); - private: - /** Clients that have to send a scalar. There can be multiple clients in case of secondary server, otherwise only one client. */ - std::list clients; - std::set clientsSet; - public: - void setContextClient(CContextClient* contextClient) ; - - private: - std::set relFiles; - - private: - /** define if the scalar is completed or not ie all attributes have been received before in case - of grid reading from file or coupling */ - bool isCompleted_=true ; - public: - /*! - \brief Check if a scalar is completed - Before make any scalar processing, we must be sure that all scalar informations have - been sent, for exemple when reading a grid in a file or when grid elements are sent by an - other context (coupling). So all direct reference of the scalar (scalar_ref) must be also completed - \return true if scalar and scalar reference are completed - */ - bool isCompleted(void) - { - if (hasDirectScalarReference()) if (!getDirectScalarReference()->isCompleted()) return false; - else return isCompleted_ ; - - MISSING_RETURN( "bool CAxis::isCompleted() " ); - return true; - } - void setCompleted(void) { isCompleted_=true ; } - void unsetCompleted(void) { isCompleted_=false ; } - - - - ////////////////////////////////////////////////////////////////////////////////////// - // this part is related to distribution, element definition, views and connectors // - ////////////////////////////////////////////////////////////////////////////////////// - private: - shared_ptr localElement_ = nullptr ; - void initializeLocalElement(void) ; - - public: - shared_ptr getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } - shared_ptr getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} - - private: - void addFullView(void) ; - void addWorkflowView(void) ; - void addModelView(void) ; - - private: - shared_ptr modelToWorkflowConnector_ ; - void computeModelToWorkflowConnector(void) ; - public: - shared_ptr getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} - - public: - void computeRemoteElement(CContextClient* client, EDistributionType) ; - void distributeToServer(CContextClient* client, std::map>& globalIndexOut, std::map>& globalIndexIn, - shared_ptr &scattererConnector, const string& scalarId="") ; - - static void recvScalarDistribution(CEventServer& event) ; - void receivedScalarDistribution(CEventServer& event, int phasis) ; - void setServerMask(CArray& serverMask, CContextClient* client) ; - void sendDistributedAttributes(CContextClient* client, shared_ptr scattererConnector, const string& scalarId) ; - static void recvDistributedAttributes(CEventServer& event) ; - void recvDistributedAttributes(CEventServer& event, const string& type) ; - - private: - map> remoteElement_ ; - public: - shared_ptr getRemoteElement(CContextClient* client) {return remoteElement_[client] ;} - private: - map> clientToServerConnector_ ; - public: - shared_ptr getClientToServerConnector(CContextClient* client) { return clientToServerConnector_[client] ;} - - private: - shared_ptr gathererConnector_ ; - public: - shared_ptr getGathererConnector(void) { return gathererConnector_ ;} - private: - shared_ptr serverFromClientConnector_ ; - shared_ptr elementFrom_ ; - public: - shared_ptr getServerFromClientConnector(void) { return serverFromClientConnector_ ;} - - private: - shared_ptr serverToClientConnector_ = nullptr ; - shared_ptr elementTo_ ; - public: - shared_ptr getServerToClientConnector(void) { return serverToClientConnector_ ;} - - private: - map> clientFromServerConnector_ ; - public: - shared_ptr getClientFromServerConnector(CContextClient* client) { return clientFromServerConnector_[client] ;} - - private: - DECLARE_REF_FUNC(Scalar,scalar) - - }; // class CVar - ///-------------------------------------------------------------- - - // Declare/Define CScalarGroup and CScalarDefinition - DECLARE_GROUP(CScalar); + public : + + typedef CScalarAttributes RelAttributes; + typedef CScalarGroup RelGroup; + typedef CTransformation::TransformationMapTypes TransMapTypes; + + /// Constructeurs /// + CScalar(void); + explicit CScalar(const StdString & id); + CScalar(const CScalar & var); // Not implemented yet. + CScalar(const CScalar * const var); // Not implemented yet. + + /// Destructeur /// + virtual ~CScalar(void); + + public : + /// Accesseurs statiques /// + static StdString GetName(void); + static StdString GetDefName(void); + static ENodeType GetType(void); + + public: + static CScalar* createScalar(); + + public: + void checkAttributes(void); + void addRelFile(const StdString& filename); + bool IsWritten(const StdString& filename) const; + void checkAttributesOnClient(); + virtual void parse(xml::CXMLNode & node); + + public: + bool hasTransformation(); + void solveInheritanceTransformation(); + TransMapTypes getAllTransformations(); + void duplicateTransformation(CScalar*); + CTransformation* addTransformation(ETranformationType transType, const StdString& id=""); + bool isEqual(CScalar* scalar); + + private: + std::set relFiles; + TransMapTypes transformationMap_; + + void setTransformations(const TransMapTypes&); + + private: + static bool initializeTransformationMap(std::map& m); + static std::map transformationMapList_; + static bool dummyTransformationMapList_; + + + DECLARE_REF_FUNC(Scalar,scalar) + + }; // class CVar + ///-------------------------------------------------------------- + + // Declare/Define CScalarGroup and CScalarDefinition + DECLARE_GROUP(CScalar); } // namespace xios #endif // __XIOS_CScalar__ diff --git a/xios_2311_src/src/node/temporal_splitting.cpp b/xios_2311_src/src/node/temporal_splitting.cpp index c1ae95d8..201ba131 100644 --- a/xios_2311_src/src/node/temporal_splitting.cpp +++ b/xios_2311_src/src/node/temporal_splitting.cpp @@ -1,5 +1,4 @@ #include "temporal_splitting.hpp" -#include "axis_algorithm_temporal_splitting.hpp" #include "type.hpp" #include "axis.hpp" #include "domain.hpp" @@ -29,7 +28,7 @@ namespace xios { bool CTemporalSplitting::registerTrans() { - return registerTransformation(TRANS_TEMPORAL_SPLITTING, {create, getTransformation}); + return registerTransformation(TRANS_TEMPORAL_SPLITTING, CTemporalSplitting::create); } bool CTemporalSplitting::_dummyRegistered = CTemporalSplitting::registerTrans(); @@ -45,18 +44,4 @@ namespace xios { } - shared_ptr CTemporalSplitting::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmTemporalSplitting::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/temporal_splitting.hpp b/xios_2311_src/src/node/temporal_splitting.hpp index e05ca039..d2b3d1dc 100644 --- a/xios_2311_src/src/node/temporal_splitting.hpp +++ b/xios_2311_src/src/node/temporal_splitting.hpp @@ -19,8 +19,6 @@ namespace xios { class CTemporalSplitting; class CAxis; class CScalar; - class CGenericAlgorithmTransformation ; - class CGrid; ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +39,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CTemporalSplittingAttributes SuperClassAttribute; - typedef CTemporalSplitting MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +54,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_TEMPORAL_SPLITTING ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/variable.cpp b/xios_2311_src/src/node/variable.cpp index f0c6b7c9..c8bbccce 100644 --- a/xios_2311_src/src/node/variable.cpp +++ b/xios_2311_src/src/node/variable.cpp @@ -93,8 +93,38 @@ namespace xios { *\brief Sending value of a variable with its id from client to server * */ + void CVariable::sendValue() + { + CContext* context=CContext::getCurrent() ; + + if (context->hasClient) + { + // Use correct context client to send message + // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { +// CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer + CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] + : context->client; + + CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; + if (contextClientTmp->isServerLeader()) + { + CMessage msg ; + msg<getId() ; + msg<& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event) ; + } + else contextClientTmp->sendEvent(event) ; + } + } + } - void CVariable::sendValue(CContextClient* client) + void CVariable::sendValue(CContextClient* client, bool clientPrim /*= false*/) { CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; if (client->isServerLeader()) diff --git a/xios_2311_src/src/node/variable.hpp b/xios_2311_src/src/node/variable.hpp index af6a6f63..576915e8 100644 --- a/xios_2311_src/src/node/variable.hpp +++ b/xios_2311_src/src/node/variable.hpp @@ -78,7 +78,8 @@ namespace xios static bool dispatchEvent(CEventServer& event) ; //! Sending a request to set up variable data - void sendValue(CContextClient* client); + void sendValue(); + void sendValue(CContextClient* client, bool clientPrim = false); static void recvValue(CEventServer& event) ; void recvValue(CBufferIn& buffer) ; diff --git a/xios_2311_src/src/node/zoom_axis.cpp b/xios_2311_src/src/node/zoom_axis.cpp index c1342863..a23120e5 100644 --- a/xios_2311_src/src/node/zoom_axis.cpp +++ b/xios_2311_src/src/node/zoom_axis.cpp @@ -1,5 +1,4 @@ #include "zoom_axis.hpp" -#include "axis_algorithm_zoom.hpp" #include "type.hpp" namespace xios { @@ -26,7 +25,7 @@ namespace xios { bool CZoomAxis::registerTrans() { - return registerTransformation(TRANS_ZOOM_AXIS, {create, getTransformation}); + return registerTransformation(TRANS_ZOOM_AXIS, CZoomAxis::create); } bool CZoomAxis::_dummyRegistered = CZoomAxis::registerTrans(); @@ -77,18 +76,4 @@ namespace xios { } - shared_ptr CZoomAxis::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CAxisAlgorithmZoom::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/zoom_axis.hpp b/xios_2311_src/src/node/zoom_axis.hpp index 7b0b6681..269afbd1 100644 --- a/xios_2311_src/src/node/zoom_axis.hpp +++ b/xios_2311_src/src/node/zoom_axis.hpp @@ -19,8 +19,7 @@ namespace xios { class CZoomAxisAttributes; class CZoomAxis; class CAxis; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CZoomAxisAttributes SuperClassAttribute; - typedef CZoomAxis MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,19 +55,6 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_ZOOM_AXIS ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); diff --git a/xios_2311_src/src/node/zoom_domain.cpp b/xios_2311_src/src/node/zoom_domain.cpp index 50db267c..fe9c0222 100644 --- a/xios_2311_src/src/node/zoom_domain.cpp +++ b/xios_2311_src/src/node/zoom_domain.cpp @@ -1,5 +1,4 @@ #include "zoom_domain.hpp" -#include "domain_algorithm_zoom.hpp" #include "type.hpp" namespace xios { @@ -27,7 +26,7 @@ namespace xios { bool CZoomDomain::_dummyRegistered = CZoomDomain::registerTrans(); bool CZoomDomain::registerTrans() { - return registerTransformation(TRANS_ZOOM_DOMAIN, {create, getTransformation}); + return registerTransformation(TRANS_ZOOM_DOMAIN, CZoomDomain::create); } //---------------------------------------------------------------- @@ -72,18 +71,4 @@ namespace xios { } } - shared_ptr CZoomDomain::createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - { - return CDomainAlgorithmZoom::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, - elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, - elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition); - } } diff --git a/xios_2311_src/src/node/zoom_domain.hpp b/xios_2311_src/src/node/zoom_domain.hpp index 3bb1d6e5..d6d0e4e2 100644 --- a/xios_2311_src/src/node/zoom_domain.hpp +++ b/xios_2311_src/src/node/zoom_domain.hpp @@ -19,8 +19,7 @@ namespace xios { class CZoomDomainAttributes; class CZoomDomain; class CDomain; - class CGenericAlgorithmTransformation ; - class CGrid; + ///-------------------------------------------------------------- // Declare/Define CFileAttribute @@ -41,8 +40,6 @@ namespace xios { public : typedef CObjectTemplate SuperClass; typedef CZoomDomainAttributes SuperClassAttribute; - typedef CZoomDomain MyClass ; - typedef CTransformation SuperTransform ; public : /// Constructeurs /// @@ -58,23 +55,9 @@ namespace xios { static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); - const string& getId(void) { return this->SuperClass::getId();} - ETranformationType getTransformationType(void) { return TRANS_ZOOM_DOMAIN ;} - virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;} - static CTransformation* getTransformation(const StdString& id) { return SuperClass::get(id);} - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) ; private: static bool registerTrans(); static CTransformation* create(const StdString& id, xml::CXMLNode* node); - static bool _dummyRegistered; }; // class CZoomDomain diff --git a/xios_2311_src/src/object.cpp b/xios_2311_src/src/object.cpp index 664e1104..d350a4e0 100644 --- a/xios_2311_src/src/object.cpp +++ b/xios_2311_src/src/object.cpp @@ -28,6 +28,11 @@ namespace xios return this->id; } + const StdString& CObject::getIdServer() const + { + return this->id; + } + StdString CObject::dumpClassAttributes(void) { return ""; diff --git a/xios_2311_src/src/object.hpp b/xios_2311_src/src/object.hpp index ac359e3f..2a551f24 100644 --- a/xios_2311_src/src/object.hpp +++ b/xios_2311_src/src/object.hpp @@ -16,6 +16,7 @@ namespace xios /// Accesseurs /// const StdString& getId(void) const; + virtual const StdString& getIdServer() const; virtual StdString dumpClassAttributes(void); diff --git a/xios_2311_src/src/object_factory.hpp b/xios_2311_src/src/object_factory.hpp index 90ce4304..feee4700 100644 --- a/xios_2311_src/src/object_factory.hpp +++ b/xios_2311_src/src/object_factory.hpp @@ -20,7 +20,6 @@ namespace xios /// Accesseurs /// static StdString & GetCurrentContextId(void); - static void clearCurrentContextId(void) {CurrContext.clear(); CurrContext.shrink_to_fit(); } template static std::shared_ptr GetObject(const StdString & id); @@ -50,16 +49,11 @@ namespace xios /// Instanciateur /// template static std::shared_ptr CreateObject(const StdString & id = StdString("")); - - template - static std::shared_ptr CreateAlias(const StdString& id, const StdString& alias) ; - - template static const StdString GetUIdBase(void); + + template static const StdString& GetUIdBase(void); template static StdString GenUId(void); template static bool IsGenUId(const StdString& id); - template static void deleteContext(const StdString & context) ; - template static void deleteAllContexts(void) ; - template static void dumpObjects(void) ; + private : /// Propriétés statiques /// diff --git a/xios_2311_src/src/object_factory_decl1.cpp b/xios_2311_src/src/object_factory_decl1.cpp index 0631edec..7a6dc680 100644 --- a/xios_2311_src/src/object_factory_decl1.cpp +++ b/xios_2311_src/src/object_factory_decl1.cpp @@ -4,8 +4,6 @@ namespace xios { macro(CField) macro(CFile) - macro(CCouplerIn) - macro(CCouplerOut) macro(CGrid) macro(CAxis) macro(CDomain) diff --git a/xios_2311_src/src/object_factory_decl3.cpp b/xios_2311_src/src/object_factory_decl3.cpp index 1b791745..7708748d 100644 --- a/xios_2311_src/src/object_factory_decl3.cpp +++ b/xios_2311_src/src/object_factory_decl3.cpp @@ -5,8 +5,6 @@ namespace xios { macro(CFieldGroup) macro(CFileGroup) - macro(CCouplerInGroup) - macro(CCouplerOutGroup) macro(CGridGroup) macro(CAxisGroup) macro(CDomainGroup) diff --git a/xios_2311_src/src/object_factory_decl_macro.hpp b/xios_2311_src/src/object_factory_decl_macro.hpp index 50f01c7e..6db3846d 100644 --- a/xios_2311_src/src/object_factory_decl_macro.hpp +++ b/xios_2311_src/src/object_factory_decl_macro.hpp @@ -12,14 +12,8 @@ template bool CObjectFactory::HasObject(const StdString& id); \ template bool CObjectFactory::HasObject(const StdString& context,const StdString& id); \ template std::shared_ptr CObjectFactory::CreateObject(const StdString& id ); \ - template std::shared_ptr CObjectFactory::CreateAlias(const StdString& id, const StdString& alias ); \ - template const StdString CObjectFactory::GetUIdBase(void); \ + template const StdString& CObjectFactory::GetUIdBase(void); \ template StdString CObjectFactory::GenUId(void); \ - template bool CObjectFactory::IsGenUId(const StdString& id);\ - template void CObjectFactory::deleteContext(const StdString & context) ;\ - template void CObjectFactory::deleteAllContexts() ;\ - template void CObjectFactory::dumpObjects(void) ; - - + template bool CObjectFactory::IsGenUId(const StdString& id); diff --git a/xios_2311_src/src/object_factory_impl.hpp b/xios_2311_src/src/object_factory_impl.hpp index e2527be4..c5bb7148 100644 --- a/xios_2311_src/src/object_factory_impl.hpp +++ b/xios_2311_src/src/object_factory_impl.hpp @@ -111,33 +111,6 @@ namespace xios } } - template - std::shared_ptr CObjectFactory::CreateAlias(const StdString& id, const StdString& alias) - { - if (CurrContext.empty()) - ERROR("CObjectFactory::CreateAlias(const StdString& id, const StdString& alias)", - << "[ id = " << id << " alias = "<(alias)) - { - return CObjectFactory::GetObject(alias); - } - else - { - if (! CObjectFactory::HasObject(id)) - { - ERROR("CObjectFactory::CreateAlias(const StdString& id, const StdString& alias)", - << "[ id = " << id << " alias = "< value = CObjectFactory::GetObject(id); - U::AllMapObj[CObjectFactory::CurrContext].insert(std::make_pair(alias, value)); - return value; - } - } - } - template const std::vector > & CObjectFactory::GetObjectVector(const StdString & context) @@ -146,11 +119,9 @@ namespace xios } template - const StdString CObjectFactory::GetUIdBase(void) + const StdString& CObjectFactory::GetUIdBase(void) { - StdString base ; -// base = "__"+CObjectFactory::CurrContext + "::" + U::GetName() + "_undef_id_"; - base = CObjectFactory::CurrContext + "__" + U::GetName() + "_undef_id_"; + static const StdString base = "__" + U::GetName() + "_undef_id_"; return base; } @@ -165,42 +136,10 @@ namespace xios template bool CObjectFactory::IsGenUId(const StdString& id) { - const StdString base = GetUIdBase(); + const StdString& base = GetUIdBase(); return (id.size() > base.size() && id.compare(0, base.size(), base) == 0); } - template - void CObjectFactory::deleteContext(const StdString & context) - { - for (auto& v : U::AllVectObj[context]) v.reset() ; - U::AllVectObj[context].clear() ; - U::AllVectObj.erase(context) ; - for (auto& m : U::AllMapObj[context]) m.second.reset() ; - U::AllMapObj[context].clear() ; - U::AllMapObj.erase(context) ; - - U::GenId.erase(context) ; - } - - template - void CObjectFactory::deleteAllContexts(void) - { - list contextList ; - for(auto& context : U::AllMapObj) contextList.push_back(context.first) ; - for(auto& context : contextList) deleteContext(context) ; - } - - - template - void CObjectFactory::dumpObjects(void) - { - for (auto& context : U::AllMapObj) - for(auto& m : context.second) - { - info(100)<<"Dump All Object"< getMinimumBufferSizeForAttributes(CContextClient* client); - void sendAttributToServer(const string& id, CContextClient* client, const string& objectId=""); - void sendAttributToServer(CAttribute& attr, CContextClient* client, const string& objectId="") ; - void sendAllAttributesToServer(CContextClient* client, const string& objectId=""); - void sendAddItem(const string& id, int itemType, CContextClient* client, const string& objectId=""); + void sendAttributToServer(const string& id); + void sendAttributToServer(const string& id, CContextClient* client); + void sendAttributToServer(CAttribute& attr) ; + void sendAttributToServer(CAttribute& attr, CContextClient* client) ; + void sendAllAttributesToServer(); + void sendAllAttributesToServer(CContextClient* client); + void sendAddItem(const string& id, int itemType); + void sendAddItem(const string& id, int itemType, CContextClient* client); static void recvAttributFromClient(CEventServer& event) ; static bool dispatchEvent(CEventServer& event) ; @@ -71,8 +75,6 @@ namespace xios /// Destructeur /// virtual ~CObjectTemplate(void); - - static void cleanStaticDataStructure(void); static bool has(const string& id) ; static bool has(const string& contextId, const string& id) ; @@ -84,53 +86,30 @@ namespace xios static std::shared_ptr getShared(const T* ptr) ; static T* create(const string& id=string("")) ; - static T* createAlias(const string& id, const string& alias) ; - void createAlias(const string& alias) ; - static const vector getAll() ; static const vector getAll(const string& contextId) ; void generateCInterface(ostream& oss) ; void generateFortran2003Interface(ostream& oss) ; void generateFortranInterface(ostream& oss) ; - - // manage inherited id which is herited by reference - void setInheritedId(T* obj) ; - bool hasInheritedId(void) { return hasInheritedId_ ;} - string getInheritedId(void) { return inheritedId_ ;} - - private: - std::string inheritedId_ ; - bool hasInheritedId_ = false; - - // manage the template id - public: - void setTemplateId(T* obj) ; // & object, bool withAttrList = true, bool withId = true); + CObjectTemplate(const CObjectTemplate & object, + bool withAttrList = true, bool withId = true); CObjectTemplate(const CObjectTemplate * const object); // Not implemented. private : /// Propriétés statiques /// - static xios_map > > AllMapObj; - static xios_map > > AllVectObj; + static xios_map > > AllMapObj; + static xios_map > > AllVectObj; static xios_map< StdString, long int > GenId ; diff --git a/xios_2311_src/src/object_template_decl.cpp b/xios_2311_src/src/object_template_decl.cpp index e5807ff2..69707eba 100644 --- a/xios_2311_src/src/object_template_decl.cpp +++ b/xios_2311_src/src/object_template_decl.cpp @@ -8,8 +8,6 @@ namespace xios template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; - template class CObjectTemplate; - template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; @@ -39,8 +37,6 @@ namespace xios template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; - template class CObjectTemplate; - template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; template class CObjectTemplate; diff --git a/xios_2311_src/src/object_template_impl.hpp b/xios_2311_src/src/object_template_impl.hpp index 9e7fd94d..6bf2e595 100644 --- a/xios_2311_src/src/object_template_impl.hpp +++ b/xios_2311_src/src/object_template_impl.hpp @@ -67,29 +67,6 @@ namespace xios { return (CObjectTemplate::AllVectObj[contextId]); } - - template - void CObjectTemplate::cleanStaticDataStructure(void) - { - xios_map > >* allMap = &(CObjectTemplate::AllMapObj); - for(auto it = allMap->begin(); it != allMap->end(); ++it) - { - for(auto it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - std::shared_ptr todel = it2->second; - todel.reset(); - } - it->second.clear(); - - std::vector >* allVect = &(CObjectTemplate::AllVectObj[it->first]); - for(auto it = allVect->begin(); it != allVect->end(); ++it) - { - it->reset(); - } - allVect->clear(); - } - allMap->clear(); - } //--------------------------------------------------------------- @@ -179,42 +156,6 @@ namespace xios return (attrMapThis.isEqual(attrMapObj, excludedAttrs)); } - // --------------------------------------------------------------- - template - void CObjectTemplate::setInheritedId(T* obj) - { - if (!hasInheritedId_) - { - if (!(hasId() && !hasAutoGeneratedId())) - if (obj->hasId() && !obj->hasAutoGeneratedId()) - { - hasInheritedId_=true ; - inheritedId_=obj->getId() ; - } - } - } - - template - void CObjectTemplate::setTemplateId(T* obj) - { - if (hasId() && !hasAutoGeneratedId()) - { - templateId_ = getId() ; - hasTemplateId_ = true ; - } - else if (obj->hasId() && !obj->hasAutoGeneratedId()) - { - templateId_ = obj->getId() ; - hasTemplateId_ = true ; - } - else if (obj->hasTemplateId()) - { - templateId_= obj->getTemplateId() ; - hasTemplateId_=true ; - } - } - - //--------------------------------------------------------------- template @@ -263,7 +204,7 @@ namespace xios if (minimumSize) { // Account for extra header info - minimumSize += CEventClient::headerSize + getId().size() + sizeof(size_t); + minimumSize += CEventClient::headerSize + getIdServer().size() + sizeof(size_t); const std::list& ranks = client->getRanksServerLeader(); for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) @@ -273,19 +214,39 @@ namespace xios return minimumSizes; } + + template + void CObjectTemplate::sendAllAttributesToServer() + { + CAttributeMap& attrMap = *this; + CAttributeMap::const_iterator it = attrMap.begin(), itE = attrMap.end(); + for (; it != itE; ++it) + { + if (it->second->doSend() && !(it->second)->isEmpty()) sendAttributToServer(*(it->second)); + } + } + template - void CObjectTemplate::sendAllAttributesToServer(CContextClient* client, const string& objectId) + void CObjectTemplate::sendAllAttributesToServer(CContextClient* client) { CAttributeMap& attrMap = *this; CAttributeMap::const_iterator it = attrMap.begin(), itE = attrMap.end(); for (; it != itE; ++it) { - if (it->second->doSend() && !(it->second)->isEmpty()) sendAttributToServer(*(it->second), client, objectId); + if (it->second->doSend() && !(it->second)->isEmpty()) sendAttributToServer(*(it->second), client); } } template - void CObjectTemplate::sendAttributToServer(const string& id, CContextClient* client, const string& objectId ) + void CObjectTemplate::sendAttributToServer(const string& id) + { + CAttributeMap & attrMap = *this; + CAttribute* attr=attrMap[id]; + sendAttributToServer(*attr); + } + + template + void CObjectTemplate::sendAttributToServer(const string& id, CContextClient* client) { CAttributeMap & attrMap = *this; CAttribute* attr=attrMap[id]; @@ -293,32 +254,42 @@ namespace xios } template - void CObjectTemplate::sendAttributToServer(CAttribute& attr, CContextClient* client, const string& objectId) + void CObjectTemplate::sendAttributToServer(CAttribute& attr) { - CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE); - if (client->isServerLeader()) + // Use correct context client to send message + CContext* context=CContext::getCurrent(); + if (context->hasClient) { - CMessage msg; - if (objectId.empty()) msg << this->getId(); - else msg << objectId; - msg << attr.getName(); - msg << attr; - const std::list& ranks = client->getRanksServerLeader(); - for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) - event.push(*itRank,1,msg); - client->sendEvent(event); + // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; + CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE); + if (contextClientTmp->isServerLeader()) + { + CMessage msg; + msg<getIdServer(); + msg << attr.getName(); + msg << attr; + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } } - else client->sendEvent(event); } -/* specialisation for context, because context Id on client is not the same on server, and no need to transfer context Id */ - template <> - void CObjectTemplate::sendAttributToServer(CAttribute& attr, CContextClient* client, const string& objectId) + template + void CObjectTemplate::sendAttributToServer(CAttribute& attr, CContextClient* client) { CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE); if (client->isServerLeader()) { CMessage msg; + msg<getIdServer(); msg << attr.getName(); msg << attr; const std::list& ranks = client->getRanksServerLeader(); @@ -335,17 +306,44 @@ namespace xios \param [in] id Id of added item \param [in] itemType type of added item */ + template + void CObjectTemplate::sendAddItem(const StdString& id, int itemType) + { + CContext* context = CContext::getCurrent(); + typedef typename T::EEventId ItemType; + if (context->hasClient) + { + // Use correct context client to send message + // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; + int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; + for (int i = 0; i < nbSrvPools; ++i) + { + CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; + CEventClient event(this->getType(),ItemType(itemType)); + if (contextClientTmp->isServerLeader()) + { + CMessage msg; + msg << this->getId(); + msg << id; + const std::list& ranks = contextClientTmp->getRanksServerLeader(); + for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) + event.push(*itRank,1,msg); + contextClientTmp->sendEvent(event); + } + else contextClientTmp->sendEvent(event); + } + } + } template - void CObjectTemplate::sendAddItem(const StdString& id, int itemType, CContextClient* client, const string& objectId) + void CObjectTemplate::sendAddItem(const StdString& id, int itemType, CContextClient* client) { typedef typename T::EEventId ItemType; CEventClient event(this->getType(),ItemType(itemType)); if (client->isServerLeader()) { CMessage msg; - if (objectId.empty()) msg << this->getId(); - else msg << objectId; + msg << this->getId(); msg << id; const std::list& ranks = client->getRanksServerLeader(); for (std::list::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) @@ -374,26 +372,6 @@ namespace xios else info(50) /*attr->getValue()*/ << endl; } -/* specialisation for context, because context Id on client is not the same on server and no need to transfer context Id */ - template <> - void CObjectTemplate::recvAttributFromClient(CEventServer& event) - { - - CBufferIn* buffer=event.subEvents.begin()->buffer; - string attrId; - CAttributeMap & attrMap = *CContext::getCurrent(); - *buffer>>attrId; - CAttribute* attr=attrMap[attrId]; - info(50) << "attribut recu " << attrId << " "; - if (attr->isEmpty()) info(50) << "--> empty" << endl; - else info(50) /*getValue()*/ << endl; - *buffer>>*attr; - info(50) << "attribut recu " << attrId << " "; - if (attr->isEmpty()) info(50) << "--> empty" << endl; - else info(50) /*attr->getValue()*/ << endl; - } - - template bool CObjectTemplate::dispatchEvent(CEventServer& event) { @@ -480,18 +458,6 @@ namespace xios return CObjectFactory::CreateObject(id).get(); } ///-------------------------------------------------------------- - template - T* CObjectTemplate::createAlias(const string & id, const string& alias) - { - return CObjectFactory::CreateAlias(id, alias).get(); - } ///-------------------------------------------------------------- - - template - void CObjectTemplate::createAlias(const string& alias) - { - get()->createAlias(getId(),alias) ; - } // - template T* CObjectTemplate::get(void) { diff --git a/xios_2311_src/src/parse_expr/filter_expr_node.cpp b/xios_2311_src/src/parse_expr/filter_expr_node.cpp index fcc73974..5f013868 100644 --- a/xios_2311_src/src/parse_expr/filter_expr_node.cpp +++ b/xios_2311_src/src/parse_expr/filter_expr_node.cpp @@ -11,7 +11,7 @@ namespace xios { /* Nothing to do */ } - std::shared_ptr CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { std::shared_ptr outputPin; @@ -39,10 +39,9 @@ namespace xios << "The field " << id << " has an invalid reference to itself. " << "Use the keyword \"this\" if you want to reference the input data sent to this field."); - bool ret=field->buildWorkflowGraph(gc); - if(!field->build_workflow_graph.isEmpty()) thisField.build_workflow_graph.set(field->build_workflow_graph); - if (ret) outputPin = field->getInstantDataFilter(); // if dependency is complete build the graph other return nullptr - + // field->buildFilterGraph(gc, false); + field->buildFilterGraph(gc, false, start_graph, end_graph); + outputPin = field->getInstantDataFilter(); } else ERROR("boost::shared_ptr CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", << "The field " << id << " does not exist."); @@ -56,7 +55,7 @@ namespace xios { /* Nothing to do */ } - std::shared_ptr CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { std::shared_ptr outputPin; @@ -85,8 +84,8 @@ namespace xios << "The field " << fieldId << " has an invalid reference to itself. " << "Use the keyword \"this\" if you want to reference the input data sent to this field."); - bool ret=field->buildWorkflowGraph(gc); - if (ret) outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); + field->buildFilterGraph(gc, false); + outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); } else ERROR("shared_ptr CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", @@ -105,20 +104,21 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterUnaryOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterUnaryOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch = child->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CUnaryArithmeticFilter(gc, opId)); - auto ret=child->reduce(gc, thisField) ; - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; - - const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; - if(buildGraph_) - { - filter->graphPackage = new CGraphPackage; - filter->graphEnabled = true; - filter->graphPackage->inFields.push_back(&thisField); - } + ch->connectOutput(filter, 0); + + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch; + + filter->tag = ch->tag; + filter->start_graph = ch->start_graph; + filter->end_graph = ch->end_graph; + filter->field = &thisField; + return filter; } @@ -133,21 +133,19 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); std::shared_ptr filter(new CScalarFieldArithmeticFilter(gc, opId, child1->reduce())); + ch2->connectOutput(filter, 0); - auto ret=child2->reduce(gc, thisField) ; - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; - - const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; - if(buildGraph_) - { - filter->graphPackage = new CGraphPackage; - filter->graphEnabled = true; - filter->graphPackage->inFields.push_back(&thisField); - } + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch2; + + filter->tag = ch2->tag; + filter->start_graph = ch2->start_graph; + filter->end_graph = ch2->end_graph; + filter->field = &thisField; return filter; } @@ -162,20 +160,21 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldScalarArithmeticFilter(gc, opId, child2->reduce())); - auto ret=child1->reduce(gc, thisField) ; - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; - - const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; - if(buildGraph_) - { - filter->graphPackage = new CGraphPackage; - filter->graphEnabled = true; - filter->graphPackage->inFields.push_back(&thisField); - } + ch1->connectOutput(filter, 0); + + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch1; + + filter->tag = ch1->tag; + filter->start_graph = ch1->start_graph; + filter->end_graph = ch1->end_graph; + filter->field = &thisField; + return filter; } @@ -189,25 +188,25 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldFieldArithmeticFilter(gc, opId)); - auto ret1 = child1->reduce(gc, thisField); - auto ret2 = child2->reduce(gc, thisField); - if (ret1 && ret2) - { - ret1->connectOutput(filter, 0) ; - ret2->connectOutput(filter, 1) ; - } - else filter.reset() ; + ch1->connectOutput(filter, 0); + ch2->connectOutput(filter, 1); + + (filter->parent_filters).resize(2); + (filter->parent_filters)[0] = ch1; + (filter->parent_filters)[1] = ch2; + + filter->tag = (ch1->tag || ch2->tag); + filter->start_graph = ch1->tag? ch1->start_graph : (ch2->tag? ch2->start_graph: -1); + filter->end_graph = ch1->tag? ch1->end_graph : (ch2->tag? ch2->end_graph: -1); + + filter->field = &thisField; - const bool buildGraph_ = !(thisField.build_workflow_graph.isEmpty()) && thisField.build_workflow_graph == true ; - if(buildGraph_) - { - filter->graphPackage = new CGraphPackage; - filter->graphEnabled = true; - filter->graphPackage->inFields.push_back(&thisField); - } return filter; } @@ -226,12 +225,21 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterScalarScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterScalarScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch3 = child3->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CScalarScalarFieldArithmeticFilter(gc, opId, child1->reduce(),child2->reduce())); - auto ret=child3->reduce(gc, thisField) ; - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; + ch3->connectOutput(filter, 0); + + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch3; + + filter->tag = ch3->tag; + filter->start_graph = ch3->start_graph; + filter->end_graph = ch3->end_graph; + filter->field = &thisField; + return filter; } @@ -247,12 +255,21 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterScalarFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterScalarFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CScalarFieldScalarArithmeticFilter(gc, opId, child1->reduce(),child3->reduce())); - auto ret=child2->reduce(gc, thisField); - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; + ch2->connectOutput(filter, 0); + + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch2; + + filter->tag = ch2->tag; + filter->start_graph = ch2->start_graph; + filter->end_graph = ch2->end_graph; + filter->field = &thisField; + return filter; } @@ -268,17 +285,24 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterScalarFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterScalarFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch3 = child3->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CScalarFieldFieldArithmeticFilter(gc, opId, child1->reduce())); - auto ret1=child2->reduce(gc, thisField); - auto ret2=child3->reduce(gc, thisField); - if (ret1 && ret2) - { - ret1->connectOutput(filter, 0); - ret2->connectOutput(filter, 1); - } - else filter.reset() ; + ch2->connectOutput(filter, 0); + ch3->connectOutput(filter, 1); + + (filter->parent_filters).resize(2); + (filter->parent_filters)[0] = ch2; + (filter->parent_filters)[1] = ch3; + + filter->tag = (ch3->tag || ch2->tag); + filter->start_graph = ch3->tag? ch3->start_graph : (ch2->tag? ch2->start_graph: -1); + filter->end_graph = ch3->tag? ch3->end_graph : (ch2->tag? ch2->end_graph: -1); + filter->field = &thisField; + return filter; } @@ -295,12 +319,21 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldScalarScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldScalarScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldScalarScalarArithmeticFilter(gc, opId, child2->reduce(),child3->reduce())); - auto ret = child1->reduce(gc, thisField) ; - if (ret) ret->connectOutput(filter, 0); - else filter.reset() ; + ch1->connectOutput(filter, 0); + + (filter->parent_filters).resize(1); + (filter->parent_filters)[0] = ch1; + + filter->tag = ch1->tag; + filter->start_graph = ch1->start_graph; + filter->end_graph = ch1->end_graph; + filter->field = &thisField; + return filter; } @@ -317,17 +350,24 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch3 = child3->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldScalarFieldArithmeticFilter(gc, opId, child2->reduce())); - auto ret1 = child1->reduce(gc, thisField); - auto ret2 = child3->reduce(gc, thisField); - if (ret1 && ret2) - { - ret1 -> connectOutput(filter, 0); - ret2 -> connectOutput(filter, 1); - } - else filter.reset() ; + ch1->connectOutput(filter, 0); + ch3->connectOutput(filter, 1); + + (filter->parent_filters).resize(2); + (filter->parent_filters)[0] = ch1; + (filter->parent_filters)[1] = ch3; + + filter->tag = (ch3->tag || ch1->tag); + filter->start_graph = ch3->tag? ch3->start_graph : (ch1->tag? ch1->start_graph: -1); + filter->end_graph = ch3->tag? ch3->end_graph : (ch1->tag? ch1->end_graph: -1); + filter->field = &thisField; + return filter; } @@ -344,17 +384,23 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldFieldScalarArithmeticFilter(gc, opId, child3->reduce())); - auto ret1 = child1->reduce(gc, thisField); - auto ret2 = child2->reduce(gc, thisField); - if (ret1 && ret2) - { - ret1->connectOutput(filter, 0); - ret2->connectOutput(filter, 1); - } - else filter.reset() ; + ch1->connectOutput(filter, 0); + ch2->connectOutput(filter, 1); + + (filter->parent_filters).resize(2); + (filter->parent_filters)[0] = ch1; + (filter->parent_filters)[1] = ch2; + + filter->tag = (ch2->tag || ch1->tag); + filter->start_graph = ch2->tag? ch2->start_graph : (ch1->tag? ch1->start_graph: -1); + filter->end_graph = ch2->tag? ch2->end_graph : (ch1->tag? ch1->end_graph: -1); + filter->field = &thisField; return filter; } @@ -370,19 +416,29 @@ namespace xios "Impossible to create the new expression node, an invalid child node was provided."); } - std::shared_ptr CFilterFieldFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const + std::shared_ptr CFilterFieldFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField, Time start_graph, Time end_graph) const { + std::shared_ptr ch1 = child1->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch2 = child2->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr ch3 = child3->reduce(gc, thisField, start_graph, end_graph); + std::shared_ptr filter(new CFieldFieldFieldArithmeticFilter(gc, opId)); - auto ret1=child1->reduce(gc, thisField); - auto ret2=child2->reduce(gc, thisField); - auto ret3=child3->reduce(gc, thisField); - if (ret1 && ret2 && ret3) - { - ret1->connectOutput(filter, 0); - ret2->connectOutput(filter, 1); - ret3->connectOutput(filter, 2); - } - else filter.reset() ; + ch1->connectOutput(filter, 0); + ch2->connectOutput(filter, 1); + ch3->connectOutput(filter, 2); + + (filter->parent_filters).resize(3); + (filter->parent_filters)[0] = ch1; + (filter->parent_filters)[1] = ch2; + (filter->parent_filters)[2] = ch3; + + + filter->tag = (ch1->tag || ch1->tag || ch3->tag); + filter->start_graph = ch1->tag? ch1->start_graph : (ch2->tag? ch2->start_graph: (ch3->tag? ch3->start_graph: -1)); + filter->end_graph = ch1->tag? ch1->end_graph : (ch2->tag? ch2->end_graph: (ch3->tag? ch3->end_graph: -1)); + filter->field = &thisField; + + return filter; } diff --git a/xios_2311_src/src/parse_expr/filter_expr_node.hpp b/xios_2311_src/src/parse_expr/filter_expr_node.hpp index 3f7fd2f1..e99aa6f4 100644 --- a/xios_2311_src/src/parse_expr/filter_expr_node.hpp +++ b/xios_2311_src/src/parse_expr/filter_expr_node.hpp @@ -5,6 +5,8 @@ #include #include "scalar_expr_node.hpp" +#include "duration.hpp" + namespace xios { class COutputPin; @@ -24,7 +26,7 @@ namespace xios * \param thisField the field to which the expression is attached * \return the output pin of the filter producing the result of the expression */ - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const = 0; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const = 0; }; /*! @@ -41,7 +43,7 @@ namespace xios */ CFilterFieldExprNode(const std::string& fieldId); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string fieldId; //!< The identifier of the field @@ -62,7 +64,7 @@ namespace xios */ CFilterTemporalFieldExprNode(const std::string& fieldId); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string fieldId; //!< The identifier of the field @@ -85,7 +87,7 @@ namespace xios */ CFilterUnaryOpExprNode(const std::string& opId, IFilterExprNode* child); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -110,7 +112,7 @@ namespace xios */ CFilterScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -136,7 +138,7 @@ namespace xios */ CFilterFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -161,7 +163,7 @@ namespace xios */ CFilterFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -189,7 +191,7 @@ namespace xios */ CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -218,7 +220,7 @@ namespace xios */ CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -247,7 +249,7 @@ namespace xios */ CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -277,7 +279,7 @@ namespace xios */ CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -306,7 +308,7 @@ namespace xios */ CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -334,7 +336,7 @@ namespace xios */ CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field @@ -363,7 +365,7 @@ namespace xios */ CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3); - virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField) const; + virtual std::shared_ptr reduce(CGarbageCollector& gc, CField& thisField, Time start_graph=-1, Time end_graph=-1) const; private: std::string opId; //!< The identifier of the field diff --git a/xios_2311_src/src/parse_expr/operator_expr.hpp b/xios_2311_src/src/parse_expr/operator_expr.hpp index 2391151e..c8d35618 100644 --- a/xios_2311_src/src/parse_expr/operator_expr.hpp +++ b/xios_2311_src/src/parse_expr/operator_expr.hpp @@ -434,27 +434,9 @@ namespace xios return ret ; } - void release(void) - { - opScalar.clear(); - opScalarScalar.clear(); - opScalarScalarScalar.clear(); - opField.clear(); - opFieldField.clear(); - opFieldScalar.clear(); - opScalarField.clear(); - opScalarScalarField.clear(); - opScalarFieldScalar.clear(); - opScalarFieldField.clear(); - opFieldScalarScalar.clear(); - opFieldScalarField.clear(); - opFieldFieldScalar.clear(); - opFieldFieldField.clear(); - } }; extern COperatorExpr operatorExpr; - } #endif diff --git a/xios_2311_src/src/parse_expr/yacc_parser.cpp b/xios_2311_src/src/parse_expr/yacc_parser.cpp index 299337c3..6153b014 100644 --- a/xios_2311_src/src/parse_expr/yacc_parser.cpp +++ b/xios_2311_src/src/parse_expr/yacc_parser.cpp @@ -69,6 +69,8 @@ #include #include "exception.hpp" +#include "yacc_var.hpp" + using namespace std; using namespace xios; @@ -83,8 +85,14 @@ extern "C" std::string globalInputText; size_t globalReadOffset = 0; + std::string *xios::yacc_globalInputText_ptr = 0; + int readInputForLexer(char* buffer, size_t* numBytesRead, size_t maxBytesToRead) { + yacc_globalInputText_ptr = &globalInputText; + //*yacc_globalInputText_ptr = globalInputText; + + size_t numBytesToRead = maxBytesToRead; size_t bytesRemaining = globalInputText.length()-globalReadOffset; size_t i; diff --git a/xios_2311_src/src/registry.cpp b/xios_2311_src/src/registry.cpp index a84f9551..f47684a7 100644 --- a/xios_2311_src/src/registry.cpp +++ b/xios_2311_src/src/registry.cpp @@ -50,12 +50,12 @@ namespace xios } } - void CRegistry::getKey_(const string& key_, CBaseType& value) const + void CRegistry::getKey_(const string& key_, CBaseType& value) { const string key=path+key_ ; size_t size=value.size(); - map >::const_iterator it=registry.find(key) ; + map >::iterator it=registry.find(key) ; if (it!=registry.end()) { @@ -257,16 +257,7 @@ namespace xios void CRegistry::hierarchicalGatherRegistry(void) { - int color; - if (isEmpty()) color=0 ; - else color=1 ; - int rank ; - MPI_Comm_rank(communicator,&rank); - if (rank==0) color=1 ; - MPI_Comm newComm ; - MPI_Comm_split(communicator,color,rank,&newComm) ; - if (color==1) hierarchicalGatherRegistry(newComm) ; - MPI_Comm_free(&newComm) ; + hierarchicalGatherRegistry(communicator) ; } void CRegistry::hierarchicalGatherRegistry(const MPI_Comm& comm) diff --git a/xios_2311_src/src/registry.hpp b/xios_2311_src/src/registry.hpp index 9ce944d5..a4a8e1c3 100644 --- a/xios_2311_src/src/registry.hpp +++ b/xios_2311_src/src/registry.hpp @@ -37,11 +37,11 @@ namespace xios /** retrieve a value from a key */ - void getKey(const std::string& key, CBaseType& value) const { this->getKey_(key,value); } + void getKey(const std::string& key, CBaseType& value) { this->getKey_(key,value); } /** retrieve a value from a key */ template typename boost::enable_if_c::value>::type - getKey(const std::string& key, T& value) const { CType_ref valRef(value); this->getKey_(key,valRef); } + getKey(const std::string& key, T& value) { CType_ref valRef(value); this->getKey_(key,valRef); } /** query for an already inserted key */ @@ -102,7 +102,7 @@ namespace xios void setKey_(const std::string& key, const CBaseType& value) ; /** retrieve a value from a key (internal use)*/ - void getKey_(const std::string& key, CBaseType& value) const ; + void getKey_(const std::string& key, CBaseType& value) ; /** use internally for recursivity */ void gatherRegistry(const MPI_Comm& comm) ; diff --git a/xios_2311_src/src/release_static_allocation.cpp b/xios_2311_src/src/release_static_allocation.cpp deleted file mode 100755 index 1529e48d..00000000 --- a/xios_2311_src/src/release_static_allocation.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "release_static_allocation.hpp" -#include "operator_expr.hpp" -#include "netCdf_cf_constant.hpp" -#include "context.hpp" -#include "server_context.hpp" -#include "timer.hpp" -#include "mem_checker.hpp" - -namespace xios -{ - void releaseStaticAllocation(void) - { - CContext::releaseStaticAllocation() ; // free memory from static allocation - CCFConvention::releaseStaticAllocation() ; // free memory from static allocation - CServerContext::releaseStaticAllocation() ; - CTimer::release() ; - CMemChecker::release() ; - operatorExpr.release(); - } -} \ No newline at end of file diff --git a/xios_2311_src/src/release_static_allocation.hpp b/xios_2311_src/src/release_static_allocation.hpp deleted file mode 100755 index 963ee62c..00000000 --- a/xios_2311_src/src/release_static_allocation.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __RELEASE_STATIC_ALLOCATION_HPP__ -#define __RELEASE_STATIC_ALLOCATION_HPP__ - -namespace xios -{ - - void releaseStaticAllocation(void) ; - -} - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/server.cpp b/xios_2311_src/src/server.cpp index 4a18b698..711cda4e 100644 --- a/xios_2311_src/src/server.cpp +++ b/xios_2311_src/src/server.cpp @@ -14,20 +14,10 @@ #include "timer.hpp" #include "event_scheduler.hpp" #include "string_tools.hpp" -#include "ressources_manager.hpp" -#include "services_manager.hpp" -#include "contexts_manager.hpp" -#include "servers_ressource.hpp" -#include -#include "workflow_graph.hpp" -#include "release_static_allocation.hpp" - - namespace xios { MPI_Comm CServer::intraComm ; - MPI_Comm CServer::serversComm_ ; std::list CServer::interCommLeft ; std::list CServer::interCommRight ; std::list CServer::contextInterComms; @@ -43,261 +33,372 @@ namespace xios bool CServer::finished=false ; bool CServer::is_MPI_Initialized ; CEventScheduler* CServer::eventScheduler = 0; - CServersRessource* CServer::serversRessource_=nullptr ; - +//--------------------------------------------------------------- +/*! + * \fn void CServer::initialize(void) + * Creates intraComm for each possible type of servers (classical, primary or secondary). + * Creates interComm and stores them into the following lists: + * classical server -- interCommLeft + * primary server -- interCommLeft and interCommRight + * secondary server -- interCommLeft for each pool. + * IMPORTANT: CXios::usingServer2 should NOT be used beyond this function. Use CServer::serverLevel instead. + */ void CServer::initialize(void) { - - MPI_Comm serverComm ; int initialized ; MPI_Initialized(&initialized) ; if (initialized) is_MPI_Initialized=true ; else is_MPI_Initialized=false ; - MPI_Comm globalComm=CXios::getGlobalComm() ; + int rank ; - ///////////////////////////////////////// - ///////////// PART 1 //////////////////// - ///////////////////////////////////////// - // don't use OASIS + // Not using OASIS if (!CXios::usingOasis) { - if (!is_MPI_Initialized) MPI_Init(NULL, NULL); - - // split the global communicator - // get hash from all model to attribute a unique color (int) and then split to get client communicator - // every mpi process of globalComm (MPI_COMM_WORLD) must participate - - int commRank, commSize ; - MPI_Comm_rank(globalComm,&commRank) ; - MPI_Comm_size(globalComm,&commSize) ; - - std::hash hashString ; - size_t hashServer=hashString(CXios::xiosCodeId) ; - - size_t* hashAll = new size_t[commSize] ; - MPI_Allgather(&hashServer,1,MPI_SIZE_T,hashAll,1,MPI_SIZE_T,globalComm) ; - - int color=0 ; - map listHash ; - for(int i=0 ; i<=commSize ; i++) - if (listHash.count(hashAll[i])==0) - { - listHash[hashAll[i]]=color ; - color=color+1 ; - } - color=listHash[hashServer] ; - delete[] hashAll ; - MPI_Comm_split(globalComm, color, commRank, &serverComm) ; - } - else // using OASIS - { - if (!is_MPI_Initialized) oasis_init(CXios::xiosCodeId); + if (!is_MPI_Initialized) + { + MPI_Init(NULL, NULL); + } + CTimer::get("XIOS").resume() ; - oasis_get_localcomm(serverComm); - } - CTimer::get("XIOS").resume() ; - CTimer::get("XIOS initialize").resume() ; - - ///////////////////////////////////////// - ///////////// PART 2 //////////////////// - ///////////////////////////////////////// - + boost::hash hashString ; + unsigned long hashServer = hashString(CXios::xiosCodeId); - // Create the XIOS communicator for every process which is related - // to XIOS, as well on client side as on server side - MPI_Comm xiosGlobalComm ; - string strIds=CXios::getin("clients_code_id","") ; - vector clientsCodeId=splitRegex(strIds,"\\s*,\\s*") ; - if (strIds.empty()) - { - // no code Ids given, suppose XIOS initialisation is global - int commRank, commGlobalRank, serverLeader, clientLeader,serverRemoteLeader,clientRemoteLeader ; - MPI_Comm splitComm,interComm ; - MPI_Comm_rank(globalComm,&commGlobalRank) ; - MPI_Comm_split(globalComm, 1, commGlobalRank, &splitComm) ; - MPI_Comm_rank(splitComm,&commRank) ; - if (commRank==0) serverLeader=commGlobalRank ; - else serverLeader=0 ; - clientLeader=0 ; - MPI_Allreduce(&clientLeader,&clientRemoteLeader,1,MPI_INT,MPI_SUM,globalComm) ; - MPI_Allreduce(&serverLeader,&serverRemoteLeader,1,MPI_INT,MPI_SUM,globalComm) ; - MPI_Intercomm_create(splitComm, 0, globalComm, clientRemoteLeader,1341,&interComm) ; - MPI_Intercomm_merge(interComm,false,&xiosGlobalComm) ; - CXios::setXiosComm(xiosGlobalComm) ; - } - else - { + unsigned long* hashAll ; + unsigned long* srvLevelAll ; - xiosGlobalCommByFileExchange(serverComm) ; + int size ; + int myColor ; + int i,c ; + MPI_Comm newComm; - } - - ///////////////////////////////////////// - ///////////// PART 4 //////////////////// - // create servers intra communicator // - ///////////////////////////////////////// - - int commRank ; - MPI_Comm_rank(CXios::getXiosComm(), &commRank) ; - MPI_Comm_split(CXios::getXiosComm(),true,commRank,&serversComm_) ; - - CXios::setUsingServer() ; + MPI_Comm_size(CXios::globalComm, &size) ; + MPI_Comm_rank(CXios::globalComm, &rank_); - ///////////////////////////////////////// - ///////////// PART 5 //////////////////// - // redirect files output // - ///////////////////////////////////////// - - CServer::openInfoStream(CXios::serverFile); - CServer::openErrorStream(CXios::serverFile); + hashAll=new unsigned long[size] ; + MPI_Allgather(&hashServer, 1, MPI_LONG, hashAll, 1, MPI_LONG, CXios::globalComm) ; - ///////////////////////////////////////// - ///////////// PART 4 //////////////////// - ///////////////////////////////////////// + map colors ; + map leaders ; + map::iterator it ; - CXios::launchDaemonsManager(true) ; - - ///////////////////////////////////////// - ///////////// PART 5 //////////////////// - ///////////////////////////////////////// + // (1) Establish client leaders, distribute processes between two server levels + std::vector srvRanks; + for(i=0,c=0;i reqNbProc || nbPools < 1) + { + error(0)<<"WARNING: void CServer::initialize(void)"<= firstSndSrvRank) + { + if (rank_ == srvRanks[i]) + { + serverLevel=2; + } + poolLeader += procsPerPool; + if (remainder != 0) + { + ++poolLeader; + --remainder; + } +//*********** (2) Comment out the two lines below to set one process per pool + if (poolLeader < srvRanks.size()) + sndServerGlobalRanks.push_back(srvRanks[poolLeader]); +//*********** (3) Uncomment the line below to set one process per pool +// sndServerGlobalRanks.push_back(srvRanks[i]); + } + else + { + if (rank_ == srvRanks[i]) serverLevel=1; + } + } + if (serverLevel==2) + { + info(50)<<"The number of secondary server pools is "<< sndServerGlobalRanks.size() <= sndServerGlobalRanks[i]) + { + if ( i == sndServerGlobalRanks.size()-1) + { + myColor = colors.size() + sndServerGlobalRanks[i]; + } + else if (rank_< sndServerGlobalRanks[i+1]) + { + myColor = colors.size() + sndServerGlobalRanks[i]; + break; + } + } + } + } + } + } - auto ressourcesManager=CXios::getRessourcesManager() ; - auto servicesManager=CXios::getServicesManager() ; - auto contextsManager=CXios::getContextsManager() ; - auto daemonsManager=CXios::getDaemonsManager() ; - auto serversRessource=CServer::getServersRessource() ; + // (2) Create intraComm + if (serverLevel != 2) myColor=colors[hashServer]; + MPI_Comm_split(CXios::globalComm, myColor, rank_, &intraComm) ; - if (serversRessource->isServerLeader()) - { - int nbRessources = ressourcesManager->getRessourcesSize() ; - if (!CXios::usingServer2) + // (3) Create interComm + if (serverLevel == 0) + { + int clientLeader; + for(it=leaders.begin();it!=leaders.end();it++) + { + if (it->first!=hashServer) + { + clientLeader=it->second ; + int intraCommSize, intraCommRank ; + MPI_Comm_size(intraComm,&intraCommSize) ; + MPI_Comm_rank(intraComm,&intraCommRank) ; + info(50)<<"intercommCreate::server (classical mode) "<createPool(CXios::defaultPoolId, nbRessources) ; - servicesManager->createServices(CXios::defaultPoolId, CXios::defaultServerId, CServicesManager::IO_SERVER,nbRessources,1) ; + int clientLeader, srvSndLeader; + int srvPrmLeader ; + + for (it=leaders.begin();it!=leaders.end();it++) + { + if (it->first != hashServer) + { + clientLeader=it->second ; + int intraCommSize, intraCommRank ; + MPI_Comm_size(intraComm, &intraCommSize) ; + MPI_Comm_rank(intraComm, &intraCommRank) ; + info(50)<<"intercommCreate::server (server level 1) "<createPool(CXios::defaultPoolId, nbRessources) ; - servicesManager->createServices(CXios::defaultPoolId, CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ; - servicesManager->createServices(CXios::defaultPoolId, CXios::defaultServerId, CServicesManager::OUT_SERVER, nprocsServer, nbPoolsServer2) ; + int clientLeader; + clientLeader = leaders[hashString(CXios::xiosCodeId)]; + int intraCommSize, intraCommRank ; + MPI_Comm_size(intraComm, &intraCommSize) ; + MPI_Comm_rank(intraComm, &intraCommRank) ; + info(50)<<"intercommCreate::server (server level 2) "<eventLoop() ; } - CTimer::get("XIOS event loop").suspend() ; - - // Delete CContext - //CObjectTemplate::cleanStaticDataStructure(); - } + // using OASIS + else + { + int size; + int myColor; + int* srvGlobalRanks; + if (!is_MPI_Initialized) oasis_init(CXios::xiosCodeId); + CTimer::get("XIOS").resume() ; + MPI_Comm localComm; + oasis_get_localcomm(localComm); + MPI_Comm_rank(localComm,&rank_) ; +// (1) Create server intraComm + if (!CXios::usingServer2) + { + MPI_Comm_dup(localComm, &intraComm); + } + else + { + int globalRank; + MPI_Comm_size(localComm,&size) ; + MPI_Comm_rank(CXios::globalComm,&globalRank) ; + srvGlobalRanks = new int[size] ; + MPI_Allgather(&globalRank, 1, MPI_INT, srvGlobalRanks, 1, MPI_INT, localComm) ; + + int reqNbProc = size*CXios::ratioServer2/100.; + if (reqNbProc < 1 || reqNbProc == size) + { + error(0)<<"WARNING: void CServer::initialize(void)"< reqNbProc || nbPools < 1) + { + error(0)<<"WARNING: void CServer::initialize(void)"<= firstSndSrvRank) + { + if (globalRank == srvGlobalRanks[i]) + { + serverLevel=2; + } + poolLeader += procsPerPool; + if (remainder != 0) + { + ++poolLeader; + --remainder; + } +//*********** (2) Comment out the two lines below to set one process per pool +// if (poolLeader < size) +// sndServerGlobalRanks.push_back(srvGlobalRanks[poolLeader]); +//*********** (3) Uncomment the line below to set one process per pool + sndServerGlobalRanks.push_back(srvGlobalRanks[i]); + } + else + { + if (globalRank == srvGlobalRanks[i]) serverLevel=1; + } + } + if (serverLevel==2) + { + info(50)<<"The number of secondary server pools is "<< sndServerGlobalRanks.size() <= sndServerGlobalRanks[i]) + { + if (i == sndServerGlobalRanks.size()-1) + { + myColor = sndServerGlobalRanks[i]; + } + else if (globalRank< sndServerGlobalRanks[i+1]) + { + myColor = sndServerGlobalRanks[i]; + break; + } + } + } + } + if (serverLevel != 2) myColor=0; + MPI_Comm_split(localComm, myColor, rank_, &intraComm) ; + } + } + string codesId=CXios::getin("oasis_codes_id") ; + vector oasisCodeId=splitRegex(codesId,"\\s*,\\s*") ; + + vector::iterator it ; + MPI_Comm newComm ; + int globalRank ; + MPI_Comm_rank(CXios::globalComm,&globalRank); - void CServer::xiosGlobalCommByFileExchange(MPI_Comm serverComm) - { - - MPI_Comm globalComm=CXios::getGlobalComm() ; - MPI_Comm xiosGlobalComm ; - - string strIds=CXios::getin("clients_code_id","") ; - vector clientsCodeId=splitRegex(strIds,"\\s*,\\s*") ; - - int commRank, globalRank ; - MPI_Comm_rank(serverComm, &commRank) ; - MPI_Comm_rank(globalComm, &globalRank) ; - string serverFileName("__xios_publisher::"+CXios::xiosCodeId+"__to_remove__") ; - - if (commRank==0) // if root process publish name - { - std::ofstream ofs (serverFileName, std::ofstream::out); - ofs< clientsRank(clientsCodeId.size()) ; - for(int i=0;i>clientsRank[i] ; - ifs.close() ; - } + oasis_get_intercomm(newComm,*it) ; + if ( serverLevel == 0 || serverLevel == 1) + { + interCommLeft.push_back(newComm) ; + if (rank_==0) MPI_Send(&globalRank,1,MPI_INT,0,0,newComm) ; + } + } - MPI_Comm intraComm ; - MPI_Comm_dup(serverComm,&intraComm) ; - MPI_Comm interComm ; - for(int i=0 ; i("call_oasis_enddef",true) ; + if (!oasisEnddef) oasis_enddef() ; + } - void CServer::xiosGlobalCommByPublishing(MPI_Comm serverComm) - { - // untested, need to be tested on a true MPI-2 compliant library - - // try to discover other client/server -/* - // publish server name - char portName[MPI_MAX_PORT_NAME]; - int ierr ; - int commRank ; - MPI_Comm_rank(serverComm, &commRank) ; - - if (commRank==0) // if root process publish name - { - MPI_Open_port(MPI_INFO_NULL, portName); - MPI_Publish_name(CXios::xiosCodeId.c_str(), MPI_INFO_NULL, portName); - } - MPI_Comm intraComm=serverComm ; - MPI_Comm interComm ; - for(int i=0 ; i::iterator it = contextInterComms.begin(); it != contextInterComms.end(); it++) - MPI_Comm_free(&(*it)); + /* MPI_Comm_free(&(*it)) */; // WARNING remove freeing communicator !! --> deadlock raised, to be checked for (std::list::iterator it = contextIntraComms.begin(); it != contextIntraComms.end(); it++) MPI_Comm_free(&(*it)); +// for (std::list::iterator it = interComm.begin(); it != interComm.end(); it++) +// MPI_Comm_free(&(*it)); + +// for (std::list::iterator it = interCommLeft.begin(); it != interCommLeft.end(); it++) +// MPI_Comm_free(&(*it)); + for (std::list::iterator it = interCommRight.begin(); it != interCommRight.end(); it++) - MPI_Comm_free(&(*it)); + /* MPI_Comm_free(&(*it)) */ ; // WARNING remove freeing communicator !! --> deadlock raised, to be checked -// MPI_Comm_free(&intraComm); - CXios::finalizeDaemonsManager(); - finalizeServersRessource(); - - CContext::removeAllContexts() ; // free memory for related context - - CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources + MPI_Comm_free(&intraComm); if (!is_MPI_Initialized) { @@ -330,11 +431,445 @@ namespace xios report(0)<<"Performance report : Time spent in processing events : "<checkEvent() ; + } + CTimer::get("XIOS server").suspend() ; + } + + void CServer::listenFinalize(void) + { + list::iterator it, itr; + int msg ; + int flag ; + + for(it=interCommLeft.begin();it!=interCommLeft.end();it++) + { + MPI_Status status ; + traceOff() ; + MPI_Iprobe(0,0,*it,&flag,&status) ; + traceOn() ; + if (flag==true) + { + MPI_Recv(&msg,1,MPI_INT,0,0,*it,&status) ; + info(20)<<" CServer : Receive client finalize"< deadlock raised, to be checked + interCommLeft.erase(it) ; + break ; + } + } + + if (interCommLeft.empty()) + { + int i,size ; + MPI_Comm_size(intraComm,&size) ; + MPI_Request* requests= new MPI_Request[size-1] ; + MPI_Status* status= new MPI_Status[size-1] ; + + for(int i=1;i::iterator it; + int msg ; + static int nbCompound=0 ; + int size ; + static bool sent=false ; + static MPI_Request* allRequests ; + static MPI_Status* allStatus ; + + + if (sent) + { + MPI_Comm_size(intraComm,&size) ; + MPI_Testall(size,allRequests, &flag, allStatus) ; + if (flag==true) + { + delete [] allRequests ; + delete [] allStatus ; + sent=false ; + } + } + + + for(it=interCommLeft.begin();it!=interCommLeft.end();it++) + { + MPI_Status status ; + traceOff() ; + MPI_Iprobe(0,5,*it,&flag,&status) ; // tags oasis_endded = 5 + traceOn() ; + if (flag==true) + { + MPI_Recv(&msg,1,MPI_INT,0,5,*it,&status) ; // tags oasis_endded = 5 + nbCompound++ ; + if (nbCompound==interCommLeft.size()) + { + for (std::list::iterator it = interCommRight.begin(); it != interCommRight.end(); it++) + { + MPI_Send(&msg,1,MPI_INT,0,5,*it) ; // tags oasis_endded = 5 + } + MPI_Comm_size(intraComm,&size) ; + allRequests= new MPI_Request[size] ; + allStatus= new MPI_Status[size] ; + for(int i=0;i hashString; + size_t hashId = hashString("oasis_enddef"); + if (eventScheduler->queryEvent(0,hashId)) + { + oasis_enddef() ; + eventSent=false ; + } + } + + traceOff() ; + MPI_Iprobe(root,5,intraComm, &flag, &status) ; + traceOn() ; + if (flag==true) + { + MPI_Recv(&msg,1,MPI_INT,root,5,intraComm,&status) ; // tags oasis_endded = 5 + boost::hash hashString; + size_t hashId = hashString("oasis_enddef"); + eventScheduler->registerEvent(0,hashId); + eventSent=true ; + } + } + + + + + + void CServer::listenContext(void) + { + + MPI_Status status ; + int flag ; + static char* buffer ; + static MPI_Request request ; + static bool recept=false ; + int rank ; + int count ; + + if (recept==false) + { + traceOff() ; + MPI_Iprobe(MPI_ANY_SOURCE,1,CXios::globalComm, &flag, &status) ; + traceOn() ; + if (flag==true) + { + rank=status.MPI_SOURCE ; + MPI_Get_count(&status,MPI_CHAR,&count) ; + buffer=new char[count] ; + MPI_Irecv((void*)buffer,count,MPI_CHAR,rank,1,CXios::globalComm,&request) ; + recept=true ; + } + } + else + { + traceOff() ; + MPI_Test(&request,&flag,&status) ; + traceOn() ; + if (flag==true) + { + rank=status.MPI_SOURCE ; + MPI_Get_count(&status,MPI_CHAR,&count) ; + recvContextMessage((void*)buffer,count) ; + delete [] buffer ; + recept=false ; + } + } + } + + void CServer::recvContextMessage(void* buff,int count) + { + static map recvContextId; + map::iterator it ; + CBufferIn buffer(buff,count) ; + string id ; + int clientLeader ; + int nbMessage ; + + buffer>>id>>nbMessage>>clientLeader ; + + it=recvContextId.find(id) ; + if (it==recvContextId.end()) + { + contextMessage msg={0,0} ; + pair::iterator,bool> ret ; + ret=recvContextId.insert(pair(id,msg)) ; + it=ret.first ; + } + it->second.nbRecv+=1 ; + it->second.leaderRank+=clientLeader ; + + if (it->second.nbRecv==nbMessage) + { + int size ; + MPI_Comm_size(intraComm,&size) ; +// MPI_Request* requests= new MPI_Request[size-1] ; +// MPI_Status* status= new MPI_Status[size-1] ; + MPI_Request* requests= new MPI_Request[size] ; + MPI_Status* status= new MPI_Status[size] ; + + CMessage msg ; + msg<second.leaderRank; + int messageSize=msg.size() ; + void * sendBuff = new char[messageSize] ; + CBufferOut sendBuffer(sendBuff,messageSize) ; + sendBuffer< buffers; + static std::vector requests ; + static std::vector counts ; + static std::vector isEventRegistered ; + static std::vector isEventQueued ; + MPI_Request request; + + int rank ; + const int root=0 ; + boost::hash hashString; + size_t hashId = hashString("RegisterContext"); + + // (1) Receive context id from the root, save it into a buffer + traceOff() ; + MPI_Iprobe(root,2,intraComm, &flag, &status) ; + traceOn() ; + if (flag==true) + { + counts.push_back(0); + MPI_Get_count(&status,MPI_CHAR,&(counts.back())) ; + buffers.push_back(new char[counts.back()]) ; + requests.push_back(request); + MPI_Irecv((void*)(buffers.back()),counts.back(),MPI_CHAR,root,2,intraComm,&(requests.back())) ; + isEventRegistered.push_back(false); + isEventQueued.push_back(false); + nbContexts++; + } + + for (int ctxNb = 0; ctxNb < nbContexts; ctxNb++ ) + { + // (2) If context id is received, register an event + MPI_Test(&requests[ctxNb],&flag,&status) ; + if (flag==true && !isEventRegistered[ctxNb]) + { + eventScheduler->registerEvent(ctxNb,hashId); + isEventRegistered[ctxNb] = true; + } + // (3) If event has been scheduled, call register context + if (eventScheduler->queryEvent(ctxNb,hashId) && !isEventQueued[ctxNb]) + { + registerContext(buffers[ctxNb],counts[ctxNb]) ; + isEventQueued[ctxNb] = true; + delete [] buffers[ctxNb] ; + } + } + + } + + void CServer::registerContext(void* buff, int count, int leaderRank) + { + string contextId; + CBufferIn buffer(buff, count); +// buffer >> contextId; + buffer >> contextId>>leaderRank; + CContext* context; + + info(20) << "CServer : Register new Context : " << contextId << endl; + + if (contextList.find(contextId) != contextList.end()) + ERROR("void CServer::registerContext(void* buff, int count, int leaderRank)", + << "Context '" << contextId << "' has already been registred"); + + context=CContext::create(contextId); + contextList[contextId]=context; + + // Primary or classical server: create communication channel with a client + // (1) create interComm (with a client) + // (2) initialize client and server (contextClient and contextServer) + MPI_Comm inter; + if (serverLevel < 2) + { + MPI_Comm contextInterComm; + MPI_Intercomm_create(intraComm, 0, CXios::globalComm, leaderRank, 10+leaderRank, &contextInterComm); + MPI_Intercomm_merge(contextInterComm,1,&inter); + MPI_Barrier(inter); + MPI_Comm_free(&inter); + context->initServer(intraComm,contextInterComm); + contextInterComms.push_back(contextInterComm); + + } + // Secondary server: create communication channel with a primary server + // (1) duplicate interComm with a primary server + // (2) initialize client and server (contextClient and contextServer) + // Remark: in the case of the secondary server there is no need to create an interComm calling MPI_Intercomm_create, + // because interComm of CContext is defined on the same processes as the interComm of CServer. + // So just duplicate it. + else if (serverLevel == 2) + { + MPI_Comm_dup(interCommLeft.front(), &inter); + contextInterComms.push_back(inter); + context->initServer(intraComm, contextInterComms.back()); + } + + // Primary server: + // (1) send create context message to secondary servers + // (2) initialize communication channels with secondary servers (create contextClient and contextServer) + if (serverLevel == 1) + { + int i = 0, size; + MPI_Comm_size(intraComm, &size) ; + for (std::list::iterator it = interCommRight.begin(); it != interCommRight.end(); it++, ++i) + { + StdString str = contextId +"_server_" + boost::lexical_cast(i); + CMessage msg; + int messageSize; + msg<initClient(contextIntraComms.back(), contextInterComms.back()) ; + delete [] buff ; + } + } + } + + void CServer::contextEventLoop(bool enableEventsProcessing /*= true*/) + { + bool isFinalized ; + map::iterator it ; + + for(it=contextList.begin();it!=contextList.end();it++) + { + isFinalized=it->second->isFinalized(); + if (isFinalized) + { + contextList.erase(it) ; + break ; + } + else + it->second->checkBuffersAndListen(enableEventsProcessing); + } + } + + //! Get rank of the current process in the intraComm + int CServer::getRank() + { + int rank; + MPI_Comm_rank(intraComm,&rank); + return rank; + } + + vector& CServer::getSecondaryServerGlobalRanks() + { + return sndServerGlobalRanks; + } + /*! * Open a file specified by a suffix and an extension and use it for the given file buffer. * The file name will be suffix+rank+extension. @@ -345,27 +880,23 @@ namespace xios */ void CServer::openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb) { - StdStringStream fileNameServer; + StdStringStream fileNameClient; int numDigit = 0; - int commSize = 0; - int commRank ; + int size = 0; int id; - - MPI_Comm_size(CXios::getGlobalComm(), &commSize); - MPI_Comm_rank(CXios::getGlobalComm(), &commRank); - - while (commSize) + MPI_Comm_size(CXios::globalComm, &size); + while (size) { - commSize /= 10; + size /= 10; ++numDigit; } - id = commRank; + id = rank_; //getRank(); - fileNameServer << fileName << "_" << std::setfill('0') << std::setw(numDigit) << id << ext; - fb->open(fileNameServer.str().c_str(), std::ios::out); + fileNameClient << fileName << "_" << std::setfill('0') << std::setw(numDigit) << id << ext; + fb->open(fileNameClient.str().c_str(), std::ios::out); if (!fb->is_open()) ERROR("void CServer::openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb)", - << std::endl << "Can not open <" << fileNameServer.str() << "> file to write the server log(s)."); + << std::endl << "Can not open <" << fileNameClient.str() << "> file to write the server log(s)."); } /*! @@ -421,14 +952,4 @@ namespace xios { if (m_errorStream.is_open()) m_errorStream.close(); } - - void CServer::launchServersRessource(MPI_Comm serverComm) - { - serversRessource_ = new CServersRessource(serverComm) ; - } - - void CServer::finalizeServersRessource(void) - { - delete serversRessource_; serversRessource_=nullptr ; - } } diff --git a/xios_2311_src/src/server.hpp b/xios_2311_src/src/server.hpp index 90e18641..6d1e2e35 100644 --- a/xios_2311_src/src/server.hpp +++ b/xios_2311_src/src/server.hpp @@ -9,20 +9,23 @@ namespace xios { - class CServersRessource ; - class CServer { public: static void initialize(void); - static void xiosGlobalCommByFileExchange(MPI_Comm serverComm) ; - static void xiosGlobalCommByPublishing(MPI_Comm serverComm) ; - static void finalize(void); static void eventLoop(void); - + static void contextEventLoop(bool enableEventsProcessing=true); + static void listenContext(void); + static void listenFinalize(void); + static void recvContextMessage(void* buff,int count); + static void listenRootContext(void); + static void listenRootFinalize(void); + static void listenRootOasisEnddef(void); + static void listenOasisEnddef(void); + static void registerContext(void* buff,int count, int leaderRank=0); + static MPI_Comm intraComm; - static MPI_Comm serversComm_; static std::list interCommLeft; // interComm between server (primary, classical or secondary) and its client (client or primary server) static std::list interCommRight; // interComm between primary server and secondary server (non-empty only for primary server pool) static std::list contextInterComms; // list of context intercomms @@ -64,18 +67,13 @@ namespace xios //! Close the error log file if it opens static void closeErrorStream(); - static CServersRessource* getServersRessource(void) { return serversRessource_;} - static void launchServersRessource(MPI_Comm commServer) ; - static void finalizeServersRessource(void) ; - static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); - private: static vector sndServerGlobalRanks; //!< Global ranks of pool leaders on the secondary server static int rank_; //!< If (!oasis) global rank, else rank in the intraComm returned by oasis static int nbContexts; //!< Number of contexts registered by server static StdOFStream m_infoStream; static StdOFStream m_errorStream; - static CServersRessource* serversRessource_ ; + static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb); }; } diff --git a/xios_2311_src/src/test/generic_testcase.f90 b/xios_2311_src/src/test/generic_testcase.f90 old mode 100755 new mode 100644 index 4ef467d4..75815ee7 --- a/xios_2311_src/src/test/generic_testcase.f90 +++ b/xios_2311_src/src/test/generic_testcase.f90 @@ -1,4 +1,4 @@ -PROGRAM generic_testcase +PROGRAM generic_testcase USE xios USE mod_wait IMPLICIT NONE @@ -10,7 +10,6 @@ PROGRAM generic_testcase INTEGER :: nb_proc_atm INTEGER :: nb_proc_oce INTEGER :: nb_proc_surf - INTEGER :: nb_proc_server CHARACTER(LEN=len_str) :: proc_distribution CHARACTER(LEN=len_str) :: start_date CHARACTER(LEN=len_str) :: duration @@ -33,10 +32,7 @@ PROGRAM generic_testcase INTEGER :: nlev CHARACTER(len_str) :: init_field2D="" DOUBLE PRECISION :: pressure_factor - LOGICAL :: domain_mask - CHARACTER(len_str) :: domain_mask_type="" - LOGICAL :: scalar_mask - CHARACTER(len_str) :: scalar_mask_type="" + LOGICAL :: domain_mask LOGICAL :: axis_mask LOGICAL :: mask3d INTEGER :: field_sub_freq @@ -56,8 +52,7 @@ PROGRAM generic_testcase LOGICAL :: i_am_atm, i_am_oce, i_am_surf, i_am_server INTEGER :: rank, size_loc - INTEGER :: nb_procs(4) - LOGICAL :: who_i_am(4) + OPEN(unit=unit, file='param.def',status='old',iostat=ierr) nb_proc_atm=1 @@ -81,7 +76,6 @@ PROGRAM generic_testcase CALL MPI_ABORT() endif - nb_proc_server=size_loc-(nb_proc_atm + nb_proc_oce + nb_proc_surf) i_am_atm=.FALSE. ; i_am_oce=.FALSE. ; i_am_surf=.FALSE. ; i_am_server=.FALSE. IF (proc_distribution=="contiguous") THEN @@ -97,14 +91,7 @@ PROGRAM generic_testcase ELSE i_am_server=.TRUE. ENDIF ; - ELSE IF (proc_distribution=="cyclic") THEN - ! server ranks are dispatched all along the partition - nb_procs(1)=nb_proc_atm ; nb_procs(2)=nb_proc_oce ; nb_procs(3)=nb_proc_surf ; nb_procs(4)=nb_proc_server - CALL compute_cyclic_distribution(rank, nb_procs, who_i_am ) - i_am_atm=who_i_am(1) - i_am_oce=who_i_am(2) - i_am_surf=who_i_am(3) - i_am_server=who_i_am(4) + ENDIF @@ -114,12 +101,11 @@ PROGRAM generic_testcase ELSE IF (i_am_atm) CALL model("atm") - IF (i_am_oce) CALL model("oce") - IF (i_am_surf) CALL model("surf") CALL xios_finalize() ENDIF + print*, "finished Successfully" CALL MPI_FINALIZE(ierr) CONTAINS @@ -143,7 +129,6 @@ CONTAINS LOGICAL, POINTER :: domain_mask(:) INTEGER, POINTER :: domain_index(:) LOGICAL, POINTER :: axis_mask(:) - LOGICAL :: scalar_mask INTEGER, POINTER :: axis_index(:) DOUBLE PRECISION, POINTER :: ensemble_value(:) @@ -163,7 +148,6 @@ CONTAINS DOUBLE PRECISION, POINTER :: fieldXY_init(:,:) DOUBLE PRECISION, POINTER :: field2D(:), other_field2D(:) - DOUBLE PRECISION :: field0D, other_field0D DOUBLE PRECISION, POINTER :: field_X(:), other_field_X(:) DOUBLE PRECISION, POINTER :: field_Y(:), other_field_Y(:) DOUBLE PRECISION, POINTER :: field_Z(:), other_field_Z(:) @@ -176,10 +160,9 @@ CONTAINS DOUBLE PRECISION, POINTER :: field3D(:,:), other_field3D(:,:) DOUBLE PRECISION, POINTER :: field3D_sub(:,:), other_field3D_sub(:,:) DOUBLE PRECISION, POINTER :: field3D_recv(:,:), other_field3D_recv(:,:) - DOUBLE PRECISION, POINTER :: pressure(:,:), other_pressure(:,:) + DOUBLE PRECISION, POINTER :: pressure(:,:), other_pressure(:,:), pressure_shifted(:,:) DOUBLE PRECISION, POINTER :: field2D_W(:,:), other_field2D_W(:,:) - DOUBLE PRECISION, POINTER :: field0D_W(:), other_field0D_W(:) DOUBLE PRECISION, POINTER :: field_XW(:,:), other_field_XW(:,:) DOUBLE PRECISION, POINTER :: field_YW(:,:), other_field_YW(:,:) DOUBLE PRECISION, POINTER :: field_ZW(:,:), other_field_ZW(:,:) @@ -204,17 +187,19 @@ CONTAINS LOGICAL :: ok INTEGER :: ierr - LOGICAL :: ok_field0D, ok_field2D, ok_field3D, ok_pressure, ok_field2D_sub, ok_field3D_sub,ok_field3D_recv, ok_field3D_send + LOGICAL :: ok_field2D, ok_field3D, ok_pressure_shifted, ok_pressure, ok_field2D_sub, ok_field3D_sub,ok_field3D_recv, ok_field3D_send LOGICAL :: ok_field_X, ok_field_Y, ok_field_XY, ok_field_Z, ok_field_XYZ, ok_field_XZ, ok_field_YZ - LOGICAL :: ok_field0D_W, ok_field2D_W, ok_field3D_W, ok_pressure_W, ok_field2D_sub_W, ok_field3D_sub_W,ok_field3D_recv_W, ok_field3D_send_W + LOGICAL :: ok_field2D_W, ok_field3D_W, ok_pressure_W, ok_field2D_sub_W, ok_field3D_sub_W,ok_field3D_recv_W, ok_field3D_send_W LOGICAL :: ok_field_XW, ok_field_YW, ok_field_XYW, ok_field_ZW, ok_field_XYZW, ok_field_XZW, ok_field_YZW - LOGICAL :: ok_other_field0D, ok_other_field2D, ok_other_field3D, ok_other_pressure, ok_other_field2D_sub, ok_other_field3D_sub,ok_other_field3D_recv, ok_other_field3D_send - LOGICAL :: ok_other_field_X, ok_other_field_Y, ok_other_field_XY, ok_other_field_Z, ok_other_field_XYZ, ok_other_field_XZ, ok_other_field_YZ - LOGICAL :: ok_other_field0D_W, ok_other_field2D_W, ok_other_field3D_W, ok_other_pressure_W, ok_other_field2D_sub_W, ok_other_field3D_sub_W,ok_other_field3D_recv_W, ok_other_field3D_send_W - LOGICAL :: ok_other_field_XW, ok_other_field_YW, ok_other_field_XYW, ok_other_field_ZW, ok_other_field_XYZW, ok_other_field_XZW, ok_other_field_YZW - - TYPE(xios_domain) :: domain_handle + LOGICAL :: ok_other_field2D, ok_other_field3D, ok_other_pressure, ok_other_field2D_sub, ok_other_field3D_sub, & + ok_other_field3D_recv, ok_other_field3D_send + LOGICAL :: ok_other_field_X, ok_other_field_Y, ok_other_field_XY, ok_other_field_Z, ok_other_field_XYZ, & + ok_other_field_XZ, ok_other_field_YZ + LOGICAL :: ok_other_field2D_W, ok_other_field3D_W, ok_other_pressure_W, ok_other_field2D_sub_W, ok_other_field3D_sub_W, & + ok_other_field3D_recv_W, ok_other_field3D_send_W + LOGICAL :: ok_other_field_XW, ok_other_field_YW, ok_other_field_XYW, ok_other_field_ZW, ok_other_field_XYZW, & + ok_other_field_XZW, ok_other_field_YZW !! XIOS Initialization (get the local communicator) CALL xios_initialize(trim(model_id),return_comm=comm) @@ -251,7 +236,6 @@ CONTAINS Y_lon, Y_lat, Y_mask, Y_index) CALL init_axis("axis", comm, params, axis_value, axis_mask, axis_index) - CALL init_scalar("scalar", comm, params, scalar_mask) CALL init_ensemble("ensemble", comm, params, ensemble_value) CALL set_mask3d("grid3D",params, ni, nj, lon, lat , axis_value) @@ -305,8 +289,10 @@ CONTAINS z=size(axis_index) w=size(ensemble_value) + ALLOCATE(field2D(0:xy-1)) ALLOCATE(field3D(0:xy-1,0:z-1)) + ALLOCATE(pressure_shifted(0:xy-1,0:z-1)) ALLOCATE(pressure(0:xy-1,0:z-1)) ALLOCATE(field3D_recv(0:xy-1,0:z-1)) ALLOCATE(field_Z(0:z-1)) @@ -328,7 +314,6 @@ CONTAINS ALLOCATE(field_XYZW(0:x-1,0:y-1,0:z-1,0:w-1)) ALLOCATE(field_XZW(0:x-1,0:z-1,0:w-1)) ALLOCATE(field_YZW(0:y-1,0:z-1,0:w-1)) - ALLOCATE(field0D_W(0:w-1)) @@ -373,19 +358,19 @@ CONTAINS pressure=1e20 DO j=0,z-1 - pressure(:,j)=axis_value(j)*100000 ; ! Pa + pressure(:,j)=axis_value(j) * 100000; DO i=0,xy-1 IF (domain_index(i)/=-1) THEN k=domain_index(i) IF (domain_mask(k)) THEN dist=sqrt((lat(k)/90.)**2+(lon(k)/180.)**2) ; pressure(i,j)=pressure(i,j)*(1+params%pressure_factor*exp(-(4*dist)**2)) + pressure_shifted(i,j)=pressure(i,j)+5000 ENDIF ENDIF ENDDO ENDDO - field0D=1 field2D_W(:,0) = field2D(:)*(1+0.1*ensemble_value(0)) @@ -398,10 +383,10 @@ CONTAINS field_XYZW(:,:,:,0) = field_XYZ(:,:,:)*(1+0.1*ensemble_value(0)) field_XZW(:,:,0) = field_XZ(:,:)*(1+0.1*ensemble_value(0)) field_YZW(:,:,0) = field_YZ(:,:)*(1+0.1*ensemble_value(0)) - field0D_W(0) = field0D*(1+0.1*ensemble_value(0)) ok_field2D=xios_is_valid_field("field2D") ; ok_field3D=xios_is_valid_field("field3D") ; + ok_pressure_shifted=xios_is_valid_field("pressure_shifted") ; ok_pressure=xios_is_valid_field("pressure") ; ok_field2D_sub=xios_is_valid_field("field2D_sub") ; ok_field3D_sub=xios_is_valid_field("field3D_sub") ; @@ -412,7 +397,6 @@ CONTAINS ok_field_XYZ=xios_is_valid_field("field_XYZ") ; ok_field_XZ=xios_is_valid_field("field_XZ") ; ok_field_YZ=xios_is_valid_field("field_YZ") ; - ok_field0D=xios_is_valid_field("field0D") ; ok_field2D_W=xios_is_valid_field("field2D_W") ; ok_field3D_W=xios_is_valid_field("field3D_W") ; @@ -426,7 +410,6 @@ CONTAINS ok_field_XYZW=xios_is_valid_field("field_XYZW") ; ok_field_XZW=xios_is_valid_field("field_XZW") ; ok_field_YZW=xios_is_valid_field("field_YZW") ; - ok_field0D_W=xios_is_valid_field("field0D_W") ; @@ -461,7 +444,6 @@ CONTAINS Y_lon, Y_lat, Y_mask, Y_index) CALL init_axis("other_axis", comm, other_params, axis_value, axis_mask, axis_index) - CALL init_scalar("other_scalar", comm, params, scalar_mask) CALL init_ensemble("other_ensemble", comm, other_params, ensemble_value) CALL set_mask3d("other_grid3D",other_params, ni, nj, lon, lat , axis_value) @@ -538,7 +520,6 @@ CONTAINS ALLOCATE(other_field_XYZW(0:x-1,0:y-1,0:z-1,0:w-1)) ALLOCATE(other_field_XZW(0:x-1,0:z-1,0:w-1)) ALLOCATE(other_field_YZW(0:y-1,0:z-1,0:w-1)) - ALLOCATE(other_field0D_W(0:w-1)) @@ -583,7 +564,7 @@ CONTAINS other_pressure=1e20 DO j=0,z-1 - other_pressure(:,j)=axis_value(j)*100000 ; ! Pa + other_pressure(:,j)=axis_value(j) * 100000 ; DO i=0,xy-1 IF (domain_index(i)/=-1) THEN k=domain_index(i) @@ -595,7 +576,6 @@ CONTAINS ENDDO ENDDO - other_field0D = 1 other_field2D_W(:,0) = other_field2D(:)*(1+0.1*ensemble_value(0)) @@ -608,7 +588,6 @@ CONTAINS other_field_XYZW(:,:,:,0) = other_field_XYZ(:,:,:)*(1+0.1*ensemble_value(0)) other_field_XZW(:,:,0) = other_field_XZ(:,:)*(1+0.1*ensemble_value(0)) other_field_YZW(:,:,0) = other_field_YZ(:,:)*(1+0.1*ensemble_value(0)) - other_field0D_W(0) = other_field0D*(1+0.1*ensemble_value(0)) ok_other_field2D=xios_is_valid_field("other_field2D") ; @@ -623,7 +602,6 @@ CONTAINS ok_other_field_XYZ=xios_is_valid_field("other_field_XYZ") ; ok_other_field_XZ=xios_is_valid_field("other_field_XZ") ; ok_other_field_YZ=xios_is_valid_field("other_field_YZ") ; - ok_other_field0D=xios_is_valid_field("other_field0D") ; ok_other_field2D_W=xios_is_valid_field("other_field2D_W") ; ok_other_field3D_W=xios_is_valid_field("other_field3D_W") ; @@ -637,7 +615,6 @@ CONTAINS ok_other_field_XYZW=xios_is_valid_field("other_field_XYZW") ; ok_other_field_XZW=xios_is_valid_field("other_field_XZW") ; ok_other_field_YZW=xios_is_valid_field("other_field_YZW") ; - ok_other_field0D_W=xios_is_valid_field("other_field0D_W") ; !!!!!!!!!!!!!!!!!!!!! end of duplicated section !!!!!!!!!!!!!!!!!!!!!!!!!! @@ -646,15 +623,17 @@ CONTAINS cdate=cdate+dtime CALL xios_close_context_definition() CALL xios_set_current_context(trim(model_id)) -! CALL xios_get_handle("field3D::domain",domain_handle) + DO while ( cdate <= edate ) !!! Mise a jour du pas de temps CALL xios_update_calendar(ts) + IF (ok_field2D) CALL xios_send_field("field2D",field2D) IF (ok_field3D) CALL xios_send_field("field3D",field3D) + IF (ok_pressure_shifted) CALL xios_send_field("pressure_shifted",pressure_shifted) IF (ok_pressure) CALL xios_send_field("pressure",pressure) IF (ok_field_X) CALL xios_send_field("field_X",field_X) IF (ok_field_Y) CALL xios_send_field("field_Y",field_Y) @@ -663,7 +642,6 @@ CONTAINS IF (ok_field_XYZ) CALL xios_send_field("field_XYZ",field_XYZ) IF (ok_field_XZ) CALL xios_send_field("field_XZ",field_XZ) IF (ok_field_YZ) CALL xios_send_field("field_YZ",field_YZ) - IF (ok_field0D) CALL xios_send_field("field0D",field0D) IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN IF (ok_field2D_sub) CALL xios_send_field("field2D_sub",field2D*10) @@ -688,7 +666,6 @@ CONTAINS IF (ok_field_XYZW) CALL xios_send_field("field_XYZW",field_XYZW) IF (ok_field_XZW) CALL xios_send_field("field_XZW",field_XZW) IF (ok_field_YZW) CALL xios_send_field("field_YZW",field_YZW) - IF (ok_field0D_W) CALL xios_send_field("field0D_W",field0D_W) IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN IF (ok_field2D_sub_W) CALL xios_send_field("field2D_sub_W",field2D_W*10) @@ -704,7 +681,6 @@ CONTAINS field2D=field2D+1 field3D=field3D+1 - field0D=field0D+1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! duplicated section for other_ ! @@ -721,7 +697,6 @@ CONTAINS IF (ok_other_field_XY) CALL xios_send_field("other_field_XYZ", other_field_XYZ) IF (ok_other_field_XY) CALL xios_send_field("other_field_XZ", other_field_XZ) IF (ok_other_field_XY) CALL xios_send_field("other_field_YZ", other_field_YZ) - IF (ok_other_field0D) CALL xios_send_field("other_field0D", other_field0D) IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN IF (ok_other_field2D_sub) CALL xios_send_field("other_field2D_sub",other_field2D*10) @@ -739,14 +714,13 @@ CONTAINS IF (ok_other_field2D_W) CALL xios_send_field("other_field2D_W",other_field2D_W) IF (ok_other_field3D_W) CALL xios_send_field("other_field3D_W",other_field3D_W) IF (ok_other_pressure_W) CALL xios_send_field("other_pressure_W",other_pressure_W) - IF (ok_other_field_XW) CALL xios_send_field("other_field_XW",other_field_XW) - IF (ok_other_field_YW) CALL xios_send_field("other_field_YW",other_field_YW) + IF (ok_other_field_XW) CALL xios_send_field("other_field_XW",other_field_XW) + IF (ok_other_field_YW) CALL xios_send_field("other_field_YW",other_field_YW) IF (ok_other_field_XYW) CALL xios_send_field("other_field_XYW",other_field_XYW) - IF (ok_other_field_ZW) CALL xios_send_field("other_field_ZW",other_field_ZW) + IF (ok_other_field_ZW) CALL xios_send_field("other_field_ZW",other_field_ZW) IF (ok_other_field_XYW) CALL xios_send_field("other_field_XYZW",other_field_XYZW) IF (ok_other_field_XYW) CALL xios_send_field("other_field_XZW",other_field_XZW) IF (ok_other_field_XYW) CALL xios_send_field("other_field_YZW",other_field_YZW) - IF (ok_other_field0D_W) CALL xios_send_field("other_field0D_W",other_field0D_W) IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN IF (ok_other_field2D_sub_W) CALL xios_send_field("other_field2D_sub_W",other_field2D_W*10) @@ -762,7 +736,6 @@ CONTAINS other_field2D=other_field2D+1 other_field3D=other_field3D+1 - other_field0D=other_field0D+1 !!!!!!!!!!!!!!!!!!!!!! end of duplicated section !!!!!!!!!!!!!!!!! @@ -789,9 +762,6 @@ CONTAINS IF (.NOT. xios_getvar(prefix//"timestep", params%timestep) ) params%timestep="1h" IF (.NOT. xios_getvar(prefix//"domain", params%domain) ) params%domain="lmdz" IF (.NOT. xios_getvar(prefix//"domain_mask", params%domain_mask) ) params%domain_mask=.FALSE. - IF (.NOT. xios_getvar(prefix//"domain_mask_type", params%domain_mask_type) ) params%domain_mask_type="cross" - IF (.NOT. xios_getvar(prefix//"scalar_mask", params%scalar_mask) ) params%scalar_mask=.FALSE. - IF (.NOT. xios_getvar(prefix//"scalar_mask_type", params%scalar_mask_type) ) params%scalar_mask_type="none" IF (.NOT. xios_getvar(prefix//"axis", params%axis) ) params%axis="pressure" IF (.NOT. xios_getvar(prefix//"axis_mask", params%axis_mask) ) params%axis_mask=.FALSE. IF (.NOT. xios_getvar(prefix//"ni", params%ni) ) params%ni=36 @@ -939,12 +909,14 @@ CONTAINS INTEGER :: axis_proc_rank, axis_proc_size INTEGER :: ensemble_proc_size, ensemble_proc_rank - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) ALLOCATE(return_value(0:0)) return_value(0)=ensemble_proc_rank IF (xios_is_valid_axis(TRIM(ensemble_id))) THEN - CALL xios_set_axis_attr(ensemble_id, n_glo=ensemble_proc_size, begin=ensemble_proc_rank, n=1, value=return_value(:), unit='-') + CALL xios_set_axis_attr(ensemble_id, n_glo=ensemble_proc_size, begin=ensemble_proc_rank, n=1, value=return_value(:), & + unit='-') ENDIF END SUBROUTINE init_ensemble @@ -1036,7 +1008,8 @@ CONTAINS CALL MPI_COMM_RANK(comm,mpi_rank,ierr) CALL MPI_COMM_SIZE(comm,mpi_size,ierr) - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) mpi_rank=domain_proc_rank mpi_size=domain_proc_size @@ -1231,7 +1204,8 @@ CONTAINS IF (xios_is_valid_domain(TRIM(domain_id))) THEN CALL xios_set_domain_attr(TRIM(domain_id), type="unstructured", ni_glo=ncell_glo, ni=ncell, ibegin=0, i_index=i_index) CALL xios_set_domain_attr(TRIM(domain_id), data_dim=1, data_ni=data_n_index, data_i_index=data_i_index, mask_1d=return_mask) - CALL xios_set_domain_attr(TRIM(domain_id), lonvalue_1D=lon, latvalue_1D=lat, nvertex=4, bounds_lon_1D=bounds_lon, bounds_lat_1D=bounds_lat) + CALL xios_set_domain_attr(TRIM(domain_id), lonvalue_1D=lon, latvalue_1D=lat, nvertex=4, bounds_lon_1D=bounds_lon, & + bounds_lat_1D=bounds_lat) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN @@ -1249,7 +1223,7 @@ CONTAINS - SUBROUTINE init_domain_dynamico(domain_id, comm, params, return_ni, return_nj, & + SUBROUTINE init_domain_dynamico(domain_id, comm, params, return_ni, return_nj, & return_lon,return_lat,return_mask, return_index, & return_X_lon,return_X_lat, return_X_mask, return_X_index, & return_Y_lon,return_Y_lat, return_Y_mask, return_Y_index) @@ -1291,15 +1265,18 @@ CONTAINS CALL MPI_COMM_RANK(comm,mpi_rank,ierr) CALL MPI_COMM_SIZE(comm,mpi_size,ierr) - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) CALL xios_get_current_context(ctx_hdl) CALL xios_context_initialize("grid_dynamico",comm) CALL xios_close_context_definition() - CALL xios_get_domain_attr("Ai::",ni_glo=ni_glo,nj_glo=nj_glo,ni=ni,nj=nj, ibegin=ibegin, jbegin=jbegin ,nvertex=nvertex) + CALL xios_get_domain_attr("domain_dynamico",ni_glo=ni_glo,nj_glo=nj_glo,ni=ni,nj=nj, ibegin=ibegin, jbegin=jbegin , & + nvertex=nvertex) ALLOCATE(lon(ni),lat(ni),bounds_lon(nvertex,ni),bounds_lat(nvertex,ni)) - CALL xios_get_domain_attr("Ai::", lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, bounds_lat_1d=bounds_lat) + CALL xios_get_domain_attr("domain_dynamico", lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, & + bounds_lat_1d=bounds_lat) CALL xios_context_finalize CALL xios_set_current_context(ctx_hdl) @@ -1317,8 +1294,10 @@ CONTAINS CALL MPI_AllgatherV(lon, ni, MPI_REAL8, lon_glo, ni_all, ibegin_all, MPI_REAL8, comm, ierr) CALL MPI_AllgatherV(lat, ni, MPI_REAL8, lat_glo, ni_all, ibegin_all, MPI_REAL8, comm, ierr) - CALL MPI_AllgatherV(bounds_lon, ni*nvertex, MPI_REAL8, bounds_lon_glo, ni_all*nvertex, ibegin_all*nvertex, MPI_REAL8, comm, ierr) - CALL MPI_AllgatherV(bounds_lat, ni*nvertex, MPI_REAL8, bounds_lat_glo, ni_all*nvertex, ibegin_all*nvertex, MPI_REAL8, comm, ierr) + CALL MPI_AllgatherV(bounds_lon, ni*nvertex, MPI_REAL8, bounds_lon_glo, ni_all*nvertex, ibegin_all*nvertex, & + MPI_REAL8, comm, ierr) + CALL MPI_AllgatherV(bounds_lat, ni*nvertex, MPI_REAL8, bounds_lat_glo, ni_all*nvertex, ibegin_all*nvertex, & + MPI_REAL8, comm, ierr) nbp_glo=ni_glo @@ -1384,7 +1363,8 @@ CONTAINS IF (xios_is_valid_domain(TRIM(domain_id))) THEN CALL xios_set_domain_attr(TRIM(domain_id), type="unstructured", ni_glo=ni_glo, ibegin=offset, ni=nbp, nvertex=nvertex) - CALL xios_set_domain_attr(TRIM(domain_id), data_dim=1, lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, bounds_lat_1d=bounds_lat, mask_1d=return_mask) + CALL xios_set_domain_attr(TRIM(domain_id), data_dim=1, lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, & + bounds_lat_1d=bounds_lat, mask_1d=return_mask) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN @@ -1440,7 +1420,8 @@ CONTAINS CALL MPI_COMM_RANK(comm,mpi_rank,ierr) CALL MPI_COMM_SIZE(comm,mpi_size,ierr) - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) ni_glo=params%ni nj_glo=params%nj nbp_glo=ni_glo*nj_glo @@ -1523,16 +1504,17 @@ CONTAINS return_nj=nj IF (xios_is_valid_domain(TRIM(domain_id))) THEN - CALL xios_set_domain_attr(TRIM(domain_id), type="rectilinear", ni_glo=ni_glo, ibegin=ibegin, ni=ni, nj_glo=nj_glo, jbegin=jbegin, nj=nj) + CALL xios_set_domain_attr(TRIM(domain_id), type="rectilinear", ni_glo=ni_glo, ibegin=ibegin, ni=ni, nj_glo=nj_glo, & + jbegin=jbegin, nj=nj) CALL xios_set_domain_attr(TRIM(domain_id), data_dim=2, lonvalue_1d=lon, latvalue_1d=lat, mask_1d=return_mask) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, value=return_X_lon, mask=return_X_mask) + CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, value=return_X_lon) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_Y")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, value=return_Y_lat, mask=return_Y_mask) + CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, value=return_Y_lat) ENDIF END SUBROUTINE init_domain_lmdz @@ -1577,7 +1559,8 @@ CONTAINS CALL MPI_COMM_RANK(comm,mpi_rank,ierr) CALL MPI_COMM_SIZE(comm,mpi_size,ierr) - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) ni_glo=params%ni nj_glo=params%nj nbp_glo=ni_glo*nj_glo @@ -1642,7 +1625,7 @@ CONTAINS DO i=0,ni-1 i_glo=i j_glo=jbegin+j - ij=j_glo*ni_glo+i_glo + ij=j*ni+i IF ( ij>=ij_begin .AND. ij<=ij_end) THEN IF ((MOD(j_glo,3)==1 .OR. MOD(j_glo,3)==2) .AND. (MOD(i_glo,5)==3 .OR. MOD(i_glo,5)==4)) CYCLE pos=pos+1 @@ -1657,7 +1640,7 @@ CONTAINS DO i=0,ni-1 i_glo=i j_glo=jbegin+j - ij=j_glo*ni_glo+i_glo + ij=j*ni+i IF ( ij>=ij_begin .AND. ij<=ij_end) THEN IF ((MOD(j_glo,3)==1 .OR. MOD(j_glo,3)==2) .AND. (MOD(i_glo,5)==3 .OR. MOD(i_glo,5)==4)) CYCLE return_index(pos)=i+j*ni @@ -1722,17 +1705,20 @@ CONTAINS return_nj=nj IF (xios_is_valid_domain(TRIM(domain_id))) THEN - CALL xios_set_domain_attr(TRIM(domain_id), type="rectilinear", ni_glo=ni_glo, ibegin=ibegin, ni=ni, nj_glo=nj_glo, jbegin=jbegin, nj=nj) + CALL xios_set_domain_attr(TRIM(domain_id), type="rectilinear", ni_glo=ni_glo, ibegin=ibegin, ni=ni, nj_glo=nj_glo, & + jbegin=jbegin, nj=nj) CALL xios_set_domain_attr(TRIM(domain_id), data_dim=1, data_ni=size(return_index), data_i_index=return_index) CALL xios_set_domain_attr(TRIM(domain_id), lonvalue_1d=lon, latvalue_1d=lat, mask_1d=mask) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, value=return_X_lon, data_n=size(return_X_index), data_index=return_X_index) + CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, value=return_X_lon, & + data_n=size(return_X_index), data_index=return_X_index) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_Y")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, value=return_Y_lat, data_n=size(return_Y_index), data_index=return_Y_index) + CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, value=return_Y_lat, & + data_n=size(return_Y_index), data_index=return_Y_index) ENDIF END SUBROUTINE init_domain_orchidee @@ -1781,7 +1767,8 @@ CONTAINS CALL MPI_COMM_RANK(comm,mpi_rank,ierr) CALL MPI_COMM_SIZE(comm,mpi_size,ierr) - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) ni_glo=params%ni nj_glo=params%nj @@ -1951,13 +1938,17 @@ CONTAINS IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_begin=-offset_i, data_n=ni+2*offset_i, value=return_X_lon, mask=return_X_mask) -! CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_index=return_X_index, data_n=ni+2*offset_i, value=return_X_lon) + CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_begin=-offset_i, & + data_n=ni+2*offset_i, value=return_X_lon, mask=return_X_mask) +! CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_index=return_X_index,& +! data_n=ni+2*offset_i, value=return_X_lon) ENDIF IF (xios_is_valid_axis(TRIM(domain_id)//"_Y")) THEN - CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_begin=-offset_j, data_n=nj+2*offset_j, value=return_Y_lat, mask=return_Y_mask) -! CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_index=return_Y_index, data_n=nj+2*offset_j, value=return_Y_lat, mask=return_Y_mask) + CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_begin=-offset_j, & + data_n=nj+2*offset_j, value=return_Y_lat, mask=return_Y_mask) +! CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_index=return_Y_index, & +! data_n=nj+2*offset_j, value=return_Y_lat) ENDIF END SUBROUTINE init_domain_nemo @@ -1976,12 +1967,8 @@ CONTAINS mask(:)=.TRUE. IF (params%domain_mask) THEN - IF (params%domain_mask_type=="cross") THEN - WHERE (lon(:)-2*lat(:)>-10 .AND. lon(:)-2*lat(:) <10) mask(:)=.FALSE. - WHERE (2*lat(:)+lon(:)>-10 .AND. 2*lat(:)+lon(:)<10) mask(:)=.FALSE. - ELSE IF (params%domain_mask_type=="latitude_band") THEN - WHERE (lat(:)>-30 .AND. lat(:)<30) mask(:)=.FALSE. - ENDIF + WHERE (lon(:)-2*lat(:)>-10 .AND. lon(:)-2*lat(:) <10) mask(:)=.FALSE. + WHERE (2*lat(:)+lon(:)>-10 .AND. 2*lat(:)+lon(:)<10) mask(:)=.FALSE. ENDIF END SUBROUTINE set_domain_mask @@ -2044,7 +2031,8 @@ CONTAINS INTEGER :: axis_proc_rank, axis_proc_size INTEGER :: ensemble_proc_size, ensemble_proc_rank - CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + CALL get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) nlev_glo=params%nlev @@ -2084,7 +2072,8 @@ CONTAINS return_value=value return_mask=.TRUE. CALL set_axis_mask(params,value,return_mask) - CALL xios_set_axis_attr(axis_id, n_glo=nlev_glo, begin=begin, n=nlev, value=value*100000, mask=return_mask, bounds=bounds_value*100000, unit='Pa', positive='up') + CALL xios_set_axis_attr(axis_id, n_glo=nlev_glo, begin=begin, n=nlev, value=value*100000, mask=return_mask, & + bounds=bounds_value*100000, unit='Pa', positive='up') ALLOCATE(return_index(0:nlev-1)) @@ -2102,55 +2091,17 @@ CONTAINS DOUBLE PRECISION :: value(:) LOGICAL :: mask(:) INTEGER :: i,x - - mask(:)=.TRUE. + x=size(mask) IF (params%axis_mask) THEN DO i=0,x-1 - IF (MOD(i,3)==0) mask(i+1)=.FALSE. - IF (MOD(i,4)==0) mask(i+1)=.FALSE. + IF (MOD(i,3)==0) mask(i)=.FALSE. + IF (MOD(i,4)==0) mask(i)=.FALSE. ENDDO ENDIF END SUBROUTINE set_axis_mask - SUBROUTINE init_scalar(scalar_id, comm, params, return_mask) - IMPLICIT NONE - CHARACTER(LEN=*) :: scalar_id - TYPE(tmodel_params) :: params - INTEGER :: comm - LOGICAL :: return_mask - DOUBLE PRECISION :: value =10. - - CALL set_scalar_mask(comm, params, return_mask) - CALL xios_set_scalar_attr(scalar_id, value=value, mask=return_mask) - - END SUBROUTINE init_scalar - - SUBROUTINE set_scalar_mask(comm, params, mask) - IMPLICIT NONE - TYPE(tmodel_params) :: params - INTEGER :: comm - LOGICAL :: mask - INTEGER :: ierr,rank - - mask=.TRUE. - IF (params%scalar_mask) THEN - IF (params%scalar_mask_type=="none") THEN - mask=.TRUE. - ELSE IF (params%scalar_mask_type=="full") THEN - mask=.FALSE. - ELSE IF (params%scalar_mask_type=="root") THEN - CALL MPI_COMM_RANK(comm,rank,ierr) - mask = (rank==0) - ELSE IF (params%scalar_mask_type=="sparse") THEN - CALL MPI_COMM_RANK(comm,rank,ierr) - mask = (MOD(rank,2)==0) - ENDIF - ENDIF - - END SUBROUTINE set_scalar_mask - SUBROUTINE init_field2D_academic(comm,params, lon, lat, mask, return_field, & X_lon, X_lat, X_mask, return_fieldX, & Y_lon, Y_lat, Y_mask, return_fieldY, return_fieldXY) @@ -2318,7 +2269,8 @@ CONTAINS - SUBROUTINE get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, ensemble_proc_size, ensemble_proc_rank) + SUBROUTINE get_decomposition(comm, params, domain_proc_size, domain_proc_rank, axis_proc_size, axis_proc_rank, & + ensemble_proc_size, ensemble_proc_rank) IMPLICIT NONE INTEGER,INTENT(IN) :: comm TYPE(tmodel_params) :: params @@ -2436,87 +2388,6 @@ CONTAINS END SUBROUTINE get_decomposition - SUBROUTINE compute_cyclic_distribution(rank, nb_procs, who_i_am) - IMPLICIT NONE - INTEGER,INTENT(IN) :: rank - INTEGER,INTENT(IN) :: nb_procs(:) - LOGICAL,INTENT(OUT) :: who_i_am(:) - INTEGER :: start(SIZE(nb_procs)) - INTEGER :: nb_comp - INTEGER :: nb_client - INTEGER :: nb_server - INTEGER :: current - INTEGER :: current_client - INTEGER :: i,j,k,nq,q,r - - who_i_am=.FALSE. - nb_comp = SIZE(nb_procs) - nb_client = SUM(nb_procs(1:nb_comp-1)) - nb_server = nb_procs(nb_comp) - - start(1)=0 - DO k=2,nb_comp - start(k)=start(k-1)+nb_procs(k-1) - ENDDO - - current=0 - current_client=0 - - IF (nb_client >= nb_server) THEN - q=nb_client/nb_server - r=MOD(nb_client,nb_server) - - DO i=1,nb_server - IF (i<=r) THEN ; nq=q+1 ; ELSE ; nq=q ; ENDIF - DO j=1,nq - IF (current==rank) THEN - DO k=1,nb_comp-1 - IF (current_client >= start(k) .AND. current_client= start(k) .AND. current_client - -namespace xios -{ - const size_t timeLineEventbase = std::numeric_limits::max()-100 ; - const size_t timelineEventNotifyChangeBufferSize = timeLineEventbase + 0 ; - const size_t timelineEventChangeBufferSize = timeLineEventbase + 1 ; -} - - -#endif \ No newline at end of file diff --git a/xios_2311_src/src/timer.cpp b/xios_2311_src/src/timer.cpp index e1659d46..3bf08138 100644 --- a/xios_2311_src/src/timer.cpp +++ b/xios_2311_src/src/timer.cpp @@ -10,9 +10,8 @@ namespace xios { std::map CTimer::allTimer; - CTimer::CTimer(const std::string& name_, bool trace) : name(name_) + CTimer::CTimer(const std::string& name_) : name(name_) { - isTracing_=trace ; reset(); } @@ -25,7 +24,7 @@ namespace xios { if (!suspended) { - if (isTracing_) traceEnd(name); + traceEnd(name); cumulatedTime += getTime() - lastTime; } suspended = true; @@ -36,7 +35,7 @@ namespace xios if (suspended) { lastTime = getTime(); - if (isTracing_) traceBegin(name); + traceBegin(name); } suspended = false; } @@ -52,11 +51,11 @@ namespace xios return cumulatedTime; } - CTimer& CTimer::get(const std::string name, bool trace) + CTimer& CTimer::get(const std::string name) { std::map::iterator it = allTimer.find(name); if (it == allTimer.end()) - it = allTimer.insert(std::make_pair(name, CTimer(name,trace))).first; + it = allTimer.insert(std::make_pair(name, CTimer(name))).first; return it->second; } diff --git a/xios_2311_src/src/timer.hpp b/xios_2311_src/src/timer.hpp index 5ea4e872..b4a580b3 100644 --- a/xios_2311_src/src/timer.hpp +++ b/xios_2311_src/src/timer.hpp @@ -12,19 +12,17 @@ namespace xios double cumulatedTime; double lastTime; bool suspended; - bool isTracing_ ; std::string name; - CTimer(const std::string& name, bool trace=true); + CTimer(const std::string& name); void suspend(void); void resume(void); void reset(void); double getCumulatedTime(void); static std::map allTimer; static double getTime(void); - static CTimer& get(std::string name, bool trace=true); + static CTimer& get(std::string name); static std::string getAllCumulatedTime(void) ; - static void release(void) { allTimer.clear() ;} }; } diff --git a/xios_2311_src/src/tracer.cpp b/xios_2311_src/src/tracer.cpp index 963ad090..7551b958 100644 --- a/xios_2311_src/src/tracer.cpp +++ b/xios_2311_src/src/tracer.cpp @@ -24,15 +24,9 @@ namespace xios std::map regionId ; int count=0 ; - bool traceIsOn=true ; - int stackOnOffdeep=0 ; void traceOn(void) { - stackOnOffdeep-- ; - if (stackOnOffdeep!=0) return ; - traceIsOn=true; - #if defined(VTRACE) VT_ON() ; #elif defined(SCOREP) @@ -44,9 +38,6 @@ namespace xios void traceOff(void) { - stackOnOffdeep++ ; - if (stackOnOffdeep!=1) return ; - traceIsOn=false; #if defined(VTRACE) VT_OFF() ; #elif defined(SCOREP) @@ -59,8 +50,7 @@ namespace xios void traceBegin(const string& name) { #if defined(VTRACE) - - if (traceIsOn) VT_USER_START(name.c_str()) ; + VT_USER_START(name.c_str()) ; #elif defined(SCOREP) SCOREP_USER_REGION_BY_NAME_BEGIN(name.c_str(),SCOREP_USER_REGION_TYPE_COMMON) @@ -85,7 +75,7 @@ namespace xios void traceEnd(const string& name) { #if defined (VTRACE) - if (traceIsOn) VT_USER_END(name.c_str()) ; + VT_USER_END(name.c_str()) ; #elif defined(SCOREP) SCOREP_USER_REGION_BY_NAME_END(name.c_str()) #elif defined(ITAC) diff --git a/xios_2311_src/src/transformation/Functions/average_reduction.hpp b/xios_2311_src/src/transformation/Functions/average_reduction.hpp index 739346c0..1b697825 100644 --- a/xios_2311_src/src/transformation/Functions/average_reduction.hpp +++ b/xios_2311_src/src/transformation/Functions/average_reduction.hpp @@ -32,6 +32,8 @@ public: virtual ~CAverageReductionAlgorithm() {} + virtual StdString getName() {return "Average reduction";} + protected: CArray weights_; bool resetWeight_; diff --git a/xios_2311_src/src/transformation/Functions/extract.hpp b/xios_2311_src/src/transformation/Functions/extract.hpp index b1c530d4..f1133cbd 100644 --- a/xios_2311_src/src/transformation/Functions/extract.hpp +++ b/xios_2311_src/src/transformation/Functions/extract.hpp @@ -30,6 +30,8 @@ public: virtual ~CExtractReductionAlgorithm() {} + virtual StdString getName() {return "Extract reduction";} + public: static bool registerTrans(); diff --git a/xios_2311_src/src/transformation/Functions/max_reduction.hpp b/xios_2311_src/src/transformation/Functions/max_reduction.hpp index 8bed597f..08b01527 100644 --- a/xios_2311_src/src/transformation/Functions/max_reduction.hpp +++ b/xios_2311_src/src/transformation/Functions/max_reduction.hpp @@ -30,6 +30,8 @@ public: virtual ~CMaxReductionAlgorithm() {} + virtual StdString getName() {return "Max reduction";} + public: static bool registerTrans(); diff --git a/xios_2311_src/src/transformation/Functions/min_reduction.hpp b/xios_2311_src/src/transformation/Functions/min_reduction.hpp index 9894aa7b..81dbbf16 100644 --- a/xios_2311_src/src/transformation/Functions/min_reduction.hpp +++ b/xios_2311_src/src/transformation/Functions/min_reduction.hpp @@ -30,6 +30,8 @@ public: virtual ~CMinReductionAlgorithm() {} + virtual StdString getName() {return "Min reduction";} + public: static bool registerTrans(); diff --git a/xios_2311_src/src/transformation/Functions/reduction.cpp b/xios_2311_src/src/transformation/Functions/reduction.cpp index 3c5f3d61..9ddc483c 100644 --- a/xios_2311_src/src/transformation/Functions/reduction.cpp +++ b/xios_2311_src/src/transformation/Functions/reduction.cpp @@ -26,6 +26,7 @@ bool CReductionAlgorithm::initReductionOperation(std::map CallBackMap; diff --git a/xios_2311_src/src/transformation/Functions/reduction_types.hpp b/xios_2311_src/src/transformation/Functions/reduction_types.hpp index 3f1a6d90..5931f74f 100644 --- a/xios_2311_src/src/transformation/Functions/reduction_types.hpp +++ b/xios_2311_src/src/transformation/Functions/reduction_types.hpp @@ -9,22 +9,16 @@ #ifndef __XIOS_REDUCTION_TYPES_HPP__ #define __XIOS_REDUCTION_TYPES_HPP__ -namespace xios -{ +namespace xios { - typedef enum reduction_algorithm_type + typedef enum reduction_alogirthm_type { - TRANS_REDUCE_NONE = 0, - TRANS_REDUCE_SUM = 1, - TRANS_REDUCE_MIN = 2, - TRANS_REDUCE_MAX = 3, - TRANS_REDUCE_EXTRACT = 4, - TRANS_REDUCE_AVERAGE = 5 + TRANS_REDUCE_SUM = 0, + TRANS_REDUCE_MIN = 1, + TRANS_REDUCE_MAX = 2, + TRANS_REDUCE_EXTRACT = 3, + TRANS_REDUCE_AVERAGE = 4 } EReductionType; - enum class EReduction - { - none, sum, min, max, extract, average - } ; } #endif // __XIOS_REDUCTION_TYPES_HPP__ diff --git a/xios_2311_src/src/transformation/Functions/sum_reduction.hpp b/xios_2311_src/src/transformation/Functions/sum_reduction.hpp index 52969f68..8b35f4f5 100644 --- a/xios_2311_src/src/transformation/Functions/sum_reduction.hpp +++ b/xios_2311_src/src/transformation/Functions/sum_reduction.hpp @@ -30,6 +30,8 @@ public: virtual ~CSumReductionAlgorithm() {} + virtual StdString getName() {return "Sum reduction";} + public: static bool registerTrans(); diff --git a/xios_2311_src/src/transformation/algo_types.cpp b/xios_2311_src/src/transformation/algo_types.cpp deleted file mode 100755 index 5240784a..00000000 --- a/xios_2311_src/src/transformation/algo_types.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "algo_types.hpp" -#include - - namespace xios - { - - void registerAlgorithmTransformation(void) - { - static bool first = true ; - if (!first) return ; - bool ret ; - std::cout<<"register Transformation"<& dataIn, CArray& dataOut) - { - dataOut.reference(dataIn) ; - } - - shared_ptr CAlgorithmTransformationNoDataModification::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos) - { - auto algo=make_shared(static_pointer_cast(shared_from_this())) ; - algo->computeAlgorithm() ; - return algo ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/algorithm_transformation_no_data_modification.hpp b/xios_2311_src/src/transformation/algorithm_transformation_no_data_modification.hpp deleted file mode 100755 index cb3dcf7a..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_no_data_modification.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__ -#define __XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__ - -#include "generic_algorithm_transformation.hpp" -#include "array_new.hpp" - -namespace xios -{ - - class CAlgorithmTransformationNoDataModification : public CGenericAlgorithmTransformation - { - public: - - CAlgorithmTransformationNoDataModification(bool isSource) : CGenericAlgorithmTransformation(isSource) {} - virtual ~CAlgorithmTransformationNoDataModification() {}; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut); - virtual shared_ptr createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ; - }; - -} -#endif //__XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__ diff --git a/xios_2311_src/src/transformation/algorithm_transformation_reduce.cpp b/xios_2311_src/src/transformation/algorithm_transformation_reduce.cpp deleted file mode 100755 index 9d9568bf..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_reduce.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "algorithm_transformation_reduce.hpp" -#include "context.hpp" - -namespace xios -{ - - - void CAlgorithmTransformationReduce::computeAlgorithm(shared_ptr srcView, shared_ptr dstView) - { - this->computeRecvElement(srcView, dstView) ; - reduceTransformConnector_ = make_shared(recvElement_->getView(CElementView::FULL), dstView, operator_, transformationMapping_, detectMissingValue_) ; - } - - - void CAlgorithmTransformationReduce::apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) - { - reduceTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataOut) ; - } - - void CAlgorithmTransformationReduce::computeRecvElement(shared_ptr srcView, shared_ptr dstView) - { - auto& srcMap = transformationMapping_ ; - set srcIndex ; - for(auto& it : srcMap) - for(size_t index : it.second) srcIndex.insert(index) ; - - CArray srcArrayIndex(srcIndex.size()) ; - int i=0 ; - for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;} - recvElement_ = make_shared(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ; - recvElement_->addFullView() ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/algorithm_transformation_reduce.hpp b/xios_2311_src/src/transformation/algorithm_transformation_reduce.hpp deleted file mode 100755 index f2138067..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_reduce.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __XIOS_ALGORITHM_TRANSFORMATION_REDUCE_HPP__ -#define __XIOS_ALGORITHM_TRANSFORMATION_REDUCE_HPP__ - -#include "generic_algorithm_transformation.hpp" -#include "array_new.hpp" -#include "local_view.hpp" -#include "transform_connector.hpp" -#include "reduce_transform_connector.hpp" - -namespace xios -{ - - class CAlgorithmTransformationReduce : public CGenericAlgorithmTransformation - { - public: - - CAlgorithmTransformationReduce(bool isSource) : CGenericAlgorithmTransformation(isSource) {} - virtual ~CAlgorithmTransformationReduce() {}; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut); - virtual void computeRecvElement(shared_ptr srcView, shared_ptr dstView) ; - - protected: - virtual void computeAlgorithm(shared_ptr srcView, shared_ptr dstView) ; - - //! Map between global index of destination element and source element - EReduction operator_ ; - TransformationIndexMap transformationMapping_; - shared_ptr reduceTransformConnector_ ; - bool detectMissingValue_=true ; - }; - -} -#endif //__XIOS_ALGORITHM_TRANSFORMATION_REDUCE_HPP__ diff --git a/xios_2311_src/src/transformation/algorithm_transformation_transfer.cpp b/xios_2311_src/src/transformation/algorithm_transformation_transfer.cpp deleted file mode 100755 index b36484f7..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_transfer.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "algorithm_transformation_transfer.hpp" -#include "array_new.hpp" -#include "local_view.hpp" -#include "transform_connector.hpp" -#include "context.hpp" - -namespace xios -{ - - void CAlgorithmTransformationTransfer::computeAlgorithm(shared_ptr srcView, shared_ptr dstView) - { - this->computeRecvElement(srcView, dstView) ; - transferTransformConnector_ = make_shared( recvElement_->getView(CElementView::FULL), dstView, transformationMapping_) ; - } - - - void CAlgorithmTransformationTransfer::apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) - { - transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataOut) ; - } - - void CAlgorithmTransformationTransfer::computeRecvElement(shared_ptr srcView, shared_ptr dstView) - { - set srcIndex ; - for(auto& it : transformationMapping_) srcIndex.insert(it.second) ; - - CArray srcArrayIndex(srcIndex.size()) ; - int i=0 ; - for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;} - recvElement_ = make_shared(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ; - recvElement_->addFullView() ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/algorithm_transformation_transfer.hpp b/xios_2311_src/src/transformation/algorithm_transformation_transfer.hpp deleted file mode 100755 index 203265e9..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_transfer.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__ -#define __XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__ - -#include "generic_algorithm_transformation.hpp" -#include "transfer_transform_connector.hpp" -#include "array_new.hpp" - -namespace xios -{ - - class CAlgorithmTransformationTransfer : public CGenericAlgorithmTransformation - { - public: - - CAlgorithmTransformationTransfer(bool isSource) : CGenericAlgorithmTransformation(isSource) {} - virtual ~CAlgorithmTransformationTransfer() {}; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut); - virtual void computeRecvElement(shared_ptr srcView, shared_ptr dstView) ; - virtual StdString getAlgoName() {return "\\nCAlgorithm transformation Transfer";} - - protected: - virtual void computeAlgorithm(shared_ptr srcView, shared_ptr dstView) ; - - //! Map between global index of destination element and source element - unordered_map transformationMapping_; - shared_ptr transferTransformConnector_ ; - }; - -} -#endif //__XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__ diff --git a/xios_2311_src/src/transformation/algorithm_transformation_weight.cpp b/xios_2311_src/src/transformation/algorithm_transformation_weight.cpp deleted file mode 100755 index 822b1c03..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_weight.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "algorithm_transformation_weight.hpp" -#include "context.hpp" - -namespace xios -{ - - - void CAlgorithmTransformationWeight::computeAlgorithm(shared_ptr srcView, shared_ptr dstView) - { - this->computeRecvElement(srcView, dstView) ; - weightTransformConnector_ = make_shared(recvElement_->getView(CElementView::FULL), dstView, transformationMapping_, transformationWeight_) ; - } - - - void CAlgorithmTransformationWeight::apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) - { - weightTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataOut) ; - } - - void CAlgorithmTransformationWeight::computeRecvElement(shared_ptr srcView, shared_ptr dstView) - { - auto& srcMap = transformationMapping_ ; - set srcIndex ; - for(auto& it : srcMap) - for(size_t index : it.second) srcIndex.insert(index) ; - - CArray srcArrayIndex(srcIndex.size()) ; - int i=0 ; - for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;} - recvElement_ = make_shared(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ; - recvElement_->addFullView() ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/algorithm_transformation_weight.hpp b/xios_2311_src/src/transformation/algorithm_transformation_weight.hpp deleted file mode 100755 index 58fb91fa..00000000 --- a/xios_2311_src/src/transformation/algorithm_transformation_weight.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__ -#define __XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__ - -#include "generic_algorithm_transformation.hpp" -#include "array_new.hpp" -#include "local_view.hpp" -#include "transform_connector.hpp" -#include "weight_transform_connector.hpp" - -namespace xios -{ - - class CAlgorithmTransformationWeight : public CGenericAlgorithmTransformation - { - public: - - CAlgorithmTransformationWeight(bool isSource) : CGenericAlgorithmTransformation(isSource) {} - virtual ~CAlgorithmTransformationWeight() {}; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut); - virtual void computeRecvElement(shared_ptr srcView, shared_ptr dstView); - protected: - virtual void computeAlgorithm(shared_ptr srcView, shared_ptr dstView) ; - - //! Map between global index of destination element and source element - TransformationIndexMap transformationMapping_; - //! Weight corresponding of source to destination - TransformationWeightMap transformationWeight_; - shared_ptr weightTransformConnector_ ; - - }; - -} -#endif //__XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp deleted file mode 100755 index 7ae04a3f..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! - \file axis_algorithm_duplicate_scalar.cpp - - \brief Algorithm to duplicate scalar into axis - */ -#include "axis_algorithm_duplicate_scalar.hpp" -#include "duplicate_scalar_to_axis.hpp" -#include "axis.hpp" -#include "scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmDuplicateScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector scalarListSrcP = gridSrc->getScalars(); - - CDuplicateScalarToAxis* duplicateScalar = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], duplicateScalar); -} -CATCH - -bool CAxisAlgorithmDuplicateScalar::dummyRegistered_ = CAxisAlgorithmDuplicateScalar::registerTrans(); -bool CAxisAlgorithmDuplicateScalar::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, create); -} -CATCH - - -CAxisAlgorithmDuplicateScalar::CAxisAlgorithmDuplicateScalar(bool isSource, CAxis* axisDestination, CScalar* scalarSource, CDuplicateScalarToAxis* algo) - : CAlgorithmTransformationTransfer(isSource) -{ - axisDestination->checkAttributes() ; - - CArray& axisDstIndex = axisDestination->index; - - int nbAxisIdx = axisDstIndex.numElements(); - for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) - { - int globalAxisIdx = axisDstIndex(idxAxis); - this->transformationMapping_[globalAxisIdx] = 0 ; - } - - axisDestination->checkAttributes() ; - this->computeAlgorithm(scalarSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} - - -CAxisAlgorithmDuplicateScalar::~CAxisAlgorithmDuplicateScalar() -{ -} - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp deleted file mode 100755 index 7dc490d8..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a axis - */ -#ifndef __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__ -#define __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CScalar; -class CDuplicateScalarToAxis; - - -/*! - \class CAxisAlgorithmDuplicateScalar - Duplicate scalar into axis destination -*/ -class CAxisAlgorithmDuplicateScalar : public CAlgorithmTransformationTransfer -{ -public: - CAxisAlgorithmDuplicateScalar(bool isSource, CAxis* axisDestination, CScalar* scalarSource, CDuplicateScalarToAxis* algo); - - virtual ~CAxisAlgorithmDuplicateScalar(); - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nduplicate_scalar";} - - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_DUPLICATE_SCALAR_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.cpp deleted file mode 100755 index 2c5478f7..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/*! - \file axis_algorithm_extract.cpp - \brief Algorithm for extracting an axis. - */ -#include "axis_algorithm_extract.hpp" -#include "axis.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "extract_axis.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CExtractAxis* extractAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], extractAxis); -} -CATCH - -bool CAxisAlgorithmExtract::dummyRegistered_ = CAxisAlgorithmExtract::registerTrans(); -bool CAxisAlgorithmExtract::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_EXTRACT_AXIS, create); -} -CATCH - -CAxisAlgorithmExtract::CAxisAlgorithmExtract(bool isSource, CAxis* axisDestination, CAxis* axisSource, CExtractAxis* extractAxis) -: CAlgorithmTransformationTransfer(isSource), axisDest_(axisDestination), axisSrc_(axisSource) -TRY -{ - axisDestination->axis_type.reset(); - axisDestination->n_glo.reset(); - axisDestination->index.reset(); - axisDestination->n.reset(); - axisDestination->begin.reset(); - - axisDestination->mask.reset(); - axisDestination->data_index.reset(); - axisDestination->data_n.reset(); - axisDestination->data_begin.reset(); - - axisDestination->value.reset(); - axisDestination->label.reset(); - axisDestination->bounds.reset(); - - extractAxis->checkValid(axisSource); - extractBegin_ = extractAxis->begin.getValue(); - extractN_ = extractAxis->n.getValue(); - extractEnd_ = extractBegin_ + extractN_ - 1; - - if (extractN_ > axisSource->n_glo.getValue()) - { - ERROR("CAxisAlgorithmExtract::CAxisAlgorithmExtract(CAxis* axisDestination, CAxis* axisSource, CExtractAxis* extractAxis)", - << "Extract size is greater than global size of source axis" - << "Global size of source axis " <getId() << " is " << axisSource->n_glo.getValue() << std::endl - << "Extract size is " << extractN_ ); - } - - int idxSrc, nDest = 0, beginDestLoc, beginDestGlo = 0 ; - int indGloDest, indGloSrc, iSrc; - for (int i = 0; i < axisSrc_->n.getValue(); i++) - { - idxSrc = axisSrc_->index(i); - if ((idxSrc >= extractBegin_) && (idxSrc <= extractEnd_)) - { - if (nDest == 0) beginDestLoc = i; - ++nDest; - } - } - - axisDest_->n_glo.setValue(extractN_); - axisDest_->index.resize(nDest); - if (nDest==0) - { - axisDest_->n.setValue( 0 ); - axisDest_->begin.setValue( 0 ); - } - - if (axisSrc_->hasValue) axisDest_->value.resize(nDest); - if (axisSrc_->hasLabel) axisDest_->label.resize(nDest); - if (axisSrc_->hasBounds) axisDest_->bounds.resize(2,nDest); - - auto& transMap = this->transformationMapping_; - - // Set attributes required to define domainDestination->localElement_ and associated views, full and workflow) - CArray sourceGlobalIdx = axisSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - - CArray sourceWorkflowIdx = axisSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - axisDest_->data_index.resize(nDest); - axisDest_->data_index = -1; - - int idxMin = INT_MAX; - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc) < idxMin ) - idxMin = sourceGlobalIdx(countSrc); - } - - int countDest(0); // increment of the position in destination domain - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - int idxSrc = sourceGlobalIdx(countSrc); - if ( (idxSrc >= extractBegin_) && (idxSrc <= extractEnd_) ) - { - axisDest_->index(countDest) = idxSrc-extractBegin_; - - // ------------------ define transformation only if in the WF ------------------ - int iIdxSrc2 = (countSrc+idxMin)%axisSource->n_glo; - int convert_locally_global_idx = (iIdxSrc2-idxMin) ; - bool concerned_by_WF(false); - for ( int i = 0 ; idata_index( countDest ) = countDest; - } - // ----------------------------------------------------------------------------- - - if (axisSrc_->hasValue) - { - axisDest_->value(countDest) = axisSrc_->value(countSrc); - } - if (axisSrc_->hasLabel) - { - axisDest_->label(countDest) = axisSrc_->label(countSrc); - } - if (axisSrc_->hasBounds) - { - axisDest_->bounds(0,countDest) = axisSrc_->bounds(0,countSrc); - axisDest_->bounds(1,countDest) = axisSrc_->bounds(1,countSrc); - } - - // if point i has been identified as extracted, increment position in destination domain for the next point - countDest++; - } - } - - axisDestination->checkAttributes() ; - - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - - - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.hpp deleted file mode 100755 index 692da182..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/*! - \file axis_algorithm_extract.hpp - \brief Algorithm for extracting an axis. - */ -#ifndef __XIOS_AXIS_ALGORITHM_EXTRACT_HPP__ -#define __XIOS_AXIS_ALGORITHM_EXTRACT_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { -class CAxis; -class CExtractAxis; - -/*! - \class CAxisAlgorithmExtract - Implementing extract on axis - A extracted region can be considered as region that isn't masked. - Only this extracted region is extracted to write on Netcdf. -*/ -class CAxisAlgorithmExtract : public CAlgorithmTransformationTransfer -{ -public: - CAxisAlgorithmExtract(bool isSource, CAxis* axisDestination, CAxis* axisSource, CExtractAxis* extractAxis); - - virtual ~CAxisAlgorithmExtract() {} - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nextract_axis";} - -private: - -private: - //! Global extract begin on axis - StdSize extractBegin_; - - //! Global extract end on axis - StdSize extractEnd_; - - //! Global extract size on axis - StdSize extractN_; - - std::vector extractIndex_; - -private: - CAxis* axisSrc_; - CAxis* axisDest_; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_EXTRACT_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp deleted file mode 100755 index f1ea3888..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for extract a domain to an axis - */ -#include "axis_algorithm_extract_domain.hpp" -#include "extract_domain_to_axis.hpp" -#include "axis.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "reduction.hpp" - -namespace xios -{ - -shared_ptr CAxisAlgorithmExtractDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CExtractDomainToAxis* extractDomain = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], extractDomain); -} -CATCH - -bool CAxisAlgorithmExtractDomain::dummyRegistered_ = CAxisAlgorithmExtractDomain::registerTrans(); -bool CAxisAlgorithmExtractDomain::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_EXTRACT_DOMAIN_TO_AXIS, create); -} -CATCH - - -CAxisAlgorithmExtractDomain::CAxisAlgorithmExtractDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CExtractDomainToAxis* algo) - : CAlgorithmTransformationTransfer(isSource), pos_(-1), axisDest_(axisDestination), domainSrc_(domainSource) -TRY -{ - axisDestination->axis_type.reset(); - axisDestination->n_glo.reset(); - axisDestination->index.reset(); - axisDestination->n.reset(); - axisDestination->begin.reset(); - - axisDestination->mask.reset(); - axisDestination->data_index.reset(); - axisDestination->data_n.reset(); - axisDestination->data_begin.reset(); - - axisDestination->value.reset(); - axisDestination->label.reset(); - axisDestination->bounds.reset(); - - algo->checkValid(axisDestination, domainSource); - StdString op = "extract"; - - int nglo,nloc; - switch (algo->direction) - { - case CExtractDomainToAxis::direction_attr::jDir: - dir_ = jDir; - nglo = domainSource->nj_glo.getValue(); - nloc = domainSource->nj.getValue(); - break; - case CExtractDomainToAxis::direction_attr::iDir: - dir_ = iDir; - nglo = domainSource->ni_glo.getValue(); - nloc = domainSource->ni.getValue(); - break; - default: - break; - } - - axisDestination->n_glo.setValue( nglo ); - axisDestination->index.resize( nloc ); - axisDestination->data_index.resize( nloc ); - axisDestination->data_index = -1; - - if ( axisDestination->index.isEmpty() ) - { - axisDestination->n.setValue( 0 ); - axisDestination->begin.setValue( 0 ); - } - - pos_ = algo->position; - - auto& transMap = this->transformationMapping_; - - CArray sourceGlobalIdx = domainSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - - CArray sourceWorkflowIdx = domainSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - - int iIdxSrcMin = INT_MAX; - int jIdxSrcMin = INT_MAX; - int IdxMin = INT_MAX; - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc)%domainSource->ni_glo < iIdxSrcMin ) - iIdxSrcMin = sourceGlobalIdx(countSrc)%domainSource->ni_glo; - if ( sourceGlobalIdx(countSrc)/domainSource->ni_glo < jIdxSrcMin ) - jIdxSrcMin = sourceGlobalIdx(countSrc)/domainSource->ni_glo; - if ( sourceGlobalIdx(countSrc) < IdxMin ) - IdxMin = sourceGlobalIdx(countSrc); - } - - if (jDir == dir_) - { - int countDest(0); - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc)%domainSource->ni_glo == pos_ ) - { - axisDest_->index(countDest) = sourceGlobalIdx(countSrc)/domainSource->ni_glo; - int iIdxSrc2 = (countSrc+IdxMin)%domainSource->ni_glo; - int jIdxSrc2 = (countSrc+IdxMin)/domainSource->ni_glo; - int convert_locally_global_idx = (jIdxSrc2-jIdxSrcMin)*domainSource->ni + (iIdxSrc2-iIdxSrcMin) ; - bool concerned_by_WF(false); - for ( int i = 0 ; idata_index(countDest) = countDest; - transMap[axisDest_->index(countDest)] = sourceGlobalIdx(countSrc); - } - countDest++; - } - } - } - else if (iDir == dir_) - { - int countDest(0); - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc)/domainSource->ni_glo == pos_ ) - { - axisDest_->index(countDest) = sourceGlobalIdx(countSrc)%domainSource->ni_glo; - int iIdxSrc2 = (countSrc+IdxMin)%domainSource->ni_glo; - int jIdxSrc2 = (countSrc+IdxMin)/domainSource->ni_glo; - int convert_locally_global_idx = (jIdxSrc2-jIdxSrcMin)*domainSource->ni + (iIdxSrc2-iIdxSrcMin) ; - bool concerned_by_WF(false); - for ( int i = 0 ; idata_index(countDest) = countDest; - transMap[axisDest_->index(countDest)] = sourceGlobalIdx(countSrc); - } - countDest++; - } - } - } - else - {} - - axisDestination->checkAttributes() ; - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - - -CAxisAlgorithmExtractDomain::~CAxisAlgorithmExtractDomain() -TRY -{ -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp deleted file mode 100755 index c28bf265..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a axis - */ -#ifndef __XIOS_AXIS_ALGORITHM_EXTRACT_DOMAIN_HPP__ -#define __XIOS_AXIS_ALGORITHM_EXTRACT_DOMAIN_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CDomain; -class CExtractDomainToAxis; -class CReductionAlgorithm; - - -/*! - \class CAxisAlgorithmExtractDomain - Extract a domain to an axis -*/ -class CAxisAlgorithmExtractDomain : public CAlgorithmTransformationTransfer -{ -public: - CAxisAlgorithmExtractDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CExtractDomainToAxis* algo); - - virtual ~CAxisAlgorithmExtractDomain(); - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nextract_domain)";} -protected: - enum ExtractDirection { - undefined = 0, - iDir = 1, - jDir = 2 - }; - - ExtractDirection dir_; - int pos_; //! Position to extract - -private: - CDomain* domainSrc_; - CAxis* axisDest_ ; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_EXTRACT_DOMAIN_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp deleted file mode 100755 index 94c0be8b..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/*! - \file axis_algorithm_interpolate.cpp - \author Ha NGUYEN - \since 23 June 2015 - \date 02 Jul 2015 - - \brief Algorithm for interpolation on an axis. - */ -#include "axis_algorithm_interpolate.hpp" -#include "axis.hpp" -#include "interpolate_axis.hpp" -#include -#include "context.hpp" -#include "context_client.hpp" -#include "utils.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "distribution_client.hpp" -#include "timer.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CInterpolateAxis* interpolateAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis); -} -CATCH - -bool CAxisAlgorithmInterpolate::dummyRegistered_ = CAxisAlgorithmInterpolate::registerTrans(); -bool CAxisAlgorithmInterpolate::registerTrans() -TRY -{ - /// descativate for now - // return CGridTransformationFactory::registerTransformation(TRANS_INTERPOLATE_AXIS, create); - return false; -} -CATCH - -CAxisAlgorithmInterpolate::CAxisAlgorithmInterpolate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis) -: CAlgorithmTransformationWeight(isSource), coordinate_(), transPosition_(), axisSrc_(axisSource), axisDest_(axisDestination) -TRY -{ - interpAxis->checkValid(axisSource); - axisDestination->checkAttributes() ; - - order_ = interpAxis->order.getValue(); - if (!interpAxis->coordinate.isEmpty()) - { - coordinate_ = interpAxis->coordinate.getValue(); -// this->idAuxInputs_.resize(1); -// this->idAuxInputs_[0] = coordinate_; - } - std::vector* > dataAuxInputs ; - computeRemap(dataAuxInputs) ; - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - -/*! - Compute the index mapping between axis on grid source and one on grid destination -*/ -void CAxisAlgorithmInterpolate::computeRemap(const std::vector* >& dataAuxInputs) -TRY -{ - CTimer::get("CAxisAlgorithmInterpolate::computeIndexSourceMapping_").resume() ; - CContext* context = CContext::getCurrent(); - int nbClient = context->intraCommSize_; - CArray& axisMask = axisSrc_->mask; - int srcSize = axisSrc_->n_glo.getValue(); - std::vector > vecAxisValue; - - // Fill in axis value from coordinate - fillInAxisValue(vecAxisValue, dataAuxInputs); - std::vector valueSrc(srcSize); - std::vector recvBuff(srcSize); - std::vector indexVec(srcSize); - - for (int idx = 0; idx < vecAxisValue.size(); ++idx) - { - CArray& axisValue = vecAxisValue[idx]; - retrieveAllAxisValue(axisValue, axisMask, recvBuff, indexVec); - XIOSAlgorithms::sortWithIndex(recvBuff, indexVec); - for (int i = 0; i < srcSize; ++i) valueSrc[i] = recvBuff[indexVec[i]]; - computeInterpolantPoint(valueSrc, indexVec, idx); - } - CTimer::get("CAxisAlgorithmInterpolate::computeIndexSourceMapping_").suspend() ; -} -CATCH - -/*! - Compute the interpolant points - Assume that we have all value of axis source, with these values, need to calculate weight (coeff) of Lagrange polynomial - \param [in] axisValue all value of axis source - \param [in] tranPos position of axis on a domain -*/ -void CAxisAlgorithmInterpolate::computeInterpolantPoint(const std::vector& axisValue, - const std::vector& indexVec, - int transPos) -TRY -{ - std::vector::const_iterator itb = axisValue.begin(), ite = axisValue.end(); - std::vector::const_iterator itLowerBound, itUpperBound, it, iteRange, itfirst, itsecond; - const double sfmax = NumTraits::sfmax(); - const double precision = NumTraits::dummy_precision(); - - int ibegin = axisDest_->begin.getValue(); - CArray& axisDestValue = axisDest_->value; - int numValue = axisDestValue.numElements(); - std::map > > interpolatingIndexValues; - - for (int idx = 0; idx < numValue; ++idx) - { - bool outOfRange = false; - double destValue = axisDestValue(idx); - if (destValue < *itb) outOfRange = true; - - itLowerBound = std::lower_bound(itb, ite, destValue); - itUpperBound = std::upper_bound(itb, ite, destValue); - if ((ite != itUpperBound) && (sfmax == *itUpperBound)) itUpperBound = ite; - - if ((ite == itLowerBound) || (ite == itUpperBound)) outOfRange = true; - - // We don't do extrapolation FOR NOW, maybe in the future - if (!outOfRange) - { - if ((itLowerBound == itUpperBound) && (itb != itLowerBound)) --itLowerBound; - double distanceToLower = destValue - *itLowerBound; - double distanceToUpper = *itUpperBound - destValue; - int order = (order_ + 1) - 2; - bool down = (distanceToLower < distanceToUpper) ? true : false; - for (int k = 0; k < order; ++k) - { - if ((itb != itLowerBound) && down) - { - --itLowerBound; - distanceToLower = destValue - *itLowerBound; - down = (distanceToLower < distanceToUpper) ? true : false; - continue; - } - if ((ite != itUpperBound) && (sfmax != *itUpperBound)) - { - ++itUpperBound; - distanceToUpper = *itUpperBound - destValue; - down = (distanceToLower < distanceToUpper) ? true : false; - - } - } - - iteRange = (ite == itUpperBound) ? itUpperBound : itUpperBound + 1; - itsecond = it = itLowerBound; ++itsecond; - while (it < iteRange) - { - while ( (itsecond < ite) && ((*itsecond -*it) < precision) ) - { ++itsecond; ++it; } - int index = std::distance(itb, it); - interpolatingIndexValues[idx+ibegin].push_back(make_pair(indexVec[index],*it)); - ++it; ++itsecond; - } - - } - } - computeWeightedValueAndMapping(interpolatingIndexValues, transPos); -} -CATCH - -/*! - Compute weight (coeff) of Lagrange's polynomial - \param [in] interpolatingIndexValues the necessary axis value to calculate the coeffs -*/ -void CAxisAlgorithmInterpolate::computeWeightedValueAndMapping(const std::map > >& interpolatingIndexValues, int transPos) -TRY -{ - TransformationIndexMap& transMap = this->transformationMapping_; - TransformationWeightMap& transWeight = this->transformationWeight_; - std::map > >::const_iterator itb = interpolatingIndexValues.begin(), it, - ite = interpolatingIndexValues.end(); - int ibegin = axisDest_->begin.getValue(); - for (it = itb; it != ite; ++it) - { - int globalIndexDest = it->first; - double localValue = axisDest_->value(globalIndexDest - ibegin); - const std::vector >& interpVal = it->second; - int interpSize = interpVal.size(); - transMap[globalIndexDest].resize(interpSize); - transWeight[globalIndexDest].resize(interpSize); - for (int idx = 0; idx < interpSize; ++idx) - { - int index = interpVal[idx].first; - double weight = 1.0; - - for (int k = 0; k < interpSize; ++k) - { - if (k == idx) continue; - weight *= (localValue - interpVal[k].second); - weight /= (interpVal[idx].second - interpVal[k].second); - } - transMap[globalIndexDest][idx] = index; - transWeight[globalIndexDest][idx] = weight; -/* - if (!transPosition_.empty()) - { - (this->transformationPosition_[transPos])[globalIndexDest] = transPosition_[transPos]; - } -*/ - } - } -/* - if (!transPosition_.empty() && this->transformationPosition_[transPos].empty()) - (this->transformationPosition_[transPos])[0] = transPosition_[transPos]; -*/ -} -CATCH - -/*! - Each client retrieves all values of an axis - \param [in/out] recvBuff buffer for receiving values (already allocated) - \param [in/out] indexVec mapping between values and global index of axis -*/ -void CAxisAlgorithmInterpolate::retrieveAllAxisValue(const CArray& axisValue, const CArray& axisMask, - std::vector& recvBuff, std::vector& indexVec) -TRY -{ - CContext* context = CContext::getCurrent(); - int nbClient = context->intraCommSize_; - - int srcSize = axisSrc_->n_glo.getValue(); - int numValue = axisValue.numElements(); - - if (srcSize == numValue) // Only one client or axis not distributed - { - for (int idx = 0; idx < srcSize; ++idx) - { - if (axisMask(idx)) - { - recvBuff[idx] = axisValue(idx); - indexVec[idx] = idx; - } - else - { - recvBuff[idx] = NumTraits::sfmax(); - indexVec[idx] = -1; - } - } - - } - else // Axis distributed - { - double* sendValueBuff = new double [numValue]; - int* sendIndexBuff = new int [numValue]; - int* recvIndexBuff = new int [srcSize]; - - int ibegin = axisSrc_->begin.getValue(); - for (int idx = 0; idx < numValue; ++idx) - { - if (axisMask(idx)) - { - sendValueBuff[idx] = axisValue(idx); - sendIndexBuff[idx] = idx + ibegin; - } - else - { - sendValueBuff[idx] = NumTraits::sfmax(); - sendIndexBuff[idx] = -1; - } - } - - int* recvCount=new int[nbClient]; - MPI_Allgather(&numValue,1,MPI_INT,recvCount,1,MPI_INT,context->intraComm_); - - int* displ=new int[nbClient]; - displ[0]=0 ; - for(int n=1;nintraComm_); - MPI_Allgatherv(sendValueBuff,numValue,MPI_DOUBLE,&(recvBuff[0]),recvCount,displ,MPI_DOUBLE,context->intraComm_); - - for (int idx = 0; idx < srcSize; ++idx) - { - indexVec[idx] = recvIndexBuff[idx]; - } - - delete [] displ; - delete [] recvCount; - delete [] recvIndexBuff; - delete [] sendIndexBuff; - delete [] sendValueBuff; - } -} -CATCH - -/*! - Fill in axis value dynamically from a field whose grid is composed of a domain and an axis - \param [in/out] vecAxisValue vector axis value filled in from input field -*/ -void CAxisAlgorithmInterpolate::fillInAxisValue(std::vector >& vecAxisValue, - const std::vector* >& dataAuxInputs) -TRY -{ - if (coordinate_.empty()) - { - vecAxisValue.resize(1); - vecAxisValue[0].resize(axisSrc_->value.numElements()); - vecAxisValue[0] = axisSrc_->value; -// this->transformationMapping_.resize(1); -// this->transformationWeight_.resize(1); - } - else - { -/* - CField* field = CField::get(coordinate_); - CGrid* grid = field->getGrid(); - - std::vector domListP = grid->getDomains(); - std::vector axisListP = grid->getAxis(); - if (domListP.empty() || axisListP.empty() || (1 < domListP.size()) || (1 < axisListP.size())) - ERROR("CAxisAlgorithmInterpolate::fillInAxisValue(std::vector >& vecAxisValue)", - << "XIOS only supports dynamic interpolation with coordinate (field) associated with grid composed of a domain and an axis" - << "Coordinate (field) id = " <getId() << std::endl - << "Associated grid id = " << grid->getId()); - - CDomain* dom = domListP[0]; - size_t vecAxisValueSize = dom->i_index.numElements(); - size_t vecAxisValueSizeWithMask = 0; - for (size_t idx = 0; idx < vecAxisValueSize; ++idx) - { - if (dom->domainMask(idx)) ++vecAxisValueSizeWithMask; - } - - int niGlobDom = dom->ni_glo.getValue(); - vecAxisValue.resize(vecAxisValueSizeWithMask); - if (transPosition_.empty()) - { - size_t indexMask = 0; - transPosition_.resize(vecAxisValueSizeWithMask); - for (size_t idx = 0; idx < vecAxisValueSize; ++idx) - { - if (dom->domainMask(idx)) - { - transPosition_[indexMask].resize(1); - transPosition_[indexMask][0] = (dom->i_index)(idx) + niGlobDom * (dom->j_index)(idx); - ++indexMask; - } - - } - } - this->transformationMapping_.resize(vecAxisValueSizeWithMask); - this->transformationWeight_.resize(vecAxisValueSizeWithMask); - this->transformationPosition_.resize(vecAxisValueSizeWithMask); - - const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = grid->getClientDistribution()->getGlobalLocalDataSendToServer(); - CDistributionClient::GlobalLocalDataMap::const_iterator itIndex, iteIndex = globalLocalIndexSendToServer.end(); - size_t axisSrcSize = axisSrc_->index.numElements(); - std::vector globalDimension = grid->getGlobalDimension(); - - size_t indexMask = 0; - for (size_t idx = 0; idx < vecAxisValueSize; ++idx) - { - if (dom->domainMask(idx)) - { - size_t axisValueSize = 0; - for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) - { - size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; - if (iteIndex != globalLocalIndexSendToServer.find(globalIndex)) - { - ++axisValueSize; - } - } - - vecAxisValue[indexMask].resize(axisValueSize); - axisValueSize = 0; - for (size_t jdx = 0; jdx < axisSrcSize; ++jdx) - { - size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; - itIndex = globalLocalIndexSendToServer.find(globalIndex); - if (iteIndex != itIndex) - { - vecAxisValue[indexMask](axisValueSize) = (*dataAuxInputs[0])(itIndex->second); - ++axisValueSize; - } - } - ++indexMask; - } - } - */ - } -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp deleted file mode 100755 index dd99202f..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! - \file axis_algorithm_interpolate.hpp - \author Ha NGUYEN - \since 23 June 2015 - \date 23 June 2015 - - \brief Algorithm for interpolation on an axis. - */ -#ifndef __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__ -#define __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__ - -#include "algorithm_transformation_weight.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CGrid; -class CInterpolateAxis; - -/*! - \class CAxisAlgorithmInterpolate - Implementing interpolation on axis - The values on axis source are assumed monotonic -*/ -class CAxisAlgorithmInterpolate : public CAlgorithmTransformationWeight -{ -public: - CAxisAlgorithmInterpolate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis); - - virtual ~CAxisAlgorithmInterpolate() {} - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\ninterpolate_axis";} - -private: - void computeRemap(const std::vector* >& dataAuxInputs) ; - void retrieveAllAxisValue(const CArray& axisValue, const CArray& axisMask, - std::vector& recvBuff, std::vector& indexVec); - void computeInterpolantPoint(const std::vector& recvBuff, const std::vector&, int transPos = 0); - void computeWeightedValueAndMapping(const std::map > >& interpolatingIndexValues, int transPos = 0); - void fillInAxisValue(std::vector >& vecAxisValue, - const std::vector* >& dataAuxInputs); - -private: - // Interpolation order - int order_; - StdString coordinate_; - std::vector > transPosition_; - CAxis* axisSrc_=nullptr ; - CAxis* axisDest_=nullptr; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} - -#endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp deleted file mode 100755 index 7e7ca1c1..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp +++ /dev/null @@ -1,349 +0,0 @@ -/*! - \file axis_algorithm_interpolate.cpp - \author Ha NGUYEN - \since 23 June 2015 - \date 02 Jul 2015 - - \brief Algorithm for interpolation on an axis. - */ -#include "axis_algorithm_interpolate_coordinate.hpp" -#include "axis.hpp" -#include "interpolate_axis.hpp" -#include -#include -#include "context.hpp" -#include "context_client.hpp" -#include "utils.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "distribution_client.hpp" -#include "transform_filter.hpp" -#include "timer.hpp" - -namespace xios -{ - shared_ptr CAxisAlgorithmInterpolateCoordinate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) - TRY - { - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CInterpolateAxis* interpolateAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis); - } - CATCH - - bool CAxisAlgorithmInterpolateCoordinate::dummyRegistered_ = CAxisAlgorithmInterpolateCoordinate::registerTrans(); - bool CAxisAlgorithmInterpolateCoordinate::registerTrans() - TRY - { - return CGridTransformationFactory::registerTransformation(TRANS_INTERPOLATE_AXIS, create); - } - CATCH - - vector CAxisAlgorithmInterpolateCoordinate::getAuxFieldId(void) - { - if (hasCoordinateSrc_ && hasCoordinateDest_) return {coordinateSrc_,coordinateDest_} ; - else if (hasCoordinateSrc_) return {coordinateSrc_} ; - else if (hasCoordinateDest_) return {coordinateDest_} ; - else return vector() ; - } - - bool CAxisAlgorithmInterpolateCoordinate::transformAuxField(int pos) - { - if (pos==0) - { - if (hasCoordinateSrc_) return true ; - else if(hasCoordinateDest_) return false ; - } - if (pos==1) return false ; - - MISSING_RETURN( "bool CAxisAlgorithmInterpolateCoordinate::transformAuxField(int pos)" ); - return false; - } - - CAxisAlgorithmInterpolateCoordinate::CAxisAlgorithmInterpolateCoordinate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis) - : CAlgorithmTransformationTransfer(isSource), axisSrc_(axisSource), axisDest_(axisDestination) - TRY - { - interpAxis->checkValid(axisSource); - axisDestination->checkAttributes() ; - - order_ = interpAxis->order.getValue(); - if (!interpAxis->coordinate.isEmpty()) - { - coordinateSrc_ = interpAxis->coordinate.getValue(); - hasCoordinate_=true ; - hasCoordinateSrc_=true ; - } - - if (!interpAxis->coordinate_src.isEmpty()) - { - coordinateSrc_ = interpAxis->coordinate_src.getValue(); - hasCoordinate_=true ; - hasCoordinateSrc_=true ; - } - - if (!interpAxis->coordinate_dst.isEmpty()) - { - coordinateDest_ = interpAxis->coordinate_dst.getValue(); - hasCoordinate_=true ; - hasCoordinateDest_=true ; - } - - ngloSrc_=axisSource->n_glo ; - nDest_ = axisDest_-> getLocalView(CElementView::WORKFLOW)->getSize() ; - - if (!hasCoordinateDest_) - { - CArray coord ; - auto destConnector = make_shared(axisDest_->getLocalView(CElementView::FULL), axisDest_->getLocalView(CElementView::WORKFLOW)) ; - destConnector->computeConnector() ; - destConnector->transfer(axisDest_->value, coord) ; - destCoordinate_ = vector(coord.dataFirst(), coord.dataFirst()+nDest_) ; - } - - CArray globalIndex(ngloSrc_) ; - for(int i=0;i axisSourceGlo = make_shared(CContext::getCurrent()->getIntraCommRank(), ngloSrc_, globalIndex) ; - axisSourceGlo->addFullView() ; - - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisSourceGlo->getView(CElementView::FULL)) ; - - if (!hasCoordinateSrc_) - { - CArray coord ; - CArray coordGlo ; - auto srcConnector = make_shared(axisSrc_->getLocalView(CElementView::FULL), axisSrc_->getLocalView(CElementView::WORKFLOW)) ; - srcConnector->computeConnector() ; - srcConnector->transfer(axisSrc_->value, coord) ; // full view value -> workflow value - transferTransformConnector_ -> transfer(coord, coordGlo) ; // workflow view -> full global view - srcCoordinate_ = vector(coordGlo.dataFirst(), coordGlo.dataFirst()+ngloSrc_) ; - } - } - CATCH - - CTransformFilter* CAxisAlgorithmInterpolateCoordinate::createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) - { - if (hasCoordinateSrc_ && hasCoordinateDest_) return new CTransformFilter(gc, 3, algo, detectMissingValues, defaultValue) ; - else return new CTransformFilter(gc, 2, algo, detectMissingValues, defaultValue) ; - } - - void CAxisAlgorithmInterpolateCoordinate::apply(int dimBefore, int dimAfter, const CArray& dataIn, - const vector>& auxDataIn, CArray& dataOut) - { - CArray dataInTmp; - CArray auxDataInSrc ; - transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataInTmp) ; - if (hasCoordinateSrc_) transferTransformConnector_ -> transfer(dimBefore, dimAfter, auxDataIn[0], auxDataInSrc) ; - - - dataOut.resize(dimBefore*dimAfter*nDest_) ; - const double* pressureSrc ; - const double* pressureDest ; - if (hasCoordinateSrc_) pressureSrc = auxDataInSrc.dataFirst() ; - if (hasCoordinateDest_ && hasCoordinateSrc_) pressureDest = auxDataIn[1].dataFirst() ; - else if (hasCoordinateDest_ && !hasCoordinateSrc_ ) pressureDest = auxDataIn[0].dataFirst() ; - - const double* in = dataInTmp.dataFirst() ; - double* out = dataOut.dataFirst() ; - - size_t sliceSrc = dimAfter*ngloSrc_ ; - size_t sliceDest = dimAfter*nDest_ ; - vector srcCoordinate(ngloSrc_) ; - vector destCoordinate(nDest_) ; - std::vector srcIndex(ngloSrc_); - vector srcValue(ngloSrc_) ; - vector destValue(nDest_) ; - std::vector destIndex(nDest_); - - size_t nsrc, nDest ; - - for(size_t j=0, posJsrc=0, posJdest=0 ; j::quiet_NaN() ; - } - } - else - { - nDest=0 ; - for(size_t i=0, posIdest=posKdest ; i::quiet_NaN() ; - } - } - } - } - - void CAxisAlgorithmInterpolateCoordinate::computeInterp(int nsrc, vector& srcCoordinate, vector& srcValue, vector& srcIndex, - int ndst, vector& dstCoordinate, vector& dstValue, vector& dstIndex) - { - double x,y ; - double d ; - - iota(srcIndex.data(), srcIndex.data()+nsrc, 0); // sort array and retrive sorted index - stable_sort(srcIndex.data(), srcIndex.data()+nsrc, [&srcCoordinate](size_t i1, size_t i2) {return srcCoordinate[i1] < srcCoordinate[i2];}); - - iota(dstIndex.data(), dstIndex.data()+ndst, 0); - stable_sort(dstIndex.data(), dstIndex.data()+ndst, [&dstCoordinate](size_t i1, size_t i2) {return dstCoordinate[i1] < dstCoordinate[i2];}); - - if (order_==1 || nsrc<=2) - { - if (nsrc<=1) dstValue.assign(ndst,std::numeric_limits::quiet_NaN()); - else - { - - double x0,x1 ; - double y0,y1 ; - int lastj=0; - - for(int i=0; i < ndst;i++) - { - x=dstCoordinate[dstIndex[i]] ; - if ( x<=srcCoordinate[srcIndex[0]]) lastj=0 ; - else if (x>=srcCoordinate[srcIndex[nsrc-1]]) lastj=nsrc-2 ; - else - { - for(int j=lastj; j= srcCoordinate[srcIndex[j]] && x=srcCoordinate[srcIndex[nsrc-1]]) lastj=nsrc-2 ; - else - { - for(int j=lastj; j= srcCoordinate[srcIndex[j]] && x=nsrc-2) cj=nsrc-2 ; - else - { - if ( (x-srcCoordinate[srcIndex[lastj-1]]) > (srcCoordinate[srcIndex[lastj+2]]-x) ) cj=lastj ; - else cj=lastj+1 ; - } - x0=srcCoordinate[srcIndex[cj-1]] ; - x1=srcCoordinate[srcIndex[cj]] ; - x2=srcCoordinate[srcIndex[cj+1]] ; - y0=srcValue[srcIndex[cj-1]] ; - y1=srcValue[srcIndex[cj]] ; - y2=srcValue[srcIndex[cj+1]] ; - - y=y0*(x-x1)*(x-x2)/((x0-x1)*(x0-x2)) + y1*(x-x0)*(x-x2)/((x1-x0)*(x1-x2)) + y2*(x-x0)*(x-x1)/((x2-x0)*(x2-x1)) ; - dstValue[dstIndex[i]]=y ; - } - } - } - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp deleted file mode 100755 index d01d74c6..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/*! - \file axis_algorithm_interpolate.hpp - \author Ha NGUYEN - \since 23 June 2015 - \date 23 June 2015 - - \brief Algorithm for interpolation on an axis. - */ -#ifndef __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__ -#define __XIOS_AXIS_ALGORITHM_INTERPOLATE_COORDINATE_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CGrid; -class CInterpolateAxis; -class CTransformFilter; - -/*! - \class CAxisAlgorithmInterpolateCoordinate - Implementing interpolation on axis - The values on axis source are assumed monotonic -*/ -class CAxisAlgorithmInterpolateCoordinate : public CAlgorithmTransformationTransfer -{ -public: - CAxisAlgorithmInterpolateCoordinate(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis); - - virtual ~CAxisAlgorithmInterpolateCoordinate() {} - virtual vector getAuxFieldId(void) ; - virtual bool transformAuxField(int pos) ; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, - const vector>& auxDataIn, CArray& dataOut) ; - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\ninterpolate_axis";} - virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) ; - -private: - void computeInterp(int nsrc, vector& srcCoordinate, vector& srcValue, vector& srcIndex, - int ndst, vector& dstCoordinate, vector& dstValue, vector& dstIndex) ; - - // Interpolation order - int order_; - StdString coordinateSrc_; // pressure src - StdString coordinateDest_; // pressure dst - bool hasCoordinate_=false ; - bool hasCoordinateSrc_=false ; - bool hasCoordinateDest_=false ; - - CAxis* axisSrc_=nullptr ; - CAxis* axisDest_=nullptr; - size_t ngloSrc_ ; - size_t nDest_ ; - vector srcCoordinate_ ; // src axis value - vector destCoordinate_ ; // dst axis value - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} - -#endif // __XIOS_AXIS_ALGORITHM_INTERPOLATE_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp deleted file mode 100755 index a9116a9f..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/*! - \file axis_algorithm_inverse.hpp - \author Ha NGUYEN - \since 14 May 2015 - \date 29 June 2015 - - \brief Algorithm for inversing an axis.. - */ -#include "axis_algorithm_inverse.hpp" -#include "context.hpp" -#include "context_client.hpp" -#include "axis.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "inverse_axis.hpp" -#include "client_client_dht_template.hpp" - -namespace xios { - -shared_ptr CAxisAlgorithmInverse::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CInverseAxis* inverseAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], inverseAxis); -} -CATCH - -bool CAxisAlgorithmInverse::dummyRegistered_ = CAxisAlgorithmInverse::registerTrans(); -bool CAxisAlgorithmInverse::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_INVERSE_AXIS, create); -} -CATCH - -CAxisAlgorithmInverse::CAxisAlgorithmInverse(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInverseAxis* inverseAxis) - : CAlgorithmTransformationNoDataModification(isSource), axisDest_(axisDestination), axisSrc_(axisSource) -TRY -{ - - axisDestination->axis_type.reset(); - axisDestination->n_glo.reset(); - axisDestination->index.reset(); - axisDestination->n.reset(); - axisDestination->begin.reset(); - - axisDestination->mask.reset(); - axisDestination->data_index.reset(); - axisDestination->data_n.reset(); - axisDestination->data_begin.reset(); - - axisDestination->value.reset(); - axisDestination->bounds.reset(); - - axisDestination->n_glo.setValue( axisSource->n_glo.getValue() ); - - if (axisDestination->n_glo.getValue() != axisSource->n_glo.getValue()) - { - ERROR("CAxisAlgorithmInverse::CAxisAlgorithmInverse(CAxis* axisDestination, CAxis* axisSource)", - << "Two axis have different global size" - << "Size of axis source " <getId() << " is " << axisSource->n_glo.getValue() << std::endl - << "Size of axis destination " <getId() << " is " << axisDestination->n_glo.getValue()); - } - - int n_glo =axisDestination->n_glo.getValue() ; - - CArray sourceGlobalIdx = axisSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - - axisDestination->index.resize( indexSize ); - axisDestination->data_index.resize( indexSize ); - axisDestination->data_index = -1; - for (size_t i = 0; i < indexSize ; ++i) - { - axisDestination->index(i) = (n_glo-1)-sourceGlobalIdx(i); - } - - int idxMin = INT_MAX; - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc) < idxMin ) - idxMin = sourceGlobalIdx(countSrc); - } - - CArray sourceWorkflowIdx = axisSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - for (size_t i = 0; i < indexSize ; ++i) - { - // ------------------ define transformation only if in the WF ------------------ - int iIdxSrc2 = (i+idxMin)%axisSource->n_glo; - int convert_locally_global_idx = (iIdxSrc2-idxMin) ; - bool concerned_by_WF(false); - int i2; - for ( i2 = 0 ; i2data_index(sourceWorkflowIdx(i2)) = sourceWorkflowIdx(i2); - } - // ----------------------------------------------------------------------------- - - } - - if (axisSrc_->hasValue) - { - axisDestination->value.resize(indexSize); - for (size_t i = 0; i < indexSize ; ++i) - { - axisDestination->value(i) = axisSource->value(i); - } - } - - if (axisSrc_->hasBounds) - { - axisDestination->bounds.resize(2,indexSize); - for (int i = 0; i < indexSize ; ++i) - { - axisDestination->bounds(0,i) = axisSource->bounds(0,i); - axisDestination->bounds(1,i) = axisSource->bounds(1,i); - } - } - - axisDestination->checkAttributes() ; - -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp deleted file mode 100755 index 10dc0c53..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/*! - \file axis_algorithm_inverse.hpp - \author Ha NGUYEN - \since 14 May 2015 - \date 09 June 2015 - - \brief Algorithm for inversing an axis.. - */ -#ifndef __XIOS_AXIS_ALGORITHM_INVERSE_HPP__ -#define __XIOS_AXIS_ALGORITHM_INVERSE_HPP__ - -#include "algorithm_transformation_no_data_modification.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CInverseAxis; - -/*! - \class CAxisAlgorithmInverse - Inversing an axis -*/ -class CAxisAlgorithmInverse : public CAlgorithmTransformationNoDataModification -{ -public: - CAxisAlgorithmInverse(bool isSource, CAxis* axisDestination, CAxis* axisSource, CInverseAxis* inverseAxis); - - virtual ~CAxisAlgorithmInverse() {} - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\ninverse_axis";} - - -private: - CAxis* axisSrc_; - CAxis* axisDest_; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_INVERSE_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp deleted file mode 100755 index 61b49f50..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/*! - \file axis_algorithm_reduce_axis.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce a axis to an axis - */ -#include "axis_algorithm_reduce_axis.hpp" -#include "reduce_axis_to_axis.hpp" -#include "axis.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "grid_algorithm_reduce.hpp" - - -namespace xios { -shared_ptr CAxisAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CReduceAxisToAxis* reduceAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], reduceAxis); -} -CATCH - -bool CAxisAlgorithmReduceAxis::dummyRegistered_ = CAxisAlgorithmReduceAxis::registerTrans(); -bool CAxisAlgorithmReduceAxis::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REDUCE_AXIS_TO_AXIS, create); -} -CATCH - - -CAxisAlgorithmReduceAxis::CAxisAlgorithmReduceAxis(bool isSource, CAxis* axisDestination, CAxis* axisSource, CReduceAxisToAxis* algo) - : CAlgorithmTransformationReduce(isSource) -TRY -{ - if (!axisDestination->checkGeometricAttributes(false)) - { - axisDestination->resetGeometricAttributes(); - axisDestination->setGeometricAttributes(*axisSource) ; - } - axisDestination->checkAttributes() ; - algo->checkValid(axisDestination, axisSource); - - - switch (algo->operation) - { - case CReduceAxisToAxis::operation_attr::sum: - operator_ = EReduction::sum; - break; - case CReduceAxisToAxis::operation_attr::min: - operator_ = EReduction::min; - break; - case CReduceAxisToAxis::operation_attr::max: - operator_ = EReduction::max; - break; - case CReduceAxisToAxis::operation_attr::average: - operator_ = EReduction::average; - break; - default: - ERROR("CAxisAlgorithmReduceAxis::CAxisAlgorithmReduceAxis(CAxis* axisDestination, CAxis* axisSource, CReduceAxisToAxis* algo)", - << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl - << "Axis source " <getId() << std::endl - << "Axis destination " << axisDestination->getId()); - } - - //TransformationIndexMap& transMap = this->transformationMapping_; - //CArray& axisDstIndex = axisDestination->index; - //int nbAxisIdx = axisDstIndex.numElements(); - - - - auto& transMap = this->transformationMapping_; - - CArray dstGlobalIndex ; - axisDestination->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(dstGlobalIndex) ; - size_t nbIdx = dstGlobalIndex.numElements(); - - for (size_t idx = 0; idx < nbIdx; ++idx) - { - size_t globalIdx = dstGlobalIndex(idx); - transMap[globalIdx].resize(1); - transMap[globalIdx][0]=globalIdx ; - } - - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - -shared_ptr CAxisAlgorithmReduceAxis::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos) -{ - auto algo=make_shared(gridSrc, gridDst, pos, shared_from_this(), operator_) ; - algo->computeAlgorithm(false) ; - return algo ; -} - -CAxisAlgorithmReduceAxis::~CAxisAlgorithmReduceAxis() -TRY -{ - -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp deleted file mode 100755 index 941a85ce..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/*! - \file axis_algorithm_reduce_axis.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a axis - */ -#ifndef __XIOS_AXIS_ALGORITHM_REDUCE_AXIS_HPP__ -#define __XIOS_AXIS_ALGORITHM_REDUCE_AXIS_HPP__ - -#include "algorithm_transformation_reduce.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CReduceAxisToAxis; -class CReductionAlgorithm; - -/*! - \class CAxisAlgorithmReduceAxis - Reduce a axis to an axis -*/ -class CAxisAlgorithmReduceAxis : public CAlgorithmTransformationReduce -{ -public: - CAxisAlgorithmReduceAxis(bool isSource, CAxis* axisDestination, CAxis* axisSource, CReduceAxisToAxis* algo); - - - virtual ~CAxisAlgorithmReduceAxis(); - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nreduce_axis_to_axis";} - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - - virtual shared_ptr createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_REDUCE_AXIS_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp deleted file mode 100755 index e7b3f6cc..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp +++ /dev/null @@ -1,324 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce a domain to an axis - */ -#include "axis_algorithm_reduce_domain.hpp" -#include "reduce_domain_to_axis.hpp" -#include "axis.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "reduction.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CReduceDomainToAxis* reduceDomain = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], reduceDomain); -} -CATCH - -bool CAxisAlgorithmReduceDomain::dummyRegistered_ = CAxisAlgorithmReduceDomain::registerTrans(); -bool CAxisAlgorithmReduceDomain::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REDUCE_DOMAIN_TO_AXIS, create); -} -CATCH - - -CAxisAlgorithmReduceDomain::CAxisAlgorithmReduceDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo) - : CAlgorithmTransformationReduce(isSource), domainSrc_(domainSource), axisDest_(axisDestination) -TRY -{ - switch (algo->operation) - { - case CReduceDomainToAxis::operation_attr::sum: - operator_ = EReduction::sum; - break; - case CReduceDomainToAxis::operation_attr::min: - operator_ = EReduction::min; - break; - case CReduceDomainToAxis::operation_attr::max: - operator_ = EReduction::max; - break; - case CReduceDomainToAxis::operation_attr::average: - operator_ = EReduction::average; - break; - default: - ERROR("CAxisAlgorithmReduceDomain::CAxisAlgorithmReduceDomain(CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo)", - << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl - << "Domain source " <getId() << std::endl - << "Axis destination " << axisDestination->getId()); - - } - - algo->checkValid(axisDestination, domainSource); - dir_ = (CReduceDomainToAxis::direction_attr::iDir == algo->direction) ? iDir : jDir; - - bool local = false; - if (!algo->local.isEmpty()) local=algo->local ; - - size_t nj_glo = domainSource->nj_glo ; - size_t ni_glo = domainSource->ni_glo ; - - bool validAxis = axisDestination->checkGeometricAttributes(false) ; - if (validAxis && !local) - { - - axisDestination->checkAttributes() ; - if (dir_==jDir) - { - if (axisDestination->n_glo != domainSource->nj_glo) - ERROR("CAxisAlgorithmReduceDomain::CAxisAlgorithmReduceDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo)", - << "Extract domain along j, axis destination should have n_glo equal to nj_glo of domain source" - << "Domain source " <getId() << " has nj_glo " << domainSource->nj_glo << std::endl - << "Axis destination " << axisDestination->getId() << " has n_glo " << axisDestination->n_glo) - } - else - { - if (axisDestination->n_glo != domainSource->ni_glo) - ERROR("CAxisAlgorithmReduceDomain::CAxisAlgorithmReduceDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo)", - << "Extract domain along j, axis destination should have n_glo equal to ni_glo of domain source" - << "Domain source " <getId() << " has ni_glo " << domainSource->ni_glo << std::endl - << "Axis destination " << axisDestination->getId() << " has n_glo " << axisDestination->n_glo); - } - } - else - { - // create axis destination from source domain - - axisDestination->resetGeometricAttributes(); - if (dir_== jDir) - { - axisDestination->n_glo = domainSource->nj_glo ; - - CArray srcGlobalIndex ; - set indexFullView; - set indexWorkflowView; - domainSource->getLocalView(CElementView::FULL)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; igetLocalView(CElementView::WORKFLOW)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; i n = indexFullView.size() ; - axisDestination-> index.resize(axisDestination-> n) ; - axisDestination-> mask.resize(axisDestination-> n) ; - - map globalToLocalIndex ; - auto it=indexFullView.begin(); - for(int i=0; it!=indexFullView.end(); ++i,++it) - { - axisDestination->index(i) = *it ; - if (indexWorkflowView.count(*it)==0) axisDestination->mask(i) = false ; - else axisDestination->mask(i) = true ; - globalToLocalIndex[*it] = i ; - } - if (domainSource->hasLonLat && domainSource->type == CDomain::type_attr::rectilinear) - { - axisDestination->value.resize(axisDestination-> n) ; - axisDestination->axis_type.setValue(CAxis::axis_type_attr::Y) ; - if (domainSource->hasBounds) axisDestination-> bounds.resize(axisDestination-> n, 2) ; - - domainSource->getLocalView(CElementView::FULL)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; ivalue(globalToLocalIndex[srcGlobalIndex(i)/ni_glo]) = domainSource->latvalue(i) ; - if (domainSource->hasBounds) - { - axisDestination->bounds(globalToLocalIndex[srcGlobalIndex(i)/ni_glo,0]) = domainSource->bounds_latvalue(i,0) ; - axisDestination->bounds(globalToLocalIndex[srcGlobalIndex(i)/ni_glo,1]) = domainSource->bounds_latvalue(i,1) ; - } - } - } - - } - else // dir_== iDir - { - axisDestination->n_glo = domainSource->ni_glo ; - - CArray srcGlobalIndex ; - set indexFullView; - set indexWorkflowView; - domainSource->getLocalView(CElementView::FULL)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; igetLocalView(CElementView::WORKFLOW)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; i n = indexFullView.size() ; - axisDestination-> index.resize(axisDestination-> n) ; - axisDestination-> mask.resize(axisDestination-> n) ; - map globalToLocalIndex ; - auto it=indexFullView.begin(); - for(int i=0; it!=indexFullView.end(); ++i,++it) - { - axisDestination->index(i) = *it ; - if (indexWorkflowView.count(*it)==0) axisDestination->mask(i) = false ; - else axisDestination->mask(i) = true ; - globalToLocalIndex[*it] = i ; - } - - if (domainSource->hasLonLat && domainSource->type == CDomain::type_attr::rectilinear) - { - axisDestination-> value.resize(axisDestination-> n) ; - axisDestination-> axis_type.setValue(CAxis::axis_type_attr::X) ; - if (domainSource->hasBounds) axisDestination->bounds.resize(axisDestination-> n, 2) ; - - domainSource->getLocalView(CElementView::FULL)->getGlobalIndexView(srcGlobalIndex) ; - for(int i=0; ivalue(globalToLocalIndex[srcGlobalIndex(i)%ni_glo]) = domainSource->lonvalue(i) ; - if (domainSource->hasBounds) - { - axisDestination->bounds(globalToLocalIndex[srcGlobalIndex(i)%ni_glo,0]) = domainSource->bounds_lonvalue(i,0) ; - axisDestination->bounds(globalToLocalIndex[srcGlobalIndex(i)%ni_glo,1]) = domainSource->bounds_lonvalue(i,1) ; - } - } - } - - } - - axisDestination->checkAttributes() ; - } - - // compute needed index for tranformation - - TransformationIndexMap& transMap = transformationMapping_; - - CArray srcGlobalIndex ; - domainSource->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(srcGlobalIndex) ; - CArray dstGlobalIndex ; - axisDestination->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(dstGlobalIndex) ; - - if (local) - { - - set dstGlobalIndexSet ; - for(int i=0; i& axisDstIndex = axisDest_->index; - int ni_glo = domainSrc_->ni_glo, nj_glo = domainSrc_->nj_glo; - if (iDir == dir_) - { - if (local) - { - const CArray& i_index = domainSrc_-> i_index.getValue() ; - const CArray& j_index = domainSrc_-> j_index.getValue() ; - const CArray& localMask = domainSrc_-> localMask ; - int nbDomainIdx = i_index.numElements(); - - for (int idxDomain = 0; idxDomain < nbDomainIdx; ++idxDomain) - { - if (localMask(idxDomain)) - { - transMap[j_index(idxDomain)].push_back(j_index(idxDomain)* ni_glo + i_index(idxDomain)); - } - } - } - else - { - int nbAxisIdx = axisDstIndex.numElements(); - for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) - { - int globalAxisIdx = axisDstIndex(idxAxis); - transMap[globalAxisIdx].resize(ni_glo); - for (int idx = 0; idx < ni_glo; ++idx) - { - transMap[globalAxisIdx][idx] = globalAxisIdx * ni_glo + idx; - } - } - } - } - else if (jDir == dir_) - { - int nbAxisIdx = axisDstIndex.numElements(); - if (local) - { - const CArray& i_index = domainSrc_-> i_index.getValue() ; - const CArray& j_index = domainSrc_-> j_index.getValue() ; - const CArray& localMask = domainSrc_-> localMask ; - int nbDomainIdx = i_index.numElements(); - - for (int idxDomain = 0; idxDomain < nbDomainIdx; ++idxDomain) - { - if (localMask(idxDomain)) - { - transMap[i_index(idxDomain)].push_back(j_index(idxDomain)* ni_glo + i_index(idxDomain)); - } - } - } - else - { - for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis) - { - int globalAxisIdx = axisDstIndex(idxAxis); - transMap[globalAxisIdx].resize(nj_glo); - for (int idx = 0; idx < nj_glo; ++idx) - { - transMap[globalAxisIdx][idx] = globalAxisIdx + ni_glo*idx; - } - } - } - } - else - {} - - axisDestination->checkAttributes() ; -*/ - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; - -} -CATCH - - -CAxisAlgorithmReduceDomain::~CAxisAlgorithmReduceDomain() -TRY -{ -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp deleted file mode 100755 index 491f72d6..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a axis - */ -#ifndef __XIOS_AXIS_ALGORITHM_REDUCE_DOMAIN_HPP__ -#define __XIOS_AXIS_ALGORITHM_REDUCE_DOMAIN_HPP__ - -#include "algorithm_transformation_reduce.hpp" -#include "transformation.hpp" - -namespace xios { - -class CAxis; -class CDomain; -class CReduceDomainToAxis; -class CReductionAlgorithm; - -/*! - \class CAxisAlgorithmReduceDomain - Reduce a domain to an axis -*/ -class CAxisAlgorithmReduceDomain : public CAlgorithmTransformationReduce -{ -public: - CAxisAlgorithmReduceDomain(bool isSource, CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo); - - virtual ~CAxisAlgorithmReduceDomain(); - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nreduce_domain";} - -protected: - enum ReduceDirection { - undefined = 0, - iDir = 1, - jDir = 2 - }; - - ReduceDirection dir_; - bool local ; - - CDomain* domainSrc_ ; - CAxis* axisDest_ ; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_REDUCE_DOMAIN_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp deleted file mode 100755 index e5d87744..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/*! - \file axis_algorithm_temporal_splitting.cpp - - \brief Algorithm to split scalar into axis by temporal accumulation - */ -#include "axis_algorithm_temporal_splitting.hpp" -#include "temporal_splitting.hpp" -#include "axis.hpp" -#include "scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "temporal_transform_filter.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmTemporalSplitting::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector scalarListSrcP = gridSrc->getScalars(); - - CTemporalSplitting* temporalSplitting = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting); -} -CATCH - -bool CAxisAlgorithmTemporalSplitting::dummyRegistered_ = CAxisAlgorithmTemporalSplitting::registerTrans(); -bool CAxisAlgorithmTemporalSplitting::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_TEMPORAL_SPLITTING, create); -} -CATCH - -CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(bool isSource, CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo) - : CAlgorithmTransformationNoDataModification(isSource) -{ - nrecords_ = axisDestination->n_glo ; // also axis must not be distributed, make more test later -} - -CTransformFilter* CAxisAlgorithmTemporalSplitting::createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) -{ - return new CTemporalTransformFilter(gc, 1, algo, nrecords_, detectMissingValues, defaultValue) ; -} - -CAxisAlgorithmTemporalSplitting::~CAxisAlgorithmTemporalSplitting() -{ -} - - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp deleted file mode 100755 index d3fa93ea..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/*! - \file axis_algorithm_reduce_domain.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a axis - */ -#ifndef __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__ -#define __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__ - -#include "transformation.hpp" -#include "algorithm_transformation_no_data_modification.hpp" -namespace xios -{ - - class CAxis; - class CScalar; - class CTemporalSplitting; - - /*! - \class CAxisAlgorithmExtractDomain - Extract a domain to an axis - */ - class CAxisAlgorithmTemporalSplitting : public CAlgorithmTransformationNoDataModification - { - public: - CAxisAlgorithmTemporalSplitting(bool isSource, CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo); - virtual ~CAxisAlgorithmTemporalSplitting(); - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\ntemporal_splitting";} - - virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) ; - - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - private: - int nrecords_; - static bool dummyRegistered_; - }; - -} -#endif // __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__ diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp deleted file mode 100755 index bee3e020..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/*! - \file axis_algorithm_zoom.cpp - \brief Algorithm for zooming an axis. - */ -#include "axis_algorithm_zoom.hpp" -#include "axis.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "zoom_axis.hpp" - -namespace xios { -shared_ptr CAxisAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector axisListDestP = gridDst->getAxis(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CZoomAxis* zoomAxis = dynamic_cast (transformation); - int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], zoomAxis); -} -CATCH - -bool CAxisAlgorithmZoom::dummyRegistered_ = CAxisAlgorithmZoom::registerTrans(); -bool CAxisAlgorithmZoom::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_ZOOM_AXIS, create); -} -CATCH - -CAxisAlgorithmZoom::CAxisAlgorithmZoom(bool isSource, CAxis* axisDestination, CAxis* axisSource, CZoomAxis* zoomAxis) -: CAlgorithmTransformationTransfer(isSource), axisDest_(axisDestination), axisSrc_(axisSource) -TRY -{ - zoomAxis->checkValid(axisSource); - zoomBegin_ = zoomAxis->begin.getValue(); - zoomN_ = zoomAxis->n.getValue(); - zoomEnd_ = zoomBegin_ + zoomN_ - 1; - - if (zoomN_ > axisSource->n_glo.getValue()) - { - ERROR("CAxisAlgorithmZoom::CAxisAlgorithmZoom(CAxis* axisDestination, CAxis* axisSource, CZoomAxis* zoomAxis)", - << "Zoom size is greater than global size of source axis" - << "Global size of source axis " <getId() << " is " << axisSource->n_glo.getValue() << std::endl - << "Zoom size is " << zoomN_ ); - } - - int idxSrc, nDest = 0, beginDestLoc, beginDestGlo = 0 ; - int indGloDest, indGloSrc, iSrc; - for (int i = 0; i < axisSrc_->n.getValue(); i++) - { - idxSrc = axisSrc_->index(i); - if ((idxSrc >= zoomBegin_) && (idxSrc <= zoomEnd_)) - { - if (nDest == 0) beginDestLoc = i; - ++nDest; - } - } - beginDestGlo = beginDestLoc + axisSrc_->begin - zoomBegin_; - axisDest_->n_glo.setValue(zoomN_); - axisDest_->n.setValue(nDest); - axisDest_->begin.setValue(beginDestGlo); - axisDest_->index.resize(nDest); - - axisDest_->data_n.setValue(nDest); - axisDest_->data_begin.setValue(0); - axisDest_->data_index.resize(nDest); - - axisDest_->mask.resize(nDest); - if (axisSrc_->hasValue) axisDest_->value.resize(nDest); - if (axisSrc_->hasLabel) axisDest_->label.resize(nDest); - if (axisSrc_->hasBounds) axisDest_->bounds.resize(2,nDest); - - auto& transMap = this->transformationMapping_; - - for (int iDest = 0; iDest < nDest; iDest++) - { - iSrc = iDest + beginDestLoc; - axisDest_->index(iDest) = iDest + beginDestGlo; - axisDest_->data_index(iDest) = axisSrc_->data_index(iSrc) - beginDestLoc; - axisDest_->mask(iDest) = axisSrc_->mask(iSrc); - - if (axisSrc_->hasValue) - axisDest_->value(iDest) = axisSrc_->value(iSrc); - if (axisSrc_->hasLabel) - axisDest_->label(iDest) = axisSrc_->label(iSrc); - if (axisSrc_->hasBounds) - { - axisDest_->bounds(0,iDest) = axisSrc_->bounds(0,iSrc); - axisDest_->bounds(1,iDest) = axisSrc_->bounds(1,iSrc); - } - indGloDest = axisDest_->index(iDest); - indGloSrc = axisSrc_->index(iSrc); - transMap[indGloDest]=indGloSrc; - - } - - axisDestination->checkAttributes() ; - - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp b/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp deleted file mode 100755 index 74f37906..00000000 --- a/xios_2311_src/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/*! - \file axis_algorithm_zoom.hpp - \brief Algorithm for zooming an axis. - */ -#ifndef __XIOS_AXIS_ALGORITHM_ZOOM_HPP__ -#define __XIOS_AXIS_ALGORITHM_ZOOM_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { -class CAxis; -class CZoomAxis; - -/*! - \class CAxisAlgorithmZoom - Implementing zoom on axis - A zoomed region can be considered as region that isn't masked. - Only this zoomed region is zoomed to write on Netcdf. -*/ -class CAxisAlgorithmZoom : public CAlgorithmTransformationTransfer -{ -public: - CAxisAlgorithmZoom(bool isSource, CAxis* axisDestination, CAxis* axisSource, CZoomAxis* zoomAxis); - - virtual ~CAxisAlgorithmZoom() {} - - static bool registerTrans(); - -private: - -private: - //! Global zoom begin on axis - StdSize zoomBegin_; - - //! Global zoom end on axis - StdSize zoomEnd_; - - //! Global zoom size on axis - StdSize zoomN_; - - std::vector zoomIndex_; - -private: - - CAxis* axisSrc_; - CAxis* axisDest_; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_AXIS_ALGORITHM_ZOOM_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp deleted file mode 100755 index 9dd12957..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/*! - \file domain_algorithm_compute_connectivity.cpp - \author Ha NGUYEN - \since 15 Jul 2016 - \date 15 Jul 2016 - - \brief Algorithm for compute_connectivity on an domain. - */ -#include "domain_algorithm_compute_connectivity.hpp" -#include "compute_connectivity_domain.hpp" -#include "mesh.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmComputeConnectivity::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CComputeConnectivityDomain* compute_connectivityDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain); -} -CATCH - -bool CDomainAlgorithmComputeConnectivity::dummyRegistered_ = CDomainAlgorithmComputeConnectivity::registerTrans(); - -bool CDomainAlgorithmComputeConnectivity::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, create); -} -CATCH - -CDomainAlgorithmComputeConnectivity::CDomainAlgorithmComputeConnectivity(bool isSource, CDomain* domainDestination, CDomain* domainSource, - CComputeConnectivityDomain* compute_connectivityDomain) -: CAlgorithmTransformationNoDataModification(isSource) -TRY -{ - compute_connectivityDomain->checkValid(domainDestination); - int& nbNeighborMax = compute_connectivityDomain->n_neighbor_max; - CArray& nbNeighbor = compute_connectivityDomain->n_neighbor; - CArray& localNeighbors = compute_connectivityDomain->local_neighbor; - int type = 1; // Edge type - switch (compute_connectivityDomain->type) - { - case CComputeConnectivityDomain::type_attr::node : - type = 0; - break; - case CComputeConnectivityDomain::type_attr::edge : - type = 1; - break; - default: - break; - } - - computeLocalConnectivity(type, domainDestination, nbNeighborMax, nbNeighbor, localNeighbors); -} -CATCH - -/*! - * Compute local connectivity of a domain - * \param[in] type type of connectivity (node or edge) - * \param[in] domain domain on which we calculate local connectivity - * \param[in/out] nbConnectivityMax maximum number of neighbor a cell of domain has - * \param[in/out] nbConnectivity number of neighbor a cell has - * \param[in/out] localConnectivity localConnectivity local index of neighbor of a cell - */ -void CDomainAlgorithmComputeConnectivity::computeLocalConnectivity(int type, - CDomain* domain, - int& nbConnectivityMax, - CArray& nbConnectivity, - CArray& localConnectivity) -TRY -{ - - CMesh mesh; - - CArray& bounds_lon = domain->bounds_lon_1d; - CArray& bounds_lat = domain->bounds_lat_1d; - int ncell = bounds_lon.shape()[1]; - CArray localIndex(ncell); - for (int idx = 0; idx & nbConnectivity, - CArray& localConnectivity); - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} - -#endif // __XIOS_DOMAIN_ALGORITHM_COMPUTE_CONNECTIVITY_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.cpp deleted file mode 100755 index 3cfcae92..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.cpp +++ /dev/null @@ -1,694 +0,0 @@ -/*! - \file domain_algorithm_expand.cpp - \author Ha NGUYEN - \since 08 Aug 2016 - \date 19 Sep 2016 - - \brief Algorithm for expanding an domain. - */ -#include "domain_algorithm_expand.hpp" -#include "expand_domain.hpp" -#include "mesh.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "context.hpp" -#include "context_client.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmExpand::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CExpandDomain* expandDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], expandDomain); -} -CATCH - -bool CDomainAlgorithmExpand::dummyRegistered_ = CDomainAlgorithmExpand::registerTrans(); -bool CDomainAlgorithmExpand::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_EXPAND_DOMAIN, create); -} -CATCH - -CDomainAlgorithmExpand::CDomainAlgorithmExpand(bool isSource, CDomain* domainDestination, - CDomain* domainSource, - CExpandDomain* expandDomain) -: CAlgorithmTransformationTransfer(isSource), isXPeriodic_(false), isYPeriodic_(false) -TRY -{ - if (domainDestination == domainSource) - { - ERROR("CDomainAlgorithmExpand::CDomainAlgorithmExpand(CDomain* domainDestination,CDomain* domainSource, CExpandDomain* expandDomain)", - << "Domain source and domain destination are the same. Please make sure domain destination refers to domain source" << std::endl - << "Domain source " <getId() << std::endl - << "Domain destination " <getId() << std::endl); - } - // Make sure domain source have all valid attributes - // domainSource->checkAllAttributes(); - expandDomain->checkValid(domainDestination); - if (!expandDomain->i_periodic.isEmpty()) isXPeriodic_ = expandDomain->i_periodic; - if (!expandDomain->j_periodic.isEmpty()) isYPeriodic_ = expandDomain->j_periodic; - - switch (expandDomain->type) - { - case CExpandDomain::type_attr::node : - expandDomainNodeConnectivity(domainDestination, - domainSource); - break; - case CExpandDomain::type_attr::edge : - expandDomainEdgeConnectivity(domainDestination, - domainSource); - break; - default: - break; - } - - domainDestination->checkAttributes() ; - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), domainDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - -/*! - * Expand domain with edge-type neighbor - * \param[in/out] domainDestination domain destination and will be modified - * \param[in] domainSource domain source - */ -void CDomainAlgorithmExpand::expandDomainEdgeConnectivity(CDomain* domainDestination, - CDomain* domainSource) -TRY -{ - CContext* context = CContext::getCurrent(); - - int type = 1; // For edge - CMesh mesh; - CArray& bounds_lon_src = domainSource->bounds_lon_1d; - CArray& bounds_lat_src = domainSource->bounds_lat_1d; - CArray neighborsSrc; - switch (domainSource->type) { - case CDomain::type_attr::unstructured: - mesh.getGlobalNghbFaces(type, context->intraComm_, domainSource->i_index, bounds_lon_src, bounds_lat_src, neighborsSrc); - updateUnstructuredDomainAttributes(domainDestination, domainSource, neighborsSrc); - break; - default: - updateRectilinearDomainAttributes(domainDestination, domainSource, neighborsSrc); - break; - } -} -CATCH - -/*! - * Expand domain with node-type neighbor - * \param[in/out] domainDestination domain destination and will be modified - * \param[in] domainSource domain source - */ -void CDomainAlgorithmExpand::expandDomainNodeConnectivity(CDomain* domainDestination, - CDomain* domainSource) -TRY -{ - CContext* context = CContext::getCurrent(); - - int type = 1; // For edge - CMesh mesh; - CArray& bounds_lon_src = domainSource->bounds_lon_1d; - CArray& bounds_lat_src = domainSource->bounds_lat_1d; - CArray neighborsSrc; - switch (domainSource->type) { - case CDomain::type_attr::unstructured: - mesh.getGlobalNghbFaces(type, context->intraComm_, domainSource->i_index, bounds_lon_src, bounds_lat_src, neighborsSrc); - updateUnstructuredDomainAttributes(domainDestination, domainSource, neighborsSrc); - break; - default: - updateRectilinearDomainAttributes(domainDestination, domainSource, neighborsSrc); - break; - } -} -CATCH - -/*! - * Extend rectilinear or curvilinear domain destination and update its attributes - * Suppose that domain destination and domain source have the same values for all attributes (by inheritance) - * \param [in/out] domainDestination domain destination - * \param [in] domainSource domain source - * \param [in] neighborsDomainSrc neighbor of domain source. For now, we don't need it for rectilinear - */ -void CDomainAlgorithmExpand::updateRectilinearDomainAttributes(CDomain* domainDestination, - CDomain* domainSource, - CArray& neighborsDomainSrc) -TRY -{ - int index, globalIndex, idx; - int iindexDst, jindexDst, globIndexDst; - int iindexSrc, jindexSrc, globIndexSrc; - CContext* context = CContext::getCurrent(); - - // First of all, "copy" all attributes of domain source to domain destination - StdString domainDstRef = (!domainDestination->domain_ref.isEmpty()) ? domainDestination->domain_ref.getValue() - : ""; - if (domainDstRef != domainSource->getId()) - { - domainDestination->domain_ref.setValue(domainSource->getId()); - domainDestination->solveRefInheritance(true); - } - - if (domainDstRef.empty()) domainDestination->domain_ref.reset(); - else domainDestination->domain_ref.setValue(domainDstRef); - - - // Here are attributes of source need tranfering - int niGloSrc = domainSource->ni_glo; - int njGloSrc = domainSource->nj_glo; - int niSrc = domainSource->ni, ibegin = domainSource->ibegin; - int njSrc = domainSource->nj, jbegin = domainSource->jbegin; - int dataDimSrc = domainSource->data_dim; - CArray& mask_1d_src = domainSource->domainMask; - CArray& i_index_src = domainSource->i_index; - CArray& j_index_src = domainSource->j_index; - CArray& data_i_index_src = domainSource->data_i_index; - CArray& data_j_index_src = domainSource->data_j_index; - int data_i_begin_src = domainSource->data_ibegin; - int data_j_begin_src = domainSource->data_jbegin; - CArray& lon_src = domainSource->lonvalue; - CArray& lat_src = domainSource->latvalue; - - // We need to generate boundary for longitude and latitude - if (domainSource->bounds_lon_1d.isEmpty() || domainSource->bounds_lat_1d.isEmpty()) - { - CArray lon = lon_src(Range(0,niSrc-1)); - CArray lat = lat_src(Range(0,lat_src.numElements()-niSrc,niSrc)); - CArray& bounds_lon_src = domainSource->bounds_lon_1d; - CArray& bounds_lat_src = domainSource->bounds_lat_1d; - domainSource->fillInRectilinearBoundLonLat(lon_src, lat_src, bounds_lon_src, bounds_lat_src); - } - - - CArray& bounds_lon_src = domainSource->bounds_lon_1d; - CArray& bounds_lat_src = domainSource->bounds_lat_1d; - - int nVertex = bounds_lon_src.shape()[0]; - int oldNbLocal = i_index_src.numElements(); - // Calculate ni, nj by using i_index and j_index - int niSrcByIndex = max(i_index_src) - min(i_index_src) + 1; - int njSrcByIndex = max(j_index_src) - min(j_index_src) + 1; - int dataIindexBoundSrc = (1 == dataDimSrc) ? (niSrcByIndex * njSrcByIndex) : niSrcByIndex; - int dataJindexBoundSrc = (1 == dataDimSrc) ? (niSrcByIndex * njSrcByIndex) : njSrcByIndex; - - // Uncompress data_i_index, data_j_index - CArray data_i_index_src_full(oldNbLocal); - CArray data_j_index_src_full(oldNbLocal); - int nbUnMaskedPointOnLocalDomain = 0; - data_i_index_src_full = -1; // Suppose all values are masked - data_j_index_src_full = -1; // Suppose all values are masked - for (idx = 0; idx < data_i_index_src.numElements(); ++idx) - { - int dataIidx = data_i_index_src(idx) + data_i_begin_src; - int dataJidx = data_j_index_src(idx) + data_j_begin_src; - if ((0 <= dataIidx) && (dataIidx < dataIindexBoundSrc) && - (0 <= dataJidx) && (dataJidx < dataJindexBoundSrc)) - { - data_i_index_src_full(nbUnMaskedPointOnLocalDomain) = dataIidx; - data_j_index_src_full(nbUnMaskedPointOnLocalDomain) = dataJidx; - ++nbUnMaskedPointOnLocalDomain; - } - } - - // Expand domain destination, not only local but also global - int niGloDst = niGloSrc + 2; - int njGloDst = njGloSrc + 2; - int niDst = niSrc + 2; - int njDst = njSrc + 2; - domainDestination->ni_glo.setValue(niGloDst); - domainDestination->nj_glo.setValue(njGloDst); - domainDestination->ni.setValue(niDst); - domainDestination->nj.setValue(njDst); - - CArray& mask_1d_dst = domainDestination->domainMask; - CArray& i_index_dst = domainDestination->i_index; - CArray& j_index_dst = domainDestination->j_index; - CArray& data_i_index_dst = domainDestination->data_i_index; - CArray& data_j_index_dst = domainDestination->data_j_index; - - // Make sure that we use only lonvalue_client, latvalue_client - if (!domainDestination->lonvalue_1d.isEmpty()) domainDestination->lonvalue_1d.reset(); - if (!domainDestination->latvalue_1d.isEmpty()) domainDestination->latvalue_1d.reset(); - if (!domainDestination->lonvalue_2d.isEmpty()) domainDestination->lonvalue_2d.reset(); - if (!domainDestination->latvalue_2d.isEmpty()) domainDestination->latvalue_2d.reset(); - - // Recalculate i_index, j_index of extended domain - // Should be enough for common case, but if we have arbitrary distribution? - int newNbLocalDst = niDst * njDst; - - mask_1d_dst.resize(newNbLocalDst); - i_index_dst.resize(newNbLocalDst); - j_index_dst.resize(newNbLocalDst); - CArray data_i_index_dst_full(newNbLocalDst); - CArray data_j_index_dst_full(newNbLocalDst); - - if (newNbLocalDst==0) - { - domainDestination->lonvalue.resize(newNbLocalDst); - domainDestination->latvalue.resize(newNbLocalDst); - domainDestination->bounds_lon_1d.resize(nVertex, newNbLocalDst); - domainDestination->bounds_lat_1d.resize(nVertex, newNbLocalDst); - } - else - { - domainDestination->lonvalue.resizeAndPreserve(newNbLocalDst); - domainDestination->latvalue.resizeAndPreserve(newNbLocalDst); - domainDestination->bounds_lon_1d.resizeAndPreserve(nVertex, newNbLocalDst); - domainDestination->bounds_lat_1d.resizeAndPreserve(nVertex, newNbLocalDst); - } - CArray& lon_dst = domainDestination->lonvalue; - CArray& lat_dst = domainDestination->latvalue; - CArray& bounds_lon_dst = domainDestination->bounds_lon_1d; - CArray& bounds_lat_dst = domainDestination->bounds_lat_1d; - - // Update i_index, j_index - for (int j = 0; j < njDst; ++j) - for (int i = 0; i < niDst; ++i) - { - idx = j * niDst + i; - i_index_dst(idx) = i + ibegin; - j_index_dst(idx) = j + jbegin; - } - - - // 1. Fill in array relating to global index (i_index, j_index, transmap, etc, ...) - // Global index mapping between destination and source - - transformationMapping_.rehash(std::ceil(newNbLocalDst/transformationMapping_.max_load_factor())); - - // Index mapping for local domain - // Mapping global index of expanded domain into original one - // (Representing global index of expanded domain in form of global index of original one) - CArray globalIndexSrcOnDstDomain(newNbLocalDst); - for (idx = 0; idx < newNbLocalDst; ++idx) - { - iindexDst = i_index_dst(idx); - jindexDst = j_index_dst(idx); - globIndexDst = jindexDst * niGloDst + iindexDst; - globIndexSrc = (((jindexDst-1)+njGloSrc) % njGloSrc) * niGloSrc + (((iindexDst-1)+niGloSrc) % niGloSrc) ; - globalIndexSrcOnDstDomain(idx) = globIndexSrc; - - transformationMapping_[globIndexDst] = globIndexSrc; - } - - // 2. Exchange local info among domains (lon,lat,bounds,mask,etc,...) - CClientClientDHTDouble::Index2VectorInfoTypeMap localData; - localData.rehash(std::ceil(oldNbLocal/localData.max_load_factor())); - - // Information exchanged among domains (attention to their order), number in parentheses presents size of data - // lon(1) + lat(1) + bounds_lon(nVertex) + bounds_lat(nVertex) + mask(1) + data_i_index(1) - int dataPackageSize = 1 + 1 + // lon + lat - nVertex + nVertex + //bounds_lon + bounds_lat - 1 + // mask_1d_dst; - 1 + 1; // data_i_index + data_j_index - // Initialize database - for (int idx = 0; idx < oldNbLocal; ++idx) - { - index = i_index_src(idx) + j_index_src(idx) * niGloSrc; - localData[index].resize(dataPackageSize); - std::vector& data = localData[index]; - - //Pack data - int dataIdx = 0; - data[dataIdx] = lon_src(idx);++dataIdx; - data[dataIdx] = lat_src(idx);++dataIdx; - for (int i = 0; i < nVertex; ++i) - { - data[dataIdx] = bounds_lon_src(i,idx); ++dataIdx; - } - for (int i = 0; i < nVertex; ++i) - { - data[dataIdx] = bounds_lat_src(i,idx); ++dataIdx; - } - data[dataIdx] = mask_1d_src(idx) ? 1.0 : -1.0; ++dataIdx; - data[dataIdx] = data_i_index_src_full(idx);++dataIdx; - data[dataIdx] = data_j_index_src_full(idx); - } - - CClientClientDHTDouble dhtData(localData,context->intraComm_); - dhtData.computeIndexInfoMapping(globalIndexSrcOnDstDomain); - CClientClientDHTDouble::Index2VectorInfoTypeMap& neighborData = dhtData.getInfoIndexMap(); - CClientClientDHTDouble::Index2VectorInfoTypeMap::iterator ite = neighborData.end(), it; - - // Ok get all data for destination - // If domain is not periodic, then we mask all extended part. - int nbUnMaskedPointOnExtendedPart = 0, remainder = 0, dataIIndex, dataJIndex; - size_t nIdx; - double maskValue = 1.0; - for (index = 0; index < newNbLocalDst; ++index) - { - nIdx = globalIndexSrcOnDstDomain(index); - it = neighborData.find(nIdx); - if (ite != it) - { - std::vector& data = it->second; - // Unpack data - int dataIdx = 0; - lon_dst(index) = data[dataIdx]; ++dataIdx; - lat_dst(index) = data[dataIdx]; ++dataIdx; - for (int i = 0; i < nVertex; ++i) - { - bounds_lon_dst(i,index) = data[dataIdx]; ++dataIdx; - } - for (int i = 0; i < nVertex; ++i) - { - bounds_lat_dst(i,index) = data[dataIdx]; ++dataIdx; - } - - // Check whether we have x periodic. If we don't, we should mask all point at 0 and niGloDst-1 - maskValue = data[dataIdx]; - if (!isXPeriodic_) - { - remainder = i_index_dst(index) % (niGloDst-1); - if (0 == remainder) - { - maskValue = -1.0; - } - } - - if (!isYPeriodic_) - { - remainder = j_index_dst(index) % (njGloDst-1); - if (0 == remainder) - { - maskValue = -1.0; - } - } - - mask_1d_dst(index) = (1.0 == maskValue) ? true : false; ++dataIdx; - - dataIIndex = (int) data[dataIdx]; - if (!isXPeriodic_) - { - remainder = i_index_dst(index) % (niGloDst-1); - if (0 == remainder) - { - dataIIndex = -1; - } - } - data_i_index_dst_full(index) = dataIIndex; ++dataIdx; - - dataJIndex = (int) data[dataIdx]; - if (!isYPeriodic_) - { - remainder = j_index_dst(index) % (njGloDst-1); - if (0 == remainder) - { - dataJIndex = -1; - } - } - data_j_index_dst_full(index) = dataJIndex; - - if ((0 <= data_i_index_dst_full(index)) && (0 <= data_j_index_dst_full(index))) - { - ++nbUnMaskedPointOnExtendedPart; - } - } - } - - - // Finally, update data_i_index, data_j_index - int dataDstDim = domainDestination->data_dim; - data_i_index_dst.resize(nbUnMaskedPointOnExtendedPart); - data_j_index_dst.resize(nbUnMaskedPointOnExtendedPart); - int count = 0; - for (idx = 0; idx < newNbLocalDst; ++idx) - { - dataIIndex = data_i_index_dst_full(idx); - dataJIndex = data_j_index_dst_full(idx); - if ((0 <= dataIIndex) && (0 <= dataJIndex)) - { - data_i_index_dst(count) = (1 == dataDstDim) ? idx : i_index_dst(idx) - i_index_dst(0); - data_j_index_dst(count) = (1 == dataDstDim) ? 0 : j_index_dst(idx) - j_index_dst(0); - ++count; - } - } - - // Update data_ni, data_nj - - domainDestination->data_ni.setValue((1==dataDstDim) ? niDst * njDst : niDst); - domainDestination->data_nj.setValue((1==dataDstDim) ? niDst * njDst : njDst); - domainDestination->data_ibegin.setValue(0); - domainDestination->data_jbegin.setValue(0); - - // Update longitude and latitude - if (niSrc == domainSource->lonvalue_1d.numElements() && njSrc == domainSource->latvalue_1d.numElements()) // Ok, we have rectilinear here - { - domainDestination->lonvalue_1d.resize(niDst); - domainDestination->lonvalue_1d = lon_dst(Range(0,niDst-1)); - domainDestination->latvalue_1d.resize(njDst); - domainDestination->latvalue_1d = lat_dst(Range(0,lat_dst.numElements()-niDst,niDst)); - } - else // It should be curvilinear - { - domainDestination->lonvalue_1d.resize(lon_dst.numElements()); - domainDestination->lonvalue_1d = lon_dst; - domainDestination->latvalue_1d.resize(lat_dst.numElements()); - domainDestination->latvalue_1d = (lat_dst); - } - domainDestination->mask_1d.resize(domainDestination->domainMask.numElements()) ; - domainDestination->mask_1d=domainDestination->domainMask ; - domainDestination->computeLocalMask() ; -} -CATCH - -/*! - * Extend domain destination and update its attributes - * Suppose that domain destination and domain source have the same values for all attributes (by inheritance) - * \param [in/out] domainDestination domain destination - * \param [in] domainSource domain source - * \param [in] neighborsDomainSrc domain extended part - */ -void CDomainAlgorithmExpand::updateUnstructuredDomainAttributes(CDomain* domainDestination, - CDomain* domainSource, - CArray& neighborsDomainSrc) -TRY -{ - - CContext* context = CContext::getCurrent(); - - // First of all, "copy" all attributes of domain source to domain destination - StdString domainDstRef = (!domainDestination->domain_ref.isEmpty()) ? domainDestination->domain_ref.getValue() - : ""; - if (domainDstRef != domainSource->getId()) - { - domainDestination->domain_ref.setValue(domainSource->getId()); - domainDestination->solveRefInheritance(true); - } - - if (domainDstRef.empty()) domainDestination->domain_ref.reset(); - else domainDestination->domain_ref.setValue(domainDstRef); - - // Now extend domain destination - int niGlob = domainSource->ni_glo; - CArray& mask_1d_src = domainSource->domainMask; - CArray& i_index_src = domainSource->i_index; - CArray& lon_src = domainSource->lonvalue_1d; - CArray& lat_src = domainSource->latvalue_1d; - CArray& bounds_lon_src = domainSource->bounds_lon_1d; - CArray& bounds_lat_src = domainSource->bounds_lat_1d; - CArray& data_i_index_src = domainSource->data_i_index; - - int oldNbLocal = i_index_src.numElements(), index, globalIndex; - // Uncompress data_i_index - CArray data_i_index_src_full(oldNbLocal); - int nbUnMaskedPointOnLocalDomain = 0; - data_i_index_src_full = -1; // Suppose all values are masked - for (int idx = 0; idx < data_i_index_src.numElements(); ++idx) - { - int dataIdx = data_i_index_src(idx); - if ((0 <= dataIdx) && (dataIdx < oldNbLocal)) - { - data_i_index_src_full(nbUnMaskedPointOnLocalDomain) = dataIdx; - ++nbUnMaskedPointOnLocalDomain; - } - } - - CArray& mask_1d_dst = domainDestination->domainMask; - CArray& i_index_dst = domainDestination->i_index; - CArray& j_index_dst = domainDestination->j_index; - CArray& lon_dst = domainDestination->lonvalue_1d; - CArray& lat_dst = domainDestination->latvalue_1d; - CArray& bounds_lon_dst = domainDestination->bounds_lon_1d; - CArray& bounds_lat_dst = domainDestination->bounds_lat_1d; - CArray& data_i_index_dst = domainDestination->data_i_index; - CArray& data_j_index_dst = domainDestination->data_j_index; - - // Resize all array-like attributes of domain destination - int nbNeighbor = neighborsDomainSrc.shape()[1]; - int newNbLocalDst = nbNeighbor + oldNbLocal; - int nVertex = bounds_lon_dst.shape()[0]; - - if (newNbLocalDst==0) - { - mask_1d_dst.resize(newNbLocalDst); - i_index_dst.resize(newNbLocalDst); - j_index_dst.resize(newNbLocalDst); - lon_dst.resize(newNbLocalDst); - lat_dst.resize(newNbLocalDst); - bounds_lon_dst.resize(nVertex, newNbLocalDst); - bounds_lat_dst.resize(nVertex, newNbLocalDst); - } - else - { - mask_1d_dst.resizeAndPreserve(newNbLocalDst); - i_index_dst.resizeAndPreserve(newNbLocalDst); - j_index_dst.resizeAndPreserve(newNbLocalDst); - lon_dst.resizeAndPreserve(newNbLocalDst); - lat_dst.resizeAndPreserve(newNbLocalDst); - bounds_lon_dst.resizeAndPreserve(nVertex, newNbLocalDst); - bounds_lat_dst.resizeAndPreserve(nVertex, newNbLocalDst); - } - CArray data_i_index_dst_full(newNbLocalDst); - data_i_index_dst_full(Range(0,oldNbLocal-1)) = data_i_index_src_full; - data_i_index_dst_full(Range(oldNbLocal,newNbLocalDst-1)) = -1; - - // 1. Fill in array relating to global index (i_index, j_index, transmap, etc, ...) - // Global index mapping between destination and source - - transformationMapping_.rehash(std::ceil(newNbLocalDst/transformationMapping_.max_load_factor())); - // First, index mapping for local domain - for (int idx = 0; idx < oldNbLocal; ++idx) - { - index = i_index_dst(idx); - transformationMapping_[index] = index ; - } - // Then, index mapping for extended part - for (int idx = 0; idx < nbNeighbor; ++idx) - { - index = idx + oldNbLocal; - globalIndex = neighborsDomainSrc(0,idx); - i_index_dst(index) = globalIndex; - j_index_dst(index) = 0; - transformationMapping_[globalIndex]=globalIndex; - } - - // 2. Exchange local info among domains (lon,lat,bounds,mask,etc,...) - CClientClientDHTDouble::Index2VectorInfoTypeMap localData; - localData.rehash(std::ceil(oldNbLocal/localData.max_load_factor())); - // Information exchanged among domains (attention to their order), number in parentheses presents size of data - // lon(1) + lat(1) + bounds_lon(nVertex) + bounds_lat(nVertex) + mask(1) + data_i_index(1) - int dataPackageSize = 1 + 1 + // lon + lat - nVertex + nVertex + //bounds_lon + bounds_lat - 1 + // mask_1d_dst; - 1; // data_i_index - // Initialize database - for (int idx = 0; idx < oldNbLocal; ++idx) - { - index = i_index_src(idx); - localData[index].resize(dataPackageSize); - std::vector& data = localData[index]; - - //Pack data - int dataIdx = 0; - data[dataIdx] = lon_src(idx);++dataIdx; - data[dataIdx] = lat_src(idx);++dataIdx; - for (int i = 0; i < nVertex; ++i) - { - data[dataIdx] = bounds_lon_src(i,idx); ++dataIdx; - } - for (int i = 0; i < nVertex; ++i) - { - data[dataIdx] = bounds_lat_src(i,idx); ++dataIdx; - } - data[dataIdx] = mask_1d_src(idx) ? 1.0 : -1.0; ++dataIdx; - data[dataIdx] = data_i_index_src_full(idx); - } - - CClientClientDHTDouble dhtData(localData, context->intraComm_); - CArray neighborInd(nbNeighbor); - for (int idx = 0; idx < nbNeighbor; ++idx) - neighborInd(idx) = neighborsDomainSrc(0,idx); - - // Compute local data on other domains - dhtData.computeIndexInfoMapping(neighborInd); - CClientClientDHTDouble::Index2VectorInfoTypeMap& neighborData = dhtData.getInfoIndexMap(); - CClientClientDHTDouble::Index2VectorInfoTypeMap::iterator ite = neighborData.end(), it; - // Ok get neighbor data - size_t nIdx; - int nbUnMaskedPointOnExtendedPart = 0; - for (int idx = 0; idx < nbNeighbor; ++idx) - { - nIdx = neighborInd(idx); - it = neighborData.find(nIdx); - if (ite != it) - { - index = idx + oldNbLocal; - std::vector& data = it->second; - // Unpack data - int dataIdx = 0; - lon_dst(index) = data[dataIdx]; ++dataIdx; - lat_dst(index) = data[dataIdx]; ++dataIdx; - for (int i = 0; i < nVertex; ++i) - { - bounds_lon_dst(i,index) = data[dataIdx]; ++dataIdx; - } - for (int i = 0; i < nVertex; ++i) - { - bounds_lat_dst(i,index) = data[dataIdx]; ++dataIdx; - } - mask_1d_dst(index) = (1.0 == data[dataIdx]) ? true : false; ++dataIdx; - data_i_index_dst_full(index) = (int)(data[dataIdx]); - if (0 <= data_i_index_dst_full(index)) - { - data_i_index_dst_full(index) = index; - ++nbUnMaskedPointOnExtendedPart; - } - } - } - - - // Finally, update data_i_index - int nbUnMaskedPointOnNewDstDomain = (nbUnMaskedPointOnExtendedPart + nbUnMaskedPointOnLocalDomain); - int count = 0, dataIdx; - for (int idx = 0; idx < newNbLocalDst; ++idx) - { - dataIdx = data_i_index_dst_full(idx); - if ((0 <= dataIdx)) - { - ++count; - } - } - - data_i_index_dst.resize(count); - data_j_index_dst.resize(count); - data_j_index_dst = 0; - - count = 0; - for (int idx = 0; idx < newNbLocalDst; ++idx) - { - dataIdx = data_i_index_dst_full(idx); - if ((0 <= dataIdx)) - { - data_i_index_dst(count) = dataIdx; - ++count; - } - } - - // Update ni - domainDestination->ni.setValue(newNbLocalDst); - domainDestination->mask_1d.resize(domainDestination->domainMask.numElements()) ; - domainDestination->mask_1d=domainDestination->domainMask ; - domainDestination->computeLocalMask() ; -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.hpp deleted file mode 100755 index 3bacf778..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_expand.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/*! - \file domain_algorithm_expand.hpp - \author Ha NGUYEN - \since 08 Aug 2016 - \date 08 Aug 2016 - - \brief Algorithm for expanding an domain. - */ -#ifndef __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { -class CDomain; -class CExpandDomain; - -/*! - \class CDomainAlgorithmExpand -*/ -class CDomainAlgorithmExpand : public CAlgorithmTransformationTransfer -{ -public: - CDomainAlgorithmExpand(bool isSource, CDomain* domainDestination, CDomain* domainSource, CExpandDomain* expandDomain); - - virtual ~CDomainAlgorithmExpand() {} - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nexpand_domain";} - -protected: - bool isXPeriodic_; // Flag to determine the periodicity of expansion (only for rectilinear) - bool isYPeriodic_; // Flag to determine the periodicity of expansion (only for rectilinear) - -protected: - void expandDomainEdgeConnectivity(CDomain* domainDestination, CDomain* domainSource); - void expandDomainNodeConnectivity(CDomain* domainDestination, CDomain* domainSource); - void updateRectilinearDomainAttributes(CDomain* domainDestination, - CDomain* domainSource, - CArray& neighborsDomainSrc); - - void updateUnstructuredDomainAttributes(CDomain* domainDestination, - CDomain* domainSource, - CArray& neighborsDomainSrc); - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_EXPAND_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.cpp deleted file mode 100755 index e430de6b..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include "domain_algorithm_extract.hpp" -#include "extract_domain.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "attribute_template.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CExtractDomain* extractDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], extractDomain); -} -CATCH - -bool CDomainAlgorithmExtract::dummyRegistered_ = CDomainAlgorithmExtract::registerTrans(); -bool CDomainAlgorithmExtract::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_EXTRACT_DOMAIN, create); -} -CATCH - -CDomainAlgorithmExtract::CDomainAlgorithmExtract(bool isSource, CDomain* domainDestination, CDomain* domainSource, CExtractDomain* extractDomain) -: CAlgorithmTransformationTransfer(isSource), domainSrc_(domainSource), domainDest_(domainDestination) -TRY -{ - // Reset geometrical attributes to avoid incompatible (user/domainSource) attributs - // attributs will be defined using domainSource and/or transformation attributs - domainDestination->type.reset(); - domainDestination->ni_glo.reset(); - domainDestination->nj_glo.reset(); - - domainDestination->i_index.reset(); // defined using domainSource->getLocalElement() - domainDestination->j_index.reset(); // " - domainDestination->ibegin.reset(); // will be computed in domainDestination->checkDomain() (from checkAttributes()) - domainDestination->ni.reset(); // " - domainDestination->jbegin.reset(); // " - domainDestination->nj.reset(); // " - - domainDestination->mask_1d.reset(); // defined scanning domainSource->getFullView() & domainSource->getWorkflowView() differencies - domainDestination->mask_2d.reset(); // in all case domainDestination->mask_1d used as reference - - // domainDestination->data_* attributes will be computed in : - domainDestination->data_dim.reset(); // domainDestination->checkDomainData() (from checkAttributes()) - domainDestination->data_ni.reset(); - domainDestination->data_nj.reset(); - domainDestination->data_ibegin.reset(); - domainDestination->data_jbegin.reset(); - domainDestination->data_i_index.reset(); // domainDestination->checkCompression() (from checkAttributes()) - domainDestination->data_j_index.reset(); - - // Next attributes will be set using domainSource->attributes - domainDestination->lonvalue_1d.reset(); - domainDestination->latvalue_1d.reset(); - domainDestination->lonvalue_2d.reset(); - domainDestination->latvalue_2d.reset(); - domainDestination->nvertex.reset(); - domainDestination->bounds_lon_1d.reset(); - domainDestination->bounds_lat_1d.reset(); - domainDestination->bounds_lon_2d.reset(); - domainDestination->bounds_lat_2d.reset(); - domainDestination->area.reset(); - domainDestination->radius.reset(); - - - extractDomain->checkValid(domainSource); - extractIBegin_ = extractDomain->ibegin.getValue(); - extractJBegin_ = extractDomain->jbegin.getValue(); - - extractNi_ = extractDomain->ni.getValue(); - extractNj_ = extractDomain->nj.getValue(); - - extractIEnd_ = extractIBegin_ + extractNi_ - 1; - extractJEnd_ = extractJBegin_ + extractNj_ - 1; - - if (extractNi_ > domainSource->ni_glo.getValue()) - { - ERROR("CDomainAlgorithmExtract::CDomainAlgorithmExtract(CDomain* domainDestination, CDomain* domainSource, CExtractDomain* extractDomain)", - << "Extract size is greater than size of domain source" - << "Size ni_glo of domain source " <getId() << " is " << domainSource->ni_glo.getValue() << std::endl - << "Extract size is " << extractNi_ ); - } - - if (extractNj_ > domainSource->nj_glo.getValue()) - { - ERROR("CDomainAlgorithmExtract::CDomainAlgorithmExtract(CDomain* domainDestination, CDomain* domainSource, CExtractDomain* extractDomain)", - << "Extract size is greater than size of domain source" - << "Size nj_glo of domain source " <getId() << " is " << domainSource->nj_glo.getValue() << std::endl - << "Extract size is " << extractNj_ ); - } - - // Calculate the size of local domain - int ind, indLocSrc, indLocDest, iIdxSrc, jIdxSrc, destIBegin = -1, destJBegin = -1, niDest = 0, njDest = 0 ; - int indGloDest, indGloSrc, niGloSrc = domainSrc_->ni_glo, iSrc, jSrc; - for (int j = 0; j < domainSrc_->nj.getValue(); j++) - { - for (int i = 0; i < domainSrc_->ni.getValue(); i++) - { - ind = j*domainSrc_->ni + i; - iIdxSrc = domainSrc_->i_index(ind); - if ((iIdxSrc >= extractIBegin_) && (iIdxSrc <= extractIEnd_)) - { - jIdxSrc = domainSrc_->j_index(ind); - if ((jIdxSrc >= extractJBegin_) && (jIdxSrc <= extractJEnd_)) - { - if ((niDest == 0) && (njDest == 0)) - { - destIBegin = i; - destJBegin = j; - } - if (i == destIBegin) ++njDest; - } - if (j == destJBegin) ++niDest; - - } - } - } - - - // Set attributes for this transformation - domainDest_->type = domainSrc_ -> type ; - domainDest_->ni_glo.setValue(extractNi_); - domainDest_->nj_glo.setValue(extractNj_); - domainDest_->i_index.resize(niDest*njDest); - domainDest_->j_index.resize(niDest*njDest); - - // Resize lon/lat, bounds, area arrays to local domain dimensions - if (!domainSrc_->lonvalue_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - domainDest_->lonvalue_1d.resize(niDest); - domainDest_->latvalue_1d.resize(njDest); - } - else if (domainDest_->type == CDomain::type_attr::unstructured) - { - domainDest_->lonvalue_1d.resize(niDest); - domainDest_->latvalue_1d.resize(niDest); - } - } - else if (!domainSrc_->lonvalue_2d.isEmpty()) - { - domainDest_->lonvalue_2d.resize(niDest,njDest); - domainDest_->latvalue_2d.resize(niDest,njDest); - } - if (domainSrc_->hasBounds) - { - if (!domainSrc_->bounds_lon_2d.isEmpty()) - { - domainDest_->bounds_lon_2d.resize(domainDest_->nvertex, niDest, njDest); - domainDest_->bounds_lon_2d.resize(domainDest_->nvertex, niDest, njDest); - } - else if (!domainSrc_->bounds_lon_1d.isEmpty()) - { - domainDest_->bounds_lon_1d.resize(domainDest_->nvertex, niDest); - domainDest_->bounds_lon_1d.resize(domainDest_->nvertex, niDest); - } - } - if (domainSrc_->hasArea) domainDest_->area.resize(niDest,njDest); - - // Set attributes required to define domainDestination->localElement_ and associated views, full and workflow) - CArray sourceGlobalIdx = domainSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - domainDest_->data_i_index.resize(niDest*njDest); - domainDestination->data_i_index = -1; - domainDest_->data_j_index.resize(niDest*njDest); - domainDestination->data_j_index = 0; - - CArray sourceWorkflowIdx = domainSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - - int iIdxSrcMin = INT_MAX; - int jIdxSrcMin = INT_MAX; - int IdxMin = INT_MAX; - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc)%domainSource->ni_glo < iIdxSrcMin ) - iIdxSrcMin = sourceGlobalIdx(countSrc)%domainSource->ni_glo; - if ( sourceGlobalIdx(countSrc)/domainSource->ni_glo < jIdxSrcMin ) - jIdxSrcMin = sourceGlobalIdx(countSrc)/domainSource->ni_glo; - if ( sourceGlobalIdx(countSrc) < IdxMin ) - IdxMin = sourceGlobalIdx(countSrc); - } - - int countDest(0); // increment of the position in destination domain - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - int iIdxSrc = sourceGlobalIdx(countSrc)%domainSource->ni_glo; - int jIdxSrc = sourceGlobalIdx(countSrc)/domainSource->ni_glo; - // check that point countSrc concerned by extract - if ( (iIdxSrc >= extractIBegin_) && (iIdxSrc <= extractIEnd_) - && (jIdxSrc >= extractJBegin_) && (jIdxSrc <= extractJEnd_) ) - { - // if concerned, convert source the global indexation in the extracted frame - domainDest_->i_index(countDest) = iIdxSrc-extractIBegin_; - domainDest_->j_index(countDest) = jIdxSrc-extractJBegin_; - - // ------------------ define transformation only if in the WF ------------------ - // countSrc+IdxMin is the global position (not index) considering the distributed memory - // - can be compared to the workflow view - int iIdxSrc2 = (countSrc+IdxMin)%domainSource->ni_glo; - int jIdxSrc2 = (countSrc+IdxMin)/domainSource->ni_glo; - int convert_locally_global_idx = (jIdxSrc2-jIdxSrcMin)*domainSource->ni + (iIdxSrc2-iIdxSrcMin) ; - bool concerned_by_WF(false); - for ( int i = 0 ; idata_i_index( countDest ) = countDest; - } - // ----------------------------------------------------------------------------- - - int iIdxDestLocal = countDest%niDest; - int jIdxDestLocal = countDest/niDest; - int iIdxSrcLocal = countSrc%domainSource->ni; - int jIdxSrcLocal = countSrc/domainSource->ni; - - // area - if (!domainSrc_->area.isEmpty()) - { - domainDest_->area(iIdxDestLocal,jIdxDestLocal) = domainSrc_->area(iIdxSrcLocal,jIdxSrcLocal); - } - - // bounds - if (!domainDest_->bounds_lon_1d.isEmpty()) - { - for (int n = 0; n < domainSrc_->nvertex; ++n) - { - domainDest_->bounds_lon_1d(n, countDest) = domainSrc_->bounds_lon_1d(n,countSrc); - domainDest_->bounds_lat_1d(n, countDest) = domainSrc_->bounds_lat_1d(n,countSrc); - } - } - else if (!domainDest_->bounds_lon_2d.isEmpty()) - { - for (int n = 0; n < domainSrc_->nvertex; ++n) - { - domainDest_->bounds_lon_2d(n, iIdxDestLocal, jIdxDestLocal) = domainSrc_->bounds_lon_2d(n, iIdxSrcLocal, jIdxSrcLocal); - domainDest_->bounds_lat_2d(n, iIdxDestLocal, jIdxDestLocal) = domainSrc_->bounds_lat_2d(n, iIdxSrcLocal, jIdxSrcLocal); - } - } - - // lon/lat - if (!domainDest_->lonvalue_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - // i : scan nbr of points in src - domainDest_->lonvalue_1d(iIdxDestLocal) = domainSrc_->lonvalue_1d(iIdxSrcLocal); - domainDest_->latvalue_1d(jIdxDestLocal) = domainSrc_->latvalue_1d(jIdxSrcLocal); - } - else if (domainDest_->type == CDomain::type_attr::unstructured) - { - domainDest_->lonvalue_1d(countDest) = domainSrc_->lonvalue_1d(countSrc); - domainDest_->latvalue_1d(countDest) = domainSrc_->latvalue_1d(countSrc); - } - } - else if (!domainDest_->lonvalue_2d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::curvilinear) - { - domainDest_->lonvalue_2d(iIdxDestLocal, jIdxDestLocal) = domainSrc_->lonvalue_2d(iIdxSrcLocal,jIdxSrcLocal); - domainDest_->latvalue_2d(iIdxDestLocal, jIdxDestLocal) = domainSrc_->latvalue_2d(iIdxSrcLocal,jIdxSrcLocal); - } - } - - // if point i has been identified as extracted, increment position in destination domain for the next point - countDest++; - } - - } - - domainDestination->checkAttributes() ; - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), domainDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.hpp deleted file mode 100755 index 423954b2..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_extract.hpp +++ /dev/null @@ -1,58 +0,0 @@ - -#ifndef __XIOS_DOMAIN_ALGORITHM_EXTRACT_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_EXTRACT_HPP__ - -#include "transformation.hpp" -#include "algorithm_transformation_transfer.hpp" - -namespace xios { - -class CDomain; -class CExtractDomain; - -/*! - \class CDomainAlgorithmExtract - Implementing extract (alternative zoom) on domain -*/ -class CDomainAlgorithmExtract : public CAlgorithmTransformationTransfer -{ -public: - CDomainAlgorithmExtract(bool isSource, CDomain* domainDestination, CDomain* domainSource, CExtractDomain* extractDomain); - - virtual ~CDomainAlgorithmExtract() {} - virtual StdString getAlgoName() {return "\\nextract_domain";} - - static bool registerTrans(); - -private: - //! Global extract begin on domain - int extractIBegin_; - int extractJBegin_; - - //! Global extract end on domain - int extractIEnd_; - int extractJEnd_; - - //! Global extract size on domain - int extractNi_; - int extractNj_; - - CDomain* domainSrc_ ; - CDomain* domainDest_ ; - - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_EXTRACT_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp deleted file mode 100755 index 067eac4e..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/*! - \file domain_algorithm_generate_rectilinear.cpp - \author Ha NGUYEN - \since 31 Aug 2015 - \date 31 Aug 2015 - - \brief Algorithm for automatic generation of rectilinear domain. - */ -#include "domain_algorithm_generate_rectilinear.hpp" -#include "grid.hpp" -#include "domain.hpp" -#include "context.hpp" -#include "context_client.hpp" -#include "generate_rectilinear_domain.hpp" -#include "grid_transformation_factory_impl.hpp" - -namespace xios { - - -shared_ptr CDomainAlgorithmGenerateRectilinear::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CGenerateRectilinearDomain* transform = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], gridDst, gridSrc, transform); -} -CATCH - -bool CDomainAlgorithmGenerateRectilinear::dummyRegistered_ = CDomainAlgorithmGenerateRectilinear::registerTrans(); - -bool CDomainAlgorithmGenerateRectilinear::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_GENERATE_RECTILINEAR_DOMAIN, create); -} -CATCH - - - -CDomainAlgorithmGenerateRectilinear::CDomainAlgorithmGenerateRectilinear(bool isSource, CDomain* domainDestination, CDomain* domainSource, - CGrid* gridDest, CGrid* gridSource, - CGenerateRectilinearDomain* genRectDomain) -: CAlgorithmTransformationNoDataModification(isSource), nbDomainDistributedPart_(0), domainDest_(domainDestination) -TRY -{ - genRectDomain->checkValid(domainDestination); - if (0 != gridSource) computeDistributionGridSource(gridSource); - else - { - computeDistributionGridDestination(gridDest); - } - fillInAttributesDomainDestination(); - domainDestination->checkAttributes() ; -} -CATCH - -/*! - Compute the index mapping between domain on grid source and one on grid destination -*/ -void CDomainAlgorithmGenerateRectilinear::computeIndexSourceMapping_(const std::vector* >& dataAuxInputs) -{ - /* Nothing to do */ -} - -/*! - Calculate the number of distributed parts on domain source -*/ -void CDomainAlgorithmGenerateRectilinear::computeDistributionGridSource(CGrid* gridSrc) -TRY -{ - CContext* context = CContext::getCurrent(); - int clientSize = context->intraCommSize_ ; - int clientRank = context->intraCommRank_ ; - - std::vector domListSrcP = gridSrc->getDomains(); - std::vector axisListSrcP = gridSrc->getAxis(); - - for (int i = 0; i < domListSrcP.size(); ++i) // support we have only domain, more than one, for now, dont know how to process - { - // First, find (roundly) distribution of associated axis (if any) - if (axisListSrcP.empty()) nbDomainDistributedPart_ = clientSize; - else - { - gridSrc->solveAxisRef(false); - int nbAxis = axisListSrcP.size(); - std::vector nbLocalAxis(nbAxis, 0); - for (int j = 0; j < nbAxis; ++j) - { - std::vector globalAxisIndex(axisListSrcP[j]->n); - for (int idx = 0; idx < axisListSrcP[j]->n; ++idx) - globalAxisIndex[idx] = axisListSrcP[j]->begin + idx; - HashXIOS hashFunc; - StdSize hashValue = hashFunc.hashVec(globalAxisIndex); - std::vector recvBuff(clientSize); - MPI_Gather(&hashValue, 1, MPI_UNSIGNED_LONG, - &recvBuff[0], 1, MPI_UNSIGNED_LONG, - 0, - context->intraComm_); - if (0 == clientRank) - { - std::set setTmp; - for (int k = 0; k < recvBuff.size(); ++k) - { - if (setTmp.end() == setTmp.find(recvBuff[k])) - { - ++nbLocalAxis[j]; - setTmp.insert(recvBuff[k]); - } - } - } - - MPI_Bcast(&nbLocalAxis[0], nbAxis, MPI_INT, - 0, context->intraComm_); - } - - int nbAxisDistributedPart = 1; - for (int j = 0; j < nbAxis; ++j) nbAxisDistributedPart *= nbLocalAxis[j]; - nbDomainDistributedPart_ = clientSize/nbAxisDistributedPart; - } - } -} -CATCH - -/*! - Compute the distribution of the domain destination by using available information provided by user such as n_distributed_partition of axis -*/ -void CDomainAlgorithmGenerateRectilinear::computeDistributionGridDestination(CGrid* gridDest) -TRY -{ - // For now, just suppose that the grid contains only one domain - std::vector axisListDestP = gridDest->getAxis(); - int nbPartition = 1, idx = 0; - for (int i = 0; i < gridDest->axis_domain_order.numElements(); ++i) - { - if (false == (gridDest->axis_domain_order)(i)) - { - nbPartition *= (axisListDestP[idx]->n_distributed_partition.isEmpty()) ? 1: (axisListDestP[idx]->n_distributed_partition.getValue()); - ++idx; - } - } - - CContext* context = CContext::getCurrent(); - int modPart = (context->intraCommSize_) % nbPartition; - if (0 != modPart) - ERROR("CDomainAlgorithmGenerateRectilinear::computeDistributionGridDestination(CGrid* gridDest)", - << "The grid " <getId() << " is not well-distributed. There is an incompatibility between distribution of axis and domain."); - nbDomainDistributedPart_ = context->intraCommSize_/nbPartition; - -} -CATCH - -/*! - Fill in all necessary attributes of domain destination and their values -*/ -void CDomainAlgorithmGenerateRectilinear::fillInAttributesDomainDestination() -TRY -{ - if (!domainDest_->distributionAttributesHaveValue()) - domainDest_->redistribute(nbDomainDistributedPart_); - domainDest_->fillInLonLat(); -} -CATCH -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp deleted file mode 100755 index 39838725..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/*! - \file domain_algorithm_generate_rectilinear.hpp - \author Ha NGUYEN - \since 31 Aug 2015 - \date 01 Sep 2015 - - \brief Algorithm for automatic generation of rectilinear domain. - */ -#ifndef __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__ - -#include "algorithm_transformation_no_data_modification.hpp" -#include "transformation.hpp" - -namespace xios { - -class CGrid; -class CDomain; -class CGenerateRectilinearDomain; - -/*! - \class CDomainAlgorithmGenerateRectilinear - Generate a rectilinear or CURVILINEAR domain and fill in necessary its attributes automatically - A new rectilinear (or CURVILINEAR) domain will also be distributed automatically among the processes. - The number of processes is deduced from the distribution of the grid source. -*/ -class CDomainAlgorithmGenerateRectilinear : public CAlgorithmTransformationNoDataModification -{ -public: - CDomainAlgorithmGenerateRectilinear(bool isSource, CDomain* domainDestination, CDomain* domainSource, - CGrid* gridDest, CGrid* gridSource, - CGenerateRectilinearDomain* zoomDomain); - - virtual ~CDomainAlgorithmGenerateRectilinear() {} - static bool registerTrans(); - virtual bool isGenerateTransformation(void) { return true ;} - virtual StdString getAlgoName() {return "\\ngenerate_rectilinear_domain";} -protected: - void computeIndexSourceMapping_(const std::vector* >& dataAuxInputs); - -private: - void computeDistributionGridSource(CGrid* gridSrc); - void computeDistributionGridDestination(CGrid* gridDest); - void fillInAttributesDomainDestination(); - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); -private: - int nbDomainDistributedPart_; //! Number of local domain. - CDomain* domainDest_ ; - - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_GENERATE_RECTILINEAR_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp deleted file mode 100755 index c258a8a7..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp +++ /dev/null @@ -1,1012 +0,0 @@ -/*! - \file domain_algorithm_interpolate_from_file.cpp - \author Ha NGUYEN - \since 09 Jul 2015 - \date 15 Sep 2015 - - \brief Algorithm for interpolation on a domain. - */ -#include "domain_algorithm_interpolate.hpp" -#include -#include "context.hpp" -#include "context_client.hpp" -#include "distribution_client.hpp" -#include "client_server_mapping_distributed.hpp" -#include "netcdf.hpp" -#include "mapper.hpp" -#include "mpi_tag.hpp" -#include "domain.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "interpolate_domain.hpp" -#include "grid.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CInterpolateDomain* interpolateDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], interpolateDomain); -} -CATCH - -bool CDomainAlgorithmInterpolate::dummyRegistered_ = CDomainAlgorithmInterpolate::registerTrans(); -bool CDomainAlgorithmInterpolate::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_INTERPOLATE_DOMAIN, create); -} -CATCH - -CDomainAlgorithmInterpolate::CDomainAlgorithmInterpolate(bool isSource, CDomain* domainDestination, CDomain* domainSource, CInterpolateDomain* interpDomain) -: CAlgorithmTransformationWeight(isSource), interpDomain_(interpDomain), writeToFile_(false), readFromFile_(false), domainSrc_(domainSource), domainDest_(domainDestination) -TRY -{ - CContext* context = CContext::getCurrent(); - interpDomain_->checkValid(domainSource); - - detectMissingValue = interpDomain_->detect_missing_value ; - renormalize = interpDomain_->renormalize ; - quantity = interpDomain_->quantity ; - - if (interpDomain_->read_write_convention == CInterpolateDomain::read_write_convention_attr::fortran) fortranConvention=true ; - else fortranConvention=false ; - - fileToReadWrite_ = "xios_interpolation_weights_"; - - if (interpDomain_->weight_filename.isEmpty()) - { - fileToReadWrite_ += context->getId() + "_" + - domainSource->getDomainOutputName() + "_" + - domainDestination->getDomainOutputName() + ".nc"; - } - else - fileToReadWrite_ = interpDomain_->weight_filename; - - ifstream f(fileToReadWrite_.c_str()); - switch (interpDomain_->mode) - { - case CInterpolateDomain::mode_attr::read: - readFromFile_ = true; - break; - case CInterpolateDomain::mode_attr::compute: - readFromFile_ = false; - break; - case CInterpolateDomain::mode_attr::read_or_compute: - if (!f.good()) - readFromFile_ = false; - else - readFromFile_ = true; - break; - default: - break; - } - - writeToFile_ = interpDomain_->write_weight; - domainDestination->checkAttributes() ; - - if (readFromFile_) readRemapInfo(); - else computeRemap(); - - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), domainDestination->getLocalView(CElementView::WORKFLOW)) ; - -} -CATCH - -/*! - Compute remap with integrated remap calculation module -*/ -void CDomainAlgorithmInterpolate::computeRemap() -TRY -{ - using namespace sphereRemap; - - CContext* context = CContext::getCurrent(); - int clientRank = context->intraCommRank_; - int i, j, k, idx; - std::vector srcPole(3,0), dstPole(3,0); - int orderInterp = interpDomain_->order.getValue(); - - - const double poleValue = 90.0; - const int constNVertex = 4; // Value by default number of vertex for rectangular domain - int nVertexSrc, nVertexDest; - nVertexSrc = nVertexDest = constNVertex; - - // First of all, try to retrieve the boundary values of domain source and domain destination - int localDomainSrcSize = domainSrc_->i_index.numElements(); - int niSrc = domainSrc_->ni.getValue(), njSrc = domainSrc_->nj.getValue(); - bool hasBoundSrc = domainSrc_->hasBounds; - if (hasBoundSrc) nVertexSrc = domainSrc_->nvertex.getValue(); - CArray boundsLonSrc(nVertexSrc,localDomainSrcSize); - CArray boundsLatSrc(nVertexSrc,localDomainSrcSize); - - if (domainSrc_->hasPole) srcPole[2] = 1; - if (hasBoundSrc) // Suppose that domain source is curvilinear or unstructured - { - if (!domainSrc_->bounds_lon_2d.isEmpty()) - { - for (j = 0; j < njSrc; ++j) - for (i = 0; i < niSrc; ++i) - { - k=j*niSrc+i; - for(int n=0;nbounds_lon_2d(n,i,j); - boundsLatSrc(n,k) = domainSrc_->bounds_lat_2d(n,i,j); - } - } - } - else - { - boundsLonSrc = domainSrc_->bounds_lon_1d; - boundsLatSrc = domainSrc_->bounds_lat_1d; - } - } - else // if domain source is rectilinear, not do anything now - { - CArray lon_g ; - CArray lat_g ; - - if (!domainSrc_->lonvalue_1d.isEmpty() && !domainSrc_->latvalue_1d.isEmpty()) - { - domainSrc_->AllgatherRectilinearLonLat(domainSrc_->lonvalue_1d,domainSrc_->latvalue_1d, lon_g,lat_g) ; - } - else if (! domainSrc_->latvalue_rectilinear_read_from_file.isEmpty() && ! domainSrc_->lonvalue_rectilinear_read_from_file.isEmpty() ) - { - lat_g=domainSrc_->latvalue_rectilinear_read_from_file ; - lon_g=domainSrc_->lonvalue_rectilinear_read_from_file ; - } - else if (!domainSrc_->lon_start.isEmpty() && !domainSrc_->lon_end.isEmpty() && - !domainSrc_->lat_start.isEmpty() && !domainSrc_->lat_end.isEmpty()) - { - double step=(domainSrc_->lon_end-domainSrc_->lon_start)/domainSrc_->ni_glo ; - for (int i=0; ini_glo; ++i) lon_g(i)=domainSrc_->lon_start+i*step ; - step=(domainSrc_->lat_end-domainSrc_->lat_start)/domainSrc_->nj_glo ; - for (int i=0; ini_glo; ++i) lat_g(i)=domainSrc_->lat_start+i*step ; - } - else if (!domainSrc_->lonvalue.isEmpty() && !domainSrc_->latvalue.isEmpty()) // data can come possibly from coupler so only lonvalue and latvalue are defined ? - { - CArray lon(niSrc), lat(njSrc) ; - for(int i=0; i< niSrc;++i) lon(i) = domainSrc_->lonvalue(i) ; - for(int j=0, n=0; jlatvalue(n) ; - domainSrc_->AllgatherRectilinearLonLat(lon, lat, lon_g, lat_g) ; - } - else ERROR("void CDomainAlgorithmInterpolate::computeRemap()",<<"Cannot compute bounds for rectilinear domain") ; - - nVertexSrc = constNVertex; - domainSrc_->fillInRectilinearBoundLonLat(lon_g,lat_g, boundsLonSrc, boundsLatSrc); - } - - std::map > > interpMapValueNorthPole; - std::map > > interpMapValueSouthPole; - - int localDomainDestSize = domainDest_->i_index.numElements(); - int niDest = domainDest_->ni.getValue(), njDest = domainDest_->nj.getValue(); - bool hasBoundDest = domainDest_->hasBounds; - if (hasBoundDest) nVertexDest = domainDest_->nvertex.getValue(); - CArray boundsLonDest(nVertexDest,localDomainDestSize); - CArray boundsLatDest(nVertexDest,localDomainDestSize); - - if (domainDest_->hasPole) dstPole[2] = 1; - if (hasBoundDest) - { - if (!domainDest_->bounds_lon_2d.isEmpty()) - { - for (j = 0; j < njDest; ++j) - for (i = 0; i < niDest; ++i) - { - k=j*niDest+i; - for(int n=0;nbounds_lon_2d(n,i,j); - boundsLatDest(n,k) = domainDest_->bounds_lat_2d(n,i,j); - } - } - } - else - { - boundsLonDest = domainDest_->bounds_lon_1d; - boundsLatDest = domainDest_->bounds_lat_1d; - } - } - else - { - bool isNorthPole = false; - bool isSouthPole = false; - - CArray lon_g ; - CArray lat_g ; - - if (!domainDest_->lonvalue_1d.isEmpty() && !domainDest_->latvalue_1d.isEmpty()) - { - domainDest_->AllgatherRectilinearLonLat(domainDest_->lonvalue_1d,domainDest_->latvalue_1d, lon_g,lat_g) ; - } - else if (! domainDest_->latvalue_rectilinear_read_from_file.isEmpty() && ! domainDest_->lonvalue_rectilinear_read_from_file.isEmpty() ) - { - lat_g=domainDest_->latvalue_rectilinear_read_from_file ; - lon_g=domainDest_->lonvalue_rectilinear_read_from_file ; - } - else if (!domainDest_->lon_start.isEmpty() && !domainDest_->lon_end.isEmpty() && - !domainDest_->lat_start.isEmpty() && !domainDest_->lat_end.isEmpty()) - { - double step=(domainDest_->lon_end-domainDest_->lon_start)/domainDest_->ni_glo ; - for(int i=0; ini_glo; ++i) lon_g(i)=domainDest_->lon_start+i*step ; - step=(domainDest_->lat_end-domainDest_->lat_start)/domainDest_->nj_glo ; - for(int i=0; ini_glo; ++i) lat_g(i)=domainDest_->lat_start+i*step ; - } - else ERROR("void CDomainAlgorithmInterpolate::computeRemap()",<<"Cannot compute bounds for rectilinear domain") ; - - if (std::abs(poleValue - std::abs(lat_g(0))) < NumTraits::epsilon()) isNorthPole = true; - if (std::abs(poleValue - std::abs(lat_g(domainDest_->nj_glo-1))) < NumTraits::epsilon()) isSouthPole = true; - - - - - if (isNorthPole && (0 == domainDest_->jbegin.getValue())) - { - int ibegin = domainDest_->ibegin.getValue(); - for (i = 0; i < niDest; ++i) - { - interpMapValueNorthPole[i+ibegin]; - } - } - - if (isSouthPole && (domainDest_->nj_glo.getValue() == (domainDest_->jbegin.getValue() + njDest))) - { - int ibegin = domainDest_->ibegin.getValue(); - int njGlo = domainDest_->nj_glo.getValue(); - int niGlo = domainDest_->ni_glo.getValue(); - for (i = 0; i < niDest; ++i) - { - k = (njGlo - 1)*niGlo + i + ibegin; - interpMapValueSouthPole[k]; - } - } - - // Ok, fill in boundary values for rectangular domain - nVertexDest = constNVertex; - domainDest_->fillInRectilinearBoundLonLat(lon_g,lat_g, boundsLonDest, boundsLatDest); - } - - - - // Ok, now use mapper to calculate - int nSrcLocal = domainSrc_->i_index.numElements(); - int nDstLocal = domainDest_->i_index.numElements(); - long int * globalSrc = new long int [nSrcLocal]; - long int * globalDst = new long int [nDstLocal]; - - long int globalIndex; - int i_ind, j_ind; - for (int idx = 0; idx < nSrcLocal; ++idx) - { - i_ind=domainSrc_->i_index(idx) ; - j_ind=domainSrc_->j_index(idx) ; - - globalIndex = i_ind + j_ind * domainSrc_->ni_glo; - globalSrc[idx] = globalIndex; - } - - for (int idx = 0; idx < nDstLocal; ++idx) - { - i_ind=domainDest_->i_index(idx) ; - j_ind=domainDest_->j_index(idx) ; - - globalIndex = i_ind + j_ind * domainDest_->ni_glo; - globalDst[idx] = globalIndex; - } - - - // Calculate weight index - Mapper mapper(context->intraComm_); - mapper.setVerbosity(PROGRESS) ; - - - // supress masked data for the source - int nSrcLocalUnmasked = 0 ; - for (int idx=0 ; idx < nSrcLocal; idx++) if (domainSrc_->localMask(idx)) ++nSrcLocalUnmasked ; - - - CArray boundsLonSrcUnmasked(nVertexSrc,nSrcLocalUnmasked); - CArray boundsLatSrcUnmasked(nVertexSrc,nSrcLocalUnmasked); - CArray areaSrcUnmasked(nSrcLocalUnmasked); - - long int * globalSrcUnmasked = new long int [nSrcLocalUnmasked]; - - nSrcLocalUnmasked=0 ; - bool hasSrcArea=domainSrc_->hasArea && !domainSrc_->radius.isEmpty() && !interpDomain_->use_area.isEmpty() && interpDomain_->use_area==true ; - double srcAreaFactor ; - if (hasSrcArea) srcAreaFactor=1./(domainSrc_->radius*domainSrc_->radius) ; - - for (int idx=0 ; idx < nSrcLocal; idx++) - { - if (domainSrc_->localMask(idx)) - { - for(int n=0;nareavalue(idx)*srcAreaFactor ; - globalSrcUnmasked[nSrcLocalUnmasked]=globalSrc[idx] ; - ++nSrcLocalUnmasked ; - } - } - - - int nDstLocalUnmasked = 0 ; - for (int idx=0 ; idx < nDstLocal; idx++) if (domainDest_->localMask(idx)) ++nDstLocalUnmasked ; - - CArray boundsLonDestUnmasked(nVertexDest,nDstLocalUnmasked); - CArray boundsLatDestUnmasked(nVertexDest,nDstLocalUnmasked); - CArray areaDstUnmasked(nDstLocalUnmasked); - - long int * globalDstUnmasked = new long int [nDstLocalUnmasked]; - - nDstLocalUnmasked=0 ; - bool hasDstArea=domainDest_->hasArea && !domainDest_->radius.isEmpty() && !interpDomain_->use_area.isEmpty() && interpDomain_->use_area==true ; - double dstAreaFactor ; - if (hasDstArea) dstAreaFactor=1./(domainDest_->radius*domainDest_->radius) ; - for (int idx=0 ; idx < nDstLocal; idx++) - { - if (domainDest_->localMask(idx)) - { - for(int n=0;nareavalue(idx)*dstAreaFactor ; - globalDstUnmasked[nDstLocalUnmasked]=globalDst[idx] ; - ++nDstLocalUnmasked ; - } - } - - double* ptAreaSrcUnmasked = NULL ; - if (hasSrcArea) ptAreaSrcUnmasked=areaSrcUnmasked.dataFirst() ; - - double* ptAreaDstUnmasked = NULL ; - if (hasDstArea) ptAreaDstUnmasked=areaDstUnmasked.dataFirst() ; - - mapper.setSourceMesh(boundsLonSrcUnmasked.dataFirst(), boundsLatSrcUnmasked.dataFirst(), ptAreaSrcUnmasked, nVertexSrc, nSrcLocalUnmasked, &srcPole[0], globalSrcUnmasked); - mapper.setTargetMesh(boundsLonDestUnmasked.dataFirst(), boundsLatDestUnmasked.dataFirst(), ptAreaDstUnmasked, nVertexDest, nDstLocalUnmasked, &dstPole[0], globalDstUnmasked); - - std::vector timings = mapper.computeWeights(orderInterp,renormalize,quantity); - - std::map > > interpMapValue; - std::map > >::const_iterator iteNorthPole = interpMapValueNorthPole.end(), - iteSouthPole = interpMapValueSouthPole.end(); - for (int idx = 0; idx < mapper.nWeights; ++idx) - { - interpMapValue[mapper.targetWeightId[idx]].push_back(make_pair(mapper.sourceWeightId[idx],mapper.remapMatrix[idx])); - if (iteNorthPole != interpMapValueNorthPole.find(mapper.targetWeightId[idx])) - { - interpMapValueNorthPole[mapper.targetWeightId[idx]].push_back(make_pair(mapper.sourceWeightId[idx],mapper.remapMatrix[idx])); - } - - if (iteSouthPole != interpMapValueSouthPole.find(mapper.targetWeightId[idx])) - { - interpMapValueSouthPole[mapper.targetWeightId[idx]].push_back(make_pair(mapper.sourceWeightId[idx],mapper.remapMatrix[idx])); - } - } - int niGloDst = domainDest_->ni_glo.getValue(); - processPole(interpMapValueNorthPole, niGloDst); - processPole(interpMapValueSouthPole, niGloDst); - - if (!interpMapValueNorthPole.empty()) - { - std::map > >::iterator itNorthPole = interpMapValueNorthPole.begin(); - for (; itNorthPole != iteNorthPole; ++itNorthPole) - { - if (!(itNorthPole->second.empty())) - itNorthPole->second.swap(interpMapValue[itNorthPole->first]); - } - } - - if (!interpMapValueSouthPole.empty()) - { - std::map > >::iterator itSouthPole = interpMapValueSouthPole.begin(); - for (; itSouthPole != iteSouthPole; ++itSouthPole) - { - if (!(itSouthPole->second.empty())) - itSouthPole->second.swap(interpMapValue[itSouthPole->first]); - } - } - - if (writeToFile_ && !readFromFile_) writeRemapInfo(interpMapValue); -// exchangeRemapInfo(interpMapValue); - convertRemapInfo(interpMapValue) ; - - delete [] globalSrc; - delete [] globalSrcUnmasked; - delete [] globalDst; - delete [] globalDstUnmasked; - -} -CATCH - -void CDomainAlgorithmInterpolate::processPole(std::map > >& interMapValuePole, - int nbGlobalPointOnPole) -TRY -{ - CContext* context = CContext::getCurrent(); - - MPI_Comm poleComme(MPI_COMM_NULL); - MPI_Comm_split(context->intraComm_, interMapValuePole.empty() ? MPI_UNDEFINED : 1, 0, &poleComme); - if (MPI_COMM_NULL != poleComme) - { - int nbClientPole; - MPI_Comm_size(poleComme, &nbClientPole); - - std::map > >::iterator itePole = interMapValuePole.end(), itPole, - itbPole = interMapValuePole.begin(); - - int nbWeight = 0; - for (itPole = itbPole; itPole != itePole; ++itPole) - nbWeight += itPole->second.size(); - - std::vector recvCount(nbClientPole,0); - std::vector displ(nbClientPole,0); - MPI_Allgather(&nbWeight,1,MPI_INT,&recvCount[0],1,MPI_INT,poleComme) ; - - displ[0]=0; - for(int n=1;n sendSourceIndexBuff(nbWeight); - std::vector sendSourceWeightBuff(nbWeight); - int k = 0; - for (itPole = itbPole; itPole != itePole; ++itPole) - { - for (int idx = 0; idx < itPole->second.size(); ++idx) - { - sendSourceIndexBuff[k] = (itPole->second)[idx].first; - sendSourceWeightBuff[k] = (itPole->second)[idx].second; - ++k; - } - } - - std::vector recvSourceIndexBuff(recvSize); - std::vector recvSourceWeightBuff(recvSize); - - // Gather all index and weight for pole - MPI_Allgatherv(&sendSourceIndexBuff[0],nbWeight,MPI_INT,&recvSourceIndexBuff[0],&recvCount[0],&displ[0],MPI_INT,poleComme); - MPI_Allgatherv(&sendSourceWeightBuff[0],nbWeight,MPI_DOUBLE,&recvSourceWeightBuff[0],&recvCount[0],&displ[0],MPI_DOUBLE,poleComme); - - std::map recvTemp; - for (int idx = 0; idx < recvSize; ++idx) - { - if (recvTemp.end() != recvTemp.find(recvSourceIndexBuff[idx])) - recvTemp[recvSourceIndexBuff[idx]] += recvSourceWeightBuff[idx]/nbGlobalPointOnPole; - else - recvTemp[recvSourceIndexBuff[idx]] = recvSourceWeightBuff[idx]/nbGlobalPointOnPole; - } - - std::map::const_iterator itRecvTemp, itbRecvTemp = recvTemp.begin(), iteRecvTemp = recvTemp.end(); - - for (itPole = itbPole; itPole != itePole; ++itPole) - { - itPole->second.clear(); - for (itRecvTemp = itbRecvTemp; itRecvTemp != iteRecvTemp; ++itRecvTemp) - itPole->second.push_back(make_pair(itRecvTemp->first, itRecvTemp->second)); - } - } - -} -CATCH - - -void CDomainAlgorithmInterpolate::writeRemapInfo(std::map > >& interpMapValue) -TRY -{ - writeInterpolationInfo(fileToReadWrite_, interpMapValue); -} -CATCH - -void CDomainAlgorithmInterpolate::readRemapInfo() -TRY -{ - std::map > > interpMapValue; - readInterpolationInfo(fileToReadWrite_, interpMapValue); - - exchangeRemapInfo(interpMapValue); -} -CATCH - -void CDomainAlgorithmInterpolate::convertRemapInfo(std::map > >& interpMapValue) -TRY -{ - CContext* context = CContext::getCurrent(); - int clientRank = context->intraCommRank_; - - TransformationIndexMap& transMap = this->transformationMapping_; - TransformationWeightMap& transWeight = this->transformationWeight_; - - std::map > >::const_iterator itb = interpMapValue.begin(), it, - ite = interpMapValue.end(); - - for (it = itb; it != ite; ++it) - { - const std::vector >& tmp = it->second; - for (int i = 0; i < tmp.size(); ++i) - { - transMap[it->first].push_back(tmp[i].first); - transWeight[it->first].push_back(tmp[i].second); - } - } -} -CATCH - -/*! - Read remap information from file then distribute it among clients -*/ -void CDomainAlgorithmInterpolate::exchangeRemapInfo(std::map > >& interpMapValue) -TRY -{ - CContext* context = CContext::getCurrent(); - int clientRank = context->intraCommRank_; - int nbClient = context-> intraCommSize_; - - TransformationIndexMap& transMap = this->transformationMapping_; - TransformationWeightMap& transWeight = this->transformationWeight_; - - std::unordered_map globalIndexOfDomainDest; - int ni = domainDest_->ni.getValue(); - int nj = domainDest_->nj.getValue(); - int ni_glo = domainDest_->ni_glo.getValue(); - size_t globalIndex; - int nIndexSize = domainDest_->i_index.numElements(), i_ind, j_ind; - for (int idx = 0; idx < nIndexSize; ++idx) - { - i_ind=domainDest_->i_index(idx) ; - j_ind=domainDest_->j_index(idx) ; - - globalIndex = i_ind + j_ind * ni_glo; - globalIndexOfDomainDest[globalIndex] = clientRank; - } - - CClientServerMappingDistributed domainIndexClientClientMapping(globalIndexOfDomainDest, - context->intraComm_, - true); - CArray globalIndexInterp(interpMapValue.size()); - std::map > >::const_iterator itb = interpMapValue.begin(), it, - ite = interpMapValue.end(); - size_t globalIndexCount = 0; - for (it = itb; it != ite; ++it) - { - globalIndexInterp(globalIndexCount) = it->first; - ++globalIndexCount; - } - - domainIndexClientClientMapping.computeServerIndexMapping(globalIndexInterp, nbClient); - const CClientServerMapping::GlobalIndexMap& globalIndexInterpSendToClient = domainIndexClientClientMapping.getGlobalIndexOnServer(); - - //Inform each client number of index they will receive - int* sendBuff = new int[nbClient]; - int* recvBuff = new int[nbClient]; - for (int i = 0; i < nbClient; ++i) - { - sendBuff[i] = 0; - recvBuff[i] = 0; - } - int sendBuffSize = 0; - CClientServerMapping::GlobalIndexMap::const_iterator itbMap = globalIndexInterpSendToClient.begin(), itMap, - iteMap = globalIndexInterpSendToClient.end(); - for (itMap = itbMap; itMap != iteMap; ++itMap) - { - const std::vector& tmp = itMap->second; - int sizeIndex = 0, mapSize = (itMap->second).size(); - for (int idx = 0; idx < mapSize; ++idx) - { -// sizeIndex += interpMapValue.at((itMap->second)[idx]).size(); - sizeIndex += (interpMapValue[(int)(itMap->second)[idx]]).size(); - } - sendBuff[itMap->first] = sizeIndex; - sendBuffSize += sizeIndex; - } - - - MPI_Allreduce(sendBuff, recvBuff, nbClient, MPI_INT, MPI_SUM, context->intraComm_); - - int* sendIndexDestBuff = new int [sendBuffSize]; - int* sendIndexSrcBuff = new int [sendBuffSize]; - double* sendWeightBuff = new double [sendBuffSize]; - - std::vector sendRequest; - - int sendOffSet = 0, l = 0; - for (itMap = itbMap; itMap != iteMap; ++itMap) - { - const std::vector& indexToSend = itMap->second; - int mapSize = indexToSend.size(); - int k = 0; - for (int idx = 0; idx < mapSize; ++idx) - { - std::vector >& interpMap = interpMapValue[(int)indexToSend[idx]]; //interpMapValue.at(indexToSend[idx]); - for (int i = 0; i < interpMap.size(); ++i) - { - sendIndexDestBuff[l] = indexToSend[idx]; - sendIndexSrcBuff[l] = interpMap[i].first; - sendWeightBuff[l] = interpMap[i].second; - ++k; - ++l; - } - } - - sendRequest.push_back(MPI_Request()); - MPI_Isend(sendIndexDestBuff + sendOffSet, - k, - MPI_INT, - itMap->first, - MPI_DOMAIN_INTERPOLATION_DEST_INDEX, - context->intraComm_, - &sendRequest.back()); - sendRequest.push_back(MPI_Request()); - MPI_Isend(sendIndexSrcBuff + sendOffSet, - k, - MPI_INT, - itMap->first, - MPI_DOMAIN_INTERPOLATION_SRC_INDEX, - context->intraComm_, - &sendRequest.back()); - sendRequest.push_back(MPI_Request()); - MPI_Isend(sendWeightBuff + sendOffSet, - k, - MPI_DOUBLE, - itMap->first, - MPI_DOMAIN_INTERPOLATION_WEIGHT, - context->intraComm_, - &sendRequest.back()); - sendOffSet += k; - } - - int recvBuffSize = recvBuff[clientRank]; - int* recvIndexDestBuff = new int [recvBuffSize]; - int* recvIndexSrcBuff = new int [recvBuffSize]; - double* recvWeightBuff = new double [recvBuffSize]; - int receivedSize = 0; - int clientSrcRank; - while (receivedSize < recvBuffSize) - { - MPI_Status recvStatus; - MPI_Recv((recvIndexDestBuff + receivedSize), - recvBuffSize, - MPI_INT, - MPI_ANY_SOURCE, - MPI_DOMAIN_INTERPOLATION_DEST_INDEX, - context->intraComm_, - &recvStatus); - - int countBuff = 0; - MPI_Get_count(&recvStatus, MPI_INT, &countBuff); - clientSrcRank = recvStatus.MPI_SOURCE; - - MPI_Recv((recvIndexSrcBuff + receivedSize), - recvBuffSize, - MPI_INT, - clientSrcRank, - MPI_DOMAIN_INTERPOLATION_SRC_INDEX, - context->intraComm_, - &recvStatus); - - MPI_Recv((recvWeightBuff + receivedSize), - recvBuffSize, - MPI_DOUBLE, - clientSrcRank, - MPI_DOMAIN_INTERPOLATION_WEIGHT, - context->intraComm_, - &recvStatus); - - for (int idx = 0; idx < countBuff; ++idx) - { - transMap[*(recvIndexDestBuff + receivedSize + idx)].push_back(*(recvIndexSrcBuff + receivedSize + idx)); - transWeight[*(recvIndexDestBuff + receivedSize + idx)].push_back(*(recvWeightBuff + receivedSize + idx)); - } - receivedSize += countBuff; - } - - std::vector requestStatus(sendRequest.size()); - MPI_Waitall(sendRequest.size(), &sendRequest[0], MPI_STATUS_IGNORE); - - delete [] sendIndexDestBuff; - delete [] sendIndexSrcBuff; - delete [] sendWeightBuff; - delete [] recvIndexDestBuff; - delete [] recvIndexSrcBuff; - delete [] recvWeightBuff; - delete [] sendBuff; - delete [] recvBuff; -} -CATCH - -/*! Redefined some functions of CONetCDF4 to make use of them */ -CDomainAlgorithmInterpolate::WriteNetCdf::WriteNetCdf(const StdString& filename, const MPI_Comm comm) - : CNc4DataOutput(NULL, filename, false, false, true, comm, false, true) {} -int CDomainAlgorithmInterpolate::WriteNetCdf::addDimensionWrite(const StdString& name, - const StdSize size) -TRY -{ - return CONetCDF4::addDimension(name, size); -} -CATCH - -int CDomainAlgorithmInterpolate::WriteNetCdf::addVariableWrite(const StdString& name, nc_type type, - const std::vector& dim) -TRY -{ - return CONetCDF4::addVariable(name, type, dim); -} -CATCH - -void CDomainAlgorithmInterpolate::WriteNetCdf::endDefinition() -TRY -{ - CONetCDF4::definition_end(); -} -CATCH - -void CDomainAlgorithmInterpolate::WriteNetCdf::writeDataIndex(const CArray& data, const StdString& name, - bool collective, StdSize record, - const std::vector* start, - const std::vector* count) -TRY -{ - CONetCDF4::writeData(data, name, collective, record, start, count); -} -CATCH - -void CDomainAlgorithmInterpolate::WriteNetCdf::writeDataIndex(const CArray& data, const StdString& name, - bool collective, StdSize record, - const std::vector* start, - const std::vector* count) -TRY -{ - CONetCDF4::writeData(data, name, collective, record, start, count); -} -CATCH - -/* - Write interpolation weights into a file - \param [in] filename name of output file - \param interpMapValue mapping of global index of domain destination and domain source as well as the corresponding weight -*/ -void CDomainAlgorithmInterpolate::writeInterpolationInfo(std::string& filename, - std::map > >& interpMapValue) -TRY -{ - CContext* context = CContext::getCurrent(); - - size_t n_src = domainSrc_->ni_glo * domainSrc_->nj_glo; - size_t n_dst = domainDest_->ni_glo * domainDest_->nj_glo; - - long localNbWeight = 0; - long globalNbWeight; - long startIndex; - typedef std::map > > IndexRemap; - IndexRemap::iterator itb = interpMapValue.begin(), it, - ite = interpMapValue.end(); - for (it = itb; it!=ite; ++it) - { - localNbWeight += (it->second).size(); - } - - CArray src_idx(localNbWeight); - CArray dst_idx(localNbWeight); - CArray weights(localNbWeight); - - int index = 0; - int indexOffset=0 ; - if (fortranConvention) indexOffset=1 ; - for (it = itb; it !=ite; ++it) - { - std::vector >& tmp = it->second; - for (int idx = 0; idx < tmp.size(); ++idx) - { - dst_idx(index) = it->first + indexOffset; - src_idx(index) = tmp[idx].first + indexOffset; - weights(index) = tmp[idx].second; - ++index; - } - } - - MPI_Allreduce(&localNbWeight, &globalNbWeight, 1, MPI_LONG, MPI_SUM, context->intraComm_); - MPI_Scan(&localNbWeight, &startIndex, 1, MPI_LONG, MPI_SUM, context->intraComm_); - - if (0 == globalNbWeight) - { - info << "There is no interpolation weights calculated between " - << "domain source: " << domainSrc_->getDomainOutputName() - << " and domain destination: " << domainDest_->getDomainOutputName() - << std::endl; - return; - } - - std::vector start(1, startIndex - localNbWeight); - std::vector count(1, localNbWeight); - - WriteNetCdf netCdfWriter(filename, context->intraComm_); - - // Define some dimensions - netCdfWriter.addDimensionWrite("n_src", n_src); - netCdfWriter.addDimensionWrite("n_dst", n_dst); - netCdfWriter.addDimensionWrite("n_weight", globalNbWeight); - - std::vector dims(1,"n_weight"); - - // Add some variables - netCdfWriter.addVariableWrite("src_idx", NC_INT, dims); - netCdfWriter.addVariableWrite("dst_idx", NC_INT, dims); - netCdfWriter.addVariableWrite("weight", NC_DOUBLE, dims); - - // End of definition - netCdfWriter.endDefinition(); - - // // Write variables - if (0 != localNbWeight) - { - netCdfWriter.writeDataIndex(src_idx, "src_idx", false, 0, &start, &count); - netCdfWriter.writeDataIndex(dst_idx, "dst_idx", false, 0, &start, &count); - netCdfWriter.writeDataIndex(weights, "weight", false, 0, &start, &count); - } - - netCdfWriter.closeFile(); -} -CATCH - -/*! - Read interpolation information from a file - \param [in] filename interpolation file - \param [in/out] interpMapValue Mapping between (global) index of domain on grid destination and - corresponding global index of domain and associated weight value on grid source -*/ -void CDomainAlgorithmInterpolate::readInterpolationInfo(std::string& filename, - std::map > >& interpMapValue) -TRY -{ - int ncid ; - int weightDimId ; - size_t nbWeightGlo ; - - - CContext* context = CContext::getCurrent(); - int clientRank = context->intraCommRank_; - int clientSize = context->intraCommSize_; - - - { - ifstream f(filename.c_str()); - if (!f.good()) ERROR("void CDomainAlgorithmInterpolate::readInterpolationInfo", - << "Attempt to read file weight :" << filename << " which doesn't seem to exist." << std::endl - << "Please check this file "); - } - - nc_open(filename.c_str(),NC_NOWRITE, &ncid) ; - nc_inq_dimid(ncid,"n_weight",&weightDimId) ; - nc_inq_dimlen(ncid,weightDimId,&nbWeightGlo) ; - - size_t nbWeight ; - size_t start ; - size_t div = nbWeightGlo/clientSize ; - size_t mod = nbWeightGlo%clientSize ; - if (clientRank < mod) - { - nbWeight=div+1 ; - start=clientRank*(div+1) ; - } - else - { - nbWeight=div ; - start= mod * (div+1) + (clientRank-mod) * div ; - } - - double* weight=new double[nbWeight] ; - int weightId ; - nc_inq_varid (ncid, "weight", &weightId) ; - nc_get_vara_double(ncid, weightId, &start, &nbWeight, weight) ; - - long* srcIndex=new long[nbWeight] ; - int srcIndexId ; - nc_inq_varid (ncid, "src_idx", &srcIndexId) ; - nc_get_vara_long(ncid, srcIndexId, &start, &nbWeight, srcIndex) ; - - long* dstIndex=new long[nbWeight] ; - int dstIndexId ; - nc_inq_varid (ncid, "dst_idx", &dstIndexId) ; - nc_get_vara_long(ncid, dstIndexId, &start, &nbWeight, dstIndex) ; - - int indexOffset=0 ; - if (fortranConvention) indexOffset=1 ; - for(size_t ind=0; ind >& localIndex, - const double* dataInput, - CArray& dataOut, - std::vector& flagInitial, - bool ignoreMissingValue, bool firstPass ) -TRY -{ - int nbLocalIndex = localIndex.size(); - double defaultValue = std::numeric_limits::quiet_NaN(); - - if (detectMissingValue) - { - if (firstPass && renormalize) - { - renormalizationFactor.resize(dataOut.numElements()) ; - renormalizationFactor=1 ; - } - - if (firstPass) - { - allMissing.resize(dataOut.numElements()) ; - allMissing=true ; - } - - for (int idx = 0; idx < nbLocalIndex; ++idx) - { - if (NumTraits::isNan(*(dataInput + idx))) - { - allMissing(localIndex[idx].first) = allMissing(localIndex[idx].first) && true; - if (renormalize) renormalizationFactor(localIndex[idx].first)-=localIndex[idx].second ; - } - else - { - dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second; - allMissing(localIndex[idx].first) = allMissing(localIndex[idx].first) && false; // Reset flag to indicate not all data source are nan - } - } - - } - else - { - for (int idx = 0; idx < nbLocalIndex; ++idx) - { - dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second; - } - } -} -CATCH - -void CDomainAlgorithmInterpolate::updateData(CArray& dataOut) -TRY -{ - if (detectMissingValue) - { - double defaultValue = std::numeric_limits::quiet_NaN(); - size_t nbIndex=dataOut.numElements() ; - - if (allMissing.numElements()>0) - { - for (int idx = 0; idx < nbIndex; ++idx) - { - if (allMissing(idx)) dataOut(idx) = defaultValue; // If all data source are nan then data destination must be nan - } - } - - if (renormalize) - { - if (renormalizationFactor.numElements()>0) dataOut/=renormalizationFactor ; // In some case, process doesn't received any data for interpolation (mask) - // so renormalizationFactor is not initialized - } - } -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp deleted file mode 100755 index e9e572c3..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/*! - \file domain_algorithm_interpolate_from_file.hpp - \author Ha NGUYEN - \since 09 July 2015 - \date 09 Sep 2015 - - \brief Algorithm for interpolation on a domain. - */ -#ifndef __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_HPP__ - -#include "algorithm_transformation_weight.hpp" -#include "transformation.hpp" -#include "nc4_data_output.hpp" - -namespace xios { - -class CDomain; -class CInterpolateDomain; - - -/*! - \class CDomainAlgorithmInterpolate - Reading interpolation from file then apply on a domain -*/ -class CDomainAlgorithmInterpolate : public CAlgorithmTransformationWeight -{ -public: - CDomainAlgorithmInterpolate(bool isSource, CDomain* domainDestination, CDomain* domainSource, CInterpolateDomain* interpDomain); - - virtual ~CDomainAlgorithmInterpolate() {} - - virtual void apply(const std::vector >& localIndex, - const double* dataInput, - CArray& dataOut, - std::vector& flagInitial, - bool ignoreMissingValue, bool firstPass); - virtual void updateData(CArray& dataOut); - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\ninterpolate_domain";} - -private: - void readInterpolationInfo(std::string& filename, std::map > >& interpMapValue); - void writeInterpolationInfo(std::string& filename, std::map > >& interpMapValue); - void processPole(std::map > >& interMapValuePole, - int nbGlobalPointOnPole); - void computeRemap(); - void readRemapInfo(); - void writeRemapInfo(std::map > >&); - void exchangeRemapInfo(std::map > >& interpMapValue); - void convertRemapInfo(std::map > >& interpMapValue); - -private: - CArray renormalizationFactor ; - CArray allMissing ; - bool detectMissingValue ; - bool renormalize ; - bool quantity ; - - CInterpolateDomain* interpDomain_; - bool writeToFile_; - bool readFromFile_; - StdString fileToReadWrite_; - bool fortranConvention ; - - // class WriteNetCdf; - class WriteNetCdf : public CNc4DataOutput - { - public: - WriteNetCdf(const StdString& filename, const MPI_Comm comm); - int addDimensionWrite(const StdString& name, const StdSize size = UNLIMITED_DIM); - int addVariableWrite(const StdString& name, nc_type type, - const std::vector& dim); - void endDefinition(); - void writeDataIndex(const CArray& data, const StdString& name, - bool collective, StdSize record, - const std::vector* start = NULL, - const std::vector* count = NULL); - void writeDataIndex(const CArray& data, const StdString& name, - bool collective, StdSize record, - const std::vector* start = NULL, - const std::vector* count = NULL); - }; - - -public: - - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); -private: - CDomain* domainSrc_ ; - CDomain* domainDest_ ; - -public: - static bool dummyRegistered_; - - -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp deleted file mode 100755 index 0c4f452f..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp +++ /dev/null @@ -1,238 +0,0 @@ -/*! - \file domain_algorithm_reorder.cpp - \brief Algorithm for reorder a domain. - */ -#include "domain_algorithm_reorder.hpp" -#include "reorder_domain.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmReorder::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CReorderDomain* reorderDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], reorderDomain); -} -CATCH - -bool CDomainAlgorithmReorder::dummyRegistered_ = CDomainAlgorithmReorder::registerTrans(); -bool CDomainAlgorithmReorder::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REORDER_DOMAIN, create); -} -CATCH - -CDomainAlgorithmReorder::CDomainAlgorithmReorder(bool isSource, CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain) -: CAlgorithmTransformationNoDataModification(isSource) -TRY -{ - // Reset geometrical attributes to avoid incompatible (user/domainSource) attributs - // attributs will be defined using domainSource and/or transformation attributs - domainDestination->type.reset(); - domainDestination->ni_glo.reset(); - domainDestination->nj_glo.reset(); - - domainDestination->i_index.reset(); // defined using domainSource->getLocalElement() - domainDestination->j_index.reset(); // " - domainDestination->ibegin.reset(); // will be computed in domainDestination->checkDomain() (from checkAttributes()) - domainDestination->ni.reset(); // " - domainDestination->jbegin.reset(); // " - domainDestination->nj.reset(); // " - - domainDestination->mask_1d.reset(); // defined scanning domainSource->getFullView() & domainSource->getWorkflowView() differencies - domainDestination->mask_2d.reset(); // in all case domainDestination->mask_1d used as reference - - // domainDestination->data_* attributes will be computed in : - domainDestination->data_dim.reset(); // domainDestination->checkDomainData() (from checkAttributes()) - domainDestination->data_ni.reset(); - domainDestination->data_nj.reset(); - domainDestination->data_ibegin.reset(); - domainDestination->data_jbegin.reset(); - domainDestination->data_i_index.reset(); // domainDestination->checkCompression() (from checkAttributes()) - domainDestination->data_j_index.reset(); - - // Next attributes will be set using domainSource->attributes - domainDestination->lonvalue_1d.reset(); - domainDestination->latvalue_1d.reset(); - domainDestination->lonvalue_2d.reset(); - domainDestination->latvalue_2d.reset(); - domainDestination->nvertex.reset(); - domainDestination->bounds_lon_1d.reset(); - domainDestination->bounds_lat_1d.reset(); - domainDestination->bounds_lon_2d.reset(); - domainDestination->bounds_lat_2d.reset(); - domainDestination->area.reset(); - domainDestination->radius.reset(); - - - // Set attributes for this transformation - domainDestination->type.setValue( domainSource->type ); - - // Keep a 2D point of view for this transformation which is intrinsically 2D - domainDestination->ni_glo = domainSource->ni_glo; - domainDestination->nj_glo = domainSource->nj_glo; - // Set attributes required to define domainDestination->localElement_ and associated views, full and workflow) - CArray sourceGlobalIdx = domainSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - domainDestination->i_index.resize( indexSize ); - domainDestination->j_index.resize( indexSize ); - for (size_t i = 0; i < indexSize ; ++i) - { - domainDestination->i_index(i) = sourceGlobalIdx(i)%domainSource->ni_glo; - domainDestination->j_index(i) = sourceGlobalIdx(i)/domainSource->ni_glo; - } - // else - // - domainDestination->ni_glo = domainSource->ni_glo * domainSource->nj_glo; - // - domainDestination->nj_glo = 1; - // - domainDestination->i_index = sourceGlobalIdx; - // - domainDestination->j_index = 0; - - // set data_i_index to enable localMask computing (in computeLocalMask()), used to compute Workflow View - CArray sourceWorkflowIdx = domainSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - domainDestination->data_i_index.resize( indexSize ); - domainDestination->data_i_index = -1; - domainDestination->data_j_index.resize( indexSize ); - domainDestination->data_j_index = 0; - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - for (size_t i = 0; i < srcWorkflowSize ; ++i) - { - domainDestination->data_i_index(sourceWorkflowIdx(i)) = sourceWorkflowIdx(i); - } - - - // Set lon/lat values - if (!domainSource->lonvalue_1d.isEmpty() ) - { - domainDestination->latvalue_1d.resize( domainSource->latvalue_1d.numElements() ); - domainDestination->lonvalue_1d.resize( domainSource->lonvalue_1d.numElements() ); - domainDestination->latvalue_1d = domainSource->latvalue_1d; - domainDestination->lonvalue_1d = domainSource->lonvalue_1d; - } - else if (!domainSource->lonvalue_2d.isEmpty() ) - { - domainDestination->latvalue_2d.resize( domainSource->latvalue_2d.numElements() ); - domainDestination->lonvalue_2d.resize( domainSource->lonvalue_2d.numElements() ); - domainDestination->latvalue_2d = domainSource->latvalue_2d; - domainDestination->lonvalue_2d = domainSource->lonvalue_2d; - } - // Set bounds_lon/lat values - if (!domainSource->nvertex.isEmpty() ) - domainDestination->nvertex = domainSource->nvertex; - if (!domainSource->bounds_lon_1d.isEmpty() ) - { - domainDestination->bounds_lon_1d.resize( domainSource->bounds_lon_1d.numElements() ); - domainDestination->bounds_lat_1d.resize( domainSource->bounds_lat_1d.numElements() ); - domainDestination->bounds_lon_1d = domainSource->bounds_lon_1d; - domainDestination->bounds_lat_1d = domainSource->bounds_lat_1d; - } - else if (!domainSource->bounds_lon_2d.isEmpty() ) - { - domainDestination->bounds_lon_2d.resize( domainSource->bounds_lon_2d.numElements() ); - domainDestination->bounds_lat_2d.resize( domainSource->bounds_lat_2d.numElements() ); - domainDestination->bounds_lon_2d = domainSource->bounds_lon_2d; - domainDestination->bounds_lat_2d = domainSource->bounds_lat_2d; - } - // set area - if (!domainSource->area.isEmpty() ) - { - domainDestination->area.resize( domainSource->area.numElements() ); - domainDestination->area = domainSource->area; - } - if (!domainSource->radius.isEmpty() ) - domainDestination->radius = domainSource->radius; - - - reorderDomain->checkValid(domainSource); - // domainDestination->checkAttributes() will be operated at the end of the transformation definition to define correctly domainDestination views - - if (domainSource->type != CDomain::type_attr::rectilinear) - { - ERROR("CDomainAlgorithmReorder::CDomainAlgorithmReorder(CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain)", - << "Domain destination is not rectilinear. This filter work only for rectilinear domain and destination domain with < id = " - <getId() <<" > is of type "<type<getId() << std::endl - << "Domain destination " <getId() << std::endl); - } - - if (!reorderDomain->invert_lat.isEmpty() && reorderDomain->invert_lat.getValue() ) - { - CArray& j_index=domainDestination->j_index ; - int nglo = j_index.numElements() ; - int nj_glo =domainDestination->nj_glo ; - for (size_t i = 0; i < nglo ; ++i) - { - j_index(i)=(nj_glo-1)-j_index(i) ; - } - } - - if (!reorderDomain->shift_lon_fraction.isEmpty()) - { - int ni_glo =domainDestination->ni_glo ; - int offset = ni_glo*reorderDomain->shift_lon_fraction ; - CArray& i_index=domainDestination->i_index ; - int nglo = i_index.numElements() ; - for (size_t i = 0; i < nglo ; ++i) - { - i_index(i)= (i_index(i)+offset+ni_glo)%ni_glo ; - } - } - - if (!reorderDomain->min_lon.isEmpty() && !reorderDomain->max_lon.isEmpty()) - { - double min_lon=reorderDomain->min_lon ; - double max_lon=reorderDomain->max_lon ; - double delta=max_lon-min_lon ; - - if (!domainDestination->lonvalue_1d.isEmpty() ) - { - CArray& lon=domainDestination->lonvalue_1d ; - for (int i=0;i max_lon) lon(i)=lon(i)-delta ; - while (lon(i) < min_lon) lon(i)=lon(i)+delta ; - } - } - - if (!domainDestination->bounds_lon_1d.isEmpty() ) - { - CArray& bounds_lon=domainDestination->bounds_lon_1d ; - for (int i=0;i max_lon) bounds_lon(0,i)=bounds_lon(0,i)-delta ; - while (bounds_lon(1,i) > max_lon) bounds_lon(1,i)=bounds_lon(1,i)-delta ; - - while (bounds_lon(0,i) < min_lon) bounds_lon(0,i)=bounds_lon(0,i)+delta ; - while (bounds_lon(1,i) < min_lon) bounds_lon(1,i)=bounds_lon(1,i)+delta ; - } - } - } - - domainDestination->checkAttributes() ; -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp deleted file mode 100755 index dcc3a4d5..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/*! - \brief Algorithm for reordering domain. - */ -#ifndef __XIOS_DOMAIN_ALGORITHM_REORDER_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_REORDER_HPP__ - -#include "algorithm_transformation_no_data_modification.hpp" -#include "transformation.hpp" - -namespace xios -{ - - class CDomain; - class CReorderDomain; - - /*! - \class CDomainAlgorithmReorder - Reordering data on domain - */ - class CDomainAlgorithmReorder : public CAlgorithmTransformationNoDataModification - { - public: - CDomainAlgorithmReorder(bool isSource, CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain); - - virtual ~CDomainAlgorithmReorder() {} - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nreorder_domain";} - - - public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_REORDER_HPP__ diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp deleted file mode 100755 index 17ead450..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp +++ /dev/null @@ -1,280 +0,0 @@ -#include "domain_algorithm_zoom.hpp" -#include "zoom_domain.hpp" -#include "domain.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "attribute_template.hpp" - -namespace xios { -shared_ptr CDomainAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector domainListDestP = gridDst->getDomains(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CZoomDomain* zoomDomain = dynamic_cast (transformation); - int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], zoomDomain); -} -CATCH - -bool CDomainAlgorithmZoom::dummyRegistered_ = CDomainAlgorithmZoom::registerTrans(); -bool CDomainAlgorithmZoom::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_ZOOM_DOMAIN, create); -} -CATCH - -CDomainAlgorithmZoom::CDomainAlgorithmZoom(bool isSource, CDomain* domainDestination, CDomain* domainSource, CZoomDomain* zoomDomain) -: CAlgorithmTransformationTransfer(isSource), domainSrc_(domainSource), domainDest_(domainDestination) -TRY -{ - zoomDomain->checkValid(domainSource); - zoomIBegin_ = zoomDomain->ibegin.getValue(); - zoomJBegin_ = zoomDomain->jbegin.getValue(); - - zoomNi_ = zoomDomain->ni.getValue(); - zoomNj_ = zoomDomain->nj.getValue(); - - zoomIEnd_ = zoomIBegin_ + zoomNi_ - 1; - zoomJEnd_ = zoomJBegin_ + zoomNj_ - 1; - - if (zoomNi_ > domainSource->ni_glo.getValue()) - { - ERROR("CDomainAlgorithmZoom::CDomainAlgorithmZoom(CDomain* domainDestination, CDomain* domainSource, CZoomDomain* zoomDomain)", - << "Zoom size is greater than size of domain source" - << "Size ni_glo of domain source " <getId() << " is " << domainSource->ni_glo.getValue() << std::endl - << "Zoom size is " << zoomNi_ ); - } - - if (zoomNj_ > domainSource->nj_glo.getValue()) - { - ERROR("CDomainAlgorithmZoom::CDomainAlgorithmZoom(CDomain* domainDestination, CDomain* domainSource, CZoomDomain* zoomDomain)", - << "Zoom size is greater than size of domain source" - << "Size nj_glo of domain source " <getId() << " is " << domainSource->nj_glo.getValue() << std::endl - << "Zoom size is " << zoomNj_ ); - } - - // Calculate the size of local domain - int ind, indLocSrc, indLocDest, iIdxSrc, jIdxSrc, destIBegin = -1, destJBegin = -1, niDest = 0, njDest = 0, ibeginDest, jbeginDest ; - int indGloDest, indGloSrc, niGloSrc = domainSrc_->ni_glo, iSrc, jSrc, nvertex = 0; - for (int j = 0; j < domainSrc_->nj.getValue(); j++) - { - for (int i = 0; i < domainSrc_->ni.getValue(); i++) - { - ind = j*domainSrc_->ni + i; - iIdxSrc = domainSrc_->i_index(ind); - if ((iIdxSrc >= zoomIBegin_) && (iIdxSrc <= zoomIEnd_)) - { - jIdxSrc = domainSrc_->j_index(ind); - if ((jIdxSrc >= zoomJBegin_) && (jIdxSrc <= zoomJEnd_)) - { - if ((niDest == 0) && (njDest == 0)) - { - destIBegin = i; - destJBegin = j; - } - if (i == destIBegin) ++njDest; - } - if (j == destJBegin) ++niDest; - - } - } - } - ibeginDest = destIBegin + domainSrc_->ibegin - zoomIBegin_; - jbeginDest = destJBegin + domainSrc_->jbegin - zoomJBegin_; - domainDest_->ni_glo.setValue(zoomNi_); - domainDest_->nj_glo.setValue(zoomNj_); - domainDest_->ni.setValue(niDest); - domainDest_->nj.setValue(njDest); - if ( (niDest==0) || (njDest==0)) - { - domainDest_->ibegin.setValue(0); - domainDest_->jbegin.setValue(0); - } - else - { - domainDest_->ibegin.setValue(ibeginDest); - domainDest_->jbegin.setValue(jbeginDest); - } - domainDest_->i_index.resize(niDest*njDest); - domainDest_->j_index.resize(niDest*njDest); - - domainDest_->data_ni.setValue(niDest); - domainDest_->data_nj.setValue(njDest); - domainDest_->data_ibegin.setValue(0); - domainDest_->data_jbegin.setValue(0); - domainDest_->data_i_index.resize(niDest*njDest); - domainDest_->data_j_index.resize(niDest*njDest); - - domainDest_->domainMask.resize(niDest*njDest); - - if (!domainSrc_->lonvalue_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - domainDest_->lonvalue_1d.resize(niDest); - domainDest_->latvalue_1d.resize(njDest); - } - else if (domainDest_->type == CDomain::type_attr::unstructured) - { - domainDest_->lonvalue_1d.resize(niDest); - domainDest_->latvalue_1d.resize(niDest); - } - else if (domainDest_->type == CDomain::type_attr::curvilinear) - { - domainDest_->lonvalue_1d.resize(niDest*njDest); - domainDest_->latvalue_1d.resize(niDest*njDest); - } - } - else if (!domainSrc_->lonvalue_2d.isEmpty()) - { - domainDest_->lonvalue_2d.resize(niDest,njDest); - domainDest_->latvalue_2d.resize(niDest,njDest); - } - - if (domainSrc_->hasBounds) - { - nvertex = domainSrc_->nvertex; - domainDest_->nvertex.setValue(nvertex); - if (!domainSrc_->bounds_lon_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - domainDest_->bounds_lon_1d.resize(nvertex, niDest); - domainDest_->bounds_lat_1d.resize(nvertex, njDest); - } - else if (domainDest_->type == CDomain::type_attr::unstructured) - { - domainDest_->bounds_lon_1d.resize(nvertex, niDest); - domainDest_->bounds_lat_1d.resize(nvertex, niDest); - } - else if (domainDest_->type == CDomain::type_attr::curvilinear) - { - domainDest_->bounds_lon_1d.resize(nvertex, niDest*njDest); - domainDest_->bounds_lat_1d.resize(nvertex, niDest*njDest); - } - } - else if (!domainSrc_->bounds_lon_2d.isEmpty()) - { - domainDest_->bounds_lon_2d.resize(nvertex, niDest, njDest); - domainDest_->bounds_lat_2d.resize(nvertex, niDest, njDest); - } - } - if (domainSrc_->hasArea) domainDest_->area.resize(niDest,njDest); - - - for (int iDest = 0; iDest < niDest; iDest++) - { - iSrc = iDest + destIBegin; - for (int jDest = 0; jDest < njDest; jDest++) - { - jSrc = jDest + destJBegin; - ind = jSrc * domainSrc_->ni + iSrc; - iIdxSrc = domainSrc_->i_index(ind); - jIdxSrc = domainSrc_->j_index(ind); - indLocDest = jDest*niDest + iDest; - indGloDest = (jDest + jbeginDest)*zoomNi_ + (iDest + ibeginDest); - indLocSrc = (jDest+destJBegin)*domainSrc_->ni + (iDest+destIBegin); - indGloSrc = (jIdxSrc )* niGloSrc + iIdxSrc; - domainDest_->i_index(indLocDest) = iDest + ibeginDest; // i_index contains global positions - domainDest_->j_index(indLocDest) = jDest + jbeginDest; // i_index contains global positions - domainDest_->data_i_index(indLocDest) = (domainSrc_->data_dim == 1) ? indLocDest : iDest; // data_i_index contains local positions - domainDest_->data_j_index(indLocDest) = (domainSrc_->data_dim == 1) ? 0 :jDest; // data_i_index contains local positions - domainDest_->domainMask(indLocDest) = domainSrc_->domainMask(indLocSrc); - - if (domainSrc_->hasArea) - domainDest_->area(iDest,jDest) = domainSrc_->area(iSrc,jSrc); - - if (domainSrc_->hasLonLat) - { - if (!domainSrc_->latvalue_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - domainDest_->latvalue_1d(jDest) = domainSrc_->latvalue_1d(jSrc); - } - else - { - domainDest_->lonvalue_1d(indLocDest) = domainSrc_->lonvalue_1d(ind); - domainDest_->latvalue_1d(indLocDest) = domainSrc_->latvalue_1d(ind); - } - } - else if (!domainSrc_->latvalue_2d.isEmpty()) - { - domainDest_->lonvalue_2d(iDest,jDest) = domainSrc_->lonvalue_2d(iSrc,jSrc); - domainDest_->latvalue_2d(iDest,jDest) = domainSrc_->latvalue_2d(iSrc,jSrc); - } - } - - if (domainSrc_->hasBounds) - { - if (!domainSrc_->bounds_lon_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - for (int n = 0; n < nvertex; ++n) - domainDest_->bounds_lat_1d(n,jDest) = domainSrc_->bounds_lat_1d(n,jSrc); - } - else - { - for (int n = 0; n < nvertex; ++n) - { - domainDest_->bounds_lon_1d(n,indLocDest) = domainSrc_->bounds_lon_1d(n,ind); - domainDest_->bounds_lat_1d(n,indLocDest) = domainSrc_->bounds_lat_1d(n,ind); - } - } - } - else if (!domainSrc_->bounds_lon_2d.isEmpty()) - { - for (int n = 0; n < nvertex; ++n) - { - domainDest_->bounds_lon_2d(n,iDest,jDest) = domainSrc_->bounds_lon_2d(n,iSrc,jSrc); - domainDest_->bounds_lat_2d(n,iDest,jDest) = domainSrc_->bounds_lat_2d(n,iSrc,jSrc); - } - } - - } - - transformationMapping_[indGloDest]=indGloSrc; - - } - - if (domainSrc_->hasLonLat && !domainSrc_->latvalue_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - domainDest_->lonvalue_1d(iDest) = domainSrc_->lonvalue_1d(iSrc); - } - } - - if (domainSrc_->hasBounds && !domainSrc_->bounds_lon_1d.isEmpty()) - { - if (domainDest_->type == CDomain::type_attr::rectilinear) - { - for (int n = 0; n < nvertex; ++n) - domainDest_->bounds_lon_1d(n,iDest) = domainSrc_->bounds_lon_1d(n,iSrc); - } - } - } - domainDest_->computeLocalMask(); - - domainDestination->checkAttributes() ; - - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), domainDestination->getLocalView(CElementView::WORKFLOW)) ; - -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp b/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp deleted file mode 100755 index 9f3daf2f..00000000 --- a/xios_2311_src/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp +++ /dev/null @@ -1,61 +0,0 @@ - -#ifndef __XIOS_DOMAIN_ALGORITHM_ZOOM_HPP__ -#define __XIOS_DOMAIN_ALGORITHM_ZOOM_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { - -class CDomain; -class CZoomDomain; - -/*! - \class CDomainAlgorithmZoom - Implementing zoom (alternative zoom) on domain -*/ -class CDomainAlgorithmZoom : public CAlgorithmTransformationTransfer -{ -public: - CDomainAlgorithmZoom(bool isSource, CDomain* domainDestination, CDomain* domainSource, CZoomDomain* zoomDomain); - - virtual ~CDomainAlgorithmZoom() {} - - static bool registerTrans(); -protected: - void updateDomainAttributes(); - -private: - void updateZoom(); - -private: - //! Global zoom begin on domain - int zoomIBegin_; - int zoomJBegin_; - - //! Global zoom end on domain - int zoomIEnd_; - int zoomJEnd_; - - //! Global zoom size on domain - int zoomNi_; - int zoomNj_; - CDomain* domainSrc_ ; - CDomain* domainDest_ ; - - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_DOMAIN_ALGORITHM_ZOOM_HPP__ diff --git a/xios_2311_src/src/transformation/generic_algorithm_transformation.cpp b/xios_2311_src/src/transformation/generic_algorithm_transformation.cpp index 6e3ce42c..acb478e7 100644 --- a/xios_2311_src/src/transformation/generic_algorithm_transformation.cpp +++ b/xios_2311_src/src/transformation/generic_algorithm_transformation.cpp @@ -13,42 +13,1132 @@ #include "utils.hpp" #include "timer.hpp" #include "mpi.hpp" -#include "transform_connector.hpp" -#include "weight_transform_connector.hpp" -#include "grid_algorithm_generic.hpp" -#include "transform_filter.hpp" -namespace xios +namespace xios { + +CGenericAlgorithmTransformation::CGenericAlgorithmTransformation() + : transformationMapping_(), transformationWeight_(), transformationPosition_(), + idAuxInputs_(), type_(ELEMENT_NO_MODIFICATION_WITH_DATA), indexElementSrc_(), + computedProcSrcNonTransformedElement_(false), eliminateRedondantSrc_(true), isDistributedComputed_(false) +{ +} + +void CGenericAlgorithmTransformation::updateData(CArray& dataOut) +{ + +} + +void CGenericAlgorithmTransformation::apply(const std::vector >& localIndex, + const double* dataInput, + CArray& dataOut, + std::vector& flagInitial, + bool ignoreMissingValue, bool firstPass ) +TRY +{ + int nbLocalIndex = localIndex.size(); + double defaultValue = std::numeric_limits::quiet_NaN(); + + if (ignoreMissingValue) + { + if (firstPass) dataOut=defaultValue ; + + for (int idx = 0; idx < nbLocalIndex; ++idx) + { + if (! NumTraits::isNan(*(dataInput + idx))) + { + if (flagInitial[localIndex[idx].first]) dataOut(localIndex[idx].first) = *(dataInput + idx) * localIndex[idx].second; + else dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second; + flagInitial[localIndex[idx].first] = false; // Reset flag to indicate not all data source are nan + } + } + + } + else + { + for (int idx = 0; idx < nbLocalIndex; ++idx) + { + dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second; + } + } +} +CATCH + +void CGenericAlgorithmTransformation::computePositionElements(CGrid* dst, CGrid* src) +TRY +{ + int idxScalar = 0, idxAxis = 0, idxDomain = 0; + CArray axisDomainOrderDst = dst->axis_domain_order; + for (int i = 0; i < axisDomainOrderDst.numElements(); ++i) + { + int dimElement = axisDomainOrderDst(i); + if (2 == dimElement) + { + elementPositionInGridDst2DomainPosition_[i] = idxDomain; + ++idxDomain; + } + else if (1 == dimElement) + { + elementPositionInGridDst2AxisPosition_[i] = idxAxis; + ++idxAxis; + } + else + { + elementPositionInGridDst2ScalarPosition_[i] = idxScalar; + ++idxScalar; + } + } + + idxScalar = idxAxis = idxDomain = 0; + CArray axisDomainOrderSrc = src->axis_domain_order; + for (int i = 0; i < axisDomainOrderSrc.numElements(); ++i) + { + int dimElement = axisDomainOrderSrc(i); + if (2 == dimElement) + { + elementPositionInGridSrc2DomainPosition_[i] = idxDomain; + ++idxDomain; + } + else if (1 == dimElement) + { + elementPositionInGridSrc2AxisPosition_[i] = idxAxis; + ++idxAxis; + } + else + { + elementPositionInGridSrc2ScalarPosition_[i] = idxScalar; + ++idxScalar; + } + } +} +CATCH + +bool CGenericAlgorithmTransformation::isDistributedTransformation(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst) +TRY +{ + + if (!isDistributedComputed_) + { + isDistributedComputed_=true ; + if (!eliminateRedondantSrc_) isDistributed_=true ; + else + { + CContext* context = CContext::getCurrent(); + CContextClient* client = context->client; + + computePositionElements(gridSrc, gridDst); + std::vector scalarListSrcP = gridSrc->getScalars(); + std::vector axisListSrcP = gridSrc->getAxis(); + std::vector domainListSrcP = gridSrc->getDomains(); + int distributed, distributed_glo ; + + CArray axisDomainSrcOrder = gridSrc->axis_domain_order; + if (2 == axisDomainSrcOrder(elementPositionInGrid)) // It's domain + { + distributed=domainListSrcP[elementPositionInGridSrc2DomainPosition_[elementPositionInGrid]]->isDistributed() ; + MPI_Allreduce(&distributed,&distributed_glo, 1, MPI_INT, MPI_LOR, client->intraComm) ; + + } + else if (1 == axisDomainSrcOrder(elementPositionInGrid))//it's an axis + { + distributed=axisListSrcP[elementPositionInGridSrc2AxisPosition_[elementPositionInGrid]]->isDistributed() ; + MPI_Allreduce(&distributed,&distributed_glo, 1, MPI_INT, MPI_LOR, client->intraComm) ; + } + else //it's a scalar + { + distributed_glo=false ; + } + isDistributed_=distributed_glo ; + } + } + return isDistributed_ ; +} +CATCH + +/*! + This function computes the global indexes of grid source, which the grid destination is in demand. + \param[in] elementPositionInGrid position of an element in a grid .E.g: if grid is composed of domain and axis (in order), + then position of axis in grid is 1 and domain is positioned at 0. + \param[in] gridSrc Grid source + \param[in] gridDst Grid destination + \param[in\out] globaIndexWeightFromSrcToDst mapping of each global index source and weight to index destination +*/ +void CGenericAlgorithmTransformation::computeGlobalSourceIndex(int elementPositionInGrid, + CGrid* gridSrc, + CGrid* gridDst, + SourceDestinationIndexMap& globaIndexWeightFromSrcToDst) +TRY + { + CContext* context = CContext::getCurrent(); + CContextClient* client = context->client; + int nbClient = client->clientSize; + + typedef std::unordered_map > > SrcToDstMap; + int idx; + + // compute position of elements on grids + computePositionElements(gridDst, gridSrc); + std::vector scalarListDestP = gridDst->getScalars(); + std::vector axisListDestP = gridDst->getAxis(); + std::vector domainListDestP = gridDst->getDomains(); + CArray axisDomainDstOrder = gridDst->axis_domain_order; + std::vector scalarListSrcP = gridSrc->getScalars(); + std::vector axisListSrcP = gridSrc->getAxis(); + std::vector domainListSrcP = gridSrc->getDomains(); + CArray axisDomainSrcOrder = gridSrc->axis_domain_order; + + bool isTransPosEmpty = transformationPosition_.empty(); + CArray transPos; + if (!isTransPosEmpty) transPos.resize(transformationMapping_.size()); + std::set allIndexSrc; // All index of source, which can be scattered among processes, need for doing transformation + + for (size_t idxTrans = 0; idxTrans < transformationMapping_.size(); ++idxTrans) + { + TransformationIndexMap::const_iterator itbTransMap = transformationMapping_[idxTrans].begin(), itTransMap, + iteTransMap = transformationMapping_[idxTrans].end(); + TransformationWeightMap::const_iterator itbTransWeight = transformationWeight_[idxTrans].begin(), itTransWeight; + + // Build mapping between global source element index and global destination element index. + itTransWeight = itbTransWeight; + for (itTransMap = itbTransMap; itTransMap != iteTransMap; ++itTransMap, ++itTransWeight) + { + const std::vector& srcIndex = itTransMap->second; + for (idx = 0; idx < srcIndex.size(); ++idx) + allIndexSrc.insert(srcIndex[idx]); + } + + if (!isTransPosEmpty) + { + TransformationPositionMap::const_iterator itPosMap = transformationPosition_[idxTrans].begin(); + transPos(idxTrans) = itPosMap->second[0]; + } + } + + size_t indexSrcSize = 0; + CArray indexSrc(allIndexSrc.size()); + for (std::set::iterator it = allIndexSrc.begin(); it != allIndexSrc.end(); ++it, ++indexSrcSize) + indexSrc(indexSrcSize) = *it; + + // Flag to indicate whether we will recompute distribution of source global index on processes + bool computeGlobalIndexOnProc = false; + if (indexElementSrc_.size() != allIndexSrc.size()) + computeGlobalIndexOnProc = true; + else + { + for (std::set::iterator it = allIndexSrc.begin(); it != allIndexSrc.end(); ++it) + if (0 == indexElementSrc_.count(*it)) + { + computeGlobalIndexOnProc = true; + break; + } + } + + if (computeGlobalIndexOnProc) + indexElementSrc_.swap(allIndexSrc); + + int sendValue = (computeGlobalIndexOnProc) ? 1 : 0; + int recvValue = 0; + MPI_Allreduce(&sendValue, &recvValue, 1, MPI_INT, MPI_SUM, client->intraComm); + computeGlobalIndexOnProc = (0 < recvValue); + +// CClientClientDHTInt::Index2VectorInfoTypeMap globalIndexOfTransformedElementOnProc; + + if (computeGlobalIndexOnProc || !computedProcSrcNonTransformedElement_) + { + { + CClientClientDHTInt::Index2VectorInfoTypeMap tmp ; + globalIndexOfTransformedElementOnProc_.swap(tmp) ; + } + // Find out global index source of transformed element on corresponding process. + if (globalElementIndexOnProc_.empty()) + globalElementIndexOnProc_.resize(axisDomainDstOrder.numElements()); + + for (idx = 0; idx < axisDomainDstOrder.numElements(); ++idx) + { + + if (idx == elementPositionInGrid) + computeExchangeGlobalIndex(indexSrc, axisDomainSrcOrder(idx), globalIndexOfTransformedElementOnProc_); //globalElementIndexOnProc[idx]); + if (!computedProcSrcNonTransformedElement_) + { + if (2 == axisDomainDstOrder(idx)) // It's domain + { + if (idx != elementPositionInGrid) + computeExchangeDomainIndex(domainListDestP[elementPositionInGridDst2DomainPosition_[idx]], + domainListSrcP[elementPositionInGridSrc2DomainPosition_[idx]], + transPos, + globalElementIndexOnProc_[idx]); + + } + else if (1 == axisDomainDstOrder(idx))//it's an axis + { + if (idx != elementPositionInGrid) + computeExchangeAxisIndex(axisListDestP[elementPositionInGridDst2AxisPosition_[idx]], + axisListSrcP[elementPositionInGridSrc2AxisPosition_[idx]], + transPos, + globalElementIndexOnProc_[idx]); + } + else //it's a scalar + { + if (idx != elementPositionInGrid) + computeExchangeScalarIndex(scalarListDestP[elementPositionInGridDst2ScalarPosition_[idx]], + scalarListSrcP[elementPositionInGridSrc2ScalarPosition_[idx]], + transPos, + globalElementIndexOnProc_[idx]); + + } + } + } + + if (!isTransPosEmpty && !computedProcSrcNonTransformedElement_) + { + for (idx = 0; idx < globalElementIndexOnProc_.size(); ++idx) + { + if (idx != elementPositionInGrid) + { + std::unordered_map >::iterator itb = globalElementIndexOnProc_[idx].begin(), it, + ite = globalElementIndexOnProc_[idx].end(); + for (it = itb; it != ite; ++it) it->second.resize(1); + } + } + } + +/* + if (!computedProcSrcNonTransformedElement_) + { + for (idx = 0; idx < globalElementIndexOnProc_.size(); ++idx) + { + if (idx != elementPositionInGrid) + { + std::unordered_map >::iterator itb = globalElementIndexOnProc_[idx].begin(), it, + ite = globalElementIndexOnProc_[idx].end(); + for (it = itb; it != ite; ++it) procOfNonTransformedElements_.insert(it->first); + if (procOfNonTransformedElements_.size() == nbClient) + break; + } + } + } + + // Processes contain the source index of transformed element + std::set procOfTransformedElement; + CClientClientDHTInt::Index2VectorInfoTypeMap::iterator itIdxb = globalIndexOfTransformedElementOnProc.begin(), + itIdxe = globalIndexOfTransformedElementOnProc.end(), itIdx; + for (itIdx = itIdxb; itIdx != itIdxe; ++itIdx) + { + std::vector& tmp = itIdx->second; + for (int i = 0; i < tmp.size(); ++i) + procOfTransformedElement.insert(tmp[i]); + if (tmp.size() == nbClient) + break; + } + + std::set& commonProc = (procOfTransformedElement.size() < procOfNonTransformedElements_.size()) ? procOfTransformedElement + : (!procOfNonTransformedElements_.empty() ? procOfNonTransformedElements_ : procOfTransformedElement); + + std::vector procContainSrcElementIdx(commonProc.size()); + int count = 0; + for (std::set::iterator it = commonProc.begin(); it != commonProc.end(); ++it) + procContainSrcElementIdx[count++] = *it; + + procContainSrcElementIdx_.swap(procContainSrcElementIdx); +*/ + + if (procElementList_.empty()) procElementList_.resize(axisDomainDstOrder.numElements()) ; + for (idx = 0; idx < axisDomainDstOrder.numElements(); ++idx) + { + std::set& procList=procElementList_[idx] ; + std::set commonTmp ; + if (idx == elementPositionInGrid) + { + set tmpSet ; + procList.swap(tmpSet) ; + CClientClientDHTInt::Index2VectorInfoTypeMap::iterator itIdxb = globalIndexOfTransformedElementOnProc_.begin(), + itIdxe = globalIndexOfTransformedElementOnProc_.end(), itIdx; + for (itIdx = itIdxb; itIdx != itIdxe; ++itIdx) + { + std::vector& tmp = itIdx->second; + for (int i = 0; i < tmp.size(); ++i) procList.insert(tmp[i]); + if (tmp.size() == nbClient) + break; + } + } + else + { + if (!computedProcSrcNonTransformedElement_) + { + set tmpSet ; + procList.swap(tmpSet) ; + std::unordered_map >::iterator itb = globalElementIndexOnProc_[idx].begin(), it, + ite = globalElementIndexOnProc_[idx].end(); + for (it = itb; it != ite; ++it) + { + procList.insert(it->first); + if (procList.size() == nbClient) break; + } + } + } + + if (idx==0) commonProc_= procList ; + else + { + for (std::set::iterator it = commonProc_.begin(); it != commonProc_.end(); ++it) + if (procList.count(*it)==1) commonTmp.insert(*it) ; + commonProc_.swap(commonTmp) ; + } + } + std::vector procContainSrcElementIdx(commonProc_.size()); + int count = 0; + for (std::set::iterator it = commonProc_.begin(); it != commonProc_.end(); ++it) procContainSrcElementIdx[count++] = *it; + procContainSrcElementIdx_.swap(procContainSrcElementIdx); + + // For the first time, surely we calculate proc containing non transformed elements + if (!computedProcSrcNonTransformedElement_) computedProcSrcNonTransformedElement_ = true; + } + + for (size_t idxTrans = 0; idxTrans < transformationMapping_.size(); ++idxTrans) + { + TransformationIndexMap::const_iterator itbTransMap = transformationMapping_[idxTrans].begin(), itTransMap, + iteTransMap = transformationMapping_[idxTrans].end(); + TransformationWeightMap::const_iterator itbTransWeight = transformationWeight_[idxTrans].begin(), itTransWeight; + SrcToDstMap src2DstMap; + src2DstMap.rehash(std::ceil(transformationMapping_[idxTrans].size()/src2DstMap.max_load_factor())); + + // Build mapping between global source element index and global destination element index. + std::unordered_map >().swap(globalElementIndexOnProc_[elementPositionInGrid]); + std::set tmpCounter; + itTransWeight = itbTransWeight; + for (itTransMap = itbTransMap; itTransMap != iteTransMap; ++itTransMap, ++itTransWeight) + { + const std::vector& srcIndex = itTransMap->second; + const std::vector& weight = itTransWeight->second; + for (idx = 0; idx < srcIndex.size(); ++idx) + { + src2DstMap[srcIndex[idx]].push_back(make_pair(itTransMap->first, weight[idx])); + if (0 == tmpCounter.count(srcIndex[idx])) + { + tmpCounter.insert(srcIndex[idx]); + + vector& rankSrc = globalIndexOfTransformedElementOnProc_[srcIndex[idx]] ; + for (int n=0;n >::iterator itb = globalElementIndexOnProc_[idx].begin(), it, + ite = globalElementIndexOnProc_[idx].end(); + for (it = itb; it != ite; ++it) it->second[0] = transPos(idxTrans); + } + } + } + + // Ok, now compute global index of grid source and ones of grid destination + computeGlobalGridIndexMapping(elementPositionInGrid, + procContainSrcElementIdx_, //srcRank, + src2DstMap, + gridSrc, + gridDst, + globalElementIndexOnProc_, + globaIndexWeightFromSrcToDst); + } + } +CATCH + +/*! + Compute mapping of global index of grid source and grid destination + \param [in] elementPositionInGrid position of element in grid. E.x: grid composed of domain and axis, domain has position 0 and axis 1. + \param [in] srcRank rank of client from which we demand global index of element source + \param [in] src2DstMap mapping of global index of element source and global index of element destination + \param [in] gridSrc Grid source + \param [in] gridDst Grid destination + \param [in] globalElementIndexOnProc Global index of element source on different client rank + \param [out] globaIndexWeightFromSrcToDst Mapping of global index of grid source and grid destination +*/ +void CGenericAlgorithmTransformation::computeGlobalGridIndexMapping(int elementPositionInGrid, + const std::vector& srcRank, + std::unordered_map > >& src2DstMap, + CGrid* gridSrc, + CGrid* gridDst, + std::vector > >& globalElementIndexOnProc, + SourceDestinationIndexMap& globaIndexWeightFromSrcToDst) +TRY +{ + SourceDestinationIndexMap globaIndexWeightFromSrcToDst_tmp ; + + CContext* context = CContext::getCurrent(); + CContextClient* client=context->client; + int clientRank = client->clientRank; + + std::vector domainListSrcP = gridSrc->getDomains(); + std::vector axisListSrcP = gridSrc->getAxis(); + std::vector scalarListSrcP = gridSrc->getScalars(); + CArray axisDomainSrcOrder = gridSrc->axis_domain_order; + + size_t nbElement = axisDomainSrcOrder.numElements(); + std::vector nGlobSrc(nbElement); + size_t globalSrcSize = 1; + int domainIndex = 0, axisIndex = 0, scalarIndex = 0; + for (int idx = 0; idx < nbElement; ++idx) + { + nGlobSrc[idx] = globalSrcSize; + int elementDimension = axisDomainSrcOrder(idx); + + // If this is a domain + if (2 == elementDimension) + { + globalSrcSize *= domainListSrcP[domainIndex]->nj_glo.getValue() * domainListSrcP[domainIndex]->ni_glo.getValue(); + ++domainIndex; + } + else if (1 == elementDimension) // So it's an axis + { + globalSrcSize *= axisListSrcP[axisIndex]->n_glo.getValue(); + ++axisIndex; + } + else + { + globalSrcSize *= 1; + ++scalarIndex; + } + } + + std::vector domainListDestP = gridDst->getDomains(); + std::vector axisListDestP = gridDst->getAxis(); + std::vector scalarListDestP = gridDst->getScalars(); + CArray axisDomainDstOrder = gridDst->axis_domain_order; + + std::vector nGlobDst(nbElement); + size_t globalDstSize = 1; + domainIndex = axisIndex = scalarIndex = 0; + set globalSrcStoreIndex ; + + for (int idx = 0; idx < nbElement; ++idx) + { + nGlobDst[idx] = globalDstSize; + int elementDimension = axisDomainDstOrder(idx); + + // If this is a domain + if (2 == elementDimension) + { + globalDstSize *= domainListDestP[domainIndex]->nj_glo.getValue() * domainListDestP[domainIndex]->ni_glo.getValue(); + ++domainIndex; + } + else if (1 == elementDimension) // So it's an axis + { + globalDstSize *= axisListDestP[axisIndex]->n_glo.getValue(); + ++axisIndex; + } + else + { + globalDstSize *= 1; + ++scalarIndex; + } + } + + std::map< std::pair, int > rankMap ; + std::map< std::pair, int >:: iterator rankMapIt ; + + for (int i = 0; i < srcRank.size(); ++i) + { + size_t ssize = 1; + int rankSrc = srcRank[i]; + for (int idx = 0; idx < nbElement; ++idx) + { + ssize *= (globalElementIndexOnProc[idx][rankSrc]).size(); + } + + std::vector idxLoop(nbElement,0); + std::vector currentIndexSrc(nbElement, 0); + std::vector currentIndexDst(nbElement, 0); + int innnerLoopSize = (globalElementIndexOnProc[0])[rankSrc].size(); + size_t idx = 0; + while (idx < ssize) + { + for (int ind = 0; ind < nbElement; ++ind) + { + if (idxLoop[ind] == (globalElementIndexOnProc[ind])[rankSrc].size()) + { + idxLoop[ind] = 0; + ++idxLoop[ind+1]; + } + + currentIndexDst[ind] = currentIndexSrc[ind] = (globalElementIndexOnProc[ind])[rankSrc][idxLoop[ind]]; + } + + for (int ind = 0; ind < innnerLoopSize; ++ind) + { + currentIndexDst[0] = currentIndexSrc[0] = (globalElementIndexOnProc[0])[rankSrc][ind]; + int globalElementDstIndexSize = 0; + if (1 == src2DstMap.count(currentIndexSrc[elementPositionInGrid])) + { + globalElementDstIndexSize = src2DstMap[currentIndexSrc[elementPositionInGrid]].size(); + } + + std::vector globalDstVecIndex(globalElementDstIndexSize,0); + size_t globalSrcIndex = 0; + for (int idxElement = 0; idxElement < nbElement; ++idxElement) + { + if (idxElement == elementPositionInGrid) + { + for (int k = 0; k < globalElementDstIndexSize; ++k) + { + globalDstVecIndex[k] += src2DstMap[currentIndexSrc[elementPositionInGrid]][k].first * nGlobDst[idxElement]; + } + } + else + { + for (int k = 0; k < globalElementDstIndexSize; ++k) + { + globalDstVecIndex[k] += currentIndexDst[idxElement] * nGlobDst[idxElement]; + } + } + globalSrcIndex += currentIndexSrc[idxElement] * nGlobSrc[idxElement]; + } + + for (int k = 0; k < globalElementDstIndexSize; ++k) + { + + globaIndexWeightFromSrcToDst_tmp[rankSrc][globalSrcIndex].push_back(make_pair(globalDstVecIndex[k],src2DstMap[currentIndexSrc[elementPositionInGrid]][k].second )); + rankMapIt=rankMap.find(make_pair(globalSrcIndex,globalDstVecIndex[k])) ; + if (rankMapIt==rankMap.end()) rankMap[make_pair(globalSrcIndex,globalDstVecIndex[k])] = rankSrc ; + else if (rankSrc==clientRank) rankMapIt->second = rankSrc ; + } + ++idxLoop[0]; + } + idx += innnerLoopSize; + } + } + + // eliminate redondant global src point owned by differrent processes. + // Avoid as possible to tranfer data from an other process if the src point is also owned by current process + int rankSrc ; + size_t globalSrcIndex ; + size_t globalDstIndex ; + double weight ; + + SourceDestinationIndexMap::iterator rankIt,rankIte ; + std::unordered_map > >::iterator globalSrcIndexIt, globalSrcIndexIte ; + std::vector >::iterator vectIt,vectIte ; + + rankIt=globaIndexWeightFromSrcToDst_tmp.begin() ; rankIte=globaIndexWeightFromSrcToDst_tmp.end() ; + for(;rankIt!=rankIte;++rankIt) + { + rankSrc = rankIt->first ; + globalSrcIndexIt = rankIt->second.begin() ; globalSrcIndexIte = rankIt->second.end() ; + for(;globalSrcIndexIt!=globalSrcIndexIte;++globalSrcIndexIt) + { + globalSrcIndex = globalSrcIndexIt->first ; + vectIt = globalSrcIndexIt->second.begin() ; vectIte = globalSrcIndexIt->second.end() ; + for(vectIt; vectIt!=vectIte; vectIt++) + { + globalDstIndex = vectIt->first ; + weight = vectIt->second ; + if (eliminateRedondantSrc_) + { + if (rankMap[make_pair(globalSrcIndex,globalDstIndex)] == rankSrc) + globaIndexWeightFromSrcToDst[rankSrc][globalSrcIndex].push_back(make_pair(globalDstIndex,weight)) ; + } + else globaIndexWeightFromSrcToDst[rankSrc][globalSrcIndex].push_back(make_pair(globalDstIndex,weight)) ; + } + } + } +} +CATCH + +/*! + Find out proc and global index of axis source which axis destination is on demande + \param[in] scalar Scalar destination + \param[in] scalar Scalar source + \param[in] destGlobalIndexPositionInGrid Relative position of axis corresponds to other element of grid. + \param[out] globalScalarIndexOnProc Global index of axis source on different procs +*/ +void CGenericAlgorithmTransformation::computeExchangeScalarIndex(CScalar* scalarDst, + CScalar* scalarSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalScalarIndexOnProc) +TRY { + CContext* context = CContext::getCurrent(); + CContextClient* client=context->client; + int clientRank = client->clientRank; + int clientSize = client->clientSize; -CGenericAlgorithmTransformation::CGenericAlgorithmTransformation(bool isSource) - : isSource_(isSource) + globalScalarIndexOnProc.rehash(std::ceil(clientSize/globalScalarIndexOnProc.max_load_factor())); + for (int idx = 0; idx < clientSize; ++idx) + { + globalScalarIndexOnProc[idx].push_back(0); + } +} +CATCH + +/*! + Find out proc and global index of axis source which axis destination is on demande + \param[in] axisDst Axis destination + \param[in] axisSrc Axis source + \param[in] destGlobalIndexPositionInGrid Relative position of axis corresponds to other element of grid. + \param[out] globalAxisIndexOnProc Global index of axis source on different procs +*/ +void CGenericAlgorithmTransformation::computeExchangeAxisIndex(CAxis* axisDst, + CAxis* axisSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalAxisIndexOnProc) +TRY { + CContext* context = CContext::getCurrent(); + CContextClient* client=context->client; + int clientRank = client->clientRank; + int clientSize = client->clientSize; + + size_t globalIndex; + int nIndexSize = axisSrc->index.numElements(); + CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank; + globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor())); + for (int idx = 0; idx < nIndexSize; ++idx) + { + if (axisSrc->mask(idx)) + { + globalIndex = axisSrc->index(idx); + globalIndex2ProcRank[globalIndex].push_back(clientRank); + } + } + + CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm); + CArray globalAxisIndex(axisDst->index.numElements()); + for (int idx = 0; idx < globalAxisIndex.numElements(); ++idx) + { + globalAxisIndex(idx) = axisDst->index(idx); + } + dhtIndexProcRank.computeIndexInfoMapping(globalAxisIndex); + + std::vector countIndex(clientSize,0); + const CClientClientDHTInt::Index2VectorInfoTypeMap& computedGlobalIndexOnProc = dhtIndexProcRank.getInfoIndexMap(); + CClientClientDHTInt::Index2VectorInfoTypeMap::const_iterator itb = computedGlobalIndexOnProc.begin(), it, + ite = computedGlobalIndexOnProc.end(); + for (it = itb; it != ite; ++it) + { + const std::vector& procList = it->second; + for (int idx = 0; idx < procList.size(); ++idx) ++countIndex[procList[idx]]; + } + + globalAxisIndexOnProc.rehash(std::ceil(clientSize/globalAxisIndexOnProc.max_load_factor())); + for (int idx = 0; idx < clientSize; ++idx) + { + if (0 != countIndex[idx]) + { + globalAxisIndexOnProc[idx].resize(countIndex[idx]); + countIndex[idx] = 0; + } + } + + for (it = itb; it != ite; ++it) + { + const std::vector& procList = it->second; + for (int idx = 0; idx < procList.size(); ++idx) + { + globalAxisIndexOnProc[procList[idx]][countIndex[procList[idx]]] = it->first; + ++countIndex[procList[idx]]; + } + } } +CATCH + +/*! + Find out proc and global index of domain source which domain destination is on demande + \param[in] domainDst Domain destination + \param[in] domainSrc Domain source + \param[in] destGlobalIndexPositionInGrid Relative position of domain corresponds to other element of grid. + \param[out] globalDomainIndexOnProc Global index of domain source on different procs +*/ +void CGenericAlgorithmTransformation::computeExchangeDomainIndex(CDomain* domainDst, + CDomain* domainSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalDomainIndexOnProc) +TRY +{ + CContext* context = CContext::getCurrent(); + CContextClient* client=context->client; + int clientRank = client->clientRank; + int clientSize = client->clientSize; + + int niGlobSrc = domainSrc->ni_glo.getValue(); + size_t globalIndex; + int i_ind, j_ind; + int nIndexSize = (destGlobalIndexPositionInGrid.isEmpty()) ? domainSrc->i_index.numElements() + : destGlobalIndexPositionInGrid.numElements(); + CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank; + globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor())); + + if (destGlobalIndexPositionInGrid.isEmpty()) + { + for (int idx = 0; idx < nIndexSize; ++idx) + { + i_ind=domainSrc->i_index(idx) ; + j_ind=domainSrc->j_index(idx) ; + if (domainSrc->localMask(idx)) + { + globalIndex = i_ind + j_ind * niGlobSrc; + globalIndex2ProcRank[globalIndex].resize(1); + globalIndex2ProcRank[globalIndex][0] = clientRank; + } + } + } + else + { + for (int idx = 0; idx < nIndexSize; ++idx) + { +// if (domainSrc->localMask(idx)) -> not necessairy, mask seem to be included in destGlobalIndexPositionInGrid(idx) (ym) + globalIndex2ProcRank[destGlobalIndexPositionInGrid(idx)].push_back(clientRank); + } + } + CArray globalDomainIndex; + if (destGlobalIndexPositionInGrid.isEmpty()) + { + int niGlobDst = domainDst->ni_glo.getValue(); + globalDomainIndex.resize(domainDst->i_index.numElements()); + nIndexSize = domainDst->i_index.numElements(); -/////////////////////////////////////////////////////////////// -////////// new algorithm for new method ///////// -/////////////////////////////////////////////////////////////// + for (int idx = 0; idx < nIndexSize; ++idx) + { + i_ind=domainDst->i_index(idx) ; + j_ind=domainDst->j_index(idx) ; -shared_ptr CGenericAlgorithmTransformation::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos) + globalDomainIndex(idx) = i_ind + j_ind * niGlobDst; + } + } + else + { + globalDomainIndex.reference(destGlobalIndexPositionInGrid); + } + + CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm); + dhtIndexProcRank.computeIndexInfoMapping(globalDomainIndex); + + std::vector countIndex(clientSize,0); + const CClientClientDHTInt::Index2VectorInfoTypeMap& computedGlobalIndexOnProc = dhtIndexProcRank.getInfoIndexMap(); + CClientClientDHTInt::Index2VectorInfoTypeMap::const_iterator itb = computedGlobalIndexOnProc.begin(), it, + ite = computedGlobalIndexOnProc.end(); + for (it = itb; it != ite; ++it) + { + const std::vector& procList = it->second; + for (int idx = 0; idx < procList.size(); ++idx) ++countIndex[procList[idx]]; + } + + globalDomainIndexOnProc.rehash(std::ceil(clientSize/globalDomainIndexOnProc.max_load_factor())); + for (int idx = 0; idx < clientSize; ++idx) + { + if (0 != countIndex[idx]) + { + globalDomainIndexOnProc[idx].resize(countIndex[idx]); + countIndex[idx] = 0; + } + } + + for (it = itb; it != ite; ++it) + { + const std::vector& procList = it->second; + for (int idx = 0; idx < procList.size(); ++idx) + { + globalDomainIndexOnProc[procList[idx]][countIndex[procList[idx]]] = it->first; + ++countIndex[procList[idx]]; + } + } +} +CATCH + +void CGenericAlgorithmTransformation::computeTransformationMappingNonDistributed(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst, + vector& localSrc, vector& localDst, vector& weight, + int& nlocalIndexDest) +TRY { - auto algo = make_shared(gridSrc, gridDst, pos, shared_from_this()) ; - algo->computeAlgorithm() ; - return algo ; + + CContext* context = CContext::getCurrent(); + CContextClient* client = context->client; + int nbClient = client->clientSize; + + computePositionElements(gridDst, gridSrc); + std::vector scalarListDstP = gridDst->getScalars(); + std::vector axisListDstP = gridDst->getAxis(); + std::vector domainListDstP = gridDst->getDomains(); + CArray axisDomainDstOrder = gridDst->axis_domain_order; + std::vector scalarListSrcP = gridSrc->getScalars(); + std::vector axisListSrcP = gridSrc->getAxis(); + std::vector domainListSrcP = gridSrc->getDomains(); + CArray axisDomainSrcOrder = gridSrc->axis_domain_order; + + int nElement=axisDomainSrcOrder.numElements() ; + int indSrc=1 ; + int indDst=1 ; + vector nIndexSrc(nElement) ; + vector nIndexDst(nElement) ; + vector< CArray* > maskSrc(nElement) ; + vector< CArray* > maskDst(nElement) ; + + int nlocalIndexSrc=1 ; +// int nlocalIndexDest=1 ; + nlocalIndexDest=1 ; + CArray maskScalar(1) ; + maskScalar = true ; + + + for(int i=0 ; ii_index.numElements() ; + maskSrc[i]=&domain->localMask ; + } + else if (1 == dimElement) //axis + { + CAxis* axis=axisListSrcP[elementPositionInGridSrc2AxisPosition_[i]] ; + nIndexSrc[i] = axis->index.numElements() ; + maskSrc[i]=&axis->mask ; + } + else //scalar + { + nIndexSrc[i]=1 ; + maskSrc[i]=&maskScalar ; + } + nlocalIndexSrc=nlocalIndexSrc*nIndexSrc[i] ; + } + + + + int offset=1 ; + for(int i=0 ; ii_index.numElements() ; + CArray& localMask=domain->localMask ; + int nbInd=0 ; + for(int j=0;jlocalMask ; + } + else if (1 == dimElement) //axis + { + CAxis* axis = axisListDstP[elementPositionInGridDst2AxisPosition_[i]] ; + int nIndex=axis->index.numElements() ; + CArray& localMask=axis->mask ; + int nbInd=0 ; + for(int j=0;jmask ; + } + else //scalar + { + nIndexDst[i]=1 ; + maskDst[i]=&maskScalar ; + } + if (i dstLocalInd ; + int dimElement = axisDomainDstOrder(elementPositionInGrid); + if (2 == dimElement) //domain + { + CDomain* domain = domainListDstP[elementPositionInGridDst2DomainPosition_[elementPositionInGrid]] ; + int ni_glo=domain->ni_glo ; + int nj_glo=domain->nj_glo ; + int nindex_glo=ni_glo*nj_glo ; + dstLocalInd.resize(nindex_glo,-1) ; + int nIndex=domain->i_index.numElements() ; + CArray& localMask=domain->localMask ; + int unmaskedInd=0 ; + int globIndex ; + for(int i=0;ij_index(i)*ni_glo+domain->i_index(i) ; + dstLocalInd[globIndex]=unmaskedInd ; + unmaskedInd++ ; + } + } + } + else if (1 == dimElement) //axis + { + CAxis* axis = axisListDstP[elementPositionInGridDst2AxisPosition_[elementPositionInGrid]] ; + int nindex_glo=axis->n_glo ; + dstLocalInd.resize(nindex_glo,-1) ; + int nIndex=axis->index.numElements() ; + CArray& localMask=axis->mask ; // axis mask must include later data_index + int unmaskedInd=0 ; + for(int i=0;iindex(i)]=unmaskedInd ; + unmaskedInd++ ; + } + } + } + else //scalar + { + dstLocalInd.resize(1) ; + dstLocalInd[0]=0 ; + } + + vector > > > dstIndWeight(transformationMapping_.size()) ; + + for(int t=0;tfirst] ; + if (dst!=-1) + { + const vector& srcs=itTransMap->second; + const vector& weights=itTransWeight->second; + for(int i=0;i(dst*offset+t,weights[i])) ; + } + } + } + int srcInd=0 ; + int currentInd ; + int t=0 ; + int srcIndCompressed=0 ; + + nonDistributedrecursiveFunct(nElement-1,true,elementPositionInGrid,maskSrc,maskDst, srcInd, srcIndCompressed, nIndexSrc, t, dstIndWeight, + currentInd,localSrc,localDst,weight); + } +CATCH + + +void CGenericAlgorithmTransformation::nonDistributedrecursiveFunct(int currentPos, bool masked, int elementPositionInGrid, + vector< CArray* >& maskSrc, vector< CArray* >& maskDst, + int& srcInd, int& srcIndCompressed, vector& nIndexSrc, + int& t, vector > > >& dstIndWeight, int currentInd, + vector& localSrc, vector& localDst, vector& weight) +TRY +{ + int masked_ ; + if (currentPos!=elementPositionInGrid) + { + if (currentPos!=0) + { + CArray& mask = *maskSrc[currentPos] ; + + for(int i=0;i& mask = *maskSrc[currentPos] ; + for(int i=0;i0) + { + for(vector >::iterator it = dstIndWeight[t][currentInd].begin(); it!=dstIndWeight[t][currentInd].end(); ++it) + { + localSrc.push_back(srcIndCompressed) ; + localDst.push_back(it->first) ; + weight.push_back(it->second) ; + (it->first)++ ; + } + } + if (t < dstIndWeight.size()-1) t++ ; + srcIndCompressed ++ ; + } + srcInd++ ; + } + } + } + else + { + + if (currentPos!=0) + { + CArray& mask = *maskSrc[currentPos] ; + for(int i=0;i0) + { + for(vector >::iterator it = dstIndWeight[t][i].begin(); it!=dstIndWeight[t][i].end(); ++it) + { + localSrc.push_back(srcIndCompressed) ; + localDst.push_back(it->first) ; + weight.push_back(it->second) ; + (it->first)++ ; + } + } + if (t < dstIndWeight.size()-1) t++ ; + srcIndCompressed ++ ; + } + srcInd++ ; + } + } + } +} +CATCH + +/*! + Compute index mapping between element source and element destination with an auxiliary inputs which determine +position of each mapped index in global index of grid destination. + \param [in] dataAuxInputs auxiliary inputs +*/ +void CGenericAlgorithmTransformation::computeIndexSourceMapping(const std::vector* >& dataAuxInputs) +TRY +{ + computeIndexSourceMapping_(dataAuxInputs); +} +CATCH -CTransformFilter* CGenericAlgorithmTransformation::createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) +std::vector CGenericAlgorithmTransformation::getIdAuxInputs() +TRY { - return new CTransformFilter(gc, 1, algo, detectMissingValues, defaultValue) ; + return idAuxInputs_; } +CATCH -vector CGenericAlgorithmTransformation::getAuxFieldId(void) +CGenericAlgorithmTransformation::AlgoTransType CGenericAlgorithmTransformation::type() +TRY { - return vector() ; + return type_; } +CATCH } diff --git a/xios_2311_src/src/transformation/generic_algorithm_transformation.hpp b/xios_2311_src/src/transformation/generic_algorithm_transformation.hpp index 296d04dd..d5af78a5 100644 --- a/xios_2311_src/src/transformation/generic_algorithm_transformation.hpp +++ b/xios_2311_src/src/transformation/generic_algorithm_transformation.hpp @@ -13,46 +13,163 @@ #include #include "array_new.hpp" #include "client_client_dht_template.hpp" -#include "local_view.hpp" -#include "transform_connector.hpp" -#include "weight_transform_connector.hpp" -namespace xios -{ +namespace xios { class CGrid; class CDomain; class CAxis; class CScalar; - class CGridAlgorithm ; - class CTransformFilter ; - class CGarbageCollector ; /*! \class CGenericAlgorithmTransformation This class defines the interface for all other inherited algorithms class */ -class CGenericAlgorithmTransformation : public std::enable_shared_from_this +class CGenericAlgorithmTransformation { - public : - CGenericAlgorithmTransformation(bool isSource) ; - virtual shared_ptr createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ; - virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr algo, bool detectMissingValues, double defaultValue) ; - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, CArray& dataOut) { abort() ;} //=0 - virtual void apply(int dimBefore, int dimAfter, const CArray& dataIn, const vector>& auxData, CArray& dataOut) { abort() ;} //=0 - virtual bool isGenerateTransformation(void) { return false ;} - virtual StdString getAlgoName() { return "\\nGeneric algorithm transformation";} - virtual bool transformAuxField(int pos) { return true ;} - virtual vector getAuxFieldId(void) ; - protected : - typedef std::unordered_map > TransformationIndexMap; - typedef std::unordered_map > TransformationWeightMap; - - shared_ptr recvElement_ ; - bool isSource_ ; - - public: - shared_ptr getRecvElement(void) { return recvElement_ ;} +public: + enum AlgoTransType { + ELEMENT_GENERATION = 0, + ELEMENT_MODIFICATION_WITHOUT_DATA = 1, + ELEMENT_MODIFICATION_WITH_DATA = 2, + ELEMENT_NO_MODIFICATION_WITH_DATA = 3, + ELEMENT_NO_MODIFICATION_WITHOUT_DATA = 4 + } ; + +public: + // Mapping between global index map of DESTINATION and its local index with pair of global index of SOURCE and weights + typedef std::unordered_map > > > SourceDestinationIndexMap; + +protected: + typedef std::unordered_map GlobalLocalMap; +protected: + typedef std::unordered_map > TransformationIndexMap; + typedef std::unordered_map > TransformationWeightMap; + typedef std::unordered_map > TransformationPositionMap; + +public: + CGenericAlgorithmTransformation(); + + virtual ~CGenericAlgorithmTransformation() {} + + bool isDistributedTransformation(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst) ; + + void computeGlobalSourceIndex(int elementPositionInGrid, + CGrid* gridSrc, + CGrid* gridDst, + SourceDestinationIndexMap& globaIndexWeightFromSrcToDst); + + /*! + Apply a operation on local data. + \param [in] localIndex vector contains local index of local data output and the corresponding weight + \param [in] dataInput Pointer to the first element of data input array (in form of buffer) + \param [in/out] dataOut Array contains local data + \param [in/out] flagInitial vector of boolean to mark the local index already initialized. True means there is a need for initalization + \param [in] ignoreMissingValue don't count missing value in operation if this flag is true + \param [in] firstPass indicate if it is the first time the apply funtion is called for a same transformation, in order to make a clean initialization + */ + virtual void apply(const std::vector >& localIndex, + const double* dataInput, + CArray& dataOut, + std::vector& flagInitial, + bool ignoreMissingValue, bool firstPass); + + virtual StdString getName() {return "Generic Transformation";} + + /*! + * Update whole dataOut (on necessary). + * (Example: Impose a weight, whose value is only known after being applied an operation, on dataOut) + * \param [in/out] dataOut dataOut + */ + virtual void updateData(CArray& dataOut); + + std::vector getIdAuxInputs(); + AlgoTransType type(); + /*! + Compute global index mapping from one element of destination grid to the corresponding element of source grid + */ + void computeIndexSourceMapping(const std::vector* >& dataAuxInputs = std::vector* >()); + void computeTransformationMappingNonDistributed(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst, + vector& localSrc, vector& localDst, vector& weight, int& nbLocalIndexOnGridDest); + void nonDistributedrecursiveFunct(int currentPos, bool masked, int elementPositionInGrid, vector< CArray* >& maskSrc, vector< CArray* >& maskDst, + int& srcInd, int& srcIndCompressed, vector& nIndexSrc, + int& t, vector > > >& dstIndWeight, int currentInd, + vector& localSrc, vector& localDst, vector& weight) ; + +protected: + virtual void computeIndexSourceMapping_(const std::vector* >&) = 0; + + /*! + Compute proc which contains global index of an element + \param[in] globalElementIndex demanding global index of an element of source grid + \param[in] elementType type of source element, 2: domain, 1: axis and 0: scalar + \param[out] globalElementIndexOnProc Proc contains the demanding global index + */ + virtual void computeExchangeGlobalIndex(const CArray& globalElementIndex, + int elementType, + CClientClientDHTInt::Index2VectorInfoTypeMap& globalElementIndexOnProc) = 0; + +protected: + void computeGlobalGridIndexMapping(int elementPositionInGrid, + const std::vector& srcRank, + std::unordered_map > >& src2DstMap, + CGrid* gridDst, + CGrid* gridSrc, + std::vector > >& globalElementIndexOnProc, + SourceDestinationIndexMap& globaIndexWeightFromSrcToDst); + + void computeExchangeDomainIndex(CDomain* domainDst, + CDomain* domainSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalDomainIndexOnProc); + + void computeExchangeAxisIndex(CAxis* axisDst, + CAxis* axisSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalAxisIndexOnProc); + + void computeExchangeScalarIndex(CScalar* scalarDst, + CScalar* scalarSrc, + CArray& destGlobalIndexPositionInGrid, + std::unordered_map >& globalScalarIndexOnProc); + + void computePositionElements(CGrid* dst, CGrid* src); + +protected: + //! indicate if the transformation is performed on a distributed element + bool isDistributed_ ; + //! indicate if the method isDistributedTransformation has been called before + bool isDistributedComputed_ ; + //! Map between global index of destination element and source element + std::vector transformationMapping_; + //! Weight corresponding of source to destination + std::vector transformationWeight_; + //! Map of global index of destination element and corresponding global index of other elements in the same grid + //! By default, one index of an element corresponds to all index of remaining element in the grid. So it's empty + std::vector transformationPosition_; + + //! Id of auxillary inputs which helps doing transformation dynamically + std::vector idAuxInputs_; + AlgoTransType type_; + + std::set indexElementSrc_; + + std::vector > > globalElementIndexOnProc_; + + std::vector procContainSrcElementIdx_; // List of processes containing source index of transformed elements +// std::set procOfNonTransformedElements_; // Processes contain the source index of non-transformed elements + std::set commonProc_; + std::vector< set > procElementList_ ; // List of processes containing source index of elements + + CClientClientDHTInt::Index2VectorInfoTypeMap globalIndexOfTransformedElementOnProc_; + + bool computedProcSrcNonTransformedElement_; // Flag to indicate whether we computed proc containing non transformed elements + + std::map elementPositionInGridSrc2AxisPosition_, elementPositionInGridSrc2DomainPosition_, elementPositionInGridSrc2ScalarPosition_; + std::map elementPositionInGridDst2AxisPosition_, elementPositionInGridDst2DomainPosition_, elementPositionInGridDst2ScalarPosition_; + + bool eliminateRedondantSrc_ ; // flag to indicate if the transformation must select only one global source point for all proc. + // In this case it will choose preferentially the current process }; } diff --git a/xios_2311_src/src/transformation/grid_algorithm.cpp b/xios_2311_src/src/transformation/grid_algorithm.cpp deleted file mode 100755 index 25b43ea1..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "grid_algorithm.hpp" -#include "generic_algorithm_transformation.hpp" - -namespace xios -{ - - CTransformFilter* CGridAlgorithm::createTransformFilter(CGarbageCollector& gc, bool detectMissingValues, double defaultValue) - { - return algorithm_->createTransformFilter(gc, shared_from_this(), detectMissingValues, defaultValue) ; - } - - bool CGridAlgorithm::isGenerateTranformation(void) - { - return algorithm_->isGenerateTransformation() ; - } - - - StdString CGridAlgorithm::getAlgoName() - { - return algorithm_->getAlgoName(); - } -} diff --git a/xios_2311_src/src/transformation/grid_algorithm.hpp b/xios_2311_src/src/transformation/grid_algorithm.hpp deleted file mode 100755 index 287a8b1e..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __XIOS_GRID_ALGORITHM_HPP__ -#define __XIOS_GRID_ALGORITHM_HPP__ - -#include "grid_transform_connector.hpp" -#include -#include "array_new.hpp" -#include "local_view.hpp" - -namespace xios -{ - class CGrid; - class CGenericAlgorithmTransformation ; - - /*! - \class CGenericAlgorithmTransformation - This class defines the interface for all other inherited algorithms class - */ -class CTransformFilter ; -class CGarbageCollector ; - -class CGridAlgorithm : public std::enable_shared_from_this -{ - public: - CGridAlgorithm(shared_ptr algorithm) : algorithm_(algorithm) {} ; - virtual ~CGridAlgorithm() {} ; - virtual void apply(const CArray& dataIn, CArray& dataOut) { abort(); } //=0 - virtual void apply(const CArray& dataIn, const vector>& auxData, CArray& dataOut) { abort(); } //=0 - virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, bool detectMissingValues, double defaultValue) ; - virtual bool isGenerateTranformation(void) ; - virtual StdString getAlgoName() ; - - protected: - shared_ptr algorithm_=nullptr ; -}; - -} -#endif // __XIOS_GRID_ALGORITHM_TRANSFORMATION_HPP__ diff --git a/xios_2311_src/src/transformation/grid_algorithm_generic.cpp b/xios_2311_src/src/transformation/grid_algorithm_generic.cpp deleted file mode 100755 index 89f59f35..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_generic.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "grid_algorithm_generic.hpp" -#include "grid_elements.hpp" -#include "grid_local_view.hpp" -#include "grid.hpp" -#include "algo_types.hpp" -#include "context.hpp" -#include "transform_filter.hpp" - -namespace xios -{ - - CGridAlgorithmGeneric::CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos, shared_ptr algo) - : CGridAlgorithm(algo), gridSrc_(gridSrc), gridDst_(gridDst), pos_(pos) - { - } - - void CGridAlgorithmGeneric::computeAlgorithm(bool eliminateRedondant) - { - shared_ptr gridSrcElements = gridSrc_->getGridLocalElements() ; - shared_ptr gridDstElements = gridDst_->getGridLocalElements() ; - - shared_ptr srcView = gridSrcElements->getView(CElementView::WORKFLOW) ; - shared_ptr dstView = gridDstElements->getView(CElementView::WORKFLOW) ; - MPI_Comm comm = CContext::getCurrent()->getIntraComm() ; - int commSize = CContext::getCurrent()->getIntraCommSize() ; - int commRank = CContext::getCurrent()->getIntraCommRank() ; - - auto& elements = gridSrcElements->getElements() ; - int nElements = elements.size() ; - vector> remoteElements(nElements) ; - vector> remoteViews(nElements) ; - for(int i=0;igetRecvElement() ; - else - { - CArray globalIndexView ; - srcView->getView(i)->getGlobalIndexView(globalIndexView) ; - remoteElements[i] = make_shared(commRank, srcView->getView(i)->getGlobalSize(),globalIndexView) ; - remoteElements[i]->addFullView() ; - if (i>pos_) dimBefore_ *= srcView->getView(i)->getSize() ; - else dimAfter_ *= srcView->getView(i)->getSize() ; - - } - remoteViews[i] = remoteElements[i] -> getView(CElementView::FULL); - } - - gridTransformConnector_ = make_shared(srcView->getViews(), remoteViews, comm ) ; - gridTransformConnector_->computeConnector(eliminateRedondant) ; - - } - - void CGridAlgorithmGeneric::apply(const CArray& dataIn, CArray& dataOut) - { - CArray dataOutTmp ; - gridTransformConnector_->transfer(dataIn, dataOutTmp) ; - algorithm_->apply(dimBefore_, dimAfter_, dataOutTmp, dataOut) ; - } - - void CGridAlgorithmGeneric::apply(const CArray& dataIn, const vector>& auxData, CArray& dataOut) - { - CArray dataOutTmp ; - vector> auxDataOutTmp(auxData.size()) ; - - gridTransformConnector_->transfer(dataIn, dataOutTmp) ; - for (int i=0; itransformAuxField(i)) gridTransformConnector_->transfer(auxData[i], auxDataOutTmp[i]) ; - else auxDataOutTmp[i].reference(auxData[i]) ; - } - - algorithm_->apply(dimBefore_, dimAfter_, dataOutTmp, auxDataOutTmp, dataOut) ; - } - - -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/grid_algorithm_generic.hpp b/xios_2311_src/src/transformation/grid_algorithm_generic.hpp deleted file mode 100755 index 70b7c29b..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_generic.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __XIOS_GRID_ALGORITHM_GENERIC_HPP__ -#define __XIOS_GRID_ALGORITHM_GENERIC_HPP__ - -#include "grid_transform_connector.hpp" -#include -#include "array_new.hpp" -#include "local_view.hpp" -#include "grid_algorithm.hpp" - -namespace xios -{ - class CGrid; - class CGenericAlgorithmTransformation ; - - /*! - \class CGenericAlgorithmTransformation - This class defines the interface for all other inherited algorithms class - */ -class CTransformFilter ; -class CGarbageCollector ; - -class CGridAlgorithmGeneric : public CGridAlgorithm -{ - public: - CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos, shared_ptr algo) ; - virtual ~CGridAlgorithmGeneric() {} ; - - void computeAlgorithm(bool eliminateRedundant=true) ; - virtual void apply(const CArray& dataIn, CArray& dataOut) ; - virtual void apply(const CArray& dataIn, const vector>& auxData, CArray& dataOut) ; - - protected: - - shared_ptr gridTransformConnector_=nullptr ; - CGrid* gridSrc_ = nullptr ; - CGrid* gridDst_ = nullptr ; - int pos_ ; - int dimBefore_=1 ; - int dimAfter_=1 ; - -}; - -} -#endif // __XIOS_GRID_ALGORITHM_GENERIC_HPP__ diff --git a/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.cpp b/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.cpp deleted file mode 100755 index 0cd1a819..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "grid_algorithm_no_data_modification.hpp" - -namespace xios -{ - void CGridAlgorithmNoDataModification::apply(const CArray& dataIn, CArray& dataOut) - { - dataOut.reference(dataIn) ; - } - -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.hpp b/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.hpp deleted file mode 100755 index 10ac4f28..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_no_data_modification.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __XIOS_GRID_ALGORITHM_NO_DATA_MODIFICATION_HPP__ -#define __XIOS_GRID_ALGORITHM_NO_DATA_MODIFICATION_HPP__ - -#include "grid_algorithm.hpp" -namespace xios -{ - class CGrid; - class CGenericAlgorithmTransformation ; - - /*! - \class CGenericAlgorithmTransformation - This class defines the interface for all other inherited algorithms class - */ -class CTransformFilter ; -class CGarbageCollector ; -class CGenericAlgorithmTransformation ; - -class CGridAlgorithmNoDataModification : public CGridAlgorithm -{ - public: - CGridAlgorithmNoDataModification(shared_ptr algo) : CGridAlgorithm(algo) {} - ~CGridAlgorithmNoDataModification(void) {}; - void computeAlgorithm(void) {} ; - virtual void apply(const CArray& dataIn, CArray& dataOut) ; -}; - -} -#endif // __XIOS_GRID_ALGORITHM_NO_DATA_MODIFICATION_HPP__ diff --git a/xios_2311_src/src/transformation/grid_algorithm_reduce.cpp b/xios_2311_src/src/transformation/grid_algorithm_reduce.cpp deleted file mode 100755 index 29950597..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_reduce.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "grid_algorithm_reduce.hpp" -#include "algo_types.hpp" - -namespace xios -{ - - void CGridAlgorithmReduce::apply(const CArray& dataIn, CArray& dataOut) - { - CArray dataOutTmp ; - gridTransformConnector_->transfer(dataIn, dataOutTmp, operator_) ; - algorithm_->apply(dimBefore_, dimAfter_, dataOutTmp, dataOut) ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/grid_algorithm_reduce.hpp b/xios_2311_src/src/transformation/grid_algorithm_reduce.hpp deleted file mode 100755 index 9db6e712..00000000 --- a/xios_2311_src/src/transformation/grid_algorithm_reduce.hpp +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef __XIOS_GRID_ALGORITHM_REDUCE_HPP__ -#define __XIOS_GRID_ALGORITHM_REDUCE_HPP__ - -#include "grid_transform_connector.hpp" -#include -#include "array_new.hpp" -#include "local_view.hpp" -#include "grid_algorithm_generic.hpp" -#include "reduction_types.hpp" - -namespace xios -{ - class CGrid; - class CGenericAlgorithmTransformation ; - - /*! - \class CGenericAlgorithmTransformation - This class defines the interface for all other inherited algorithms class - */ - class CTransformFilter ; - class CGarbageCollector ; - - class CGridAlgorithmReduce : public CGridAlgorithmGeneric - { - public: - CGridAlgorithmReduce(CGrid* gridSrc, CGrid* gridDst, int pos, shared_ptr algo, EReduction op) - : CGridAlgorithmGeneric(gridSrc, gridDst, pos, algo), operator_(op) {} - virtual ~CGridAlgorithmReduce() {} - - virtual void apply(const CArray& dataIn, CArray& dataOut) ; - - protected: - - EReduction operator_ ; // reduction operator to apply - - }; - -} - -#endif // __XIOS_GRID_ALGORITHM_REDUCE_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/transformation/grid_transformation_factory_impl.hpp b/xios_2311_src/src/transformation/grid_transformation_factory_impl.hpp index afc808e6..ef0826bc 100644 --- a/xios_2311_src/src/transformation/grid_transformation_factory_impl.hpp +++ b/xios_2311_src/src/transformation/grid_transformation_factory_impl.hpp @@ -32,7 +32,7 @@ public: CGridTransformationFactory() {} virtual ~CGridTransformationFactory() {} - static shared_ptr createTransformation(ETranformationType transType, bool isSource, + static CGenericAlgorithmTransformation* createTransformation(ETranformationType transType, CGrid* gridDst, CGrid* gridSrc, CTransformation* transformation, int elementPositionInGrid, @@ -44,7 +44,7 @@ public: std::map& elementPositionInGridDst2DomainPosition); public: - typedef shared_ptr (*CreateTransformationCallBack)(bool isSource, CGrid* gridDst, CGrid* gridSrc, + typedef CGenericAlgorithmTransformation* (*CreateTransformationCallBack)(CGrid* gridDst, CGrid* gridSrc, CTransformation* transformation, int elementPositionInGrid, std::map& elementPositionInGridSrc2ScalarPosition, @@ -59,7 +59,6 @@ public: static bool registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn); static bool unregisterTransformation(ETranformationType transType); static bool initializeTransformation_; - static void unregisterAllTransformations(void) ; }; template @@ -68,7 +67,7 @@ template bool CGridTransformationFactory::initializeTransformation_ = false; template -shared_ptr CGridTransformationFactory::createTransformation(ETranformationType transType, bool isSource, +CGenericAlgorithmTransformation* CGridTransformationFactory::createTransformation(ETranformationType transType, CGrid* gridDst, CGrid* gridSrc, CTransformation* transformation, int elementPositionInGrid, @@ -86,7 +85,7 @@ shared_ptr CGridTransformationFactory::creat << "Transformation type " << transType << "doesn't exist. Please define."); } - return (it->second)(isSource, gridDst, gridSrc, transformation, elementPositionInGrid, + return (it->second)(gridDst, gridSrc, transformation, elementPositionInGrid, elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, @@ -98,7 +97,7 @@ shared_ptr CGridTransformationFactory::creat template bool CGridTransformationFactory::registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn) { - if (nullptr == transformationCreationCallBacks_) + if (0 == transformationCreationCallBacks_) transformationCreationCallBacks_ = new CallBackMap(); return (*transformationCreationCallBacks_).insert(make_pair(transType, createFn)).second; @@ -110,16 +109,6 @@ bool CGridTransformationFactory::unregisterTransformation(ETranformationType return (1 == (*transformationCreationCallBacks_).erase(transType)); } -template -void CGridTransformationFactory::unregisterAllTransformations(void) -{ - if (nullptr != transformationCreationCallBacks_) - { - transformationCreationCallBacks_->clear() ; - delete transformationCreationCallBacks_; - } -} } - #endif // __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__ diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp deleted file mode 100755 index 3c5b3604..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/*! - \file scalar_algorithm_extract_scalar.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for extract an axis to a scalar - */ -#include "scalar_algorithm_extract_axis.hpp" -#include "axis.hpp" -#include "scalar.hpp" -#include "extract_axis_to_scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" - -#include "reduction.hpp" - -namespace xios { -shared_ptr CScalarAlgorithmExtractAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector scalarListDestP = gridDst->getScalars(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CExtractAxisToScalar* extractAxis = dynamic_cast (transformation); - int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], extractAxis); -} -CATCH - -bool CScalarAlgorithmExtractAxis::dummyRegistered_ = CScalarAlgorithmExtractAxis::registerTrans(); -bool CScalarAlgorithmExtractAxis::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, create); -} -CATCH - -CScalarAlgorithmExtractAxis::CScalarAlgorithmExtractAxis(bool isSource, CScalar* scalarDestination, CAxis* axisSource, CExtractAxisToScalar* algo) - : CAlgorithmTransformationTransfer(isSource) -TRY -{ - scalarDestination->mask.reset(); - scalarDestination->value.reset(); - scalarDestination->n.reset(); - - algo->checkValid(scalarDestination, axisSource); - pos_ = algo->position; - - scalarDestination->mask.setValue( false ); // scalar do not contain data_index, WF view set looking at mask - scalarDestination->n.setValue( 0 ); - - // ---------------------------- - bool scalarOnThisAxisPiece(false); - CArray sourceGlobalIdx = axisSource->getLocalElement()->getGlobalIndex(); - int indexSize = sourceGlobalIdx.numElements(); - int idxSrc(-1); - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc) == pos_ ) - { - scalarOnThisAxisPiece = true; - idxSrc = countSrc; - } - } - - int idxMin = INT_MAX; - for (int countSrc = 0; countSrc < indexSize ; ++countSrc) - { - if ( sourceGlobalIdx(countSrc) < idxMin ) - idxMin = sourceGlobalIdx(countSrc); - } - - CArray sourceWorkflowIdx = axisSource->getLocalView(CElementView::WORKFLOW)->getIndex(); - int srcWorkflowSize = sourceWorkflowIdx.numElements(); - - - if (scalarOnThisAxisPiece) - { - int iIdxSrc2 = (idxSrc+idxMin)%axisSource->n_glo; - int convert_locally_global_idx = (iIdxSrc2-idxMin) ; - bool concerned_by_WF(false); - for ( int i = 0 ; itransformationMapping_[0]=pos_ ; - scalarDestination->mask.setValue( true ); - scalarDestination->n.setValue( 1 ); - } - - if (axisSource->hasValue) - { - scalarDestination->value = axisSource->value(idxSrc); - } - } - // ---------------------------- - - scalarDestination->checkAttributes() ; - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), scalarDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - - - -} diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp deleted file mode 100755 index 48a84b47..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/*! - \file scalar_algorithm_extract_scalar.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for extract an axis to a scalar - */ -#ifndef __XIOS_SCALAR_ALGORITHM_EXTRACT_AXIS_HPP__ -#define __XIOS_SCALAR_ALGORITHM_EXTRACT_AXIS_HPP__ - -#include "algorithm_transformation_transfer.hpp" -#include "transformation.hpp" - -namespace xios { - -class CScalar; -class CAxis; -class CExtractAxisToScalar; -class CReductionAlgorithm; - -/*! - \class CScalarAlgorithmExtractAxis - Extract a scalar from an axis -*/ -class CScalarAlgorithmExtractAxis : public CAlgorithmTransformationTransfer -{ -public: - CScalarAlgorithmExtractAxis(bool isSource, CScalar* scalarDestination, CAxis* axisSource, CExtractAxisToScalar* algo); - - - virtual ~CScalarAlgorithmExtractAxis() {} ; - - static bool registerTrans(); - virtual StdString getAlgoName() {return "\\nextract_axis";} - -protected: - int pos_; - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_SCALAR_ALGORITHM_EXTRACT_AXIS_HPP__ diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp deleted file mode 100755 index 877f165b..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/*! - \file scalar_algorithm_reduce_scalar.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a scalar - */ -#include "scalar_algorithm_reduce_axis.hpp" -#include "axis.hpp" -#include "scalar.hpp" -#include "reduce_axis_to_scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "reduction.hpp" - -#include "reduction.hpp" - -namespace xios { -shared_ptr CScalarAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector scalarListDestP = gridDst->getScalars(); - std::vector axisListSrcP = gridSrc->getAxis(); - - CReduceAxisToScalar* reduceAxis = dynamic_cast (transformation); - int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid]; - int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis); -} -CATCH - -bool CScalarAlgorithmReduceAxis::dummyRegistered_ = CScalarAlgorithmReduceAxis::registerTrans(); -bool CScalarAlgorithmReduceAxis::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REDUCE_AXIS_TO_SCALAR, create); -} -CATCH - -CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(bool isSource, CScalar* scalarDestination, CAxis* axisSource, CReduceAxisToScalar* algo) - : CAlgorithmTransformationReduce(isSource) -TRY -{ - if (algo->operation.isEmpty()) - ERROR("CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CAxis* axisDestination, CAxis* axisSource, CReduceAxisToScalar* algo)", - << "Operation must be defined." - << "Axis source " <getId() << std::endl - << "Scalar destination " << scalarDestination->getId()); - StdString op; - switch (algo->operation) - { - case CReduceAxisToScalar::operation_attr::sum: - operator_ = EReduction::sum; - break; - case CReduceAxisToScalar::operation_attr::min: - operator_ = EReduction::min; - break; - case CReduceAxisToScalar::operation_attr::max: - operator_ = EReduction::max; - break; - case CReduceAxisToScalar::operation_attr::average: - operator_ = EReduction::average; - break; - default: - ERROR("CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CScalar* scalarDestination, CAxis* axisSource, CReduceAxisToScalar* algo)", - << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl - << "Domain source " <getId() << std::endl - << "Scalar destination " << scalarDestination->getId()); - - } - - bool local=false ; - if (!algo->local.isEmpty()) local=algo->local ; - - auto& transMap = this->transformationMapping_; - - if (local) - { - scalarDestination->n=1 ; // no mask - scalarDestination->mask.reset() ; - - CArray srcGlobalIndex ; - axisSource->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(srcGlobalIndex) ; - size_t nbIdx = srcGlobalIndex.numElements(); - if (nbIdx==0) scalarDestination->n=0 ; - scalarDestination->checkAttributes() ; - - for (size_t idx = 0; idx < nbIdx; ++idx) - { - size_t globalIdx = srcGlobalIndex(idx); - transformationMapping_[0].push_back(globalIdx); - } - - } - else - { - scalarDestination->checkAttributes() ; - - int globalIndexSize = axisSource->getLocalView(CElementView::WORKFLOW)->getGlobalSize(); - CArray dstGlobalIndex ; - scalarDestination->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(dstGlobalIndex) ; - if (dstGlobalIndex.numElements()!=0) - for (int idx = 0; idx < globalIndexSize; ++idx) transformationMapping_[0].push_back(idx); - } - - this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), scalarDestination->getLocalView(CElementView::WORKFLOW)) ; - -} -CATCH - - -CScalarAlgorithmReduceAxis::~CScalarAlgorithmReduceAxis() -TRY -{ -} -CATCH - -} diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp deleted file mode 100755 index 389279e0..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/*! - \file scalar_algorithm_reduce_scalar.hpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce an axis to a scalar - */ -#ifndef __XIOS_SCALAR_ALGORITHM_REDUCE_AXIS_HPP__ -#define __XIOS_SCALAR_ALGORITHM_REDUCE_AXIS_HPP__ - -#include "algorithm_transformation_reduce.hpp" -#include "transformation.hpp" - -namespace xios { - -class CScalar; -class CAxis; -class CReduceAxisToScalar; -class CReductionAlgorithm; - -/*! - \class CScalarAlgorithmReduceAxis - Reducing an axis to a scalar -*/ -class CScalarAlgorithmReduceAxis : public CAlgorithmTransformationReduce -{ -public: - CScalarAlgorithmReduceAxis(bool isSource, CScalar* scalarDestination, CAxis* axisSource, CReduceAxisToScalar* algo); - - - virtual ~CScalarAlgorithmReduceAxis(); - - static bool registerTrans(); - - virtual StdString getAlgoName() {return "\\nreduce_axis";} - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_SCALAR_ALGORITHM_REDUCE_AXIS_HPP__ diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp deleted file mode 100755 index 098b736e..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/*! - \file scalar_algorithm_reduce_domain.cpp - \author Ha NGUYEN - \since 23 June 2016 - \date 23 June 2016 - - \brief Algorithm for reduce a domain to a scalar - */ -#include "scalar_algorithm_reduce_domain.hpp" -#include "domain.hpp" -#include "scalar.hpp" -#include "reduce_domain_to_scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" - -namespace xios { -shared_ptr CScalarAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector scalarListDestP = gridDst->getScalars(); - std::vector domainListSrcP = gridSrc->getDomains(); - - CReduceDomainToScalar* reduceDomain = dynamic_cast (transformation); - int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid]; - int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid]; - - return make_shared(isSource, scalarListDestP[scalarDstIndex], domainListSrcP[domainSrcIndex], reduceDomain); -} -CATCH - -bool CScalarAlgorithmReduceDomain::dummyRegistered_ = CScalarAlgorithmReduceDomain::registerTrans(); -bool CScalarAlgorithmReduceDomain::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, create); -} -CATCH - -CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(bool isSource, CScalar* scalarDestination, CDomain* domainSource, CReduceDomainToScalar* algo) - : CAlgorithmTransformationReduce(isSource), domainSrc_(domainSource) -TRY -{ - algo->checkValid(scalarDestination, domainSource); - - StdString op; - switch (algo->operation) - { - case CReduceDomainToScalar::operation_attr::sum: - operator_ = EReduction::sum; - break; - case CReduceDomainToScalar::operation_attr::min: - operator_ = EReduction::min; - break; - case CReduceDomainToScalar::operation_attr::max: - operator_ = EReduction::max; - break; - case CReduceDomainToScalar::operation_attr::average: - operator_ = EReduction::average; - break; - default: - ERROR("CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(CDomain* domainDestination, CDomain* domainSource, CReduceDomainToScalar* algo)", - << "Operation must be defined." - << "Domain source " <getId() << std::endl - << "Scalar destination " << scalarDestination->getId()); - - } - - bool local=false ; - if (!algo->local.isEmpty()) local=algo->local ; - - auto& transMap = this->transformationMapping_; - - if (local) - { - scalarDestination->n=1 ; // no mask - scalarDestination->mask.reset() ; - - CArray srcGlobalIndex ; - domainSource->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(srcGlobalIndex) ; - size_t nbIdx = srcGlobalIndex.numElements(); - if (nbIdx==0) scalarDestination->n=0 ; - scalarDestination->checkAttributes() ; - - for (size_t idx = 0; idx < nbIdx; ++idx) - { - size_t globalIdx = srcGlobalIndex(idx); - transformationMapping_[0].push_back(globalIdx); - } - - } - else - { - scalarDestination->checkAttributes() ; - - int globalIndexSize = domainSource->getLocalView(CElementView::WORKFLOW)->getGlobalSize(); - CArray dstGlobalIndex ; - scalarDestination->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(dstGlobalIndex) ; - if (dstGlobalIndex.numElements()!=0) - for (int idx = 0; idx < globalIndexSize; ++idx) transformationMapping_[0].push_back(idx); - } - - this->computeAlgorithm(domainSource->getLocalView(CElementView::WORKFLOW), scalarDestination->getLocalView(CElementView::WORKFLOW)) ; - -} -CATCH - - - -CScalarAlgorithmReduceDomain::~CScalarAlgorithmReduceDomain() -TRY -{ -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp deleted file mode 100755 index d7606e5c..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/*! - \file scalar_algorithm_reduce_scalar.hpp - \author Ha NGUYEN - \since 13 Oct 2016 - \date 13 Oct 2016 - - \brief Algorithm for reduce an DOMAIN to a scalar - */ -#ifndef __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__ -#define __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__ - -#include "algorithm_transformation_reduce.hpp" -#include "transformation.hpp" - -namespace xios { - -class CScalar; -class CDomain; -class CReduceDomainToScalar; -class CReductionAlgorithm; - -/*! - \class CScalarAlgorithmReduceDomain - Reducing an DOMAIN to a scalar -*/ -class CScalarAlgorithmReduceDomain : public CAlgorithmTransformationReduce -{ -public: - CScalarAlgorithmReduceDomain(bool isSource, CScalar* scalarDestination, CDomain* domainSource, CReduceDomainToScalar* algo); - - virtual ~CScalarAlgorithmReduceDomain(); - - static bool registerTrans(); - - virtual StdString getAlgoName() {return "\\nreduce_domain";} - -protected: - CDomain* domainSrc_ ; - - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2DOMAINPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2DOMAINPosition, - std::map& elementPositionInGridDst2DomainPosition); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_SCALAR_ALGORITHM_REDUCE_DOMAIN_HPP__ diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp deleted file mode 100755 index 31bf2d1d..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/*! - \file scalar_algorithm_reduce_scalar.cpp - - \brief Algorithm for reduce an scalar to a scalar - */ -#include "scalar_algorithm_reduce_scalar.hpp" -#include "scalar.hpp" -#include "reduce_scalar_to_scalar.hpp" -#include "grid.hpp" -#include "grid_transformation_factory_impl.hpp" -#include "reduction.hpp" -#include "grid_algorithm_reduce.hpp" - - - -namespace xios { -shared_ptr CScalarAlgorithmReduceScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) -TRY -{ - std::vector scalarListDestP = gridDst->getScalars(); - std::vector scalarListSrcP = gridSrc->getScalars(); - - CReduceScalarToScalar* reduceScalar = dynamic_cast (transformation); - int scalarDstIndex = elementPositionInGridDst2ScalarPosition[elementPositionInGrid]; - int scalarSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid]; - - return make_shared(isSource, scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], reduceScalar); -} -CATCH - -bool CScalarAlgorithmReduceScalar::dummyRegistered_ = CScalarAlgorithmReduceScalar::registerTrans(); -bool CScalarAlgorithmReduceScalar::registerTrans() -TRY -{ - return CGridTransformationFactory::registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, create); -} -CATCH - -CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(bool isSource, CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo) - : CAlgorithmTransformationReduce(isSource) -TRY -{ - scalarDestination->checkAttributes() ; - if (algo->operation.isEmpty()) - ERROR("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)", - << "Operation must be defined." - << "Scalar source " <getId() << std::endl - << "Scalar destination " << scalarDestination->getId()); - StdString op; - switch (algo->operation) - { - case CReduceScalarToScalar::operation_attr::sum: - operator_ = EReduction::sum; - break; - case CReduceScalarToScalar::operation_attr::min: - operator_ = EReduction::min; - break; - case CReduceScalarToScalar::operation_attr::max: - operator_ = EReduction::max; - break; - case CReduceScalarToScalar::operation_attr::average: - operator_ = EReduction::average; - break; - default: - ERROR("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)", - << "Operation is wrongly defined. Supported operations: sum, min, max, average." << std::endl - << "Scalar source " <getId() << std::endl - << "Scalar destination " << scalarDestination->getId()); - - } - - auto& transMap = this->transformationMapping_; - - CArray dstGlobalIndex ; - scalarDestination->getLocalView(CElementView::WORKFLOW)->getGlobalIndexView(dstGlobalIndex) ; - size_t nbIdx = dstGlobalIndex.numElements(); - - for (size_t idx = 0; idx < nbIdx; ++idx) - { - size_t globalIdx = dstGlobalIndex(idx); - transMap[globalIdx].resize(1); - transMap[globalIdx][0]=globalIdx ; - } - - this->computeAlgorithm(scalarSource->getLocalView(CElementView::WORKFLOW), scalarDestination->getLocalView(CElementView::WORKFLOW)) ; -} -CATCH - -shared_ptr CScalarAlgorithmReduceScalar::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos) -{ - auto algo=make_shared(gridSrc, gridDst, pos, shared_from_this(), operator_) ; - algo->computeAlgorithm(false) ; - return algo ; -} - -CScalarAlgorithmReduceScalar::~CScalarAlgorithmReduceScalar() -TRY -{ -} -CATCH - - -} diff --git a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp b/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp deleted file mode 100755 index 765385ae..00000000 --- a/xios_2311_src/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/*! - \file scalar_algorithm_reduce_scalar.hpp - \brief Algorithm for reduce an scalar to a scalar - */ -#ifndef __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__ -#define __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__ - -#include "algorithm_transformation_reduce.hpp" -#include "transformation.hpp" - -namespace xios { - -class CScalar; -class CReduceScalarToScalar; -class CReductionAlgorithm; - -/*! - \class CScalarAlgorithmReduceScalar - Reducing an scalar to a scalar -*/ -class CScalarAlgorithmReduceScalar : public CAlgorithmTransformationReduce -{ -public: - CScalarAlgorithmReduceScalar(bool isSource, CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo); - - virtual ~CScalarAlgorithmReduceScalar(); - - static bool registerTrans(); - - virtual StdString getAlgoName() {return "\\nreduce_scalar";} -protected: - - -public: - static shared_ptr create(bool isSource, CGrid* gridDst, CGrid* gridSrc, - CTransformation* transformation, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition); - virtual shared_ptr createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos); - static bool dummyRegistered_; -}; - -} -#endif // __XIOS_SCALAR_ALGORITHM_REDUCE_SCALAR_HPP__ diff --git a/xios_2311_src/src/transformation/transformation.hpp b/xios_2311_src/src/transformation/transformation.hpp deleted file mode 100755 index 66929f0c..00000000 --- a/xios_2311_src/src/transformation/transformation.hpp +++ /dev/null @@ -1,129 +0,0 @@ -#ifndef __XIOS_CTransformation__ -#define __XIOS_CTransformation__ - -#include "xios_spl.hpp" -#include "xml_node.hpp" -#include "transformation_enum.hpp" -#include "exception.hpp" - -namespace xios { - - ///-------------------------------------------------------------- - /*! - \class CTransformation - This class describes inverse_axis in xml file. - */ - class CGenericAlgorithmTransformation; - class CGrid; - - template - class CTransformation - { - public: - typedef typename std::list* > > TransformationMapTypes; - typedef TransformationMapTypes TransMapTypes; - - public : - /// Constructeurs /// - CTransformation(void) {} - virtual void checkValid(T* dest) {} - - std::vector checkAuxInputs() { return checkAuxInputs_(); } - static CTransformation* createTransformation(ETranformationType transType, const StdString& id, xml::CXMLNode* node=0); - static CTransformation* getTransformation(ETranformationType transType, const StdString& id); - - virtual const string& getId(void) = 0 ; - virtual ETranformationType getTransformationType(void)=0; - virtual void inheritFrom(CTransformation* src) = 0 ; - - virtual const string& getId_(void) { ERROR("string Transformation::getId())",<< "unimplemented virtual function for child"); } ; - virtual const string& getName(void) { ERROR("string Transformation::getId())",<< "unimplemented virtual function for child"); } ; - virtual const string& getDefName(void) { ERROR("string Transformation::getId())",<< "unimplemented virtual function for child"); } ; - virtual shared_ptr createAlgorithm(bool isSource, - CGrid* gridDst, CGrid* gridSrc, - int elementPositionInGrid, - std::map& elementPositionInGridSrc2ScalarPosition, - std::map& elementPositionInGridSrc2AxisPosition, - std::map& elementPositionInGridSrc2DomainPosition, - std::map& elementPositionInGridDst2ScalarPosition, - std::map& elementPositionInGridDst2AxisPosition, - std::map& elementPositionInGridDst2DomainPosition) =0 ; - - /// Destructeur /// - public: - virtual ~CTransformation(void) {} - static void unregisterAllTransformations(); - protected: - typedef CTransformation* (*createTransformationCallBack)(const StdString&, xml::CXMLNode*); - typedef CTransformation* (*getIdTransformationCallBack)(const StdString&); - typedef std::map> callBackMap; - static callBackMap* callBacks_; - - static bool registerTransformation(ETranformationType transType, tuple callBackFunctions); - static bool unregisterTransformation(ETranformationType transType); - - - - protected: - virtual std::vector checkAuxInputs_() { return std::vector(); } - - }; // class CTransformation - - template - typename CTransformation::callBackMap* CTransformation::callBacks_ = 0; //CTransformation::CallBackMap(); - - template - CTransformation* CTransformation::createTransformation(ETranformationType transType, const StdString& id, xml::CXMLNode* node) - { - int transTypeInt = transType; - typename callBackMap::const_iterator it = (*callBacks_).find(transType); - if ((*callBacks_).end() == it) - { - ERROR("CTransformation::createTransformation(ETranformationType transType)", - << "Transformation type " << transType - << "doesn't exist. Please define."); - } - return (get<0>(it->second))(id,node); - } - - template - CTransformation* CTransformation::getTransformation(ETranformationType transType, const StdString& id) - { - int transTypeInt = transType; - typename callBackMap::const_iterator it = (*callBacks_).find(transType); - if ((*callBacks_).end() == it) - { - ERROR("CTransformation::getTransformation(ETranformationType transType, const StdString& id)", - << "Transformation type " << transType - << "doesn't exist. Please define."); - } - return (get<1>(it->second))(id); - } - - template - bool CTransformation::registerTransformation(ETranformationType transType, tuple functions) - { - if (0 == callBacks_) callBacks_ = new callBackMap(); - return (* callBacks_).insert(make_pair(transType, functions)).second; - } - - template - bool CTransformation::unregisterTransformation(ETranformationType transType) - { - int transTypeInt = transType; - return (1 == (*callBacks_).erase(transType)); - } - - template - void CTransformation::unregisterAllTransformations(void) - { - if (0 != callBacks_) - { - callBacks_->clear(); - delete callBacks_ ; - } - } - -} // namespace xios - -#endif // __XIOS_CTransformation__ diff --git a/xios_2311_src/src/transformation/transformation_enum.hpp b/xios_2311_src/src/transformation/transformation_enum.hpp deleted file mode 100644 index 152020c9..00000000 --- a/xios_2311_src/src/transformation/transformation_enum.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __XIOS_TRANSFORMATION_ENUM__ -#define __XIOS_TRANSFORMATION_ENUM__ - -namespace xios -{ - /// ////////////////////// Définitions ////////////////////// /// - typedef enum transformation_type - { - TRANS_ZOOM_AXIS = 0, - TRANS_INVERSE_AXIS = 1, - TRANS_INTERPOLATE_AXIS = 2, - TRANS_ZOOM_DOMAIN = 3, - TRANS_INTERPOLATE_DOMAIN = 4, - TRANS_GENERATE_RECTILINEAR_DOMAIN = 5, - TRANS_REDUCE_AXIS_TO_SCALAR = 6, - TRANS_REDUCE_DOMAIN_TO_AXIS = 7, - TRANS_EXTRACT_DOMAIN_TO_AXIS = 8, - TRANS_COMPUTE_CONNECTIVITY_DOMAIN = 9, - TRANS_EXPAND_DOMAIN = 10, - TRANS_EXTRACT_AXIS_TO_SCALAR = 11, - TRANS_REDUCE_DOMAIN_TO_SCALAR = 12, - TRANS_TEMPORAL_SPLITTING = 13, - TRANS_REDUCE_AXIS_TO_AXIS = 14, - TRANS_DUPLICATE_SCALAR_TO_AXIS = 15, - TRANS_REDUCE_SCALAR_TO_SCALAR = 16, - TRANS_REORDER_DOMAIN = 17, - TRANS_EXTRACT_DOMAIN = 18, - TRANS_EXTRACT_AXIS = 19 - } ETranformationType; - -} // namespace xios - -#endif // __XIOS_TRANSFORMATION_ENUM__ diff --git a/xios_2311_src/src/transformation/transformation_path.cpp b/xios_2311_src/src/transformation/transformation_path.cpp deleted file mode 100755 index 2673cd10..00000000 --- a/xios_2311_src/src/transformation/transformation_path.cpp +++ /dev/null @@ -1,163 +0,0 @@ -#include "transformation_path.hpp" - -namespace xios -{ - void CTransformationPaths::mergePaths(const CTransformationPaths& transformationPaths) - { - donePath_ = transformationPaths.donePath_ ; - if (donePath_.empty()) donePath_.push_back(transformationPaths.path_) ; // entry point - - if (get<1>(remainPath_)!="") return ; - - if (!donePath_.empty()) - { - TPath& remotePath = donePath_.back() ; - - // same element type and element id - if (std::get<0>(remotePath)==std::get<0>(path_) && std::get<1>(remotePath)==std::get<1>(path_)) - { - auto it = get<2>(path_).begin() ; - auto remoteIt = get<2>(remotePath).begin() ; - for( ; remoteIt !=get<2>(remotePath).end() ; remoteIt++ ) - { - if (it==get<2>(path_).end() || *it != *remoteIt) break ; - else it++ ; - } - - if (remoteIt==get<2>(remotePath).end()) - { - get<0>(remainPath_) = std::get<0>(path_) ; - get<1>(remainPath_) = std::get<1>(path_) ; - get<2>(remainPath_).insert( get<2>(remainPath_).begin(), it , std::get<2>(path_).end() ) ; - } - else remainPath_ = path_ ; - - } - else remainPath_=path_ ; - } - else - { - remainPath_=path_ ; - } - get<1>(path_).clear() ; - get<2>(path_).clear() ; - } - - void CTransformationPaths::mergePaths(void) - { - CTransformationPaths transformationPath ; - /* TPath newPath = path_ ; - get<2>(newPath).clear() ; - transformationPath.donePath_.push_back(newPath) ; */ - mergePaths(transformationPath) ; - } - - CTransformationPaths CTransformationPaths::getDonePath(void) - { - CTransformationPaths returnDonePath ; - returnDonePath.donePath_ = donePath_ ; - return returnDonePath ; - } - - EElement CTransformationPaths::getNextElementType(void) - { - if (get<1>(remainPath_)=="") return get<0>(donePath_.back()); - else return get<0>(remainPath_) ; - } - - string CTransformationPaths::getNextElementId(void) - { - CTransformationPaths transformationPath = *this ; - transformationPath.removeNextTransform() ; - return transformationPath.getPathsId(transformationPath.donePath_) ; - /* - string sep="/" ; - string doneId=getPathsId(donePath_) ; - if (doneId=="") sep="" ; - TPath next = remainPath_ ; - get<2>(next).erase(++(get<2>(next).begin()),get<2>(next).end()) ; - string remainId=getPathId(next) ; - if (remainId=="") sep="" ; - return doneId+sep+remainId ; - */ - } - - string CTransformationPaths::getNextElementSrcId(void) - { - return getPathsId(donePath_) ; - } - - ETranformationType CTransformationPaths::getNextTransformationType(void) - { - return get<2>(remainPath_).front().first ; - } - - string CTransformationPaths::getNextTransformationId(void) - { - return get<2>(remainPath_).front().second ; - } - - void CTransformationPaths::removeNextTransform(void) - { - if (get<1>(remainPath_)!="") - { - TPath newPath; - get<0>(newPath)=get<0>(remainPath_) ; - get<1>(newPath)=get<1>(remainPath_) ; - if (!get<2>(remainPath_).empty()) get<2>(newPath).push_back(get<2>(remainPath_).front()) ; - if (donePath_.empty()) donePath_.push_back(newPath); - else - { - if (get<0>(donePath_.back())==get<0>(newPath) && get<1>(donePath_.back())==get<1>(newPath)) - get<2>(donePath_.back()).push_back(get<2>(newPath).front()) ; - else donePath_.push_back(newPath); - } - if (!get<2>(newPath).empty()) get<2>(remainPath_).pop_front() ; - if (get<2>(remainPath_).empty()) get<1>(remainPath_)="" ; - } - else - { - if (!get<2>(remainPath_).empty()) - { - get<2>(donePath_.back()).push_back(get<2>(remainPath_).front()) ; - get<2>(remainPath_).pop_front() ; - } - } - } - - - string CTransformationPaths::getPathId(const TPath& path) - { - string id,id1 ; - if (get<1>(path)!="") - { - if (get<0>(path)==EElement::DOMAIN) id="CDomain" ; - if (get<0>(path)==EElement::AXIS) id="CAxis" ; - if (get<0>(path)==EElement::SCALAR) id="CScalar" ; - id=id+":"+get<1>(path) ; - id1="/" ; - } - - for(auto transform : get<2>(path)) - { - - id=id+id1 ; - id=id+to_string(transform.first) ; // not very nice but enough for now. Should be replace by string tranformation name - id=id+":"+transform.second ; - id1="/" ; - } - return id ; - } - - string CTransformationPaths::getPathsId(const list& paths) - { - string id ; - string sep("") ; - for(auto path:paths) - { - id=id+sep+getPathId(path) ; - sep="//" ; - } - return id ; - } -} \ No newline at end of file diff --git a/xios_2311_src/src/transformation/transformation_path.hpp b/xios_2311_src/src/transformation/transformation_path.hpp deleted file mode 100755 index b729a6b3..00000000 --- a/xios_2311_src/src/transformation/transformation_path.hpp +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef __XIOS_TRANSFORMATION_PATH_HPP__ -#define __XIOS_TRANSFORMATION_PATH_HPP__ - -#include "transformation_enum.hpp" -#include "element_type.hpp" -#include "xios_spl.hpp" - -namespace xios -{ - class CTransformationPaths - { - public: - typedef std::tuple>> TPath ; - - private: - TPath path_ ; - std::list donePath_ ; - TPath remainPath_ ; - string getPathId(const TPath& path) ; - string getPathsId(const list& paths) ; - - public: - void addPath(TPath& path) {path_=path;} - void mergePaths(const CTransformationPaths& transformationPath) ; - void mergePaths(void) ; - bool hasTransform(void) { return !std::get<2>(remainPath_).empty();} - bool hasPath(void) { return !std::get<1>(path_).empty() ;} - CTransformationPaths getDonePath(void) ; - - EElement getNextElementType(void); - std::string getNextElementId(void) ; - std::string getNextElementSrcId(void) ; - ETranformationType getNextTransformationType(void) ; - std::string getNextTransformationId(void) ; - void removeNextTransform(void) ; - }; - -} - -#endif // __XIOS_TRANSFORMATION_PATH_HPP__ \ No newline at end of file diff --git a/xios_2311_src/src/type/message.cpp b/xios_2311_src/src/type/message.cpp index 9ddd4eab..475d7e70 100644 --- a/xios_2311_src/src/type/message.cpp +++ b/xios_2311_src/src/type/message.cpp @@ -8,12 +8,6 @@ namespace xios { CMessage::CMessage(void) {} - - CMessage::CMessage(const CMessage& msg) - { - for(auto type : msg.typeList) push(*type) ; - } - CMessage& CMessage::push(const CBaseType& type) { diff --git a/xios_2311_src/src/type/message.hpp b/xios_2311_src/src/type/message.hpp index 220b0337..b7e65988 100644 --- a/xios_2311_src/src/type/message.hpp +++ b/xios_2311_src/src/type/message.hpp @@ -16,8 +16,6 @@ namespace xios public: CMessage(void) ; - CMessage(const CMessage& Msg) ; - list typeList ; virtual bool fromBuffer(CBufferIn& buffer) const; virtual bool toBuffer(CBufferOut& buffer) const; diff --git a/xios_2311_src/src/type/type_decl.cpp b/xios_2311_src/src/type/type_decl.cpp index d10886df..c3c9c214 100644 --- a/xios_2311_src/src/type/type_decl.cpp +++ b/xios_2311_src/src/type/type_decl.cpp @@ -32,16 +32,10 @@ namespace xios template bool operator==(const CType_ref& lhs, const CType_ref& rhs); macro(string) - macro(char) - macro(short) macro(int) - macro(unsigned int) - macro(long) - macro(unsigned long) - macro(long long) - macro(unsigned long long) macro(double) macro(bool) + macro(StdSize) macro(CDate) macro(CDuration) } diff --git a/xios_2311_src/src/type/type_util.hpp b/xios_2311_src/src/type/type_util.hpp index 9ee9adc1..648ceed3 100644 --- a/xios_2311_src/src/type/type_util.hpp +++ b/xios_2311_src/src/type/type_util.hpp @@ -14,10 +14,6 @@ namespace xios class CAxisGroup; class CFile; class CFileGroup; - class CCouplerIn; - class CCouplerInGroup; - class CCouplerOut; - class CCouplerOutGroup; class CContext; class CContextGroup; class CCalendarWrapper; @@ -75,9 +71,7 @@ namespace xios macro(int) macro(unsigned int) macro(long) - macro(long long) macro(unsigned long) - macro(unsigned long long) macro(float) macro(double) macro(long double) @@ -98,10 +92,6 @@ namespace xios macro(CAxisGroup) macro(CFile) macro(CFileGroup) - macro(CCouplerIn) - macro(CCouplerInGroup) - macro(CCouplerOut) - macro(CCouplerOutGroup) macro(CContext) macro(CContextGroup) macro(CCalendarWrapper) diff --git a/xios_2311_src/src/utils.hpp b/xios_2311_src/src/utils.hpp index 4a0520a9..8463cfb8 100644 --- a/xios_2311_src/src/utils.hpp +++ b/xios_2311_src/src/utils.hpp @@ -180,17 +180,10 @@ namespace xios int sizeVec = vec.size(); for(int i = 0; i < sizeVec; ++i) { - hash ^= jenkins_hash(vec[i]) + 0x9e3779b9 + (hash << 6) + (hash >> 2); + hash ^= i + 0x9e3779b9 + (hash << 6) + (hash >> 2); } return hash; } - - static inline size_t hash_combine(size_t seed, const T& value) - { - seed ^= jenkins_hash(value) + 0x9e3779b9 + (seed << 6) + (seed >> 2); - return seed; - } - }; template > @@ -206,11 +199,7 @@ namespace xios { return HashAlgorithm::boost_hash(vec); } - - std::size_t hashCombine(size_t seed, const T& val) - { - return HashAlgorithm::hash_combine(seed, val); - } + private: size_t hash_value(const T& val, Int2Type<0>) { diff --git a/xios_2311_src/src/workflow_graph.cpp b/xios_2311_src/src/workflow_graph.cpp index 87c0cec5..90a624c9 100644 --- a/xios_2311_src/src/workflow_graph.cpp +++ b/xios_2311_src/src/workflow_graph.cpp @@ -1,363 +1,177 @@ #include "workflow_graph.hpp" -#include "cxios.hpp" namespace xios { - std::vector *CWorkflowGraph::vectorOfNodes_ = 0; - std::vector *CWorkflowGraph::vectorOfEdges_ = 0; - std::vector *CWorkflowGraph::vectorOfContexts_ = 0; + std::unordered_map *CWorkflowGraph::mapFilters_ptr_with_info = 0; - std::vector *CWorkflowGraph::vectorOfNodes_srv_ = 0; - std::vector *CWorkflowGraph::vectorOfEdges_srv_ = 0; - std::vector *CWorkflowGraph::vectorOfContexts_srv_ = 0; + std::unordered_map *CWorkflowGraph::mapFieldToFilters_ptr_with_info = 0; - bool CWorkflowGraph::clientGraphBuilt = false; - bool CWorkflowGraph::serverGraphBuilt = false; - bool CWorkflowGraph::build_begin = false; + std::unordered_map *CWorkflowGraph::mapHashFilterID_ptr = 0; + + std::unordered_map *CWorkflowGraph::mapContext_ptr = 0; - std::unordered_map *CWorkflowGraph::mapHashFilterID_ = 0; - std::unordered_map *CWorkflowGraph::mapHashFilterID_srv_ = 0; + vector CWorkflowGraph::filters; + vector CWorkflowGraph::fields; + vector > CWorkflowGraph::fieldsToFilters; + + bool CWorkflowGraph::build_begin = false; CWorkflowGraph::CWorkflowGraph() { } - -//****************************************************** - - void CWorkflowGraph::outputWorkflowGraph_client_stdout() - { - std::cout<<"\n\nbuild workflow graph ..."<size(); i++) - { - std::cout<<"Node["<size(); i++) - { - std::cout<<"Edge["<size(); i++) - { - info(100)<<"Node["<size(); i++) - { - info(100)<<"Edge["<size()); + fieldsToFilters.clear(); + fields.clear(); + for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) + { + filters[it->first]=it->second.filter_name; + } + + // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity) + for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) + { + fieldsToFilters.push_back(make_pair(it->second.from,it->second.to)); + fields.push_back(it->second.field_id + " "+it->second.date.toString()); + } } - else info(100)<<"Server side : no graph information"<; - std::string currentContextId = CContext::getCurrent()->getId(); - - graph_edge_object edge_obj; - edge_obj.from = from; - edge_obj.to = to; - edge_obj.date = packet->date; - edge_obj.timestamp = packet->timestamp; - edge_obj.field = packet->graphPackage->currentField; - edge_obj.show = true; - - if(vectorOfNodes_->at(from).filter_class == 2) // from pass through filter + size_t filterIdx = 0; + filters.resize(mapFilters_ptr_with_info->size()); + fieldsToFilters.clear(); + fields.clear(); + for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) { - edge_obj.label_info = vectorOfNodes_->at(from).label_field_id; - } - - if(vectorOfNodes_->at(to).filter_class == 3) // to temporal filter - { - vectorOfNodes_->at(to).expected_entry_nb++; + // std::cout<<"it->first = "<first<first]=it->second.filter_name; } - for(int i=0; isize(); i++) + // Create a list of fields and their filter connectivity (graph edges and edge-to-node connectivity) + for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) { - if(vectorOfContexts_->at(i) == currentContextId) - { - edge_obj.context = i; - edge_obj.context_id = currentContextId; - break; - } - } - edge_obj.attributes = packet->graphPackage->currentField->recordXiosAttributes(); - - vectorOfEdges_->push_back(edge_obj); - //info(100)<<"****************** Add Edge from "<at(from).filter_filled = true; - } - else - { - if(!vectorOfEdges_srv_) vectorOfEdges_srv_ = new std::vector; - std::string currentContextId = CContext::getCurrent()->getId(); - - graph_edge_object edge_obj; - edge_obj.from = from; - edge_obj.to = to; - edge_obj.date = packet->date; - edge_obj.timestamp = packet->timestamp; - edge_obj.field = packet->graphPackage->currentField; - edge_obj.show = true; - for(int i=0; isize(); i++) - { - if(vectorOfContexts_srv_->at(i) == currentContextId) - { - edge_obj.context = i; - edge_obj.context_id = currentContextId; - break; - } + fieldsToFilters.push_back(make_pair(it->second.from,it->second.to)); + fields.push_back(it->second.field_id + " "+it->second.date.toString()); } - edge_obj.attributes = packet->graphPackage->currentField->recordXiosAttributes(); - - vectorOfEdges_srv_->push_back(edge_obj); - //info(100)<<"****************** Server side : Add Edge from "<at(from).filter_filled = true; - } } CATCH - - void CWorkflowGraph::addNode(StdString filterName, int filterClass, bool filterFilled, int entryNb, CDataPacketPtr packet) + + + void CWorkflowGraph::showStaticWorkflow() TRY { - if(CXios::isClient) - { - //if(vectorOfEdges_&&vectorOfNodes_) outputWorkflowGraph_client_stdout(); - // std::cout<<"Trying to add a node naming "<; - if(!vectorOfContexts_) vectorOfContexts_ = new std::vector; - if(!mapHashFilterID_) mapHashFilterID_ = new std::unordered_map ; - - std::string currentContextId = CContext::getCurrent()->getId(); - if ( std::find(vectorOfContexts_->begin(), vectorOfContexts_->end(), currentContextId) == vectorOfContexts_->end() ) - vectorOfContexts_->push_back(currentContextId); - - - graph_node_object node_obj; - node_obj.filter_name = filterName; - node_obj.filter_class = filterClass; - node_obj.filter_filled = filterFilled; - node_obj.expected_entry_nb = entryNb; - node_obj.date = packet->date; - node_obj.timestamp = packet->timestamp; - - for(int i=0; isize(); i++) - { - if(vectorOfContexts_->at(i) == currentContextId) - { - node_obj.context = i; - node_obj.context_id = currentContextId; - break; - } - } - - node_obj.attributes = packet->graphPackage->currentField->recordXiosAttributes(); + if(mapFilters_ptr_with_info!=0 && !mapFilters_ptr_with_info->empty()) + for (auto it=mapFilters_ptr_with_info->begin(); it != mapFilters_ptr_with_info->end(); it++) + { + std::cout<<"mapFilters_ptr_with_info["<first<<"].filter_name="<second.filter_name<first<<"].filter_class="<second.filter_class<first<<"].filter_fillled="<second.filter_filled<first<<"].expected_entry_nb="<second.expected_entry_nb<first<<"].date="<second.date<first<<"].timestamp="<second.timestamp<first<<"].transform_type="<second.transform_type<empty()) + for (auto it=mapFieldToFilters_ptr_with_info->begin(); it != mapFieldToFilters_ptr_with_info->end(); it++) + { + std::cout<<"mapFieldToFilters_ptr_with_info["<first<<"].from = "<second.from<first<<"].to = "<second.to<first<<"].field_id = "<second.field_id<first<<"].field_name = "<second.field_name<first<<"].date = "<second.date<push_back(node_obj); - } - else - { - if(!vectorOfNodes_srv_) vectorOfNodes_srv_ = new std::vector; - if(!vectorOfContexts_srv_) vectorOfContexts_srv_ = new std::vector; - if(!mapHashFilterID_srv_) mapHashFilterID_srv_ = new std::unordered_map ; - - std::string currentContextId = CContext::getCurrent()->getId(); - if ( std::find(vectorOfContexts_srv_->begin(), vectorOfContexts_srv_->end(), currentContextId) == vectorOfContexts_srv_->end() ) - vectorOfContexts_srv_->push_back(currentContextId); - - graph_node_object node_obj; - node_obj.filter_name = filterName; - node_obj.filter_class = filterClass; - node_obj.filter_filled = filterFilled; - node_obj.expected_entry_nb = entryNb; - node_obj.date = packet->date; - node_obj.timestamp = packet->timestamp; - for(int i=0; isize(); i++) - { - if(vectorOfContexts_srv_->at(i) == currentContextId) - { - node_obj.context = i; - node_obj.context_id = currentContextId; - break; - } - } - node_obj.attributes = packet->graphPackage->currentField->recordXiosAttributes(); - - vectorOfNodes_srv_->push_back(node_obj); } + else std::cout<<"mapFieldToFilters_ptr_with_info empty"<size(); - } - else - { - return !vectorOfNodes_srv_? 0 : vectorOfNodes_srv_->size(); - } + if(!mapContext_ptr) mapContext_ptr = new std::unordered_map; + std::string current_context_id = CContext::getCurrent()->getId(); + std::unordered_map::const_iterator found = mapContext_ptr->find(current_context_id); + if (found == mapContext_ptr->end()) + { + std::pair mypair (current_context_id, mapContext_ptr->size()); + mapContext_ptr->insert(mypair); + } + + (*mapFilters_ptr_with_info)[nodeID].filter_name = filterName; + (*mapFilters_ptr_with_info)[nodeID].filter_class = filterClass; + (*mapFilters_ptr_with_info)[nodeID].filter_filled = filterFilled; + (*mapFilters_ptr_with_info)[nodeID].expected_entry_nb = entry_nb; + (*mapFilters_ptr_with_info)[nodeID].date = packet->date; + (*mapFilters_ptr_with_info)[nodeID].timestamp = packet->timestamp; + (*mapFilters_ptr_with_info)[nodeID].node_context_id = CContext::getCurrent()->getId(); } CATCH - void CWorkflowGraph::outputWorkflowGraph_client() + void CWorkflowGraph::addEdge(int edgeID, int toID, CDataPacketPtr packet) + TRY { - int graph_rank; - MPI_Comm_rank(MPI_COMM_WORLD, &graph_rank); - std::ofstream *outfiles; - - outfiles = new std::ofstream[vectorOfContexts_->size()]; - - for(int ctx=0; ctxsize(); ctx++) - { - StdString graphFileName="graph_data_"+vectorOfContexts_->at(ctx)+"_client_"+to_string(graph_rank)+".json"; - outfiles[ctx].open(graphFileName); - - outfiles[ctx] << "{\"nodes\":["<size(); i++) - { - int ctx = vectorOfNodes_->at(i).context; - if(i!=0) outfiles[ctx] << ","; - outfiles[ctx] << "{\"id\":"<at(i).filter_name<<"\","<at(i).filter_class<<","<at(i).filter_filled)<<","<at(i).context_id<<"\","<at(i).expected_entry_nb<<"\","<at(i).attributes<<"\","<size(); ctx++) - { - outfiles[ctx] << std::endl<<"],"<size(); i++) - { - int ctx = vectorOfEdges_->at(i).context; - if(i!=0) outfiles[ctx] << ","; - outfiles[ctx] << "{\"id\":"<at(i).from<<","<at(i).to<<","<at(i).label_info != "none") - { - if(vectorOfEdges_->at(i).show) outfiles[ctx] << "\"label\":"<<"\""<at(i).label_info<<"\\n"<at(i).date<<"\","<at(i).date<<"\","<at(i).show) outfiles[ctx] << "\"label\":"<<"\""<at(i).field->getId()<<"\\n"<at(i).date<<"\","<at(i).date<<"\","<at(i).context_id<<"\","<at(i).attributes<<"\","<at(i).date<<"\"}"<size(); ctx++) - { - outfiles[ctx] << std::endl<<"]}"<getId(); + (*mapFieldToFilters_ptr_with_info)[edgeID].from = packet->src_filterID; + (*mapFieldToFilters_ptr_with_info)[edgeID].to = toID; + (*mapFieldToFilters_ptr_with_info)[edgeID].field_id = packet->field->getId(); + (*mapFieldToFilters_ptr_with_info)[edgeID].field_name = packet->field->name; + (*mapFieldToFilters_ptr_with_info)[edgeID].grid_id = packet->field->grid->getId(); + (*mapFieldToFilters_ptr_with_info)[edgeID].date = packet->date; + (*mapFieldToFilters_ptr_with_info)[edgeID].timestamp = packet->timestamp; + (*mapFieldToFilters_ptr_with_info)[edgeID].field = packet->field; + (*mapFieldToFilters_ptr_with_info)[edgeID].attributes = packet->field->record4graphXiosAttributes(); + (*mapFieldToFilters_ptr_with_info)[edgeID].edge_context_id = CContext::getCurrent()->getId(); } - - - void CWorkflowGraph::outputWorkflowGraph_server() - { - int graph_rank; - MPI_Comm_rank(MPI_COMM_WORLD, &graph_rank); - std::ofstream *outfiles; + CATCH - outfiles = new std::ofstream[vectorOfContexts_srv_->size()]; - for(int ctx=0; ctxsize(); ctx++) - { - StdString graphFileName="graph_data_"+vectorOfContexts_srv_->at(ctx)+"_client_"+to_string(graph_rank)+".json"; - outfiles[ctx].open(graphFileName); - - outfiles[ctx] << "{\"nodes\":["<size(); i++) - { - int ctx = vectorOfNodes_srv_->at(i).context; - if(i!=0) outfiles[ctx] << ","; - outfiles[ctx] << "{\"id\":"<at(i).filter_name<<"\","<at(i).filter_class<<","<at(i).filter_filled)<<","<at(i).context_id<<"\","<at(i).expected_entry_nb<<"\","<at(i).attributes<<"\","<size(); ctx++) - { - outfiles[ctx] << std::endl<<"],"<size(); i++) - { - int ctx = vectorOfEdges_srv_->at(i).context; - if(i!=0) outfiles[ctx] << ","; - outfiles[ctx] << "{\"id\":"<at(i).from<<","<at(i).to<<","<at(i).show) outfiles[ctx] << "\"label\":"<<"\""<at(i).field->getId()<<"\\n"<at(i).date<<"\","<at(i).date<<"\","<at(i).context_id<<"\","<at(i).attributes<<"\","<at(i).date<<"\"}"<size(); ctx++) - { - outfiles[ctx] << std::endl<<"]}"<; + if(mapFieldToFilters_ptr_with_info==0) mapFieldToFilters_ptr_with_info = new std::unordered_map ; + if(mapHashFilterID_ptr==0) mapHashFilterID_ptr = new std::unordered_map ; } -} + CATCH +} diff --git a/xios_2311_src/src/workflow_graph.hpp b/xios_2311_src/src/workflow_graph.hpp index eeef37dc..a0112289 100644 --- a/xios_2311_src/src/workflow_graph.hpp +++ b/xios_2311_src/src/workflow_graph.hpp @@ -13,10 +13,10 @@ namespace xios { class CField; - struct graph_node_object + struct graph_info_box_node { - StdString filter_name; + StdString filter_name; int filter_class; bool filter_filled; int expected_entry_nb; @@ -29,21 +29,13 @@ namespace xios int filter_tag; int clusterID; int distance; - StdString context_id; - int context; - StdString label_field_id; - bool show; - - - graph_node_object():show(true){} - + StdString node_context_id; }; - struct graph_edge_object + struct graph_info_box_edge { int from; int to; - StdString field_id; StdString field_name; StdString grid_id; @@ -51,16 +43,14 @@ namespace xios Time timestamp; CField *field; StdString attributes; - StdString context_id; - int context; - bool show; - StdString label_info; - - graph_edge_object():show(true), label_info("none"){} + StdString edge_context_id; }; class CWorkflowGraph { + + friend class CGraphviz; + public: CWorkflowGraph(); @@ -68,44 +58,45 @@ namespace xios /*! Map between fields identified by its id and their filters identified by an integer. * It is filled up during reconstruction of a workflow (in function CField::buildFilterGraph()). */ + // static std::unordered_map > *mapFieldToFilters_ptr; + // #pragma omp threadprivate(mapFieldToFilters_ptr) + - static std::vector *vectorOfNodes_; - static std::vector *vectorOfEdges_; - static std::vector *vectorOfContexts_; - static std::vector *vectorOfNodes_srv_; - static std::vector *vectorOfEdges_srv_; - static std::vector *vectorOfContexts_srv_; + static std::unordered_map *mapFilters_ptr_with_info; + + static std::unordered_map *mapFieldToFilters_ptr_with_info; + + static std::unordered_map *mapHashFilterID_ptr; + + static std::unordered_map *mapContext_ptr; - static std::unordered_map *mapHashFilterID_; - static std::unordered_map *mapHashFilterID_srv_; - // these variables are not yet used - static bool clientGraphBuilt; - static bool serverGraphBuilt; static bool build_begin; + static void addNode(int nodeID, StdString filterName, int filter_class, bool filter_filled, int entry_nb, CDataPacketPtr packet); + static void addEdge(int edgeID, int toID, CDataPacketPtr packet); + static void allocNodeEdge(); - static void drawWorkFlowGraph_client(); - static void drawWorkFlowGraph_server(); + private: + //! List of fields marked for visualizing of their workflow + static vector fields; + + //! List of connected filters for fields for visualizing of their workflow + static vector filters; + + //! Fields to filters connectivity + static vector > fieldsToFilters; + + static void buildStaticWorkflow(); + static void buildStaticWorkflow_with_info(); + static void showStaticWorkflow(); - static void addNode(StdString filterName, int filter_class, bool filter_filled, int entry_nb, CDataPacketPtr packet); - static void addEdge(int from, int to, CDataPacketPtr packet); - - // write to file the graph info - static void outputWorkflowGraph_client(); - static void outputWorkflowGraph_server(); - // output on screen the graph info - static void outputWorkflowGraph_client_stdout(); - static void outputWorkflowGraph_server_stdout(); - static int getNodeSize(); }; - } #endif - diff --git a/xios_2311_src/src/xios_spl.hpp b/xios_2311_src/src/xios_spl.hpp index d4c5b8d9..8aa0aea1 100644 --- a/xios_2311_src/src/xios_spl.hpp +++ b/xios_2311_src/src/xios_spl.hpp @@ -7,16 +7,11 @@ #include #include #include + // standard C #include #include - #include -// bug in cmath header => macro collision marco with DOMAIN -#ifdef DOMAIN -#undef DOMAIN -#endif - #include // Conteneurs. @@ -28,8 +23,6 @@ #include #include #include -#include - // Flux. #include #include @@ -38,7 +31,6 @@ /// boost headers /// #include #include - /// Map /// #define xios_map std::map @@ -56,11 +48,9 @@ typedef std::istream StdIStream; typedef std::string StdString; typedef std::size_t StdSize; -typedef unsigned short int ushort; -typedef unsigned int uint; -typedef unsigned long int ulong; -typedef long long int longlong; -typedef unsigned long long int ulonglong; +typedef unsigned short int ushort; +typedef unsigned int uint; +typedef unsigned long int ulong; const size_t stringArrayLen=255 ; @@ -68,6 +58,7 @@ const size_t stringArrayLen=255 ; #include "configure.hpp" #include "log.hpp" using namespace std; -//using namespace boost ; +using namespace boost ; + #endif //__XIOS_SPL__ diff --git a/xios_2311_src/src/xml_parser_decl.cpp b/xios_2311_src/src/xml_parser_decl.cpp index 918dfc31..c4e6698e 100644 --- a/xios_2311_src/src/xml_parser_decl.cpp +++ b/xios_2311_src/src/xml_parser_decl.cpp @@ -17,8 +17,6 @@ namespace xios macro( Grid ) macro( Field ) macro( File ) - macro( CouplerIn ) - macro( CouplerOut ) macro( Variable ) macro( InverseAxis ) macro( ZoomAxis ) diff --git a/xios_2311_src/tools/archive/boost.tar b/xios_2311_src/tools/archive/boost.tar index aba695e6a3faf7d0d0e5613385d820d725e264ae..374a5eaa0fbd6da2fc00a7b054e6aa4b44f79642 100644 GIT binary patch literal 59392000 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

mK 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

7j@zZ-! zh^%DWIzBsn&p+~5j}f@1)I-QWNLI24SYCe8Qv6~X)f8QDyB>|pwqBgJsiZBnvBYro zC>PUcoVJT;H;uLhTUVYiP-Uq%$H9;L7vag#=?cgG2kK7*+XWkWOELG0V2%bfh39C) zqh?l1;^CJkF1RnG8MdJ}giFv3gbiS!nm&6R|@3iZ0Jm=W9b#e7o&PZD zZ2RxV*7o+c7ynmB*4d@~_bK)Z*?%iA!W|5T52NnQ?Ic)+|B+ARlZO9+dBSnJ`4=~k zEy+lnP|UK=GJ9U9hmvI>2LJyYjV9geUX*Y96-xYd)JY8)ahmT>MqT)Yv^ga#?7}8+ zBt90;uAEgA`gYdX=MOj`F&N20u&bz-=h11iad8Ux4MkyTJn z$ZM(tG@y+X#+u9op;#I7k)SqxMq@TZCcF5vuZN@7&0QAgM+WzYg&xQb3!hm+^ z3mm!ebck5h@z~UtGaqvazds??c%Qxy=vV%y!2o997Ho8{E2-7kvXs9FgP~blX@qop zt0B0^nxzSF5_=>U&)7E0nRQtWuzg@C9)~S)GGHWUxh-+Q%R(Si+7Ai7W&`C5; zE)kL%G$%S@dTyE@v6+%S4%(k50zNI7bb1V8M*2^cM4)06SIQb{&vFmVuWC(+;&GOd zR9bDx#gVe4}g>|c*sx2-#54bFWIvIp^x-F_b) zLBWf__a5F@3j!{(gbvPv4$e;s-TwTN064oJyFhNC`vGz>tsXID(l@TsZ%S#XvpvhN zq^uMF`tusUJuJqAyj2Guie-OJDVO;Qq$`gHRqSo2MqI44@>$M%TN1tUTeRqzUsy?# z#hUikqj>Y$DVwbZ&RvnR8X1QlUlrv46#v^B+;rPOfW?E7#+%)){cS$~_w|39wVfsY zt4+d3`#sM8m-(N;TcxxUe1saMToj0_d;&8So)7Pj4xoaf#Lf;xv#VRmD@|G=ZFx56 zTtEe{sK36g(rF96gG~JX^y+|2(}+6`>0|TZ`F``@$K%F_#&H-1Z-UK@R~s8fweTluM;nWrs-q%OQ`fhg8#Y#x*h;US*Lt;b{_k}9vEM(PrqP; zp`pJpE~m4Pg8Uy>;c&pY1=5>J{U(S1*EefbPyVlMR+s!gm7a_If<;L80gx;42U*ho zQr3sHWsIDr&?U5c(+=U>bO!C|9f0#%l0K+fX$Q+u+zuoQOPwvRWsVI9Vi!aU7&tn(9-xncbpl&sHRwms zQ8O^-H-hELw6r2l>l>3P<2vdM?zMy2p3!PIaiN>&D2xnh#6+E@RSK;AS#FjOtpdZq z#=OEt?d1naF?KaY4GPV8qCQ&?4JHI>d6_xgExm<>^~!~S8~@#=1m+0vxAEVBsAZ+4sj@uQ9c-CVaE?{`peK*Jcf%WZdxa5KO~M!R1MU_d$u<6 zYAa&vktFD3u|ZOnDlJD!ntl~6fdRx{%t;(|k(cZ5psnKapE&d7UjBjrIr1OUzxeNe z1b{E`U!P?6Eakt0#wqf%Rl|+7$(PB>8VJHPd1?osOXvsSN}jD90K-ZumnS8)M!2%> zBE07F6^*#vi@`*&d_wlJB9h)Xyo>IxqY++_8C7gy)N+$y$4o;KK(~zH9Ks@Cg9olW+T{5WE$KC!i~{|fhQ4177*}1z{)4VQg+~Jt zs=%~Js`_ZPF0;0t%4)XDx0JyqxDB-p>4ZHqk`2 zjp|15q1y&Oh=M<@1#f|eHwhZ!_NaT^5`_=D&{ub_r-)4mNP|Z(cL2yEpUL2I@Nohy zc@!K|6O^?2gS4(x*EZ;_o)M{YeB?aseG@?QFXs*A=5*LNIQ{_peAeqbuXv0%IIr3D z^?B&(*Cjd|BS+k_!hXf9dk=AM6E|+l;2)68Z)~2wrLqK~!-D?hHF)sdcN_J9-1;MJ zQKM{QssGX%tZl5-);5E8(tuNTC#pe*(ibS+4d6Yc5dI*N2!RKx#8Vl1#>ZB(F0VCP{_&_D;fWc+C+wYQjis&4D;UFFS z1w+Vfw|yH7+U@BmXpM1pBieGDY>pi(`kgT!(OPg3-L*!a#=F6h%nJvZgza{e?2Y_J z5Kn@^VvskZ)*XG=?e$*5LUsqdVH!l;G(odcW&^Upw4m4m&uG%<)Y{#(9w_DsV3{x< zA{?oQB5We##(oJJUt07bXS_q}x;cdtH&_jXLE_zLaQ8+~q1_{;lLKnm9J~RdDc_8H zT(W}L46>h4z+Httc|j3LVm+uJIN3O81$y?nV_8R$v=1ClHZQfiL(miC0P)diZ_pxx zG7SixKtwVcQ$RftxG2pT3)JhjyA!k^8zpzqfhgDW{X)9@w6({^M_y z2{4KAv9^urB-g64BBLr!&l*1;G|rnpkRN684t@q(6Mbuf_L$phbCTtOnRh`f;I>|T z69wfz$7{FjD01vSwe9+jC;!3zvyA^POXiu%)6swI008b|>Hc5NC20TfFhqLO%RGnC zlyaHkVS?{Z63@lf_*PvaxV4ytB5&V7dI<2}F9XdQz-MWtIqxfOaEdz~MgKGHl7lGH zeYFV(o6v8^(;k9=aS!(HTMuJVB?{<8PCWRlrfB{vL@2_^qB~(gYZD!;f`X~uN4odM z15{Ko$B2o*%#D+*aLHkuajL-CajyqAQwT32tQy`NyshK5Pou+}CsZM{aoznPlg6O(m%t`DZGOu8bVOS4l1S(%DMlys#|{kkL?YJ1k3y% zWfpSAvc!?R`+ouczpg`ZV}vk*cO&r8JG@a4Us9ti!F8d&af|NvCxiY&a6afwKi%Td z1ND(Cx0D~s$q!^s1a{m9xD1AzR~R`jkclKy#U+AOa%)+#h4QbZXAs5ThZF0|xLyh- zIR`H$ONXV*cOqI4!KK1?g|Byyqo>T($y;yTLFBFKUJ2y+dyEK}Y-eK`0g>a>EW3ZZ$pv00tF00Vtkq#Z--J`p zN>-0Z0WReN&vlei>n4s*%0VMREVF>{hVP9z5shu2X0L2TBBK6t`&$;Cnb^XQ-2Yx3 zAFD_rImNlaAY~c~Ln-Z=okE{IvK?D4&>mJ|SzqnIcwA?7C|(Vz-Ig4__Xb&5vx@qu z4a%)tDv<)CK)N2PucltBXlG1#qw3h8hpLCSea}k6P z2VRD(=E@8+il@tJk4%9Q@4sI3aT1PiyZ9+KJYDcbhL`jHt8ec3_W!NTW&D2;%FbUV z{`_0U|AV(LI{v@$t{Gnbc!ZyYpJB(@b+nME`LG{a?;qE+8t@U_+j|}VHs4Fs@+@O# zNp|`3KV0SqU*-p&AWV`R7j1vf0$zdER#Hy9wu_$Y2WvkZv}0hp&!wBq+!>g1u`H2y zJ)=X<6ESg^ad%ejbm;h3@-Qu`q@Ox2DU1(~=pkwirQ8CEmz{LLgc?ITH|u%pU;Z7v zF6Y0u7u7;R`L7LlaHM`MD)G6a%aQ+T8!`O9+Sble|L+p#z$;k}9zPC(u@#tiY}Q1I6rr?DpU^>Uw}u!~t#Opf%x9 z-A*RM-SzeRdpiWkt3%_<(+e{*n?*I6q21M1#r$@usM5vcm&RZ_?9C^(9)*LYMKmM z<+>W^Y}5x$SXzhEYxujt>|efjMYO$~0qAlEs_WH2|H?C!fV6Nt@GKK$ZOs;;r|_A$ z;r+@vw*mOAX)1|NFx)hB`n-hAx#W?5B*wFB_BTO+g7-hpD#d>wWwB#(DmI0j`@g<} zU|%=>cdNR&^#3bH+&N3}Md;e#ivs|2W#YR(4&Z^*(YRprfJ(ptPU!2TH3?2yqxKX? z!+%2Z2gHaB`lMM$3;Ue`{FyHw#!z~XgQI?%TnDNmW@PCNkm(ITTD>56*Zl(5H5^^} zI%R}l{}}U!d=Gm7!l*|+d8-1wnQ?|)6ocTp1<(Be10lb@%kJHj(%W}}bBT*|>Ea^Y z4@RFn2*?+T5(FdY9xiNJA3IN!Y_49`O-HBLoPPfG6U3dUF$D^L2!u z;aBe|gG#r(cP^q70Eck%W>>X$0#7@9Foq-Gk4#&QY^_Hx$c00N20jq?a9WA&hSYu$& zrcfr^7?vr*7pRdf|M~zMLIm~g(*)mPJ0!q1e{go#c;DE+H~ z6p@(yVTfw_x`GK>!hDe#nxw@UyK@b4W!oXYMKkmm^cMx=A>2m$OdcH{H{Qd82k$Ur z+gzc&k28mzN)|{sutql)4%wJ-$i_b)n~6pY2S?SOpj2CvWef}f;Jx<;L4>efIIPku zYQ(68aP10P!Se^D>71;st(9I8P?FhJ8aZcJ871g1ut^@Gb{I};SUZIXGjp0MSXT=1Ag7P03t0`t^G`J5DMTULbMmi-r>IJ&Vlm8$9`tsk-*7nl>vjA!5 zE?Go7FKVF>u6dpD%n-^CHO~7_%sosiJ%DlR54;1%Mb0)uZ zWrm8I<7C8I<6*h>i7yZvY2RfWg+bPkN_cX45Wc%QJ`O)LE`q(F`aOJt>suS!Nb{9B zVi~}fujRtcuV!QtANn#0L=s#QCbCb2#fVRnZV#C=>zV@(P{4Ani}S`1G0Ntmm+GuE zQH5m+7EjPD{>4QTR&N#PQm1As+;@KveQ8I-2_=RjOQi~EZGQXWO=acfoB!8DR4b2- z#_+Ek(JA?&FoO{^-rY?uM?|9;C~~>0Xx#i1sbX}>a<+=E5ddLNZSSb$L7`j1hfQ3T z>^FDSa3GSg%`<%@S4e@FTk4_JcuMQiB+U;q^>M?Nz558i6 z`pJ5eoPZI2P8Je>3WK<+M{jQGxvs(4*{c3YdhE!ooeb}&L5HSpLF{-7PfwdSeV9QC+#YpHGV!n(TOG3Qb05Be|16DT~% zR3OwovD({iSk!%#-Oi!!J zqq9?fim8VfKfLe-e<;JUV>N=k*TFUtLMiGYT26OjXId4F*q>1T=8Z2@*F5v&3$IQM z@^YUYp6$Y{P0%vIU8_AB@aACD0L*7CI2(};ogjT4A|y3DKMyV&|A)wzw12eoYvx9P zCb&O&rB@i*=3@2qu9poIt;fZy+q%P|_1yld+ePbffA!j&{ncv}2`HoV-kx0?<19fp zKNGFCH;ay451J=I^`tUX>qN21)&3RBM#BB^+39=!QM4a#ylC|B+ z*hhF2B@XZ85)wwUI2GKLFJ3Q|da=A@SqCI$N5ZQU!@oE>y*xSye>(UP!1T@deVuwE z-qT$eCZ-=@#;BH7-q-bjxF+Xa4z9bCm&kD1>#We7fVZQ{r$RtrY6zS87d)1`mwiRO z2UFH}4($bkZ0o|9_Js|Sa5UC18h|k~Jz}UZMxz+)rS$9gfG|PSA0GxVg2MMqi!ic_ zkg!U?hEVT^oO|pY?lX}8u<>){bQM=i{y%YL#c#QI-+QO48><_*p7;*Ju>x)y&Habq zUq4v=lx(o-HmD>@tL0J+R{aqQBZ@Q5k_~zz6b;74iF1&6F<2{76$`CtmBK)*8nsm* z<4IYJHcWnv`f5OorbHi`Rv%QAplWfre%ik{Jvx1F(wfT+&**(H@5OIas>OZt5Awp0 zY+1)TN>)sVh0Oj+pkpazzoT3Wby6g0jN~Jw5bPk@!Cu(w^uJ+0Ob}%>=uCkR)VjOw z-b}lb2Z946iz119iTpK>{af_k(&|K-lVSY@7Ghghja?fvGJb1ZJFA+uYNhkH#w%-~ z{R=ab<(rPh);MI2hw`nJCg2^n$rsw90F4j5++^<#EgYv zGwW^PlEm&=PC{KIe)B889ARQgq)Fs1UfabOj8~}`kMSxMV>4c*1Wq&43H6#Sc}Tt5 z3qPk``-P9HS8vwS>NX<|EQu?OXG#JJUPEff@o^GQD3W2C;<-4AaK#B`yvs=i%_)RZ z-5gw{uzx0PS*lgBkL7^{kEcYykQC_DKvuvd!Kv2BQH77RxHa+mZbDvU)VlrCCJA+` zfk19}t)9nj2kIPtCtAjn697U z|9VCkWLhHfr-_lVxM`?DmZzS_pv0`8B)mFk2$ce*0#=l_B)UBwGYv@@(TJ%@?H5_p zCarF7ch{Y}v1YOJ6DqIj>M&ojh>}xA2{7?uitVw?lt>G0%v2_RUnliwIy7d7}>1-naN2XzX>KS z@lO0f#~E0i=$cu*#fQvPk?qP1nepW!rs`d~+7#GqoSYx;L*uo7e6)YrxP-Jvql&PD z;ecsTO@t7{N8ke3#lP1Cu&yqwi?Op|bnJCFtI~Wvo5iyB;wVti{-@6dX(Y?`o^Aiz zsBdog_|H=}2hVt~_^ZdVx`~M5Ke{SN(ZodzVw%|pQ^Sl?i~1q<2rrE~LU-2R#gC26mU)Z3FtwQu4LK>t;+1toMPG*Y+?7VeB!aC|r< zy(WtQ`xh7ce_{KUpAmW`K7llMC{0O45%PobM?r7$M6wiaRnKtY&8tPoYMALK4%1I( z7k}QrIJ-JMtl0LdRhaFJy-JH)VR-cRhtW zd9_J~t^{FBzOdq?PoR7X;k8mZ)`+3>oULiXrnZw{p3#&Ogql@Q)w6QtQ~hzGSW4{1 zcpb1LZcD0p%yfn;^WUmULHW=2&!gz$Qet3^{I|KaUG@C`H@7x6m-63JY_tUV?{X3$ zBIp1f2O}ur-y(HSKR9gNM+njM;yjatJ#KI*>Sc<0F-gzHRb?QJe9wP{xEL>P$$bez zn=cevDw1_*0*b>kQ&?%omlB!(`hdVX*i4jW!N&3^d4GC^yHt6Th`*3{qPnpWdFV9M%xImh5%_IvwyGp5eaUvsgWv8 z%UUK(Xv&Ula9iT3L|SU(huAm(--o-MNb~T=AowXl?iCnm@jinm-b3)IKe)$4284Gz zg~Alx8OgKF7?bYOa?WsvX35U!?K}xAGi^`?fTri{*mh@eM{JfQd%*c~FWi#%fHZ!c z?#Ps*jcHd|LX^@zzH9985U;fiope%oN~vBmx|O`9cyoqH11LZvFIK+$aZADH~rEl>W3O1Qq1|I1N%w$cgm zzmMFq!zSfmDbtse=}-3m+z2V<3N%C6;(Th!OgRo$fbzD=m*gPVDEX>TVRO`Tvz;jC zwnFU|j!Gfunfw;DYAC;`GN~6TskC7Eg-c4)*$oRv3qn_i?p*Ypq+^d?gvx!xV$+^s zTu8#wLjxGpjf*CN0p3?Cj_j-Uh_G4? zv<4I0O_4TFW#onL1>{Uz&D0o+o@-wTzmK$0KCjqgpuG`K%wo*;!nFZ5b$(Qp8zXrf zW1QsLNHR8sXY_bu#gs8Xzka^#kzELMp~rn*^Km35lx7frhaT41UUIZ`Jo zXi{>n`IVBVn_n++#;BGvSCjx(a@R<4Q)jUh?N9;#q%Se8ru#*Hcc`7-BZqdWg>zdr zy>g-0mxX%H>>Nv-+BH>#E1BF$_)GsQ+Ak`k&zszWv-(D5DzZw7i0nv|n5F{Sm}>1+ z!obmHiLs+JdAK6FOmdeMinNj+vC3_C*L7|N(@X9ZO(j;yFOMa_T-dEQxoOal=47-g z=*#<;*tOEJtvhybU#O@0+BLW1qtovg4T|}5x0LHO#esPi>B+7VxVcE9l7Lw(Bq4jK{@t9H+ z%1*kOjW>dDXQt1@H~2;CC{0om(%T4=zKn)?C+VZ@xXkw$%F%eoYLQ8gN?*wQsAs2H zbePm+g>0|$AN&q zlv!kXi&4R;Sl!uL*xO`K3A* z_zaRAD}wFs)IqSmRuZfb>!@#tcJv?C`z*-CRg86FCv)MCG!b$|I;qDXaZh`c(IjVKma+E zxO%gSg6CQc0*2#sCqYuB3-)D&W{3}HNEDbspwNhH_3w0XpCc<9I5XA>K57)t8^A#g zMmsz>H-`hH zqhYHczm+^&!7FKy^HaB$)NIDwc|f+YSJH(A1QuhGrk)uz@7~=;;M1e<Qm zPmIVZ?JbtKrtezlwqyF0L`@7W)AF%fnfBkI=+%X%0&4azPTP zOITOO=zgacJy#|bjNTDRvo5Kbg_UK+g;SuQ{7=5K1jRz{@6uz)k^k$P)tLToXKU&I zS(?tXREX>Upx^ucCEj1v;N1u>cVs*Z-j1L$!b@Qp+ckr1PwwF7$5)p*dcWjiam3^1 z#r{z z-EcC})YQfux^Kem8{r!Q)zOrPmMxTIMc1c^dIjP1Hh_-`T7e~wx*)f{D|ipAn*l1QfP&fbX1QU1+jR=ce^BitN52-CUAFvJ-P)|j^8amZE%Uz=A?@5{;_}~q ze=>lp(fOb^{d9{|0}uu4OW|)u#V)e(a)3T#Vp1gd(OYDx$+iF&s1swNwwl*xuqn_^ ztPM_6Dty?#INCo1n5V)TyyOV_wBj&89aG8;Q7BKb`${H=h~w&rn(q$|RQ3u|1S8;| zHNpP8NPi_UHrJUy#RBui6tjo(I;hfkY(+Ec!`x7IU$>RW4^614)TsHRB4s11p#o$9 zX1q(I0@j+Z#HKk6IW=UuR4e6!nbSukXQP#3h61cpWoJg3XSo69HkTTUOBw3KGgT&_ z(Z(16QIjUV7Tn)#c#oM1g94sfM^Gj?|}b=c?Dmz2OZD|l)aC7 zJq!xAnKqi#J$>wcp zdsvxD@UyIXn7W^RJsh=e?pncpYt--dZz{v-_!dw^ z-lv`Jn9*f6tFNj$MUrJ4=hGye-F(g^_?ff0P`no$3O4x;nQ2Z9Q-p}pLj*F;qU3dX z46Rp_{h|l_1BX9C$WsqzNZxyN*~+UHcLUkPFW()V?l;(T!oNXr5kT*uE;wi=*oZI8 z^{N9oFwt2w8VyFffhrk%t9}cK4&TxhB!hbO?&<&}9y#W~mT>F%T{(?Q=zGbltUbQF zODBRpz+Et&RGQTnt7xj-qmS^H0)m&@V-MdWoAS!aw{ZR1kRbOw9gu6rfB$8L_z8Cf z(GXfBABvz_TiXaKAG+fyG-vdR6Y`5$36gq9GVqsxMTYAL-%8r7kvEJLyM`VpIp=tH zeH~IuAJW3wT^E_$#)FTOH7xtO==5>|$JoL8NBCz@1k1W$CF6C-+x6P3b;v9)yJN^b z!v`b$5ULh^dOaF^iu##vl*7hxgJ3t`U7g}xh2(!pPZY+(isi$5t}(*QLFC#hK_10d z%6EZtVl}j-dhwXu61zdG>HuL`3hyKNJfPhqHyu#jIj}0+lL2b+&7~{x7JH-inBeYu zcP)H?8Qa|*kr|McHa{t?GRmF4uo41(l%qAYv_GA^z-R}0Q-K||Qpk3zT&k zmxk<>!D94GrksjdKQyVLl1a#LzK|=Z1Psw~ELn{# z{JbV=MPBV$uGCCC!gDYbni}TG?a8g>8UDwZ}oO%A#lX z9V;R*H?zIw(L+F%v?9VtnEViaI6FG@q5O$vrFvYn!Xj6(Fxvq0RUpb|+}jttLCJQU z`+6P>>3_mf)XQz{oPUZSD8aKtcPjep63It?s0x8(@z8w^~QAPqn_avt8ZU+S=Uu z!$xhhzPXJ5eUj}%3i;pw&zn*A=5|8Cy&G-@pUU3`xBdT3Kkgtz4BDUYz+anw;#}@a zOvvmAV3*xD0Rt{o6(M`^<+%iAmW~-i@aWT#K3NJ~2nFgi=j%aZalJ_@NB{aJAx7O^ zCYIx!A6u(NA#J$fZPbIa&ksp;FLZ9%9GJ-m2TPQX16WE=ld}-y*fGRoJFg*#1>k!CsP`d6opr zvQu(dc79LGVlCGWE!WPkzg+g(y_$FJuzs&fuHUPFhxN18^%bqFfLZ;)P28<72v-2L z7ocYUQMdotOulLCBHQ*KNO`aOYa)-m`Q!UVEHW1Q`;rU&{lD`pA^R*y(x){jqf$r%B`%KjE_ZM>8mb-?6aQm?0NzrlR02#fk)%a4&|Jd=wma z+fjcEmz@t1gtxl3As~qfwXfAC&vU@#lb_*7L|z5QM+c45%SKoYH`XR!CWPHaeldtl z;!%+=GhCVP@9)?6WHQX3SBJ(I<9tO;Zt&460?;d6xst7NG7jT@F#6OQ5h||#vOv255n;p`zKMI1vlrut9?32pfwY^x9KYCGyfRqd7k!T0imXIhJ7QD)cPf5m7AsRu@xC81f!xg4GJhU06PVUuV+>LW-A zOD-a%IqU(14(`UE+b=1QDNbmMiM%5+Jdy_5&Y-?#1+lu%P8&>&}*xlvZc#key z`lezn3`zW)bsjF!fAl|ZR`IF5j9eOwud))X7+##gFp{^VRz^)Y>R_|O6 z+RW@Iiyn)eIrx3%Na8mpPdTiWn{;L$Vz#`lh1Op02y3IrQOVmyxyB1#JmVa#8OFvI zU(^%^pLKS82CsO#Vd@!M?lDh;-l=L*kIHr=Oe)=uS^ZdC5G8p<0^xI(xrH?`t0V~N zt>cgnyg}XCat&%3g==beC5V%d+HgNe6}sj&);`4sC5ffhQ8!5D$w)YTb_Yh55*)_4 zX!%5_^B`B0MLVK_D^z6?Fli5}W|PG?Yq}0SR4scjM)nnN0CzK3-uC>Em4270Z`;Rt zWdDX+EvWw?M7Fzbe~Pep4tu0`Sm9aa=zlhA^;rIg&87aoFnQ-H2u|qbe_G-d*8E+V5f<^#jR^4meg zbbkWjos2a=otzD>G66a=9WK`DRbg&gc%y~kDia_wQ_(sxzSpk}8Y`;4er*lo(SS(> z8mpkrENHA^juv$?;YiH{dA>7FFoCY=Ybhous?0J$L7D;+q#4;0lG{~-9p^*KTD27d zu+^`(?QBDma(XBWZ)~H(@{Us<cm_98AodV@Le?iQqGiSN~COXfq1RvlNQJVkdD{QAecHbsKgi{*55@3BlfqwTZ#=v z)U#L5>O3|Yd(SZq6%~>iFsyEg$vc+>_4}?|LjLa!Zo0ti0QN~K=|4CBTdlU^=YK#( zh^=M*x2M=yOZne6`aVW(HxlTN&)y#$>>r0`dAZ%P3dbdOPxdzlG_5Ek|9}27{$)(^ zNB#jNYcO7$b+Zy8Dirm7V9iVjPJ)nppn1{Q{Q64Nzj(KF#!c&qCUy&6Bi4ZOp8%-q zWA^$Si> zO>l|V{}ep<*X*O<{SS9Ida0GX_~pcM^ncZ@9pC@Aw!N{jy#JqKU$6s|>y5k2|4Ks9 zljeVg+b6>SiaEUs|0&C1h>a#TV1x0iRW2>^>>Ge316mw7AohFO(j%+* zpv;7`#Xh85PaCdc)%fws?kN@ov#x9d%E!A@b$hJ|x&9H?D&L5LKgz7``#HtzPqtTY zeBqwrbm#X`od0V)E&0Dk#z*-xf&Uke|M+nLcU;bc5d7Hf z_W`vQyod*WAQJ%hvW(WqjMg9;T@C<03wTh(zEHvnuu(pBa1R4wC$b=P$S10WjMw+$ z8#nTx!5e1 zjlm*n1MwMNyl==+gJ3PgiS6yCZzA&HKrzlz9)!rBbJ%#_*uOXk!+;Sd)xBYED&7^q-VizF0cdepXRkqSx0q!G$G&H(!nfAS_FxmY?(3|}aF3%eWNAS@6zxx8Qnw%tK z{jFj?NarC)6r9@EqeR90<@B#fmm1GwwifA0Kc1wtOXQicS#^^xzGe5K&uE_)Mcl7 z7L@#+y4&>*{Gg|dK#klCq|fkHLXZ}+C1C=f{o{5&)S(R+IrO}gzu#c`V$ ze43m|QC4>M1!#W*}VIX`ZkG)|kWV^~2%9-&`kQCfrmi)@*BWv6{$ zUb}OVG2&h%1{oF7wh4mCbp|f`A7IDr2t0uvM0As##Ko4DxDA5|;-iOf%jRnUnGs}&7u!{Md|wAp zpNSEsYC9yIEN#UWvI?%?EpQ(}Gl%>j50p0V8%p^)pcN`#bkFB&oAcjan#SD}A{dc5BgX>jsWB*}Nw2~g6s~E0?_Am)nNWKPdsh8G87BrE>Ef`OSc>Dn83h6LK z)=!xi6PeG~ES5xDgp2^x9&uM#1JspBEJ@#Z6qg9os?E1ZT9;9Ta<)dzteUd`EqKJV zE1AL3FNL_AI^t9wR42Y=x=9(%9#^91MXF_r7aEm3n?m=?FeJS7RbFAN36D=UVe}XXuLAK?G23;%=Lw)vA7FntF!h8J?!y$; zZPRxm&NRSp7&b9G%UYsD5)tQ5{YXwP!iw^R1zr;Rfz6BT-6vO<&7gf7wLd9ylzSbL zH43zbsR~*_MlRv-{V~plY-BKE2p=T-6IsP^v2>!&v`yIz0s3aApQHHz@(q?QO4mx1 z8_Py2o%1V7AGrWmgiEkmpaS|;K{W~n4$ z5oaqG4D9GL!niaVK{jTYqL`M~vUiN^9C7|=6VMFw(6A2rC zW2B1hhBEt&4i084?o#43f?TPBr81-OL81fg@H)*|C1Vu9_j_De98rDd{G!A|dEn|` z>q?LyVMw-)h6VvnZA|v7nldejdD2kS*y+EF9YURe^+p&6i39XG#v}0q#GR1EkJK$C zx|R;cQrPg|lEl>QiI5%?P0xd@p8aywg{b*$2Y@ZFaW({(=}o zlFaq==H`Jpi@92nOH?uq0wn|IVUY&}iZ~*4Lb;I!AE^@cxob%VGfzl}4#Mk9Z%g8d zbRY%&l`dit-8n64M*)2xyoF-{gC1@%-Xh23DsmoGtyj45g8E;w|KTRLRV;D!ay1R}>svYBsOxVnq-McBhi8{e~3n8IEg1H<><|s#jM3p@LfXH2anaG z(}Uxy!^UC!rYAFDyqIOgOz_gqvR204p29Y0+3I*Ld{bS_v6~+B`gyH@ir>(umNAa5 zp!{bqJ9qQWw%=?FnpwUResY?irNjpOA?`tIN<&TZ(N1&f&2akWwp5!Lj?SgVmhRg- z)B84QPt9;0Evq~+1&YgmAA1Av^Zt#v1Kw5q>u~H9=?4X2fuoiEx3tt}!+^DQ@U@$7gWffm2V`U2Y}bNUdVs z>p~vj9wf)fQ_fs3`jPJU`aWD1z-{}|e`+tf5Yp%#e;r|{UeKsb(-QU%kzZyRne{v6 z>1Bpp@ct(^#rEeikA7*e zVPE$NTt)#sGlB*HxeVFMH^N8bX%8_ZP#^RVKr$9p5NHA;Qvh?zS5jN9VJE%tEb(fVYUN8`+PofI!cz->(nQEVV2su5ZEf@|XJOJ)* zVY;DN>6y}ahr?bMb0I=d8$yksOK4LXY(MQ5*^dxD7+EzxTc7i#OH?UU+?K zS6rbS&Soo)|EMqhKT59Sti_2ZdHx@B832~L{{WXL#Y_~}{Yy}`qvnq%jporo&V>(M|NcdC z+1S1BX#2;ZvegSgAk(VvtH;x2hd4XcQFk`euvG89*+F8mfybx;8sBt!;NuHVfsK5s z0;5~Ht{2qTW)gbV6ZHG8SCId6{x?W*T@r|}tfi8`_P^BsE?)n8a&_E1IzK*w3b=R@xa>M{eXgeyhF6|@T+?chNBB(X;4G(W zcIAUc^7U)+njMFp=q_)bRxYkt1wYuI6Dn<3mu^HJD$Ojv(tFtpq=^zA(yT-g6&;OncMC+kfjD2=;RC|N7?A|Nkj&|3Ca; zdH+8J{^QBn;nguRz-GB~$<(h&CDU&1)BTf1z@oW0nrY>5!~d`NcQN~~j^$F&VEzBjMy=}0e>=Ww1tjQaIQ_+DS2_(9t zS%-iuk|0F_>5ipNWh^nUbj?*ZW;4jpmG%2;I5M<*WWcF#sgq8`ejqHb)6W>CeNR}h)px`D%Fgh1*Bo5AWv zXYtWHDR~#=+m9rKrdXTZUFXW8)gbt$@njDK2d!L?$t)_Zq{fAKA)7f9K$e%&zf#}U zOzc}#3@j}MrEFi77b|()y`aIQ_b1PF@@i1ZnmOi@(>4u0yZNlKGpOunO0cyKeF!Qou~5kS42n;UV2cyn7Vg z4L(N(#~_PiL%RhS%ML@ie(DeI10W_ccB?`uW8XE#?Ne-Tar`KA7l8}q90K0r7OzOz ztJveiLB}$fLt7$0Bc{*yichk=E7;HJTWv;9+3UHZ6kDWOaIBdW$vRhM_g=#NlGXh3 z*g7k-{;hjKr(6MopVCkJN=wn{rR;&&TP^XQ^g#+WWO^ z$KN8fMPjbJ@#pgaQTiKXg%(qqV^Hq${_?_;dV!s@q!|p8jXET3^P0 zmZ0$LMVI!!r?CGWoT;2FIf@{W(#>#Hy<7M2>OJwGYl_mlFoM5;2nhCK!rTdR>?B;QHC4cVTDKoZ_M^lB zCf}FQ=Ciur{7I?4s`aW!!Y%CLrdAj>4&R3#8W)#GXQwhDxAz&|lZ?hK%k%Rykhi@eHx*bU=9m zD9ee63Z$$i6eB1G<7E$H2+CC%heq`OMkPNPwE(g?qK5jxSEH!a`wHd;PMO7TNr3$$ zLXy%WAhQahB`IkU18%|(=cfBPl7k_jPMLxQekJ4kXtXB2;g>!%K@{2N>xo z%S#MJX{T0_&4_FkPRgf*t&6QGja8!vek2`Qer29gw9;>wOA}iBKoIq9nvkkl z*#_eKL2b{3p3N?hO~|w~GXIBS_Obg1yS7w6YMK3PDhw+twm9L+(jb)L&9rYTG)37x z@gL;TYK<)2o`boTSzqW3=WRvlHE~&x96#@H7S`POb}*XELzkKBn<>oPgsaXCW}gf8 z+#EERwYH|ftPObcpS2l+0i0v{GgsI1pScB(09ox=35gPz#1#3Mlg_2f^a}8a1vI3| zvVgWc0xh6L-GqPIW+&AgEyZayM`LNknxjcgE%$8BPOF*QiBoFkrqbv%bAy^n-T|JS zOtUu>r_=0hr4cH#MLgH($t1){Qb-@40g0G?WV0|M2~+bS{~&pD4$iJ+>jku^>AJ{9 zJpz|(x+p!TsnajLLG=h1(q^2d3u!iuszn=@VmaxZ)T`j&$Nh`&G+8#Q!3vm`gV+7ppfPHAm>_ zS@Xw>v!99s#AH>lOoxvXHAI5Fl}BXMh5n+=*bp!g(xs>Ef#x0I4wyr#-7A#QBFS&W z{g~L-F|p)oOV0VgLB55$g1>6BcHP)_t#Y*?|Alt6B z1H$m~>h%2LEIc^yK8L*rugoxeJsywDWeA5+v__-WgCeo@zUIB1xwTOl4*p5Rv&_}J zZDOYQ^rHutDer*JeJsd2=-ba7^I`-;5b{J?0Tvi_FSxD(?w5b5X}xG%+@Juie>j$J zQHf3Oup6@=#wfHH2L2hDP}v2==k!xrK$AP6Ff48iVQ-^p1lU=}T+Jg@o%RROmv%Iq z_z`+^eA&Y1oESEOu|gy%elM+#bbXic8i?`Bnxq#cmP1b&kydoJ#porii&>+5Q+O#T z3hYsbM}eu*c^-p`ZyMUbsoN#PD2g~$+9|7a62*US#yEr5fwdQ_mm54`)Y*;pKVbz&M;;mRN#V1XLQ~ z^43x`RAwo1Tg+Wn#bOI5v4{f`rS_|I`WW z*Tw(aB1phx{Q_AS>|)?7xDgf1-)hyDua`=4~=mD_&99*+-#gS^WgvT zD#Tui5MOjw7o%$^pzjfaUoPYey(iPJ#yCr`GIR*9M4c2Q{?^>TxY++o$Z2oAOK~OM zXPWpEAA&FaB$Z&#z1Y0U^dat0HxqkOPx8`El$1*Kr*7B+U8kJZIj);TKwF>>s6h37P^J}zLK_u zqXo=-1eZ+W6JIJfp-=pK{d8r&WZ_g?SW=Zt`|a7)>7mEq=ed@jtZqU1k6w`-kz{n? z_P^Q=jD4>BhmgRf{P!e#U>X1Y6!G6G|8L>s4_OuB0o-03xO-63ic?bHW!eXZdbUu9 zH6E`QzV1L9|Hq|$Smu4u*_qV_A+@eX^)|o!-e8;y-v7|I!?`-T83}~Ua#vH1{%5DY zv*q3Y_06qi{-<(8p0RX-{%7g`^W^?N001CIfcF>s$F8FLYvBo_p2(cQF1chu?GUVz zRSA#U?0_B=hEX>lfpIR&=!*D8d0dlOR;y4s-$rdY#C>hh;=tps4AI4JR znZ0~tk5zk5nFg()8WtG0pk+0s9_8X$PbkT|!Ek!r>$b^2swRmx6ZJ$%bAwS1o)lf! zb+a48;r-alHA0%J z`r7wv)nR>wI0mvdqbaroaH>ln94O~33RMW`$10UlsiAw_PZ1CbkVyF&IiEWnkyIHS zP;0smU?sEy@(~#Y9sJZ9o4rIL=%5|Xvs_2kI?J8Yh96?38?hH9rwup!XqFa;Zr1j2 zn#iF>a`>Rrf;ur(8 zgZnORc;Jk{Q>EL(mLK4t-wo+>(mUZ{F#To}Nn{VIbOe6eqefKXa%h5$uW7G4hHZ_x zG<%z#pw0bJ`xa0h<8}V{B|t<*Mbh8{AaBti(DxmU zj>f%~v$Nv9^UkhP#$C+lk}|rFqe(FM=<*e?i!pJOjN4~88r%&g$eT;o4`&fR??tU~ zv>JShq9IitKlIyc!ONGyelPlh!GlYjw#I}0;4|wFE9zzv+GcjF3*p46Kx0^+tjdHZ zmk0C(e^^PWL4Y#b0GnTtDfi&fqC2rQ*rE~pli)SNioQ@?N)J;}y%BnSof^!cxaMrQ z2K$p&X`40sJiColw-?b$9WHwM@^W@T_E_eb2iKi-_*^-C)HvdNi)or8_MIQ+38^h{{3k5*Zg1ud-`&XR zR4cFr(<@7o3ui6hoynbHs11Hnt-Z?G9n9YV?$e*3tU&6S>Ac8xrUe>Od&TiH)Xq*6 zuvXm;n>pjA%M`^XX}dYUlX|UCCn%QJiFAi!3@rdfzC0LoqW4j26cCV1bO+xPh`xh9 zl8O+@mhm`dnkjcq`bw-FEb*zYs~O+S|4!8k>VL@obKRYUgHZ{;A4R7e{SWeg`u3lC zZF76+|D)*lnE%B&2`UJ!I2a5cM%|m+NwCcSZ9dRt$EYf5yMd#QaT9MQK6t z^6RF8q9)fTC3*g>Cja!(W~ZYB$8$;si_HFM84a9-n&~u;BQO^NN*435Oj~nis&qz+ zRet^2-wZs38AmHpWR@Ile5sUmW|{u;Vjnz*Sj4lhr!GSh*5b4C*cUcWP=eI6$Gm)& zZU5>NC@B9?V2x5bmzDr?Er$QS1xSFU|MwH@4$>TY0^nima}?}fk6O2_yYXs} zYYyZle(d)9z#2OlT*^zCsMQWzTIE+ARTwiA$7XNAVkrJocMVE^zCF+<1u z&7<7xq3K04je58}i;rG%Af5UQrYoY4vh@(q^(gwE zX?FxG&lq+gg29gP(RkXUoP0s6ci(y#iz--gQW`@&{FR9h`w9`kQxu&rq&4=$5ZM;S z;{bc0kEP|RAE7S}#skz66bvwa*x7Q0=!y#!G?r$UP zK#R@sNQc8-SJBF+*?3>1A`kb_Oy-N3e<$IgJEH+kUc>1p_6b8U}<3es=x8E)-o=GG1h-Pq5N6OVY2`|df}|8qlx;W|iIF+EI5xzcwj z29OG}@nQesX#WsEaf&wqS4P_}*qH>0lQqh}K7A6aUvWUr9!P(P%l zNa`+VBE82H7xoQq`)Fc%`pv4gv=WRbau@N;BF$c?%DtmpC}SO8GgSf9A{p0 zkE=5B9yi{?KYmJD2KxXcAri(W^fv8_gS0OW)4piPFN!SLK4Pp^17uG>Tn!otOQ&OA zz7-aFULtApc_hBGZ1%T7fr9rx9MzCYXBOvQOf%>GU)|dA@&9T&^=1CAC)ptMB(aP? zmG%k@K-JA)AMd0IoNnGmqZ@M4<8sS4JSQ$}_okgB(@$LFfaUq!(PQMUcoAK*BeC*C)^}!MAB2P@ev%`e*-1hEZ=(pYPGdA} zPl`GNeYNU$EKLgGt}&!x4* z3UyQ%`IYi=e%Mj8)PlZSTwla3yHMGR&>A_4B>j8(HI>4Fi(Z&1v{#ADKpAqVo9aWiwApfr9TpFhsJ`mv;T($>hBMYCD^L{C^FB zZOixHQ|yHQ&)%E2wUH$I!u>a&qS|wAxA0&vi1c@NTQf&BUD+rL`KFQks7P#KXaRJ%_T3+txw5k7VKc;}E29h_uNTg{GHRxR=5b8Ec6o zqpoFr?0kny7Drdc*!@)NDOtioOjvS^>w~NevpaT%uT;ycN9&;19ylG9z>1ir*4Qc;*}oKs)*AoL3vs^R zBM57_fsmffjiyL>MfT0;u8W8?)|tKTZCF|B2>11J<$!ZLv{k%P=QqSg%c7y`$(nTL ze%4aDWG1el;>u|(9s+fvr62h+q;yE9TGY|$i%Pzfrsv3-llwA1m#~TAu=|XTqq8L8bzM4D#R2z@gGy z8HGR0I!XR3?^FWyA1j6be=7U!@3fHr%+#-L=W1w%PEAVw`*c}52wcG&(9KEs3vC&c z*nEFF zUGaAa1X9X>P+`a#N*42p%YWtVvOoTRtGZJz{C^?aHSw?5o8mP97V)1X6wfr-A6}Wm z^V18uL@2>P7}+x3hlBJT99?iURL|>1J8&q2P>6}`Qn~`)>ULy4^Zg;v(W!9E^8D0mg_Q^IbUs^`5zG1$n%| zCCH7x%^rBxaqoNU=p76ODBOcpY6aZvj4^LtZvpbmIZ|2;ok1f7US4;;+lT-fG-Z|< z>P&>!u`5d4J&94IWM!##~Y|h&Lh+Ic`VCjpOs=1n|g~@i}75X0KF$9r9L0*%UX@&N#M6VWQ+dXm?c5 z4WGDTS3uQ@?PH$<^$@bQW?>As!_RJq1ck^nvS1M!Z#aHG{%E{z=P+f zD%9vOx^VSQKK4Y>MQ%sRL$yH7Qqq5!pQnO^vuJ;b{$B+92lT(KYEl1dCRh|=|4SeL zFT(!0i@22Vf`6nb93SK#@^0~zRX}4~2ed{|%5I*2~g$Un6wi2_TM2Wi@%e}-N z#+eZIl!K(?|C~zdJa|;{lp`eZ|8iwBp#N33Hw*rs8op0y7{dQA$34_T{@iQdI-NTh z>5zMcV$hdx9zBMX_kLTH_s)AO%vtTP_W4Ea@*riYm&oP@ckek5?}_UUNA0~mRN}rJ z^dIbz(ZIvIsnM|WKd35Zw15_t?uuZ)+(5)q)hClO#G^xzJbV+HUx*OHM93PLj_ZlU znpSZmn?={)1=y4Lf+~ZoS?}NBe#P>pD4K0aPp0Bq4g28p-|W+a!^?APZSmD zp#r$7cEV-RZ=EI;#>E1DMkha0$r0&i<-2q(9&-H^_s*|b!S!f} z&sDY6K0`;hzQ4DKJu6vhgsjFtaorL_9->|23Ti^qQf>VdpGsqNX9nj~JEOG0H_bf>${ z)?W}tmC3*eHl2PCb#A;g;iq{5U8OW(&}~f$bnJtgCs1uEP)!WYs*{0L3LyRV4?Sr* zaML`DRRtz>`k#6jw%KWac>xv$6dsZ=fa^l2vO=44%PF#HEH5`zNQ*A_-Kq^eUB?ezE5n~;<04cH_O5p0GUg9m4glDbBg87?2k_a&GC z3^tl-xJtg^DmjPS$~W9r&f%*0hO6crZad#_+c}5Z$v50ia5zyBO<_CzCc!^O$hSX2 zcB7lyg|uJY+}tMjGFzd{ZmjS!fu1HbT145vovkh0OKrAR0=fBJmNPZU1Ec$zz-iEZ zO#sz(UlYJ%-PZ(=RQF|Ipm%epg>+Q?&%_vsMd~ZxpW*mKUePr{>T&Ko-Ia)HYqD+V z->$~BN?}aCmq2^7zXS@J{Uy-B>@R_uWq%1YDd{B*1<9+Znk3mu{2Fy)g-OE@njD6# zL!^YdzPA_6U5(0;zKOB1gp2+tyFp1H3-b6v%^GaDki-pFZTV~(%CgSCJ+5!A^%rSq zdWxm7cy}Hlkjegk1N%}o*FP^gDgJ9~Ys(k^y;Ujdzt09+K>mvQKVc3@xaQ>#`|1~dw+}!k5ZY}-ZzwP~* z{<*{Lr~TGf)TUe?e_aiG4^=ep9<6%E`D&GZAL7@ayTjHxGKQV@*!M#DmtTHaqk66w zuG#$hwU1weZymhHf35#cfBm^NTpy3d>(?E6n?2P<403D?GK?qQ5M)jlJ%hQVar`0i z9_hHoN&exd-W1}UxpyY9W2bdA8_My9d?zjj&TJ0iXJl2ydA+$Ms)^n?@PLLpynP*$ zJzF&l3!DZd4nE*Mn1jOxR66BT-VgE7W0F^hiEFkvH`BQ5B>KJ%y3e@FN~evC8*!Dj znoRs#gUoLMG{|+rH7Na_7{cS?x9!uv)-M06jxe;?RmvDG|7?XmOQu5|*e29t+$~V2 zd$($K?Qa*C9O4#iA#RDj{Bm&exn^J1KGrU4XNPn}DuojYph~o>&383>-+>B?){H%YM0^pmfZE(5PE*Eok}yEG!#63?#2Ngj zB-8X6ce>+0l!hL4?$HPlphIjuy0~UX29{>@LES6A$Qtg4zk@(djuQk`=pwu*lZ-Op z7);(RkL%(2BKZD8PxVfrNYqv1w%Pm2ZNmyKqiiovp+D%{(4Cg*Z8EKXcr39Ce_H!ib#oU+aHQD5vd93S zJ8e*f+B*E>AIoK04^~ZutJPxHEJTao;(B&TU3Uh6H&uD!BG@DAfi@7}he|LU(kAc0 z_7n`L5eLVQTbP2{OBIZQ3ur|oCa$3s9}YQQM8@#;2llPgMYbPJ|6kHfC&NfEbIw)IB)AO{WFSr0TRv!&T%!C()nM$zziH*zY!N%(n+Znkmh8r?+0Aq2Bk-1LV z0&-ZkZV_+@+M*(H)c2?#f&F{v>yVn@UN-t=6?r6=%HW{rA-g&LUcz%XA}9Dd?P}SB z3;yni%F}#Gs!Qy5`F)8Q@ZO%}0lZ3lySlnY>%ecI-EdUG0%AsY$Mr1%OBV0DK{5B^ zt8S;2ysOfK%h6K;&#}McpC$8nnE^~2EUx=fgvGW$oL`QcP?St(%FMJy5`OCn)gwWZL0Ni4Wl&omSUf~AexkRZj~Wt# znMv%?NNTgJn1ict_4eT(#j36ROJ5a+Qes5FDY(yi^YG^F=5CdVjG~lorh{iOa?0d) zuN{3NQc4#Bpd5Zr-t3L{hkbJ5_j}z(MLTI-5*)%aAF>cPeSuw5g79g|r%$c6zz_oJ zSUMGVrX2uBwZjw3zO%V68H|9V&p+}|g!iN)&LX;MxQ-Hrm+XvY!-O$s&}_84yX`+tVwOovd1}FU|G!#IFnsP%d7D1pWJ!uoLj< z>@#COSW1Rtu|uwBLW7Vqanow)^I-iEVoM8kQxs~b)58Y^(i3rF+=aqNrrpPF1NaV6 zBf}w`4ctXQfxP3JTZ^}MWkoX1X75poQFLyA@wDgR_~va|lJJ*VHn@a9Zgqy2v%RAd zdNK~hgV273PfWr=ogx7M7te@Qhn^jcTVAkOg5VMqV>;2tM)yKj#xbdnn5m$|`rH7$ z)eiaymmv?x&6F%sznggGq(Vn8h+{{eh|7Aq@GEehV=EuJT}WUUUArecTy-nGNGB9Bq6@&19?7<1<`^YNPEA!i-Ep6r?2ll($brGLhg&NFYS?y*-I2 zJ^~|_XVYbn`^MVemlWk$vo`Zm9}X7xB2<@n9fVp*{qoIOPVFf(<3Mwl7HU1iw!!Ww z#-@(+HCH0=d`YqPmFl)vqee2>;R!?yRr13_OWiy(&)2_R*iC3OQnqN|3KmjaUJD(N zikkAJJYBl7r;E#sz}UI|l(Q0xMl$P)Vu|p{bn4@|o165%OO~=*sN+pW_ZlG}Gf|w+m_vdJO?@=oSdpk`FHQ>D=5B zA)&d{dQH}mXas?PHd<1}cU2omr<5C)oBRj=R(4PbmGy_~<3-kTCFWEmJ3poe|vIUK(U zknyP&7o!Wnjas)rN@-a0sBl9*^yr}UaN9vEq>S)x;=(gCDRxx|{NcRM%eqQ&oH9TE zk(57N%1V$#y%P-b*6>a>ca0KCp-Kv7OH?(Kx%q9H9_D5+u}Sbpm0-g;FGk-kgCs+z zVU?%rPXG3|a@h_T92qCXs{L`g#OZVlSb$+@IV2?`GeV`}_rMjnNs!j8>`8OCHG!tUs1dRwUHm)ub{g~}R z8o_sF| zkR<5z#&_%4$SJ*oN<~qkb|%UxWbGUz3o^D#Jk!p|rISw^HiLBPHI7GWY z97FVJG7pF06f&a{hHy(dI`PR5BAo^jQnN(^(nM$!Y^}C`lNDs$`YVKE_S#?#9hOVQ z6!8!=WY`&vrS<@a2Taesp3^1SSeaOWXw5Dzx`7sedmr)n2A(4LbXfoovqJ==t2I_k z>FeX+N9pvubgq+?ell6Z*0BuC>p5gr0w2qIYw$O)yTRIc9oUA~8}Fs1ES7W^!YxX~ zCG&zpxV=WHbY*;Zi8ky-IXDH2*_vX9oS^`%Nk>%lsi2E;r*|j<=F@of!Y$3$iU(yDZ#qm4k*)Kwz0VZH_r=A)98N7|T#Ig-uRMX2$nQcZ4b>vfKr& zB6QR)-iPL(2lIZ39Q}yii^%P*R;tMDMK8JXjH7xL8N)K6Q~kq9yd!vBzk^0u?vP>mJ zDh9{ViSGM&PshHgpgbxy>1m;PDu;OREKu8vCI~>|{~|C+$LN}INbD#!zko*=fl1rt z34tiZ;lT}tS_DW5F4`Rv8v6YxaG4Flpas#G;l#p{v2?aMj0T-=oo1IDfD|z)|E$PA zRe-oXY7TCkQ5@FTL#K=Bmp@*NH-P{+MVHj6Yf?DsC9s}#NB@s2ij8)S411EA*6AKBc=&c72^%T zPk7zS3l)ASHSzQHH6RE@Nk&W23E04%Wmh73UDMg?G?Q`Ct<3ZGnvcu()gG zssrDF{Zlxl`_^@bESXjxVZ!S0^LmFAr%E9XT!X01g^Ca-0c$6nPT1H&|)Vk5k#i2w3-#Z=MQRE=Y{4?9=Sv2FJhe z-NGB1LX)noH+Mg4kA&~T(X{&2RlKJ#fC{aQ>N*!t1UM!SY_s3VgFM*#Q~>W8W{Tj~ zlb_Z;_y(BPhJ+5Izl_4$JZD*~KzA+RrvHo@Dc=cE8$X53@pe6hZ3!D75lp!@#5a=q zGjc10r##P4@%tcz4^rZ_q;;6gm$Z_jG@KOti4+>m!CleZ%br|KDjlN|I+u_2c{?Y0 zG9BY}p__euiuO%;l>wahuJ!3F(AZAdX;a-WA5BU<7EMd))rnX)!_|bGVDH{YF+Xi_ zHJ>%XQsEEYHM=JY!Jp2}pxLF&7uYO&BTCgobfnftA}li=G24`zSzW<>W)L5x(qixf z_nfNKRcuS%DGJKtO_(i-^~2|>ryxu_5hdV)HQT)Xd8-U1RR&34|AjPb8ybWS^$2k> zT(uynckw*F{tL>#?3R7?zqZT8{U7OI`_xwCM)VZ`yKMG4Rvjt1ef&m=mMu<=K$s?M zY;*_erUXk;6^G-i-(ff;U6CTlK2ZLRRqtPq;GA)+lTOR&p(7sl zi>L`;mDh2{WT}qi07Q1d!HKvpO45Ms0xujN*3RlRyKHZ+kG_v6^|{r*f3%t-?&5Yd zy5HN_cz7^xarV8lsxl`m8Y1+Kr`P?${S+SN3o8wd<%a`I9eK65Y~u3x3$9K26*n#6 zBIuLPM|AUqFzmQd5Q%SKkm!08po$X~b%U97Wl^%rAbmL$>C|t13m=e-J?eTB&q|C^5a2{W_kTrJhcLu5wb=~aaBHQT zl^u5b*7n=7$h9ITONgzr{`u?zcb%X<1niyf$W?;tx+pg*qP-`-i(jc!x8hz%xEG8} zXwg5QI}MpwtpbD*s*9_JMC@o6p$!8I$xxj;Dmt0i*D)t8QPM1Okp@V#g#lAU9Eg}w zEKY@tC-&uhM-d&ok2|R0mm?}Bv!B)xBJp}sKPxMqP!JKZih$O;tIo~1KZfrR3|Cak zpo}dt-GT1{7@h|!EnGbVdfR=3lM!tm5EI*WzI7T7hxyP6;*L*`(HS5MwEQqMBoR(L6>uJ=LQ!i_KHJs5up9ONk&026?);i-^Ei< z^A*l#gB2K2zX)4Fr0*m3IB?KC?OId8SOg!drBW1(2OujKHNoOBbOOBKi4>ICMDwl$a`G|H$${dBh^t=6=M@*`I zXyFROI)u`8bD)ZHaBBAFqeDCa4;{Rb=6uo$B<8QI98mRuut%_yqvA{tm0C#J1+(P} zI*6>PAEKfLLs#rHzQP!5E8g$8EDzeQTQ!6*<3wSGcZkSA6g6!R!i$i_hnORGF2It% zQjG?cDoM>S<0cCEyrC(;+S;Pn>tBh`^*y{E_TK?=BieY%dA4-TPib{UIWdP8>S5p# zal~u?k3hk<>)RXU>PB^A3*p~LrDG4okV2YZpoSll5*tZs@3cB2Ai4sVhRF~h{|FR$ zCFng6$#=<6=>vm}YNUwkBrRMsM9E{X^l-F3x9b%JZt5C4_TD;_J(K{sH`f0hWA<7A zI%xks9**t+!&PePAMCYN!j`OxevW)Ikq`MjF3>{>!E%F0y|Lbb0D+iF^25l1GAOM!P*6DxcjVed?1I#1n8ypT6 zf$i*+!j|B82hNb*cH$7|YY6Ne0M|GpRk(L}Tx{qS7>7h4jec}sDa@aTP_GZI@x2mN zBTnGDMWCcPi84tFo$(dsapyEq)T(t0zE6W+Iim*$r^kajL|4TZf-n*?(+iTh05d^F z+?3r8kzA&SsE9=J^w1euB?-&Q#@0qZb?z{KAOxSA~r+Z8&x%A ze5AgOMS4exq%aaOE!4aXj^tZT)&2@#vQJSNi@yXuuAuH4_yD*w zWt`Ja(4ejU7y*>Bh8Bn{1^P&SMnqS44pilnkK~n=mE&vch%lVEqExl1?982o>7Y+k zk0*o`2o#QQE-6}ZDGKJq%k(0#0BJZJIRcc(~p>2cekX9i*0__awTI zF=#CdSEzEh~45@}4&NlLsUiJE~utf(DW3U<5%mj_g=7NM7D<-Vt z)e^QrY@p##;3<@!F+_5}fXM3#b&L`gC=Ni>Kp>GHfgTtmna}c^v~Y!0u>y{jtwRAZX^i7ahRN_UBB|o_rq69}!0A#@~l$2%& ziT;D5#55x~B($rPf=##IyYXi08oE4PlPbi<*a-<~>?b;DRMSn`xXEO!0O+O(gkxQZ zX2F&JDl%Rvpu)Rb7J2KDKN>kc^4SxkOnWadpHTl4O2H5YH&&ccT7+>67C^{xT!)Ym z6+9b=4|Nd~j6y^R;ppXYuL~AQq6g~FLY}&H?kqatB2q{WB32^{8ywW@s7Z`UDSY49 zhgIuG7%1cx#WXz94S8s(_K_;We@DfAxqw`woGcgjY5w}E&>#|)R>iKHXqfPdL=*E( z6_P}6x}yb8O-ZhwaEh9G;Gl186TS|1Sy=D59krE!)PxNxD`~8*yiYJHft|@pfT~QO zYtk}r48nRrL&W$-_?!#I^!ONvq^3A9m~P2>do}2Pg%lu_U{BG%r<|p%uq$cD5l$$W zH0Cp+ny33muh%}jR(d~OaK{cJkJ0wS<@tZr&caN+ zR25;e*gS}H8K(^3(^o#9Y(#W4CL)T;0(;D&ODiMxO0VT_Fc_FGn%{^8=Wwa;lo zfCD{<8Hx~Kj$UP7WJK8Nq^68}*W#y~bEoA-)7wBZS9H;q>HQDDM|y1aTHihh9vjn| zXn<;cB*}_u9=+ZA+GWqdAQL|iFTz|E=?S*crZRmsv)P6m0Q)rgHTUVV%%!zcrXuEHu!zG4xq-A6W8t2#V8x5G z#8kvPZ=dRTpOg1f#(z+9tv?r$yrijC5g-4tS=|oY|F&J(-TcAYOx61n8^M5u;^Wp2 z_iuL|Q3@uqxAyR^b3g1xK3~uWpwFB+9k#jfW##>WfY0$6=G8*wP3sGVe?WWu%Q^x> zMlfsFhAl*oG)3bh6-xpmDi!b)2Fr*D66=c*J;Gx}MtAt)K_HoXLpA<>QM36hXK7|8_+Uz>;mSV7s_Gp5#;^DkwjudE>I9@st^ZVyHd2C z{7eb^Cif$>%IN-(#k9HQRc8!DhR z*I@?f4c7s_e|Y;2cIbKjSEQ7ox;(k&qfUyaJsWVQ0Yms88bWS^(N=kR$^0mbS+R6Y zb{ydnwI*e46%&5rD=!K zKwMWY)dlH}0W1Waq;B*C)~z?t^vSE?SpS&(8HtZBGLAL^Ge^x%m!gjdOI#_6+K63{ zdB9h~kt{X#Fy5~0%%_6$CsYp)@n^W4kK;`BXU(uco z_cS|qatLdZ)8qBCW+p5!+)SyBu4ze|xhbR}6az><;Lh}Lw0w_h&JkY%O(cnx`>?l{ z1X!Au`$Ow1L9Zg}%$O%_eD8!!hoZLdRAXI8lU2HLh9)RBNkL)de}fvAdjUn*B&EIQ zsY?a$+#|$zBP?j-pAc5Gwp2DX-ZW~b7bkR8>cPqJL7nd4qE)zPBhwY$BV2~OAYqfY zN4QXeMq`u@YoRAaNGy$X|I3DKS5@V0Rgd|Z!0<+TroRvpVM_U*?kvZ3S+^s5c-y(g z)jIHq-|$6lDOQ;v|8G@ycYY{uZSU@scel5z+dphpws&?ah5Vlav`=nA(nARsikX7? z<}Yt5o47UXBcf|yjcHjQ;0V$|)QDj#;=qMGPb3I;qK+v7jHO99w0*io!~XT4ZeJdM z`n6%#e?9&P^`c%s{&bcQ37+O9zdF(oN{oGWa9X1E8<7PzAT~XkMESFj^bV}%`a9hdE+!ly&eFcO|!8v&OVK7 z_xi1G`i3=Pj%sFcFJjo(7fWU@G@Bp2vrtP=Qvf%1=fL%8j9J9KFJ|I>-*|UbeO~?d zztzWBko)fLrm@v~aRA8zNjbzmZ62U#&Rq@Voh{l05rnZO=WLU<&qNqKTd~CC*?K0% zq0lt_^fQeaFa|yKTWNvH(=<*)^r_>P9CS1{=gZt6o>|yI(#WJgq`zVwPM+rA(N;cv zX}9|r{&68`8MwjSR*CMi^M;mVWQ@3VK1QvO5K^G%P)yxqS}ZTD4+ zOOXF|Aocm=zpb6}P9gs(_)YUSSu%VA;9qdrJK}-(ws*dwy~zJlF)9fDYIVmP-kvD; zL4*Btc3L}Y*ykS;q`l~-0aLDNId;vwt>LH*3iqDGPp_q!6k%=peR_f*iMK8(6~#9p zU-&9*$|$tp17wR*QpcWEEmz7`b-RpEcCyGR>OyhPLnMeIO9Zv35atZG@mEOMN=>J* zBxN};D*>we;@pHezOi$Q*1oX@IH`bdk&KuQnn32u3I%sQxVKz}y20?@w z0gFIEJvJx0i-BpGbA+0Ms}3x}xXhY5+B3#-Ep{Pr4F{_4TLsbTRt2}_VH(1yH%0(3 zrGnk#7{i;=M$vCT(}roP)uqZ$C7vbjsZ{_7U93v7(o4c(?OSY#j8))!ds`w3rD2W4 zhd^VBYa?S^5OaKMxi^Bv3@7jy_;5p4x#1RR{kg8gmfZ1>gw<)usf9;6;F#>~QS6&N zLa~r$7hrj39ROGA)_>yno>iBjQ+oJ)*Ob&iIcH@uHFlq42r#ONn__f29s)DnzvBn|pIl8Eg*G@P{0m?Wr zh{ojTP0k$PJ6W**{F^Rd6JsMCjg4rqpd-glrUlA;47!4NsBT=RNP5O?zLy;>n#e(H zTfg_Oq9Z(Yz+xE8c>*+vV3dY$JNI={YA(YTwHT>FJKUEfg2Kdylq}W0v8qFns23Nc zrG_e-hmv$E@B=8|t3oQa&!p1gwe(1)SMfXxmT-$+ErK!u7lDo-BB&sEkCK6$;Y5MF zNP|F93_D~www;lI2{9-&a!LEw;&qpjgHj;t0lA-UUK3$AGMij{mbd)qSKTY0`1(L3 z?tt5I#u$aZGbtVS97YheUFQN>Ip^lZu zyXiMkHZ}182*l{Zeg<-i_ySA>g2vk44N~F;2Ps2?TjRuYjN%UfrA)f+f%jb31e*#K zShy^QBGD2Afzm($M#@@}^#D1KcsPVfi+CDmPnlKS!JkFSk7|$XCYtMDPg6`I`y!lO z?l;W1A@k_&H(ra`N?u{Ic$yBy@x$PT(uj_A1KLPw(Ik?I6lh7%fp~~CDE-LSZ@Q7` z9Mj$z(mk4zh*NL2=*@mW+&Z%D{^c2>+h#|XVvTM^LC>6xNg2^cfhN9@c%91mfTfYw zN9A^f?TQQEh-s+GPzji`DF*fgK#=z(q7qiZ+IiNj$kWnO4V}72ouM_+u2n)@>Q2=j z`3|=74^2QI#f9W@kPs0G1S(ES5-*b6C&(C#8zy=3>K$R`ij?|4JdeW3Z_D$Z#R!m~ z|8MPV@A~xr>dtnx(Eq2Y_p81`^#3EO1AK5bXx=vOPzAO=LPEZE*ma=5AZC+dFs!5I z0~Ltnmw}=H*@sy|n=Im~{z!P`Z*DVU+Qx%$^ z?evCFZ(7cJlQ4lYP|0;9d-5i!J~ok1@8+m(FnQiU-1)G1<7{kKt7Y|GovL=YS(CUx zyvMm}RDgr88ixg9d~*Y#5wK(J>D4F7??jpJi$Nce=67_}&HFvo-zfwK*0)sZe*-!` z2_|jp3n`exSE?nVx(<46L+#SOI6ppX;CEuNskrt5OOg;}H(byO<9e*YNplSqIHpih z8s>fR78JT%n-2cz)KM4rC>&BYD!d5X$nsoO^fXApnjnE zWcI-DDn$axQc{F<`%-?S&sJk^?=|YH>*agm;2FF>3R%I(?6Ylk8R**nyUp)gDEcNc zK0;a^e>gov6*I)|@4sUM+Y{!gMMqig+%wmw_UjQKCp>_nmQiq4Qlt7EAw7oHa*R8b zifvEqcY66Rhu|k?nI!*hZ*TeJzpbrG5&u82J&x)B+Um_D-0H{qQn$ucA}`h30t(JZuQGT(b{RDrmv;lOfsmVUyPo43P|B?r1vqMQ1i zMT84IUvX^s*`8&Q|GJNN{lWchrraG{ zh**dY+z~c~$l!=w3XV`gJ85t9-KKYBDv!^oBy38?-gto?EY*z{f_zCi4Vg`7LP)V6 zWs3cvVt^sG5^Yrx1-L8K&0P-CIs7YZiMvz@nF>VW+VAlI)ez~9Jb2K_4bEO|4m}~x z%W*bsRPQPM)UK@lR`~}a6fB2Ylk;2Jg4$I4SeiK+^u5YiYnLek=MT6G-N?JL?N4W) zQH6o0!+w6qc~p^9LL46`B88pqoODI@elluajUTx-rCSy3)8QcvhoApPLyc|+{RcUs zuy4qxyb20Pg1PiJr1)SJct_S>R+kEb9({G3dol2Rr}dR;6N_Sd-bFBXO`&4rnu^x?BkZL{s; z!xI%>f_3R21`)U*qASQm4XC3E?H8mci(0k~b_A=juP9(a#jl_nszr_l$}zGuZK^_8|Znfa!g z4HqVhsz%1C%<@QPnNvA_PAW+@dPgLT;He_^5&_74PXZQqYIrET1-r;pKwZ&qA{_cD z5|UNowY+W>;56!V1zz-&=>mI|MY>Yrk9tAH@`-coQ{9q-vb+#+8AX&mLOXXv*L!>3 z4oFNeLFe8ypld%bZ!J||PRIcAlD zTEpcwGo)7vXtPjjiZN0`Af^5fNlO;2N!hR2EJ6P-Z*5k6{vQa+MgF%5!l``@@&CjG z{P^O0enPZPkt;-UJqO0)9v%ufmi267!gB()g7cFjL^_;(JpPmrv=P-1+ekavpereE zohH@J!l$-#k2!H{4ykUvK8LsB8Po&59>}optDC#En(k_d|Ngi8w?iU4Q;(bqgf{i~4^vK(-M2@1yDE?IQm(4^4-_ zeN?MAErzcewZjvt zh7=Jf=4uNF6tl{2$*LPWRcSh=D;?y84B>M%*$AaG!kQx*8hMor2-tCjvABtq=BxQsD=F=XHIYrafxy?7oCB8wCqEql>gNQ6co@y07+~B2}BxS1j%LX^!!VWj2?BA5sbY#KDuc@ zQgTf%?~P|E^a?4U`xAitVz;b63?fca0$rx0D=w4Z)PxzT_onsj%|FFex-dkM?1o|u zCXE4Wjc1o;W3xap^~G7+u{_IsTl;N8yP;hPsaAV%d3o@6n~TBLFKUO!NV@&+gT^s- ziXHx`*>TuJh$H*wg70`$JR89rJ?T4c;TzJnHosG14&U<*ryLbaC?Oa@=I!wJAr}PN zcEWw`nIQ^6Ag~U(3?aBE*)<%-hkyH9xol^w2y6n>TM5{F!jd(kiV`{kl^dc(lIXLR zj|4yKTN(NPH!47#RRBof|K;HQA6p1EDfs^^5F>>DU*LYnfpyfm>wiPWb$NHaVBab1 zf6?sw3+aF<`FBWLgGn<@GJGc{0~gOsGl(L1--LZ5&SD~)>IyO877@wW1I$e;mwH5^ z5__7Ve{;=d{(&?hmeB|i?Dk2lfN54ZFW^Ud4lsu)jua6M5!6o=GYHwZSsdRdkCBr8 zQ#on6(wPd#VGrTv%)kT^=zpbJ-t_tZw>Jy_|C6^iRR<)dd*lC6WTUA6E=y)|Xzdey z`&7#P;v5?mrHsfzz|HL4+CCvFlatX3jPNn|GV}yxAZXu8T-z3FhM~y zM|t=+D3$5&%Pfh^wVHLwag-_tKk6EFr*(uJCdfBOa)Y&yQtmKytHRIdh78uPjehhH z&_>KYRbH9w5d23M^oyy!O}(oU)c2!-enm~dQ_>x?DVc@05%wWRUFFDlVSWxTW$!O6 zZ%*ClQ_aOJZEwH>YfisxwFbPwDxdMUIXcf;jcbBUwfEL^KOp29Vng&MnVm7}?dyu` zs-&XsDt#euVm8;E??ol=R8%~Fqm=v~rfZ58={3VPH1 z9pwMM@Q=+x|H~KChlq~DbKGWC`y285Aouh=H@LbyY4O@!L}W*VH8xsjb5FMG*mpg! z93u`6lIHz=!2nSv+3m^g9aRWYa`%Vgotn3Ft{m=^*?^X!{i zPDET}2<{v5BWlZ|=4#iigHKzshJahT>R85>hVaRoh>u_nv@XwdoAQG}D! zHJGdEDi>lU==%zJfvQM|x<5n5wDVoIB8w08*|`EBoVouTcTllflr2G#_B1i?A&1zY z?c{!-tIh*D?BU;0!M{MR2RwZpsFyux``cuYL6T17r@)*vqNsOnDW)n6ZHqKvWwTqPISaqY%xBKHAMlHr*WgYsy)WSu z;dDs%lZ)cN&F0kPn3+5!^E*F{TJt+a-x-+AM5VV;{vwZ~wk^i+D>^suEODl5fSU!- zN1K-klMQ=xz_Rb5`M9^7VxMh#DeavznFfewCYzd-m>#~Q&@wmh9|l=@vE0YcXDCT^ zeinXD16~hk?59=H|vfdxuY;-$UL$j1=_7pKus#Wrd!4kG^;+ zE@f^tyUhWA3>@0u?vRxenNVG!JgP|zq z988%9q~!mE(N~=jZ@r5yDd(2J|F^0;e*RzGtrqn^QbPA>&4T>D@c&NU|NG&%!M@*v zdj0s*S%OKJ^1tI=2(nS17ub7HqneW=_+9W}z!9t+obU+4gZS>9=?SK?@^Eklzbv8Y zkMC3vpoQQwG;_aLO_9=VjHB|CqkW&Id)f11l4Dpej~u)~C$Ue z?7ko32i87T8d?8gIG1BVuH5tC8RwAzQC?u3?Cx_%n=fideQ@$Rr~BXkRv$52v?skz!fG^B;yE_wDwj|#h| zaK6k9;+d(jLbpfnQxSCVG`^np?UeGLzitzWvT27%y8m};YiHNz|F2eYC2(Q?Ne$ur z4MY6@g#l>F2B45Y0a58y*9uRN5M|M^h~@#y3COOzyenuS$xzfaBq~6dvXG~M>;n|Y z7fE$ie>}1VoK{73;E;3BYawrdG6`;RF(BOz*mb@+U8^}H>@%7`N<=2Zjf0A@cUPU8 zac9)Qi`Rqxopm?-*5WIQg5DhMmvm6E(6QZ-y|)}TxXvtJ2& zlrW?&2#K}NO&BtcPflu|5aoKv#qea+`&HUwY&@=oY7QK$)9pGpxKVd_@3fGf(iw8D z$?#8>Q4tupa)00LP-Wo04?}L7-yDRWTF&(~{1H~Oh1?aoPnbebe|x*WwO+X||6`3_ zqT6&oj5}Sr3d_h{aqcjg{`lq=*k^Spxy5OYV0Ja?5&MQjyLM+dLK-t#1Bydjp^*)M zEcS#$G1EpUpYa5`5;9_Zhtdbj8?Ak>VyE?y$yc3MANkO#jQXiY+$R)fjG&SE8Rn9` znNt2E``@5*b33w!x1H-O#UBB$B>Ugyj=%n6b!)Sb|7L<|BLe9OQY)9t2 z%i~YKHthPZ#~;%ae~fG$wAT47f5s7wY74X9dx(J|TE-0zd2wbxUB8fQZ_jA=E6jew z5f^3fn4?~(*{?8v&4lR{gJ=k(l>gW~r#HUiXX9R{-;0RlqH2`q_2Wj(8_soj5+2SK-#lQKjILXr5GF)( zPZfIOU3ZpOAdTRv>wZtcEY-UbzNy;k4NBEoY!b&hg~bmg03Ob?s7umQ(tiX|DTvT~ zv(cjj{eOFFyW;czAS9?-(En^u&exiZoz`Lh{*hHj-1oD&X?Y5OmVWQw_Wn%&+%?wFzLkJhL0VATKCf3!-?8~O3icc|F*1~lvr@88keJaTa- zVCyBm}?c zI*6DRMY=|}>;gkuU!g60Gw$^qILU_1L8tqO5AH+r|CX z*icl)7=rx??;EW|ElX7eK_Rfd7-xOO@C>puDo2KK;1wMk8-hB@Yr=)=C`ukUYrTUn zXYA-KMH6vaxBdPQ)jl~RS-;F1#vU{(2d4E96-~=647;}{Jw-V9wIh9tBV2I|U%Ug5up3bn%X6WbW~TpQG9yMX?!gpaoYub_ zg7%%9P&MK;>-{^cT;1G6U0*Iod_QR3+%>I-=AZ|^Vd;K6yag@teG7+Q6J=rccDA;v zcq$G$nF(ce*v4yXBub=;A^rL75`8Rr$&IgqY`X0f6sj~@SWOO_7}?}A7a zfzN#dDfQ&1od~4*_Zk$Laf{r@E_;F+#uxlK6^i`p1;STRAx+9P`u6J~d7l zK%)Xh{grNQ+h|95r%ZrEiAfh8x>B%PB3Kjb=)N@;sn`KyC@SI5b&s|j)>Gj^dw~N5 zQ4Qi4GqcDYl1t>0gK~p>`@?L;Ob!+p9w#B?laH7Et(5xTUGuABk9(9ICX#-#z$IS) zE0@caEx-P^TP^ZGvw%2vTh_w74q%V^2ZeB#j6;@HsA}0%wbO(Ds@b27LJgP`6WQW>>V(c*WD#-d(7^H_(L&&~Iq9zg$xm>eH zT17Ha?UJZpL&)ENO_I*;sd^ z!(Jg0uqWgl#O5L9le%MtX#ExBRmi!K)BMph4ZcTGs|y+rcxLpqsB@^);H=Z6V%nH0 z#jH|iEXvdTXoBE3vtSL{)?mmr~a)f=m8a-fF#KmcKNGz1WUuLl;ZjWuaiWk`@HitRc%Kl{Z0Ks)YS z6IF1Z9iKJImA4Z4(V_X1VeWWM>iv?atQw{OR)zNV#xzIN=*B@J?Rf>Df$cXA?)kGck&AZV;zC!9I*HRB6 z_&>);y}9l<196E9Uhqh>Awn7C1%A~PNEH>)^h2vb`+@1md8$_e&uOM=Ej)}UG~->7 zaK-S9{i{+cRlbF(w-eT;n?=mfx5$WA=2FE@u@?kfZ$ddX9*xVJVB>kD)ucSxH3vsW zc0_7TRHR966IJoz6d{n({wuxl`6fd4-`(ma@_;J4ySVFRvyA`k>~LNXJ;RUB{#)L` zV{1F#aM|91MFQfO^~3$!oyTUc7x{8~c-Offb|arJ=!0zgPa3W$0tu5JSO(drk{3=J zyc50u5yZtxum1E|2PKR^!*2^=s|msCH=`*YUJb zJ3|3K3t2+eDQ+}A#^jgeLFUytCMcdV06%jpea!}}s4QLOU%=DJ0%mnaOEGJo&xA<A&^5aAUJ_D9@j-S z`Y*}=_L_r7yN@uuCN7ms!2;sxf2Fcr_Sb*esTTGB;&yFv&p_|e<^Qf(mwn_AfI^QP z5a`hwefZ||tiLu#&0Z6plAqAx4xXJ0RQ$My9d9&j>dcA4d7R)p?zOt(wqsF5<8ZVA z-7&Ia3n`7V5ch@@%Y&h*F@d$LRGU|7Cp$Qy{Ikm5XMr!#!ONO&s$S7jUBQ;BJz|>L za0>TE)9`m^$=*okng-my^*bpF%4+vvG8AOf)RUF%b+o1!fn*!h>>(egLY2`i;*f8h zCdp$D9V(JCqEb94d~&0rB~h#zK2JDAzjk_Uj!wR5aaA5NUCD^bJxfG8l6b}v9(tu= zaM^I1Mm1Zq2sh{qaW<};(SrkOA{}2;j89vRr5VU_zTYE!l*5v#Csh*2=+Zi@ZkFHf zSwHXpjF39f*M{!rt~0!Aj#{_gY2ckowTgHC_>Nu@C`p5e!b3l|`(uQH{!Gs7pUJZR z^BO{+F$=o*u!|1_lQw8zpx5o{E_!`UohoLDWnT9o++yK~K?OH;YuWsXmWP@)kco9` z+6Jtm?Yt57ZURHR-Q2_wfDa9Vo?En80{)mTX=~Qc6czn5Ny9&L2;|RJ37i{kL8@Dh z+BK2Rp*ImQdAmt4VK@SS&1;8mmZtp&{jq+gzJCVp$jJg+A(Pui5APVNvWvUUcSa$j z3)*SXB?C9mrNmO)?a_t-6UDKCp1%0`H}6r12yuo3zz!fCJ|eXLPN6d3FdW}A;t=X0 z7+)glaNXn3v+Yl3pAT&tUOXU_j0gU7cqqF=;sKouax4WLR1|RRc}$&>4+HT&xO< zB_I9pz6nHO#)K$+_Zz`{C~zN#u|d?seFoKSEG`R&`laGQ-n1bXK;J`T2>brK{r=bS zz18lc$QO|a48_-r_im67aldX1B|NHsIX^xtiI0?0a(RHNx@QNcwKa}aU6nH_uNz4i zbZWU~6i1xE)I&J0khr1goG1`Qho?brK$wAXqlrWSS{k!6Di%*i-iT}^tmSny-s82O z$hcaf_z-%hvQCxE?g#yEIK3!{hBy}~FN>O49JIx0ozx4h8gOd&84NsMWMm*21I4M@ zkKCb5FBv$a@c<#1f;Q7c3DmY+ey9?)EG zc8O<f80V}*83bx1S9?sa+s##DIy4URwR z&=GyW+;Z_Q4Z5)#$~kO(>ChOC&NjOnSwSWGMbNo5PsXN9j@ z>j)%qT3-Qk!QpjR0^^39>O))v2bDmA?nLC_aF41&|M-ps9o`$1?ht=5-U3aoI|CSY z0DQin$$F)_UVG(7CPG+}39wiSYUIo$Q2T2dP`wobCC?NIJt$`i+YF3j91+h2m+5n7 zrS9!8tfSlE8YW6dOh|6_sIZ#_3j->Q?x@V(NS!Ie3#{~gqJll6oBAkXTZRX*1(|y zHBc-FhYrbClDew7AuY~DWpGDucREPWxVrsjn*~>$B;sjG_lvitOH=?%142$^63}0UMIKQByKs zEMdpRtAb7XleK7*-CIaYGR7l*nyc^L$#$NRN(8xmY|Z=9Y6yMdr`ReyT{GWfGP8;w zu1?Byv+5_vqP-wup#7I9k_!5QU+>8%eP2qdnU1-TXnS%|i*TachZxIG?{ zJWJB8pfSMePU|ZjZnDC`J^;B~5^?a$VZS>jX~}c=_oyRND5JmhIbrHe{VPu4>Rqy#aIBF=ZXZK;&E579umO+-_F zF&A@@ozy`?D}#WgI}R$ZQnw)n2Qi+{4h_mPU{$Y&05`SQXbi-LS%-{eQp*sk9|kd% z4OUA9ev`ey)j%-}Ikwb z(TqfD&}_ncvSYQIgEl8-epC%?sP1^7DI_w+_Kvtn@{N#-cw7(J&p5Uom?iY zdF(hSPZFlL3zHEweq#wrulZoQgW+W^Qr7e=SSvleJ8TFnr#*Jw-d%~n=xVZpKq?V4 z*Q`8zG={^_;l__}5xlcXid5N>-ne45=XxmJOp;Gxxk1nbTJbRn>k^@|JO#ye2&bti zjk*=!f5fc-R?l&ur{cu1MOK>li7T;iB(4w;mZ=sbqfne;4Z+ouG4C*x!D56Q%FVI5 zHHokpgmzQpOR>|@GvV_ur!$qA(C)=TVN!!*Uxn2VUK!e7+6R2WhHn;pdmWZ2Qh>{A z?g(FiV3%qTz3H0P`+cFTsfz%7GGZe64t8QTGGyq3^m*9_K4$5o^^GPV-cVhLFQU>$ z{VPEadQ8=W_##6Ot`hF=UOSEVquWSFbZ{kVKI*qv8ESZ?12C2rJ!qDR1puTbq<)JA zYGN_O(w}>pZO;YOBx--;Hsokf*WpcPwSbQ#%M6O zPCK|gWo<1o$ljO%DO}cT%}4@HIld+QfH;gKsqr6vCgpBYzYZB{DfZD0KV)=s6U|B?m7x!aN;A5;E? zylEWgXC0!F;oy-AgtFRE)Po@pr3juPn*>Uua?uNxTu~A+P`dM|);Ksmu@R+i*Zyxp zJ(!rb=r}r75ULhwTMZ+Wi_9YqH2xOcUBW>NCoAQjB94X?b5bh}PYiWICF6wL)-LI| z7%BpyzdWrUQguBFOOa6}6ui;AaZ0bw&KtEo!VVEEhVf-kS;?gytl7HLdZp>75%a;c z7!sWum0(O0-y6(~oQYRuRI{ev70q?Tc(U|jD!zVIro{TIiek*JTpBY(&&fE%kLD0w zJV8k{O2t5F7W=ez`k{7-KaVN!{rJBR8kA}gIU}Lv?fYdvqjf> z=noJ>jlgPhT7Vq00)+DDpx({i=#3HS93x8ny;iruFdBcqsHKx9B403=Y%<%GHXI7q zwN%)~pOn)C&H&;Hf+KR1d(;KMQh$5<4-wrkK^_vho~N9Mm-TKo`cFpwK3@amy;+0z zJW?%8p#R&|O<(@k*5-D#T+shnV4_$2WKzO5nmY1VSzmFl7Lfw!1){JU5KI%v4w0qY zeMwEma?^?{o8@ifmLYf#3Bv(jCJX_%BtfxCh4#tkM_*#{NL8SQ{HI{ZN~O#@a$rQ1 z58yGE3B9N4Lb-s2D2l!tfyd#r9|qX3N3Cv|!s8~PJ~ zDp9QAL9uALcfU~v0GaqUD%cc!B3#mSmp#;1?~_Z-O}3A|K*JlA*9!QD7Y+88@-7hh z)*Z-Q^@;)eXs=(zn~`Jtq3I$S4FJI5T~%-`btl0s*+0Z?9)3_$qP~-~KqV3+S`;TK zy3Rt>p35;Z>wknexTR`ziwoU4EiJ3YEiPXFD_3^5{Qke)GOh$H?0<1UozSy1hv@YD z%s#k0Zv1*$YaAcuRQwV6b;04EqajC=2%NH zz9R@~4cIl%!;rl>;9)S&iGRyGHX>2z@2v`blI6|$S~&9Wax5KR?812gx?BRACBeFB zUa(-Q^rCK;SpPSN?x{nbE}V+WekocSQ;wSLe%UW<0UTX^-OKFQfLQuTUK&OdS+#yE zOGBcDOyn?d1$uQK?vJ`jF-%1c<2@nlple(n<6e(L`>%(;9>5TiX2o0nsmNVOyXY-7 z8xd#1yN#3*B#Gm{Yix&(%|+4(UD6|VMQtA^F}^aY%D=*;4P23#+R-2K7kP%|SA-j{ z_;39sjM2$Zulkp244Zbj)zo{u9T<%&)TbS1JM}m_{&4`Xw4>~#9%a`*3WGi+#_pyb z=B5b z(On5e0#T(xB%zK_d_V@i2W!I+i1w^knt0JkC$!dI7|2dNyALGd>xLTH*O(l-4f%n7 zn&u?@;s>)HBnu(>CH1zJHzNlW%TI|&<<0a%21vPHV}=7#PEXUz0iv!4?kvXHYwut5TqI&Q*ET+Q4Y{? zI`AZjrJj`{<|_0iadr^y(#|eG{%Lk39HyR~BKhX*v}IhF^XS?R7`ky`NJ^LmsHHq+ zpd;$mk<{}`Pcth4nyF5Aj&UoBa4NWH>LRR`+O!3yhWJJrwtV7zzq6f+KvdLg_K0HF-CMpHpVpFQ9IRL3h_8*#I2MgQae4O5P@TQt)}di z+NoY+y4z0K9kol*-A>Bxs9lQgc2jmo?NW62Hf49zE=700r0kB`rRWY4PC69jhG{xX zeT1lCnhw(*A_y|+I!t>;Ag843FzxYx%#g0bvICCZo;O z_2Qipeg-KkXp|IV6y5x%)hMkZMjb_ZP~JygQ^hmRlsBI|0w>wwe7$EV|Qm~tFZsa?c1cDkuAg*|9ga*1=hjUpn2Q8LwcZ@ z{)2=@he~`OH6I*2;+Or`J*-*3_E7+}ZT;Hm^$^U8y5RmBrE!sico$hBYt~&K7M>3B zQz)T^jE*QvD(;8iFJRvsj<0@)TuZ5pWUT%Wep3X`=8Jh-MCO|!xQjHwU8|G>#jPoR zEcA_T=W4h?G)3C^| zfjyKtHdlSB7wVPCQ7cvDTyR#2{qgget)uvAbqeN-zn(hV>uG}Ce2E0{k!~VJ%u^Jd zdA;IvI<@5DvUYKKepsv50UG=C{HR8CjcJ=sQNRPmYefB5ARN%{mMXKVTq;$Ww$%~k zI<5!(JA_h+aVu=qrB^16vmt$EsjE60A_{m2z?WgN+UdBC@S~wY&dhrO}eUZ>m~eVoE_ajy#y8O9<$U-tJFaF2c!%f zb5)P>^(sowz(J>M0Tb_>grgyqIGo}TYBAFt#S6G;j%5*6PJMvs?+mX)quPuXWR3@3 z14`x+g9aE1UDpdHb7>|`1tXMzhAvIs9WK@gev zptIjqW3dwxhjM@=fvZpFIHwqNS_eDL(9=VPG@}O(dloS&7Yf9S0@K2Q)6IxlMLLPeP;iPck_)cj$U0jw#D-8sOTQpTGtImM6|{@6u0f_DGk0 zZjl)G6k$)}-qr*)2tvHAeAaY5p9(sW%EjcTHW>t*<^(5&h|`>75FzIi6DOjEOb?KT zr2SO2WZILQf2=fsIXkr_2iUX7yw65XvrqEb2y2e1J|i;cm~D{QPE_s5g~AyG=4Zs= z%(Hw(B+fq9XT{>|(+xr638+oEus5yb{fwxaZHmu`w;3n;tVo-2u8|l!Az@eJZgtWc z7$I(Tl4{trr#f*2p8ABRfXGvya}c2y1CuAM#!VT}h9)vWwQeSpUOcQefc-3LUyg0b ztOLvgInO!ic_8e0r#>HtA@A&i#C}?8W3D5RRe_j~GmvlA^Kl4r&V61^LC)!i9D~WK zow=|-lO{4BsGnoX^MUtyCO$7npJ(oo7(aPoU*rDvR5VyZ{Ou{Ju``+aG!MXR7BJm| zFq<_555!`ggej`Qv)BkjQ=5)jJiA3K{;4oF;M@{~o)8Dn|UQs(Y3 zJ!v&TW-|k|JJ%7)rBKb?8G6Dh=I#(ZWi4}fik`BZkYhA8wLRDA$*!5r-O>$l>O~C`T94BcuW`vn- zl%dH^-K;Rjqn3B{H?7>VDjIKc?qmPf!x)m!Ca( zQS-~$p1!nsK8;UbU69+&)^4E>W|kwEU&EZ|Gx*e1&GR9A^4jM66h3)*A;)kQc8^@A zFQ=+H&qwb`OPc3%_q2u0_n~{*+9FTfth7CS_I9UiLZO4VJ5xK#jF&e1132piKF2|v z^%{c*ayd`p%%yGk$t*YI7|+;jlo^8=D?^GL`J@;m>9B45S8^WTo^9e3`(HQ$Am%ez!V3Mm3GW&Tj zo8=+_lQ2Lm9u1h>suzz4OmOXsNChUi{17tmd}g;?r~k>8jKw?p6I$}(o%=~Gd=U@* zq}CpJ;-6R9*JuBinOX4Y;QulQX1r%x`n(W;=L5j}5Q67}L69K4OiC~(X29n{1jADF z{AR)D1wug;3}jd&vtbUjnVd~!fyIeQ17U#$i;06`p^3@Fp%D}|=FIGvi-b(fAhXak zWWrEbXd*IcSS&adnKU>;$jDrnEpt(i$yjz4nsiJO1Pe_!CJKlJCmIulMI^>!y-a`Nm@2@;lqq6msIe+JcOMi#@WHdiLrxd2N+ zT^hS|Zr-vWZ=4{(iWbxin+LTfY;+Q!Tzv6nI$&86L1#+9SsJ1=CHMq|pZPWC<|9Ru zwOlO^Et(2kmWCKj2Rchcjiv*j5OOqcX5oBPXo9A&pc6@X z=F%AC5~1>Qn3|acmFHI@n-B2JIWd|OAk95lniDt$2~7De2hMfVHGV zY-;d|q+oMzEOUuj<@rqdOv);YVc4H1fGrSFn=7y_6nUE~$OQ>qLE%!FD9KP+SsVw! z93kDJxeVqGbOp7mkbpr~pf~99^ArvR_p}NYyJT*KJSaLv!{)M!f71uuk_&<}0N~OS z$r->fC>$=HdmDd9pH6J4UX_1vx#CW%{%=Rlc15H2WjoI^k^ESa1`SOy7ZK`C<@ zb;-25wU~~WxkJoFcFoKwFbk?_H8xqCp?{uy#sxcHV)soRG@iOC_$7&>vjXM|5=>_X z(icT+X9m@vu)5f8pnN2D+VX$`Y zX93C=MOSA6&=*EjX9Ckmin_4IR+qR|=fg$Cq_w)(j;eVD>JkvyxdrV~klVS1ZjkU6 z6nA1~aB_H67vJGEr^vf3F0i=Y2j##S-h;Liq(#>)8T2gj_GW+b$oKo`FgK<&x;x0r$ny=NW?d1rz5PLOGH$ zFNLMUCDPmTHdG;`VYm7Uvql zm(kU@001wj_@z~9?CrhwlGka{6CtK(()DuOk$H~8Ox+EIxNeo61K@?={ybnWh(Cz` z^C7&+0w^Se(>A~5-r`pkSM4;p&`Lpy{6f~cXz%xL+Ao|Y)_k!v()qggW_mcf( za*yVt_A_&W6r`R={j9-V(D~;8dO_rw$UhIVhf(;YGuFGrerNt%u1xB8mecXN2!LN= zqQ4N}UuyEd5If-YC&0+Rde4F(Q4w^!J z@Sd0F+k%39cnH@sZbZRE=7uhbL*cbDExr3VAM2RCm#5$ze%|qHdr&YBAM<#=ohZ0R zfO|aOW&|{ml|L-28#*7?n6cZaU>Sav@jM$)@CzTmc&2SAm_>kDJkw4@a*CyPXS+;e zcV1oF%rbVD-@&~&Tk%4e#{zB0i(w-Rv?oD^Qg9LEPQNAz-W!bZ# z-Hq6RB%^$Sb1rSYFlYLL?Mr~Oym0q=p6z=!_hO;W%whb4+>}DGnZM8!wKau`Gmn8o zYIg!G=>=qYyKE<)WcM7o$h==PT_{3@Ni94E@438{p0l*{Vf60lNv{h%`-$-cA{FKw zpE>9Gw&6tSPpsl-zPx~h1v^YHHAG<{ zx2fPxDU;2go8k#k&$Or(VGOcjz%Eo36)BWnse0y+hC;oX^CAzz^eVThP_*W|B8PXg z3Z|Blsm%us46?Qt91f9>l|8Q$zTjnPdD&d-Q^CwqGPC*Et%94S=4SJ;VL@Bsi>RXD za<04z*)zH(3l^4^g+2c!75pnD|C)oXDwtPl<~0Yq70J0?q%+KAXum8%s0OpJUtVs& z#$s;Q3uk5vx@j+-tu5%j1sPny*-{E9&*=cAz>i;EcHqZC9=IYDO5^+q4>%3n4T@p)%F$4F$Z&;s~rrm$Rg~7 z1MKs$#Ch<&7CbQzPn@HjE0|&qrZ`XgS8&B#TydVZFoZ3>w5lL32h3-`vF&Gf<`%3l z4=bFPZ7cX-4n8G%!v#gW}7ZQ2X#4$BB*_9Vvg=Pu% zHpp-bPOEl%88~eb$P^aHwD1Slh@f~;_r2?li;0WSZ5CBJ7MojeT}6kNjq4hR*EAXz zRf(hk?X8)vkMji3VD4P=g*qH=Vb+_TfriiP<`#)vQTA+h5snp-&FLaQ zdN1+kU zqYKXcQaE=JR3`Iwlbu=1cfd_!coAkMk9_tpvpk3~r@;(`dOjUGFyGr3;sSO{yxWBUNHBmG50y%^+?WMIO7#M#5m(! zCcm}Fp>)jRw~Bzev;lR?we1D7&&2GPZ1W4YujqVA3;vSre^3A@IKRS(m%{mrz`QJh zc}qnAjDk@`wYQhZ0gB+gT#nmiB?6{TzX<1(iow&u`SPI3T!;M>=7MYa|}r#Gt5F} zSO5$tgoYUi4U2#Wh2ud<0aG+P&3D|mWD0^Lc*Mveyf8y}p({CL5hv$1D5Ve;W+5uf z`}P-d!VKhuxkrLRNSKL`F!y*6Vpu4u{H3n)X9@`J=j!5zEV8IjEdm$w1THQkA{0VH zZlPf*(V-9@o*+IfB}N1Vi6Y!l;YiAG$0fvzA^6sGf{2%D6oV{&1Wd5~uT0%i*HMSf4ma-&2ce#}(-SR7hmGMXaT(j@}vf-T+l z>5bnDgd0KQMiGAb)bPuEC^P>7ScU8{YuRIAaH0@CW-NRx4rUY%6=f{X5wyAFtVECv zkAPZ)apnx;%!ev-9>!CM9J3ZV76Ty)d1J=%#)6v7M%?{|75XJC(&ZmJXUDhrx&kt+$`tjK(`}F*%wzBfS)S}nCbB6cLmSY*y z@IT^thW2|@YaAS(*vEDIw03HL{EYRUAD?0IcB59OU%wJC&JIsLAJvXlRyOFz>R=(w zQK#RdE(v}C@Ex9ircPXVegqI}E>ufpfMDDM)GcilJsyN3{P)pht|r|S%cdvki~wTxjk_V!+TDckE+R|HsGUOlN5&O6th*gEH* z4oqyRUVJC&t~t4VdT@5|36gzGRQog1`=oLNdTNV&aFw?6MA|g}CwEc{U4)}MskMfk zU1_?Q*CQKa6IzP%I*Iko|6!fTDi`6TPGq4m$5fiRH0n#!Sis0fb~b3y!tMzD`G?{s z6avn7SRZ>E!t^SwsPZqv0;&wLib&ecL1*-65AU58nP5YEcE8-j&rWsoht18(?(S~& zhs`qnx3h!4`KOGpe<*Kl@9va$x3{a?KWtWZs#`lhSetGa)B7|Yj+z6@`r-cV&SSIJ ziyWvuyzAT#yOGZq^a1qKvvW(Dq^(b%4=#`DYgXgen)Pe#;0QM7<2s%;YG*K5TOZFa zt<%pZjpK`xns}!Un?BjGt;7EPXVRb2T18`6Z+Ez=DEoeIVn%RqtPq9-0HkI_b2W-q2aIzCaO%vTT*tH`gtCy;OG` ztJz|Ox%Wsa^)<9*>*V;bc2=+1WqWgd^nGOYp>ktRR&&H}-Ht~0dm9@M4-e~%>+Ai& z&4%wC_zJ`f8@HXIb?Y=~Zur!8?gvh*N%L*?+E%Y`b^E;=JX89+aZ>iE3z!A)61hOy zCENaV_W97ZSFL~l+x_yierSKGUBYZ{-4B{KcTEd^hhg)^DZM&7Z`Agz&qK%RUjs7k zOiB@_Z`C`;SLjr^W8h)&xME;rJox-K7!^-1P7WG1`{44p@prp^Q9CSk*4X*6YHhrJ zy-|?M1wGE0r=5-d<51c-0x4*|IT51rG4#JusqXmb|JLr#ZbAP|7*6Xm2&z>&Ts7$T zU;4K_>$KT!_gi0?-qlCWH^(~cI?VwS^UZZhCW%O`S$F+*=eh&(NK~5WV_VU8{sOdo zIKKMbX^pH=KaSE9ZTC|9%#@zHNJZ)O5{Q|EzR~Sm4NYIPbq$VkM?4C=00vy^n`BHv zXd*rYh>h>?h(WOqZ*J$BeX>GW1?^St;X_c~vm>uF_z!+U9oN`(c<&3z4HENp=Z4PZ z`#EP~1__B~T&^3QmuLNJ#r?)$w)oyKwV`R(x+Bi?$(ra6PK}fJg_?ct?HM_4mB;FAk0ncvEj6a^lcF zJU_#yvqp(tUbDV6yJH6vyKW+407l6F^~}cK;l5aZ^1tsh3{AbsktZ2D5q3DHMg59? zv+;ij-FN+-%}20vci&AX2qf_T?cGY%$N!-VZWa807TD?IQGdUv*^SGC<3?RED+-iB z+*X6097Ao0P4LQHo2`w zkI91~T#uu^QneiSASR}22^j}67yHOlwU=v5)z%A^6sGPs-tX-RkqTBC_aP&v@etw;MXiPlW~%>jNdKSX`gb3a zH#ub3Q)#j*cbD6A!r<0!Wnm|KmBC= z7~bqNp_bf^H3o-l=OIJ;pWm;E!RTu`ebLh)kS331MNi3`xtNmCrFU8lH7#o4KX6+D z2D~UNk=|TUzyIZt;nQzo>~8QR}6<`T#Jj~baae{*29K}kpS4nn`D=AdgHqxZ2Z|M9--T| z2BJJLZqLTLz-RTdTs89vo+y-O(HpYqf49vcM91Oiy7S#;o<8bx4o3Wl z@%mqRcXM;gr~mEjRI7#l7Z26RJO%mo*?-}w`vva0a@qPgfLJ#GpZ_rE_tvb-J~Rio z=td4abff>Dy*F=bBT4p!`)@u)cK3a{g$IKqHaCrV2ZQWphV22lmviUdx`kAL#zLi| z#hB@t^V#2DL@t%JNUG9?go`=HU8>48GBPr@j98-wc(RJ$+@9NVZ#?k>N<6qNNN*jl z?KN?K$2Dr!TvH6?ctE$}nqqZ-DM6i^LOOi%x=zbaDN)k>sk@HbbikUy_TB1@mUf6u zroyR8;+9q&+!)m0N;Dca0koV&Oe0Yx)gV6m4YpDp43*709yAP|Q~Nx+O;t4YU{(2! zcZ=Q7s;NtBz^nry164nzUWdiP!o_y${zOFrj&VynEhCANMlZOW49KsNl_#ns;ruW$kFSUGl6 zPjGNQJtYJ7nmBkXN?XO^HW7JQm3U5N)D8v_bhNX%xg`rqE44OOM+E4Q&R@#Rr0xd* z**YJThMPdYgY&<44^zLErC-BlkLJlv!=gdc_doU9u+X4j%kQzZ9W`hLM8CamiRyCJ zf5WvsHDB0mSR>|~h9X?bq&ua*Zwx?$!r2AfcWV9n}AiUEx2XI5x7pXIbD8{cO} zM_kMBAE9@^vNmdsUWkVzu909($mL-!RFqauH%Lvf*-pZ^2^Wsna23Ip$H_@!BZKIZ zfIb82%n*1Kx<0VS3~+$qM9qC}xFe8QPmEgrQ)p&ZXo2y7x-3*BD*dqfvz{`qk{-C) z+x98~>a;Q3&$w_)Bmt@!@;xEsPz$nRgK|hq1;%0;#t&;)`kqGA&2>?`_iCR2Y;tT- zS|P$yiE3S3u>oboZw!QBfp(;lt-B{q@4Mf=rSH6cz=+#Mhi$RSZ2FxZ(AsxVydm5K z-`>W&*hY=jK_87<>O$8_07z(1gbC=hh7|>F^62GvxmSE{tkAsg#v5AG({pI}POq@K zO6Xhn>U|K1Y{QVSAs-|0I`!Cvczqz!k4?{8{a1}Tb(eCL#_JNuqOm*NI}jZ^H^6n9 z9-@)~#hSvsDljkH0+29$b?s;?65AnA@ZKO!s`KF08*mMSA`>^(L8rP(##a_veE>kl zYpQi){oUKQWIiP@r9?rw0IDuqeMeL_XPpEDZ!QZ4jJSNJU~A!Wwo(!6(Kt5vaNOZc zr|kkgZPRz5$i=+O!51n@^pf`nyh0T3qbd`ZN(;wMB8pv=C#Eji6WzwYpvPmCupAIn z>{K1cDQqTUZ%^rUs2vp~U~kVfY!9Sh|8R&1jcP^@$*u@pgQ_aez2V0A0uA54Ees## z>f5)fT&Sl4L2e(5aZu2A>n-}cW|w6mg1hdR6dh=U8e37~D$7gq1Ok5Lu}dWW^Y(4s zZ$TvpFH5R8fXFIzFh%7K9E3kOEHsCL9+Y1Lp1?qKnScyIFciZag3TE;H5@TfPwdmV zum-kHO^ECX*i{D-Vbd&`<-{+RUteEO?wv%9V5Qljl!k6-QlH%0P*T1c8~`H@3Y)-h z8v;*I(#N#$zQEg(6bune0$sHD&g=(9lk?5MsiKT9%wSM1*jet$7G+WQCxRu%{aNg36Wd(Qy9*htgbP> z+tUXRgFnOQWWe*Cb%@-gFd%+}lj1S#3n6H-R;y#k1gKo0uJO?^y;#~A4Q>}XdqYvioBNm z2QO}jRLAz#z-~>S)E;#6kAA;d7f%fj|HkG|k~Hf|WapArn`3Jb(udCi#jS;AXT$+s z1=e|$25+Kpd%^i^Ri4_hJYXMZ9YW|-8$$1COX5$vTog1OIf_a!14<@eSppseri7w! zboPa2A1gqNlPnQ5q+8S{0O2Ao+cn%~<6lyX(egZqVb~t5LBtLql@lEe%!0_WQlU}< z|B;9aG_s_X#$Y5fhXQNT!#E2|9pR#+f~E_tjB+!=3mzylQLP3aUSlt-q|?MSP_sq~ zF$5>7hi3sxdR~z10J917bu1f>Y@_y>D$5$m2SPPb`<%LkG(#L*MmsCS#-Ycf|0@f$ zdmSFw5CjiUJGNWpOkwvUEHDHNcL3j=93NNC5fskgt47m^?VFUUQDe7qecO804hGtL07rq`YIVy{ zGr;WA_S<9;k_MRR7?Sf=mJ$ME_ zu#XRW`$*mpY@_6H=jP~RUyNbq6*64l50bn3?o(;Dz)aP=W2JCWmwynL=g zR*MDo@`dBC;90d{8TFWSN$i z&v3*f{pY^m&W&;w&smCxAFQ1IPXP&%m6H2o6@B$m_4K2FS zz{hBng%Wtojtur#aNZen>9TwIOajBuf~NC&NcMceiX^)t1g;NkqUP#%KIk`*TN~HQC)QqY zJ_jc2lIGMVK9)1G2!n1t#$FF+D7Ymk);f!n}MeifQP}T-|)K z`G0`tM_89oB33e#k?D4bv%=8$ALa5U(g8&LKXx~Z<=p>c2uP>)i7lvM2ascmICpr{ zaqry+>^Bbcp~64I5746!AII*ahfiEN8t;Ei{Nls@Sr@-FS}lZ^KwOYeNNM<&AdxLjq67^Ae8?=@~?=PE$D+ZUaufL11b- z)`gKZ;<=btfmeiDXSfG|yDc0@0a3=`1aMCw4zx3b4)IWHNT+{}QvjZ!_K9;RQXU2g zJ8^k=!V#L0T^ec#gi0V^Q@^tzGcQLYilDSkmCTPL8lkXK4qPO#St2eh85@G9#e<8x z1tVIKPMem+JZ?iLc1qoj1?OZr%Njllu^W}{cK}Hr8cC7dD3U`^(+Wp07MEC)mzXYo zAzT7423$UByuwiO{@4?^Q_YG!WDz<4C~EDtyj4U&pV7XDrUW5r|GS%}USe~s(jt(?a z-Fm+BW16#Aj`L)iGk*5-WxA7@U~5h3yqWHN7Ulez=B#W|_-yCV^e6PPP|seZ31&8{ z^D0=r?TL>rv{l_+i1Taevs$|IZ0ZnLr1NbClbc{`PXD}{!Tc8R{G0kLZBn}k=i!Vd z__9&eUc?DzI*0QzSl*rK9Gz&ey0d8K=WJ%V%;)KBAhMw6>#Qa_!PcJXc{{85F8295 zn_1hWe8JA+Sx)%tLT!7ICz$zs&+B0Mcc*xCqt)u}0-xVAob?Mi&u0js#XsL?I{67m z!@SP>na+P{&i@%g!9FS$mmiop0KV?6U?afU;hsQGVAG3yveH1MPKQbSH7O??l1u=ZMc`Kg z^!aHftP8>Gr={ax<^q)$&CkpQg3HR^%n3LXkf!J5cjg42CFg(U0ww#XTQ+`ZjsVKH z8r;+Y@9H-FW3x(h{@X}20i+g;UkcExlr5YKfv80Pl9_#^32dqKgbKd2F!PQY7)*1@I>VshlBJ_8%@vkkJI`sY!Cc|~ zg1OM=1L*`Lcj5Wc=Y#6Y=Tx5ywl=%)0(sZx1#3;&*# zLjKmm<%uGu(gKXKiSr_{9lgYc^wKlNSqKE62ztIKg4@eh0DPLq(RCiYxp4l>b=rtO!5X|E z{@>aYQ;Ok_7UTE&hROm|qqK0b{{zTmySWzBOD7Rn<)3*4av5Q?jIcPX^_5Evi?k3E z93?M8j##9%$R!I>uPx4s*eusqDr+p-V&vq?obwC8aZOCJUZ^}`?VD*PNkOwZJR6=U z>ckK`1%KsOC8b5qt`dMMMQn|raCQmBs=E+tlFKZHmRVPKVd*pxR>I7H^?o7NFPCDp zdzfW{EG@{=)iHet&B%f6PyFt+igA$WTOjbJ!v`V=QWhh`~8EP?CG?%IprK&|;tO<^` z7tO;j>U!mpSJcL2t(4_0QChe|POe;ThYG1Pti@Zn1|9j5#0iW_%a>6w0A?tjeDHdD5}eiM!mV2_(;2!skxaM9Yn)4YBc;5>UcQ{U zF`INCbF6j@r(mCR*Kg8@^MF)eIZ&{fZ+ zPQC3@F-ps@pc5RmU#0xA3~QQ8rfF@I)@m-zp_|(=-EJ2P{6a`@F1^0|%{sv$o6EDb z*DZTqdFFYvaVQ}7BL7RgJ;jcse>v1RQ=Mvwlb35dDSzd=gyk2LgBx?wtnSPu+@P<; zUfW#eH8?R7nRi+6AeVwQX~@iiEzc59aAbe=a`E!4axN(=#^%NEXxqG$+j(Cs;m)P$ zuW>_9a9HQ^bxgjtj_=aJ$}>f4C5fA;)DT&lzLra?B0D+nc}V8w_B^pK&%G-n?FMtV zjl98IOYpHQyw+8Bi?Uj`VJz#erDwLZ8k{XbAHs8$xUIP@!D{C+`21w><-&|yD%a%0 zB0;RE)bA}K6m~JO7TThE} z2e%e`$;f>!-RGOW)$L7^bTyavhsygFZ746k?2pk_%jH}HFugNi8P`A82|SNZU>R{G z*Ai%Lz|^z^%ZUaPm<)3JzEPK#LjuHdVnVJ-n3YhmjQEi27G|PbSYA}f4+_Iwe$_04 zO&BJ?iCq7XTK{0tjLl`yMPSU;@@B4)n2knac`+i_QJ7Q2a-m6=t0-7?zHy@kSj&+n zd_O2CU$#7H%2vPSrK2bLrOz=heOkycP*%0dEFEG@z>4I0j1+o|WyXzMvoR0N#`0o_ zEz)FnqRq+2izXiuIr8Jh@U1h^e!L9gF#(q3`jD~oAr{_jEthTtBd?aXat+DsH6+W9 zBe~ARoIRHA;`wwY%Z^XE?}t{M&7754epH!&rO5@OjDpefV@s}SnYX58*>NV;5|6E{g%`A z8?Bz#aT*BRuzufef4922@_nOKYxe80{wjr44Ag7Y8@FO(Lye|dbuOkx2Qn^Yz%Zq7aysK0G96oz)AqoLJ5-`630TW z5V}6PI6FIZPTm)+H{A4U(01kgB;3a7U1NZ;D6*)E7w&l^0EVHTn)%y^{ypoiErh$tgEG!AUpasfYj=;!)Z2> zy+PxJ-a-@5_Ls8klYrnWq$jiRC0d5PGE*LUc>pl6u0o$K`oCeOkXa69Fk(CyF+w<_ zB~ysgdF7k@ZNM`|d*W~YeM_9V^}1jCB-~bAT=%@so;YfHZs$pq zv1IFzfQ0zi_146L4+*VNV>yTm*Bb~n*tqGFU?kj*C%XNce|oi^==q{|4>^wnMRD!l z_8#f$X`|+~&=9xytJmpLwbFWVT@H3sA1^B?Qs+Ly4__;K7kyxYIxar!`thhx#4>a@=FYT5#Bj^7X zSb+Tep9k{f=YJB%Fyr$dM`U^iAXa$EIRHgJX2Jr5&OUUM;Vc_{mZH6VDzzXdWDGCH zA{W`{f52;I>1+i3-`XkdMCkwK&h~ar|Fgh&+_EeOg#|!c-dhvzya%@>j@?JEyC#0| zA+^=TFO62qg%tEdSXj(u!*OLpm|x$Yd>C;iBo&H?nL&}EhlCQgjPX@Tl1iwRqGa@= zvgbbfolkDZhY2|(aX#LAEocck;t>+H3w41DvAm_FWLSS|tPpr?^zMb%Y(kUbbqVzv zJ<;;KdY9A#Hy-3mSSmXZN*$+0&-A+6Z$o@Vx=>ODKn2jDdO*V#r0%Y`?f4Jk?3xAJ zcYdcy3JYDZD+(-szIuR?=M`0R+ihqu&=cf&kH)Ia&oEPWVL_%j;cL@>T-^&v!BQGK zyZ#lb63D@YKstVRadmole#{c`4?jc=b;l>yhwn}+&Tl8@n`N?h!*Cw5u(Pm#bgCz; zP053bZM=E~@m$Hu-wVj;$|CsN#ns;ruV8RKE;!EFZk4_J- zp|Xb`L*=Y;PW~Pj=c1(DAQCiHsaina(Vl-fL}zKb)(9-MRncY$x(*yo*bCtLGGOTh zQ8Zat(T_C&O4fqv%J1LZ6NTcUM27rMq)$+ZsJe_aW0l{lP*MWS*Q>&&362x&1*Qd~ zr#>81v{IH608I}hfnWp5NUG7#um8L6Hld;gO@$xM4JfpR2lRq|>&Kp8=n@PXEokM) zTL+~K)U?-*o@Z=xBvYH@-DlC0x7dKiL>NTp6o$Z=TkH5ZF7Dl)JZNq_tW}`l#KN)z zQyuzGkaz;Zja&OfY>PZWpr5^IG#kAqxpbiwcz1R2_sTiB+gzTU!uO~8$7RLAUOTB? zJJ*+$qm#qalmFuVQ}}|hhw6fmN2^m6Di|}Op=@wcTaHD~U`)%#|6AM1Y4Nz%Q^o)E>EAO9_@b1_(Lpwn5i%P6ZW9L(mxNz&!@t2n+p#&Ys6YY*)gHYjjHl!aXv;GHx)P&O7CxRaptsm5g*XlnwZMWk-bR*(Z z#)fEzxK87CL@Se6%cL{tRiG;icqEIcXHcElW}swe#bgYC=`dJ_*LRR0;ZTd^1RQ(B zpb>ZC)xm(lM0pRv?pxdBre+~VOk@8_6ke?sRQIPlYw;K0n` zu$(v%fTfgPET?r(nIA8#y3Wz=n;<`52ozS=lMze_XJhXnJO9VP{Rl;!}dmxWsv?8Z?N z5&BqiApK0HRrICA^sO`>%~CM2DbuZ>VV;ksXLEzz%f&wnvSVx92+yQWf}Td>B9$u5 zT~8OxbQ&jV&{`NHt@m?==huOw7JMgDVWOcb@lmPqmCBZ$Q}Y>2eQf?OXkswdT4kOE z!e1XATM(auUKp)q#A&KgS`dA50E=vrO;9f#W?SW-5$0bvu3Kv`ErmOpta2c?xV%N5 zO04GPFwdan{D#kf(&B0A1K`kn6vsPAt`ACN$9}8sv#&zFADS{3mqq+a)7A207i8TV zzz~E-Tt5A%h1phqvdMOc)#ie%OTK54_KdYo(>E8PL=-jjSzmY3Xa8bEk@+@sZ|CDw)0Ezic&f!AeBs!DYc7=3+xJ*Tf}>1(jk98zA% z^5uEhO=-st)Oj!-gw9O0y0peG$UYswpJAb`hn9_!c?tdA(ykBYRIN5G4~u15-+T{` zd&UN9&&eV5ex9E-ns#+69@yT`{QN@w0D={nZwkMKJ)fC^%N5V}`Ly?WfNkY@+xThc zhwK)##_3YmutZA4758j7qz4d;Ha3H4zv!n$UPCSq21knOz&%{_#(giAs zq|wv886ALv^mdv<3LY)qdtTmHLFcpK_Jj60S(u))HPdieii%RE2&=WiZQ5ktR$y zwD2Gqb35u}GNA;6yzuFA$z+LJl$V_j1SX6BMUmzvjQ>?C?d|2h-S1FO8*iG2h5eDLBCQ(2^Ji7FwY@F>297c{1?YD9W(q_ zQr#eYmI}0GWo*$Yq@KL4)AAkqB4b>Q6*El7?KN@28i?k}k;8&;VO6*dzq3=99I=X`lt4gh_5xfzO6CUg68 z5&eh)*~5haTofmj!k;385Ara1?Vfvs1Wbs%inKv0h%+bm=^&b_fi-eI-Ekfygj8)d z3F>b1(S7PtbZ1wn6u_Kth|&Xf{Rd=-qOhukznxKTsqKy8&PH(yaa9$L=t#Mg6Y1!b z0+fb0K6wBY$V`YNI9Y>_y;f1+5Ob`Cm~nQ@u{9*uK_J8PkD`W<&>TyaCPP17pRBKM z$o~_sk5we!q$qdd^%qh5%U{InOU_+Isg05&n9-h~4KZkXDux-Rm=u&OU2W#+&;not z91Or3kG4BzA0`+tg?C|{X1M()1-R`a1?NO9p-LS;wv76(_;-lI!%7h}q zzNLgP;;$tx(Rgi5vS3+zwAYTp$faAp?7dhksk<4pnAscG>zbiu(@81IDzm0zj)xPV5SL@F={89u51VBbTDH*r=6#6bV=s3}dzk5XZVH^lTuoIUW|$ z5H`m|#i{f?Q`F2l!hu+7z%&h1%|5C@SQ`v$Y}Cy@80&mT6K7(OkW!d*amdp&& z3606xvkW)-XM3t!#f*4+(jClWdxou(bp|PRkpc7Uwo>*{kKR?mu&2DWvJZCf*+YY5 zUnR!l8E!Q*=$+|cHpaa(tF1SSu|Drs%sQjAyOPj{mtihjGy5!3?$Tfyv)iiK2cKrw z&Uxf!61&se#WaQ8Ic(*bjeTLZcGekY+T~`M=DpRk&nnBV52iJjt)G1|sj0y8&BRRV z&6KGEP3g^iNyBXCvWTQ2>x{Eg4YQ2TNIJ65GBXtkra5m?l6`X7sLDdj%uMp9Sx_08 z;!n>;YUVJv1t&dOAuuKtGRwReq$vBW$D>NYw4aeQWuNRARBF*?Y9?LE5ohP2q?&cF_CkIna{MB-ZYFTEve8T>H$KtOSSk6 zhSH*u#d*(vISFNEC{0c@19Vw9-Y|fM?cbDg|4f05TA*1B{&7NpOh#Cj1{wjB#&v+p zMrs)_<9g_s!Orr)F`XdD&^!(w36bR|!I|MUEpi;7)Y1^;F<>=;P|pAg#fe)2zHbZ= zO@m}x$h6qUm<^xcc@ke$n!5D!pr>SEiNV842OW-Xk$L9;E>;3HM3$N(SqCK1A>E&n zcRn)T4Kj1E**Yx4>;-Vs$B67#40ujeo?uY2!WEhI7GI|vfGf-w2JcgD`H`0s2ry&P%LTMa1n?mmuQ-7edVx=cR5k9S(_p`m#9e-w$!sAGzp0PCDPB?{XmS3AtQq}Y(!mx$ zc@ZG{^&NGY;XmtRk7>xW+#EBYNaLtu3a8X11m!LL1p=CSOC{%OMBu|rv-ZK_ecfz_*?MUYw&!6% ztj(6M7n4w|SFm;|<5$dEe&$WaOSjOmV+cDr9L=HSl@+!mg*9wP0^5eKdz%@q#j8Gl+T5@KJTkmc6H( zGPcq)>W$>W^1oBa5^Nx1@ivy%gQd=~AZ$6RSn!?EofI=d#&W&hR=-2oDN}dJ)-`9a zromukUj4;kwu0@Qvs@Wit}#}80d!PRik=_X%~4F)7z@1^44JjDb5=XcDhDf`GQ`$` zuxPyCOCQJ3KtB@6BzSMJhZ8btrp@v)u5`}2O`CPgj1P;(#swrGXXeIa=ElH*1!L?i zB*+i`nI8PlZ?fdI=5UhGJCGjEj&1tA*X(*LE8ioad!yxvcNZ7eRp;{3IjL5z4yz{@ z=g#Hf)#2H-QxgAJ5%?=?u8Bf%O_aCS#CJEo-|cPmp4y(%>$r_xccbq0+(vUF`7Yi1 zeY^eL>gvk(jaIGMugAKp6jm`5Mo6)-p$1dMc&;j!R~JW>>+6&A56;=eab;!YKUAXS zK6u@>Tl0i9hUh0AWMaF=mFnTisdIAey#IK9BxhT_a;lYU%-;Ehz;J$a`ti7Oyt1-E zf1=UzI&QDwx2QdWTnunW7az}2JAmYSfUgq3vrxkP`z;EfZ%&5bg(efh8x|B+R(jq; zyXp2ku`hK_RtHBHXJ?1b$@_v?JT->ZU=Wq_k7sHnW5w2#7Hc)N=e+4?XtUK-x>NdB zeags6Sk3bbr*e9Fa(NB7pPV!38RS^o<(#Hwvi_<>Wtwv41PKPFb6!q^gpg3o7_zLZ zb9Q)s_yJpFaZog5#>zISL8qZR)gS$=Lxq)sO+|$8m&8V+i0Tv$x-F}y5f|a z;(G5(Pxu{C!$^eN<4X6vUVCq2YOEYQB(Q}!;R2A$ex+Ajw~ z3wAtA*Gp9t3|SY<(&#o(@U!2jrz&{kc0I?xO)gvWTepq7=(k$8SI60Su(A^HZVZ8y zKkZi*I2_4R(szBrC?2S)<*<(j0!!Vm^{^I6l;>w+-vrH{`NVibBkJ#0Ux9Cab$~Gt z3rvHf^S%0tAAer?kL;k;Z#LUK5Ib7lTk$Q*fTyk(6dMM<=jiv}OC{(0-`liC7gs{2&VWpJ@?NMbmBFIgb1mbmg3$ygLFl|Fv>;4elMESH-{oZC9k- zdFs%9JvjxRiUQ-oqwdw31c`#0_UcgZM3-(9#AB_GTmaL<7){4|i_Rrhz*>1FLYe** zJ3VR`gj3iIdwT|LqMe5DD{J%Nrl$wJXuILx(J6$#hJe^A$Jc+0)8$gKvWX!w4$ye2-D z(Kr`eHRZ6+gOWtVQBs#0QYdK3E>sAbQe=KuzX_#3Vw6GuATyFqM)5e2hA+}mX=)!u z4V-WF2B`wv=DtKCTB`tRblgNhMwB=x5Luz{$7GnVnH7qUhIxj4oQWFkMi>5w6;e1V zXP^<5TFPdn&YTGt z$WB)@8=pLJcKz$o>)rK|xOYE$qTTUtn%+ZK^t;4qDjcyeOf*_xVUmZmE-u|pui-YE zPomrQYIth=i<$v98z+4lLzs4;&8|oN_I&Z+Vp!mi8y$@B))SuFZFrr*Jl7fxvnk$= z>H}J(q0E_6Z$O3DtKAcB?-87=-7iPG@+WavgDFSK4!E&3aqB{HcVK!;Kwi67sZCVJ z&9FfXXF-{T{1{^)4YtV+_V$vO*uY4y9@VqC&%xSI%|4IRicUquTT<~hANB|cWYhmV zw1IWEUWbIg5e-|PNy{@t|5M&B?MC!JTcw@dT>oQ%aAuDqiNo0?G(qp9R+Et$pX6$! zA$j3C9#V_mb=)Qd6L1i2s~1(2Fb@zity%1VEIf`11z^SQ#Npql6Nrgb^B%lbkBwU5 z=1IKk^jp3-?!%rZ3iwSrGnR-TeR#w)xZqT5l|lGeMo7K`6|nBTV(sw?Y^FY=b?=Vi z5{YRxO_&Fkp{=$)Xffff_^@B44}5^*%*DWKnqh(t2!=@J%kI6}C#PEgm?3vC*KFE0 z50OriT4Y`!+$1{JO-gQ!JA4Zji_(YGWZ(Pm4+Rd#iC7ag30+(et1^tcz zxQ}WK4k?^UJrqhX`CYMK4)bB}2~7DogVCIgZr5JA5D4DOrHM!mDW|M>U)_m4G_}iC)ja{<=6OUOCA5?+iwI7w~*C< z!?n^FaB%ve{r`3C_d7N3fARA%REhHG%KO|PL(>1ELiDYA-{^{a&m{vCp6Xt^tvh_{ckzl2T%2FZn`V!iAQJ(05nB=*=fnBOBgYBp^qsToBhvT7uLOz& z_wKZS*xV4Vo75{`e z7%CZ2g8_`u2H&23M6WlV*V3yc+-3*M{se}BEQ+*{SVv_Hf*;J`$KM_3fls9+)%o@C z^kW4~^wDY9YCm4dBj?@Wb!AjbVA)G4%9KZyxxTC%jckYtjcn=U?DEt})to6gvQ2of zRZk98v(CtIhKpxvy_~J}vNN)Eo~1pa6kQzssv&6h?=3r=Nvp$fgaSJ*sZ9z*EgY?i zjaRRL+9NyC_&BV2S%wZ$ffFvRS+hsb56$i`(DcjE>8Dug&Cu+t zn`r@HLj(7(7Z4hoS)sx7RDq-0jsPM&!+n?#FzG>9JUyhBXgq2i`OGjQFRgXkQACap zpGz&!9LzzbiO+~7`2Kq-y6Tk}KwP56W2T4Nb}T?%R*AMSfk_8zGfqu6y6w>bw+0)) zeO@EB&&85cDzx2>`ye+5FeQTLg1<&K^n#&#ctT}4q0$DwPjT1^F4|m^*wS&= za<(L-VY9yEQzV&V$O9+;#TQ(zAvTZXc{NLIj-oZzHWELUjC_*aiyXXT)KMM={cW66bd;D6uk-~7{q<2D?SNWb;XHAME+3O4AVq8FFqRs0*Y`tMGTk1OZ6Yskmm#w(%j_XyId znjZkhEmWrPe}rARDPC=G>4H2efk*lQXGfsl>FT>e`{MMz>$Ln1bfwyRmHgkWT6PPO zMy!ta#T7SH`y8|b2TZG-NL@7;}i2kpxZl8O1@W z#|{{XU{3liOdQZxt6RE*wf;o!ZyGJP^W^w#x*6-U&kt^Qs4K39D-UpRz^9AL*asWo z(4y2ahR9O>V@?oAdH%yk#AkY*@#yDSj5z;GJEhHt{dW^L1atfEJWzm7&oBdU-Sc4Z zI)VkQ^Ry=3c@J(&9J`NRcTN1_lO0X`(rC5d*(81tfAjBK;>@k%6#PVXUUkJT=Mlgb zW#AETMfc*}-zrC70PNTVF(vANaxsc-8&-!=du(f*U0%m))uw!d5XW_mm_unRjykl7 zKLdwr9r&PX6uySoNLOxUF=BaK0ICuHx_$Kl$DP!a2EV@zu_0!reC3A)Z#t~Qh2-50 zn>`7C*YmR4I1ti}J>qqQ!F1`uptNFv&oxKpfK{Bwc8~RulKxA6py&7<2SHUDcf78# z#s<6?LH{?mwqyRkJLT=1{tp1>RA1-vpM9ZwR`TDwld5xZ{SbiSFAFI8?ORQ$=_);n z1us^$56nVOjlXxzQGm!eZmVig7tHT(J-l8VlcsN1>;nhY%9<*jG!-RTw`0 z2G>sz6pe63HO&u8`Wy;#EubqQoI1D0G7uthIWr6qyJ8BlIXv1#WMH%zbF`z@FLAVT ziuO`zz=TH|8W`!Yc=+i@YQPikFroxV9A+FNh78l%4uiKHPl&G_EX)S8XU-!_+DT^K z<{?*7O!bf-(pU!muL?T776ey~XgElYxRM=pW#Z zLPs`@m(M_}trRDr8E^bV9&(ObedseS#dwGF9BKmJzNH`$1q^3ZANJ}Ms>@e+`1UR7 zDqaO8soW&);S7@kH}00hi)@Q^c4Q#&1BenTnwKd5AHo4(7JnKJ`r zg#NFz1!Z51|I6(^nc+N6g*gA0n|}x?(i}^nbIs6_x)tH+OUSe=Zmmr~kSCUvN)*TK<1z&pA9lPN4!w zEEyN#BU%8m`Cw}fDhEZt5AkoK6#3Yb7J?-xeTHaX zj5b0__{(hU(XxH+nK_pOFYhD-ft36oSZ;k~X!`tLX*cTsv$?gC%m1Nun$?d4|IcHJ zvT}%+EBEdLd_ITh1Gq9Bh7rF|(qqRxLph#G zbsysE^-~wJVON~AYUE&A;t)OgB^0`5GuXkDxOySpH@=YAZ7yJ}(X;V_!)=O?|r z`3EV%*W`M^;}TcDyoVbkdr_yZAdP*Uq7aijf8D^n6ApWHDWesOYaOdtUJrWoJD+r0 z2v!sg%j^(KmB&@1WJ?NKET4VZu5h=#nduLOOMS=dR=T+uiji_uluZ#0I}m z8EjOvq>b&Zt&*;HO(BJ7NG@u&>RnPx+`|Kw!Ze9S9l?=tb?NTT1J>2WZ3lgR_rYt? zHK_f|j*rNW4-e2g9PH`#&fInzFS-;`=#hd1RUtk|1pbx6y?4LUB@qJZuvPDP4S@(* zUx48qs7CstfI!W9&XiuH*8e9@#QTDa7f8HTdQ&QHxT?nbeea>Uifcv`bSQk!2)d(R zFA!b?$sb0@83RjNnjxLeg97+>8~;M!D(fS=w%YfkHngKuB)6^3YpT5ko4_C z_!3Za-!u=E6W9IJStx+=9qaLMJ=cw=>C#f>D5Q(_wl zW8JTsE4K&1xJ_8gK~1Sd5^@2=x$PmX_p8;LBA|3g~6-?KV^52_H? zcv$}G6k1b;D8sv-{ATQ?nTCFgKC-|32w@kqAbwF zYIZ!Mo=wifa#l*CXNwPBPdhwXl*_e(oaSkYe)X(XO+tafamwr(=r7q`9H`} zoV-$A{-aC*8PtHo`M*+Wrx?xuy0yDo&iTKzYdA@{IRAG7z0L>sU+~g!?_A2kx@F>~ z0m(WO$2T2-y;Tx^?35gAJ!yo9-f32d!Ai$ zp{YW&e`Hnk1|*Md`7I(2nko?SwX>hfd(S58<8kG*Qmq_wdiW}$$6s?2RFfn!R$8V? zRRP&>s76Yvtf#;Kt}~-@bDBB%wxA=d%XTR{8yC>A)y3PlqV%R%L`?K(kYSnA6{?HK zlEfCl_Mf6;A-GyDy{4q139Q}5#(QWkDFv9!6sIDUBOtR(Ekb&vVavzl7wKeVv!e^U zosRpIsxU$~1S;WFHB{zIqes?Lm1#eNM4qf9q>KK+D;ZKgboZYWb>diJ*L!GN&jVc2 znPGwyGx1Z11FDv(7Z9=&r~#V>%5)hv$iK&NjIQ6GoF7)$se=$!#=@iY!alP1k;$R% zHIZ%_dS4a2pv!^!(X`j;_?(`=zX!7JD7j2k^ z8%c2!c%AI+(LN=tf-bb%D^yEAtQl0nFP)Q9;o3gF9~4$sS6?BuN)ah+h^CMC_kT%O zP4#J?h*EjICf|v5= zaIzxp=lC&{oJiAyg1H}|*Z3nXG1fQsK{EUNc}?iyq3Ei_9Vq5?Qlp4oJ=C!tE#sS& z2ub0n?1cBKjGOV6jRO8{fhxfLk`f{jDJ4xc-s*8s*M7MU{Cw|hPt!M|lI*67cF{`@(t&PQH;?_^;?cXX zne{qPuzgXCzZ$ZXf)>D>%b7Ho#=6Q7(nm?P8D)-CDwjA>W#p-Xpxg7OXUerhd5#e0FM6g|)NuvT33}nxok#(;%fER&Y!+6E;nv z@3DGBKS^Bs$WwC^XS*gq5)ev^LumH;otDhfOU?t5j1din^9OURU9~Ux9TuBq4rzo} zV7IpfF>JadXHgPh_!OIe@oR;}t#==*4pJpC3r{b&1FA$P{qTb*%I5}WQNI;1c}`Da zW10mj7*tcU(Yb*K@wNM=0^z5slpvN#fo~5yhY`dGcT^tvP$Qv4<-7v>;pymF;jHDn zJOfIG+Fz@hpSmS}p*96}1=-$dItvW3(UV|dhc;T|%86Xj5y8!vw+J+8fj>aZi$dnY zv6;S}+i33X4L}%1QD)E%$fF=&_-s>ur1yQgb85K_1P%_=L|COEqpbgWadOPbYwS?# z>HCuVeqfJT8%px42+tuyi`uDT;OG=lk1jiJO=5KkFNnjF$PMZlS099(b0*QsQR4r@Zr7BDy zmj#o^`v{Osv^D2aIVJtadXOpz>d`S`K#idP<L^9ZG-6ffETjJ~!N^t=1e(0>c&C%BnQXSY_A1 z?SEF!>+}J`>Vd}aAvk(WD9IV$lS@LXH8xSp_{2OqsW}39fD{2z|9h|!_?H_(w=!BX z6H3|*6!!M)S-zI~<3Kc1HDJj!y8LjR_EYM@0eFX2(U2Wgh=CduT0O`f*m?kN&V`oc zon(hV`t$#D19`bYJyf_Z+IuOx8*%>cZo%0*9RFt<7rk=-pOoO8s90S7J4WJkn9-5^ z=}Eep;_g+aC$3=Uexe(AKhY7Hr-AAYy@4kpnlq^h`t{_h`VslcDTBLn@jk2xius?= zrI}$BhMxBz`PN1qDMHbOKY5xaoS0Du4mw0>et{01+yz#?Z+G0g2Uj3PNDEfM0#bc< z?{TLq_8z&y$X5ub>(=(0ErIY~MLhkqg`!>)`ZHxKEI7`G^N+X}#tu8?mpFJUsHp1g z!_krG@*Pp<-g99yP-0qe&hMLJ{vGZuT3Mi#+llq2=ib?zK!oJ6v&qVzskPTh2ANTV z8P)y1oI@~l*ooM`0B1D~tluKMd~m-wZWC!5=#?BWeWJt-@NVf#lZExB>BEZKZ|e6X z^S%Yd3BZ&DO>Lq$plk?cI0$M{B|ck3`+=x&M3X|42|^-3T11 z*XWOdYm|98{;)*UqB>gBWHhwAG$2g?(%J9B^FZ5c8o+;#xiUCgtRaV?hrDJtQ$u z;qJhEsk#TE@zCajC5>kQ$}0B;1ieBEzDfK@rOi@JY-CL-S5% z34xUKpDa|GNePTjDQy5F^#8d38>Ro-yIaLv|3Axh*KMbu|J&$W8_|P8 z{Za$UXpcvM9cnBh5|(^MLI96<8uG@$FPakjP*s{g2zIM4_{vkMgd$%7=V zU{quX(mE&8kkJy86bF-gq@Zr>r>xz|r{6tm@l_}Cj%&o{J0wR$oqx|NXYVRk=CZSM zc|jMJBRHTp<1_qs2>tK3{7xN_5$jIZ8!z#Tn$IZuU)+txe<*Ej=JbCq*g*9E2zMPj zjl26EdjiA6yZIXbY#|^k?!Y{Wck77R*+52+*Vp%68<{)U0355dO_kmVWj_8J42oSY zc-(+Wx^dH|d)4qq^*VfI_#I_O7uUG>3v;0-P8&5u`-E}sSFgjC)zW%#T@=U(%dOG9 zdACJ34QaHuxI!;ZPmU_*Frq5AEs6_D_ZsN3kqQh-p)`4CuKS(4jYxR}nj{3T{Z`yBmo)E-g zV2yhBq0#O(2Yz4D4=L8a?Khtu{7(BGmwy@xDN;&)5-7C5gY*BE%EfZj|7&Zjyp_v; z^FXPv?*_s!|8nwc1zhUsA7>X=m%rd@$ccUlu_Y2DM}HYuoKD%ZYaGouz&S(*Kgt+5 z-G006!?8>|^2l?`I_GqV9vp4B8PBdop|fp6|CRK^M%g@Vnx`%Ev~8Yt%+s!UdP9R9 zgzL;Ngx%!9?Ucop?Hu>o<~=%{Zk=M92xfv(h|UPP(Cy#+6G2fZo&tqc3G+xayp(Lx zC?1KLngW}|d{Ms**ATkF9b%Ahp&PfeJKpC8b8`r6ffzeadD%c7}43fF4Y$l&z3D(!#BxQBc0 zP~rZ|>&Obx$wbSO1Jtcs^FqWpF6QfInPJ^%eQu{}z2n_stq|+qBJ>FWj*N+-)TCfhdtTo|9g&&)>N(yE&!+=~cX`-Y94V-yhI(0Q#w|;!- z?8;W7YEq$&5}sUxQsnS}Cv zp!ryj@!H59ij#R10L-M)6$eF3-(;G?>`|I}kde|Fya{5pabK13T;kwidbGDkEjs)U z+1EzSP1WiTtrqrx4n+O4YX?ie1IOoNWJIcqR&Qr(_fCQ z62H^mqUi$LTWS+(c9fAtWMT!{y@Zk0a44H1sc6!PKmG}KCK_{3ZJ&Eh+ zp!f7O%wa8$q~P39O=tqGPORWN=6uuWCJaQ^xc8c%u(&DMY=R*rm+~LPo!5hledIj{ zrPG9zPV?^P8pG+v?=*=AeDqsC_JrH-`G8b|!i0fdBlrn%xNyf-tS&}~FoH-^3?|su z`10U>LQ0;VKqefxapQsV^zcWm<=>Z85KoDrsj0lKk z;5&la&rYupvo(n4^SQl`cxDGQ39hgjOoC5NiDA8U8Vn*p$^({K9Wljq9(bq*w@26) zY3)BNh=bJw5_omVcIe&oKh~*hxFP0G3aez2(aZx4hc;5L(QNddf)JYU;A?sWPI-n? z{J5rfhe(ryPjJ{FoMr==$vRJt^2jJeely#rn}`-pK={P!gz1qFz;n4$%r?-RG#m^? zr6Y@K-ZtGkVA7!S%!|lCW=@Sz3cRX{_uCEJi#HH;T>ZW=AXyP)d!!YPSJW>aJ4rm)a*UlVy}+6nfIIJXdH zBMKldB6)mD9AJc(TS&u|J7lbs(+;L9htiAAPSdUd)Xtu&y?zpS;mT?~kUq-DX5tky zkb0@2qoFN2d_c)<-n8K++wOJ7satr3uxBu+tOkRji4CJDap{N#4(`QZii%+;QGz^8 zBi2r}JEO0exrqznsxf4vT2yc%S5^-NnU1fVY_s^|L!+nWFR2U1@y9bwq## z$x{~qf4jK)`{C8a$MfTY5{{BFneYywfZLB|rTNY3auqj?~O#9F)=k#fQd@mzK&pvMX!_5KksfY&E9JX8OS}7)OwGze} zYI789qb8zKLdcX8P>9RCX$0rU7@<1J{$TFLUC?a-wVE~6V*Qmv(v21j6iE)*s?kxk|m z#xhdGe`|mQ$aV>1c^WSHNe*_yUQkWLoQ{vX35y~HN)Ff_XN2V9z7(H*N@UWkxm_bX zv;9Z|BuCkLZM$ZqXn~m}y1xNA9js9UM}3?jB2$6Q4~;RT0<|pp5}w?jk}nCV+M{EG zk&#o~WVBCYI)o?C&+|MOoA>q{!KEyc1rhsb0eXr(0xr>$)^*D5A@pbcaz6754sycUnhN)))3z=ke8Mc`ZJ zBj+x8?18mw_j?qn5*&;PniW=o4_9`xvv;W9MDObe1{yW3jLk+WWbH=Q?ZE-UxD?6( zGP4lktmypE21^UOdbso`Gzn!%wMlQ$gsmsfO z?oRsGNQX}Ine#vg$~p1{i}?e|DyaTXm0lX0^LKCm@!fX}52aL1Jt@NdaffG5;gk1d z_YX{!PM%%mzvVUkM=p?dWUM@o`@Ryz$v8)DDe4hBMmuQ2Y#c%Zo(?8@*m{EQ94^U} zyW4Hy_PAPX_F(0g?6GV4d2%{$4y#OinzQ$EVYtBen{eWxoVacq`6by|b)-{h*wB#Z zt%`0=IA3rFW=H?714--_NdTG1Y10xp#vMME?t zrbD-!w--}}iz&z`jhNC-`M99Z?s}h*tcgur;rf`KJ{~=U0iagtPhtl72pnEtSFWms zf-a>TS>fZRI$?iS+f!8-w^_Krn`byOaFMt?nq+ZKgInC(|0J{r zw4b>hYxwQgu;(vd^&RRFJkTtbtb~|~j^rgbl0yGyD~Nk29}=_Ez-GAq578fXqVXTL zw~OUG{zDqrPFf~e|7Y9(s+HfXY1Dwj>nxo%a46PKq7=;CL0bYW?HF1?rM}vT5uv!Q zPZw4CL3=T^qh!eL7pTKnIVt`e;G{{%xGh5rZg`&$-Oy0kQ*uA_>Oia<*w@#c(ATWD zZ@^2Bd!0mb92AsofVnC(u(ZaiIPLga+bc|0S84!&&OIzIJf=r91ZrVmoF+lTjxN?y2JhgPISq z3tG@}K}R8X2s9p~MG=-l5L%2|7eRHPnR|4fs1dSHNJoCwaX?uLI|iJ`U2z8uN1GlI zSgO|RBJ}b}59!=K!H>L!N{D#!&?aRGwE`^;1YuU4AUvk1xh=m%H|)u{@PJrLC~|Tx zK2**tSBIx-LM_&{IJ&AJ%FD6%4e8%S^_LU8Ifdd5zfVua`9)Q{s|XZ1K1386YUJWv zP+XYz7guNE@bd7gD&AjRoS|j~pDOgqgXU*Mq9)Uyq*(NTqafF0yPhXY_eOLFscm*NgF zEo3e!S!Q;(exgH;Fr-;b#c6rdpqxa6j3!;Zr~@w$O=QWnD>LolSRaYR78Ddl&bno3 zFm~PB4g%`AxP(JST}5vvwe3b2n*siH5zIHn0@!y$ru=aYv1nxZE+uJ{G0>38$nc$z z5hmt=ZA7p9;2`4bP!C?cLC0m&`;0WjI7xLNNv)6P(-ZbA7YDQq&4a49utI3tO&1L* z+d|hvv}CG)xYj*H;S0i(ut0>0x)MT6Bh&&^x$9((d-N#O2iy2mG#j7pfv6ZZx-Lu~ z9xnBR;^6Q`cx(J054h#IpD3`6j)Q~nFEUsTu&muc1Z*igMr6%FC>XImj!*flUAyra7soGc84MZz>E7S+zlhec< zzFuj^>1m^6nufwgjgd_Pjd;xE51NwkREG2vw#e8W^v$3*%c%yPXonfzq6W00uoQ8< zi};?jF4octZRo;FxsVhmitAdjTQq)|MbNdhNn`^7n8d3Ma_1dXH)chFts5r8jaSMJ zM76mtSwbU$dt^7w&pkL>Nb_c5bRW4}s6OuPu@1=6gCsRs*jdFzQM7Ay&DAwdy+QQ7 zFK-bVi{9$LaIh(Ha3H>f3(zp5-G`=M_@Zo;)MRi|kRmh&FraVjoim>S$YBgybYuPs z#+U?Dg6Fi?X*YSDk__gfC|n%mW^t#5HAIP~gf?c!5%5!^4Q;IHV9luhM`KNx%(9){ z!XFA9s?U7fRDcj(b7~;w(z`FP?jIBkZ68cx6eZC_$==mDq7vS#zu@?p9(}W6KLk%R z@3rmZogYkLikod#b0{az!EhAY+d_3M*&wq{NC0)$f_{pf4#(TjDd!YyN$Nc0#X4TU z(erP_I0kQO)lf)XfGg}#eLM!kKkZ?4mtvZ1FSgccRnmcXOA`T%O zvqI1@hBO#gBaJ1g%_4Z37FC!G4q<&G4D57JXzDOe0iQ4mNJ&Hie7L(+;FKPgi6sX^ zdbNNr_?eHPwC!2JF1TKz!Yj$G%Ze`%@mJMMs!_UxLOsm>PGkzrW|k0-!yUSkOi;G< zE`Od70;%o4Z2xbV=q98;Puuly`)_e~XFGQPbElNw|4a+siOLPL|FZYS$>r6_*-4eM z0*$%?npB>2{Y#YrNK)toY|m|))3Rv-B@(RY1af&@fF1v#D(4gduy;2pMmB{@qx%57 zK7>`$?ql@x^3osWihS@XBawJS{C82H5cC|f|NmPRaKy%sTNa621T=@9UE1`|Nl#CW zBdre11ou!$qcGo^)Fz0uXK@$?iHQkjU>ps-42&o-zZvW((hp@Lt z<6<`DKp@$sfcXQrf~Y~N(|g4A3I$5Cb%3Se`NMdnFV;4FxDI%>D_tl@Vy_rr*0AWRg9cQJ>Q`z!#*iu0k$pz3Q`re9LTHe|cTjiZyDkiZd zdRtl%niRLCBZntI7`b(M0V5Y%hJ%sM;X=3qUE{QJs$k@| zy51RPY$PFaPA`rQ;nPH2N_q|3FPU|}#lZtmKKXrZqa-PKjg9~iguna+lpoj6=-TDC zy0VJ|4{%e!!GVMeSUEydJ}CIN+8;#YJ(;=#{oSkz!edeEcRG|tL{`!b*3h7|kE+IC zS4rdM%>LR(&XQPUKMbR1l} zju(>NK71}R01gz?ZN$Iqmk1f_cykOo1_`!h?;GjsZ#6bh@E}oop>K-61x9 zRSOD!+aW=_ArROzuY$s4syjkM#lw{QE<&ygnmQACUXx~IgsxS4Tj4;O*42f>X!B^n z4nH=cB{C}WSXnbC9THS78kNE(oRFr5E9`Wem##IYJsthFb?Qax-y(7FGA(t=I-U6|H| z{rM#V>UZh1KXz$icb8W8V_|x(`I*1w$7m~Ns`z0C&B+x%N{KT!-H+mwr>Fao>I2*- z8JKrtfYu_WQ&8JRC;W=|tV*TAs7hHxc+jsP3f4^1b|mWtme%QBvSn(y(z@JJrHO;7 zg?mm8XB)vAW9!V_?Qzr0Ktl>>FWcRonSYY&?Q7SA&|?;^@Z&nelMn_5h_?)RP|whT zx@Wmhhb4)@f%MXNIxy_hHps3HB(6dFib&Ln#}NPR!SE2FCeRS8L%x|?~#h90PV z_j=G1W=?gPMi#W0>nX_rY2?3np!IB>kFfu5?(A$w?tgD?A|y;M|78R7SfvNZe=`4H zikuHg4m!&x_r)-@2`?+NtyxacE7Yb=@5uSjyVJ;irlIwu`cCJr#^M>DQlzw%*~v~mVYxR9ED0u~ zQ4o{i9A?H2LS_V+gf5b)Bht>yXT!q^r}@Yneh}z8Zj7T5sJEJ!c>CjZ1v$5`4v`J_ zvI!3U zS&sUDBL7$J|CzjCQ+}Jw|Jkwp6o+SWK@YYAjHQ3@vSp!6f>WM;T0eOr$vfrI&~$S*2}Tmm7Zmm&@hdt*HK|n8*Ls(3|allh1$Y zfMTl~hsFJ~%Prj*AH(jw{8*pTu^woCaFc*SCvkXp_Rxx(fURs_LA}x30Nqi5e9HJQIS|cyD6Ny*@A*y>zV>0YQ?%)5t(yiV zqq%K-F@t_U5K>MZgDWVAi$-y!Tqt+!EL}VRcv1)UX4Nb?sACgD8N@e83R8CjM|>W{ zgsdPg+HY>BMcHz!$KYkc(~5W{jyY-&LUnbNdou3nKou2ezUuxOUA=iCrPSw!-|r%E zjdZMr-`^`8C`wHhDlBdfd1xp^9A~Kc_FMR5zuHjhs>EO&|`q`L9Gw403@Vtgf*mN{WU3L3b|I>@4m zR`B0H4ST1oZ!)b;&mmt?Mg?;EwJ~>&-_+@Vs>vZ)hBV82SWi6a#ZLMnubd|tv$OF1A1?OH%+I@>k@OoR7R`t6#j z+2n01HyQtHqGAm=5^<;m5fP`c$#Ar{th=kqnpC~IIRD^O|G0!H$>bLd4GK4!BFUa@!x&7-f6Vq1K90z zT0@F?>xp|@2Bk~=O{i~?MD&SdnkHTPB1x1-MuY>6m>aI<+hR4i3Xer)KX(z@v7b94m5#LnXw0(vGob z#6vwOa0zn1CbS&fCYO%1#y?ff$RGe$4HUg8;w8q$3$N8jRtcGpM~0wKI~LcTr6v|c zr?kdLF(n&-_gq((SE^c^+P5;(c5qc1mCDgdO*koyr=Xht-c)71ruZrZR?0Br!vn8-zy{1`3@ba{zLa`vQ?{5cY!NXAr9674C+> zOD<3r2X2W*S*%i-v(i}jP3YG3`T=gQz(z7pNZ~)Agr;t_+E(j+f{R0dB}kWy2~CMo1N75Nhf|H(>9qdvG;_=~JW z?+j5nR-~yadOgw>R15g;pSC7fR{GD+;ig9X`p3$~E0`0a2p$H5q&_O8#G3TxCEZFm zV!8Gx)SAx-EC)3b%8)RkjWAD#h-5eaghOv^94r69{*T#?B5!eicY9<_8gBK1{VG#{ z&q#Bj=qDST#YLLr$aLHV<~9)V&3nMckc86Yc`>mkS?kaF;A!hqH5LX)aOxn?4ffLw zwgEPAs4Kmt^~!S2Gw0;&^0abRIj6iK32vQ9>g+YhV~qz8fX~vppjRkWgSI+vqJ|>K zGr^EdOJU@l&geq8JcT9=+cr^K(OokE^b$ARM1#{OGy8(aTZ-+^5SDK=y3S3b_t=2x z%X~0aZ@tC%%*?cFIBT&ygH-du?n3i=Q=MEp?@p?}oxo}Ox^i`LcnW`MTo{PCODF9s zy^qqiVQ;0Zbq&rFB*v~B-Y{b~6WSx=wPLnK*6QJ%FlOz^;1I%ha-8S*b6|MGj7Z!k zX||qGUq|aH{Qu}Y-k1a$vx()3DN!c8f;q>IFat>~#DKCEe7K8Gew0J(Z zd54Iez554treu8{4cICnBWv2NnBb8Ic6YW@Ci;O&&}xMID#4_2Cl5D0|FMRTk(nI* zcJ#~Pm0gKL8XmB+>ao`47F96Ws8AUJk#S#?XMWbW(L8$PHb%~n(YVoQFBZcwFd*pY z&~l!Z_nH16=OR_Kk~@jsngFy++}!9?m1c1xv@MdoP<2t|VA}89zR`gfWjs|SDM!07 zoIYu#k|Q}=%fxd2hVBdLkYuV<9-!B)xq}ik$7{$CmUOGxdAJ!qrJx&y=8k@owjQFo zySL4FjB3j#mS+a#ZA{aFci7MBZ;GT&>nd1P(IuUwzO{`E@NL8?zHQVI_$u@P|a0y#17yr=e>>G+gz)z++ntV*cv)G`!#~V}g~!(;7$=|MpcN)`NoIl|+H! zhpt4ydMFJ92TC!BAoNGSP*x0fd*m>sp$#stcKcvrez*roxAJ+MD?*J;a= zMSxZ~R0PvN0iK%p3kpiBl`I&>RYFdMjU< zG1QOoHM1MGSzj#2;FG|@`U%j&TIT>CG)yEvR=_B%V$(v0OzXZfl;+1j%HvE@19Sc& zjf^8tuF#DTHp;HRvc>cTPG-n&%dr!Eqpsc$wR8|1mZnACyPdvAq+OmWKt4*sPGnpg zpkMP*KyQ$20Mr&t7Wb*3E4!x2Xa#_YK&W%i{mJDK2fs)+5#(E(ZGkb|c8gOikP7rq z2L&Oz6kCER(8w{3br>`8sbH-%eWA<<(G}OxHkB+LTvxpw4?b{|YW9S1)zid3* z^u0oOkgA?^Ye<@=^b=SOgbK3ZzCO_T|FW?Y!?Egr63|L*M~sYNiO4~2|L(pQWL+s( zLzDh7@~|~?k>jP@=!|z@GI;s)yyOB)5Q+VLar)i<2E#wFGLYk^I_iM+I>nUNAW(Ot=GYHQ)q?yEeoV15PPJeoa!QCi1HTtHoQ==S2g`U%b zW)E8nj&~j(9GR~9M^y0E!Kkzrlc=2Xx(ft>wEACp@MxkqP5p0ir-)>arOoZ#ozm|1 z_SW_{#qu@`0J;8m9%!OvH+fjilYv+GkSQLNu3};khR4i<~YPhoufpsWv9r zCaNhva?TIWD%Y2XM-@w{hvxqT%St*j(mau(`DdZUIjdt07YQ>(yf#AUsT8V#!jQ|t zf6eMnRSfA6&Au7uflLcVp<>)Y6Zs3_!_A=s?H}Sn(p_if+8>AwB6f=!B0tG^W=HAV z0nMXIQs(kCX(tdJMzLpc^;QUOL)2SFy47ye?CfkaWmqrG^(!GL6#o#ifY-X~-50uw zvEl3AuMeu&A>d2FebRz6t0!3=`Qh~ego2*`39ikmp5LXyP$`aNM#rD6oEL|;5I;bF zC>dqRo7!_Gev~F1Qgy{9My0aOET$4LcA3b=%c?3EA1EPB!9b8SH4+5!yqxaMtsCB1rae2_7&80{id z8$-cn^kK6A7!)f?bGw=iaz<=W`K%x}C|n$&lnQ|jWxw={sv$~f;vX%Yimg&nQPjp$ zsi=lR8Wk%nTTy(QtmR;$6jGan#%sjc(RvdtcpKFPiKx;#`rF0T-w&@YKAs;J0!ejE zeXLfltCeHtuv#d7*(?{gExBKADy@@_!6h za``{C{BIUzqKA=EX2YCB6HA#!nuS9Fb38%YwmKuOpjZ_)h+stlS<$ZiyT11uygBTNC1@D*1{kDaNLDatQC{VrJ`6jZ zg!p9kIg!A&>9WPBaoT1njvIL*Dw8G(5J+VmNTQf?_fw;d`yOrh9`#7;(rqKJIkPti zWa#{uuTwuWN{vmM84jXh3i1dg$+XfXI(HrcHYV!P~r$UrD1A<^(X( zb32fW?ho=2mbi*`cb-(92i7Kbr$FOBw76m7hB`rmXPEDGH!XBDefo2eEf9Xw#S7eo zYmek_ES4AW%y~IY9_V)#NlXN*z_36VaVyw95c+$eMG^kvYyJStaI@t%-iS!_5}UsN zJUMbC`G$m6&dzYH;PWk{C*@v+niVTo)DzD6k3s7XCu)IUz_VIp$-FJT7fHE(OOdke zJbPoSn4!#EtUzKm353d-#*LnTSOYneN#_G#F+q<&tDKz4lSOK}V>$}tOs+#-7_-Wm z>|)$LeK~Tb+|(z@nKFc&A%C*;oe*VT$CqyOLB zT=4%B_ibJu9fvtb{(mg4EJOgMMF5^5F2OU4>~|n)f8nM-KX&>q4ob!7bk*xc-fS@k zZf)xa%l)(sTBmk>g(6{F%eotxr`dVUlx=6y*oadUrk-wXlx+z|_|AZQat-c2!>ic@ z2i}4~MHjGEAO(?;CmcZ8d5Vw+>U3k$J~lf@VgS2eMk7b~2oI`?t)4W%rN{kg596DP z*uj#LoQa9bCM1pU5zT?@M-YchMi|FmMyr`Ny5$R}OyD{@0}i5exDpczOYzl`-GLxO zV?Awch@6YjIuV#jtWw3AM?AW;aKt!O6vB-y&1&3lj+e#gC2Q(qT)L$zB0LQNn zs72!w>7s$l8G?icO})i521wN~0VCzpUd32}8$^&+z=k1%3^(ZhF7c6_10jU!*bA5& z;%d5SclCP*z7q{ZFoYeww8wQ1J9s%KFJHnBbH%X#T-kG(%ZnEUv)QXWZ@ze8CIZHr z)iD*36jQjsArY&MBjJ*?0r>H{RlfNq7-9V0C4CQJf&*tTkTi2RJ(xV!fsq40NUS^G z8uhGeNc_Bo_l@1~y$Y;>{E^FaN52LZ-SYN+H0|Op{I0i%xrCGC2^OL5Lh@pJ9~2cjF11ava!9E&HuN# zy0yB{|IdrZpVZHN^Zx;^+==^__;WunuuHoOy;c)SG)8w3wHjYn#)V-4$m_vKVqlUU zqPg^|C_oJ9@$oTY?khkH2A!vafENyM<;bfSF#J9~Oi&0Jg4PSlgn-RB68JQ7p@t$b z!haTMt#OmWOrCeLHN|hI?MCm0igtIC`l;%8#d`JJv?8*4S!X|)jSjC?i*za@@SL$s z0gSOPF*PI8{y9p*oLPiotC;G;wpDZsX6Uj?lj)40>Cnmk4I5ZO)1$nW+ORi_WqqSV zg<0B1)C$D~7tfJ_QfqJb|6Kdi;a_SeM}IvuFR?J4ezcA$##4^I$bZ3h9~{}V-h?yr z1eomEz3^EGZh?rsUjOCCG&2{lC{9;~2=d!;DnGX%QxoUgYB`73h_fuGVz@N?o2z&W z!-m`JxM;%2>>Cmr6QivK*xyTdj4=5Kf=t)(f3+*I5voyoo`Tt@=O|K^bUG&gNQf8= zmsNB9DDjms)CYN0R0|jo7t>n7NB~R_l^}k&--i3%dbb!qB=%GG4sesqEhb+}>Hwut z$pxr1gt2h65x*Ptj&09q>s_$ue1j;|L(Uh|*fu&#*#-AU+7!h^Rn`d-kF!4bwHj!6 zx{8ehzRC`Am8JJ$D--AFoVPNG%*WNH7}1%tQ>he=X^w?AEw}ua-qKdr$74Nfk7Ctg zVGQcEUq@i);SjlXmJm8xV%306v|()Qsr=`t+1FDEWQNA6%Y`ag^TQJVapLjSLBZEvq;^?$H%TG0QK==OPiyFdCriz{~`|4Fug zzVRP1xp|WJ0X001ns;u#8S7a`=<~XlC|&8fx$iWHLrBXfPo6|UFWwxzI(Yx~J)>TD z3Yk>CT(_3U2Qe=0ml=5l>WwA(&4ahBw?7fXl$0UqBRmp{KFd?s?t_kf;FIDZ8W4sq zLvrQ>?*rsCkoWq|TDP$pHvo=Fu>Sn^O--~a3Rcm~*yJ{qXHG)_Gb~E^2Scq!HcOqL zoS~73i(B39hfxn1V-U>bZzM8(bv9Y4PX3?lEGzP7a@7?dTyJva)#@rnr7-xV28WZ* z@gIK3{x2MpO;%q1E;FZWi}-K0*?$=|i7VK@>_Eul!u+niWCs7drw>;t>h5T)-~GOQ4H%tv*zlS*p9BSBom3 z+$RCDo_Z+MlA-<@R>klCK&&YVMPN8ip(1!wQ2uUPAdvu==eEjX-A3q)sI}Bg=QTFfNp-1UM2TmmVb`jT_ z-^d}Rx{w-G2q%VD-y}^{P=4c2c)?!(eR$uSEdd)Pt5y_ffLBtWzY@0$1jEx}dpX(r zSC)r2MRIyUEF%=b6+-%Uy5K@ZG?nl;YOG(WEy5T;q?XnjR~0s>YO^>}q>P71GwBc( z3p+cO+}QQlwg-Kwk#iJzMdL{jcxQCMMWA**)?A+5Mcq2plfHPNTPF)B=wY|`YLN3R z3(?Lfnu4svg>3^$Xkarxt_^r5$wBY;u*?2qM!(A4fB7=lF`$C(szBGAPr|%lE4{0rRY?p@Lkd{`-or>&m zr&;m2+!I*}C6?FmLVN$}{~jKk){b5yENIfKCVbs$#F&3S)Ouy2dZiX-0OQ&n>11E_ zdjZ1n;U5l<58oXi_2w@G3k8FbO^e;t{q4My)?%%)-(yTR=0`8jhUa|Jt-GfQ#eR+; zTw<;#QQko2$7vu3)GZ(dXxeH8NM*S=ysDsvcyRP3{I#47dn6Qh?!4O1{Se%BnK`t7 zsC!N)9;M3*5BGF*G+8m_rdBV(jDYOEPHJ$N-1Or_bzF$W!}1HMMY#5hFDXhMc)Jzx z;dsz>gh)kVF85}b3Th7v-qhcJAnGh*MV?hQnFNpJtN44_y<})fu3eem`y~I0-jFEm z;cRE>^mzZ^Pe@T98@Du*@9iyQ8=)UAo;M1qG&q?6KTm-_-u*r67SE)-}`%~nDnP8;_>cRuiqb>{^k2ays`+t zl?guXo0@sraH}@S32aLsUxRUSzuO&-oqj>rc1l^)dhBcn9$O8%_1p+e8j9cU#|A{X zrtY=}g+qicfUyD7eIo5OSie!vN@WzHOfL^R5Tqb4o>p;Cc-@y<&(&B>kCA73rIHnP zI`Op-Ph$UUvnW`ph)Q7d;!)!-t(3bkj+GT-shnlFD#C7=j{%o#%E9;C(}Il^aR?4> z5=P62w~bybTP)~p-J)mH|BK<8k0D#q1YnB)@8;IZW>){dxw*N}|IbUuKdGPl)BhLX z%AHIA78byr1X`6`i15%qIAaaqtp_M_5&3Z@SESQ_`)rc=+#!KIg4`YRH5#U6XbnQ4 z>@`*1pdgEBWnF{ua=<&crk=Xu!dYxAVD8an=g_s>M2gWqE!R4!_!YR)h9{mJe8QvEBj zYr80jcdCT`-Mmvx_jmVB6`}?VM)%>oJyqK~+1-<*mP`%v5`CPPv@02A+;!y-Ru*I^ z&V86e+}Jg9Ld*PNiJMLtID`24wrn4=eM*9{H2m2rE{=UU*&ufI44gOlvAUh{_6!Eb zMcKIS^}AogO)@=)Jt^*72ic$>0}tLkMwd1Lc-iyo{acf6lW8ZF&UZJoH;o8}ffID# z5GwL^RoHvCP(zJ!jbTGKe}0(W3*4pEADq?s6Li~cN@r%m^1IAhZ*h2{!qfd*ZJzv} zWL?*VGbJA~&ZS*AkfQR_ZxQZK2NDYwsk)o2dFGxUpLZz*b#;ppOxb(JWazYvSeE4t zoiGb;DS$4YYE8Gq3;}lCWmvDV zP(R6rVBf}gVPc}UOrD08l9Zv08)jC>Ij;>4{V+WSSWXwK7L?8tLZP2=C~z`)Cb%Rh z`h47N%C;oJgkH%?;`l;CS0t7fn?$GI*SFdDKNASR!>kksIEDY)UR&GF@PFV47xAC& zYs;g4?~ng0#FYgHcn?XU40REDflgowor(BFwoa@E=4L=1yNMbL@+ll&CV7oZYGdOx zHzdXn7yTevqm(GfBXyxg`n=4`-RZp3FOvd+=N2^19~J(OtvX_P9JbQ7{r$8*OSq!k zP}WnmYC1)CHt3@vKtPQ5QvmZEhHk^=N2EiCu)rGAp5t{zCbgE@&kDhU`lQ#59~iQl zBTx`6;ZiYCrHL&JPLV8YD1Kr+tj9Jp{p%d9Ti<~G;Qg*dFoDFlhdIE^9-e`XD{%fM z^*P2oHDe-wJ6!#`EwB$53LfbQqBDSrAI4ZbqmR*aILwi4x4W>HzAN%e(b(0Z-pMPU5^f0wmou07Du9HLlXe2l_c(U zW`7FS2{0h^2;eYQ$ZnDJz7baTEnpy-*V~|P$Qik0S9<%o+-3!9Ygu*>7-6G$A#fmz zKd05|>eOr8XFkiX*)y%dH{i3)=sp&g3*q2=unjnJ%#wR3G7m^Ts&=sJK02OC6Q-L2DAh+VGWDM8%7V4HK)pfb$Y<@UjT4|P*dWR^WbIDrIiMoN49)` z?+MUTAX4V8ri)Yapxq91MvzhNT^&Qes8~bbs5NjsF*Ww+VplItJj#%E49-lL>q2Qq zA+iKvquRB>S!Hl$#7OyAP%em66b*{4OcTQ?n~d@3YMNMMssMwXLz;S)4JBpECx(-< z5u+%VvTJ)3gpb0;49T;Z7m}SiKUYiNWj9ev$kdUn0 zPCFg3s*6AF0Rm;^KlTLLz&vTc)~@$TiGQZ}|F3MULD-Xt|Gl-nw$T6I!*=Jobd2R3 zT_4Be%ALeN|6MTv+{WDLmr1O@sLg#siigSpCTg;b34xXA=r@Bu%WAB(JO-T#1uvPV zhNLkudd;0x*wEf;&twJW{L*jCHp#aMiq;sQ*TdxJb3h5`0n)Um+g9T zUGH}=P^C8-TsVZ! zigR#@qkj-Wt!9HdLnyv1C=^^Oy88t0X*}VjR@3eIS&o}P?9!9f&{18|dQ`mcR%j%m zB3fY>FTCvBL9m|}~NN-W-hT0?DrRUQb$pDBP~74E|T*awoedxKyj zswi~Qw>Pu#zqVF3wifjNLm-%= zF6T)9>$O&hD|cc578bz87QlLVq09m`lr=;R6~StwmCLwm6~d$(HQFf&y_h7&#Xk3Z zyh2OasA48`aQ4=RVA4^%**QgY+;S%KMiveVqiK5C>=5<}w8WS*moDz!Rv&i&$ay4> z%A4)F!+D2aCUJndBYN-3U;lDgl6s=@_qC{QlbqJps)Ka_p}LmZTC39q4tu4o%R#)9 zQ`dqY3-qNUxiC1#D)2;NFJZw$No`&X3(x`PEO{tS{E7j9LvxD52UpThd648Do2s6dh&IShb_RVME=ybgtFOM2 zEiJejt!V@MwQOwxm zU;zZ0)WuUtU)EdH5W@uyapr#>^#r=WA%j;xy+8ib{_*=C-o38Wj(?)T0vxHWTlVSU z$?4(i+Wu)}4Z)>hI%H3qgcHDl8yIE3elTKIf|@@rdw4J}*m5BkAhhLTvQ$s{Bgkq+ zHT#kd5Uq37^n$p65VxHm;NzeR9j_%s?D#8)JKpk#J;aD7mFI({v-Gmrf#vx_832{p zTJ<}*?Vg59GwqfDjv>j5FQ&j4&KlFz5AQ-Fh)(P#j-j zqyT!aQWD2uXIU1_!yQ){VWU16?%Ip;`Ci4(4R}72u}#)VWM3nt-tMZK>6RPA=FP#R zhKiQ>!OSFLvsNeS4!5wV`C=_pT3 z@gG=}tUQDObOhyHKS_Sm`+DmJCdXrkJRh{1y+Ld2_b>E=lPt|${+q*niZJ*yNdp&4N@G+J`;3`|q;tgIeAYI7>7!|m6P1?J?iX}u1)@->chc)& z_d^P*-x`BoH;0J%e4a|`>$Gp|8o*N5N3G$Guo5JpBVE77CsO*8AA_v8puW;1?Y4Z& zm`BZo8DMKSHkeNFX&v9Oe4f~~iwIvdFBq?+zIC~Ai`>BtAvli>$%H_YC}6kEsivy` zkU5T%qh-=l<->?&lCJIU7A9Q-R#_tDCmXcp_2I!A zmAl95lbbgn6?5LF&VdjF043Br$cGI_=!@2J4v3D$<9=qByQC?{Y$kOR*7u;yt3ZgP?2(^Izk_4*3YL?Pv-#*2bqF9$cluJF%w z6WL)<=f#VO{=V}7pHjrh7?;23**A7Yq>oXbO0k%Z_sDVt0S~;=oB?5jh-Hf z2rn=$$cdAK9D8)Y%Sjf?s@&!QUnlVOey-zzOGLXi=YMAhHtuky7aA3bt<%os@Crg> zqcpue=!suUh=snYg5u~g%wAp~hUHz0;LG=Tk_8P5+*-%N3es}}l6eBedA}0VBDl;# z>^qg@gU~aJL1u$MS^A&RhHcvB*{J_%^550<)s?LO-^SMFBLDAf8+psxj{cdW{49?v zjb3j-{o{eL@#w|%s45Xy`{~D~B!)pSm|Se%BI@57=33%DFx&NPLrCUlf&x1m);;m( zno9Zyl32V;pJD>Pl-X|P4RrxJ+)9KjkO;)>Glr)mxrxjGN&Bon>|QrYaVV3gX}eWw z%CaJ+e-vgOG%VCUTN7eAcyQ}JsXxo|b+`Ya-tUe&=faF|e~!DCqx2_)bCG4eZgxJ5 z+Mu>mS(yrL1LGAfczyKlPd~f`LvUDw@)x<8s|m6RuEMu2W1DSd=}4|%x;56xw9vW; z`9X_LQ*s}V8-VB94CWIjPqu{iA&hBx04u`lvMp6Y9t=5opzzMonjTJ%eP5UTdb?fk zv&Q4u4YB8VM_L_&+ypkFm4tj4K)jwdniufLM670E3JlN(kH~3~9n#{#5FwkB(IADT z(M`5yj?Q<-E^{2GTh&;~KhK+nP|tFvwE0k;C8T6O33nOtSpz+jz|9syWelLt0QYlA z_#l03y+2499T^N+rAZ3i(6<_ALz4ylISftH+v}6K}G!Vg?q#`b!kQS(e=u+MJ9L(@7;b;chL2bWfrx7*_gX zMPwX}SYKu1wUb>&?+OwbTAuH^p`CK#y8p^cOQ>N#OS$nYPp%u-Y)-1m?vS^|{P6_q zFl%K;zys5sk_jB9Molb>f&um_FRis7Tkz)=h{9&>GTYh7-)4E+`>9Q6i!Yg8YXEep zo?%P-<8g~6GcSG37&_YSFcQplM@BfqQr)!|CTO$Yqw7I}Lc42{P*O0D@0p@C!WxB_ z2OqOoGC8Yg;T9K+#V!e*_32BvTx5=RJNWOcw@uW6M~?tCJQ&=m2QBsaUj-_|xWipA z=?WnAqyu=E5&XZF%V7N4*Pe}AyT1(_Qn~9uVdd|G=hu+HVsHG7KyNAKU&-tPao_NT+Y z)J~56dI(AkEGXB_pIh9WIR>(lD+%Z#w@x>vK_r8uLsgcTuw|91praeFZ z&6aV?oZG=X&r@hOWOhJ`nwExDvn%*eA(zluzuv#889LCDlbH{q0jc=yH1!oeSlmoE z!lOwjm-`kNwnJ9MFp) zR;U=%qUyK2IAThi17tv}fv~eI$1h7FQlk3spCCUAa zOw1h9Y_VJc3yZE>ir;_nW@Yt1{)`18w34%*Z2!Nywz9UCvH#lGT3y6{DGA-XRf~Cc zOJBd*KRG(6{rT;i+IPqMZ{O}8*Z%nZ_m6&SBGD?1Fu5)zm2XcZ%q^rcjAF;A156zY z`R1tC>q3h3TN4Mbi{NP@3D^G5E48;L2lU-!P`s#)2p}j0H9vC{$QB~F2wW=%&ys^~ z@220pyc#BJD=TY|=fl-^m>h$Mx&cLWH5~SKmY1)uub2A$!TA!Fnk+4%)r8S%fDU|< zl6Lo;ZnF6898noRLUhgai?F<4IApwpOHdU8qDYmH{#<8SGPr8?5K1|z4-yDnhbBfc z!yONLO_*-56ro_25{>I&n~}AxBOadwM!x96aTsshB~7B54VafNKmT@~KPqtv7x74n zPIQVtt}d<1-#;9`*|F%N(_b2NNBu?$1E0%usgn+uwV_A2O5+)kZnc`cu6LSgD>+z7 z-bt=Tt$9kY4!RdZDwGIVI2?b3j^I3bS|7Y@4xUz_G8kSV(;%RF1F$0L7&2PGhnmxE zrspy-G)9WZ;muNV#4Hs_`VqM`(6EK{8UQu(L@NGYbz9gux;9^>aB*%KL$a=>gysmy z%Td3CSs9GXC?eMlW+%{8&^=!8z)pBc7x6t)bqqugiWT6A=?t*|=s(aQ+yVF-TSrYL zWdsN8jrzUrAXQ>em17(ir?8#&8%<;gsrRr_IF2K>C)hfw7TI-+X*qyE{JWnb+9vc2 zNZOGKKu~_sPt(>7n26EYKafF$ZMY1NOaLUBsMZGhZPHV#f`?cqpoOU1+2tl}_?r<4 z2|%p4pK><<>h%1Z)6fyHI0wq)=tAmPNV$G& z4TN!lqa^U-9MQ!I2jn;T(CJ>c((_B^QsH-YZED2oYS-Jf^KI`*{yOMup@3qtlYz|G z#5+GXTe}8`>=V?erMPZW!{as}Gyn#oklunQ(|p!sV| z?r}pr^B5;^#D?dw-$BF@*V*hbCS6OB-uDcuGYOr z8hSTJabUt4h*#NWJejA_bz{y~CvD&Yhpd3viI5vf5WkzeKHk`@$~nYU(MsW8FG!1C zc!65#E2$hXCe}Zb0|;}smNt3h^%AQgLvWMtbNURrWVoN5ePD*9-WA+L8Vob znsObT%b+D1qJS_T(^&8X8e@5-kwBQ@re=eggn`&WNAfq4R0~9NQyAY%s~Pu#zh~}c z&|oH{zK>4qpcaBHyLQOXaOE;oip+U0G2P5OJTHY^*LY8&oY+o)TPLD8wx}-ze3Q?t zjLNn!<-w2q$zP7s3%mp%`1Q4B(cwP>fzQcl{WACz{q;r?X}$0N04-x52{!ua`~E=} zvAKMM{o(LO;$_eyj~zw@{p2QLiq`T)LCJo*hi1O(H>c5`-^G9Kg93@Z|GyC)>ZpXH zzJ?Wy@6wj=-+?bC>5A9b7ho#ya7=u`o74F3?=pWM5RqAhJ^N;^*cZk9;2L|KHd_9( zDacIlb+^Go6;}-kGu36-qu1CQrLTPV?}e}`{N(0Z(CpMa5e1)q1ZDvJ3cmc%p`}d0 zhk~M$<|QKIjrwWPxA3+4sSnaJ4M0qI{xPke`!%xU6lsxtiR<(YE<0a*V)97iRPi|> z5bF(+s15FBs$mVyP2^Dd6+C(4O+GqLyEu=%t7gOZEmiyh(32D(`)g3E!Bp@@AhaUx z&baGCjVcYfx*PulWSaZKVw_osq;;pjv?jBr;fYkmec4LdH#K40yyVy1^N>`+(#Q3w z3Jr6UJduBc;q@zLNra4?l;1qvdn&!)Ig@1B-$bt~F3j9xW@2OWQu0qn(iJ2XZHqnt zneXPfnx~K-mzQPBYE6y5ts98Hd~*oNYw|{~ZsCHowf*O@k5GjtiPW}Xd(q(jj@BVW{EI~2UT6Jn)*Cw;gc^EW{#!6w*>K}Jv;)-Nj|Iz3C4p9>N^ zU(U4v;ZjgvYUk?eD;srP4IzL;S-GLyDTtaGHI&TU2;ZX#o1rBk0~G}3h2B&$;$sXH#QgY{|7-ND@k9T zyC}T?SMKBkvXG|-@^o*auTN6h2tf7LCFF*~t9IDHdXnS?MR*107xvxwiXiQ`^{oix zUBW}#R8MiX33uCkj)8%i9U5(9a6Kpb*;ilntWj1j?@>O`s$IOZXrOUSbBOqFLivDK zSOlZ7IkXdm!dV2PneEvq`~H&#y|(5xGdh4ye*ah3)>cqx4uTP?dtP-BA|N@j`p-Ae?slLHOpG813b~b~q;is`?1BPw zNWVKbl$kT^R`TZP;PBnaVQsaxvNZe|Tr|Wj&~+l?1nUQieR-gkpru{TGU-P25GB5NKIdS4vW-tE6VJo$eA;PBaG7f7*cHDOmEZy);x2X8(t zwA+J^4JZm$l1`eQQ=1Mg1QemP;SfEt2^uoUdw*EpkbGPk^VkN=j_i7GquaXC8bQ@Rd1^}cq+T0Yyo)nN>l+h;YZWNYH@Gi4yN-=pEh z*VbONc2RHSRh3_|W2konHNb**C`E4)d@=dNqftjB#hW(5{ycglLMWc2+OW%{l!oh>|Ho}=NrrT z_G$kkWBr)zwg^D=Gf&6NNNy4JUeJ4d=MxZHHR+8H%)$v9#T0R)Lf?Sc-ZSIDd0#kg zvH6L=SMV~IaQFTa5ZX&K?g4!EnhtMc3(a5W-4H%fc%1|Tijslk-3spk{Nucf?G_Bp zFM*;6cg*Av2DXj4dp`54THb$^+)0QuJNqT%2?rU0H`SFyUUA4zl=)DUt!Rq#;%#2l z8J*!iE5ryQ$j$A zVq=kZXJ0oM(upBkKr6(~Zm>v5Nw=SOJ5OO0a8>VIs;RGWdV^iOn)br@7bbmYDQwz> zWH#D!HK5~Stf0=Vae^P*wNouma)h&fcjh4?J#F}on#2@Mad-q=`j;o9SQE=!f-f3A z;lgl4KEKczPnh(b9n&3RYosvTZ^7*?$G^Fz=I&$d5l00=SsCCVy;8&<5sqEz_(o?m7m9u^ zK?ZZeBm+}mBiRlKNhsPPI3FUVP$C;i)f*H@AX7!>0#nb`CK2n!E}ex_u?rgu07mlD45B#-86AaQj=vS z;?|p#nHLbLr<=ed1};s|V#4=Pqrhr~J6Cen6Dgq}PQ_w77?=7fnL{Ssb9I z=!HRA#~4Q(gLr^p0Vxx4zcNxHC9-;(Q1Gl(n8|;VnE#4&dOXO)WGdXI`E zW6>E@h!7Mx7-$*?dq3*G5pQspU|?nO%j~=AT|Oi1B34*jo^W`B>%`qYdU}k=*jy{V zUd`VTV{e$k+6WJ2kk(%-lPmi0pmV&5CQGbtjmQ}Z`{xGw0Dxm)ZjYDJThR6dO(q~v zsoTFi%tgR9?(A{q(YHXn=AP*Uwhu-HTpUYE)x#>}lB76YIF+{HZTJxmio9e^SAl$u zUAp5jV=O5*wdR%whao0EJR{x)>oI z`OwlgA^-xNP=g6iy^Y{3RwPEn>{pKLuhriEba?!ylUhwRh`O2*8=$YbottdHZ`0O5 z11n7ErLdg@G3TwwAGbEQtFkcp%RH$T=13YetaTvYfMk-A)fwSG5urseXAwliA@?tr zb1T*b8mA#42WFDS#bSZ7@*mxGW9Mwe%X9JnSY27)$mM_D*j(g)jyLL_{<;tO&sbc! zlMHC#|M6?_|KLS#Q*bENq6DcclP4?Yb7CP)u|;Q2_GPN!rEAuWC?{9P3XqDC_Oo|6 zG1Je=NcL~-aANOvNA@7w8ZtSQQL8JxAu%_SMo0Iw(Q#H+s`?opTGqVZnbA6?80stZ zr8Wl8znd(@<9m}pwRbXpGoTGLYq^q%k!r05Uch2ZD4>DIDy*2mEy%19Y^cq}IJ{2l zALPj&E)Dc88J1`iU{#yBO^#GDFl#GM6;gUC_PUR)P=+s zA}ld*i7X;SjX2%4qKQ-@^|?Yp0F3k*j*1bPAay|yu?7O0F*+3_G6)}{`dyHz5>v(o z8&UK+J^oAJ#UE0@fzP^9P^Tb+E6-l;NurXL*#h28K(!VF!P-ef4xCAf9VX>|7L3Q% z!6u%kFY5?AhrnZyL?PGasON|{*5rD1)0vSyI%fIpZl6Ff0aZVXt@PYE$xJ-eHBF87#MOh&Bs&PfBAs8b~?&46~wecnefQW?1Yt(6&VY7MoGh$DNYf8yCAT+${ zcdt8v1qW9hFAQAE8KaFMi za~Z)8KOn~7_WH`Iw9X{X+}q2{LQkg^)p3^Cwai3;c{(x6zJ{kmMqxW6iilhikkylb z2yR$colSDrZGQXw1?+(C(FsRd`U7Cvbx3sw2wWM57TZt(+(SAB7Y=XxHyDKKfA%rGC-J0y+i&t?RVXR*j1?oO`gWrnQ0Jo zKd<^laF}3f+W=!*V!q-;UgfF7g&qX3MoBWT0e2aM{ zg@2gkWdHA#t!)VVR@XPTw^s2RWPvMdn=32p3;*xAZ19v$?oa-g#g&Ed?;iZam8xfW zz`hB@>n+bF-X!)2g5rw{-A`kF3|(SoR#A-L&%wls z^aQwFFa=zTs3#31<`E1ggils5ClT+A0#KFNbOZKc8<1VJc}YQEBCb2X*=Jwm2B5X1 zz9a5Jn{mKC@Y0J(KI7++4ZD}A1mc8J7DLT|)(|HLu#D;_6;R~&MN23N6LRzsDM9K| zX*`g>*7G85d?1O4Yy*fSNV}se@Bs++4*MenKNL{CcmYAz@JhJ{3$xP6mnI42CT%vT z+h2OCF$Ia2_~mZ2?B8s=ZTYU3FJ;#~2HBk_8u7=TEzKmQFv_`F$Q4n)L|9ZH8YBkONckXpn1=&9$t{S5eo^w5 z7gy-5#Y|mu(Ed!ibX?j&7h+b$Sx*vYQ394a{#co^uTU(^V32X!>(b5Kh?|P$9ex@+ zYg6e#=WL?_7fm|)Hg?vw)`L!)(q>+2MbjRK6t0a4E_`d0ew3#t19~a{v6446voVUT zyoJiBZpX2`uDi&kQeFjwF@A*D#N~|UvM4=y=Km>}I_|i;%R$QW|3cBmu85@t08{w? z&CQk7EdRfTlyJ$)6y9|%pOIY#k#LgV^uFG@fxdEVpXY;ivo~ms{r-i1xDWncaAgd_ z+(`;REB^n|C~)V{)9g_~ulAhPgv?u>c@Mn3B!*e6-O+F_r9;N)P_ub(63PFdsXMKVgmU^q1%?#+gZ%u@+uMjq|!lo}@!VYI8ptPTBg81fO2|;n8*R9|; zX<3!*%0>pDWb1QA+bEfH`F23D)*IC9BJuk}z@}J1bPPB5*Gy-bR}ihOtgfsY{Sf#x zYsldoE(HEY`%dbgKNI3waaRnKCv1}liGBw7r)-oAmb`$nQ4vTujof*i)#K=Po9Wz* z9%dtP9)9ZfKOh4ZES#7E5wag}+189j4L|@ss{5HJJ^=jSZ~UV$*i8<0HbUmnyYKGh zUXUZ;9O)4HnFWCFTUAyHrP>Cs4jny5CN_1pn9Twh%?M&xBGniixb>3#l#J&BTAF@PBKoo4NSk z>#G|J{%;~s=kzgtldJ{b_wV2Qfe*yY1Ae%Tu+43eU~*qVkF4Y$%>U9~>Q5ff1);0-6Ui`F&R3I@k_ zthqYFnQHvsuw*ZJw1+4I#aHXB8NP75Y}REOC_*jN?GGR6lNGy293Osn1oO1xnmN%* z3&_HQNEhSg^$5Z4vrnSE8YW)=bGoh;-OL#Rw|M`r?I|it08D%T*K_f|HaC$HWFh~Z z^IjKqSML4)=@tY)+-5-moG*bLPL>vKtbrSA&KonP04^p!@j8t zhcRnAO!19y>Q->`7_S%O5aho(R4kH;Z{&cWVo-N8M3K}gs!JZH zem1g&`UvTiTFuS}YbIE()mf8~m!J=q>Rd@1W+>_yoF*-33gA;+hkrW>m8^^AG$lSX z+vxBQ0L{ti8_EGl1^v|Q92{ExW3Gn;o~{WrwbmIFew(f_uoW&~5}tE#(?09A25<_4 zZz6PK@L+bT_9YH_L~<)dZ*Yc&CA>LY)#R#s4ZG<+az#*W!ibGRr?pcIEB39XCQVw= zIs3S5b5;LD~*rQ?N8z1$vk!+M4}|rnJO5D%p+{Z(#MuUhMMz6V2n%hTHnsY~Ju}lHpc|E9Ik<<*tU)`L?(C=^hD;wD0yyzW*>40(5)FR;L}H8jNEqNqp{-z@o>TJ07C$Ma7Kq zEKw^olyCu&S&xOX8KYhQxrXQ|m&26lF=st~1Z*ga z%-f)T3G&EKe;T?ycjZr`NMi(J{(d+iiTZ3efj&Y9tzH`+4J+T~%Za*Ukl;Hof z${^?MRzCjY`s((A|9=QHDdzvPy1XN+{|}@eqB&-i zsfX16hr1EV6=X8YR+e9&|F;bz{r|%;W@GHol?@wr&4SqyYSs|{Mb-!LvUaHzutns& zLKDXxFCS6Cb?E&hJn!V=j;NG8B#10f(3<1ED0MR z#WSR2#g#f(N|GNsFhv=Tkhe8OM#|9u3Tt*C5yxpF5f2Az2v`;~HItYZT{njaVBc%@ zp$~`AQICGAj0c7eemqFFmNqfKDW=!$pl_((lOr+zxIpFx+9O@V?-}YUqzl8kB*+*F z+1QPW{sss;)}(nxxAW3L!Nf=sL11KcD+;bS$^-0rPXF@#VX(_E?4g5=#JFecW-cxSOBbcy_8g$~$ z5CODhI;XW80!{eVW$LRniLnh4n~-i#PetXKkIW=mavN!kW)?;(ZGzI7l~#sMXG~j* z_+10m7)vs@x>EBqDq?HClAWSex=)&%!abgywcN={HT@>Iz$B~gw>9_My8CUz{kG|T z+j75cyWhShHqpk0HjK3U*xHap4+%5Tz_dzC-WVvulXikrJ>=U%@iR$VfeWU8^C&oO zB5ofSUBwwdxtngFF;|iXNN#vS*y{qfn%>c_B4>dl95%CWtJ}qmM1we7sePco=I`Z_ zIw>y9flSM7tfKAr7AK+JhpEIMd4*M5i>Az*AmVjr(j=>bceuHq?K7i3eMG-Z>)l`| z8N^$v@K662-hrBVI(#9L+g!HNS`Sm?n?s<~5kI!B@f$7TUG$qcw`L{T2{yX@v{r8r z5^CyV9ToX6x50)#{5+OK_Y6G9Fq9)O?Odk;Rqn!UBey`)C9Ro|9|)E$OzL5NlQ?v^ z5ja|0h-=pu@OiUI99b3NSiVZyHN@0x1qLzvqM=pz(OrBM8(fEHtL8dI+*{Riu$ldN z@xsLG%hgqg*m^oP4AnGwr7c!VGyY|+!Er-tZ-@}5bwg-`3wKs`pQK{Yv6y#h+zLKK zNFw@tPo|EXNqNXc!?`070!eGg9ja^lCelptI3v5zj=p*}Q9VsUjpj=Tma|lI?SSG* z>mw3AJ;WpG%P$Ny0#b`hKxap|K$sZ(L#KO9vrzk(+8+3hy5<<=y5GeGhzFLzRizV2 zr;57~FCJ*S5INl5T-4!CqzmJ))Am+3FN5n9UK1oH`$L!{`iL0@sUec%mmrjej$VIR1UWK{W+|IxNJ=3MX1#=DkY4DW@6L(0n_m*U8-<8QA5fJVwhk$Ih zyzCmX%Fd2Y?C$FA`FoUgr2KAI=9jlzf1O%2FK{0}x&5ICmFMF6>V}6(jzcF+&(rhY z3*hicvLx|LbO%kE8=sBHeUL7&7=$;7Cb}d9yPDa}e%aM$_H<7=%a4BQFx+jQMR4vN zvD{^3NlueJgZAbEH3qhrBXrSeE7@LJ_4Gj#xt%Oe*68+ba&yejMom|9<*;$>UkwUR zAY1<_I3!Uhkjo|KZL1pK6DHJ~;gT6rK{L1b}0j zk!Js*?7)gKevFscS}8BFg#-8u4&brW$l>5gAUJZl6`=(d;RYT#7pyC25j2szb~zF^ zdUjPlf>re;-igMSx$9k-TE}VM;TIkbw-`Rqnj`W?m~>vd1Jp1+J9)eW-DXHO@o;b* zW$eF5R8c;Zc1G>M!N#Vp+(M$wAze^BWo19{@!Q%!&H_XTMb3eKz6R~i(m|u%OKSt9 z3LqQiE0L_I_nQNR(gvAd0}I%04iQw**RTVroMHgqN&ii9VjvdvJ*n zACEfZQ96D(GU8*;RtzB1ZCoMo$GOexB0XV4Kn{T}Zl2fN#(AG6)-fa00qJ%R^58Bu zp4~u(EA%uXxNarb@ zvX6n`TTUL%(93c6#vkMaA)`(Wd+BkY04;K|2%wubC^XivaJel>9J{MbrBP-fgZ^vl z&P4x@I(m*uQT-mI)9C+=jqMEmzp=8hx}g6(1n=*+Y4raO?+#B6_P;Nu_KzxmakPGj z-3ulEm!RbDbtw&+F^=Oj8h)M{H_<#%|1Zja+_lyb6y!ZZfAs5}K?{0QLj^%w-?@}8 zMzP2v#K0je73Du_j{4AV457Loq%F<;rSUbq=2Zo8uhTw~51bdNzbvAwsM+xiS^2E7 zukg}b+iutO{R$*#MhF|osht4V>{BS~^`!k+4VbSosUsn*?WmyBF13 z0JOph0f$>=Nrvwoug03Dt|D}T^_ZRUEP;bupa!Gyg~cfWjYU9JbCK;Ul&{MNf8+~w zTt%*6cV#NZ%Go1g=KctJ<$|I_n-udHrm=>PSN?S=o>gJ8xq`hN!MKdAb} z(f%H@7nJ`)Q2v1hCdAbcMv2{LaZWRP!_R8@Yum-Pyq^3wg8pKsY+ucGW6al#fPao$ z0`lX~EKgC80no@A;9d@lDW{V3+BjpoF_oNkbi6#&eC@}Pui37I3b{KyKebz#n5FJ> zBRi>>1dki0; z7?xrE92X%?h0x5?i^(VXO7zN5tWbW0W*=s)0lf}$oK~e>JL}*$AgpHX3<^GD=BwS& zJTEelGxl!F%ll#wi3z4g(;=G*t59;@G9kCivY#QLTR^yz2T__dw&)Xe&WuKKoVqdI z%K#+eDS(wwTu91oRT>#9JY%DxWgfPep_!mB<4D3i(R!t5`m9j61RZ3&p&uK1@jruV z=SH1*Os;Q&ZDBm5ELRXCL2`2)Oa6@a$G|yYP}mI`bFi0tasnJ8VBbw&+43@-nxQ-w zskk_v{lY9>yfE0E>{|4W;g~@X;QDjZ;v09WxFQ|gm-)RZ!{pgXd@E^1eJ^_AFeqQ< zu-Kft0Icrd!D{RR#-==GSMZO485yjQX+Rt8{yatC%pH_j-uOD`Qzsyy2c~|fn!lYh`^wbO+{RDx-+R%Xjb(HLy8S^| zj>RCK5d>!9|9Mtn0^+PDO6mcp=>OI?*RuM*&GqfAh5qj$&}16_|7!o_5L@o-s7hJ? z6*l_fWCBIlzOeiYL*EPEbU(r0GFibL{*AHx`*Mx@6w3nBzAW0!$FPqkSXELO_<>e& zx9R*V;F^ehm-^OMx|Ig+YR6>jV zeKOim-j59h#SR2t-KW?hA*+dO=_SN^c<{ z)+j5v{UAo2LX1auMi&Vnsnc~LXlCOK*l+?G;A8;e13^sSfWTfDSHlK#AenJavn$+m zFuUp`gPQ@Y=LcFzA`{rEwE3=!e>OXza38`iM98RP0)2)_xsiwt(sBTYWpQ4-q-+dT zml&kNrXw(5|(^jdI?b;|u5|v8YTAZ**LIW+5 z{U*}~u$zsV=}aP|NX@;(_RreJv}buag%1EN2#NA%=~ew>6Q~SZL4|~3u>#ySw-^Oq z*FaZOpz<*C>_9z`?_#g=T%`88Min}XK(@Tz!VJ^4OHRJE;(Rk)*mq8tjzmCxL=E6U zR;t#{kx-&AIqF236FH#2l;kC<`U$;iAe5)Dn~DI}I1>QEmA~9WUzIe_ND&{<1A{}D zfnV-jcDv_@1mSog*5Qw;`Bp-}twr%Ko8q<)lHKJ}^Wv-!${IkW*GrMRus{JudT<^3* z%S70*v%9Sa%2*kCA;oi7+Uz0P&qV(-##sNRcG2%b*CDdtQWD@P^glv_u4U}MHn&&S z7xe!_?Ef_S|JBjE{o}vX{&4*MZOw>v$L9dCOu|WROtUYJ2Pnq)1s5QY z7zNJB1jX+}(On$Q!$5DE<^#&E5bmaIYK zKUao$NJ0&Ka*w|5rgGmubF;d+Ro&dKZhl?e{9ScxrMeZYC|NOGP_z&CAkg*6({G=W z6<*1%1a*_uYO+>M)~m@zHQB5tTh(N{ntWYNepg*xsjjY8SJ$em>($kbcrvS-)zz)) z>UMSY>+0(7s%tCNwbkm{T6Jx`y0%eW+w{v&P-jP8+p4Z@SJ%F-uKljMzEWLZt*)iSl7eY?8;b#?uB)s2;ShlV$zOt%d=XfE6R|)ENFPrkoAVYZk%(&$5rM3;30(CG^sIH3a~BYT?}3e^kVPzGLr17R_ThN{ z{L`^3-w78Xm*rO6wH?D}j;;CQTf&KdcqJC6awHA*a9-iK&yW!nN7eNt9qpNL3WhWn zGW{EVp*ZT`#S6fIq3{?al2IUl_Xq-ftYRvNaXKc-S3P+wjNfJ2(J-u!83mO6XcVwI z5}DJs3l4~sZ4K)`Tagh(3H0pZInwBzgDU|$vNb~#fKNyRI%JY)_O_1=qJ#{gTSt&L zouA`bpwP_+S;o#$qTzvK-&z;-3!)AQiVV?}*~ln1nFKk;@uoxz0z!tIkZ24;32Y`Y zk~x4yP|m7(p4MBo9dCx#pqrT-WOjBm6;b)vqQ>b@3+(RT9dZbim2?R{hX%%vtjsJ= zbUGcdTswKFczK!4$Ymem5akr%)W};px|_Ufe$((K$JTR0ALP!Xr2~K3)7$jR$|l-*5Wc-9p+GtVabW`43KX;=NSIFO#Aa-po;$ySuCr zyNI9stQd|^(_%lAjAjf^`Vd_9=R3ws@*k5P(23SdNq?sL|7|eYM<)Nr*6Kq3^B_nw zP5yIq8~tx#BR;WTRP4VZY+p!z<|X+7Hq5C1&Fu#<>h#y4|7~QwAia>vEITiTvLx}B zrWyuO+SyOb9A{@$tPCE@9Awqt+3x1HNKbl` zOyhhQ9n#G!&`6sp=*VE*)D(<0!ITTcW>oyT8$bfPOX3+dvIxTF)h`jSV*uw^WIqtC zHmx!oaqd*dW;R}RYznNnKw6aX2^8&oDYdwfEF&`FP(cFkJ2NWO!fE;eD&J`Moa)*w zBT_k=J_3aP9KUNvdv~ugjsE}h+c&kqLGZUK3Lk3+k*WU0(fl!nFR1-_QTv{p&Fgt{-};R!SS32L zcCf5Yx}U8|wJ3lGgANx4@t`o#lD;0>lz?)f_)M?`|6S$8Rg=X^U)b_iit@f$+HP{+ zo*r~jyhwkLU}xehSj{p2hyMK>$I&#{Y;qedfGx{8$ zs4b6XdQVvTX6|T;9_Ngw=yBeNiZ17mshsC8hN=&xT*?r>cPGprsE3*OKdUXDiTj(X z|Jhty%jSRDSXp1he|!)On8yFPL{4R_exu4?9Pbxm_k#0#2+l8XfK#>*7Fo+F3}b4| z3+48*ydf)0`d07tS~ugH_F5y8)4i}`SSVffdV8T`p3aNBlL;fa3^yFm*tDUgDN*rQ znfhW-0ZS^R|CONZr5YJeyW+Z5Zt9q1o2IyIbr|os{PtN`7}0iQG<|1B!(JDTY3+LF zsaRh!Yy2>^DaB!qS(5@|wJXV~q@b3~Q#Ghb%rTIC@~@W-(>tmUYckE38`Gh0dvL8>u?9JMCNQj&!EU!z1h7&#h2UB{&RKt^xKXg5u| zm+6{+FCL^&dqvUI3_prZfWTjD2>rx7yh3*{&Rf%0ev;|42Rnwi)Fr=%j9#I%!{37O zSl1HzG!G0J05@92kKow{GXe$Sh5bhiw(ly~U4>MnRFEPuxk{tuF^e~8?i{V9}v(pveF1pB}7aJJAhQLX|p(sAvCZRE;-4-`ibY9pe#uuO) zyF%9hnl%cxBnwHrRgnG=aQu<^V&Nly-X2nW6%mdPLia8PQ3%Y$|B;SCFgW%96eDwz z8&g3!MgO<8y1kmU|Jz>KT=;)Z1?(IuOymEI&!_r-sxN36PH;@KFODZH#`pzy_`uv@ zXdXwunA#AmI>J3HFXH%T@| z0BV{k~#lnuA*|)+u$|oC@L?3r~yqx=K$8~1OehEOKKiKd36d_de1U`-ZjdQ zLRLv>YtGkURFquLBVWfrU^AHMtJ(f|F^o44=YfB*lEPfmaM@uxrk z<*$$9iuJPwR4JEN&3}AowL9J3Kl_8>=;QUzH~*WdxU#yozOlKr{q^rMA6_g!R!WZp zM;s-*`;x7VJo6a&^^v(ipcpYgQ(WGw44?gvB_0dNH{BPxycQmE2xPJFkfZVR+&$!$ zmkTu4v$~gd$_#_$5M5Zd^-sbPGU&zmn_ocX}TF0}pGa6&(0Y-6- zK6g0~PcqYpuGfh+8(z4_n{(32=k0WtUyzEL@?@fwZWx^6MCamkSG2!HtHeg)CqJ)W z!0m2dB8X=>h&k{si!SaCftmRK_L=hjVu?|T^_K}w;s3YS^YLF7`M>YJwWWHP#{a*4 zrLmuWI{4%MajD?1`4(Rs*Pp}l1;hUk48PYy7W4a1<6Rg=3B3M+pk$yzZpgJHi3F22 zt<{DiCx8W6^CGAQjmBWOjCcE@d1XL4bB)v}qdin~=1vA-e~DGU0Us{)XATK_4hC6+=17CEB?b0M&R)k(t&h^18V{? zV?E%-GOFlf1*f3X^k#oEDbt+1MW&yf)p$jps;&zY2Tn+Vr_&)OPgcBQhvU?NMerPx zM-aVtI}ME}EHP?eDj=r+>3LO75Sa=e9t26=28cY2Akxm)4>7d~G5+x2GUgJa5A|q* z0oQ?UyI1cw2Mj0OxoN|famiITKz4t#ixqlxYHqct9O_~FiRmG;-)O~9kl)V)7mn8u zFi=)}Cf$jGSFz=j>))CoD{Q72$#VtDBieS)ukj*z3=@=jPAhm{rozA<508)j@RvBw z7Ca!4D#X7Kh;6VUMoKOEQI?*BP?zHF{J8B2xDtnH9CQ_l0KQ;>_uCTEO1 ziZHqPNt&YTZIY0Q&+*t$PLZ20Ac~6TJ39`vaOn02MOTlsjZqO7o+%5mKMES%E$mag zP`y~9vI%mhLWiSh`q)q7(9EqZSekl8Yns)tr7TiE@>gewQlNyeRO{SBaOe5XQVj5a zd8L`;KkDdMYatk>_-2VM?Q{T6k^gM2ZszhoA}094{$o01?_Oh?{O9Q1$>H&7?ak4< z!&gWIgxIHL%s+}-eQ|Q2LVRDyf*wK^GvOh7~4pwIf`U@68YBTZ!GVWPmaTiJ3iaxWyCW%xk4G}Tar|%)lZI@ zQg(}vLhwTtX9VOje7gBFQwgkpmVvhovgK|x0r$LQ0#4Kc0gqphSfIP_mz13t}2;z8JXJ-#K-2Pg&d&f|w?z|9v%^-QnQNzQI0x|6+S znW@C+sEbh$e3G$O6=AjOkbKGLtkrC&r*3g$qxS+$Bec!OW`8)Uw~W53L6yLBCQ+#* z)?ZO3i9eMTa^#|+3Lj$>HXb5oE3$cvIxqWaqkGwb!^U}{uLeG!r^f8PFpG-=bk>r> z>`Jy+v?p-XfV>(GAqo1%F1!8a@Tx7ggN<(QChz%|p+)ZIdg$gd$zIUUPu{rY zdcR*E6WYc;nk6OHw=_Jo&FpC7(_Ut$9%YhS&Lomk8_a-+YnnvPpy50LCNTJtY#D`o zvPO%rV>ISJybEpVtxOpWH5gq{ndq?st4St{QRDkCS+t9##Bz44MYgh%asDd~PM_JL zGJ&+H(pel(@ zNb<)J=%LG~8FdeW%>wZ*QoV;mX${LJberei*e?u=B=Y2_;mmXNb3td6f6vg}C&!R* z%`zFW_659PftUe_2a6w)Wo~cy2Y*zSZPpGfw1$-wfY)fw$au(OY$*-gV=25*ZA66; zfDNjf`*vOyVFDbd)^q2|gi^+xG-@ELW2<@I>|7etx$Jjaq;{u0!~?kTRq3(j|dGo zV&00BpN+kj*jd_zd({YQ*dMJKZ)kDNEFg1p@_=FI#c<9w%JvH5R-*!utMX;xQl^X~ zd!-AD?+>$KRHtx?@mB1*LtqhALu1=e-Tch6BUh8+X~_=s#@RzEUekr%jhIC!>LIO* zq^H26HlprIy3@1Kjmh9@&wrFFRTg2tm~^=2T8Q4Wz_3y&4q5yNcHOmM<&Kt>GKWuY zTcdCY)(o@RX$~t-#Jbt$*5M4I8(VMd@X+&q=G}%UWfB7m=ITgz3z3iuS|+2$D@Afj z-P_!OjO*!HjLPyy(K`N4)!fnMRPhbJ1&D8u#e5UQiM}cxn9ur$qBd4RB+cwCw`%W^ zP$JRHEruF^>TX0k@s-6}`=l!VBCJ^Dn{NVrw>tvn9k3^15KyH~F>Qxsqoe@?@8^@1 z%iMEpOFikp)YRLofFwa#8?nusXE#IfBSNkyIxh?*2Qc=Xo32@;@Wwe@1EC;}1dU(; z9K%4}EH&pE!YV<8dj6@%$KR%@=~?Hw(hkN4#L~GIRQXFIdA=9l(#$y3@${g7NngD1 zH`_BzyrJ8~K>;|(Nu`-J4yStuA^8%%08jhKiHs*og8Fs3*CCMnXyzpZIPq?ZcSi9% z{46+h04xQR9-cC|lFOA0;K`66A+8xlvv2IpU1u3EMpq{q#}Adg$7$|uE$nGXva^H4 z)Ig}D4InRJHD*tMuK`v{-tIvc>DUeLtcVO3 zqrp}4Vwkkj3nUpQvW){UhAg0YCIDML8IH@JFb_&UP(1$-sJ;$?BCEFD#*HMqLdJ#E zV)EP#=JSHudz3RTy8b*NFq8f#)FPHw|NLgM{%2)tdpoQD+1Os&Ug&=w0%NA>eK)nVI8YS&_0xTyqz_CzE>whCuv6-pOHY^ER?u6$??2kKCJ8bf(%3I{n&R6ivU@< zF_@MNx`qsm3#W+cjnvo8FTWl$SBiFB&(sHS%Ky$vbFRDn5A{9_dC!yf;A11%URq6# z4t_`){rccan&1-8C?wyW{CMEGFAFi+VGAo|md4?Jo3;k2^uoVvO$RT9%Fd2&R?ve) zSdl)wdIOLhG|xwAlrXR*#B9r~H0aaGaHN-vyduczxheB| z1{};#8Nh=z+(e!tv87)xKLvo{pE_3Cj)kP0lZHad&aopsnLLn}+Xgex(f=8MFtavE z=@|^^7xp+9F6dE*LA6o8W5DpB0-qdf1_pB`{@;hhMWn9bRap_hWd473ZEJHaI78r^oy6PX6%z_-*Z{qt~Z@EM);&)P_&d+Y?brB5XMfRODAY%KZT; z_FlI?On%$z*Du?32|opP(9^WFw;s8JnVs+p_?Bt(8r&XA!_s2064p}z}0gN9)OJK~k7bv0CA=h7ryzDd2aN z6oWn(nn9_sm8l^8kx=^BY@{#Y7C)$Kek+?~i$ohKw5<(j6R8kF!7>yiU2@h-$*VLG zU;0KJeBG$U*7T$R~TD$a;rmFesVdBC-W)$1-s>MLFv#=md zfw%~Ss__zXf%HkCzrrzkKN^}~4z}c|bNA>DR5q)2&!gKTn`bU_zh>e+WW_YOsGFJQ z!Vp8MV%Nf7xCHA6zvmTpJPH0UTfvvyCIkej)!WIs96R+Tt=P-hgdlf9qkg?JfGtS7 zCgkDNJrU-*7HIA%)pG!`N58-jf)}tBhcY^mJ=xfvGBLZkQ{;8vC%>}xW3)G|`50#0 zSpJAmpfFnJ%RM`!)^x_UVUNnVB>m(V9n4K}87W~5c0c2}I&Ti} z#z1b+xe={*(#5+YPoite`50z{QoQoPFg=?^*`S{bJH*gtK6`dPQux1VzbjEfqv0|8 z*@g~Sd5*>(q$Wh>-0nrq%6%Xoh%-NGJ-1jB6||qWA;iI}Tsy;M;Mc_3p5fzP21uE- zkXpx^fx*h8b54+3#1zqCpOF}4%{ai;G`L_#6@vnUS~KV*#FC_$iX)I48cx$pNRT}U zL*jQS#5=)cz$;iM}3YrK*QX;9{%C6;54AZcxslHowYMI7P=;wkexBUc5~Q-$d*38q&#pb zrFat{*CeT&*tSBmpQVjDegT5S+es566K{nhxz)ks3IR90R6W}+T3BvVL$m9<$^Wxk zXwG~5{LQKbDBdeM!N#)FoFco&kqM~(maAM;50F$tQ+G0>TJd(6s&QddKXXH8ARXy7 zfBznn<>7-V0os=DF27(cvJVk8dU}aYn6D`0`|) zG(3qp%*<5D;JhD>AM8&S_fe}I%zx5*mw(mSsaqiq^LPpTix+Xv+A>BBG*=oSuIe9M z^9HdkuAh1jE?$WBf0g1Yu#W+mUNM#fykX)hSYzssdc5FSfsu%Lo%8ohy=Y^bn2`zQ z+w456gm7Yj>v;BoL>H4&yFze9(3=c~yus`YTPfc`M!0HT;Hd#8MRR)wpKz1S(5cBk zxJmvoO!oE?AVWMn%y66W6v)T7>w^zisV;TISnGa5SItXkbz<5NGZ%$cj|Qx535g+q zy6#GHaGNn4bs&ukX8e!j2|%@)?CxR~n98c(!f2=B8Ca0`eNZK_1B6>NPtWe|w@K6Y z8-4rNx5+;YjbO0@s~`37U{hjDl;@}eUe_%24OrA*+&{`AG4iUw_`7tdk{r}Ar`@dDl`m^?bo2#pf z_`mnF;hA2G<^QiV)AP~y$476EPLF;(oFMlvu1k^Ny~+E>=mv~xz|gN1N7U{l8(*)i zAZm?`_-fS!%X8EhOgJTg1;JsA%^UQvkwJ7UuFNvPx=w0&N;k(1*{WsObM9eu!4iEzR^ze1^)6wZ4lhZ#Q zq2$f}$qD{`^Co%s{xo@Yn4rq*{a0@eInMic$@g#ePpLmj_P^ghK1~=&1T7Eo>5%{a z1)U$de&4@a=vd~ZWAV0*2&iyzeI7>B5MkqTaqNv&7l@FJy}^`B5*k>mbkiJLJ zIp{^BIU<4@sSS28FPQzAkacd*vQa2=Sd+sf_W+g zxo(hR#m1$PnN)Gq3%^I&AIZAQv|rqx`B($X1Br>&!6D1`0fGOr7=~VTTQDy)6|=SC z$-$EyG~9I)VpaD6im2jwxEiD!H7rT(x=$+JOgslBYi66-_L`zvZBWN$R6Le#X>qqLRG3!>hXJD;*%Y(KNt%mvq00K_cgtbh~zy_9Vr+CxDAQ`5kFcycaj12Cm zZ8#CbCFdY=a{9XV=KaAwo>;>p39HxbV-{bLeY{9+x+ALGs10X_RhWAsA>#Rq7b>Q^ zK#-8HY~wnD`vDg~M!=Uc(IcsrUsX4N$?Cs?FqeYTf7!s@?kL zaa#f-^?Dm90aB8RJchM|xojuJ*%c# zANNm>-oHC}7BnW1fXWPJ1debwYN$JY>FO+CD`?CpCt7vu5_OiLLD|f8EA#CRDG#_e$Lyp@~m24(u@Yr zo|8lCUQ}F<_BJ=qS9Ecj^~g<~JU6}J<@4OB%9C-vBK?%ArVK@9$=NJv+w4g892s!T z!QFLTIFfQ_CtRY3q@SIX<)-+^JmuI>QhGb#vF}@P5o`zBppHPsiPWguYIU#qWkynNR@mrH}VNHdxh5>PI5zSTj+xZm zY)3W-SiAnStkv9*nQF-Z&vHm0XTFb_kG+H_e^3)o%r+V5+^KmPoGlG5(_s*}BOHW_ zVvH4oE1{xU;btZa4W8)}&Qk;LbX0tXCwfO&3ekn_uH;JS0tHSCK~6w7L37yecl&-! zGo^dM429eOiS|6X%}(1*F1M-ifF9=5*9>qHuvYVfjc5**$jl%dTTsr=B{#!&W;@Mo zK+%@Oo8db#vt?g`O#x|HgoZ+kuLg}G)LQl1%nnPgh*iU%QtO$7V(cuKq8vq)pGApO zN%aMXhw;}GfnH+QkaL(^2bGP{4TJMp8}3yG{vyvS*~|j6x;FtwUQB3e!z3F~=v&Km zNN5HKUl&MddflFJA{d~#(71dmV=}c^sgcp0{2Kl&t^cDRp8+m~U9+rxvj5M@`s(IJ z#{Xx1YjctRWfljlnjs9Y%hkrh;+2Zl>KPEKb#e8p?Kqs-7yCyG# z?~61q$@~>la)(2MAYx?uZ&q?YR-0h2_|HgmPsJ);IgrYr5I}to$SyNjvc%_TE_WY2 z(hE0v6u&nj_)#-L6`y3j^C-T5^?wf!PHRW6C35tg`#C=R!{PDayMx0!b|)I(yU)sY zQ=9L+-tE7=>jGhnbMPk!*6s)=_%EJ7SaHW*PL95Nw}1M>u`cT0xLbXUd`BrorFS8e z;C>eoP$dYb@h``tTR&2ZhW7@667=5?b>Pu+OX3eRpF;m_uYlN#^Z%`{Z7k@&d)xD{ z<6`y(e?*4V^d`{1r|k??#$7V(C7(8I@tz9<-USE zu~BS+p_QRVw(s|g?zQ{NT}GnlmC z?(iGPh+_!PU?>Eu6|M9}gDZw@$d+4&BiLrb*q8rV^Y)pZq>(v}OZyX~2h!Oarw*&V zFuJ9Eg+7%1VhJPG8#HIA*(WV$@}<4y;-=eB*Qe3^*zp2;ksT0CR=l0h4l zlf(W>guKRCxuAhT8mn7iYMp2kCfLhZC89Bh@%Ay4@1YZO4u5)o{HOin_dmRQUD5S% zU#k$ku5PXbE?J;3saTNU14#Dxa}Sv&#eob$>H$urCbXt19NPTH0{F+tW!gbVGFY>M zO=|a`j!1aKjrK?MRj6-6+__?7o#T|Q~RB0>oEmaYjia4<4vB3wAqWws6JiW7;B55 zDPS(RP1TRfUX{Qonzuz5O&4Hm!}6b^9+2EamA)Bw9y95&nugqKmvK0NX2HKV!5NH!oyz=dlm({U+T!5N#3fBjQ^bksh?}NBeJ%{wk&`kam4{1ap>S zD`T&id(QNa=$aAt{fru~+3+x<;lh=cBeZ!h<#k{Myj{pSE`I+tK%j*DCo*v98pNDM z2RK>&v%0a0V1KdvXJd11eG&ivA@D1vcdWoi)pY5B8~L+Wo2|V}T6Jz#c-dpzv0L zF}q)51!K2nv!-CU@6)5mEPHJ>qw$5o9`GXpF7)Y{DHIfxy zY73JqI$L)kghXUb7$8GSPmdx}!9x*W7w^LK+ zE5!Ol270tY4f-Z<{EMW!~bgWsfC$?h6)1Xd>~Uqq+|QY3P6D*j8w?DYxKELH4YuZ zF32ILuvK>m57)u-mh#QG7NGiZK9$yMW7@XDEs(~aaK&jODz1BdbbS-VTl8u4;w`nt ziCyVtmG02gngc3nckE%?A(%Eo*s;>5Y1r()!w; z6ylMuKw-bKF*W4o;J$?Yf>NkSbfnd-n)A3blB1#tx{h2foN`^-Ij?}~V z7M*?ARsaa$=ra89lIP1|I^(n>iW+%oAohVb8Nydn$BNyzk=Tu18FX3bH}H;S^V=M3w(~K~BF$3S*=!ZhMmN>0$Kw%?6T+fL9;=*$&6aYC+X)GI z5xeVW514p{pB%v0P{)ac=eO%V&<7Qvr&)=m<4UTBiuP}T5`*E+&X<7_WA6rgSqUYO z@l=mbxL#w6YXE!h-lu!I1&S_`(Q%gdAOg=lo*0|4O$bxd{n_8=*?UVz($TSxfuxfeGt(8Yr7dY|OWOC1$3_xdIRh^wMtMI? zRD<~Pu6KHgRCdPc%y?Yslj2_0@b%C;G&I+ay-hxUIa@Ajw}#ozXmW4n^d1RL0dpz) zVB+y>^h|CnCl6%&Nc>>=Pq{$;Brg#1S_Ur=8}J=(u#BaT!IS>?GQPB$v9vm35NoFt zss9bUFq8##+U)wg3oes@&{bA7u@s?04bJA~!`03bP?ofZz`u!kab6Rk<1S4dX!5*M z(#0;`lAjBf>?x+`#G>dBT5mM?9EOa=7&pQ|1N-0P{G!v7{9HF0VW$80qsQxy6Z;>W z%@*~)Z;0*ry5;SEM=#&J*gKe#^fPEc1>jc|-&fM}BB<{Z1obf|B1AWNN5F%02Ok2T z<1kU=tGE06AfAe&RAA%^dJ5YDn@^MlvUERIx0an2sVK5639w*Sp;DD|hDl@ybIA#d zRSS0`+>l}c3;%BAJH>^vW|j%hmd4#s*E_?v{vq2@AE+N(MDtyIi`IgHChtEz(44P4 z4XpE`Zo2=^+Q!D?_2m73yoQwE#oD|B-K0J8bt1H+_|3)dH?G@*K`n^R_`G*9?$>_* zm3~q4{xj;oY4}&v?(5?QQtDp#`P`MCPx-RDz?P~@OZ=e6ZY!yrI$xl_3hv@QyNJ&^ zLJ8ePd=@efD?J!x%@>~Kh*%3Xea7gl8Af>bG$)4qs8b6C^mm136&&n zP7aj@COPyh;*ti?)&sGTEi)UJ1cDy6}Vq!Tv7!cBH74^^6^Y+s)%g_D(b{aXTNlT;S|l3k}~b2P4&XkkQh5|Q2b8~ zfP!+yJPgjI#<~fx5S%$U9pS!3;YIZWgXbfr}TMxHM<67yK+=u`EHRrlB(K z`q4s_i`c3g#4!u?7zN~Fs~n0G_qHl&XpECqEAft)M_X{Q4p zt(J2dVX9WbxHvsNcJbdrCnWEgb6r9P;`(?jKkY9f9Lvq-_R(1GZjo54NRawW z@?-<~Kgfg@=jLiU#ToMd>?hK2pTo!wW5yRG%s+REhP1VuF98*u?Ya&g=a<|=yDmEq`g zHR*y&4s$OEKG$5l&9y)y;%PfWIDE7I16T7v);EIlpcF-bcN(?BC@)qj27Kb2q|2RPch{3F5)z+srCn=Xogn`MR{heKYpk+}vw z%aR1>0l&qX#-KrQ7jg-4JbMv#owQF|DC~(Cj^neksB+pucy)m;K>l7LOiDP^GVdWA zzrHeyy8lR^6vsh@h|n@rbWu~JptYx*Vf_6g`(9>eLSRNl$WJHxskwXJTP}2QZuc@! z|B(d%-%@S+>a{)!tX+bte?J|({sl0ZM*j;)NT^c`U!?p?cB^Oee@*8G{GaN4ND+?j zozn<3ga3QB@g(*Cc(V3*k^k?r&{&@TE7LhgGRbd6Z2+F+_3OhjD|Ag`K0;rWUr3(L zZ(|N33KmRXh3TuXa1}<2H7uv{e+i3ckzV2bRAne5|I^jMhl?h`!eKaaWtzz>=HUl% z?n>vCPimXVGn%D$i#n?s8p^<&lZ*|dr!l}|1{xMqdZSmDgT zo5Gfv4JdKG2nj5z(zj9o$kft><^%*fDEA3ud8z$%S-%VeM3F>+v$+@QFyiYpHa;GyO!G|~pM-YV_-yU2eBn#z>plyT{$@0}A zBeUdLM?aLr*AG9iGF5TW?jb!Wbk_q1ASj|OrD;0|Ivyd?m>ZFhK$?xO3;|W^m-Nvs zWN*xFPbzGVd?+?c&`3bJi!I<-4-oK-ka0@y{oea7f)YBIDe7+%2!8;GtJ9E9k=U_N zTuX?0mtwkzyQUwN#9Si^y{BP&QGdizyIZZ>(Zvz6?kNhUx=7HpLKk$ct~?iOnYpkE z_RU4YIf|~&;^xp^zi%i51L;jeeet`mao(1FM3_DH(Ls^zERoS-DG$z{aPe3xK z%#dIq;Rtu-k+;|eDYC%tAg742LF%31TWGvs%5qajjO%&(J&qw-vLG6WvVQ_P86V?% z!F|I+3#bgqg*5|78P2)`nFzjfFmOsah&}$A^Z-$`$M}5wzIQyMZ#I!Qh+86`^Z?xq zTqP*^Ho&4-`(SFIU_}Z~h=!4YUO;8oZDwAT6p>Z&$CnB>3*QIX9($iPsewG7$2jKpyE_E*OM-#>Up-A5a zwDh4srFBv#kZO5u?1nt_Y+PRR`(-UMnDo8|k{-(+55y z<}no7&C5hMz@Zy5Gxk8_WpX+2?Ei|~Jw?^ixFjTXy>-XSY>Al;Mp|ApzN^eirs^ z_!BrT2heZsz8nD2_eLr-7I);toI;=K%A7%^5Jhz5t3Rzw)y_9IaX78m0ffv??Ca~! zbKvXiG}9!`%({eLWpTt%OH-e@qcMaE=f0I&XL)EAZWk^9t_nykX_B2ROVmp$&=w~n zxK#1vs!R>RR~52wIz2!w4(O9_`HladuG zy848HdM~4t%>+3(F$&dcqNO2|3&$Vm0FgiQcsOF*tLRsH$H*z#zdj$1F3|RTWtvqX z+U&%!Ci+gMp`N`C|1A6yB0g%buDv16dtO;xf}i4K>pV=>rch}8h{z{|Kp8~)c^PK!B?jP$WZt~3vl<&zD`W3_));JcG5eYAr$up%n$1BXL)C)_fYX{H7^y%miJHU zfKdbjsI$*ND*c>nO+w(Gma$0&OIVxaTjdwLNR)hQOra6Z<|btev7V$~!0rNTyL=_E zQU)o3TV;`&1V1G}lBtscPFke1Y&?C!+5+2@3y4a_(50w;?cL=GWQ2F)cVFUaWLmdO ze1|i0S9P@#G%jbWbG=36#P-3#HXb;Hz`V4gU6oA36Ucn>e9uyQP3+gB zMeNrIJ_@Mn(EW6=U!^%leQ`6DyaWDmj%YBFs0K6BiDHOaEqGj{da>x1#J5O1dFW;| zIcw8HXV4j5p>7KFLGUR;f0Oygg*zKb{7-plYCOZf*hjy>ABwI^U1*c#6{4wpkzVp$g`Jhg?-^r@=a>D&P_wtF6DXnL2Z+lHvKVY4Ye zF|f4b+}4#?`x9$^m%`vU8);TxT;+mD7+e=tCF)E+5EXXt#=%KZ*J06;pSQrVopeY4 zzW(U<|M3SjFuRX7$!JqU(}3`~bQFbuU-)^^e_)YbripKxe_<7#f>0mtl2R*SUYObC zI~4fVX*uu9BzSKyEFnm|9#~j8An+7qO=vpPp;i$~BeA}b=lI11F6oMXtQMolg9jAd zWc!F71q^W@^_?#VPP*%MTH;{!fP=z)5eW%J73};p;SmJYtT-K_q=g4SMmznH(cwE+ zf>u4V@6;Q>@e;*0#=X-)n>C=YUUWL?jl|a%1)@+i!_lo2TH*q5Nuesuz(Yxg<==q9 zYd~y&dfWNt*y76zrtrW@&8GB#Gqu`GQ57kxoZ#wpco;Q9BI0BZp^J*Lv55r{p>AMZ(ZjkSKnY8_|6R7{TtqQB&idug-eMXK;#B z=TX-<{g)Hyvo;nBN?~LViT={?n}(;T-*BkzXHDc6`rgUPFX%4``sqBt-`0I}CI&Q3j8O51A=s>%#fRq|_Pg}m#*4xb?nw_dzgi$K zc<{Bf3`|PeTs@qp*&;3+G;3yzGY>{7F8b{Whw%OINVTu6sNQhcg0uE$qQr*Jfp2=7 znwKicn|_QZ@LHtPDSKjP`a?vxcgq~0y}`xhq@_}-i|NG{O8hOJUUbFx=E&%$;m%p< zIVmWRKhd?qDHc9iv6(Bhtks82IXk_e|@!J$AmCN z?iF>cHrG`vX6KA+;IEh(0cDYd-{Ov1i&=mN-7frPfq!sGqpsA(E4Tg}=d}kPSmD81 zH0Z%l*b{szMX}%>PC(&3Wl7=gN|AQ*^>}z*UW+v=6m;vAV3suGsJ^?93;RWj8ai3nI@s|JKZ` zGFLvTcykfbuFQ>t*&xEb0;|II#L?~CAII8NIVqcnaa>mr7648s7tbsP`bCAzJ3-$4 z8z+9b6K%r+$d`tJ2Kv9!qv5zEjs{mQlB%I8c)I>??eSVA|I^crjfMX2vye(&|M%wg z{$F3dK6vvJib;yY!7ounf>UqG}QqFhi)gO236pT zNGk4fY(Wa0SV8ifJ*WU{+de&SyHtrw7nkF+&rK}A?3exMb?xpcdzlc-ob314Z6yku%ceX;lI&u?G;vVE}I0@J#`_v3PL z@19Md@*T>uBILRF+c*F7KOPya7CP;`e)+o9f+;qzh{CW4Yp5l14}&IjG8SCnrhLD+ z8ZX28NY+OcQsp;Y8nb^u1J%J{&He7u{X#zemYKi3*7bM4VJ%63Vshtm1)X=EH` zMb^XE>^$yEqBxcrfyq`5DdMLp#1JFmS7?)|tKHnx#s2{n*&U-*vOa#795du}a-I%+ z+n5ImuDLtEdA|&R4c`AS+ro{wfEn-qv$bbWg7<&pH*1d`ZQ!Ft{jbkJBKh~fl7k|z z@u@WX>Ue>awijBRyVvTNq@VHI8p93_cZQ3JR2QD9Woh3y@_xPoU@1||oS3tyE&}iG zH1OUjoSFvS?;twh2&u)lEbLN4xVf9BqxSiEd-R8IobyuUtLM}nqHKNG_?slAeA}{N zPK)XcX-C5>Hq}$48kAoWWn4fjQ(r8E>VxAyQw+b`1wXEGfteWo>?|{_B?Vq4gdhAg z(pp(I`SNa{Ro@%t3tj?9?T$#>4yw)2B|=9qwOHBhd9asT#VH|}6Gh^$^@es8G@2>ql+Z{6t9|@*1E_!>>*URHg5Q7U=G^K=MX~b=$;f z5*cMajdM>X>qN#xm9gMdOb?$iwIpi&9iJhvgSTzH`Y8}G%anl4yEGbOY8H*shNIgX zxy-Ltve4<&fa-xn9~RHGm(64K29bmRbf&fpRMgqSGDj&Uk-fG}b7YlF%Gw<6Rc)%` za)73(pyK;XnAjq!SCS|k-{q^FiC=6X2=F(GGM1g*c@Wh#81wGcr_5mBCoy^;p4mF6fv<|LRk1+Eq%D4-Zn3BG!{= z8BN6=%;@896@IW*z|UeyoK!I+VyGD#ef(ikdR{D-1wzB|(z`@qXg7U=2)=i+v{w8O zkD!?Vmdg>?a2janeg{3oGwI#-_b3?Lr=y)Svu8O)#C<|jLxsLXCq6g&+FJVlZ-eiv zrE#E}V9nk3Il^Pzl(+ysAKwPPGcSMHJ^1q>TxUGG^{NRMTDNCPrS=j>+@FQ9s|%ttFLD_f|E6nz654B&LsOaFggLRWvO zBx+2-f&VhVnEx#GppSc)*Zi#ODOG32K(fQuq#651-1W=I&gzkM1Fhz4p<|3>9KDYs zq>vN57+#>F9BO=*pIgYr_%?p^8I{TBQ1sM{(Ln!a+0A^Y2N6^QE&uU!{omT-M^D#M z{om8a3;kannRonYUjJwLUzu&i%P)F}D+P=}_Y&e!DYqIfMUu`s7J!|J`6p zh=u?EOw8WCK@I=6O(!`YXW!a?y|cZKK&I`VcMn=Wy?OIZ-WvSltZrW)UpRyI^E~3y z26FC-Mg37Uct4SB!?r2#Me6G2eW#-HZ3wX%d(1ij|OV&y;9<>hkhO0dkkdgAm z?6(W zdZ78GGsWtyzC~_@OtP5PSdd9S4;o@KLW{J27tl5Ar;1kpZ8((fYnkykN6Wdu~Y)}+OA&g}@{3@C0E*elMxoo9ttD=;hKPgHz1AWzsqR z-S3LyQG0yGcxcPrOS6ZUHqQ|^Az55js$1>8nRAz|Te)uRoPG9b_SQ7&ce%GYkm26i z_vIRsQ)=JeWN))W2YY+ovKA{ReWV+TPpA88&MmWU<#MoP_F2O%)9`WAgy>-aEkb0sl-lD&56x6YD2lWn~{oBhQ?Xe|GUIVkorYr3fE^56Q#`qNbYd$O^< z$p6w5y|-!?bBFPX5KGnTHwP$ub3~7mS%P1#J$d4RqQur=nBlBoAH(qOimIf@GxO<<+ll7g$uR5AyZty-bP#tKaas=upb;u^uD@VH0KsWnXg zw!8r`uN2D`JZ$bM8IGXF{1(W-;l3VT^1&ILYI%_dCR#(XzUuY+cmaC-Z{;RH=QdKt zOF@eQ4$+9>retyXIVWsm6W z>nb*}Ul-+1lw*g$Kr|CpioL7;?B>YEm&-tLHVL{aFYL|D zOi7ON#U+$rhQo33913D3P*t6#8^MxM*fnv{Hz)63Jx0ZcKSY8Q-oe%gn!JLPqo#0u z_Kmq9`(90km5_JmaNZm@f=j8A7MtJ zH+cou*%=$lM~vU_4CBqz-n^&jS&g&C+Ge~~R9>*cX6<*w4@gSR#*R(5S27Ky(QpOL z<%oD16b!Nh06uJUlSj7o{G^TCi_rfENB*ljKZdv)BHp3hF|b zl1r3#WaJbN293qR29h2WWt^n&6y9}gWpN~iTAJO)D3;|0$7W~7he-E|#!k7#;b9L* zF#L|km*~yUTyKtU4>Rr+q)LNC2WcAuqX~;D6yqt7DG0v-3DkAJ>V6Ln0~Q^Kq%PWR z(!&^%G=HTyf-0ZD&T+$waoML76H@b|2q4O+fidZTzpQ8isA8l*g5M@4sdu0!QM$T7NRNbF%tF5T#y*`f+G|M>evx;FuX+c{Ag=) z6XgIgC7A)C@&|94s{9Ao)e-z>R1A{l0OC~yL5(zaLyFjM#d?+RhD(a_QZ&+xF5QpN zR-_&3hB$A3#N&4X{t&lixgac2D2)HH*UebsJGiQ_Imt~0syn}givvn|waJ~1igTEN z+V5Ep?YPZqbMC1}=*r+>$gn{5)Aoz~@^3t>^hmCl5lWP`wFVhaJ$C;cmW}HJ(O|vv zej7d^rzmh=W{APLJ%w<^%6WdhfL8hzJX*oo8$85LuM9`0tN(Viv%Y$`^XSp)FMoQp zzKSz5UcG4JN*S-xd17_2{`*IdRxUbaX-q&fMHTOxz%Ap?Z5&-V8Ax{xEGFr){ngb< zw|hKZ!Q|f~JKOb2w{yArkE{3WvD)i)yU(6JA%k-X&jtN!<)Snv0)oD3Az$KFjv%%= zsx{o)M-JunwdG>9KuPhnH6>J=8C86n#oqT6m4@f!lW~oKx04%Qo?ajFw1*KpBr@Kd zr^BHu_()A$cjdHXZZTbG>Tp&>QCIAtF|S%U^Pr?_cYsug*uV9EAxk|Om)$CC(9U1} zvcBGW_4eiN0T`KmYTFO}o^t-vkWz;eo@B+#dVq;IgzcuV9o*t~#iJ6-Ch`y{f0P-P z>5aP+FHkROXK-fE@wUOgWPHq;$8>;-m}f!2jN7Fyrr2HP?y{CkS1+)Wa=zpMm6ZYq zH97I@wTx_ni-p?0K4?Wzr_v;=m{{_92#NJ1GX|xwkLuLXrvuk(*L*G#y$9{Jp^FGe z@N&S?ovcp@ExJ?#CfNy9Iz6{cSJ-L>5c;>SDsC6YUm3p$FO$jAvEMqixl#y`qaJ&^KO)( zZd=6UTp@6?jfc0gR4zJy3Jf%`|1+DM_w1)`eBOCXxBnyiJCc1R`M=gS7V&@cqWMPc zV{XJ9VW#?P68u+fM+?DMW$&+0_rlI!3K1*vqELXiiBos_-r#lp%!U2Tb1-8-9wQz2 zgqi18%Z$;}?S9TY=abOSoujKv13i5t@Akf41Ith-7dHX}Ed+Y3LgN@7v365mZ)GgW%a_USimP;RG_oB$o>W%L{%A~OO zkW}RzJOOzcNOLSyi76SfCM7~lD*yD9Pth`Nknu^Z_f%u)mgSO*MkKhh`0N%U;U}|a{Djf zEWEG2a*-LuPNHOTt}>QNdZw$sFk{Y>p587k`1Adpk4UKv0Ap6m<8W2*(rBcx89H4| zod$Y4!x1NbQp+KCG(D~sER;{$upxr!AUFQ323XPw=-NR2K{SVwc&O` z6Rw!M-(AB%*}py?jxJEG+xhdVKgoyQXmSaE>C~GP1VvA1a?Iw!RM*n{U9~0EF?9`N zpWfN+y?0Axg!nPW_E?#6j$ZjLuNLJGss861epSBN?LItl9|D(PDbu%`7AE81Ii2tY~ic#RSwOY^1 zDP3_qvvYfS$XbURPo__;g-dd>@nk;4=Q@Sa4t01C|IkK5sh_8BDqDbC!SqIYB`|4^ zggnse1$V-TiLM!JB(3Y_AQ}~?fARwe{imuoSBqxv)t_dA^tt9^n0mbO-6ixzgX+4Y zrGOf+Qn);J#NGx0SolPVvnVF*(^LHd?mjgOWtyZBTw>sGJJBeE`@*;c15}XH!aSSz z@N9x=jLR3#K)9ztzYbU&D6roRk?BHi-jMEHkF#zccRP$q{XVi?F^!d~yepqObX75n zl?2)0gG(M*m8u?$2Yxpk_4)7BkY0X~(=&V;kW{`xHI!1=osXbF#m z1{#-s>q0eTVIHbW@&WQEg0Q9pr7noVG$GC>>@=qUXk0hi!eXVtMvsm9c!Zqn=b zCfCKu~PV#UI@0!ynm=3td7ya%jxC`5__%QnCk8c!hHWGpeqE%#8=-<+IwV>OU z5JY((*f05_9)f3bT+IRr|x4EYU~tN50KKRq?;=Prb1{R%g8wW*qz>* z^DaYV4t+Ug2`t7P=;``Q<}%%MkTz9QK_^f^nw&o4XIzDwA%Z z&Bd}|6O~w{wU4=|7c^8|J7md)BYQam7)J%1HCWpBvG@k zPT!l-_HFdM#X`|rfKx??;u zrth0~{If5nYgLsWO5!(~bV*6Fs^3i}<|VSJ^KuN*RKLGj+TM9`lVHzERpTej*a{tR zskAi|;IrUEWf|x6-g7TrMTe}=%ABwkrM=zIv(CXaeXf$JDRi?mqmFg%5Y_nAIjG*h z?Z&#^M23oVwvP9PV3Qak{J0rSudXU2>uIe;0?FuwXUMOneVF3bR^~2@F>1ngEL@9t zBH{z*W56Q;4I*zM>B3n9hs(;?sSp#2f=qQ03Gmr5Oz9V$R%rOK`dB`^{qSmea4){E zCaDA&tok-iY8B`yN}XDIil^F47?D=bJC)5+=+!JgouB~s`n{abS_Y5+2?<`64Fbz0 zfx9OGf+2xudLko{I;i5J<4(KjFyffNYEPL?DRAF3&MbH~?V3#uqe8q{zwN0>TfI?N zAASRV!?3i^_w3YE@qv=zMkN(1^ddf6(N;gVf{I~NRcm~*6T1YW$tqygw&L9=XVdC@< zLT0?W3W{O3FT$D55!3B`>D;AUkpMrfw7P(P*BEG^|52`Q_2wf}|MTq0+HX**sPB4*$QWHy^TjPb3;ap4s9z7r)=QZVv{v9XsRm-o?0I`~6q? zMf3fynBf}h0=df@_51(y$>S%<{y$xR`efn%`8h}`um5|od$hf`-}-5H{|&r@c3$uA z@9rG!y?!+%1^Co1ccT|%cBG}&%fp=(%1{+s$lkm5XblN`!E3Zn&)aYhI_`SMJfAjf z-T(H;|MuAb_Qe18)c>~Oe|zSC`#qPCJp!A~3g}a1v3AY~iHRiHmi9r#VDw+wSx!n9 zJw)=I-^bOWXqx`FVf()>kzD3wv5zc1|6RPi91Q=P5Eg!<74>4MN__Qpe?QP+eE{D% z9EA$BOSSEWADwsMKz1E|((a!k!|CMgJW^R!wUWU|`ehJQj95;1BEkllSNWAK=}OQV zOLJ`+D6Rx*tjj7DT&2>>>$i-Zu8=8|K{U8mJ~zEa<@0;Xe_;Fa2b708MGsv~raUxA zv@S&*k~OIUBnvu)Cg9{lCTW83)EN#Y-=lOHJ^0}E_nn~UJ8{QwM)_i>HPOrf>_DKi zcnZRW26^V(9?+LVTsFp+^c!OGR5)+I#EvXh9ptG(?i|Y>2Y*8mRDuffRc%~43D6vu-+1I#)VdTTIzSM6shDT z%aWg<;sP4HcAPm3#eUWv!$kqb;wHU!;sGJ6AQ6nZlgrV-jT2BTGAp?fGH`cgQ#vnr z4C?uNZj&$3u!V7)laHdL{2Rq%%0J9S6E0g!;0KYi!#a6gQ{{3z)poqt-QPXhebM^k z+gI{VEtO46s{FxdGW>3IHnv(wQo0OUp}@Ra&om9K(Ls zbI9KOF|-ma)8C@q$_e~+EP*UrsHYEq^OJVENRSyk9VWd{PGv(vTf)bF^Q?#${2vn4 zZslx>j7k{)$bS{0$kQ-4oL5otleljw>Fe+JPz?_bSqf}P6j1jK5tzKl*d;>BO=o&& z=oDH|dRoHEN%4bU4(BH%EwGW|FZzbxh6IF6bjVZ<=c(zf=uMPqQzE_BDG|yspr!K= zZDAwOcj?^5MwlF~8SHE{BN;1D9kXTBfGG`HOtoEInk-z-A1|k+UI*19`F_}b;d*#( z+mPl+Hnk!L)zyH}|G?)L>jFWM=nkfg) zkpCWUJlaU)zl~?>3;FM}kVanq(~4+sUc-qT^51KuZ{OSA-}`?JivQO2xf==aGs=2X z$$b-^zX&!OiEv0T^WtW9k{}t7b^?@ zl0oTTQbqy__nUZ&IM);XE-0~@m&Q_y(|n#DrXN*;aog=e`YJMFI@TOvai7n$7094& zLE<-JjJLYO%Mq9--Y$UJM2uC0I-A8GOt`gA-Lx2KH_eJvdyEs4Qo4Ke*p0o(y{~`D zLG0{XL9Wc(Sh8>`PdHI6WLY*htC*xmJ?|7@GQkpsthe(X&dkHI#^xqse3k2L(~(S0 zq4TtcT%_1&;(D$EIaMCzqHVL>Zr_8dtmMRX3dTKu)RmfeAU^V$3?+F6(7@NRepNrD z&u5J`b!3(Coc_XomZx6^Y0m!{mRse?Yn`_xw0PERXYqfJHXfz?-#W}g#o8>uck%uI zar;l6{|gwtm)mcqX#Fz{zdBB@p0Mwj&HI-Hn|G61p&GKoP&nquz+Yz!*@4ntRJmFf zl%Jsj8B?EMp{^C{8sM#AVMvl=`ke9NLY)>Xs)TBVwgtDWiLruwokz>w(uo+BYUZABMI~UR0gA5t75_^~$^_?YWWzB|g zWvYZ_&Sod?jJ29h`;cvt1aI}ZUY&w2-o?!Oau<*O0*1ptbN(-%@z=qb_U{b-Z~fU? zs{ecXXnm3YeHu#d>^r=UJHv}>6!bisz-YT%z#(BBd@eKKJs=3>8h47D4;{;a{$#rn$HO0jgO>kX!uj>m&2oj-R+k@zWpNv&Cv*}`_30BFM6w} z_KK23R-p}Ol^W{cp;%I#Rb##jyk$yDGK}Ip>p&EeJAIf~!P!*dW-qhjbAmijKoxf0 z3@w75A9w$>_p0@3`{nN88(^sTo7&DQoJ-Zi9Jx5lR^HFyx78seej$E4_|Z3+rbuuU z%;oQYhvhn5oT>EkS024WNT7}&WQh^b%=bE(O1A_vfb8DEyrHUw+HQUwG{65*=2g=l zt7>zOA*bK}PuJI;JWb^PCu?hu7xMocD86yiy!>zX)Ly`T{q*Kda+s2fFm22W_U*%j}SJkE~9j$0&)?sI^9)f=xyV_fwCLc(25$ zqy_9(Q6A9@MS1W^+b)WdHfkuUiPP{mo;-ubUf^f*RPIRZz0Vv{ot$JUs|u> zoxgqb`k+_`4Zb5i^lLlrU)q@PVq8am zUrW!ffLpOGPisC`WSTFpYhl3`KO_ScFX?rwkU$>$TWK@_y?*y*C!z)VU)ZVl3 zx_D^wq3v8lxI^Yvu9~X*;K<^4;fBT)8gzoE{ad~T`FXnL_Ux*H*418^r;9_R^Xy0o zCOeR`#3!s?b(@mjZgJ(H&e%G$>+xCl_`NQyf;)LXt*GeGp7X#fLn!9+8W2b&a8lQV z4T81E!ZJ_jH~idi!aB^aKt>>>cirPQ9N-CKJcJ9ft0fPwe#z}Iv%QGx`qR)1|)QE_12OT%O`5AYb^+sO`n9YQb0HGt>J32Ysyy?tD!IFCCcY zM#Jl+)%)_|-(S_#%&x?3)k9v0v0~d$a@gE-;EaRi4f6bmKEy`dWvY$DjR&;iKLH`Y zhmWxZpgdfSDB0a(Oh~(b)xHLq2+ImGyXKdAZ^{$vU4eqd!$qd7g>JV@d3sC34dsmd z()<`@&#a%~ZOv#}O`W-{gr$_7#`@ zQ~quVgJGDIn3i&~L?_}B^P6H0QgWhX9y&?&tdFMZI1{r|MvGsCC9vN<9T)dk-Le}l z!$F<304@SS3;9I|kd_{hh=jo4E=}u$19S%ij}fhfq^#iZuA|X8XK>_h;}CiW?$jP% zpFB3kbd=4<{-~#nu=P@1K3r=Q(uNOb;0&Wp7V*nxudg53_91Q_4v{0He?&LauXtDZ zv^07~P{Pa02Q#0C?AZ^-cA1{=_Ti4nUkbGsLVOv_x(MRafNNg;Mi3D=7+&$oX98bv zq~Jn_my?y^$1YgVE`30h;Q&8j9EMO90N8dGza{tauFJo#QK58n3a60b6@Y4};`abn z967$lb;jEP8y3cbcevz}9>SpJSeOUwDsCr$ObrI|(K7Ee=H~j-`U1Fbx}&r91w3EW z&*kJ2k$5ucbFtWsx)1R%yo03+kw&ncx!%S@^(JEvo(Z+D5Y-A#7X&9uZ1Na?AD^vA zC#pu*Tz8!E3v%TciJ7g1kH@RYvZDBSK&z7RR^;%ZX&n)_hA#nv*e4p`+%=6H(cw#7 z-OH^d>y6V|zB@H{(Aj8sRr3Ai)50@mDBj$(U+UVit%0xavbl-7R~1aSQuOAwd6s^x zgv1}dpq=i!%Ts$~1P}TZ0>=Dbb|aY5h~I0Kp zV_w_?12zgG>F!6{E)3d7WHR^22x&w<1a`z8_lfvjpqdD|xEvuxG-8E$IDu>)HX@x; z2BcMqG1a(mQ3yjo(Z`#T2G0=o#v(l^*UA|PI7z)NxRG6^MS6q7eR+;UdhJAFHwHvu zjbdifB;GLN%XedFKyjE5_RPAGy>?$Vl7q7Mcad)TJBLWVsWy`C?-D?TQYpJFdC1nrr!FjkmKsNX21Ix=Zn7VE9NUoi z^hRW3M@)%E)2N9p_*1i0Nh`Lj+pndg%}tM4Ol3L0X#`Pj9RHfSc`Q0oiU4fRA7b;w zXj(0ZC+%K;j1x10`wWj)zxN(&G~RRO5b!5d2-KrdVF|P&?%Z^Y%B{kyM9XE^UgdzL z+joTmPG@)p!H(GWmuf>wer>Wn<%R{*BGtLs;~-c(5u?d#9Iw9$E^^d7mK?TjjAR_*V;LZPClb6-u|q|n(-&1n$Nh?MGqvVc z)l8h@w1>0G^RkD)bOzw(>GfW0HR)ALJYtxyECaG6mniG}SW+TqV`RgxKe9Al`KFfb zN-~~$u~zQY1$q_Z9Wu1U=|&+PNyO!aJ@LjZtrg!g z#|HEkBmnmlGdcWPC#f)x?o(c?*Ses+Yc5dH9+yCup8nx$i;p>T-p-a_2L$O&{Y=8+nq+I!&1>3QR-f#nh2i2Gh^Wk24cC;5DKwgcY%d##dpD z{>oEVjkY|Te?>1AmZJ>SV3}}PXPi{kcquE}t5T`J6sd=+0yQ5gXbnQ$xHo{P#X`6h z@=lOzsidOygVJcbG z4p4b7k?ARLgjQuaKomYb(U>{f=~+NhkOYN))%tL_B_L%$T_$ok1pnEmG@X=eTxR)B zYf@E?da5wWHw{%t5k?JGAFHZRi>)N49L4$P>9UJOz=?$jXVp`8%~6@H^}z*3;I=m< z1KfTG2^dT%R2_+0a3+D1j?&xC#iA6eV2~cb!>Z*%`Srv`Qb3+M;=u)@ zR3(N4UaA#|h4x73E@lmt8518EwdGC%O(J_$E;oJ{J?o0yo$aHYpO%m;JxH?!6oJsN zy*$ufsU1%op$^blYbtZ-=VPuzc8>!BlGE4asG~z#a%801HBc-Pv?DG>b|3`gDmZdN zt4t9@zI(Yp{^;wbSwGeTjgl@PjwzeGe?)F{CW^+?ggux4GiO#AIAfjXt&6~IZ z12Xd#%QV2NtnZ9oX1Nv~C3*6yv5Y$@r#uJTo;(P)6}@}|i+IiZE|XlgD>Oe!W}?A! z7aj)zW&@pHPH4ix^sq5vct;YpN$cGO%6?KkZ4_>gK$3vL0R=1zZnZ9VvYq)?TVIix z^U=WAS<~^lTse!#)#L28S}9q_!kIHg5ANG{i0eK!#g3RuG-adxW1_6HU|G&9 z>|RhzIl~uKvN+y)Bb)w0hWCy;!R?%I<>vE4QmaajrN0lZIC1!i%EYjfjN{x`;z40M zDXYA)t;#B0J)?yRjyLY&>T2muw&V|5 z--&@tp$WWMhBDW*=A64wsMuiUI&mBQmF7MaWVpu-b}~F})kgW@Ove-&{Uh*pL2x8b zF^=@hW5b$0#@f;~XasF56{T8zg?y0><9ad?wc8MFDxNR7BNiSZ-eH~gsB`NRL@d@* zkdubMx*F1qdx8z5is}GE#FBa58KV=kCj35hK;qy0$!|^O#@FWh-)Xmh*lyaBXqYtM< zs$6Qd~E~Gq@smVxuuRP5$U6O{G&d%VXF<4m|(zRO&~9j;M}O1sF_AAciVd z13VBGe}E54T@dOhp2GlNSziXPyjl`iDPFU%HK@U@SA0p3G94~B!;_O}+{~E4on0<$ z3ocW56}XA1nL|AMose!v1Mj!62Tt9_Nk;8Tuhp;#!Fw}FbQ5a==H&V`#Zk<%JAqE7 zs(hopNG_I25HJTvsjq&mxCjZ>*F5E*0n@#DA8$KdW6RNOyVMEhU&+0I_X~7_(e9|^ zeRzb3!JXFjAp!`GmW;IP9WaB3nS+_iS>G6C_@*pnOQiA;MErmmDk&Fzessc@D@LTP z4ex%u1L0!DHHE5%sv`=Oy+lz$R&f}`jdwp_7+s$E)%%l(7;u&$9#X5Ox^B5mMAtpI z*5D-22k#0AO0iJDkXlNX9iSp}42@{62PylFikm0s>P~v)+bGhFf^ej4ntsm7@LSxI z8HV;q(l_TJN)VeF0(DBoNJ(NIZ6--wUPu_;4+>rHE&XaM7LfA$&!#Pf5jW?AqqXq^ z{^a4z5U5DE`AC?0knGb`_a`&Me`*A>a)(?)b-8wbl_u!mMu)h>>yQ$YBB*S|etA5I zsbre-vQxkLO99XK@fkuR%1(4&cK5XNUyjEPW|?`mMLY}O?h*L^d+C(+^3YZ6ugNUq!~!btn3yRr~w$G z=8qn?-|d>ezef!94AiJ);X^h=-5~;2iLd1mn!*Ygin@wz*|^aA zYv!s7s;im(844Lkb0ShkTqPGg8x&mP0%%TIW5|rLhYL?MT<7io6yH+Zbn?D``|Y zJRRNyyXXTSqweUODdd3ucL*wg|2JH(7{2A>pk&=E#SWNUcpj3qE(2Nt;sgmi@EN>h zB`*BDjfWBWfz@t{kc!hm2@%XW4N4u{4JCUF7|1g$fMJS1K5H{22&kj9(P~*WIEAz( zE&vMgvk0u>#;Pkm{0EV%$)khR5^g!6@-+xQ)4ODA>E7hu*Z*UAIp%F2&eMGj-Tlx3 z;pMrFTs{dL4J@bJSEY25kgXz&X4ZN2^Bd^g(Kr|fS4g<909{+w777lF98<)V(E{=4LMRPjigw2xgeHBNSgiCc&tv>PUg9b#4sBa)rk`7K`L=V7`2jJ>K)BMX9QMu(}#4`D;g4g5^`!cx*j{L9LAz4~+O7x&G~G_W;&=yQGd*Y5QRrswHWNk16UP0MaLyNCxZeG072jXiKHgv1*tdq zG0J!@faRIh&mKW&FZYZg}rskEIW7q{xN{XlZJ&zs2c4yzI-1J=?Yw^Z5{a|-!VAJBBUU}2`^N5+TnFC&Ulr$< zA#`~R7g_fcmQOrOE-#SYu?uZhXLu}1&4AM#bwBjRIBOom%)1a6f1S9E2tCBSJ}IbaT0Ekj}>kDQJgiAA6pK&gp? zqc_VnF|S+GDlaF;C>Npbu&UZXODkJNx>uK3?3Ly7bsoZ)X0%7XxtcDb)-eg8u5uWP z?>wo*2=hTq;O1SahR4`Y4qpb4^}{VnBM5PW5pePcwb!U=GXu@MgW)JcHC|$P&%qOg zZY?-LK69#V_7^JHh94iSRZ*5%58z%ysefzRMVKQLE zlF{o3Zg%P);nf_NOYux0u6PRxHOay3 zym%|Os$`RNW(LLpGig%y98LtV&Wt9j5C)0~bHl>r&si1RtwD;Thyn3^gcNfP`0lLUC%)-MX_N?0FENR?Fy8d0!Ajgbd{#SIk&K?)6iabJ14(v^ zg5ZcEEzP0vIbM>CxPb|3${k`^jjBfTpp9jS^Zu=?fTE&#I;GJ`N#+&iZm8_^! zZkjx&y&7-M79X37ArcJ7pW|6e`NMN>3wW!_j3rCb^oJ6 zQsw@Cy14%x`abEupX&ZEDP?j0-`)Km*VIzoiQMQVy5&Z%E3*DpNIm2WH&=Po6!g)PH}xw!WzUd)IrNgEv+GzxV2B z_u!A)J1Cdw6#X;(KWh4Xbyk2pxi22GJ9^AY=_IVGE7f$%uhc7z4X_(|jXk_B>8@5& z@X<6kRTnnKd&7!U-V zk@>*DMxUi7g<2B|)Mtr0bX)xbomrrIgbHZz6IE=r5z_lYH5XPI^Gxczzobgg)Wjg) zQ!~nF7jfVvEw!GrWWg4Evz)WFs*y7dPf)l*TOzv>bjTLp4x!pb%DeC==iVjBBIy?X z0d^QsXUilEbx^meJ>ggRl)BkWh@o$cEK;yOc;&G!$1FIpidtRUYxff4O6NFokCB@{ zNQvt}%RURzJ&6@7e(($6B82oR#r!KBT3^GiN`k&+?PYLa$Cm zce(eKs{~esvtu-h7gWLvZk;gAht2rxc*UJqLl}X?{(POF{ZN9nPt4z%eDd)%8@XUxOBi^BTAQsx% zdPn*vDblLXR>zg@Tv_u$4fmDf{PeTt{J$QFi@m|cw@o;2Pphx zzfR@HzROp~{bz}N6OnwVNHms&E-W1e#zFE*IE$+0T5<1*dJQim zhC7lN0`DM71aLQ(+cGaQH1R6ZJ+}L}5!+pQVy7}na;vB8LnG+kwYN3ToaPY)?nwRj zbRC+%r|XYOrC;f!RFyHJ;{Zv6FTT3&$Z1NPl@il?)LD)aTpJL7geZzGfM{~1aUkOu z>KaHi&iUvM=ES6Xmf<_W)9ZXK^!cwZe|){)`g!kg@5lY!Y87nfreLy0N(v$Y1@%8_ zhb``(OA2T@DZzUS;pZJqqwNc-q#VG`eswlw__^`z%@Y#wdXwEUrqDSwWrqESt|DL# z$bE()9OWwSSCf?IwYb}o?KSR9*U#cEJmiicB>jlLiqDZf1%+hj1Af{dYC4M$;4Gm= zs>R55FvUrIoe{TXoMgstOL^d?Rk2GUN7jq7*s>jjt@Di?WrA|6x^319B84v1OQrAw zVog4TKL}y#8)g~Nm>3y}f;F3n+j7~xvaMe~Ko_;J)!PkmIhtw>fW;Rq2iiG_nKx0m zE?3q!JCvSFbJCMVyBSB0d-g}OX;W&k3ktuai2@yb!H5J@S4%j1guBMFeXe5t>V4U~ z`^aiaN2>dlwm4pA>YLQXeK$dIg474euDkSOxrMWCs#6>Wf(KUmuO^RL>>+S#Q6rbA+*=zmr(`Os&&z?SoEokl0v-QVo z3;AyvPVefwsq){O*ZY5c`TF3^Pm}_k1?b@Q+oRpqOgqqwzF(b0IGy}&Bjphll~CcE zMGD_xpm0uVTixH=*?o1m+gfj}txP^nmSx!zC!A}3GaomnE<@s5DAdCU50qINb=&9R zN6vUOJ+K5sZULGd3-m;g>*3Lh9f>tPd;<&Tav(!My8Km`iA!+{huT`wJfT7kz2!<- z2kl&hXXWjjYP6!w1G&bSDj!MWrwfNUx|`lZIfZ%LLV~r+%O6QkkqCA>`K?4|VJo)0Z+1g2}a07N2A$5j&^HD0O`e zyrK5%@dzb~QLY);%(XHasG3@F{!a`_G6_u|1lyHRumVE8`*;1`F*6j?axh?eSV=vE z?C9qR&1%25;!`HGuHN?|C)m{NT2nC=17RLWU))AufutQq95`ndlaHknu&9HYqKKu; zsvL5V0Wp-*0%;SLfp@mzK-$YrTq7`CfM90YL;h6StsEk$srZJJ`?5lLn4F5>Q zwJCC{&#yR7pQZaW;&eyL<=~}kCajU9aI8i6)v$rNP3$SRy_%viX91xq91@wU! zm@v0c%66!gZKe2bZZk;c*qO>{BcoHGwOoAEBgjP0e9piz8qRFNFLSS1tNDY>2d*)UoJCD+h zSc?V2nfP0hu&zx{K8vHH#F7+yOizZj81_*|Qd_9jW9Edj!-oSE0nB>(mDB&OH$Zk2 zXT=5mgC}tOf~0|*jlU2M0f5(t2F1W$z{ahZkn zC5X-*$7EfDK2LwMDf%jq8R8LelFst(z>SfllO7UGl6iMf{fW92+*oJ=FS+x}&QIH# z!ME}qOtJ@iuV_eqVuO;~!LQYAm;9AC9;FJ;qx7x;gG>Gt z)4W@-{UHKJZ@Ohuka;V(Re9&9?Zejo>sNo0|L7B69o$$34h_dA{D+Le9WKt`U*6FG zzwP!bavj(C^00+7xACNInJwtMCmT=haAE!k+!plIgL{H&_AXCEX9%g_F85d8J`vk* zjNHog2{FC(%OS7OKh<2EGVGPA3vNEHgylM!$=6N!c#aHGh^n?^(CyPxyh$)YqIM$l ziD?MAByWPe#`4PfIkqxk)f9%CJ-yajI@B^%!bVgAvga6teWwpm?>869N)@qe_9E*6 z*9m7C$2h@!jVD~m6VB$$E1*lRIW%aBz)MR}d+_}PLN{^;AYXV7Y#14_?r|G5L;)Dt z&@L{zU}AcM;{3ATn?PgW$P7v5m<3w?FX&mNLEPp!8bo<}h*mTi)k2{dFgjWX+iZMR2qXsCnBLGVC7@FRq#M zG~dAVzTWNLCo{J%v{%K9mv*~N+*J{n+1xd%CL3i>_0_Fv=wWyKCg^HYifnZGm@PL* zcQn<7@tfRvfES~3yYecVcg{SO0U$bX@b=^G&HC3NK#Vsf zb7#%wa~*9NKPR2(#2Prg;*vSODt^E6*m=%Vr)>tj6a~a&DK7l5l>1((;~wr;{3Me0^M&NZ4~-j27{fFxK)?mcL?a&1 zCJ}v>=L;Pt6RZmiV&22a`7~9J!_-)Q_e6XFvHWF-K2_urqfh0M;|g<8|6gG&f3TO} z8HM$VRfo#MHIC>H;W5yCIKHch{s3|q(Jxcx#_;D31Nw*a1@sSn%3#hzCY2lv3znC! z^!KkPsz0|LGXQL>msOzifBxKrilfA;MpoU$%s<>>v{1|EJ$4#uV$U?&`M7?MUR?Y1 z6D(Q$EY@phd9P-Y(cp!fZt?s%(sT!pa zVK6q9!IdnEzb%Tt34y>11b+GE4P5*aioe~UuAA0}s}zVk*!gMi=iQboB3CUTSE)0X z2jsL{S{U5GeIpMpPR`+7)RQCU09bW3<@9SAF}|si+H#SkWfOGs+`E$!bKy)Xo@zHN zHAk4W<>ute(2>clXO7Zy(WGP96e0v__1vZeT~^DKe=@$(_w;L9Viv}=;*oP6JDQGY_b+c=A82R^{Nl%Io}LH5-pc^M05z+XX{*jOWdw!C zsE*{D-FU83Al!Je#sB=ztq}kEpe%)c=p(Ork+4O*0|nUe=-&i`4JHfP!4#n^DH8T{Xq zjkPC<{_n}gBL7Q6HQs)5JmC#l!VIA= z%>Fr_(A(vAQB!-uWyK1I#ICNMU*QE5rh>_u?yF|&lA$Zf{^jA%JKsR7k|syH9G@Y_ zW##iuZ%jv1xJV)k<~*q|r<>?;PCiwc-f0Oe6LODJl*B042o6gUQbnyZ=WdyEXjFN3 zN^`ZxMXlp;6Ys$&a`gl4k7fgmlKzEp?Xd|mG6Irwtp%7A?7c&fQi{1dKxt_@B1A#> zH=V5IXSCwNcQIEF@l(z=E;oF4(`GDVE`s@{=yf?N=h`rzM@Lh);)vtcx!bzKvHd-@ z)!UVWoD@7J@!He6!{SXW;4UZ5-0GP%9ucO#wod5C3vu95i_WxULY{Slu|4#$}P0s3!d58w9_xsH@ z{py(h9Ca_^!M>1qFk|h<43ts+y;Rm#+=nYZz(Lef+PNx&lz{cS$V$A*+Y;ikvRD!p z^yP{Z8cvqdwa-qk;W(}^Q-C95-ql}JkkBNH+iJ~#=|pZ3U4(H&>5N$M zGEhr~U%FS|OI0u;Fg(oH&>QrjyytrR+R3FTa9)n-1mTg0&@vZM_N!NOgNM_c4`6E; z2v%73F=XxnJ5OIme1;ax34w$UlO7U2a8_`KJRXiZWw06mA(MzWKaRnxYVrYOiGc3? z1TYX9-~HGk$jd@DmW1O87zrtjZ((bt;p!`I|G>&FHm~6wf1*+1Pn(#sCNYZU- z68%p1-Q}sA9hW!Hl8Oe9Wiuacae%P7bKGRhIqCDBRDYS(f{y{o8^Fu|*LX#Nbr zCG6D4M_S1RcTaRjSWQTGDOs_ziL0)U`1)^dRxcOq0A?JfL`b16@q5`!ko%p*zRgo+ zzE(4zQp}JbSd@|33!}IQ~EO%+j;_ z=CuU#H7o!&z0X%F5IAxVf>ucG4J89EI=bXn7KVg7G9;vYI^J~nCg%D3fVs^#NbC&R zNQarGhV*IHp(@fyI@TN+C2&?hzs(||U*pu2EvoV>)eQN_h}Q1+{#!U4q5V%>zAJc^ zrsljbuFW0qpqnsLF8M{4xvLRy;u}<)LzE;kgWN*+k%Sa7Ny`%Kj2D^ltt?k=0_Yra zsSb!GRX*z?tp#$64Uc8#JfmKzY-C)x!q7}Etg_{W6oumo zwgGs16r|{|Ip3x_)<21JhQQdr>~xFgs%ywx4M~!Ti{S;Nx~OEV87;@CfFYjW6a`~a znEo(-4klwU#utl$=KQ}8CpI$W`_^n(Gx+~!RsH|dwe`mf{=XS^Z`TU9#SRi@je4hN zli~$x*msKUccb=M`+QtHT3g##DPEvJ$f)=3k_qN7S#Cl!RzETs5c%7~;mHIAIlD!} z+C%Jff>MP=QcI|SDvT+-iaIysq&*xnrnxR1?EY!*5ZOyw-cj(EZLa6(qjj}qnEPaM zSDHKFtlrf`3_)2SJ0Hcb!DlWJgZjw78X_AkY^;Mx57ib}QL+`YSq!Jhx-Nh8c~rN@t4=0uuY(kG*5O;n&bI;w8V5ZQ}<7bJauQP?mb^b_d1%%K>zY zV;YBUKM0RR@aU3BfRM+a(l*PI5dfuDZnqlZR>>HegK{ z$z~4q<2f^vjxRBSq9;2B)8bdY>@I-cWjWo}P z@afrd04jUZ8ed*q3`Yna=YYRJ#XG$0cfNGvErF)TS~xt!xWDGSUc-ix0;etIw#vrOvtE=JvcB0#ut|P{Bv)R0SkeoOjRP zb-^TcKVX01EsUYgpb*Bc0JBF{{6{7(Ak_B;v*@?4alo<1&>Huku%_~P?k#O;;)Qb26kwo%2NZBRTcfNvy=8zO08)QW{b zmhKI}uq^+(!1~?#f9U>;aiL~PYg?F(-@3cl7^WiBc#NqB;;5C(3XizwI1BSiv zu&)+Jd71dWJNT@3fb)aLc@9 zLRpG>-GAV=9KSi<6(>LXxl2s(Cb4KT{7Ris$%qRHZEm)eOWxeH^!T;DrUWiT(E}ih?inKaG%k z%SN#h#hqK#E2!f5wfivZ1?s+>)`RcTR}}%4CH00j-{|RG*n6|Z1a22NR`K|}l`Xi| zK&wPxui(ONJa4R9bPm2CyRi!x$yXB(p0_6Um6xh<6dBA4xp5#Q!~)sD0ROoV4P_}o{m;^1dgT~ zLUkAusaC_Y-u)+ZsVyk5+vV2SD`Pi|S+#XW((``tQ3QWCvNyitIn}XIHDLs`9Mqqp z*b=AO0%cgCm=@(e9D+Ln!p%swqipNayO$d3cK5($@s>_X(szqMNCYuZv&H)kQ7 z(X6AePWz+L)M;d}VrKXys0u#B>!d>2YU~Rjg(&9o5op4`-IBvxbpMhu&|LltZu#b>e_8r;`R~c2M@aS?`~N;! zTU*F~pM`8<`Og{4r^|eGtv-#MXSbuq?;srHVsf^Gv4pWOHXK0faJ}s&vB2n~y6yxhL3|9*g@)L-VqT*bI zpTdm-3c;g!U*pOHt)^2jx;fZ7uD#t?!_oWp2)4wIN|zN-tZmYTsk7BP$;+S8;J;wH zXibLoElyDe7F5>ivSocUI9|XXWpZ8Lf{aq@wArC%j z+Z|k9YY3?4gXw<%L zU5!|ne54&_Z52qi-<`OlRB3H8?5h1c>*%@Wb`i#caDD~(E^aT~GSX`y+bbjJHyYC| zt{l{rK(6j;GVt+P_xODcrV$j}U9}kEpiYT{C&kuJjqgAM+ExWi$I5&OxIOgY=Q1(BECkGJ zlH4Mg5fnX|nThDOd&nKHZV-VYUuTu5biI_T@wrTg4c!ml3vnW-d?P$XC9Oi;`|=z# zV}1n@q?#&OzKstI=Y*UJP}R64GH#-z1UNrPsIZLnl{(Vf!`&CE9Cb4w8yP4py{=6! zGS1aBt9dNNZ*NOpdc%-oSc5SBb2~OZjEqe3)@pm<#Yx*AYfJ9vo}^DT$T( z(f#Rme5wMsg0Hak(&lDB@cZsaqB zk#yk=U#c}E6ycoFB{B#AG3wx=i?{;Bg^Dks+~sg{AFW6eT_}8sj`nt1+lP=Vj~s1d zV`P@$mJ~QGQsU9JKTj^6T3hh03QREBtD%$yTR!ojLvL|!YpFe2)=Zc@3UJg`$&Rw) zbJSPd(tAR<_~&ZK*;@Lz9CR_-wM=!GH+_h!W`WQ8fM=NEoJBL!EPd3Kjw){{s7`GI*wAc&^S*T?f0KnyMtIXr307HR7ln^B!RtKxWWu~z6QxTe%b&xq13pTIN zaKp=U&>qR8g4k@tulR$&s6V%K`Ovn}dNC_+ehz$kT2P=YkpLcWBlOOk`DV_f)Jy{} z5h%gtTKE;^r(1J7<)wiO7F2 zVrG>!_pefbP4oP6!ra;5xN(vo(=9Epc!v&}>pe{zpFx85VUbW@pSLd@)d3dzLwApK zXws!N#wn21Gdt9v)=T7MNpnx3P6J_ynrLr|YF9UpQf#|n8#oHvXn71pt^SsMJBv?ba->Yf!Ea2+7KWxb_%M8*S8t@+4e1IUMoTq0#+mw|!Aq4{h}l*ZFL=%P z2Ua7Q@tDev@skoh$?#G^h_aoIvs0f7_6pZ1p_PhOe)UO~7agwKFvpxBe*kb6ldKJ) zvdA;A7GVOchup5~6lKqFAIcrCOe^+q3p%IZ>UNFhkj7*KT|Yb3{4?EPXgWI-J+KlJU-)n4Q}>$fm;Rs&%!EsiV$n<;fZ0@o>(Va z;#L*~p;MV~w$d+qn`SM28Pi^t=S|=JXgZ~3BAiLo#9^y4-{8>*7&FgokUg`PS=0U| z4}j?jVsXO>K*WW;oyHb9KNdmj9Ne`07O zeditT4h1xqcR;(@Uy1LDvZ{mavbP*wPjJO(%6t+y)Hehe zoVMTu%U9(=Z~)EuqeeqPT8c$3uR5(rzjBHD=_hAy)_J%mF-6eidH`GrfAZUvQJZOV z{ja;DZz;l+_Zh*0TIFm}Su_F@0}CCf+lG>-F`B#+T&)3WDnN^?>kMwt>_z#-Y#XVs z>Uxpi61Ei&fW)oOo(_Jk*II<7dquBSe?MiD^AqDP-FR}*v}$B}Scf=<`^k@0^&Ye9 z++FL`NUEmt2M|Or0SYq1*&p@bdMSEIiA@viA?XQePsIcyJYM)4I#l8tybCI7ls5ctX&URLXmca$=4v4n1^+$k+ z)}H7Hkh~6R>yEm?Mvi#m#1-|zg5`a2tM<=~@XmB$9x#25%a@0geg@qg-4q&-(nUTw zxJWtvfZX@UXOB_)x}yQ8H^iU@4ToP>a`~}oo>USK>-eg5BRHkGUs%2wn^&4{Ze9+` zRkY-Fu0CyUr0*PNRCZ>uld^M&g6|@nx$adRPH@q&kv&kZy^<=ak|VXF>Q4pTzeqL8nQ z%+b?l;ll-}lX153B-vD1fcSHLFZeBgfI-X;%8f~gyb9`8{FOj)QjSD~5pKi;My&RL zU*m-Enjt&4>Ih=g?TbQreAc^Q3Pie~;!L?UTNJBK3QlseBcWD#bCY}3>fkWa!J|sS zhu|z6{y+%Faj2Oi&!0+z%ID?vVw$>QAhv+-jAdDV^N=Q|%Pt%WdZk&NZHH z7IE?yJ?IX)&Yn;5g}=q7Bx%CV+mJTo`Zi}&H!$eZu~z{n=N>?2;(W)%tH%~u$6IJww?VJ48RD!mg*{!N&|^{^9v+%@lorr4}onJ)X(a5O7O zx!A#d=yq!6UT1lO%mo&lF8Q`Hsr>5ykG+TuUV~Ud$jfbd2Nv=k#xk3i*FZGE<*6iF zifqC4r=E?qH)&hk#QD{FR)mu4kV;R0*~9NZ-7roP-;X& zsk?k(IZ?H(%L6W0ata|a=Gqftj7+*2ZzdxhA>5Btz6^rL-Lvf4eTB?}SqF2RXP zt!%103_R!F4ck>wdM@9l6r}iTmYCv|f>D{aqIDUmS&;D}8oP8K(oa8K>>r z>Yn3kk$6L{1)ot9T_P7c-KJh#Jx`HzT}+l{hd@6$I;sRD9OI*M z;O&x+q8dYmfP@;z=9H`V7;8v6x(Sl;94XR!rvpY5mOv&QoM?&bD~|ba<5#3!o-D&E z7(dJ5mgr__xy7xe>NhHRP`LQ__5WC2j?dadTH}x#R&S0uK&=6kpLjqI`KK}$w}_hs z{z^;7L1!f<)Aa8i>}~Jw{Xb1J_v+_2nsYj64P}HRU-`|K?MF{It?E9MW6{MN+XtM- zqY4H+!032MDjJOzt2=9fr<|2aEg$9hEndAZtG|!@!{s4z2gr}l4@3hOJ)QDeauY@w zWp(@l>U5pM*ibsjfpcDaunLw4NL(puN9S!f-_ZURzSX!&Lk#39=gik&%9_jjuF1$V zfTg~M0Z6}P0h3XF78zdUW8(H>#g+=rB1w2;%zpZ@91b|EOPUQT0*o;~*!gMi=iOGC zdgQZYLHWNs2=$z!!K!S^s@0>izij`YN|`|VT#flE1~WIs+VuQCYa5T(o~HSKo;+G# z;BlN32{-((tonk+zaTQD-+e(o?SPnEDYB?Nv6 z6-3I~NGKlks5ls+s>-A|KxXi3n1_Q}mZQeN)gfFN>Fb!)e%_^uwP{CZ~u&)e9r>m8kN^FVD( zOfEK8SFf(FR($g>DQ#<->0yl8QLwup+^8nag1gOhx9zWd-iL?>Ty;u<78!wj2M613 z%Cl}CJ_ZO?bm=)7^W8P8c+2-<2A2iy~oJOO_ENG2Mj0FcdrH&2-q zAez1T`KVc>YSX$&c8GE$T`q>Oj1BQY5^HLlWi`-+#$PyvOw<6hco#n;XcfL{`h*o_4D50-jDmcE^&a7fs31j zC6FODvO}o2G90kH8G~Px1Jr;&_qFwP+4eU#D@0^U085;aTajU$oFET8-0O6<<%Jpy?D0-k;q13ObFpVGRO`c zrVFy2boY7oBapyq3yC8MV>+Gpv%kNpTI1ep4-!M$i8y^?kk(kMR;`-r;IPF-cI3Lj ziShariAZcvJTD?JJ|nhKrOHh+#K{Ra7OYn{(Ka9-ouOQnY*-ngJ{6au?h>U~{^ny! z<9^rK6ot2nD|b3_Fk+w(>2h}$co(2aC9@2@^xQ>l)$YsJ>58V1#ubV|E)TITY~O0U zQr$&kixUK?@23uo)M6uOk;sKH_wYP5G3vKqKrq+s>ppa+Adxm@7(Cw*!v=JD2d~Af zA(e-V_G^}_NXVP`LWj=_%?luwccEwi9m>M6mLh5i;a%SLr0lLRKlw2~6BK{`F!hZ6 z9R);=y9hvk^1kKee>SfXYdST=^5y^f(#ld&{$E;MUY*PTQv-U24q^FUm2}$vsk!~L zl*Tnw@9v& zI~S(-g>fXTW1#NfGP1u^A%xit#1}VXYnu6F*e@!hm6zf+xgWoWif#eyro9LevChIz(e6)f;K!1h$?PPxyo2wp9`+kp+ zMr`z6Ib8y1KuwcUgES)!C+sHxBLKkW#70oC>@YTIBd?7E$%L)KGH}`@0X!VVzPUFD zf4>Qd7<#+Pcw7?t)HCx06ndDE0VHdtqn-(SqQBDYh*dKnDW?HgQK1AZqyFk@iOCIy zN?~W<0=37<=AeSqJlC2w^4jIhu(~HHcAOY!oe)Bby=#q-WI3@1o1HrDPMD)eTBPd-s>3;)-wFO)gc={qztGyiP@+2} zsnULkHWVFn;(+x|f;1o#`?!}Ibey>O>acNS6nqDjDYTr=c#m4u2aRK!*UA8p+aG=D zjEh?AYLv@1fssa`;`1<@AasGc>%foear**!Mc-{F+Dd^kocfZ7UQh{04rpII| zpqo=P;N=imf%#Jtmnf?O@W7%F7(A?a+c-YhJ$O|~qcC>vyf;cqGA>6HwNAx*aWLSG ziOysPXYu|MbupB}UHbm#gTuFs*-=aH%lI;L#3Uu^(Vov=e8FurzVaWmMIUkhFr=2A zvh<7KZ#J786JR`ChTDb0z~GIg_WGyb_Bwf7ed101{ZH&)NpjxkbU^ng$O3V$uxkx( z=)&K;gA==6Hhln9zd3&xQE3KXR(nCx_Yg2}Il3H#kxS-HPf6`f>3{G{^uX=Y0`!b> zl>jHifcS5%?$0>3}rE zhrsBoXctKz9FanHB(d^hG(J=?-f$*uHj~T<22xdo9IkF#Tku8th8`xqxY(i|28l-`$u?!*)@x_V zMjN0bw4_z-2SoA&B(f)Y9)<6sJ*v&J(#MjHwE29l!B^{A`JDwcEt57%>A7^1RA!;4WH zPOo5BMX4)}%`ljaKv&y?3&v%vM=yi-Ngq=DA?}-_$d!{p0}2OwMh$SJx}U~W>gw$_ zz^`Oe`!uV|+HS?~iWs4(x?ZW~Sm?mg?1GZ|EWOeTRh+9HB}jV;=#7)2B!gQ}@l^yA z55p9r5MUC%#9fkfZ-%^R5X0*c)eea%BPF|vsiC1cm`tt<(Jjn$!x;#`UUuYZD*4!^ z!Jn2inCFQJK{0g#_PkOeg>)8HipzfawAIy*LjzB!#MJc=oa5cs%Z(hGv)u1!SJOf8rOq9y&1j9Q?Ld4ywo1R$W!GbsSzQ0{gb?7 z;Et$7u(VrW8gw08`FGD!q3shHE{7>K<_vn&&$UZ={l8cMdkV0mT`9ZgeEolIZGF8q z_x~#k%zJK^tN#~M+pbpkXS)Ha8x&~&FcyIa_Xc#)eC`c+Z{C3Nb|3^BOefxCFqF^W zC@_t!Y+nhg9mak)awIw zlXlPutPt`vLwY`fuP`xA(|8z~amAAg+WANFFw_%2o`<0~qwis;J+xQ|`an!*MJa-n zvs#V|Ah%XBw06crU}UDtAh$QZbi{X3$WzJYzT2Mk3%bxbvp7C?JWqCeBcnO1LhG{L zb{fC|Z#$)FR$_vpAvvC@`EGUA150HFUq{_Z&n#c!WGyNYR%(YsU`}aQLmrSyCnTK#6MqX$ zRF^o}I2#p$qwt(}bwD(OB%BZlvROFEeW2sPb`|kfY136rHiZ*|?hP{Dv!+_7Dp21H z`zTW;-(>HZ+wxQ$=y@mISmkHY83M-SBTUiipN+3%wp^yg$nx^Pler?+2^(T4aVFg& zT|mD4Ux)kOT0;I`uP?37{r~hCJ>_4>ZqgC<6(LbDDd>D0>9Dy;M^~m#x&P4;GyU`M z1tncko`m^AdlQ-K>zIw=l zio2dwa7#rChK@|$OdTXBp+TW`!l)Wyf8cuh$K224PjTIe1vT0go#Bgyd)iQ z;zO~FpLSuVPuQA8OroUOq<tJ{n?<_xGBt z|A-Z19gw`*5Zc(de0oct7%hk_PBECi5XKxBc?P5e5aGFnoBNpL;RVl8oJi_0T10U} zqO2Sm+=fatBJ5=a0Z@pgQmmo`2Wdgkt}!K=xQm2%!mOkf82nXgxyQj;*yH`srgBTx z%YZzjyB91xD?};}Fn%8`zSHh-;KomsZJgpJ!d^tE$&GR_Ts)p~P6HDhRM*aYf$&bk z0ma)x4beyVVJTRcWK@QVK<`jo8GRXR+X9^M)F4=YRWcav(4 z>wB5xt8PEI-~E#q_i}Be)OLXzYb!I~$pTnj-)(f~#%E1*4#nSn-y7uwe7`3T&K_(7 z%PFLfoQ(o{33x;riQk?O34XEz6y5tVW{&sFOQ27$xS1 z$w!g1TfqNGT%RWGiwkfM_yXlG$0lYx6(p`fWEano=`LIIO+>O)$;C= z20-YNq=wcBEmAf%miXYpCzEQT_s88W$duY2Qcft)l9G3GLkS>}b|ODg9$E1Q z9!j2vv==5}h$BrHr8G#f?zy>HNtS3+L?hI3W5emEO>rhO1c|VAWZAq*G-_keO04PY z*_QNmLbd^zH2#TKwl;?5tV|iMSV|7dpWIoG%ghp1i`>Pqcym#)-?#zoGN1VRL!@8{ zLu_<*Jt8zRLSRJ72dE)L$wwYRyj&_f4|=Inxq7>c6yW0~JhF8H)3~K_S%;2TlrPqt z$3$MM4OqLlsRpBA=)A{PjQ1WUep&#Q8n0+U>2nA&!An}fKoR#54(>N!LPhOylk3|c zvRdrIZ?HMto7pL)6;mk0ec zYQ45LxBpoPKHP7<_D9?J#F6*K?m^@D*ZA=0cz1udMag-yJ%ICie0H|J9E`t

LiU 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ɜOSi0z;^)N@*jvLLA5d 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ⅈN{1Zob&|nh-8>oePe~(8&gi5gCD2=L zq&m?MMxs*MN#BQxC|?pr^D?$m+^wyxSS%C0%lXjaii)`aw5R~ESD~$8)ffR*CC!iO#vVAZYe}S~vVI7I*Hlxp z8o0W;04;%?DVu8`*|8u0dM-`)~;OIL>d+uMse}gRXA<8j`1yEa!mv z29^8=4O*StXb3_nN@R(0Ut)l!-b*JDzp85Zbvk0Lc3(dis&A?CIe&^>cK!bNpc(dZ zW}l-nUleteI$}rC62t`+qZ%J4U)AL6CSR+?FF$$L;}=XmD(uDNtF%}x;+1a3mFjo} zj&ej!!l|qGMLNwAXBTHx{kdQ$sr?1|Nzr#En(O%fYl?SQTmDHOYVtzNaGga}yxw#5 zbrwSX`m5RCL2RVkb~oX5_o7bh#kuB$`4*ME@p|f%q`0*74PGvDx`j(J%^O%`0P0jB z-V^V~3-ECsrtq*Kz3NwN%uX)0C7g=SO-JlKTF$rl{N%j%DD^MK=5=mHlHM&}W@Z-F zi+r0*Klm=q%gJ*&E#1rMJ^!^sad&_IHjGPmGQ(=u7pJ4n%~x6s(N;%3j4jzlvH?TC za+4wh=2wXLXYdf#BSd0SVtdrN&lbAgqNbiXu2ejCsrOBuH(59O%S=i6-^>Wfn^wh% zs@TOtRi5FS59fx`jNeO-qw<@7>!Z{-$uxTW`f>$KqHcjsln?ho6e1|Lr<>AG`rvAh z8rS_;GT8xBCl9Y#m?!=^2}w<%^2p}5K;{dAbrZd2!JQQ1)Q|aO%dR;+u1uImDavWO zK|d`-f622{Vf8bmAicMWl9Z^zkYoX_d`WW1{CMj7WGh^I+spGm;-xg^wc&)$RWd((x{LEaI-3-{ zs^ovHt*@_r%Ky0b&93QiwUYl)x7+WQ`SDH67Q)!2_5mr+is*f*MTS9Zpm`-ii&^cl2SCK|+oR zGU=2WI`KqjZ^{iyi?c`~fz7+)D|F1!#vl7*<@(pJjskY806N?!Rz8tIE$0V+{&TzC z+xheN+}yu z@ zMI@>G?uT-+!FWt*c-f?S^&N}GL>>3uJl7R`)9D*Z){qB8nc?RrFGd${nEBh4@Z<3G zEh~_zEM8w;;^yv@AEJm!(@`bCFf-C=XF?*k`TIR>je%#}&L$KI-SZXrtQXi?~vvvxmo zorQZQCvYyZRBV_1f{XEh@$qegG42QEB%dGz4=?C?2rGOsn7&eyp=cp;sycEC`%|;M z!WrkUdBIvxGR4%|wh68qZ3%Aq>f$NC^J5*?r#ripM{}gS=>ECZHaZR61_rEsdfpqK z9=*MMuf#fFXeyyJu^TNTdxxJVII_&vhn*LPwd2#Jg)ibkY#lR@223^V5IVdWxI3LD z(}2P|k8szLJ zsOq|(mgS5`tOk&uK#JM1#}^HUa~|RjF6(W!w)G<<+Z`jBv@Bqd$^a#0$;%Mob@Fj| zs$oV2XXnTw1v1u6sLOA6L^8I63?-{5c&PqZoJ->Qta?`coFj|#xum-2U)Pw)%-%9T z;3>6Vlc1>QiK3*?EG%b0NqJNP3Zaj9z-Ke9c}7`S=H0jEb)S&Z-fkrgjd%RDqn50g z8tGh#zOVy*=^)od-YTgMBQ>5;?UgTuPcup6QM7&~VHy+2tIE)v)bZGMUOsqypZIG- z2IIS=gI6b2;+%Df;Fcdm1$)x^#8z{4A|!$nyIQXFJd4|oq85)>^{j3 zNw#QVZit%JMQUn8O2yVKPLwWXe+$@^{BM@-;Q)=UKOy)MlScH&qh0wfI`m=!NwT^* z*UZIiQ*~9hzS>CCvg<<-_ONrJ2mB>Su@Z5c?xz4TFws}e6kxWJU1?Ck`<6bGuq>+<6v-`nr-$0X&ua>k~_vlnLGCNed}{qR3ZdNKty$aF-x1j(!}Osq8KF6(Z9g6 zA56R8dH8|N(9sS+(75rJd_$u{D_j@pX~=%}aZ1H=5_4QbGx)yAp)4;K#UjnyWd(`7 z({k})8Gk(=q1d0Gw8S#yO4iNG$hqJD&K(brapbdzkKIi=yQdU>o638F%P?K&V~QC! z6T@S!32bxom{V{@4Q__J3wu9$9&>dTl!Bd;!F;a#COBoGq1uzE4@mr0bkjsHb*>b3 z(v$;TTT=5fD{*Z!uB5Ds&Rb2?LJPEWf=JG(R*v(f%llm&kAVxay7^)&l zc!ysFeVNbRovF{Xv}ioi0QG%zQZRG{aPvfi5=-YBM2goijhP6A(0Hf*d)y9merlJN z3=T?p>R~Voeg?-)sT|~z$p^xG{h67aZS3%{w|_U^0zRud6<16_6%Ho7ytX8fg?Mc^ zPJ1do?)N;a#Gw{JG}9^_kPd2(;*|zH;BrnJRMZ--o1aPDWHA4_TyCJ~4$PLwPrkQJ zJ<(MYz2Y-fmOh>YLob0}sWH~!Y%5FX5XkkX=rE{1gnt6Q#qx=h^B3q6`_t0ya}rAw zBdv89vxL=Od3gKHhET8}`7?J6Z()}&prJHGtWCz@l;iEpe_^;>b(tLzHSZmVGPW>p z5Q;JTGT7o`QJ8?`Rrx`)3f)FHlI(TYIx%W7d;9#@i*abFrJl4fFCW{ZN)Dh`a)`CN zr|Z1T7A?V@dMsc=Wj?ShJKv$~m*bz|ScVSx2;xnurP!y|6(j28eKv*OumQ-H;*bNY0!L^9fM&x(`8y)~t9_x@^fMwm)1j`D_S#HZ zxsJpfDtE?iHC0D`62Jd*e|T*7k+KvLl@hwtl38n|vt$c&2iN%#cdRlg{5^ghY67Sk zK!z(Ju+LHqseX3P5%$I{DsU#fMV;~k;OOiOgsI5ZFyR?q;reW%)n1!EaM*_!<|qU+ zf@a5#&@N$h&9tllF3f<}ELOt;vZg2Jzn5&PH*9)K-jwozwmwM)7K90(4W z_y9oKS46!c@sWoJ*;v+^QWMTbMBKUimk>8mzEi7A{C{&qqiw>-F{MeG8gcao6t3VF zVS%wOYUcvssq%4*0WisPSQI+*4}@Y29DhkWn=+G0`%=`JO5R_Wi==3+G*^qT{a8BCX>|Df}Y%YxZC*u5Sna*lo4p#!gP_NDD z1-H*@5^Bf4UWclGJcg{{b2>jq3Z7sA3|??^a`?lf{AfnpotWduu)oKLi<-%CHjSU1 zk}71al?g)B|D1HDq8GX)EO&Bd6Y%Z7tuSP~Pn(S!0(66sn4;~auRiUD9oCZYaM|Jm zuPn6O1X}^L@*&IIsCaMkioh#M6e%nFF3u95YAF2juIGuqk?U`upo%M&~`V$&qB9Y(6^BzfQP-FDiZbb!2Z^NVHnGdOF z2&btODdkUkPSrn#M@Q$}Jb?ytM3Kws%aeH*isV@1>bVw9od60JgUYU6Ukf6jqS~Ldy~5D z?X`AmonO{b9XIPAZ#1{pDXG4;(V_bMW~bd*+h}n>W23pgxwW>rwZ6T!wbtowY;Sef zw%qHt(QL1;w>Q=|Ho7!e-&|t|PIh#gTU*>lzP{G(ZfmXAZEkFAFhYA{ zbG^IHK$~lu_VxN!XKTB)(b?>FHuz_2V|(5E?>5&uYpv~8x7FS3uCHxxZLkb=)ZS{Z zZ*6jU!dk1{Z87O>CfaSby6c^-t@W+#ZM|97(zykq$;3A~I=R)|ZgC9*E#v&xo2+Pi zZF`eh@q(9Ix~pNmxw+QutarAzH#S;8Pj@$L=<$ZCpSQQR7^X#cOo3&sH@n?!meSg2 zZ?4WLRl#r!+%?RDKt(Ohrw`{u?r74_G;o1N{gR#%VLIL*1f zwz1V(Yj1Lo24$aZ*v(V;e96%WivXeT{F_QJd=%)>~T} zT>##)h1s%NTl!6y(Aw&->J0$F*R9T0N6T5~?)dGsjc&WO;r*{Q^-+ueHa1uxpymDT zjK^%tMyJ~Xt$@OIcU$mTYcjF*_U6VW`?1|^X&db8txmVw0k^igoet1nmYruaU0Bvo9B_PjccdZNBu7S2~q#Ov*Sz}jt-CeiGY|1uJ=UNMv zvBoR|e$s*^(-CVHih+h}z<;gT-2g+`)b0kzKwm(`9l=4g|2# zUEkzOFaqR@^IxYT`x@YDx7Rw1z6nsQMW?k%&up!L-|B+KdQ6Wk0LEVOFPOEp1%C3l z3$<+XWE+6C`F{cbwe~i64E=6{Ti_c&QVVEgW1IUr+TCpkXPfI8Y*^sT*J}V_v$YOg zux|Uhv)+Obg@YTN4Is-sErvg9%{HVCk+!&uprfytv|2#ZOnR*gItjPe`N1Bqi3x1+ z+ZKolvO6{~-!&s(pu5G|pqki!3)UeL=ysrZ2pQs0M^H2k-~=1(?s^x9=(-jjcj#x6 zHSlZ$JOZz|=Aj7#Sp#3!x4Uf^0PBT_Z2r9B6Q}|(a2v$dHV6#<@OZrot6SR^ZUPCW z2iSPbR&>N*x?JMGR`R(X^ARB4++cTFZTMNvA9zLoz(Q!(?ZO$sbZY^WH$W$P){?e5 z+7`YBFFW0}RtMl~qgk*$Zn2_uI0O{KN?-y3e>zS05?Xy5$^+3sm)1In$YW6zNX-Bc zG6M_$dA!!yXm>W&Ht1rr#cs9zYi$72>27U6PEatb4e$Zap-%o5z0i4AJJx{_GZ>rI zf}y}&T3cc?JZ2sna6O2CuVIWnf0n($&wRMO3C=Qwz<+4LPQt%nu&|UhKqQXXX?CGO zfZk!}*AY3;txXhi12MIN_6B`3QG-AGPp|O*b{pQ-YC&#s{@@LaoWWbLA8zhh?|6$= zmyKlzP?{yN@1Ru&Zo2_=0S~i*CSauY^*R%W<#D$Qh_tcJwJJG$#Lu_4wvhsK&ztR* zcO)!>Gr-pnaL}00mi}2ey|MuI9H_y}^cXxd?jj_FRNx2s{9zmHJ0M`O{H?vW7Hkzf z4YUKw@E@3pJw^^~Znwcjn8DgQ;4%DxdmzUFF>nAUAdVdWnWq-rMS{X@5Ri_aOow?h zML16fdV$la{|?v*d*iPzTg+B>4V(3lS;}MBiUY{pB%o6Ab~l zLB?ol9r1r2!v@%Ev>m7(eF4U0kJss53xj2#Bp?U^{?I}c1d~SR16hC;TceH;2QcLp zWCrU7v>U*O$FMIg2{s9j1Q`UMHvCiKnh&AGHL;YnAm4d~>bKoS_`oH^q1QKT{!lv` zqMo63X0{z3qje#5;8M(F6K=m@^JlDW1R;D1UW*0---_@NE(hUGyKTns{@VygX%Mh` z5zV>;NxKPwuoFNXd;p!9E!4-; zF*Z@QHvBQN4p~&*7&LKGMZBYg9z|Mw``pM@$E@hPxsc zB(g+E^p8RXH_|R5$j~6Ww(a0D+Xua&har^^Qh~qG0$l>_A2_g&G6IC?JVpfp(_qBg zrY^A0dJNQ%){+1a3V6=c>@i^9hL30-a8^{Cz#nKqkH`aN#C%Z!AYf|&^g(ZUUPnq4 z%Q8T)fnrBY9w@anYyVmj0h+UhkYDrl{ACt( zU{bPSz;h;K_-P6wntmIaM-_pu=lH|ySxrY$UvOZ3-a;6NC=!98lCd@Z*f|n34T#sI zRoiTkX{Z^j3;ba!U}#QXYr+v2FiaE)z$@L7)@~x^84{HeS!axt8R;?VrKACp0hB=4 zuN(eDnaDu|9bEwfM#<+7j$y#TnP48$)G%SJBSen0Huw>Ij=_eGO`co;E~e+mhBi z)-QrFyN|-EZz6rkoD{%7XHcGXZyWuJX|oup35yO9Es9h}Qeqhw@MER04ci7yb`%5? z0wQ5$2VfSP{Gx@(O9~2Xon<5CZK7g^GPa;IOgdI4`QFAXMn7GLlQBGE34P4y7p}m@ zgPK@=a8}Sa=WixMVaiY?QdTU{Td+tb4Or;{qkxyzzZ3~%KcWOoXOEm)0bVA9A_W>t zmcZ}g{J|Niih6Mk` zC-V6-O>iB+0UP8A+h>4a7=Xy4;oKmj(APRb#bXTE6$Til38KLsW27@4>Z=G3?F6@k z&A%o2E~OjR0d6ASCDLzm0gSK&-p#zXsE5KcX?+N2Xh-He&&3U7(X+8o{1%W5 z`^`H@5Fvyf3(3mw1JPR>AZk7?>FlVIOwgW#UTiq9h1Qrko(A7P{lxSo&A=IW6{r>0 z!A3xK*lXaTlnRD7m_X?)1AhUXfsE)ZBCi(4ApFx5UXX%`3(odjCOFs+?ugw&fst>} z2AKderYATmoDXK>V@SM6;DK0DD(3spYr} zF9o$g351!9CKhG*BR(rX5Qe3EJ20v+2Kxl%OBI&pFUbCkM_0mD8yUyw@$uLmm!O;L@d+{G~< zU(ie@j(U>Kv|;lSgjhZEMD+k@;GRF1cLHf4e!&#bU^|9yteSD967rYu3!#vY0XnhW zqBmn#k}H}ovR5u)wrf*lD-LhZVFTjd;4B2g21?V@_p+!Z{%DT6%iqY~I0owM1~ZZ+ z2xds-aQ|e83V9^YfWZpeMcXE44n&ArXzE`JsSfX9Lx2?8DrksAj$^Q=LNuTb zionT$o6$MwEpr7Y4ic#?`f`2+1I3y`*g$4NNQoq^LrfDBL@JkDS4eymsW8Z*+t=SE zNa3-MJV;@5fcb*Hfk6Q6ODr2;)_rQQE0hhh6j?nCNaSjmEx`inu=%*m`5Bu9%80N* zHiIm*Me&j13bQizHLHb~r7la!mJdb-sLMpH9YjJdLG1_)h#Pt~2uZud)g^;p-V&Gw zh**pz9s%b>E)yMqtk7x09FY%nk8+3hj*wuFq=ae~0yl_-?*lSsawz&nnX=PC8;D!z z!!`mDEVMv_ycOMPS=uJ1$auEvFg8H~@WIY-hay>tF!)%gPp}&K2k?W*>cob$H4i*fX`5&cpfHj^CYWBBk}2DW_tHGf2-6Gs z((BPSBpw z4($a#As8j>6ZI82D|qDNpwS@KK?Nr)_%i&>TJa;>EME&ck#^4o8XBb>0bm|80Y&&; z!7)t$R|(_eS%A~50||7vVjR>i&;aKsTDBa3EWumJiZmH0B@rZ|rN6+AAuI$A05Ta% zfY@HZFTfC(xDbL5*t`P0rAp*EJNGTJQ zZTA;27=FPZl*S^H0ahAO8(yfm9^4cRL2yJF#`oxJ@)d~$H3Jx`cZcmH28rZmSK+j% zJ^lhzhA=>Cs1hrZ6gR*xPrj^ipy~>rf^$rU znKLJ-1a2nhD>IWqWu(Dgg6ptuycTgBtTu(<&^1{mGef2J^?=cAH@pab3?pSoR|Z)H zHZ2PT0gM`fTWEo<12%y&$VVn7S3@xlzX5-u2O=%d8?mC+vRp=bj=4bZB59N^tbu|_qq#GClx$#xnhGay*#;8G+=Zg#@sY4{79d|LXeY-G zniCtu9Bd4l5yQM_B&qA6D_7hWO(I_JD z4C58(W)_=)Ey-&v)gvc-Wx)tQFij8(iXw1q^Mdc0rw)At*$f&xS40*;?ZAULf*d*W z(Af8^8kGUfUHHt3M5Ph06y(6;&6?SAnb=Oj`~#p+Vu2Rmf?K++FMCSzTTu%v6ejE< z4pj?g$La~$nB|AMn~x!(#57F?!Fr^b+PvTyD4WJ10X>5#5(WOq7DAyyn$rqQ3U&r~ zgXs+AAr4VQVGo6HLGxo1U;)IK6dD2_d<=P^Kv~5s*MP3fNE-vSLXJqpqF#gFfi~qx z5r04kv5$y6yo(W5vN++6;GpbaAfkXB^F^}*4cK5_!a__5w&x1U2>W2)AbXTULS}>p zJW!GfzZ<4_K8Dl-xsYasj3N^A@SF7AHxPG}bjkzwY~@hy{60++Fr2kLI+tJvVc=WAH!1rSWe?b+)-qO0M;W$~46rW# zA7O<;DaDCYEonfKHDMi~7$ktB8I8OvE#2)`=E3&Ck6_j)8X%nO1u}q{F8o*?PzW~J z5BLW=8-kN!nt}HzwG3ei_OK<84s$WMBlL)ki7t^ND73)M*DYHNZ2`K4O=8l)_49QA zSvd{>GmL>gk#)9qD1dMQ1O=o3B=}m*ECV zlVl?QjAkEv5D{|zI+`38wD4$SPCwv7xXYF5aNL46G_x3+AA9a%406zKIle70c)#(60YO6|Dg#ZexJwXp-1{LKeZ%`50t_1d)Lc^vP?2r4{SoA!rH0A=FS( zwNUE|F^8B?t^qMP_CR~6b%1U>$E+7Dm2>L2u23R_VuFA}pagO)=j}{h+zohZ3{Z@H zw7%q|MVl3Afbz`Ry(Q9ML2+;Z-N^Wmk{=jbVJ}HC3wMBDG>^C|3rk@Oh+2_&czp0R zG8`UJq#JzEn4J=>=nJ1Q`#>9XB7g;kE9tV3+ZrEGKlQFg7|fWQMkciv%7ezm|P3$&aAJ`+yZmKcGg06$pw}jiQVh#%J=z z7>U=nF3;)6#BP0$MF0lTwx$p6ne z&`nXo*)jAy+b22hr8VHB1S;}KxPAp@pvx-eg>nG#=TnQcj9!%4wEAEB-0$K3D2UtmJ%P6yOJ8BD{_r8?Ffg%RGfPN6- z;-jns-AKAND2t9LiHqR0=h9cfOU+C!dEVtbkR4ky;BM2s{Ry z6gz=afS|}74WjRjD4{>pZR9H2jpDnuj`pH(4MCTK(K!cW@j;Z;t;n)iEO6TCGTf$5^60V~>y`(JZg05aK z)75J~prcvk3z)nd9!_=Dxh+|*I6Bn$^2=%o3#(tEvrPHv8;(~~Q&?xnCk!5I@#xN- zuKpY_mmnB z6ldXBbaBXAb-{JFO1i%}ghS^k%6V;g^~6PcqaP=dNeTQmUpS6S-@7cQ{(*{!c;Ap~^F+fY+PM4d*^ zX0Kaq_NO??mhZbNn3U@W#K{zGX&HYBoB8?&Hj^Duw=+A<%UkWgP?O0w-oE8LS?o9d z%l6%;gn)r7Ka0<%aQQ3nwBvD{$M5s%t`5TA%UWOR$SBW3#R0vdL==Z5r=z;w8^>1u z=!RPBdWO+hg+}c2tZ^RR{q6PNREm|u{n|t;ySjQ_)ITpy&c|s-NMx^jR!_d?JF#b!d6+%%-S?gw0%w9I_6|NY;&69VFQGq~0bE&j34)GE>sr&Q5N zuOqQR{qCm7n)=*_1-kFQk%`4vVHP}VtXu@H^tP^=f**tZtaM*kB3(-b<&8P}HDRh{ zQFl$4u~Z!_=VCGnVo;sL3R3yyUUPeVW1 zZ(kgb_J928oEs!Gt?YC4{Qu$s;D>NMZu-%|;BN<~1I`4i%*PWeL6QBDx)D3qYMCdfqo3+)L;@$pXqxc@u4wVGr z6$gO~?iI4Wg)~@n$3bY3uUn`lL6B~BUWZo`i8BmKt+}hfyPO&I*LX`om} z;Gt9E(o1x^zQDgPtiXEI)rwW|#Yxj~t#r-6Dqe+?Gb*`^SE6-#z@xL*+5Qx9kBATV zph?5XqRYZepF;}ixI$i{G?;8a@qAGWnQx9-adyGakyA}Xxk%g9(X6bQZbmcP3oegM zTV?fWO|qQ6^N}&KmcLxUHYlH5>_cvlpwm|8cicxGdavnS<;sEb^lHn@#yP7-Eq5j3 z&U#Jx(_FAs=bvw5e#b|x5G`=fv3XX47GE^No|a(tR6JQ5x8#67kA??fs5w*s=M4j) zOVevX0qJ4`#bv+xn+M`Vqio1;8va=-IQL@a`+{zdRXGaRrr8y8v2nsIi|_G01aCrM zJPZ7niGG{&0~|H(;{rF6}&Uyjql~ zxt(hs9IDq8q--)r=A{dH&Km`fLZuMs;)0$FE9$*hZO3IAUta$+di{yzsLtbp-@{JL7H|5@4Xw2&n3JbCnz zYMoqiiW8B0PF1I~)mq`Nwm$jhQ?X924#qemY;iLaY}zZW^_3RII=Kx1Jp^m!t}Y(o z{%Y+HyaW6V z8^~2*!_!;jgy=O0^P5$-Vdzb8CU%7=~OXy zOfgzlFBIkxzTh(wEr$C6ns@Fbn^fBOyP>OlG24P}ResiYVTpELNnUmHzx>R{yyNCW z)m2~2$;ykX#hp8*<(s$Ll#Vy{ckD(gh5qPM%_&(!Nt+A4d;i#+m9D|)LCJMLYZ3S7 zcFKOnKS8VV?g~df_@v8%;Sb5Dg(DxmgAJheeX+(X-^ZyT?-USD;T7*WHe9aUa2x`E zA!d@Og{d#CwDQpl1#;)ySnA8Wxr{?0d>UKK2UgW9m+bA8p_D*q4pfqhOOcDowXMmp zC6ubYwlwOu`OYS-8*}_70X5Pon(1iI(`iK$dlpCaq{Mjx>B6Lh-raaE{6?$n301I<2K{lk03K8MW&dZ`G8ZA}Mv4$<^WgNs z0M??wDYA#qd~lpb4qkHsWaO67<+{Md61FS1|2=H(w<7os=gjMidySh~Uz%7G%+YtA z%Ti8?cb#LnnY-lUd5@V!sGgR5RQcrG2n}*C@XKi{ihQY8x{MHRPs;vKV0ud&*^Qo zV*l0e_EpTlj&$F`NPIfw7MoKtOQ!wPJ~shzyp05fe_OWI!dl?;I$FJVQ7>lJ+33+>H$-nY5-X5A$V zWZ}t3%P&u`ORubJimboBuC_v(_uH5z(IJXpi>9Avps9~}NoW^;ee>KpU1^hg#;uKSl#X_> z`dt0Lef!4#{i}cS{97^fhW~OynQ9tm#uSVZNNmBFT<@0GEQk1I^0A^76|K10d6o7e z7<0KEky|fremzLFcdY0{33eN%NC^MjAWh01f%ne^;Lr0;OWS<8rRR9SPV2r>^|Va( z7Pv;FI&RMwU@yp2m&4^JCnA`_ztz?nwXShYPf#;b6l{=2K9nw^RLe$eUVQGRwweW{ zRX+l3W;`XMFeE-&PoEbwu`vBWJ;e3;a%W8vpJ6mSYRA-E-)Tr&Y0yTCOd$h+85`Vx zJA1Vb_u#_GckVyTQ;?qKXd-YV(Y%B+SS&9la8<*3T2)1{e(1l_7J9rJnuP{M26eP#?%wsRgoUlL(PRON6$DhycOlm*hl3_L zn&>KYzCLOC9_rWM@L&E^;4f5swFyDg7--a^B0D+n-H|Q^9upuhktg?lU=EpgmxB4; zy%fxIS|OBDJ7qC6J;0elvwSw^Ei!Lq`F5_{O!67F6vP73ABG;qzFWQrFB zOk@R@IUKC*yWNModrx~09zXnk_q(0m-tNO4etGnC@BX7b=W}kS^I&iHK`)r=|89}~ z%AMSCOuvpBC$rr1tRcldcEaa~WijSJ6rtn3d9rJSel`1JR$K?coOfAx6CFuv1#;D~ zI6HDc;3TSC7S72F%dxIyoCiXfZ?vnyidjLe+cau@1syBhu? zZWuYqB~UZQ=>RlXYI){wY}!vZyqf}cb<6u8iJTF=jX~=4%Azd#NNdY!Q6>HdBX?!D zV0p_8d93>NMLQMuXGgksX^pKg&N!juYZn{4(64ZR*A3r}4D(0JxQYKOP+w=#X@DHhPt7 z9l{I!;X3MwY+scmA7O%uArmOXWUr1y;|p*TF`x9?%+6UCeU`=JY?lDy0hs}u0kx=A zKi=hj(x1KzYO#g>iyPQA=NYXbJJT8bWS<(`g-0%>AzEXhR zBwcZ&^(#(lpEeldW*++GlKCiV;tBCe=hbd>{$D#+Qd>GVZaVZ=k`Wug>1O?T;9Eh* zseE4Swno(-wt&(BWtgDL{FUSg!SX2Druh^Gxp3vA!G_4?*( zp^7xNfNGW5*Uu{Lvhwpy5WI1*I;XcQcek=&UuHm3naZ4Bt1AQq_0yUU`#^0Mvs9)r z3mY!b9P-?C`@6as1$SqKc$dTVbC7hwj?ZF9g0@B|IdfS2>Ba5rr`a!rZk!+QomDwc zgtBNzc(n3*)ybxY=Jf4PeAhd>X`jY3*Rc=%8({XPc6T*MvMi|aR#JE*?Z$^uC4uty zD_Q~m@X@Qr#qE0fo?U#gqj3lW$GxwzpFSAs*!t^3@6Vn*`gVS;7`^=>!`sO@>cFQ- zEI0}73$r@>xs6c3IUse7?P6^j>aj4H%HlNS^38KQO2rN?M>`=pJBFVlnCE+}C;)T) zj+glyOD@Og{8{8~j1B6%jSkz{rF@Yc%{jJkbkH;vHd>xSrU3QmO>|7NopHNF9>jSt zyTq0F?ocZ`10xV@RuO88yoa%YIS-cu5TL=ea?l|2q#(Zlo9GvOJI^cgBs%viZoxDf zcBR7+AzL%(u#<2We)0K$g?`04AjrRHAdNhw^6z~7%3Y8%#5>RRSQ=-p8?yE*7h#Gr3T-aNZSA!=~ltuI=xeSvT&r7+{8y!CM;%s0YTHE>af#6u!x#L3OL{eJ5Lb0-w zvvU%xi@>je+#>kapwvH9DMxwr=#SITXP>#58Izx9>ENn|hUO%I%t`WD@c8olFB0mZ z2uhLk*oPx{i-G?tIbfIMe^KVKn*XIsTt1!uS+H%__6ozuPh>c5uFl`>tK@)vItnCl z{PS>Pxx|Qq@=>7oKGw7Q=#M*3p6>q9f^OeFdA9RtZ}ZOz5lr_>_WPVT79FRCChXc7{}pJMEtn z7gD;?cY~Lw8P#Jq;_0hha*6t4=*oJx^SGW$5>+1^D5_@(J$#%xNd_zj$64R9)6OP? z^Mg^(m(cUWQoZ~%Z&PV*dF`{jS6RZjSW!1cI$mS$F5MwB0DBGM|LcA@e!J z@}-<8zN6uU(Ii#40LQokGRMQyA19$a+V@rk?)QV^!X56$ckR%Pu^ z%_q(5J8HWe9gH|prkQ-x%)T8R9}ojOwT>DL3ICX=s2anO3v$-XsExfsLFi_7I6b?w zy6UTK;umgCUK}<1`_2AzmE%sUQf5|PP4>6D&9jMhH&c&IPn88ZI-jENa8SYzXDb)d z4+~n^go_4e-BjFG(NV;_^5{cQRtu(bDl>A#HT|YhXU>#>u{W6DTmpQ{Gx+J z>W9(~#|L^C*h`qjM7Ya-WM{YiAczK_Zt5MXrxN`jJ>ZIG_^2d!bZTb@$zd3)QYZ(^ zsI>r&4Ds$YNOOuPM$dkl{Ts^Qy2U= zWaA}!{2ZZGjbvh!zbM|tCI0r}?K#Zzk0=A^rGzRv(d49WY)N24*t z>Q1z(pfKC~m__~G*b>GA{H+5oitBr(-7D5<*g<8`^Qk&(OPk21pwA?mScz3u$>3V* zh`+{@tN~XAbM4&d=VTPoJ>&!F-DqaNAH5<2eQfBdCTD#)w@Ltv?fe3kYzIaG8zC=d2J9J<3P#8K#set5s4nJ!K#LL?7J#40zTNeM znBqKsA`?`JKSEUTM?{nJ>l}(DB|Y%yIr+J87<@~#8=mfut%xSgUM%0tXq>!kg2f9P z1!&wB)9W+Eo&+_m+Hq;Flcc_Ho&3#w=HEZr`6EhL@8SIiPe}ZH_Vv@f-91a<&&XBH z3vRrSAE%Z5->gkiZJumU*YlF~r1GB6R@yOl!L8XOV=75)KD|_+ga0n%GLD!km&&>m z&jFzWZ0r;GhyH}TsD%h_%}Oy z_jkYR-G8#X_xp!C%11M#e)8Ns5+t!WBb7h(Nin3Kbgj=+UTYzX#In~pHIM5 zuT&3k&qhOz#`A-E8F;1NtbZt_P*2nYVg>>0Q$UXD)IPyh+dEZv0#PN{mHkK6T}-IZVeHrEW6G>XJYkX?DnRLxS~p}i%CnusR<(H@yHxyN zNDqzO=@-6mgwWK1W8;UdOMzCGr1AiKM2d?Qq?lK%oc z_odNgC(?udF&I-8i`}|tl^+t3LwTUupY2W1Zi1dPI*hQ?zUBIewzl0Y3U(J=z#@4U zhrqzm9Kz^ic zfPJp5Vac(UU?UkdSQ14pqV3v(H@?#Fy5}0~SB&V&iJsR6sFN?V|KqCt`6OwRcgsw{ zfCG+ypAL@PaIl@pKfv!EIwM8I&gO()|9$=hxn?0OW6qGyH6oXw@E;!LsbfJpaH8du z$M!oN<^ZQ%H>mG-tk3LlBwnsk2Go)a%88 zQ?-WsUyh==99jlJL$9+kB~~`nPWNEOy2vEfC_yKcA$UIFI0m9;uIy3UrBoC*C&PM8 z%J>#zimF7jXncXNDG3<_ca$@+k0r&8?6s<#iCtWWxXEWGF3T?_=H6B46fFM|0TcJ} zXfR!{jj0$aB}?L!El#1G68wm6kE*SmXOstpE=_H$vc7l%5zmr47YoEXy9XbXzp)_D zoKN|SJ9lId^{5Ngz{ZQuObAZ{8^V_o4IYteh{=0D-ml_*wztYy_#M(j84E58OyS|j z0}wA@WDv8_i4ZDV?4lufN{ekqt}5zzA@cdzG$I@A4F-WOwYhUAe%%v-i?+Om#qHS8 z+N26WcK_gKS?Df?O{mQ{f#k0MvHp?og-r~BxZfWi$R3?cDI~;TFsdF>u(~fw>YDlL z@7Q!$UVkT(>K|Wbw{HEt8d#0hHxdR}3ach6M{+C@8a|4S9E#Q%#5 z?eTzLAWK)t>cn(y(awd68X~$14nJvk(M%C1!KWhsC1O&T7BmwN(Ji~mIcYJMuCunl z=T+B<_QRpKx$7))S!UN6cta(DB3A^jl)>Wu)QY}cx4E;m>MvXI?d)~f+{g^#YUN*e z9d~#^l6bXd{k$dS=h-4IARvp{ol7rqx28(x!bMg~bw(~6akutR+U}zV-=XgG9_~E+ zdgn=R_tCDRV!Qv3BWRBweTLeX-IoVLDG~CGf+u5E!|fRdnboL}3lDDMzT4oGF`iC@ zWb#>+T`upTlUPuc6$fpMQq;NW3aR0K;WJLeRorb~zV9p~suU`^`b-iZ-qjlyKEHp~ z736yPKkEW=>*PK0_!q*U)LW3B(txI87T4tE=vA+%ib&OtRk^}`Cb`RRMS9WS|B)yv z3cTVJNaq*BW2)-ED?t@Lc$6xs6pKCaMUlcQvVcnY#4ENgO8gZ?6eaTOyU7dW;n0xd zJ1r3?2WCcHIkm205ZM8XI-T_xl{!v!b&Vj_Ue5e7jmu+kR>~bO*gssodYQ*)EfV{R zd%7m)N4m;^U0-l@)^6m(pQ6QAj208A3RN@faVUhG?n*6R>-46#v+cGnwdK}qU2V?g z(koo>%2m96qjvH59{EKv;I7S_&4_a&rkYE4St~ODbb|eK|M>iX+aT>hh?uX2v=C&X zE@Q1^S$IyPj-!>-wgt&F*Or#`(K@<3|1a2EJ-ftBNh?>L+v5B`yXd!4|E&X_e9Hg3 zGN9j~!D=P{Z)UfzlJ@th^xJ6PLNg|vaBW%+$$#!1#LFNT&#fSe#Lus zhLJnL!)WouL2xGXe5_U$cp^sVE=6=E`Euo+rVSAsUm_6ZTYX*>N@?LfJF^qCJfF#4 zd3HKf2F?@nIzFoa>-lQH66uB>Et2kM;Df zJ1eBAMss)3jPBe?Y+Gz@HL_S;C>fWQ4c9wNk!(?asnTuga%huJCNK3{8aeD!TBpv{ zj!;7JDmRV`m7n}syoNW}mbT}X$0Z8TCKXheyP)e3lk^s<$8a{Y zp(;D4${~D{*AXcdiua;L^}NFz^(rOF#eR@3-Q|Ol1nDK;YezR1Re^LF1+r9rAWTU= zr?Wx~q}A#;FZ$rme{Q#XPyTrSyJtJSCp*8}d9w59!H!pP5}Y0+={Z((X~F!LpLI?I zs(rX=Y7$3iei#mU}S!}Nd?BI$PAqlVNyW{6%64mX_l@o|^ zE_T}|6CJ(6uclr$Y>q^=dZ+R`crrv0{)uZV*U7pr_~8D%6gqjpHqElCg-!O9^$-Lu zg=>q2Dj53h(y;Q)AhPqP&zbd7!Mo z;R1PcHcjVpM( z^xViDSTwsF3m44o>gc!Z>?$}ECpzmn%Zg2#ANek}GDVvdayiO8N#ffHviM<*9AFiZ zL0LJZT}@F{Ftrr4O?$WKx$z>2D>2wSh?I|$C{~LC=t{Vul>dydt`zCO5fgAMMzSR* zP05T03-T#A)ry+xP-U@0$p#a{Hs$CmGEq}A=pm9^1x z9B+=;d(sZu%aN{hg>md*kGnkL$qbc3<C2_r!9+q7DIfi?dECeNOeee41BVcK_o2m%Ute{DNg$W}C6LvO0W~ zDk}9lRc(UD9RB}ns-jXSy}!sswxb2i#FI$4HWap#RBGnIEGL=GC<&<~T;o%LM}}z9N-GjD;Hyk#Zhcg@$lx-)l}+cUIQr4LJ5E>7h$diR*{xcF?foUwX3G3 zpnHX6jU0pvOQh7V>|&t_qF74)*#9Gu*qB(#Hl(UlKSNnT~y2pWofa~u1ImIgXdlE z183iOiJX?@2TUh*`M8NnHIu~gp~iHbD!SS}+OUOJ@S_b`I27yBGoH`nXH=NEZva7K zxrFsky(<{6mb+u48ej6ir+8NJ7GH)Q!GBgxlZf8lisyEL+gAE^X(%0itIe9&^Q4LL z$9q%^ADi#ac|*f~yFv%fj<3=UM}ABWmM2nUi{?oiCErC{-TP~$#hrefPAluBrOw|; z_bYdvYk#x3CPf_u4=Z4T8h9$`nijzIvx|lG+j~K5#<_W2(`8tV(5SZCyQOW4$rj$F zu~%-8d1Iq`7X%_X`Iqo+GuZ7sW-#}1E#9VW6ag!mX|Iu3C z=(MZ(AKkUir~HqrL;C71Rx9}*)!n{I`p2iLPqJI)R(<+KFM#JJss;6-;>D%;S4pyn z=gTch-azS?n>4a0FC?UBq$pRa>K7^`6(ZTDB8hB{D$mP6AWp}_7w4AJKXZ4yn3gAG zgcDIZ29-9!#YXbPl6S`+9*+>Hr$;M(1kat{Vfu5gkY|-TPL4*?q(IMw4&~xy)8ugx zgz6njUFfd0l;GnTt`?G=d!zdk8to~ep?Zy93iU#(_AM!{XP+6fsI*v7u&>avh*cNr zwy75m4XbHmA){hmxv899Rc>uu+evdYOi>9r7o}CE`ySFP^sWBno=^Q!3VAEAkyqKV z%$wqFcf+o<*Wj?VPI4`*lsF@g?G-O~&$p1a)vNkiO)4!FBWd8upQ1H~W4WPOCYQOY~h{oa*g|XN;hVP2vZHL6OXl><)Ok?6~-Zk znP*X?NYRMEP^&6@E`x5-b}?)dxXyuPp|g9WHRQ6yIo-{4#8Jke+ZDxO>~eNSy0Q|R zTkg`NwE3miCFLaP*RDG;CKJm&cryefl1g_nddCyOw;yK%lEoJdx9EOt7tf0ju4G!w zNZzZfaPQUPa{ZsGC?T`+T?bmM|F^jix?9oz+iTs{C;k6j;eC~MRsFx%?Zuk^h(eMN zIkZmpp|14qN~8HEs$vAvEu3j_&aZV&J9|1hoN~NkK(WL9!Rdr-kUy%bFvl>tkE5A2 zNX1YW{e6qEpDIg>NG^f)?{**TJbJp*Yxi2ssm|+DW=$z_eX9-ka%%MtU%h(OH07{4 z8Xv7znviv33Kv6Ub>Cac--#wkNe)hKXIAf62Sn}2h-ShvXY;!EUUJYobAY)brvi0@ zv8uSdqAJk&_-sUq;T=JN`LcHEpLm5pf`l5-b;eht@sCR7jgjCNqYIys6-r}HUPe|< zNGjb8^CF7=fKqrVxOFRNl>SaROe*zYhgwx958#;&OYtHrL_wD;VF9kvB4>Xd z4qkaN$9&#Yc+;`t7hv2=nKNAP%s%q5D0Dvv#8X4s6P?i*6#=jFKX zJ-M&jC4c|@_n-ZT_f$TClf0iXR5VV{*R(pEkQu9zjP)tvl}`;ylx@8H;}Z%;_0CTh z^-Y1-RWNd8LHm3Lo#LIz zWh+tbX-_@)Jgf}WX=Rj~AnG|KPXjIYeF>KEOer2%A-oZ%IR|!gW~Tz5dp9YQ_B&Y0 zi}T^}bVcVmHK1lLkT9mNk8V}5kzYsI-xeb3-$IAtQDHXZd|7`CKhXgZIQ4|L2K2bZ zI`A`k3jVn3jpRbPGNyVpE=xNv#?H~!P7G0zw$JGe70XRdF8hIyeKPdCn1q`%GqgUJ z#ssywEQ5D>NUcQN;t1rSISWyt6^JZyNFzG;e%$kHRUaY2;y2C-=8iiv{pDHJXbkVA zI4tShR!Ljyi(DfTnf|pp2Mf``wmzZ6nMuusX|FnokIKY6X|Rl5IU}ravFv~Um-4uZ z0M&mV04a9mY%gb6zh1sKpe!i_oYJ2*TJ$Qt^h>P` z-QYmx`E%9<7g69`oGS$4V6DcFCg;Pc4khOYQu5-$Xr^dhp}x}{r4#bAo$(5z{mU}s z6fY_`a68|bATK3&eud1s#8|YS{F%!{c{hi7SJ~4waPmSe*)xwov@~RY3{euO!H!s_ z0KCzr(WB`FP-LJ(Lr*(Zvyjmyf+hf{lWRZ)%a+)dN^%-S4_%GfDcNK@j zr*D5%5V+j`H+gw}ct~-KaM<`A3P3FO|FyXPsa5g+t+m^q>OXuGJXx*8|7Ul5u^$j$ z9)7^{G3r={edeZyR$E@5e=%R+ay1^_``)Lgzkl|--+i~!d;Dzg`)7Oe9b`4%%{a+Hq=s>QPLOh_E2a14JWA|I9e={0^e}Kf zF~654*8%e9ns7M-?#FwTp!C9TuQBB_AIIi;SfAD!3LyXS#c=JYR{ z2%6|OGx>luXQ^#>T_a{2EBKYN?k@`}JE@}Ht$GxtAkcGo|}|31KW&vaRp{|k2e zlOkYMV;2VnKawI4&nZ5$O1IzcJlc73pUZ6KYXplL%%}#7lKq0(5K~34A4@rDL4#Oa zZja=Tx_Wzsl3|uFI!5s%Q9HaQ)1@~T&cS5Q2J{OHpV-;)N96)V?k(+fo1JF6o&9h; ze9`1a!lrlE4C3)GTrBpOcm%h)^%X!l{duH2=yZo4fdo&jmtQV`iKs%J@PbJmjc%(@ zX~7+OSCU|>**r}W1n~t92ua{rDN@kl9UR%@rSA6e+wlD6;?V8N@$g5x1n%5@iFiH< z8N{AKXwdaD*R*!S9b;c*$6Uo2OEArW9~xGgY$t_IfkO3{=Jm;M72n1FV+1S7y{mqb zob)iie36(}$tasMyUa2`@dI0MNgmrHu9jn?^oO`wMB91I!`bZQF!p40KBi1SaW#xL zjdutFTP9Ja)(6_Oav#Wf7_UTM@PX$#>~nFCLTrku$8VugJpH-{ zNN+?@$GRJjd!GjTeSFG7E5d3DQ-P1+D#{R-3j@xc_U?OO1rW4^mAA7~FWnI{wUTX0 z>pGM+IJSwQnHWe7v0UmsWZa46-~)u=I7-|gaJj@+VsY$yjTW<6Y2Rq*1afE(1WT8@ z=c#F5gp-vuX<5Ei)oP-1HgJAc*Y%YZUBsbh#P+p4xLp7Hxj*K5*g++hPPxBJ} zZ<7k3RsT=7`^o=vZF{_^qt%N4r*^lmqWN831N2|pKQu4rDUkp2s$BWY86D0!S*(9~ zHXZkNkO>R9H77zw0uGmwJAp`2bA)jutiFf=u(McLO%PHaB$8bTrKLK5?5 z-JrMsazwJCg00W<0eDG}i%QjM&5tT%k)J*q=jkP z*|V&nd_jF|`GCNY$rtJaVd`hOe)=?~T!q{f;A9o_D&iuW@P2amTD@xQaOZ|J7duYz zfNV|@ojfaTNW|N&2qq0jNr#uTy>Cj8g~`uPkGUs$4xlw|fHevc6D>geMY?BFz__QI zdja&3^y_${i2NokmolwV-)T=j;lg2c&Tr;&>^8AizUQz!Jp+={c zJ9lD9)q-u@^}(!4J6t5F@O74ex-=KC^Bemz94K~Fn?XKT0^?M|K83IJwEX^?gy2d9 z9p)r;Joc5(C2dr8J144aIOII<5KAp``(c*C++Zh0BqCZ3XEO{gB~cM0X)9iLx2C!8 zNl6*bRFT(u5C4!-B9ytKTOrkzRV#C}B2_xYEzmjucm(J48K%Gi8P!wl-_4pCG-||6 zx?MuM>>!v4q$S8R-x#R$s5oTfz-yw~kjiijr$g?PcCc}yK`V?Lt|z?2)KGW9Wbgs< zhVjgLvW=Gw7E5iGR~`9vOs2JL0R~kyWyj=LJBWE3j59p=mKHa6c5x&t1|#U#%@SFd z8*Fe~?PGx#(WMaOWsq#SfGV%Sp^`BAF9PpRO8}Gzm7yEjJF8do5oYLsTQpDqBH!-$ zvz1)maoHZ_PkR0{=aNOU2^W2)eee?Wm*zlkK z+R1KZjf<6&8-MNGcuQ-#oADOp#R{sGKx#;SPLMC}Vt9IX?lw@_HqSputfXL7S8IEi zM)k)2j$Q;;vd}c6`Cc=#67Yk?pSP1?`5?NI+!s_pJ-U5rHZfQFrRL@-RY|ddd|keA zSFIC~p)!XuEVg&m_8ft}5iMs;0qfZZY82zilD5W;ybCKWSS)^(_-pMQmv)5Y>%`OP z@js0uhy``t?970e!9$iRntrd=k|^b zxr$?i^U{M?nfo^}K{zAbx@cY>1gJpqF&F=$X1JP#v#rVHcp! z`|3x&LMS3!^H6*DctIPtwS^}I_Bu%m`ugMLqV+{HpoEG>f6jmWG`r1#-h)) zE3Chad@^vid9v<4aegX2b8V0|!;36-Vg~TE- z(`$8gb#<*KO$Xa>LKnPp3kXj^6mmb|IU;Xm9qC3WFY`F*NKF#exnfc-sPoi`OHQ5-?&=-1(KiBfHa5CqI6aI9s%bmp@wNv4DXR=nt0aOf${l`awc#?QtxlDltFA zW=G+0)dM;>oF#}z@r91~3lE#zscDITTUR^JDd$wVJAuSido$oGbtca(Ltp`tKc3w- zv%JZTra%3JzNMK@KbwP&gx#vjC=xP3QFe{;+FnJfDo}SceIe@>Zm|ZTJ^Hv24xkIY zi~KTfD2BC5vyf^A0o|V)@55=_gH6wuFO4m!Wp$Qn|Il$((;k9w{8@*9HPffTRkt{22B+XbV`Z_q+FX0kT3=gPyZ>P0!Afi8 z{_1*Q_85cLZ>q5`-l&tvB2M#~Gch#FqNFS~(Jj=$no6peHxjDkCs zLue?~xNm$K8+*};P&db&XKz}WfnjP!(e9_A7p?A*W6S+Dix2hib(m`=Z7*153Ip^r z*#V<@33ujaW-nP&XO_KX%{Vi?WCb&euUOTyvzM#f?DBW3aIR2*GAo=Rk9JeQ#to7_ zgyQgNX2^mmEuB|mbG?gs1Ga>J&8>X-UX}$;d_i*u`3)~;>uCUK+&SvMIza%?33Ag9ivR6^ z_2|IV6+uIP--h70+g7FuxUr59n!)Y8?+__qHZ5Uw@mtap4#%O6uu^RZAqqn8&7uqh zb61&j;OA5ul3$*KPadoY7#fu(RdNl3I4`@Etovb+H9lio+Y|-n>ryue`%J{K^<4Bk zi+AMT!+9%7>>?)ooC)qo=`hc6D{C;e;NVJmh#!jaGzC~J6W!)H4>rRWA?@b{2e!}? zIM$uMr{;2YRbzHqzY=9*c5KnaudHqqPC46dB+zyeO<7gx#mja(sX%sGQ2IcueORu$ zHfy?oZdx}K1oNs0VQQx#qoe%vupyoCYqueFtzxyWMj&>)UrrdU1EYt#G!4m}_mOXjWRlyg> z!cTHr<)ac}*z0OA&x*_Hw3%k_sm-lZ0K{wV^3M75gJz@wY#OPBEhK;OyQ&JSVJc9@b|6$@?RaE-&ySWlL>abN zSEh?Hq@|qlPWQB~jOlUX`nYx@vaujuKNtHIcV>)}H-{{09 zy5i&Dbd7^sTkuWPp5L>b-G1xpi7?xlO_dQ8Mgm?yQpVp(mw1>M#ZkUpCAHl%AVb#*3?_Uv>m6I4k@}gU28;FQG*5}@&`gX zBp`I>OcgD4=6q62?i{*oWyaE%XtZ(BY~z|qCfyvz>~^0vNnC*$`@FjPl{&8+6dv(`uO{WTCp>huF0`a)^SJfJoswJJiFa#FyF?S=a zTS`3x_2&4^XyO+mq+u6Wu0X*VyxKB4PG1j9Z*jqU;+tmSZt`R~6dN$PJ!#M^6NkO~egwiaQildfq z=bTTa242nKm7~NY?=lmcU`B@OZcCmk(Z<}1qvkxC!GA0BI4>ZhYJN4lpKKPsS5^B~ zD^`9E<=zZ^OxOP+$sat$-}c%Fj&g|D3|CV9$_VQ9zb(XiZ>90SR#w(N>3?Tfz8e== zO8h@_t9?Dy?_+BDn3x;v=e()8A-v-+q2)C`r{i8#N=TzR zJ_ViYj6m@QufQBh&PyF`5Rtaln^e`p+f02EXokrosUM`hWQp=NA+RQ27_bAcRz^7{+itNYzPU?>Rld^pmqR*&>BIVxTN zj}XgkPhz3AS|AIxzoLP-y4Ze8*;?6Gh7xm+OD&B-hT8H z8D)`fvsl47zc*Yg*5`}=cYz#F%?J1I3=M$R#SR|d8O5f(AF!noK$RAG+B2NpKhGYRLaAk#%- zslPX%AbR+9(U3v%$3h{a#MisTqoQ%v#IvU6b=5#}c%s3BRdj<=7pL%F28v26i|`yO zYxd=pjW{M<*id8X!C_FVLb)&PAfD}LJQ1~zGH%xIR~lw`HAJb&ymnE&q?M`Ryq0j) zlhp8H<32NmZgs7p^IkQz`=vpp)OFZmi$Ms{3$LGe*#n>drW{83^i32Y`pyqgO~S zuQ$NigqZOF%_187TafWei2$UJyi+$!^eHK?pqYAgfhf{W)#L_MV{nbH=ZFS(Ep?8S zrn(iqKtxJUveWLXW`oKDerp*I2rk_<20m{uT{xNGN@hn-nJVxTjFd(Ov;mgoBtAr9 z(E9P`1TEVyb`SpgbjKn1ixNfmnbsBf?bRX0O3)00!q=au#$r09K2+3UPm*z@z|a!cFW+6p_LX ziy@o?+Y;1MmmiFmNo~Qc8FMfC_@M5^IVClc+m~HJS70Y?NO0mb2(==pDcw1951 z0ND*X8QQvBP&w$7W0pfL-L`PMj&16=>C8b;u`?TWr=Scr%)4ZFaqu^)--=IB)^Azy zx}$Z{swa3_Nc_IoY`k}cVu4wyrPkzlESS`VLKVOSnI5v5FT0~(ZH?1XH9dDFKn)N+G7}6*T69vmKSVBb{zu`TlBZZY^+V< z0Rt(3M?>Oqp@*8F+c-|>V09kY@slCK*`8sGr|s=XAXvH$?RSoQllKpcZ#u};Zo1R$ zWjRt4i*k3eRdob5G8vn+DSv1QI?fBQ{Bnj5Wl^P8u&Vo{N>f(UoxdP(l9by5jmR?l z!7H*!Rxy$HKA0K6Pg0IuJwhtBzY`l?V*>UZHhbJ`@o*BibM%rl{tC|An?mRfusQ-x z9ZzBl0*_>qnd6ndsN9TkzWIQt+Wj)aK{FdziO9Ei!dwN0p3_Vat#qsx>G88-(~?OX-XDK%UgnjN)7P zm>Q7|L<%AS0>eOo7#h2PTGcRtrSrcxQa^WDKYM||*$)QB0A9Y6kugj(PUHzpYac$e zrQ0-+hI#L#F~=*#ysap8oGm#RfMWaTZ3jXUWp~AB*P5rfm16h+9GXA56_bI%CZO9H z9Z`ZZo;-YbfzHl4m+eXMQw3*lEBsVG+tXJbn=Gvij1k-*>lskcR2n1N285ln?%IVB z1zt`NSqV6B4%`8=C@wynzO-y>Rxs(j>5+m@fa2L!Y<(6|${q_Oz-`#HPLe>Oq9xmm z**_{dOD-AHkI}4+f5psjW3hOp*8L-Ro>L-1WBxDkKm0L|T3^{61Sp+n|NmCc{R6?HP@IvO)Mo$_1!dMv;ERkVRn(7stDc?&PHu6yoWVrQ85H{ zM7Ogwe%FFkytDI`3=M^*DN&j+eWAvz+DulM1yNFVCK4}@oMvV;q*gqaHGoDID z_MWwO_Z~fg33dDFjwEf|-Gd@;`^oPA2VwKGy)-|c^pFbLC7=bR(N(yzX{yO+5Wy#r zS%3A}A0ff%A0wz~Y!?Da5n{qi)(R%%DV~ppZ(-|mq?et1R7s)q$+=V>HLSI4J`i~s zvzk~c>XfQ<2)MCoY|z=}3ta=55OzqwSFB|WBO#J)7$({vq+ttg=p@Q*9AF{)5PVk@ zNc*EiSg}8WlF8j%Du0dq&!slx-o!ignu5PT}Us+pU+0xtDjP=(azy!+IUwQCg>$9!GuR+5Q>IkmJsc_esNm%UiC&x zrs(PLRV!~^hV*_*{p0*Qp4mu#(CJUcOZ_p_+q8S@LD`!xu7{*ePEa@VQb`!SKqoaz zvy`09TCUy4?DB<;-P^n2=yhi_gf*rX3y?t9HXbP?E+0Qldxqdxt2DriiPAny(TJ>w6?SY-5e5>+7g^Ie>BBXv}<-@M0cAhSz+s zMniX)yCLx80&?ppH=VO|d(xW}moyeLIpkH<;H3!)t+5f_fIEkXZ#;y^VJciDgXcgl zk8D(zI9?kkIFt!t822D(r3qUH>m;MPS9H~O?QF4l?tK|;HdWUE*N~IEY%D{W2?xb4 z@@vQlGIo53)H6B2K99}!Aj%U8GU}YNB@%)~+BlveIS}%x>l(vqVtDcDghml3G$Jzs zTJ4a!=cH4%6xa`TME#G*-=^P<*0p-L2nXgDCm7!`oS&8Qj1s@PySQ>qx_IaIK| zU{fj>?R=Z(3u;;ATzN{y=U*h_AP7KyfpKqy7Zq(`w|gx>oKZGjY+WN{d#*Qe9mv`v@rb6=r0*R~ZLe zAvNz$oKf{9Evor3njT%aI0Z+A&0h78RX!li&i0Q(*vn-r?UfnhrxoGe1peu~m3EqW z+gPF+f*J;~w1OLQNg>-_G=vW+VW-0>YjAdJP};}hC1wMHMzC~*z1fX0qmaXaPy$ck z?2$wrXpWgl=QW}yispl8+y|e^RMFsVpf~(Jl*U=8@<{3&{fOfRMv64FCQx(cPerF> z_hj1;^QVGYh0!TY@p05jFmZDf8v7}*9hx;*)+}cdWtYyjtK+c-TkcFu%)4x@DibJa zt$KMYEumCQ%#9&99s*A#xmLAU6X(McAFP1@dV2PUfN}xDnLQj7C8Wc;@hlziig}2U zGlg>qhjjvj0dxN|Djt98jiBBH7F;gJ55Xddb*eF6ynvGh+%p8xzz*0oin$KpPIIw% zMl^WWANPC{AZ2)Gy8zq7F__*B8G*Z3aa;im1q~s#!m@59l7)jM{FL><}-w zAY#~swU^}%I|~>c-zS-bED((OguuYHq6=#H1`K`+HwbX2$XF2=5Tu1L!v@R{d?CBv z{TAI9QapvPFgE*!LYr`Ntcg=%I^Ma%YAV*5CPRy8OAyqegUi?kGfytevSqjgZOO@$ zJ(^f!D&M3$N_YS%+~;OGhmbq?K%gNC)^nYnvC3$b8C+?$u3@aE@c-nbmOUVG~$fP&WzSMi<=2oye_Vw#;_p9 zTa~9l0&qhoBne=*T>QCcLW8($Im*ZeWU5Ef?a$;o-b#k>#coPd%-L#3?hK|33m%!b zDY_`SW2J=5L&T->!*HiRe8`(-8#>$uLo~r^!`>XZ!p3l;eQDX7PZnrp3pA^;&BB)l zo(ca;fbwJ4ixD#4^5$(yh(iFPST{Ng_F5emf7Ruc+ZX4`v9JaVeH$EHIFJw9Qk+-x zB$TG@ztjFHYVLgajyMon(6N8Pow!p)m-bJJFb>ODnxD8ZxfFqbqFMv;8<{y}ZWsZb zOM{VTxfC!UDk1Gb%=b^NGuH*vVrDr9sQ_YvG!F5P%=<2A6M!2$hz3cPtM?_YBx78K zc&#S4fg`Xtl8k2)@Pb0PY;#fN0DNc7_7GxJg*3=hMY-2;IY=rwY1?>QOT_7+!6Sl4 z;(!L5{dMtET=d;Z|FqX|?{hpCR|B}<%KWJiBdZchupB>FkZ7#YgtUnM8?UM0LuFak zkX5M{F2qeDLTxw{;z|g{DZ!|HTSD0Cn+mYcPEoCI>@WU}yN~vbBcNFb)XdzEQg?DR z!x?An+t8VYKq@tnnW;mKrLT*?I+;_Bfe=kD*aLY`=&Tcbf|4N_fo%r@!csdV6fqJc zl`H9|5YQzh1o4)cO3OSrWl5xqd8&UR8YQqWy#MhCF$y4oqH&$g-}v>{Cc9fT2L-Fg z+U+2RNeu^fCud!WE1y_UURp*eH@MG#iNSr|(6M=;AgmmV&mqMCk9pLHuGg@5M1uOA z?WgT$&v#yI!^wDGB^)#`G^X0qE?BrhN|D$wJ8u*J=%h0`0N(=!eq0=g8dnY54D_T8 zn8QJUZ4};{TE&#TBj{k)esfdfQrA^LcH`3GPhW5tNgENX+lz)jQ$uRJU-X=slp(~_ zN_rZ=%q0{Yr%czxcyT;tVu*MJkeQb1K(>YZCWU_rvU~+dhDso-+g%x85k4bmoDf4j zpd{(&_@=$bGdn!KA8IC8<05mZjs;@=(2H{{zap)`y*$urJ% zwJg633z|2fK!Y+FkZNg;KiJ2eFl@fb$#Zgkr0)UJu$MsN>yWw z4(p28+&F_TR(Y;%sSU9R}Uc7q@9!1bqz7)H%@1#r?(N zyW#K%F-j2qYVqk}@f2zmSRNI--#mrA5vz`i|2MoCVPqy=7J_3jTvkh)Xg*j+fGjZ| zT3N3*9|90TmwT5T%pFDqXG2`XyQhd31|yQm@D(hiVDum=%zp&X0ole_Ww@nKVJ{$p z&4mJcD3hYK3PjfE1&kijRSmJ4gQG8W-20Q>`3V%H|1GvcuSNF!-#r-c760pjPzoI; z!=TWh96qcG_&)1ShKHDh4wzsKZAjGOL^P==KB5RjnFoK zeRX3iw61|HLi}+KFvir0A_VHpUKGC}5Z?-fSMRqrAXxL>4=IEJV6rFa9Y)->4%S!O z2Y1PLB{v*>yYt-(Sl;gLX)&%7hx|zHA7H?t?mAk%PbnIFgmI0TYQl&O1ziW?_h`yB z#h}<~&V^&tjYZV;MqcOx1pjjF@y^bpo%Qv{vNI%}+~qf5Q}D7iH@A9UEZZ<9u^jXf zosF!FaY{svMxnJ%fiXCs^0|Qimdse^Exd>&%n^QwJ>b|7mIiKK7eLEb#VMGvSC~Bf z&%|Efu!p@#!;an&HL?OIr60oqgA+wfn$|Q*9fraEf|U?*Q1A@=noe3a_Bfkl8L3^h|TmUyYMV0oi0H<#JH1MAvXpT14+PZn9_14 zOU87~tagQ+S|ARjSC4_U5hx4GtXJn>Q{*{Irbv&B6XWw2JAZ@0dHd=1qZhc{zx-zZ zVE5o9-4_cnk}{XDYbtmG6GyL)65v>y2(yrWWY^K)EMIPXs~;7wNDsVWQ_ZR-5q>0s z1>9za(G$I^yH4Bv0Y2iid)(+kRINj7cj0&MoVd0ckc~T*Md$?YU!WD%ibUvxL7}8` znzf2yEI1+fR5#b}7XQL7Us+jp(Z#A=ohuB-v?mEVMXizU9B0y?y5+#~D;RMljEt7p zXc5Jf3)|*a47luQ*>|n|6@fZstQwyv(%9pA35|ibrUKdIXHIyCi}NFR#g+`HXgGV$ z7*RwG(HKjUB-WsSK4est<&rrZau!MkmttqB+(pGk}2$nN#pKxM^|N@TZ!%V0GiYl5j-&g4j}z0=4aJchvN-w5T!u)<a0@?%@1#DUq?%l+t6;jsZk}fqj?*F zSz^YxW5UXGkxYiDYfh;=@{*3NTv zHNG+iJJ3fGX}&7%-4hf71YJ3ylkybIrACnfh`p}Hi3wu?pfPUFCX%IQlp zBor%-C&~n*)$Qpd2aRKbH2R6PPV(0k#lbmp7!v-ZGV(`Gcjgp(3TrCylC>+xJi(My zEhlqR%)Y@yTvk{MWO1vUfAyx6)T&AXeMtM|8f zt)Z&7(~PnK8!>Qy#0LkZ^ChafIs8&4ubvYN~94Q0+A3TN6MnuH4EOQuM~Lz zqNEc63B@CW?&$?Q$2R4`lD23aUwea`kEosOlDRn=l3(SGJl#+IQ;ClQf$8xdd}cm6 z4PR#z_3uc+2{-4(J%KE4LKi7fvRqKEp$*wjOWhq|mPhlT^Jz*bS?(Kg2?8Vde za|nTNm18PT=IM}YM=B@&wHbfAEy9U6Ug@BW9sp< zzyIHNJA0ygp>UY$7djzHIxAv?6NdZk5(xTrGEx3aii(S8gF+I$_@pjKvqNF9-fLZ6 z(c{yhIQ=iEi-d@lSl@I;&u=>ziJ2u*D0E6sz~#lorW3Jq+*T*<6$QL(oE|`0o;bl5 z((l4)|8>tegOTrJ$07+BU!0S16UjRAz;#CNoqTCr+?y{JVCM(%(-No3O5T;dYdp*t zpF$j)#RH1m;2|P^y@w$&V$VVKL0~YYB6-APC@$FwbOzQ%T{16>#~mGx0=YOuoCRn! zzB~hT#uro$4&SM65EVOYp)naQ9QGCfbcn>Df1o&DFdvpm{Z}$)V>Bky4B9PvHh0nK zds)EU$(LhZMGnF8K*`xhEClKqItb^;s3F=6OF|FW!(<^kGy&Tk$dUJOcyV~zvo7x* zfg;s`<+xov@kDVJ=%v?zbc>vC@N;JIJ!O}|Hb<3bld$XUi9H+RsBuqnz~eyzh#g5% zLBqVT8+-GFghmV8fkFnUW>eFlTFF7uQ-yKc6|4d6sAjbVGmA-BKHxv+ zhM~D=#dzwvL$18U+ab?cXpcykINBV z3t&kz6!?WS0EjyDS-&ZV_ck7-6i|QixUHMhQ>xOfx$Bnw#%8c zXf@5k>{?`l;U2>Pa+q|bZD!Duq^$APS6;wpsSN+}>RD*3aTrVqFsT#OJ9iAtu|e69agAjgu6mNjR01Spv?wzPA{sr=7N4#_s+Y;J=s*Y0sIY{5YtR3Yr}vQL9ptBbuBij=*f$wZKLu;09k8?{94^3!Y=GHw2 zR|Li&I6B1C&Tc}(vM77<@SzRn?pfu{x&dq%79}*ivn|)v3r+UC9MDc9#AA`LUC)Z4 z!T{&V?$h0aeI`16zWZdSeX#qKSx+@5pSTi4y%`_y&vP5!jyKx%;4ZvS8vZlLl?nc{ zenouJCFS@)3WYlt#;h2DWs$9nj7j+3;BPAjZ7Vg1$lNqCC{zYIXFLYCPyKa;Ca7&MvH9*E_NaLe-%yGwLB?0#{kjWj(rQX(>76E85GQ z^C46%T~@uOU|#7A56kQK%tuCy|?{zXaD*3qn!$~ zI}vroek5r782`pd|?A zhVNh)hfAYdH<9a!1#w5tt`0gIGy5nkc#DNC6)>_ToPQFx6#bkt>9k7WtP7Lo_D;cC zhd)3$6|1G2#=Wo{_l0ulkfLM#TzU!1O_#8(b|(RAjnZ~!{{X2@?Wt4<@@)oOCs!uo z<{h#7IeIQAcrD2eZ~H<4czWQHTN1g1W2}RBZt{-r@yu4pM7v=NCyn;Gne{IGJK!Tc zz%o2TXuPJ(qyyHSt;U71!TL3F6BW}^&LNyu&4dzeLWPo=*d{Sy(Ccz)C*j8c>Ydb( zZE>qc4~bIlsv6plTYkF!AG)6583GQ+`mC#%0@UmOSDMQkrTh=8t81V1{~vedwe_V$ z|6jSfRm)dP+o{hc6x3if@<=u-G3SPmlt(S3K!= zdjp1){2N1=gC%G#E-w}hSO<#&uq(2$!F&1@K`V&zyN`DE_IKLN_VVHcsUyLGsAwO7 zQ|F44$>jXu($c$k?-pe%FAhhqmXa#Cfr*L|U1ZA(S98WeA}f}}#xx^SODK+{E&&A0 zwX)*cZ+7>dJ!Q6r$4o)D`;BxDi1Y;hk2dZV?3Muh@bNPoXw{MGq!IbNn{SD2up_@`a;s)6z z8w7W%9WO5~-)}CjBV7Ob#)Gw$)<$bx1&4UC+FV&(UVpImU~O%6`9bS}d(qlh-`IH2 zT3f%r`ryI+l~w;@dE>$I`bMj{yt1*rw(M&(*Vk89*B>;S_aEGE!I#z5Xs+DfSZ}uO z-*2rfZ!B-D`4=d&*v9;NzRZ5HZm8R+FBWt&Nox zS7rG=oR*NiYIS90WxaKOqbZjs-cr)Vip17T$X2=YFqG`%2P*big5wNpd25iq zIB)*r_`m*v_fY@Clkq(W*7L^eyIkrCLXVt)_VtR_|33fc>qc|o{O&(LOcq}M8&$&A zy_+ZRXf%`%vU%|0F|J*&;98EvB=ATZcVUns79eJ1<*aEOtI>zbz3$jUST`!5IqK8J z3CSw{cX)dI3U|EXuh3(31_P|zTw&eCX@#-R?57A}3s27Ck>t8iOAgw7?Duhflb_;P z4$WJ!N+d=LyKoEbA@t)Nge}{K@t3;*`eC}@4hUE|dWD?<4{b*_&&@OUps~ET7N|&hYi~~) zQWdcW+vg3bp^6uFXtEsgD+mi3_Fh8*6*u$j#I36-t6Ow{DGMbQUG^i7NjYJE9;RvYT_3?9pDTI?NWEOC($svUQe(^N>bT6A>U3 z3iaW(Si!0>W>qhHG-GZ3=<;|JyF>7w1xOK9Qn@=zEVhBVo5dISAO7eQ<2zuRjxN#q zP`y7~lZs{?<2)>bU;>pqtf%<(u!EaHyV5pD$8MoLvxSh%N2pOfQ1u3Hff}brt^=%I z<}F~2{8@h{J1g)J3V?iKW5!E5WIf!Shc?@(^#BTIcY10VmF2buH zQTtGq-w-lFo}IgA=X#KEJc>R17SX4g**Rw+<$YlA7!cUp^qgPNtxWIp1}0->Qu6K# zG&!7-r<&FWhtC{^Ya2K~WW(q3kFbCI6(4IL*7;M?9&(v8?uzG|IooDC*9^$rd6peq z=4f+df>W&cIQXQeUv&7@9DK@cu=PGNk69ngfKKIsJP>18dr=8FfI^|{BE9P@!i-ji zN0<#P|mKYkSdHM6_18HvD34Q z>I;Kyj%S)s=a(<`zSB69mR+zE7Fu<_g!Gms0!mnyP$$k$W5Ht2A+F|Xb?qu+UlH8TD=k9PL`2+WE9^@jku*f?~ z83Vo39Ud(jd^AyNn(d<_}Wlv^@T36Dt8iE3df=V$jo124$TM+5uT7YwR!=D#$nM)*C z5_fyl{Rq>bzhGg0q3GQHe3PTbQxF%U8zqpU#3Kc9O6iTf@ilbu4bKI|*eOFhhJ1dO zqocVNh5Qhuj628BLolT2;G9{_C>=K+gNbLj6f{jzG|Swn7t{qKmT}*i%xjeV8$TSH zYw^wgq(4Fwk5@ER8VxV|Ol(d42R;}COCg7PF02)EjrDn@@VmqVn zPFMuNb*Gkr?rZt(T!Uko<3D$kAAIJg6QP5g`^ut7Hy)idVuwgh$8Sb~95Q%;^giNh zp@X->h6ElFnA}bA&qaee72X+fw+>`amgglq6$)tFd>JM*w8AkJwi=BIGIY;@<@?N) z#Zo6&o$ie{?E%_jMj{!{Iqvph<9760jfwZY!Un#`TgWm>W0DG2@cK#KBfLz_QGnpZb@*XtqLYc4j|fPbyUwG~LQZ0$^8 zhG<=&ws&I%v`(Y?L z3_1fT?*%HlfQ&e?pf8pmu_`B!K@#U==ygnadobMT?&Ry8=-Ear8vN==ul^>Z94kDQl##%L-IuObH68z0>c6OKn&4UbRSgg^wz>%|j z_s`s0Yan@48KSdfDcS0@Rm66&GmMuZ0f$2iSTAz}t)V-GZd}b0+}9{ovwVJ~(B3So zV~$zLr~bOw0x=f}Bht%Whz&UBsvpkyt-%A5i6y0G_*s6nCC79;XNdb~sgLQ&+S@GlEE9hI4Tg-l+WJh4`#L!bSkOyE&#)vjP3m=ic-Nnl zF84Jjm9DN#sK2!Mrv2du0*3VR>=AwRU$7Xbp~XacTXoD<&`3 zG7ImzBVV=f`V5tq?3QNpTWdAf+UnJJ7k5^e`<=%kGu|cdY0HWDe!t z-FQz>u)#v4m~(`t{A%7cRAMwYK+d#MM;6TZd#}K40GA^9t9@d+r5bK%B!p5-820ke zEOMQoMTi;6baGfB?X;ucYG80n19Jrl#uR)-BkagcZ}3`4;b^Jx8g182ZGkhZZCpy| zWHK#%C;@@vGDmr4$5d_$R`aXQU*Sg?FZ;y*nvEf|>tYl?_9t{m7Rm)QNz?RLt}K~r z-aG;(*1h9Fd5(0MZ~UUWcf!09#o-eThBZ@yd@8OJnK$GB>bMSH#mBDfx%n3 zak?79QhH%{d|dQKBPJ&ZKB$XWNkc?|q}>++5h0!uti86WVt~*<;zhx%uF<~>8A4j~ zsMj6!V331bKa|*#jTC16r-;7< z!=Ai@6pE7xOewn^_*`F{^6^;*ajGQb6MIj4#$=9$gD(LXWP`<-B7F|05xP-9X8G6q!G1kZNQDv#5+a9KxP)T(jm`qx9ixE1@^1~jG5G2QMIyEmeWpy@ zZVf9GuwxYIft0|isOw;XkocXb5;!yYja>*)(+By^QK1TM-82uBlGN^KQlS4w>ePchLRqpVzS_S93jVhNjgVbBJvjKdaXMm0 z_a?TzggSq*dG`1ai-||prxiQX1QF?Dv%F8jzdGStD5}>st{>m^v!BC5d>dE_LAoaSSa(LiO1xlx(< z=-xfbRtHDO3&{~7zbA{sFq~F6tlO33Lr2b<6+WYyo|C0zX&*jxV^3keonf&~1?aHlqueX347h3yLwobe3xD%b8(IF=@`} zaEn?iYSyMwwB$GB2E!8SfNO%vS)QD!*l3B%%NiX=+`WYf-aKy~s0t$U51{I-wvZfx z?G<~b?0+O~L2ktCCT|Odi*iS4u?g=OK{0YOe!O$Az5ApM$Kw|}+fUmzE>{Ct?$yXa zpe)~=<+cs5!}0PHdDeJ{@RhlUS~Dy@Dgi2Eie>y|wQd6fu_v&a0$dEhp6f}?w zaHt;$n>bor>9Nt_*uqyig#`-m734^E>4-4E6?qzCOK?kO+x9~<68a>8P?q{pgoPAS;L9e5s!h1b;O+xefD+fQ~6{?DVJ-{kXj ztU>0&$S23*mKbM+J~w3yGtPjs4c8fAO&#*?UfrPYBFQYF>#UvlgCC10B4yzNch{#& zG(SQX4OQ$Ei278;Jjn6Q(@c)|$;SI2U5P#WW z6SLKW(>_W4RU#^@#|Fo96Y82b?hQ|mS~v+kVX$_Onr?O7p;9}0kBqTHoE|DO`K`!u zfJvsrrZ#4E5U$#?u$g3zFVyD&Ub$HRh;ee0RBq0izT4%Ra#+uNg8#yc)fgmh#zwyA{g1i#pWwNT-Nf z29ht)FqZkQKQYaBw4u^B)pd4t^ZZ%t@XPLgzg|mx5-DK6KoB(8V%oKQ%JRg-Qs!)m zSPitUZe;;a?p&o|bEHKyPlE0j#Y!DAhM(F%aZ3CI&l77ZM-`|avp;BF3A+e}?0NXm zUyvjFCwM&s?62V(?50)wB(G8rd}Xw*}D;dA58vi7r&+Y?EW(ZHg}Gxr%2Z_HCF>Zeu~uvw84rLe&k0kdIx~2gU9AFQ%x}9>uaei!kj?r@Q`Zae$G@fMVRyW`jD)(ke}F5=c_z$c&kd^Q@y60XkXh12W2&w14eD6(>uv`A zfgzwqKqDiIw1QN-dJ&Y$5veJRW&npa#5RLk{K&~KpIZ@@=xj}9f<&tbUARc+R4k~7*0sE7Zi$|usHwchyFs-$_jrYGP7yd2)C5e zZchw>sfP2sWm=%dL%# zjnzLOI4FW0uH(1+B>Mm5H54n>W@-GUWnl5v85PAJ&hM|kN6fp*=8nc^{qyl@<@?|0 zi<#FyljnKXDRY(AtJlA|ytbUI|LW@MC;N|C!F!`}ONsr5+3lIt4lNJBuaRY|GwxV^ zz!Hytuf`p)%fQjLH!Pg7!>bFbrw#vXtT>=g>O)tL$jH{x)#O?~Doip2+!B#y6pD7n z0Q8A!pYH$d(Pw`=A9Y@xAs?!$&Ku{$^Sdsm6^g?+mH7>i8hXNh_vn#mquek06(h9l z^0I3QMQ{b{yc$4+&_`e!SjC!vY&Sx(PnCbQ5SW?%kNdBHN=U?FzQA%F_8&7@0ZyU+ zs~f8u3H@K&XfA)U|NA+Rrh@)gu6FGykXQk(|ISW;DqB2bSh2tR-5#>UyxcQi4xT-G zvY)rctE~}O)QMPrsV+-9WLA~g-SzUfq*++5V)5psOUf?5n1NCxWeLvC5r3k%#2pr% zC2+%dJzz#|I!s*hz`;XvNk>R;OHI^41R{9aGbUn*1LOy10FCi0#uCWs+73+mD4|fa zx2P!u#}l5mK0(t3yc3Y9m3ed_QA_(SmD|K{uxE6CV7LgZflw7Dmy@xkI=~Fa7pD_r z_W~GO75rU3T`1zi} zPT@7wus%HoW5ZrC3^-&4!&qp%r$Zrq*i>+XE)R#36QDigqrVru{h;>>wxMr(4-r+& zA`y&yM^KWzlPTwV;#QJ5Dq5r)?H>2kC5;g6cH$Nz#=%M$h7OEm&t-)4^^5mkRBSSY z;8vOLK`YvCS>^UYE8TJVVoek~f}te_0W8SwO17j$?%s8qt#fo#u^)qBhNU+T@PZ@v zTNBGDF31Nhu>d_A!u-gL1-LdS4x02lBQ{{!ks|;GsPADgI~=_p1KtDpo`ENq06b^` zutkp%sybgBH;r3tmMcW`_?* zSD9L1ssT#RHoDw)k9V&hwLHhZ@H^9NS^%+OHV|k9N*Dwt@hCdSG-nzcO6{GcX4%ud zqgS%R^&6Wb#H#y2;0MIlcDM|F0Jv{T6omH(Vlz2Gm<9k#a)&_oI-)jZ%uF$tQpfD# zXyUqglWbFZex@Q)qq9lM3I)eKFfTZ*XBjG4$(i|o+*8})4%t5M^hdKX{-)P@{vX1? zRx9EES6dsO@;_Cs*=@c6!4$k=a>t|Lna%K1UhS(e{xiD&uvqi=?E^IB%CNh4(Ej$x zv+aZS^X=UiOchmoU&s^>E(;eE@#`o%+)xCC6H9LZPF}Ssc(G(&+Q03y&iHk{Bo9Pn zo9f`WUy9hu>BW&dR{9xrPVT!0g&X-1z%t z*$=pvO73)bk!rNSEo|Z;Szodeyt9~VLD~W<1Czj}Nc4+4#eYnzxeiT4t0+7WV^mC= z6(-dH-%_5BjcN3LnL&*tqYndNM1ySLrA$IcWSE-^qsu#c&9F!- zxI~V^85APS#9*=oLychJf*iG0~#R`6;fdxcjz$PpBx!9_~d%{gG!>@EerE zJvMtai`Ew#N)i5U@n_cn8_C_+(wgQ@^)RYv(NT!Hp@{*KD;}{2exxQ!7Kazz*Kjd( zv01?1!G#Ht% znz)C{XCRrsDBJq(x~wq#;J|*(!IP{yTFJAWD;oAnv?12K(%-d9nH{)l=ljT!qdKP z2{%W@J;X-xz=BjF05^kT%>Z!c+o-b$0cwY*00KqI79rvz+8fR%xHu(@tYT0iLeg{j z7R61O8|Q6GCqA|Hu^}+C{BI12xZ0o2r1KBQT`&JzS=nf&@qboYYa5^R{~-)N*7pke zA6J_~j9RH*Iik<++30JEC~toUy8qp$&!0?{;>9Hc0Ul2D-X#O$mPJv_<&Lu>FLz?3 z!*^}13hhb05E!6rP@kZGIdiNa(EhCv2x35#h%K4et<{1tBS;Gk5mGT^EIZ4+?H}hS z#+sF&iA8wA1h&tHg8F43$A!)8YUF)!`D+Un4RZk9JTEpn$TG=IgR9^`vHp5VhJvS~zMP$y9GuI9-PK1tGuua`w zFeG8%*2V$s3?QLkYXe%BD9qCfn&CU+UN-mOpG$?jHq>Bf2WC`#1JqrOu zJ}HC}OiH?IxCbi+LY#9K&#gwm@ul~6R#?IAcav(YwjQiLSl?(pSYKR*+aY#Y>z^x{ zYAK&{#dVH}p&=Y12x*}*v;O%hR#@RgLc`g1-Xh+doM}7+QGvtqMbO{VARaVRUuk3& z5XAv(?qEa@eH9KBoEnf6IzbiBkz>TQ1|eXuXe&>Kk(BwsqfZuSv%q{|T9}MO9@8An zNVf#SsdzDf{lAbv#e`De&T{M15QjksOX8ON1Ua1e9YuRF5VFCcFhiWaZVt3vL7?%Z zDXM;;sDblADH1oplN2V+pRWMKa(qOfb6QBj3iO=><7NcG6Qs4%u-@2U;`QsH%~?he z|JT3L-Z|71z^s-9E2OCiu?bVKuib*Oto<~yl`N^lf|pj-Yy{f?|7P1jd^&KmcE4qd zG>$<(xb9FV$aVsGgz(ainDjMXes-pth5s(uxs?me3GG5qM38>J?IDp52310}OlMdL zX^E#iNg$Sj;j_veCYxg6Yi^blcI9d*UWGCFIax1c=dT2jiB#hg$(cCl!GaPaB&n7i zUJB=KaSG;SD-Z{NC}9Id^IxSnEu~9OWp=qXILPcu)2i?Yi;;bqL4z`+*t9G<%u)qc z@0%U!dk&D0%m~aRyKNd>T3(tQvL}UGLJNHh+A(;@5~nod z0gu*aKi_9M%6A8o17YB~E~Oe~ne|3Sy)-RiQhNr|1P*rAcb2;WD~DmHv=5|D;gZFq zaI?FTmQR$1tuchfL_0*Qu5~sMc69aj5VDIn%tJYn-KLtNdya+#0Dy_3eZ>sA=d`Bb z5U;3vmT`V?qvZr}Uq)sLSo~UwZ6Sh}&ZtMMIRY{njRpi?6xFdY2ep9$9O@9mE`nyT zA5God(Z02N^I5H zz(ggH+v5xz7$6sz2;eCE5Bo40XBk1Bk&N2{mGt9}%wz}yJwB5SYS%i4{lb>!>}J@S zwVl!NWA(6~V8#P3k^OAxynK{60HT7i6_^njWxpuH;8%+k_)#BP6CSu+8%dCYb=NA2eOqX;0rj!fXDR|HS^Dp@pxMldYM-rbCWOor!G zgPF|A3V{&hnt@La&>&!?e(U_aT}0htzb>A97P`T$buHS#ir1natY{HuW*Wju0RrXe z2n)?bOIXm;lk%_M$i0A3i!yft$qr^@ey6ygh$kH5UZQwnU~1%@mUoCnia-mo*3fig z2w9D`Km@LHgSpm7V}qUAp^EeqT+aN>$2tQ*trWFtNHW`WG;S5_b;aJOLLCfmQDXJ3 zm%>Q&3UeZbe(46es~0&exqd0mtgL?@O0NCho2}368&MR|43vv&-on$k_r}i2sA0Td z7y3?|C=VZ+Lql)~8l>(f>=A`M^0Km|5U#_U4Vb9c#ue7f&)q=x|-GIVz_AI4pfIF~w{WICVhs6qw-Gz^n=G>U# zOFpzpqt5&9*#gU=v(+EWzL2f|{9ye7NCItB6wRO| zTUgnGmDb#ko`0m|x}qo6Zo~6clpOQ8FT(EvGFdZCCAwzcK=56rC8pa9F01OpjuJ9h zaqQ>=kNM_~-T9*G5K?8-jU^o6a{cZx+QN}bc@>1i`Ks9`vG)ba3Cm;1L}ILA$p8`s zc24_8j01^el32Pgka!a^Pf20fQwMf&^``EY;&sxi#VUy^_UY#9zO`lpixDB1u6 zN;1Wj2GX`s4?0%pLI((JFzWH;2ojKq$mKyc6pB@%?btQX4>J~J>tX3J8`9NyA7R}Z zV4xVSA|Ak|lj%u?J6rI+$B@D^4;5zJ&~|**c;hyfH0H1~_~GVu`B4WRaiad{Pbg9C z_#Ccg*lV>}vmBA*qn*V{-71issGzAxUU-_|LIo>QOfp@X~#JUX~mH)r_e1N z=)5CL`)lDaS3--=A-V zV=_F;RIfsguQ-oN5|$vTCju z&zS{)nNR3x%2R+Jxsk!yQy}I$^2Y_vFVW%Vl+NZDX#{;h!Xw()v@hRaB+_OJ5bTFQ zD7{DSxd29<)7Q~nn}fH&&SQ4MFxkQ>@&;y}Ko%WQ7GLc?_$c?efNvYwT`7#E-Fw%i zW_H>JMgb*aKb3^cR!gCkhm4@tr>!mqh<*pwZS{Fvs^wq~@9EslWoFZWJe3yRCTnS^ zfU=FZPh@_{IW^3rs;C-aZkEEY+{Yz#q<6UBrk+iD?Ax$hnXv3zHX__-*K!er_8Ymt z8J1`~ftytK^x~*ze#KpTyL6#SxVO_2X{J8w{XdtRYb$F>{I|8{+Nb#cGr{(zg;M{| zGl+HgR5(SPBu202D}e#9Y$Vg57ZL2AF) z-h2G)Y1_nb{BCD&=f(EHvlne~1>N8IANq{8clRDWdHHzfacu~=X?1Tc>ezQ0pJ@oE z8Wp3L2?T`AHb*=OYPmqeHFBpw>Zpe-(zv6Eu2{p#nXC(sI=n?rJYZJ50;{B0;c5Go zzGr+ZUU$h3uIaf>c6fY*kKXmUvp7BcF z;j5+eLs*ncc_(6Se4QZ7*zV)XC!pcRz^$-eL;1R^1 zHoUwIm~UZ`4y5=}WMWA-dLPk$(;7c;=%K!B=G6rL9Ay^MU{+}{`(vY3&o7#+ebGHp z-~f)FH{gK@w}|cui+%57#5CgBM6Oafn2vC>b2qcs}k;sD$n* zI%1!+8B^@x!(%v+!g4q$T<-XQS`;0LIvnVL1?%3)*zrCb2QlpYVtj%=FciK_=79mR zWBR!G8RKCW?w=!zd|dl#`0#BwRQ~q&(G0AB0AX(|Uj;AoZg!Yi!~=ds{7xyEqv2;` zlJ*e~vrkQ583Hr&f9I1?`=obzu2;e<^)rS4LsH1~_1y8bEt)0JR+-NGsVr;NZ- zyxO&VU?Kp3&;Rc`?O)x^{`modxbHl9zB4_Rdr~xD@>Es_uE!;Ix&gZfQ#vwMCT=@y zQ!kLPoBJI9j1bg^wnn?fk$CUF>p(>XyCNj~CIbcAp`hww$~pQNJ06+Du#}Z3`jCSb zF`N0DC#HLT2S?p8dPg*Z(o1C%4^RXLZBW_Rs>T)BPJ?A}6q@4`@pt9mjBHz31SNgj zY5Cf0On!Qs2Y2G^OV^s>uXb{Cw=uc7E36zS$$798bLUgnE?a}Eck@7)OG}I$6v^v? zJ-YvV=TWh+fFdka{8dg$=uEo^O$`3OI2;XMBkqO`OENaOImgBL90`SB+WQmi>~WDn zmL_SyBh@0?{G%yf+kfNWu2lw9v0}l9nM~pjf0+6F*ISl}jdr!urvChIw${t%|H`NQ zk5_~7bxT*A|Iun+<@opV|Hr@A)V~Od1f4H7bAf0>kVw2IM^v9fbxf~2@eiE-$R$GuTSq)21A zT~`FM9*KycPFVSnive3OOD33D(Rd0MhaRj$`;(Ki9zunD^niyc<6_LUyfrQ4X(~Q( zy8?WS*K8P8!c;3FkD=m{G9JD4fq3?5?_o83B`C`3ql* zkfkv+tl|Ab+mwnOBl~yVC(kkxFhUE(0K=%q4sx7{Xr$PC<$T%)O%P zi^j{zRCAJ(pevH19DHcLxA#0yCeV5Vk*62r?b=DjZ0-7lww&PSqDjn3TVy)F|?)YB`$oOr3N zPo^RSv>%nb7N&yXrZqNN^n7KYN(S;dhX?Us;;Ec>9yNhe5jjLLxPUtwcmYKA(K?cz z2|zSsBa&nDxVL{QB<2cyPQwx`Ulx3s}b8P5-~FXaQWr9zWF z;>1F3(#M!G=U_m+>;?$QgGUtmcKY^+>})f|{V{Hq3_GKKTjW+UqLg-U!O%rIn z#r-nbHi2Fjr^q`?@MJhHg=N&NtAQ$}ThNTiC0__r!xV&;@oRxOSH*fBCxL^#7p9|Y zE`}SH)V3ted@zk!;OAlqq(rhIht?qwz&525O9BDaHEGTKfum@HbnFl@HWhl-rGPrD z+*%VsEWqZ`L!5w_1i3RI&_x$t7+V&`Rs-m^@uvq# zGBJzU&_K@5E)bdeu!odx{j(k?m)x6DLhqI#;Ed26!hUuTK(waO+~#d)*Eaf@w@p3H&?K(VB&c_DUB4+pN2SMS#;LHk)B--81^1m^0cw8{m;) zh3unqZd1ivQU8DC4`y40RPY>I#sySGckrHm19tq>MAa@(0P#lo$dv*vpmCB1z)(L1 z1$`~o1qaK}?dLj_0xe4)3_y13IE{gH!e_1=dcmx6y%5oD)vMz{*Wm#?kRkGX+dF-) zC_&A_*$jBG{0kxmpdzV2$p9rq{9hC178vX`wx1$=MxmfGtW?b)hZ`k% zYFJ;GoXWAltInvuB*%}1d)Jlv`g$|V|7rDqb<JOl!a5;zu!c@5LAUGFBjI7V_ zxY+-8cW-+~cp|W8R4!Vx`XdcRHM$_vggiU@Q0)&96y%%X=oDf57cq$A;&Z6#5o6@2 zp-0Hxv$i$}5#b&GvfbW)x%d3Vv-YD$>5Ffky?6rmhDU8=kStBhU-sMT5<+#BBm$gt^1mr~P9a**qF63|hfse#qDoXw166t`=sz zSQN&LmXsHAd)8$_Z}urWXPeb6x=cH^O3;wWEHYnc=cbuI>T1Vo=8{{A96~Q%(xe&w zw5P}O-WLLCpx`@E{6lzCi)fpwKKahMj9A8XhQHbpL{F#vF5=d(yU1;%hd547Y~!xB zdcq=yOm70qOXiX(L2@%0IqpVmXAW!uSnDe|*;If4bGscVXe%yi%?)NR7~@xA_6a*b zr1Hw|0}Bx-5mvwmg~;{HPTG{(nqk3xk=)Xoh9vUh%@*Dc=^9WVILxZ2)4%!b)8)SI zjK?GoSD)nei`|32KHXt-s`6sP69Cdzv&8Y9R0$t!mmt)w-8?}D0UWjEbnaoJ&eWK4 zmC`|SvlHTW$)3?~N4MVH~fB2^^M=iQgh@V5>?uW<>+j(nmWrZVIQ0 z>4lKH76Jq;*mZe4Y~5&dB`k$im)nRw8Xq@b@$Z>YU0EM8mD$!l4yTz;&Er*m6!mlR zwP%6# zxkEEA#JX@X0Os`~iWomsk5ip~%0SY`qdq;mCZj%VYUr~(PK~1-gKVXhFM4Cxsvbac zX04=OSutNb#v&L&cFsXXAR46oRu{QqU<*e9=ca3QYrg2cfjNAC@*cOrv-8dkCd@=SMjW3;^Q;flBPwm$ zw=jnW^sV!Nd&@eolN(MD(xrDqOF7_5V5bH&7@oo52$pmZZ;R|!LWQ5glYzH<15^iH zIT7sY%7CdRm1~wOL!%IR6;6!<3GDS80APKrv%}oYY}Hsq(}uco2n;TA74j79(Jf=~ z)`a8X%pB6|Ca}k=SFL6?+>L1JZ>jRk=YP&EW5$V2IsZ47S4!vqdh1jCw;7>(vtkwJ ze{QvFIe@Y*_)|2XN?q`i?HAwew1ZpNG`(=PLWwEp;>5zKllRHuafJL2`InNx)bJ9i zGBq|>&Nn?I z4DSO^JhTX#QGB7k~Rj z$nQ!2)rzaw`9&q|0{f!m9rZ)|PJszbBTMOv!vO%5V5%!+({{wT z+vA<3MZiA0jp*~18gnc4QSTXIvKtZy*2ryYI~?SqW7sl9+J89^wtfiWolR||nQvqn zj{z^)i9ULo*%55iaOXO1g@lVCX?Y3ov}c zS(P~?VX|(MvjHeP@+f zrHv3Npu7}?bqWRn>!3v-Boq?ykDJ@3BK@_^Q z!7J+#`><%^SA$RB9icKM<+%+XEsYju(2J^9%kvjIf7`(>d%FDyJ}mn$zu7<7J$QMr z`)sceKWunnTOJRIko78(YY<+LGdCCm$0Vhe3k6;La}Wyv;(+Y$7`&Dlsam|HHU*ze z5@G1zHuathS>OjZ1}>B9d!}Z5$Npw!SaMv3s1p_-H;~>MS6N&qAxRwb@{QO__*biI z)nF0%Rn&y0DXyahxJo|Dh4r~xAX`P|7L3FxRjEalmwx)vsFp22onG~ldtUG!cRipv znz(x}xT~7sh8Me_>#c_1BX9T8x{1XA%nY=j5L8?8aYyhstHRW^NiPseQPZbF2+F4N zG5NjDRUv=O+>8>-M)SK$KjFu}%lMxqbFY{|fBx*r|Lr|{y1V^kDleZD4VZZ9d13Yx zCVo+lK76A2IKn5LQvW;g`oDK)CtWe%aaShic#zhRwCVY}%p7;l5X-o%WYXJ{WPqO)DgfUIa zj!-tJI=q;`rYvO^s3Hry4ODF$fh2cHc`I!RS}-sc7!bewvp{e7k}^^;ziKDi799)? z+y}U-bWLWHYfoI+a`Uf|Vgpt>Oq0>YHcpLi3Ii~kMiZP-l*zitS`hZGQ3FjsUv{sI zlYi!!$q>Z68CEdGX7Cw?*iP$w)T05NiQ~ggud{--wTUP>bq)Qn*{WaTe4I{|f{FsrVs&Cl?#I(<40rsGaniexi#E5NF79$WQZo9XM zK-bzuH(uVFMQqK@v=IZ0@KCO4wzAQ*PM|#JVv{12^yge}?4pLD28c>(Fsz~08b9Km zl+!}99zWP*Wtt$HPKcNy3)JZS`Qpa}%~;(}IR2&24f@c;pmzqlS!~lc7k%h3U{o_k za7ID`x47=bWO#hcYt1Tp8i1EdgoHWldkvG`38JiZA{xpDy;_Px%6w8h z6Y7#a*Qv;hn@5H7rP zdhCWC?hl1C2_QOK3RJ3YFdnK}c3zG>o-mgF1|!PUiWXEVV?k|GXvP0>1I)k`j~w1< z<+)bSuT0702{TKug)_d}Ic+8w<;h=lomOQXz!bLQhcsxXZM$?ewgFH8Xc#cl&P%AF zn+^{xJ7HN({Nra`+|hADs~${R#Ex+037x^M{K{Z#H05!2Bm0OgbWLZ-vjuv zVrHba1-CqNXjI|Gp2P1!W59}U`vb&@evi1eM{sfww+G^aN@}77nx)sUpVE*_$4XA6 z>5y}E0LDNSp5;BWZDG|IjWwZ@WqmWtLI=nFZ0jnGU-c2^frjSJ4 zLDe$O2+j${nD-XS_OAnSC4fy%A3q&|jEvsE84th_)xtW3u29vm4Lq3Eh97}a$n?mO z=8*j1v^{8O34xC^3p{r{*xN~C*+w$uk~t7_$H)}jw3Mp&`lfrOM|Er>n@VSX9q4g< zX*<_}AlsP+#o#nWSgiAYuM5W&i4Ba9z!H3vH(jRQaJwB<99}v&F1ptmgxf+h%aP#} zaPK$WN~L@Qhp#yEu5+$y1SkaCga!DC3MpFoM*T6uqA?Ta#>`hCMg$bbNJ;pPsjtb7UWAm2j7Z-ykYi!gI-a?d3sgcokO`A&!L;s+-PPM4*e z5%#1TP*F5&_*$3FumSMKNUF&j|M1>Et-eCf%#vm)wU?r@q$}}z`K?YxW+{}a*zG-(2_Q%UK=g7-7 ze&2(29yLvbo6J4gTfu>x^F$y5^a=sFhj>^jic3KeiR4 zVnQ32-w)gbJO;3=StH*4Bw5AaUh}RX1Fj<+YdS*KG41|K8=f5!tjjgTSWwlpa)(fr z$p#Rt+@~VQXrK0uCl)SX^5BUV?@2jfqiw4K5Lt;2Zar>k6GqW)rK2FYGv}NsU@WNp zTG%!F7~&(qr?g@88P_3_>wrl&vLfQSDdYr8ez=@gwfrbP=&~k`bx3m(r zr~KC8hFgMy*y)2gi5wvkT1ZQAD30-m`6t4`vKq!u*bzdwkNt-oisre`4is{+c`YmP zV}>Swm>Y(h9F(QMv>Kp)S`ZCNK`aD2@XO$-j8O?=Jo+|X0uhRY@UPf3AL*F7rFDTZ zL?2{{yE}VE*lrlc8i263R9at$S7Jh!ukEc%-czik*3!Vz%lz8qD}i5DOKquWtg)Y*QawS+M*cF%10bP+9HIA4{kd?qE1zgw(#G&she-<~ z-hXfu%|9&hF?5d@4@WVfG!KRI(X}UVe0%(LOM8<|!2rkDB}l9#$@^2<}^qU zR?H#;>*H`U<-YF=Z}I~c*3uwzp!W43PB%EK^TUBc3v$#4Zy)4c?+2Su3x+%hpZKlG zU(pc|wJB-bB@bITCBh=QQDhE@u$$MCjBx}kcwGSa=dd<>Qc7&aK z`oePjzyb4JZ)D2`l5D=ra$HiYvIk5r8m0k4M48zFKXKo=YAyu4R!Cv*c89cvZG-eU zr)_JlzX(1Ad$9qyd3fB@J;y~5ya}M}*HwtB4KM&RA4`7b1eiw%ZBgEAd@5l48Frgq zCb_V#R~%`{9?W4z$lxnba8(-dYN1keu}F&B<$5~s&6heUV^pROtOC188xBVhtP32x zQ{g|Av!4 zA9DMJE%35|iTWXPx5SjQ3{N&o@t$yRf#TLQ1K3u~)WZXvVlaa5^ZcfSvD}s40qm5Y zn|B<{)(jwcQZ5rrP&)R6@T+7*M=)RF zAUP0pK{#35(?c}F7MlWwIWG0arYN#Uz+~x7Acb$qg#6;@H$>G2(bD+*-Z;wyu&{0j z{spbJOiT*ss0@GgRb<8G3&W5bmiTh|5@WPO?P}CBv9t^u9GZb~ChooC;qKtBcYz~Q zf*Tx3=13OQ54w@pn%EC%{o4Jb%Le{)-LjnJ3>mWH6oXR&;0(tb+D7?8!p4j>hP6d! zb8d`2+Sb=ZmQ$Y_F1@*7tq)TSWmBeS%I^$J&EAu){nldHYUW-*P~7>t_|FWjL{LW=>W8yFq3K@U^*6hp%u~A64=3VIM*- zdGcvMF)rFxLu0k4(~m6l34eR3xT6#F<%yY`n?Av|Vrf4*3%Kuph%8_F>B(r6Am!6Z zPO?0qH)C@2-4Cia7+;KfB$tiwhHQZ0M%QRFQ$4aC+iN*CTFB%nDhP5{&O`T;%=&{{ zxZ9l#_K%e};R@|KQ9z43cxfW#?cA^e1~sq>VC6G5vPF9YBM>59XfcIDzy^x!%hHl$ z?gq$00mJHYO*NO?u&KevMFqRW?tVQ8*`xGU4IZ|8+CyqA%D;H_6vGkR*Oi}wv62eN zdS4`H(9IC?*4C`ItWXqeB(<3bPe; zav_2Qm?St9Z0@jFiKNK3!R0_N!s!8IFp+U}LJ60GTmO~b25|pIWKKwCQan}eOIsJ6 zl}2S0aWD1;m`yOnG!#yDtkf{o$fDcjBuirAHFzjpcR39&6EviHF6~UeFIt$}y#e&_ z&&&wL3L|}L#_U_y#kA`81`*BG5#yxr!J;;u)mAGB;=gx*m2n&4gIU`UpS-XcGjs<5 zmGui$x6+(-P0qT`^1-m31_1b2@VMk0yL^o->x@^*| zxLI9qvy=dYg?$-qx3t`jG}wC*WIJImvhsGIc<1^sr>-+AG%xT6Gval}_U-qFJG(hI zI0+)0i2Tol4fk@o_Yvozy|?{z zXaD*3qaEn1|Ap8_N$SO?J5RsadC@-DdHVdx_Q6j3+ZVe#dyn^VIn|U3VM<0-a6R4s z+ao=8vpKGq&hg;I&i2!`8^+I>ec&1h`>D#ULSSb4Z(@JAz^_*r#T5F#+FD*q=>N+4 z#wYrJ1qffiXa)UGSNn>mz^AxAp!JpEpApYz=R1(`C(piXO?3k<6%HJM<>U^|>at^R zU8Elbr9rspS4-(y9yN1UeIiYX!kB!OTf4%P`I<<+n8-DnXb;u-^Lu0DWofAhAj|oHL$h<*!jA}3xF*c zOYx2yX*I5HHn*%EDvr@X*<@muvQ5DGpzgrMG9VaDSB1%Wv_1TwCHE#%knfdbD7`5{4U1iUdwYq9!Z3%I&hFs9CvaVKdXURfD|5pAVt@f3VfrZxc?^yygB?g?6v`;--;*zDarAlQ}76Tcr&b#3VzV5?|!I2BI zd~C??|2}*1-`g*qz1(};@QQ=^0$G=^J7K+Nvu;Bxq3?qVZA8r7dyc@lj~>mNw+B1> z2Ro13+Xs#1%eCe*f)#*d<>~#w_U@DRvqTHg7$R`Z!8~qD_Av5)Rn?JP#U7n>MksIY zWup$Pez$y;if`JIvGfoN3YcxfC=B|rQLl5hsf`|JYj-Ldk;mGS-8Gw=YT{Mf8fT~m zD9CS(d4ACLwIzO^EW&nVFcDC|j8k7<;a}g9xoQp(iRxM(ZRw+>Nx#9`8FAAstewJo zdPB*w)uZ)piq`#K60I4K^CoD$wH2auMQbv{5TO<0JTgvTh0!@`u-tX9+Gsl2s+FMp z9?-f1+BMr*Aug~Eu)3lhw`z{Fj4mtf_BYR7JlWoROgVWy%J2No%k3w-2mj|3$_Ew>DSh*7erAiD2c3@r@YdZoGJIg!-xHGTQW&&hG6X-*4xt>GU#RK ziVV%QtV9Hmw`$G3p=n3Og_IAn0#IhlxWd&H@55<{pmm#p2M*R>B-=( zYWZ8Rz%)G|YGIld78?4CF-aAa#Nu)0ucEePlCE}|_=|51G)udz7M!KhQz@0<6e|f< zhAzy61ZDD2JMgQMlia{Vs!|?!dHE6&`#ED+(W;l^k8Uw;rYfQMjoycUZ^NEh{&UnH z)Bm*nt~2`o**p9GHjX3D@85nE6Ys7KNhE}4lCrFgEGv%gY}qH#$==xxJ`f2?utUZ zoEew{;4VWg=e8#&WI91d^RKeI7L-$n`;oSedBs~_6dLotvL9hHadk&tDK{ zQhMqUeW%xNcUHV@cXn31-RbmJyxqn8BUkXJ%=A-EgenvV38IWY=XRdm*3(ZHv-9z% z95Tv2wewb=k_T%%qwLA(lw<3D7IYH~;7egFUp;tW4gqJM;+F;Sv<9tKoV6YvPDam9 zvG8#0T_CA@H=)oBtbDxvSMIu>kfeBfdiHVX{sVC4hv{Nt`Cq(K>Pk-Fb@IR8FUSA) zx}Em#^8Z6nK#lxg#&(cc9Nixy-sI{1{btA01&4^Ir%ewK?^|}#zsC7#+rF z!!I7~KV9nws3^X)8l;h)Zy&#jn6~AKb!lV~aU2RJ{r|~$q+`S`l`dvCt}>pJ;^g2Z zV)=0Xk7OY!OzTD zq){2qu+_VH-;FmVs;k2FiZKK#4di;?Ax;$-`w-lG^*+|if4oe`=a*L!_@!a2k^h5k zw^xe)Z+8d3-~U^J;`{komj5}nR|@>nZND8Y2mgOw_@$XY8I#G8b%1m7I=lT^&$3Rd z)!uG(w%fa8K*J2b7?b7cW}R=Cz?84Q|IhlBAbGze`msdUUfJt?#9X+tn2in=!wW6| zBk9F#_S(6C%bSYeQ=ZHzL@FueJoC=t&&y;H%(vICzF7qFH$O; zOpaeG307PUSaDck4#)EYg6L7aC#QhRAo)idh0+5`^T@J~@00s#wy<xG#QgUi=+ktPiXcB=ez}f^N+W(Z<^WH=L~{OB3o!U zCtLtV)`Ra}yv8v+*Mk#op*?WLx3ZnRtkK@vWBa3lot|BNlwZcr9_n(^C{~$e?F3(}$YbKu0J8QSwOxSMxTb}N1pIOLZeRwz}20xDa z4RPQ^8;2xA6(l+wpFZb+#NBgtj@{01v6XdtBvESV?>$dSB;8bUj#aI++Myx4xW2ZP zVT+_#n>BPeJ;xYEQ1xzkJcFK%$lCfyl%M@k`45@8iz-7mF?^6k$=}vn2^<7P7ztbS zoEO7Pd?ihu`E`TO`liY z4*`L62qhTss^`F<0M$}dCJ~uL{ZnMWDrVEYefZTAuEh++BKfb83$%$`sO7`=&I%qP zl^FSOomb%EGjFTPQ1SlYY+^YUbk?o#umF5hQ#M6FonY=bLAY9?CIUW3WFMK@3G%(S z>m_^~&kA|y`wYnFhDJJwrt7836@&02-pULq?RFSMZ#SSs%ij51HqfvZIB|~Pu6oSi zs~$UsuX^M7u<8v!uCK;RSMz#6Ro8#@Y}9##Px%Ov8N5T3!qTxK;`AThf1>lHUp@K$ z;p6>qyYBnhG5x>Q>iYfv*>p0WPfv$XygS}1gV&X=0AIcT?{xc}L23Wr>-Gk}+kZa< zrIq*pb=bbLHDIN2_@CjR(9jo~4oFlj;2E;xK*U+>Wd63QvvDHI@Z-&vNRaDVE3Jns+N= zIERp$HkRg9EQ)+u3Q*WIl|hx!qHM!{G9Df8zdjqs1IvL`oFT%UY4>LAP}bS7e`vRU zVyl~;dUj^%~$o&H{Lu-ED6rLWm-ws-j1-R-uzy&Wp-y7Il|&hAc+D!tCmZl@KW51Rd* zy$-J8HYYsvU&oc-ZT5LOz--%Y4f;KX;QMVg2d&G-wNBSR~F2q{^8dFa=#u2EWr_SDTFD9y9R!LxrG>LRDo`i;7 zUcI3nJ3mk;5IdQiV(Rk+K2rFbqcyIg7@gQ-&vt1qDi#_FoLiuy^heUU>KUc$i#~Fu zLhrNl1M+5MNuSea!gD6Gtx=A>8p|a4F;2PDk8Px`iR3F5X}hnRySi0Mx1S|%Z^!Q> zS2>;>OcqIxjR+9c9FAD&XjJ$V6hTKq)ceFhg5E8>_-Q^@VD5={r>LX#f+oIr|? z5%!@o!4|~nrV0t<)u26^Va(2f>%)+*5xBlZfBGweDULP(cU1s$ti@8q)h$tmtcD@W z1o>~)z;IH4p$~^DLeldO0ae^CP=@J?!fhnxWS-Ccg z%igGWN-HT;qr14XB^D8YlE+R+34H{AqYuuZrm!D)T z!q5FB8P-xVnWM%zHyut+{nmH+Iy=wkR$|exmK=er$I2Tld=2lk9WT|fA^0^TVUTNw znp3rMD#_+&eyW!KRKhVK#8s+qPDYMImm!mva2mLEDf9_aPsd!6wP9Cw7l4%w*D6$MH@UQM z3jgO$uW|I0%Yvd@3?Q(-Y>FPTsvj)a#XLQKHfQaUxeduvt#cnvv(qV;5{;GEGPJ;k z+o?E#(2R{or>`^TdgAd!SH4c!c)ptI5)1GaZ*~nki*RGdn1zYW1RREoWci?E-Tpx! zzNWoHNsQO-8`kX^3R{LC`d4iiLWQc`f?pjglm_(OL$@o;>A~+54x5gM{7NrU^kOdT z5*#N7nz*(d!rOzexHAY4u>l4UuG$oY3T{uZA+*j8!+H5-K!vS9JbWi0Ch%I`2P`h8 zxjvzYCziY8pxp>;{2;~pAwOh?!h!pHH^R^|eh>~M9kI8A4{#=Uy`P&sSq-LXr} zq4ZfrUvamQ6PPEXRlAIeMIzZ9+8jGL)C1B!8$)NRaNE)5!09^|ECoSwFZDD(;%o8X_Sl zVEFeW;T?y1uO#7fIM#}i>atGRu~{$Clv~U05`*T3;F~F%{W&o-JR;l@`|jwt5mcI& zWl31r3UTYauE@!!R(h*WleeD8Ll9X|4Qu=cFL6K!B7VGv3Agl?=INaFh99m@T;!uk zUa(cdm!anL;c}r80Ly3?QXwb-d~Iyok7O>D8-n54g5z@YlXL8k8cI-GV#n&-6?#UI zRuk6;Ia@o;eizLl*3M^;mmg7n8?Q-!j|%+l^mg+)&#G#m91KUtXD?K<-E4Qds>zpb zXP1=2jWCSutlR7*6U)1NHJrIYc6N5S5UJZ7bUM9a)lO0|5UCol372?mdHWVOPU|*r z2_gxHoX+y;CT~X15-U^k9Kude@9url!M!rdxSys@~|_ zbZw7rH(Jg9Hn3`(ljZwXpvD_F&-Fv9uF+So*T0eAR&97b)K`6Mez1QWbKS&Nfz0OF zFHW2~bT>h4v*NaY%h^Xx97=|99YeXRcct6RNFxK*?3(3&EzG}2t6sG&$G z=emqr-EMRLu>f7HX3|HaYqr{5MYX-cwQx?NnKw(gWA$20PS3snN1fIQY_yx9N&Vvz;JO~0>mp%CsBCZ_JRV!IiKIuDD&15w$iZTIJA^V{0%#2y5<)# z*WTUh?)JM~{IY|c&S0lh6NuPSqO5JpK;SJcHp0*luiVKAieDO~_HW$OTbtHxzg%fF zH6Lz47m+VPx>S5SODD0e^sVgWx+2>I-QR9^n$QGax&y-PxgP6wqut@_&6hV{-nenQ z;r_g=0)oc3iuqrbkg4)cBI}zzp05I|SAyCA{4xh@?j>_=75?1-qz;_9dQmCA0Kt2j zc|=ZFqwK-j^~sw8*R4*G?$03hs5s=j6?Caf@k0JMR+GG1B_#7IZt*%tT%465WsN{m zs5vQeZr$>CyM~80MicWlvon^QDGe3Fc!Z^y&vqAYyjf*r`I^=2bMayXvT$3T-Xna}~MC80|OM$1g zAy^+Ga_@TjSRenXD@sPQ;n8?}s1v_KyVm?l0idhnKimDCo#pfY90~nB|I78Dcx5ZM zOZWfPV*7dnK--E7`Z7dZ;aedmEio-}|9@fE5k8$BEjV00&c5c*-l+~b{l$k_wwo;X z4WcvEg#2L~JU@Lc!>v*iWM4me@bK}|hr{-;)m&UIlu$(Hud>lX<*NcZZA)FwI@jx zB04!;R7Y)k9b{E(D0OwwNxW|AWHk3DOUt7uO5{~zDwdohqN;~iEEjCGmcwcp2*tu` z)b3?*Ehmwpww|zDmsckqg)l~f>U2cYLKw|7h+n>v!+fOTNObq(nH}5o>F0-dj-GKp zOgzm>2BAj;gpFu#HsN?Ael|OBjB)a8su;r+2WOw8M?vSodh1-9Zd~Za2j{cdSUGoy zo;*Ls&3rL!`mn+M(fOPt(y-}P_N19TXma><(7(Z{*(78TQ?WZf>LNGWIwQzY=uT@7 z$LYUQdy1#YeP z`bOfdbon~rkzym;#QU3>FV3siS9SbeeMB2LfEkg2CHl#QddWG$S%RUV0Bj!;d69%e zR=xja&HI-aKq@KAx8LG@=jJamkLb_cYPw1a&sCIwJ}7WoL=}Z;0yTa|X8)861M2cbqZ45C~uP->3);NzVfto@xJ{?fqvPaf_6 z`J0DP06h8r!Tz^T8mq>d`>t}HnfuG`-`JEJ{0xx^*ENmtFDvKq6eVK#^x^+R{0B8NO!yOQe7_hR70 z>>v*-G@eS>B?w=wUj-d+OyMGuw{ zc7=t?mAQqBC6>u;3c=hYbY&@6)xg5Wx<%imsFrtyPJO$Yxgn zrRb=Vzk)MQG%-X8z$>}9o6D3&_}b`TQxp(o_PlX}wEQsU65WIus=JNJwg{Ye;=`QK zYnjds5rld!AhFo-ojcFRi!04OWm>NRd8>Xo3hWefho@E_O%?TkC`=QjFbg{cyi#5e z#u2kEA)G8=B$ErW(Fjz27ga3#o9l^$2MJHyP=t5m<#y1$M9rn9#5`&(R~{la6x+&q z!!eFV;J$s5sSzU*oD6@<5-XqAm#my?K#XP6614tAIEaYF30_+;`KtUejxuWH?s(>| zhc&E64tk`MDpB6@J(akD+(YT1$W1gKa`vZ)jS7@TdH?X0jw-qH0#Y9>Ktni#b;1yk9j-ZsdpoOah-A3qK-gOYuv3<+q?5)NSO)vkD-h*jIS;ap5+(Yl3 ze@O4q&h$>b2O4=RK2WlC;+evbL(Ts~B+d?gFK4NzV<7qwPxcJM>pVI@Sh5QZ+~_c0I&SDGz`_ zwUKJKf}Yle!s1bOU^_*;{M44Fb-9r$TuRO@xZeLunq|~cHlvFR{B`5mm0Z8p$!h;^ zf2Y+g=l|*U`u*SizbhTL*YvXN|ET(7VstpY$QmclN9U((Wsy}ki^+yhrmv`LCz=i?EN0qO zzF_}lJ8{nBQK2pi@iz~jJbn21@x$T%U)e{Yht_5vsw|oKlb7Aj{_srdZ+#!0Xj6jU ztDBj4tl^9CF}IU!;%wF$vT3=*&%D|v9ygTcljEOXHtFJQdi+|6Tt>&Pbb>BhL~gqU zCWJy^E2)Zw%H7>oX#)p%NaAC=+ENCevb^zj`YZXvG348!K-qsPlIpB-h=1c3w`|`n zZc4H|=ybOaxpU`Kk!$jI-{=6$>71h@^bNdDvu~8bNd7BTi)opkQp@G6 z=4_-6D8u6}8;^qRXzF{HW-EK*jCYSMh#>oFd^(<)Tb_8D>2Wh7eevUIQz?A@$LKU< z@ZsUvSu^WycUu@AXsj}g^&c-!jyZ2>VL1Ch-cf@k8e+G`?vLAyl-N3CLXu9c)E(sa z9xV=D*nAGBm^x@gy&#{+gzd@@v;#)7lZEmL?KH{q6x4DcVrYJbkjwu1*S}_SQnEBj zV|2kbn2g;MYfI4){B*~*?d*Urc6G zk-%vCyg52({(N@(zfZP#d;6Px{zrSA+hY%f5#nZXa{TeVi}C2?Db3%#J-VlnhoOcn z=w-_`+2_wiAP}-U8*6kWC?33+DkZwBpl0mAluM2P3C&qC4j{j5{=$yGX%9OkY5QrY z0(4-KXEYoua&?E&+~*uH&*taC_B{L1PXu_OM~)8Du}6Ux%o=mEii4<`WKcFb;ns4_ zC^OWP@d>Hh&ETOqDB(Worg)=nvCWwEgBr8h=yg*W)3fpANJO}0BOrHK_gUV{=ox0V ztlewvVlY;6ANWNL#ldr?)q7B{lr|ZQw_;{Mg5xrE*uAU?53N3;1G-9?lJJP|qxavJFygwz9hbO-$_5nOPF4GFn-s zFhXrYk!`2XhZd*4vSQv>UQ01NhbwE8Wzg0Cvs=AYB?AhCNx1b_7gc~Pq-rWJU z4p!ExncXoJ+39c8ota^|bK+N9ONaidz6tV@sIU#&NX=7J>-To|bhyd-$KG3Gd)jDt zQ5p|*UhxW~ot7kWJ8s`nV_cmOT`WqT%aGAw=fq zR^uySTGK@ZK2eY&I6Y>wTmv^uo4#tX?&kPWE=iOh%kMBcz8JlhLXHYNCQ+K)Mkvs; z(2^9XVB0)&@d&PZpd#A>MD5tRb7`fjkXmW(t(oc-QM%SD?7;2rqvJThY};#=OxS@& zFws_uP<5{O6vxIW54(;B7uz@@EqhR4s#Ij(CE!f=JdGNs8LNHh37PT3|UuhaHi1k2?QKY8de zJ7eJp0t@E>Hw~XHDptPy!4g87EF;cHN@yN=B8);Ap!72^dpA4f&#hbKkQLwvS7rb6 z^qd{?$IxANe+Ey4AbxZjd}6qjPl(BWp5&W#C@?DmserpP9MOkO<+@}uMi%HeLzg8?Jayj6pzHEHk|WyO$xC7}ZKe!nA4E0&aLD!LSA45qJh=bl%i;c?pFDi}=WoCMvig3C_4QaL+$Y?sZu8(ts)+g2V~>&ejWwzgz8fSBtY60DPOv@S;_%KL zpJzPm`AX9Ix0EWdW>se4UzF9nlSLETIx)f1V0sd8mx4}>nOwNHB2DWdRvlOR?l8N? z+<;CnXqxVG1!#$i6Wa`t$}wOWK;|}47rb2P$OXMp>hg!5O((N!0_VgWe5pY&iW?ZlKdc%=gki0y)M`Y0l}b(Oi{%eEM-V zdc`3CGx{57s*;zw z45gN}`KZv9k~A)ZIEEWL7?+}_t3Vc0F4j)^nm`sn^9KNCf!54d2BJ;kl#SMG6}KoX zE&OFN{8GMDQ5Zq5FSUOQoAS>;M;mds(#%DLl8ri2o*kW^nx8okvi6JaV&#dhQ>NBa z1)wPQQKl5Ox51TnGJka-{uld)+E33nB26(y@v(K|gl!c>EJ@nhkv)+FbGT0wma)LBK_uj`13n}lBr#BP$$ ze+cdJ>z1qWQ?aBfcoAj?)$_h*xWes>lFs6vlQHU6cV;AONCmBzkByBDZW52fo}b7w^n~Lwsbm*;hzZ4$-&So zW93^!NT0lhs18SqQGuvdpkh*a2+3LqNHD{TNG8XBu9-qj6QKt?-^1~9#wIK%C+-p_Nh+2xv3=0x&D@EfoQ`C z^6%Gd?C#x)lEju;nY|BOActAZ&?lqqR3g)iF4@Hk@@Loywa|*JpR(i^7hXfShft6O zH?3UJbN*{Jrc0*1^E14;!42H_Z)bUM*(gKf_b?CJVZJ20SE&{D@_8%&owu1IA~cr0 zZXuK|e>ibQxJ#1&c`-+&7s{E$kN>KU2VwE^UEXTy`{Pa}eTVnF4EJ`L3 zReR`Mwb)FgfKx)zU7%mqd~BXsW1mWZ1!YCCv$M>iJEY3vJ|kZhyNl?O3;r5++me$x z;!t*lCW&w(WxtMz^&*}{L1lIshC>udsV2`~_)h48Wz(juEf!7~r?~}H&AAay&A6S5 zFuXDH{yJZbtjK_j+eqEM%MAu(xVr--3JL6br8r=HZZdN_P3FQ0@fDo~ge113B|EcK z&UvmRjdB7L&HXOZ4AQAd$op;3txr*)$Uy4hI`aJKS=|*JSZ2eCLU5 z9F$|aEep@YAW*&hCJH7#NvA+oNo7BSwX1}yyDTlf!mFvh2)P>xsk9q7#H13(arK20 z^vp?QCrJvMX1#RTsumDD5nELifY+%kLZ_kGK=-q;NS-iK7)>piVLP`z%#XQD#BbWu z5fr&2EHu_=x^#pWRf>VeT2vJ{NNy}tVykpN!7RqgdfEt@oz2*3+ALiEF29hcGp$Xo zI7*geKmC*Te-cgo4|>S%>l{ROzc7HWEx#p4GD6-nze)ZsM$3osJUtufqM}Eqa)=xtW?5OH zp4rEHYLt8mQ7LX*2(>%u6k&TB+X%KC8~Of=@nlBuux{bBYI8ChKHR^becIa1*Oo88 zee`*|#lE_=b9--Rce}gY@3ppf`+M!qc6ZqEu2vuElbZUS>3hkly_D+!q2eRUjS=v4 z5s}QTAQ1w%bze*x-Zm?GpoUo#@_=Hz+dekimKt|VIV@Yb$%%?2-X$QIHODBPRn!(a zIQa#5K0p?*Xa>W8>na~e2uCnu9x=t@TR&U};iU?qF)SXVOCsh^G6hZ&VG&h8~A-B*Gwd{)RRc>(4s6;Uped%Ud!cl1YVtCm=1E&hgXFC2Djrp*(MHnbWf8_kc z@Xh4&*5Cj3rt@;U{r4#^CpQ-Mi$H>WD_YUli(EK5T_qK*oZ7G>{B&}0Q<5#&XRTU5 zL$#Y(r*bO`aQ^q$RK8D1c#HCLx0w2LrTJKI6c0 zYWen6F2?HRIqRw24ygF93td>N7G%RaCa_95u@Zx>AsO80wsN9*C;5ypHiW=UAE)Bl@zZw&o#s@1yO$0W5cxEuV+`{X>9DKxeW8EQ`HxXlrqjWK8D=H&>Mb;Tliq0PH_~IdST&3o?rx z2UAYi&0G|mJ)`3pi}~y9s7SdaRRN>Yw>mo;JPM8(gN9N`w`4RCh zl2346QB?|akelj~1gXg?5zv_6`mND{9}m+31BzXWCI6-cBaV0bXAD~TR0N5o*R()8 z#X{haXJz$R)yu}mldN{*E!0Hzw+l^Bd2{g z9rvaJOGT`t%U*d~P*HhvL28?fN*TIt{YYi(rfY_ueL6e`0B@TuiybEmgpOa| zM4od+!f~4*1zPUjWSQjo)A0sok~}bB>XJf-ezN)gI0a!Ez1BJNANek+Rm06a5bbQ9%X>E zX%nmPAvtSmVoVL)pmSj2Onwy`u9UXcn6s_cR`jEF8*c&d`Yfx0l9X@{^z}bI_DdX-qLxwxTq7B7VLE-*FYU&8>7@dgnCc^uNmp|#BTgWB%Tkb%L#3r4U zP}LM!j+nDziazJ}EvD~(Z@;`H6S-5~1Jr0bU@|3aB-YWSwUQyVyG2I@y|SjkeCW4!7o8&$bp@2V2Km zN8||;L_b;w`~(QeiBMFFD^)ahv9q05t{G2-UbSXC7rH^kfSmkf=mwPvppnnopAFrh zYTjR7PbWjK1k}8$0`%5Zt?E*zL)X=-nWfH$uB%$rrA~;ht5?&d&WNt7ns-@yQuIo# z6web~q5BwGH`FQ6b;B;q*q?zs&)%}))u_Suc4boV^{z$-zS5P6z}MS^0u*etbY}#R z{8wFcbF^-;2?5cy%Slw!3L!^p*Odgp*>5wwfb{o|YU~S}ttWn??(^ThyEb2HA$QB6 zq7?!y3@6KK{Q2o@%2^k8UmtY_P6Mqi$fkNWvfzNzZBvE|4Qx_bSAjGvn&IC`Rg?4{ zf(B6>@i>rDb2_z1-jVH^4hUJoijPHBx4yXOL7i%|d6B6eCD6u31{YpxckIG}pUtK( zl^~8#zl-Lqi8)`dtWYG=s%?W$q|7Y0{V3hk2@YC5r4}S=_F9uuJkzqtA>hhW9j~V6Q5SisA?)Q6l|aTQ_smq zYi+j+c*5lU0r0fl5Er}`TrE$>aHZh1_fLQCFfaJfyyX6Hu=g#N8N@bnOOXXW-XIrZ zp3Yqq7_1fJ!Wu=^Xq6blZ&3eU%2-*7nGA!<{eS}$D)-wqg5Jy0zXky~+F}H3_oLu}>X3U08X>r@K zPV9z+GVuk0X+*ky5>vmVFL3955|gyJ7uHfpzv8WXzhWndSE=DDUvkDONt4UxqzJB< zvPmIY3LPgwlTtZle|&a4J$U)cxldM>ef*8j>~N*5Z`PF0{FYrg>zmcqD3>z7tVI`jncv8GkJr z7_{3wI`W^b9e#A%&jzDst=3k%Z?DFEoere_R(rSI>2cw8zk5$P;SA+6An6Q_Pt)dd z;Q53+F4x%al#%BI{LN9upwrvx?(J-KMFx9&t=(s>!=pON*gNbT^as11GR8*-14kLV zWy(;tKnR0#mf0ViS?{pnHoay>+#mFY`^cV8s^32R>dF1DNxkoiZA9oaxY!ynm39ZR z9cVgUep)LJ8m-G`{Z?mi)E|xZ27~tAc<;tmXK(9!*NfiwOP?E}_;MpV?Zd$i%rZV4 z+1zhzb$8N6c(pSgkKJ)v{=Ko)>y{cBbO*h5chKo{ceyuyuS>4N8^%ro+Hla@C`J1E z^&Rfd*oW%Rsry4(JN>HLZ|WUs?9#1iUFtd&O`>TE7E8TLQ`NnyOI24)tX?O@!UE`k zsI35#VnR#?BP_O8hWy|0LZ%zUs1WCYO_f-3%%=<_ky(B#x=wIjXP0@J@y`lZV3w!5 zI&b?|4~6ws=O=B<-pPJkX@-@cv^kY-g4^^F7n+Ly3p^? zMTs&)Zi;eqRTsdm%*rm*+xA#-)s`!F&Y12G&&k5Tl2m9BRuXpU>D%2&hZ>Vivj;!54Q<8zUI_EF_y6Nfd4_6uPAZl4_4 z55NA7RM}6zd-xz^5D2~AD4JaBOG^e{sW2nN*|s`M^p)XWd8SNezOq3 zVAxKYH-+@zaOH_OR7laNQ%e zXzbMl23ltDBpIC1d~-T`e!El!9mD2G7g<$#vu~ehkUCY0-l-E~Sjtgz#XlO!;q>5K zxdlf$3qU-gwfAq24*$)6t+@b#Ytmbt?e=bl75=R+arpl6qd$H753Nw25px3%W*Qj*QtNgY&N{sfh1+BkD8(3_t?xU5wJSOQYGsWq8Jb<(W0^QgRwb<=qe zxrlRN^*lmurpkF#-^FU_bD`5@cG5B|FU;BrE#I`7&gS?9HlW#yd4ib$a9$ZU6!A|9 zhnZ#2UunoO)zR8vS6!Z(58MZB7Sa$2pd$aAg0%nE(k$r7c?(ioP6i{}SKOkAF#pxG+Q9XLKj z-{$GQkmQI#&Ps8nSaVtGu^^7!eKxulA}6>2iM2y_VkgHG(dr4~7iORrO+eGQal=m{ zd6LZI+A?E5Nph^#;V=l(%>-##MBBXWGMYddQHzmE78^g)3-> zf#kUDi35R_OvBPXAY|h`!dj}%$UetOSsmuo$}SD|kW3j|ANow$JU)#{BYZ8p@xY(o zeKvkEA|Ezc#OGKq6;sVwZ?av=e2`8|I~}lAniTu;8834ww4JJsMr|=t33?o-!sjiLxM{D+#{kvyG|CNEG7q zm|VXJ0CPN=C~i7#>=*6to;>`^!^iu>Z|*;M^6l{H_g_5Sf3*L-E^N*M5!xJcVo2L@ z-&2%}CUDam#gLSV^b2`Sy>m61EXJh6)QQ-jbvDS>UetS3Tpz#QyPA&joG~~N<0)O) zX?#?92PaP_((rP~{7zQyhpa}Izd5qH5>*+gCuH@|GT*acKRtiuGFbX+`urxLKvRcP zT?2>MAdDumB?7_dFy_Rx1npwu@hO`~@v+1Wl4WxGYWh-JM+kjfovn-K;Eii`%i|2> z?^BV4^}M`k#>V4B;`xkFPIup!I1Ce1vWw1FLcW#L$Cq4G4{Z|e{sp&|I5u@_*(Wi7 zBSAc_=qH-DQ!aDC;QSXR80Wvt7LLa?usPf9gBMP|I8n>Pyxsx#5N9p!Bc5@cTwco_ zx82>-YDJ&ClKX8^DyTiJcD`+9q#7Y%bggE;EWJYAo5`|g#sCv#+sRSWP_j1pl?qfh zQ`JhGd}y~cWj%I6QQr&zopk`Hnth<09GGfPpCG5R`7h)!Sn>XHD|@~C8s=C=f!b9% z7(WsRcoGrV!Mmj?tF$6#H!p2NrN-sWOAZshzF9G@zblo;@wnlOvSMZb^}#@n|=v#x<8;#NiVk;Owcx9kBcUT)~I>j|j6Oi0VHyD96CrU9d>)8!H> zaO>9c^HB43ZO!#`)cu`~u1rUpQBDV}80{ztk@fM9q90-+p`f>+pLI3e9FZ8+JiU_q z{E4A;^cSKGkPC}ph2cAw?LH~r@;oC?8y1$|*GjKI8OiBl$M)`D1=!aMfDPF{G>E+s zjXDt+s2TD0git8?E7a62U@8_Tje^2Z9OO&}F9RSni$I|$73zyPkleCT5O{6be7OpZ zFU#Tze!v4`JFDa4Y;wnMCv-Ee!O?c<&2FNE6#I5Y+&FhtQ%?eF}0KfC;#U6LHRHp4nCMRXchx!pDFGvSLlSP zHW)ltMO_eAhKy0p?qO=9w-CAK2Jbf!>K+C`b&3A`hHMi~b1Oq7HEI|1^_6DrjZNB1 zLm`Sz7uxg5hwbdy^TU!g+s`IgvU5y|H_7)`-q1TkTz*-GcC_OWo-Lm@t!mJf_UnxX z?Tpt;gVuwbQ$VncKE71KuYPX9x}DF>;ZoMnYD;m7BTi#+$5OC$}xB9Rl zbNj5|)G=dto+K?M=5xl7Do8CG#w);7w2wz`%1YaKvZ35;(kCNsqjvTk%oglHNx_Ea zUmx9_=WkNDjyYFZ)t6?CalK$zPnkL=1;=-}!Cl7ojl$cO`dhAOVGe|fA(sh@W(g?Z zuQ~$YErUsZul7#|fz9K;piV54xgAh35t~g{QC{`&U)`O4Yo`?d)$g?1zsG-V2Hkfn zb-O11s|wq{hk;#OTr^|Y*!v9w>ut9P0~;M4;zhybaF-0Gy0ex9>o~u%#^Yx8#rWXm zc!s)kGgIK*b%u^{I%UW;Z~IRkePRBL^$}#1HIksN$#i~nahL{@@ucw6>0{|5gY<3m zrP}bWV^Rt)YNEORaRFp*Qyl|m#Y#uV)6rsO)S0j3t^pi|`v8Xv@<`N7&_`^tF{_0E zNk0|LdmMT`%5zU}AnL(?{%5;AeE6T=5&!sTUuQi2^6<%1+*iYI324{3kEaO+9X8bB z|!v* z3|hb?jyq-54<++Nk#bUfx=Vn3R{O1NUtByiJ==baF8vQHYQW`G!rAeiJG$~_Xdy)t z^4pRL7?0`kUDw#1JBb2$kG;!{(&3_gzpeLSU{ZTS+*mZG_|6>ts6P=9osV8>5}pD% zaB_b7Y^t!_!@K+BX;O7}AMC2OD~9QgcDQjnMHjTt`E#}&Bb>ATa`Mo#0(N812Ape{ zfE`$ILkLr`N1;ROPC7ZzUJzgquGzqFc04%>xlXCY z*cBF_!d#gpZyr{L!zt+)6kNK1I^k;Qg$p#?<$}s^j9|UUZbL9ckL$aQGIJysq4#PP z3QHgZ8v>S)6L;hu9%ZPrIN!C}p(CQd#&etuMm&Q5D-H|>uJ^4iLGZ5Qh1}W*D9G+i zQ$G`Yt;POiym&$OZlDpbQv^EPOhlM1p0;L}Jd5}A#hu-EiAz8GEN{`mv>_{U%;QfX zwqq`AfB^YTL*jYwmequ^Cy&4KfV8RxdzbsgFd*xX1;PXj%pEz2Oc*@_V_8u8K*fww)?@HLN-Q-ys+X&^kg|3Ou6=H(R5VI+Es69fKZza4{GamT!RnbNbfAQB2q zKD2|O(-iLJRS^U3GW8TpaptbzzJ66Y~~Y$)~Sj-?~+r zM}_CpN=RIIXaLN7GL?h#W+Qa~jQ___Ch z2L6Ox7TI84(OpxrpyVa(S{tO}cm};IPd#JfG+ySi9#vt^4Z$&H08Sdil26Y3cEy6i zL2Q(}T3{MI*J7hzYS2;VT_b|Lr|NG- z;`1XMlp4&Z?3%V=r8B?bWYeuSix*SwYr!7mnMNBN56!zT(@+gL8rBkFx}t@5p7498 z!u1f$?iMDPgUjHs4DqCZ!JN!rh0hAQ^+-%8_r^^lmJNnb$CE-kRGvjLXD|?GaZXE6 zxZ)5JYADRr{m>8!J-T^jcqElOHCzXn%jSE9YXZ~fd}jf;b7x6qUZHO(^O~TTN_Shl z6#UKBNoVa?r5Xn5o5}KHne?sqTWxo1hUq7`HoW}xPB)t+N`h}7A8%Md<7$n|-3pP? zx+whBgcD&zt8r0{yY9#73ogo3f%D_%tdL=yOfcwcFNm#;2m86X%LbB;QRST0*>ET* zC>_blZi6YYzYTn8S+kPKP_%58l&zBJ)ga<$qoqeZ`&A-Vtou^AQk0jToZQuPLcA42 z^(%##DE7I;!lh>Zuwt>rjT9~o#c|?4MfRvz%N%!W9rN@UYVubj?25zvvZGf^OHUC+ zCDeL;Ea@^rZLyk;u8PR!x`5-*7WjNoW=o-WT=1hkB@E?S)%m&jF&et*b?<`edMn|Y zR2R;j?V>DYmXul%dqqi7cekzKyM9BPDD}w zzZ@wQU!}BJXs}_74oxNuRIKV~6FsYzHfb=~dIZ4TV7R{Vss;%HEqu^u(kWX_6!R6^ z#H6~WoM=S$CRK|Vp*8sV=bN>sLki2<^lo8<3QA7pNiv*@ueujhTlVx-V=ry6F#8G~ zaUeD(aSFvPTdQ<4Eu>~Nmo$-l^~gzT618dN|J`^==gy4X-PqU$ax{7Ix-ilr$0U`V zxJk<{eGjnw_vB59W0vRUxjY?MtS)RDJ=RF`NRP>smw^?V3&J;fz}F(jq~J`?$&ldQ zUms`YTW!F+93G*M==M~*#8Rt&z*e3%ig9wPWpt!4R4dED7%VSyaxL1X*{cCuKj{x` z+o1~`-FX&lW43bB)$v#t8M0@0cP8@1Ajf`;%{^ytyeu~pn(Q=3=f{%nrV6EV3rZ1+ zN;)LWS?<<8?f2|eVuYfT`=_tXESENAgAMI*aiSlarpgQ)V%41HV|!xGh&#j9_^?^n z!duz$>X2m^w%A7FXgF4WVF~)!z147LAcqc&w@v@0NB?oq)IoiUD zI<=P!YjGg!%H~t6sI+AH=LBDFU_w{5sJK;TEW8BXPOr>%jrA3r-3zO!@gMd_XS9sa zD_!gj1*3*p;mO&tGZ*?>mILOYjwfcW%qAx%+>42g@%VMB&!PsPDxZ(@ndRz2x%&*Y zLnF(}GJ;@Y4a&819prZoJ|iK+Er|;BHhp7s z{A{e6x<2%^U}k-ckB%lWFj58$z@iok69Gb!{M_v-?L~ca|IutVy%0zd=^)44@VKXd zRz4(m>#Xlie)VG|97m}@amq(%?Mcv2w9%fpmT)rX?Ff$SROKV)|I!0O@(|a#of!_H z(L|~Gng~@diO_m0m&3v=D?LF83*dT4wSY3Q+>5p&c1WuW+T@EKBwOHf%UXTo_?I?p zTsEvtiWZleTep%a2d)odpTFf>!IRP(0!Vk#-9YQubRJ<4K~sRD8%3{X8CrhbE@*$i z{K|I7&~rF)tpgIteDl}vjn^3>%X?Bi-98;Z2d}Rr8zl~$Y5~n-hL}&}5;rY==4sY+ zeB*f|5+YfqB7HAO=b5-X7R|K=tb7}xI#vy4MKNLlE(prIWq4j)Jy62-!m?i-&@<)M zMHi6#QTd9ShjuD9iLmh*_TNLG&C!UJ^U9GnNtlld>++#F_e}rf_AOcDy$bJ@u*&_1 zv{gzcx)xva_>t;;0pP7XF|skd9C+;{aeYiuIjBf#g`LB6wF^N=ZpCoq?HFU#qybIM zgd>I4L?@-OP$s@zmqb|rYrw+)?5u#x2VawFO`&*c471C)rgg0{-QbPE_YQHUrFbv?yJSHt53Z1_BJD&wi+Gwu zKMDzqBx~)ER!lgPCqpZDk!I75>)b*gwHWKr#^?eDLsJ1#wBvK4 zwSp4tio^oQ3zsylQqA$jas?+Jj#8}Ae8YEv;djVzEr5*%bCczpq)JFu7Ba5+X{usk zvVal8JODR#0e@5p08?Rd!g1DUMibOievGHF)Iyl#hy(%Xd+aFUks%E|WZhQLrH;z> zx{W$|R@Kqy@}DBpo8jVa_A&o)^NLRNHHDX4RS}rHWDaNM^k@lN;p|+(4F8DiZvpwt z3$vcdLH-t}gBpZBMUpsINZ)MNec>L$8^rJ>CkZuQeW>SaI3}$rrlKB@@H6aeLn#hH zW%P*vS2^o=x!jTp?W($eC-Ww2f^<0!1S(e`;qgPQb9e3>jV8xz2@@6z6@zB%eiwgv zT!%A+Dzb#@>O+JYhZd)V0<`_ILxBYbEgU5CsSB460$MXB)*Nxi(m}-b8pi`t+++7>#FnEpm=U9ouLHd5~uItD9$KLcef`cs-Qd zLY9-zQc6F@X$P{KEPG*9rua#d)d^wdd04}}+R_?^7!d&VH~?*s#;khfT^_``Wp`;1 zS4n!64kD2O%cEGQWt2y;M!{I_;HuMHr&y?mD8iN$(Iwsus77Nwqq7XTgf?geDhqnGiL4p`xt1 z$LZS3yi%_B`pE~KH=lf<$Ux3IVwdWPDLU)&X5`5uLTl(%wv(OvT>W{1sc z-!A2UsK@s2*&jY&_J?=A1n7&0Pac2!{nuYV+Axp9itCMIuxfLsg7RXf%v zcD+2MfOBT@DENTZUcU2VHKA{O1&{ABRUAUvskv?kI`*nT+5cmA;Em{p>40KBy!z#}XYG3jGo8aB420+QTgM<5# zlE@PqNbDcJYzrwlU_Ce_1aS7!-|547?ci>*DG-2-@B8%mwgtvIb%PKSyi{{yO1|=U zQ4>T`Ea;umF%;Hsm@JAYG=kTP?91|_8xYxIxpP43bVX%pp5lwwnyk;>J${DsBF3`{MkBw)Hc6eRP_kfh9}}Q+lO%3evPJn{v5S7C40Orl|F`odi*e z1D?546(yX@5ntO$;pjwIIqRI?mRtx(V6hi+EpZrJ*Tp|!qMo+zSX9c#XCLRYS%rHy z!+^0hqBk|JYN5OGr8hy`+k!4Tw8P{E4iB4Uw6T~z7UB)cqq^#qDaAou#Q{*ZWz2xwLtua9l2`ui?6A%KgFFwtcUDQNxa(cPVNt&o?J1yxHgjz%HojlXbH9*&G zW)jx1b0EaY+r2aP{5lY@k=G&u*egXfYXO6*N!{%lC^#*WnN{o_tKAsB8Aotc%3!50 zqk6O)X{qsKJR>i5q73>uFFP^9q@Ww0;(N`UYC@OR&Z<(y-F#L~$*rE%#@>lMj3r78 z4y4z)Cjw|HQe0o7d!h~mtDF-h4OwEs2Fsci2JMAq<{c0l%{&J2ghsA&=2b3;>baL4 z5J9A|l&$hMeB|zJ3Q_pgZDV-2l2>Ad5wFe~yx#sFavct3x*BreYWDgn#(z3qo&T9! z&z(Wp{@?EQf4BeF;p{q}-!9qzYp{J4<9|oS$}dBva28KX&S?9?FQ%ADvZvFd1-V_v z+1HZ;jCNQR|Kbmlap7DuYmmG|O-MI7IpexFoi;n-qN$8LwGSUZeK>3nTg}BK5%e>H z9?m%AM_RX=*^9;E?9T1m1uOmSQWdOH2pwJf$%*-j^6xRHb7#BN-EMWbVQe-g%9Hbi z>~eKjhSZfuMLP>uN$x+n|6qUk*GKz*9zMAL2NV? z-#*}y&li@**XeEii?P@2K;$h-Dr57vh=w#X^XT~b)DA)3v&x~OIlz;uv^Ksx7@u*X z;9s#IAD@$d_ij2EpGUa#&a!yaBt1T$O>DQ-75!1DRo)116~66@9#5Zls@n<${a>P$ z<}a&Dx*(g|GKY^iHhOwkUCfF4+rBh$fVEkzizVlrcHN}KpzYTHZn@Fngd-rEwCtmY z$Ox>l@Xs$RYaNpTax~NB7SGwDa_)cRd)Y8kbmG@>z;YqnA3=s>SIH_QlswZcOot&C za`9|S8b{^Oo>}rzj$a+WPOnx(KNX|gxpNNEiOd=tAA$bX9*KJ7PUPg) zO&9fP%%wxsG(3MXoh^pPBVBm!26*RAe735hPFa`gg-3a{w5ON!puJae$)g{iPEV80 z)4jIuc?;|ZU+T)NrAuhx^_VCkdx>mcOvod<(9!Pc3Er%h-y(UbV(r|`r&|u{QL%Ki zE+vqT?M47?XD@Z7-5rlQHC5h4YX}%l8_;rinE|bsZ{AN@YI-j+dky zrb8RbXC!C+xoXgAAcf!Iba;MtsPO%tx2S&0j>8+GxSuY}g{_}Jo;WkYIPxGSJt_W5 z#~0xfkj~b+4m`2Ql_8V%2+PcLaT&l(@R@#Rk{J~C?)mD^l*Hfjimhlcs3uOBd?uGG<1o#hEdD$SudiF>%%X|_Ibc5UW?=Q zyNK+M#`(XTbK+JFXCL3s9*-}w2hfupp?YG6?6b#~+AG98OlR|txA-xgJ$JRf8O`RS z=f{(g#ZKIxae(Rnj7~;`>)$^mSD3YQA7w>`$nRq4$ZL*-(&b;K$D}yVI5zBi>5?~X zZ%?VydV|h(Z&wR4<^D(xt-@&Q&H$5oKEe!4`HHElXW3q_BDIxhUevq7~WR;e}HyjElls?Aqclh)Yn z3>RBUEI1;siK)v}Ywzvsw)(B^In_~ZKZ}Z_%p5cf7T=y*l8vmM)=gciPBESD}Ah0o}PC&ytP`)lW_;7lEf1@#n@XdxZoM36(SP!G8 z4! z2i<|1DQn-E)EjYt={W{uJ1xY*p_Fxx%-$ZeEXCV0$s|EqCldcyPDO>$StHi9G+bD0(6(?IGbAsF5%nuS%xpYaF zj7UXm1c2!LS~$OwnmeG3+N2vIuTkJMd0I}h;cVY37L@OP2ON>=_tw$S2!*%PIaaA)c zP{2RRJi za;*q*15YSaVzY=hC!b7iT^s(;F!RJKb&*pMDA=VG=8dX%z^dZI?;LXy(Gl;ovg`nk zq*n$}*_>ne6s8Hc<10rg)r3x6eN>x8Q58q!#SNJWhf26;2L7SgNPC~>_AFm4N(Z!0 zahp1F4dGRB%n^Di*n(}INSv}kIo)izy~YHG5GSJ}-AGIojc+%WO`&G`3_Ok@DQ;VC zWch7KYDpgorzP?|caRskG4myQj#)2lRLk~DzjSyaVUuwA!^@xY25;R;%+6+5BepUO z(}BVbDZ`d5BUYTXj{$K|EDNXX{^6?;`y+SFd(bP-fa270$^H1=)(u+Br$#x=q)y-H=e8$0*V!6&8aIEkvTqp zTpM_#NHvtabx^7aHwpr^3Qm=gMjr-FE=uXBdHKW7KPAbNa&UwKCCl7Vvzk{oj%+eU zReqi*HQyqtskmRL0_}1xqE&Fc+{#{Gg#>36l!t`7Ovw%h+Uw+ZQQ(PGJ;9ZND*aQ7 z@HNU_R?D7*)xC6*y$+(AL`$uQXjNELJxt4?QMWNh{fPdCiRJ~XE~m;~v0-$QNQqRP zzH-@^Y|n1la)S-?!qWe`B@uE&@#CJ$*|s~o6c(Sr=mlxvT1c~EL?Pkfd-+4-rSB;5 z1o_p=gZyYlnq&s-e9uA7R?XS33EspPhL*3S=|X>SKAW-SEgDk`>ujiRtXC$>@Dhvm zVwAIMc&xR=R$|}HPdK|uER2bnJwehV0^oB?E?M?BfwRj7Y1DKkA_7pPYn{^#D}JG! zZEGeUmC6RaB3a)nv!R8~?$-1bY>}=Hrd8~_y3=<4ICnf;{t$ulxtmH}%9BR|GOxah zexU}Da5UsPpKAiQ(@toqk3D z))QZp+?~0@yvSnj&v@JIC#N*rm(86 z83~PqOHl~QAsHO;35;xfhSsR1hpSW;2E^HoY`i$|>BE6+)#&fM3rY=x`sZD6yB*M3 zKr%N2g~=wk%{sd^cN=IA^ukCKHo3{}}OKwN-VltI#Ueym}J^$#CSux6u ztLGm*e(*I8g5ft0zaeOqpO5w*-T(U0|H13??PFcrp52$lhfH2}2^SODVb?mIV4+=MMX#de)at6MM%=X_ zVo)8iA1$5VFD!!+v)-oUx4Y8cen5dkXqgx7CfNmyXSp%R&Ngr^<;N;&YPG$o`FB75 zT0ed`fpArMXF&@qfnVdx4;><-qovSkQ*KvQcII#5x2~?42%X<-7(ilK+AJENFjen0 z|AWo+>TdJw0m{(=HH({CaF(y(C3gm8$u%C#6)S1MTvuA3hkkXDgWUPFQgd%{JS$st z`k*<}g4f=A1iU@EYL9;fe|VH3S9Xanq149ZcV)=53Lv-=2_#HQldJqH2#Vnh&Y|dR zhM}d@OOEH~{kX{A7HD!Cl^j^rfMVp)-wBjQ##$15qu&0RzRQ$hZRaRe_LHx6AXK+5Xp^5U%m5&}9Cf8j{1(F)(jk&1jUgHxXgP>JBI5A=(Gd&TZzp6SC<0#an5X2QJ7ysUzg6w8 zYGV~rQhED0g)wIUB%#ZZ3S3O)g~%gaQkKSKhGit^QZ8CSqNgrgA(C{AR#>yMeShH! zxdyZxv0!>>a&gbe;s`q)K9A!=_oW!rGo3f>af2_1Psr;v-bUj))ct=bBPJ0YAYcu+lrx@*FNAl88rm(84L!pz(di zQ>;Q{6cMIDv0_>2wVwrM0rgxnQ^ zF(UQ<2IDH?*xoj&D-!yE{O-@+YsGQ3@{*UG6@{mUXH40xO&7dl;bGei(5&8 zwKS)#`gWqWP~diu&^d=!#!ZB(X?#VTQ!?VW3w6-o63crykr`oSy}J>{XG@Oa_$Hsy zKi)GO26a_e$!gbdOL9C7S&mT-W|UnhLR%{^pPe|}2L z1(6N$J2zH`BCl2)|Mg+#&W^f?*Ez~7Z!mOG9Yba4xqCubg(*)y$RZ?qAqfi;zwXxE zmDaLIe)dsn2d-c!dBL1YR^^=f>fz&uPwsO*bKOZq9S7&QHyfhhRFa9Uq2IyiP}TnC z&achQwG#GxVq6PgFN{gQ!KJ?NzhM!w1K`)d`hr*$+5JPgzY6#fP`?=gV56+W$3I92 zm^u+7p!5589K>}0PDxBWwB#%ILhd#w+a1Dm$Lp4g=TaqAWY_AxK03eH`rV3U2!Mto z%XwEpHP7z3L~|jYG#!E|9~ScB?OGStA{T1_Q#17C?F2k}@9l<-o1m0h)}2c$KQ(2n z_8Ppp+>_Utq4f8*-X{ds=l{J#0m2aUj6epZeSC|-tj_=2?ho4SQvTmgxBq+o-?xDD z)vMet<^L^V`}e%RmbO+Ih!3X+mZ!ubl{qSRQ)#vS?a|@CxvzD(eE-vSf8Tt8!L~k! zZ@EyCE?0S!$D@-pgYNPzdDjXNigr{3jEUHlFcsco;^kkymX9=!O z@M_uWYVymbiFr-ORE#*vzhYpQI&o{w`^$xE0Vf+FzRmf2VA0`v*zpfLVMDh(+nP9W zYtr^w?TTCXtZjP>#hC3yWEA4U^w;w3YOb#OojXbFLmEZIZdFyCUEunH&jE#pY@7Y; zJecpRyU7c8RJem@)CQG?xXOyGl*U4coh)C5q>>nT)1Euur1D53w^xzu=H|r``isYS zm)k^*2r3nTlS@6nr#v}@*oUtd0-lmLLVg(b%eXzc?ce_=+_QtCHT)i$ux>^ zABtLXsCO?qZu4oE3fgG(PaH8nIx-98qYf}xF?i37pb-m_W>5vc(2iwmP~>C)Xn66* z%adag>YXNd*jE;;%Mt0RqukXA8K2${SMAaHDTte%atadoy-@Zp9fncd=g~O_pU0sS zOVqg3LH+$Ji5sKfK%4Lvcx1)^i0A7~N?i7cKlprRnjMoWEn`yX$!qeq0;o)SE zuZpA8&#Miyo=;beJ+f%+$g6lV8MoQaQ~0_E`Pc(h3l*!t?8m>veWAW1`&uS+lvKxk zp^^1WXr}2(x?XaSBUyW#oQa9YL>ddMkmrO9#v~_ZV_Bw^ z%BWu7UcJ^>nTf1wO`UsH*tH0xU6!zU(}>K+$Qn=DlTI!XJua(*UBiU&IIv({Wxh4x zuWM&qnNw_|8M~m;FylN@)zX92%sNl|CF-=n6-e}hMUGa@FbNk89CzvQNd}tN{_7{7 zWbP@O_3+e|fOneFb;NWo^9spZZYMBK{ls5041n;>*|5&mQIu$XvTXHv>T>z1c} z*S8>pl$ndz$agl#xUzZ2+GlOvubJ6MFI8G)-)nbBosfp36x&Di+$*} zIn_4+m}+$8vAZ2%w8zA0jxJLp_wsk%nEO{9Gu^wne)Ry8pHmznVpf@6>0bG^F zL@QUEKw=~^TR^}tV(uYY6h40J4CJwZ=mB%_(DuFxX`AplY(9jFbr8;-jSe!a* z@GM!_^sKXFT+0V40~YFD~LeMwO;9Y?8Bx9^$IBA0(ub@IpPz2Tl{sST3A zg&}N~>$j}byBkDsc%ZA~ePIEu9YU_TDEz4y`EU)c^Rmn5>aM$Msj=Swdpez+jE;51 z-h%6I&Sk{Bq91s*|F_p^^~(O=-tYInUJG{DH-a(EdAXcti`zjfv3(UkFj)n;1wihm z2lxqQljkqE@^xWp+x|KtLEGrrnAC%96>D3uF9T_@T>XAmEU;;{xhQtKy_=Ek>J>m? z-$ORj2@AS*NiWz(VDTi4{8&!CI>+ z>GCDANx_Xg*3Q|y>ZaCJ&SoDQzN)&XXBU~a(yLu8S@H&#@2xEsMqL~p9ZyG#;n`?1 zt9F|E8t11IobV?^psg%6zC0rhja{0$By#V)!v(5J*|r!xgJeu2)GqYb$@AyuI3#kH zRaub@F>*0X%}WPss2D8gl#Worbv3;Fq21a0$*E8dWqw&Mm3!^Wt%x(m*=#$5STh|; z42)whU}N(=<9U5!3PiWL)9$u*2c6zvr`PHZx}8C5Z!7CId%ez}y|>%%@9qr-x`~|I zOL*KN{poIRZ@1Uq*&VcZ`@P;kk6XLlPG@(wze}-Bn^c-KV(oXDT=6y78+7`eL9gFx z^R-2dPIGs!*X@z6WT(~M9qhCQowkyeG> z){cR#(`3|4sJ#O)x#We4y{_5^n5^bNfYv(gc7Lzi3hj6I`aq(?MQE)Zkib_PQFqYa z1vP-D-QC;Wp^SUn-RbZ2JE#E!f^}Ov-9BjPG`nq7h3;UtJ76sI0NO(P9j3}?faVTu z4!Cd4;LlWf2H187{cdNk-{~9JI^Eu27YNY64kh?zrAaZLHnS;10fEe zm%Tkk7Ta%igj|&biMzYIU8~XB?eu5@`q07yFqHpT}H z_q&jCi!OS5J8}FiRi;-6r?c1X?owSNYC%@~8ZZ`d08?OE?Iyixa67#=j4)uz!Y_}R zQ%k(V7{M9@)^X$K6`+M%0CA7O?*etk&tnEO*n??0&<`jB&-NJ5Fx^&bx6hCuPv0$< z2krI1RJ+ycw&8}Jr=NCnmo8x-X4- z0>zNCJq9uZ$QxKQ>0YbX+X>^}g~I!ty*=7xf(bnNjCa{-!6 zg5kDz_mC_q4L|IXHdkZ?tH6%^*!~U^W$3WvUJojuB^Z?&BAY?G1F7wHcR-sPzd)mo zTeJl1B`K`5gn}d(B!r{@)Diy3BG^K*3Ta{tX)`t|2d#r0SPqIuOsFCFTxjhBH)_D$ zJ2rl36VbK@C}>%)nU>K%HF{k-CRURUnD>BrSVNsXfqw@u(8n&s=o+G6XBUXJkW=s- zbZezs?VUE1E!OP-4!AG0&)3}@Mho?Ld1>uKf}j>@g-iuxJB&^Z^#?SJfP=pf(yaj~ zw#SSCbi*uy7(Cwc@_`y%5d!Z9gPlIr`D!&J)u8KH7TbrNslfu;BC|A%riGA!BG7w~V2g_ISiiexk2}bZ9ukNtfT(U8 zzEEkPN4*ZqL7#OJ5ro+DqG1rjf3Gm$$TOj+m4%He$F7t-bu(ZQU zo*Ti1fY@!Z=4dg8qGS6l$cp}2P#bHL`cOk{s0PM>a6}YP=boX3kwDOh7QGT{4%o+xZft)^~Mv6|m$*kxZy@=(Fsem^V^axC?n~W5p!V6X;D-D>9;MptB+)TDyB7y|>eb&|6Kda8Q32nS{CkdD;TN zb0jK)3~+&EczhS+I0*3$RROTE)-qO51p1&wp7U2jfndN8{M@CEp2J7{$EpU!>7l6v zJV(<&)$1eXcXy#sguBDIq_x^YZb-d=ERo{KHaH7B@Epm3NQBqy zhF1iv6cwI>M8qnkcEu3@1OaQ5$~({?I%l=*QjZm?YvV;~fh5E-8UuZyY`C@mSd{SYY7UxaimFIqsT1GL2?5-kWvM5NTDRug>* zjfb@W-0g`GY1W?iy9l-c>H-bW9db6#1ET4I5u^naVRB4sd#i~Ufp=Kt&{cqzkOEEd zysvc|K%v_qIN)9_u{>walIN(k2&JBw%u`hhsk(!1Obr%n1cAuc`asd_GhRl9KHEYr z_9Qo2O>|p^3OZm<#0t`-WAo?$WhAbs7jYmlIPj9Awd!!=6*nDj8xuDjHX?K$G%?@- zdqAeFN-(<74l6thIFbpeyUQBDatM!T77!-DMKM5pqe6@224SV=Eh4`QC!x^-0R){y zw^eH+716*TYGjn;DN3$;0h-u(AUNSaBs$P@gM&l`K-L;)LJI(rDbNsuWiKMV4G{nr zOLKL@V^9b&gl12Q6sjF+hxOyuSe7T`9#}yP42-1O$1W^UNhWB@4yB|Os;4OMj( zL?vtres!W00-+560w-yG(E9C!u9Rw|MUR5$$~1^vRCzX4NS6)|AO>EbNyJXrM~XQi zlQwjND54Ro1Cv3pFdlVbengysOhN~Sbb1);IvmS7Kp)6|>1vD-Q3mNin*lM<0(2oI z9hsp044qmXwyJ2FT57cJXqRjFVujR>Xa`t;8)`@>sSi|C33aqzXjZGuAPN%GcF>yW zm(3&pdCG(mq>%zCX@O8U0@d2;gFPv)+FC$MfYHH$UyB{u{ywB(32NdfDIK1^#(phxk9%Be_pU_Sw@mE zH0{Wdi|qWZEf%gFbXA!L*u=6+mLZ_kgd|`hp0FPQ^k{buhAc`@1A+x|kfOpqFfM|O zhuO1X(00~9Ixw8GlprtA^I>ZtpDtY=;1(&j$HL5T#pP_P)Hej%WxA~WY)RM;qqc>4 zpr1f(EE3?CowjJq^&yQFD(CeM0MruhpMwf^v^)c=XcX*=tPeCbNDoS2WtM_~y(0F( zQl{NAT*|;CWCn&qNk6ktFij~4;Ka>?E`S6W6^pPzVc6COYcw5F3J7TZhiGCS?Dr&~ zfD9r4&W0?l4h7jSBFuVp0)tV_o?{r&?nmS!s}r^gD=*ba+qoUK5fBT=+KKbf#szsN zB<;}y^yTJ`S`3JRH#-7In;#v6i4kd0PrxfkLiLTc2kjF9B<)WMnT$D}uF%Bj z6urcRCZJ|dXLYpub^8b;8vF=;+;dhZ@QZ+x>;NayaOs2X4&Tw+5dRW!=m@b7XdJB# z1r5@I7wE;cg*rt+nJoYSNM}j3wiqTr!PcX<>duczRyg!I6gp%NB8`d0K9KyohyWz0 z6ltWdlYO>3f^X6KQLK=407iYVsYerIS5I^3zygoqgK5fEg@}Yvm>xPxRD7h?AV%Oo zL@3K26kxCtD>GW#0Lo^=;EZ(i@EQLJ8?8x8+1du(~{#gbAZQ7ACFiWIe$PF<7KT8dl z4M=lTTWElcMT65a2d~TMr04W#Dy}#Uu>|+(Inq(`6G<$+9BhEFfDfnul?-grIdnpy zJ(~x6N@O9d&lYPBK?+t3?lRJ$|H8&v>UNMr4pvAD%0OMR3xQkIp1cnRAcYbs4oS$c z;Ojshuu;1M^8*%E9b~n}%S>4v(2iy0gVb3j?KwCC8c+hGf*+|E`2!MzZ9ur>CDUMG zb#3jj@@ap{oYAY8s&?8a)WQaojyi#0fU;0|?KyjONCztgleBFYmJ82=!YM#S-O#Fy z;Np+f0Rb%7vfy;#1R0^+a|DG(gCe4h5k#-e8+{`N86zL9XiyNglh_AYb#40NlxtPc3%7Mc>t1!=c3DDoX&PPo{l5y@PHr)f*=3_P|>Lh zseFSl$L@^90;cA64leP01&-$bC~%>>LJR^0!h#f~N{Q{3Rt!*-${D|hB!Y-#GXTZN zu}tNAFbOP9IFWq?md3IMP24!ZfmGn|Dr6!Q3rw%9HNeCML9-$rQUkfiAxTqcps0#<|c??O2~b!PS#Xgun=+v#I)Wv}gE<^-t@$0ZJL)j>XS=cGR6T z1IqmjC_&9v=Jfpf>kvD_mZ)4h^}KIM0@oym=Lo=U0CU13yMYTZX#Lf8jiXM{C0NFn zb@4hvf=0MLf`NC64VZKbZE9VF>L4EcsaZ$f!Jvwv078Q| z>mN7|S@%Ek$f0_v+48=-F6t|;{l|h2n*<`nEQjv}(3E=euAQe0YGL$*1pY-o{~UqC z$J`_P&o^-VJO8Ms;WikkNW%0zyygC=>7efa9fJbe1X&m{9?FP7%%HWsmr0EH12<{o z3Y8qe0IWzzKdD?KG52`w?Ev8ki-vcpQA-eEM7TkSDl9jHA){j8nwKkD@Tj`T&vue6 zzU|O8_s!N@xb~a37Nq;TCx4gXWV6lVCPr^<-PIxmb_l_ruN02SqMe0h=PFK z{zWg*+mCvaEsM&UMW+DoH3)47QNzE)2~qLzkpE|G>Fz(*S8)Fm@ybFmUR+C1%H7n2 zt_!?YAd%L*+lDpQ!rkfM2g5}9)9!yPD#P$vbO1>}n3@3ekUHJgrOa^;i7>RJ070N) zCxPIf1x&}3PVD_oi^PhCt2>l{&(r-2Ua~8pmL=*4LGh!DE~b6dgM_u6k3z<_@Bg0A9poz1p#=`~7-C`gz6&nt zj=#i)lZ@Xd5U>;$GGK^JY#>;{eOyUpQOsM&qV`qN{<#!(Ve#d4PZG%9D7phf7nQD* zfAy38wh>m2H-WzYh;jVlaS3W@VJ}V9Iol<^t1Z>;p59@9wd+RVgA#8vf1BO^RLXXH z$aKK1UZone{C}1^ylByp-j&eoU-N}gtzPXgMrOFPx{gFT&CU6INGq$ zeaZO;Obn?9X#-)0)qvCxmpCx@mpo@<0Tq`b84-My^85S2ZI4QG;ov}lubc=G2qbDt z%g>)e94rJU!9QTFINGK2z$MnbsI5P}r$&!AQYlvcf|Fj1`^;Ub(74@4Q}QgS0m3n* zvl)bPB~vR{xg*06%jOJK;~`lxFWIu1s5mbCWKe|lE!G#~*_qlYZ45d~iWt1`w)M6P z@x)v`IF8|8m+pmc{dDpF{e&K{7Vk&ndq}Vw?knH$k-@`ZtNqK`ufO~>`ulMF%lc0@ z-Cuu##J_GK(f@z`vZT*zcS}EA-!A;;`mbmqPw^4d6W|b^PmLb#t`n&EqEQlpq#mFk zx@iqtIIm(9PV$5!#_E<_W(~BY*hyH$P;cNOp@_=K$1Yg-aT+ZQ-F1WkkJ`8v0$Ow- zpahQj^V{B_{qx^%2V66+V5Lk{J(D+Bb@FQ&0hvMCE)N4p?XHVM_Pa6Y;Z9~mYzfbeK+VK zdz*n#^GN2?d}V4h=|QbuTY52~KZ72-xg=0Qzryz|bJ=|d zJ;*U#_%6hGztb9az#s3lwzuvf?1o(8eyFbh{kDst;w&XRi_^<$@H{;yLlmJRCysh4 z9;t#u9Gb1+Ww?XD6TX1SpYr2LEnVl|M|9LesH-7q7Q3mrzH-2u0;J|arLW??phqKf zGaAc6h-cM-%%XG|9EiThQ~EC^tl-!FialS*_oCB*rQ@fgR1lQ*slzIED&H4+^#!^h zE7OUhrAjiKiCGnD(-0{QeP#|~T$Tr?^x}RBbdeog2V}PQ_4zGITTv7uf5v0{5C7fk??(xf30~;D=ym}4D5@&-#$@Jv6l*nwW9eN%NgiI=BnqUb&vAiAc0yn&Micu7 zZr#fhofY@U^A$nxr+n?qKQ@10m^r|*qDtuyaq*t$Wa=UF3%@#r=Tdbj{a%M8Z&TIb zOJ3F%CH$M+t$4@SpeHw!Cvr| zAV#|^l8?EeJ`wElf^@bZCPk>5WZgsGHm1GI z;g5o}{>UruL`{<(OqsbeoeI1C%}>&l@1BT2aB|KK8qcqnbw7X(W5+FD3f+)&MF!yZ z9_|PjrWFkHY&?!8GNnA=%Jld(t;}vOXqWFd;r2guzwupJ)C+yd_g>Bwdc*x>Tx>&~ ziB|76FgJ%>kMnt-zM9T$I~8=k-%9t|m9B0NS&}UchlFIJ+E!tc#+^P-%;r@RnohOx~k2ZeepAY23~% zIs62&l~idj;j&5vgz60_AD=F-RH9pfVV_!N)yHXGDWMY7=Q_+(?J@M)v)i}GVTW3X zW2OWxJ%ZsFFBuw9p9$3!90XWtgrl>`GFyF^oTRJ*w;~F7-VR1mU>>8ONGId0tPv8( z_e@>kbOlbMmj^9-dPa9RevQ)w;!f8k-u~cpVkS8JWgIDKU0IDu5eDh1kz;5|c59gA z+0^-y?M(bZRr354OdOa!u&2l2(M{6s!l@=UN2l|7Js~%Irq57&*Mz~d!4m`B3#U>Q zm$TT-4y|lwB?m6l2&}LrnNZ6vd3UN&l9Ef!3rAO$a$pbGxAR%Qqow=9YkR|&vM4n3kn{J=nBjk8EMos|$} z#4GChCFm?te-D)Ybgf(5A{2k2Qc;>dFwy*(fYrRTOzi^@t?c|zLbiMcFRzAV_C4A} zi*`{pNI8TX`t>b@?$DUeZoYbP-|F`# z!tRW&yEmiW#OJ@$2k<5#A+xy}k8d_tR^GpVzbs;68D{sDUia;2h3Y2F2z%M`C&>45 z(P!;Vd!j!2vAKV=dvLy2-+S~0zGskB$s@i7BP1VpYR$v5-R5`o(}hQ0K$UILV}U5I zB*{Vke$$GjQ>GCdPN zo6|w(63&%H6TEUl3yj(8B7=_x`TPYYwvpMr9YTaF;z=Kv|K%2bUU(u9hP?xQzQ@!^ z8wiOxM4bSBgurI>&TS_#TfVjcGQp(Z3O%M~xFOjPsM<;H%5%@ibNCNovRD}=%sJE? zCgNnrVHq`_!n!irTlhu?6=g+IOmAiZx8Kc%*y?nuAkZCEY%RL^1T>gvyP4cEdIT<# z@u6#e1x)x_xg>RMpe;_Ay6BIN>p$$)Pa3N8%G%qM zHHuR(jBNhvRAUT$B>vdNkxS8+?`YU*;4eLX5gvQfGnRjdaB0zcQ}C=ELdn2h`^kHA zHRvH$HXEBqV2U(k*ZD3gOf-HxsUPhe)}dj`T4=x9n$SR4e=COulMoSA{l^cL{cJNA zb(U)N9TN4xbi|28K75E4QUxXJ|n84<_-Vc1uc=i!FT2+EKo;WCZj ztdpJ)5ej1$;G4hk-M_{3EWEkp2a)YmqT8nQnq%xI z85BxaR!RXWI@+rXcma zT_j(7GFp)nNVV$$4u)Mud-z7^2P<&&zI8*+#z(riCh>K)UojuZo3?8?D!auQ#2gVx zdt!ddFr5sFRGCsmYmNmvFKbh=rw4H*?fH0F1}7-bI~u;uAEjm5 zKmYzXJ$@nay&nI3$I9dQR%h0?%T6Vpf9Qy@z`2_sXa+X1z69C$&hkhRohqCL%1xdN z;%=vk6i%6o^DvR^_>eylGSygfak}^?4%9cX!}Se|Z!NiuVj|z0rlEo8Ek@-%|GTNn(fnifz8#OIpKuWmzzp`E?g)P|DPH|KScI%D;+W z90V=~Pef2h4aklMx`zF3pua#XjbU4v&E6(KG!lI2?p?o`N;<61vTWbe)y_> z+HBMhPY!k(_2%o-{rb_Ksv*t=F9E#(IKuXTAbx=tOeOmonVNosD_aygP3}A548&y- zhD}~zwrSH2*@07IW33QCo2b_4u}xVs=&M8@mI>|-rLx688HsBF)zTe~O;T|DE11Lp zdVwj~^qqzMVUw-OlpkCOIKUa^W~WMOccOy%w_H>M-=1sxQR*sT!8dk_f(||Clso}F zCQw`9mF#8jMC?az+)LifSiE5u?mZyI=BCP*NoKFqF6Kw=j9%vHcFp4rYE#%P zENxT1X0S3Qs|CS8rKGoPJ(J#cRVh<>G{9MIDyPqi=ZcaNg8)w`azWNius!-^51xwj@36?7_9SXnED;B$pu%RfWhCw zHK3LoxQ6=5lou@Qo8xR`RiMUBV}G})5#Dex zzsYWP!7_TsGhrFa!xp`{DNhll@9t2f*kHvE^(lDpzYsnE*&=`2*ls1O!Oe2F@j71| zQtLpNi$lxek$1Kh)*XEW0zA8vo#x|a4L7H8oDe|=vxXF&r_cT}8IQS)Fq=B9UIxOi zfNJ7y0a=MUdYlTl;9!yG5KoGf72MYCj3^>5u#}H*1#puIbHSiO|TrXlW2!+r|o=o-#(3{=U7EBBZKY|7&6uo0I2hsjD1LxV5O@Yf7+4|50-G8vjvA9! zeRVv=`LX0ER88ecHv#oTXID)qE8cBR@0GXF`5}2LH$7 z|K^x~%LmQt*63$OF;ylyCwOxFCvq*Xt!L*S$&?Wu`YHaiGNr4(fStg+qSp?}k1qH8 zbcgi@jai!dgWZgKi>d7{1Uus%4(-^FzHjw@Mo1*LMDBa$A$GmW+upqU9`TzL7%TCx zw>KT!ltRpBCk%|$P|qQf9*B(*u^fo5xL-E;Gt&N1qy7f&P51BN&e>l}sx!LB?qA;w zM=lo>DyrLxo3)Gg9f>p)WpkADE-E%@IcCqQM6N>?bCqm=9{DQ-DY!v*6CW){>2N_&tM6$7N0k}yS9_2lGN#t zC4r_YEzbNUJmwMWB};FS<%49iPIw)GW~7-efRtFKc7RN95NU*iv&#^7M%xJLma{NU zeXGk*Y~A^T`7_0ACp>0e;T4|?`3kjbn*btP9~e-rvd)a>5A(|LTQ$Cml(`Eyvm>Mf z{lmS7fAnxX&s!JrlHotrJX*ROYYKPKIQ(G2tw~okvvzBc5_F5>STOd)H30~_Nntdl za{%JMML2SPod77H-y&(=ycr+~5`8S+2t9!Yt}@9AwKBpX?g*Rb0{~f)OgwRHuw?n* zP|~iElhUfEOcIExIU=GX^1rDG|FwGEe+Y|Vk%` ziPf{*b$+HPZltVGYmx`3Zvy zm;x!+Ajs%3$#a1faM?X^i``)IJKalg0bl;b5F&q^s4Ce?^)+oKzjX^%S3vN!{g{Vn zC1voE!ywOxMOgYxC5R!TP6FshJwdn$$6_x{dARmZD}ZaOx8O1|S{As&aRNkQl>(f| zydlgP5DNm>v2qEaEw+THmiyGXsE&@Dyt0m)+_zqep}>wxu`ikBqDv`?J^V`qS3$jW zu69YEga+d;scn3z20ObI!FSjoVjVqfiP@UQ7N> zi8|n#raE(e_U&nd>L=LVtD=wQhBdlEzIO@;Cz=H&RCEW@fuA2FNK*iKaD4Q}LA1c< z2PnE^4n<6~T)WeOe!FwllrH#7eJLDAt>&7YA2+nf5qvZ-vWqpmmaA; z+5hIV|G~V*aD~JDBX0FmEPy2q1GAY(TW@iiVgt+z=wEcccHugN%W#PvbmV+SdQRNM z*T~Yq_%fPh{)KJWp1j|vtqK|&Vw-QT>3f9i(2sEMqrQbiHNbpoRXa3r8yKovr01F} zH!__N6hTdXD?VXdo1fKW-5-x_OA7?JS&NSDOqRsX=;Q|?B8Zgt-A*s)7A%!$<5`|nJQ^im@D6=;%xc%sGQmP5;f|9CM^Ts z&UAqlOBziXV6~~sz@9L`IcBiB;#MMwqIRB7Fa1xT!2J3j>PM_cxql_k&t(5EYn4CC z>3=Bv`23Up_gnA>^uMe}*J^`yt8|k-mkJ0UBD6nI07K&yKBrMq^bFGjY%)$^^#{*- zX~TS%j9TWet>HUlwdl|L5~>XJTf>1l84kuR@o7=%#ZP?HRWQaHy~I_6uQDT@FA^(D z*zBCm^;e4XB)_&Md~zO0I%+e%ZK3yEUCq;o%p%r^z`o#Y0(OfzIDWG}TP60bQhoSw zsXqMJ`MBjNGxLt2lhUu8(~5DA>5)ml)4ZkfCFd=D5Ui0V{mQ-x_^W+|Lltj2i&3=M z-?Eu&Flw26G&xOBYHoxQ3b+TTMNUy&4z_qV0VrpHtipZRis`!S;hBFGb&XJf5@!2v zY_zO-{Jz^6Up+?T1q;Q#SYBVo|8Jfx;JJS*#Mc2A11d5Q{T?=M4fk*J3F|xQeHwJrM!_%fiR5g+5PM&>b{a%hr z@-KhUuLT;I`!4Ph;Znyp8|%g1_F13{PFF4V(&y6?d|eWvCgefx7r1-6SB&BmgA*C-QOG)bz^5J}yiF zKEmxN2oSb}00vGq1}}Aa5bV-1OT4-e!0{c6_lUnx(~|cZMC@d+b>f9t_1~r<6lpWA zSaDY?V=;cJC0WqPdjtZ0a`!vHl^q6BSfUl=N0vHwNS&07ZhKlV3F{rzuie&~T~nc? z%WTT*s9YWd!sU+jS0G5XDMzR;;EQj}`cnviKPjq{!KBaGCO~(BSW&6s%uFfwqcrjM zHXfp^Lw{x6-vF|tBJBAkOr9EBu$N_oOgTkDObdPiHcC2Uo>B0|qmyix2g{5|+f{ z^-swS>8G>!4Mv*TGh{YJZU-YOMO*dCFr2a0fG;zJauUky+A z6jFihp)IzDjU^Z$p2^*;uUOGGH4a$RKiDqtVK#v(_JEQ(nfI$nhi`WX_vh+tI%oIT z{p*{h$L}qd7?%lwC3j)7`Re%eVCQHL!NWm27Z~m$Y4Q>3L40@cmYhm5`Hss@@WDAf zJiw=_I8_*)xw zIeAbu<%VH}Tf0F>{>#QT+Ka|vRcbaSW7iP98=M5>Yuo1^zA^oE(nVLYDLI`omf*Q;O&Q8pC`)j+xqmh;9L8X-e41VD8wvjE^7tW|3UV0|T1yXMiE zrm2A=uh@X9bx(Ijt;y75AfYj8?L)rrk5?#ehN%7$2?}a>#P2y$Ga5q zNyu*D9;oPCwzJt-*+Z;$K#DPR-*<%1atlE2p3@fbYB22azVaq-?V>rZI3oZM)qU-4 zhaoLYusCERKqYCy2xcTYeQ8R-n+_6ESWt8io2HJk0Yv5in~B>u)F27MKhn+6&! z#V!24gnnVq=+F*>>j|j1jr-M3JA=N2Qd|rY*VmWKDeNKyv9`GWvdS_E z?uE7Jz5ve~mm+}5lwp1ss=XN!aovOfD7;cJq#~KpMwknf#*d06zQ_ZW(_ph}KwBzl z)8DSG%*R$^+iY&?IbqQ}D|;ht;N*~%J`PZbxflUzki5FkL@Yg+!W*k7{V#oQivI6X z*njZIssC5K|N9*NzfbpnKbZ700n9P~i2IW~cZgJP%WcN0cYtS||DcZN{J$H|Uwrca z&YZi4Xn;K^I3THWc4N`JPEb<4kE(D6(~3ERHjl*K&)ExsAnHo$qke;@@sn(zYXY0-@)kB{77PRFi&c}(g^)r z$>lKC?&h36$#Cu7JSrg?k>wSRBOhvrYoN!d?AXMB>PP2?&6Azeox`)*5j<%GQ zhHj^$>Nmdq?oOkYC)VN-k87Ju66Lcp<+y^=ivUEI0u(KM_2@Z3Q@^a`aDKIav;$uD zsP8O_*80S>aPdmVOPyAf&duz*9H{oXSAUJ#d<6#DJwTqYrp+|If3)8~&DkKOo7PTt zClZ^~UaSSo<%&#`H#fcen*FSq5^aWfV56sZtK}loaLwkjTQH6M5dGN9b(5pAXYuqf zG*{P*K4khqy~hlLh0w`k0?}0CEvTnBk0Tinay}}?v>f1gxwNg6I;x*FSOUkUUDq)} z!T0E=riafz$ML2Awew5N1;zHwfBxW4VKU$}6P@DqHQ7vT6`pZU>nC-vWu;l&tM4Aj ztnvURt3$ZOPimH9QZ@@$h)qc6@tCkSCa*SGXKpp+XFt#2X2%wfwJc6XvTXE$80hgW z-+#(|%6qJ}!esh()DCT@{jK7Vsf!-+Ccw>o>)SEGe_FTY3%y5lg z1?JKJrNHd?UPFbdD*r%jhW@{?zE;rx*PegM{}Vr{72c%2Sawr7Q-jT2o;gKkjVRpfDYtI;b}!qDfh0N$PJBb5;k`&Ngp32?+`qp zZYngQzR#S+gKK1@Sbl_bq1=!HJ$`?$e$=2M&jNJR+2Jd(x~)q7k_G^g)!S(kY}#6m z7sx5WvzGl^m0b?@(VySK!h3;SnHYs2i?A}>#1@p ztw)pSqGZ$v5xD+@HaHq01r1JyaFuAkpeLL#td(i0^$0P3mR1b9Be6`4*?L+%<;)LC$>YP&^=?|{(M5PBm3_!>7*gTv1JCHixABp4m0v~a@?t-F7aSf|7JfC!jI(GT>(Vy%6 zjvbalQ|vT4kpYE>9oqfFA67T`4zF_!O%1f{3}DJ9{g`h^!UQ|rwh|u|ydH(1TtJwf z?LcCT6Qdy3JOFVZn&=duJpG+21(s&)5wuAgXyvhx;3Hzd04F9Y0-15*9pElMi~%fz zfkUQ*KPJYptUtrhX{-!_WoUzuB)@Bh4@8Hx9984$?saK-S{uGA8t_P5Q= zzp+Phk&3wtAY^ia)VecIS1d3&{%&qM0$ItjrIoBQuWI}a+#zuJtjQmccPO<4c?ePM z#g>MwREk-tu)Te1I)egp=zkL7B$4b<(Lb~FzqMx@&(?DG-}Pr3>!0F(W=!3KJf>Eb zxvUL);W`6kzM9Vn{6RXQ8g2=q>IIro4X=>BSR;|v*UZl4fVYm;F;?gh@JTPE7H((U zCK~I{%wE!F)0d`pnyAAAdk4Mil#u+W8$CBt<^yz_fs_s}fx2jpa9?2rusjEX9Qk$Y7c>Bk_YqFFOK= z^@HYncNNrmODg=)VTfogZqY&NAiS% zYBYeoKsKHOYeCdPU?m9F1!4h+o52lpM#|};!Lbt_EgO{aoD&o)O9%6OZGF=g2j&R; zrhxX0<+A6e%cRee%}M7mcxysZHuDUyydQ%?EuErS91CMJ2hH+G#6o40GOda&J#;Gj z@6{VS`=~c3rQ$_Cet&%W*PYYj^P|1y+4-9{;!L0+A26+i$LWU$#FmH;D?E@9+%i{i!vyieQs2E?o*@-i#&$9vuFgCyGyma4Aea#(b{i*BVf8Xx zLrNqtH1XVzS|U9CUr>OACZcJh09`UuJ*{mzJA7+yLdmrw7baKXHM-}l#ornJa~@U3 z^f^mH>h5w*WSdzK)iLRDuyrd@(vThv7a1s4p`m>B3#n#4S0+ta5*drrFl6T%Y^cKv zex=pB=YL#Z@a``3ot6j0pR1ZI`bQ8k)MSlZ6=dv6 z;!NUJI(ETYVdx8v8m`*5Wvkf;2gny0%#m?crx`*z0_*mNI$}?Gm3O&_bB5597J#$k zh1+?pWG&2#Di_JuLic$|gu1Q%+=fsIFQO)s3!A|X9153x+25fL4Ej*b#qbWbJXI4= zu4_rCWG`o0jYo8k zJpU`R7I0hIwqI>-{?mS%i(}IXS0Spjw`)!NvP-?BOBLE|HFe4xPeKXp`00bersaSG zI)SIWw01phZrXF9)c=JR!C(y?E(9l5kRAFw?CTiTc*0E+kMT51`+1U^`Z?()0b)gc zpeVQOK%PjZidrZQctjQE<`wWvsKT8i83Pnbw2qQq%Hcl%WX}c&dhc0yzgKdp zNk2sb^HBjs%Q~tjDL}_fSh6#qc@DR$cd}?u$d)JO5NuNgLRDaX{%eKdmk9$4UPJ-c zzW)92OJCv6L5!IzJqtj9H5s6UgTw6xTQYf+0+I9sBlJ7 zE3qwCQe1pas=~7?L7peordabuOmM3~}F5C(cPg}K1A=CpN z>Q)G0&F5NtNTPl7O)(bCIg@O3FoMByv0x<)5ZU#hXj$WiEPs#~Av*9sog)=pcYH4s z-7NjF`KKBg%RaOHSdS4MLQ)$ zn&|?Vql6U29e-HAMRh9)ge2LpBWCp4#rKES*R@#V0w4fzi&g6@-IwA%s)|p1o=Qe4xllehk@t-x`}av zE@khKgyqbw>`l}vC{EKyq8L6HxLFHuK5o&i&YhrSu*B0Zzz>x=Bnbh|$;-HXic3%5 z)>#Fqan3cmCPLgJC?qDpMN>yq5hijv(dTRG=O%3a`PCxT=uaH;0LW;0{kEVc`ONV3V9~5sh*yM0c7pZ zj}!azED&f)mb?Mrrf6R9O6JaiB`sHxntP6BYe;!Np;@^CGp~gA144#_#*cXtSNwYt zg}~9@e~Tm}pi5_ddZTj!%t_9iVtH~}-`mGz)aOH$0NpzC%R(}0xHEn=RY)+*>DdN8 zqWB+TI7Jj^aP@;18Ov~%iKVjBsVOpHj>1TUbA*E#(~Rt#zB$wQF9MzyEluL>-(nMvV z7JFUF=>_7$oFo&O18Luzu+S&GBvK5yf^pVEHgo)5O*^*qEB2q$|IHU)@XdAm@0$I0 zmdu&5o38Psh5yPWpp{uu-pAdf_?K4^STUjF30h%^-sRP+4+oXoXp~3g%bYAivBlCO zP7%HJ4g z7P?KO!=q{1(FDFKeY1v}TEo%U$(Iod9`!r=SBf$5$~+0)nKU;C_1BH&@oV1OIowHc zn@xnQfo1{~UhkhG-`3&I?&-0TAWMNsNEKe2Yxu;OB*=~$*S%jQmv9qxk|8p%cj#8 zgaF;ek$O-R2_gdpSm0kjURAZ~y8ERMZJ?XG?CMF??{?@1=R_t$0MpwPR-{bfyPN18? z>O^G)Ql0$>!txfoa6m-AoK1ZNU-}fIi{f^`zp6g@gALR4>$BZBE`~LBM^#w2UFK=S-5#x8OUP&0yf4cIc#xL`)_{;C=TeNV1 zj9n>Eod|%CkpeM{KoGhT6qOia5Qdiqf<$$OAQ~PIK_Z48PAVu8arAJK!3`t|kCYyc zMETFHnWm0EbW-Bz;rK&g#L*+a zdsJU9phj*7sm>pS;iWi;5kn8M80N*zh<>OzFN6`|A(X8Q15g|u4x0!V9uI|4nNP{; zAszyzIvy!KgcuS0!O2Z^Th497@yzjuBWM&J=}s#Q7KMkUhntibJRE;0LF4El^25zY z++<@bHzak7*Hle2E(h&v;qgz z$-$|-kU6RheFT{(eB7?1C@GvMe8@R|TsrqL^l`h7$45X_o-dU!9*9FM29BREN95`Y zoYR%k#}PSZz9_;Sojsh0`SKbIC?gcsxvNf}fPXxkD10*XaiAjb$sFTaH8T_{7o2%O9nTlOEN_74VM-Reisp!V=QQ4J`tn z41F9*F>rGD2&js1$UWpA9ZtOb5jemn2d6Us5Dw`R!jaDrAFAUc z{NrA?h(+O(p$`BG%m{ok^ienw_;AJ?o&D%4uP+csMkAmy@WG{NqnwA)M;;A^Rx*=!l#MsyZ&hQTl{%qVTc& z1N3gN`yD6IB3=Jar_g)iNYsCA3zg;5%^^2qi`bd;l#_jaG1ocFCJ4o z|Hz04CkmgGJ_<*ESEi4bKYm>Dp*oy^e>|w_^4aP?3crr6|Y7z8u`=buc!-~L*?B)4O!8s9D885=}{1w8A!z-nihb13k@JjhBgcXHX zz+Vc>L5#pF;I9x?9A0^P0ipnn!7EQMg%yJrnZn5&hf$pVMI%mzzhrcg@;=qS+|U#d zepja#rZMDu#Y^Buz{>KMVi%=grdXf4?yaZ^>7*qc8c;Q17Uck() zM}_4eM&K3jR|qQ(uROhEfYtR0&SSt|9xnk`eT-y^fL;nNlE26lWw2uC#bFj;33f4K z%?zyHwLdfy%bgqUYtph6FNry z9VNdgajg8x!HUBxL$3g0b$U_Y7sd#PQFvwfOQ6KbFJhIamm6lp80Gxv(a{eAE(%tT zUJhJkSY$8HUxJPjD`MZq00aICVMWX%S+$5)9K8t3)63(94^emln&VZ4|E{8xR9WQu@Zfa12uC|KbhS2!*=UO_GrKjFGkcyaWTowEopntmePO5sJ}rxGrN=ZF_aKfue) zuZI_jA6IS>zgYTVdQ0&Gyg2*{{3nnU;|P9Mtt~fRC1E6fCG>MBM&VaNKZO^AAK5RQ zUmd9%es%l^FPz^HUL<}Q`gwTrAqu|?{X%$g_+|M|;W?-=_+{l^2rm-968ZtE0FJ`1 zgnkMy3O_PTAYUA2vFn$|h#ddPNC__zzdZdEp8SrWUrzq{@ydr7cm@9RAY=3c>~1CW zlfg#PFT4LLat_6)@#gt209hFxxi95E9i|h0V3|00p8s<2BKVK^rTiDdlh0B3rS!|e zi^DJAKM&7+h`}%5KL&#g$v{0<@nFT zi<)0dM=5>+H448x{rsro@GI~i;JG2k;8);34=)nG68briQTUb6PvOPjNA?Tn*HJEV z|K;|Z?jLTL3M^{<0$zrG9zXd|oqmKDu8$C29Q^<>SicI-L5;yL%YPxfNc>9Z2dDx# z3cnKiDZD8B$S_&@>5wDk9~m$=zaCyBetG&SJoz0#KTK~aet;K;UxEJwQuO)-0gL## zA;*k2yZr&aXViEt{}tiI z;pg}-gy%lT;OF?y!5}B==SciY=m&TLG77&E`YF69{5ZuT|8$Iguu<|4!1&(;c#-(! z>8FUs($CAk+<5V49DW7<6G(CLkHjnRpNAKTUkUvj$O!(!0lhfC3NHpfj5x!8fE0+p z>i7{}h+haV62A=nJUsajgyYD~DO^`c3se86bzLA4IT5j2F{Uil0D@gO^($0irSR3j7xgISyVCKZjxzyb}63 z6yxBP;wK<0!z1^l{HMeG5cwzYJbpQN5$l8SQu>AP*gd_1Qp&tMX>?r(7=%?_a@Z$_S`KRO6-*NgMrB%BB=HNx*m#1FmC#S&Md3#V4CJ4~ zEK>iY`!XZ{LU@t*<>?2IqD;ooFDL&ze)1t=J~-e4{S?Kh`OV2c#ZTeI(GLL2@Dq?x zEqDZz3eBk?2situ9Sr}&Y6rSRhL6aLG=bAMKx zU%^l0p95egL;sA#uY`VpCm^HnE1{pli^7j%&d!GpR(K}@Kfue)uZI_jU!HynPku+? zm#3eH7l&Vg{{T-xR+fL93zdHk0Qt|ui^Q*lehy>|{Y3vO;wK=h!{d-c{tE%e&`(Gh z@N)<+hJJvTp`V8*AEL&a;lB`G9DcyCFkS~W2EVNQQ%LT26uc7p0iJ-2gBQvdhncRD z2zX?eEd3N@r2L~gl*7-%i<)0dM=5@>^i%yWz{v_Ld=rOXf&TPBKX_c~i>HHSqRi~feXZbG&PyUR;&(g05FAhJ)e<3{gIR-z+ ze+~vGLqA92S3*C)6Od8(mC#S&Md8OOmi4P+^n(>%jKB}@a{Lznj)Iq`pTd*haqvp< z1H3r;75Gme=@O2?ufTsEUL<}c^m8Di@XPa`0+Zj>;gS79{sWjm3dX?;=Qo5GLqD=} zDSiSt3cn2fJbw5PhhLWe6rO_`gI|{aLU@t*mC#QHi;0fHuY`UIFA6_0U?Be-X0hux z)&D%@^n(c2i1A`NO7Rn@aqx2MBS16;UV;Ar&kZ>aUJ*ZsVidd*`Z*Ni;FaPhAS=To z_oe*j$mT_096XO-4qn9iAbu(RLU{5y3cqyy=HSKQ7x15l=RU;X7sx*c#`1F{ekJq+ zV1XTlUkUvbUKDiV4h+haVW`4=erT9hCkMK(I z6B5SI4-kX(tK)T}j)Pak&q0lXS3*A-Y>fWL)lot}g%>ryWSA`d9P#4t;{;ED7l~h< zer_^i@ypZC!;8bOz<)X!k^4vL|5Y&lcbxtVa9R21;o(D!d=`L(`E^jSJ|2CM^gG>) zN1uKA`7F5`C&T{A+reNoUg`GRz1vP=|GFJ_d)@KgPZ$d_ws6NYV8HHzPk3zyy+!< z^BTO->UWY68nNA8cQhV$-`cg%qudFIU8Jz-?xT|Iq0^N{wP^A-zCFQ zchEO$%d5+#c9tXr(Q3B`*Eg;HeYbyUF1kIm-`}ktozshmZ}Vtn#WXOktE9yt3X-ichT0vOo7VWs;NMPiGfdho5aMe#za1q;*HC*f zOtMSHbo-+*KrItPU14TxQseF4SUSzI{yRy#_pa58UHzZQI-k1!S66fEf9=J~7oXPu zZy{2^yWnL%!Nx3o$j=H^At9#n1hQn+d`F2ePRw7HAuGno*wjaDh>?~yju$G@7v#!Z zLSmA9*sJdze7AEjMLL8n3QKr=f0H!F!&Y}ZS_ug0*Re4mNLC_+@P3Oqp4P`4>z^a+ zG`s!gO|R8XnisA1crd)LAP%_8Pg(!Z);6By*8g+7@oD`}o41F02Ifo`Yi*aC|LVq~ z+xQ3O;1-+RE;jA%px45O;oDZPhs}UXukhl_Mbj9(?Y2hdtbO$!8+4yK~;MPz#dY|;5{v;ew#J(rqq$JE zYtU?4!vFbdFurbed&_v41TEKe8b6-Y_nP}hCkH#b_2%oH-Ny0hkImI*J13`@)t4&a zGCI=9Npt_Kx!>uto&Tv6&(LO!g`Jph% zom1#~3ng$~?;k(|JcN4blrA@>a;$VLUQtuY?eVGC79KtNl_EVi*y^Mk-Cm@mbK}o$ z6mv~z(gPL!z>i8ONSw#XHN^Kg*)lpMjkI0;==`wRINgD|eDtPyvU9p~cvd@F)OI@y zX4}r9C&lhgqgGD5#iIrD$e2z3y19MZ>$a!O{i9zVX`{_YXfF_2!6PH z8}zVW?A2fIAK^HWTV=ZkJ7;Ij!}{T?`Y9gnHx^A3FxAjtz~vmtyFs^u6VS~~@7~nx zADzxH8I2Yc6}0(9x*sOv+hO1IllQfjYthJ$C>_dmlSB9#ug>Ua(Tv8O&COBwA0V*l z=evdcvUv5O7?^L2?Hr$Y`dQi*+&xNPo6kRo!r1>B2Qc{w8(9cAUXQzNNV3s*t9^x| z_S5YeA1#qXW< zx8I|X^5{(E!!4o7>~&@=XqBw_IiAI}WEV@eIng3j`7OcNn-{~ub@Mv8ehZbZsu^&){=c@dw)#A$|8G2h{_K|#IoP@Ek1cP3~iq4f3X@u5>SCfhVin-6a4^e$XBQ}~+ZTggZ@@#keG^B#WOxnzhJ5%QU-n^wA708?c4Xdn zdp+|ufh}7OtUWwQMq^?pI`r_CMj_+WD>Jw-1vx^qAk^(#QxBT3E|Y$O;lR7V(V792 zEr)`d1Yjb#ZrydSZ?7RVb_X2{LmFZosiA&k+O0k`qE?6S#AFZV!>(nZ-lNq$bZUUd z`McG7-?}Hbar;Wfl-%(+ZowDOCpcL7N9dQ-bIroh!((y@?*I`1rJ(G>0MapU?+sXG zIP7*vYoI_#_Pp0o>b3e~fIV#eOyLFzN9^Q~fY$D1m`^YQOv<7N4p?E#XmC4h3plzc z;FGu=vJ0$Pv7yk<0uLVDEaFn>k6>&82i`-v00m5j_vHY`zrcVo2Fj*!JN&uT?~Zt) z4Mk8vp70nh$8LZ4R1I`;Lu1xfosy`Wy#uQc*iJbZOhdt2ErARO7SP(dkyW)oqMIx zH+OxUA#G#6uxWIy*3wq_CO8!0g$CV9inPUd(8u}khR!p%)!sww%A!LnPBXU#Yb>z} z|LOjBJB@mCw{hCU;k0J{v1s~>rqdd?%mOjV{rn{Qe?S3$ZjfWL)$aj;f>9|08$b#~ z-!IZ53nqJR0W=(l?{G#nM&BpAltkHgQxx=#v~PY&--qca;z!?Kc}kCA-ed)fMDUdw zz4#sHwE=Q0-S)3r!=JgPtYyoZRdUQY-G}0YFae6^fD8T-ZV@i`Ve7q69?N|>S(dLj z5yA(9TUthMmU_v%qz55qcNEhf42fd<-O}H0TfM-v3YjMn2xH{7Te8EPh z{aj`|=`0Znq!WDC!|n*=s>}eT)84*H+CR(Q^d3TsU8M7bjkxs=y8*a@T8U?k*<@c7 zdDX!N3W@rDF#LI`H5}lS&duoHwhi^WKOXcaOir-!&(n#5YBWq}LF@?0H=TXYliuo1 zTRJ0devE%!N@G7ii`8B`ck{XZ=oi{`xIpU?r?S+&SQ_-PP`e!%;o)rP*+uK8P)*X) z7OtHs50G@^EC|z^aoJ2A9XB{zc8mX5^OfC^kB*zWKm4$^*8C3J@Xp@;ZnIH8gz>*o zKT8c=ej>29HT<&kYG(7cKYd!$mhCO*Ziywh+duq5q=5H*od=)M@A>+)j<@h8UN~Pz z%k2rwg+rhXLfR^FRLYtHY8y;Trf_B`>=Iy)oV|W?(@J;comY7cyYlLGBH!}Pw@D8> zI0bvRk3$fo@;{)<%Ca;A^>K}$<-zwp?7o9M)&8hDGL(dRD|y#o4{{0G=IHKuHc=bs*Gg;{~YANDVX}NSkUb&2%Z6y$)1%p&>s=+ z1??N^7=duBxA;+a78W1qS-_1<1WU_mJhR19x!^ez>rw+U5PM&LY|i`LzuzYNdoVt) zVoH@ldA)-^gdt)I+7L{e!aOM$V-bRUpmG0mRhv3B)i(Uvzzhol56sss6)m{iK2TEoX^7I<{XC zR&8?=P7+g7x5a{4T`(yF)I2b_JyJIWI@_+@EucTMASx-v16BY%BakIrQ^Udgray^v zu^iCY155SRNl;}BfQq-En<-=*!Vn(Uk@KhBMA;07fG_C66XNzXGHH}qsw+eOKgVjF)k{x<|TpccIacUgb%(`=f(Ia}aYnRgG6W@Z}*Db*8 zQ3YNZ`rXt=mea`c7*`Y-lf=bV${bIy+tGQygKY+;oEz*j(BAZWwONFVX0n%HOKYjSUQD6@L z&***YhGx#_p-uPyAU16EMb7`Tw*Kss|0kN>RbE_?xb7g5>wjJR_u2P5CsTqu{bQ=S z4IJ{~qrTljnHBKu+W8pKf1v=KWBuzvX{8ERW!rN7znpUa1CR6Te|7EUXXbep%*Xlb z|M>ln`R50eoy6{8vj1WRN)Maw=4#fDHHp zgPR40r9uS?yvA%^|4|gi7Pw z4ZniD6eZqT`nW##heFKd?)N9d!B=n;{Qb5ICIy3ePX*qD3C%k&XvHw2o1`t~HW`N? zsE3^Ik5B))b9#J!vb+rT|V*acvb@W)^uj9gow z?FCLu815usS(}{J&uGRuel3<9iSx9l`sodQ2chfDe;M?;*hmk`V$0G-nK8XOK0Vku z+Jm*IY*e^d3CobP3Z+J&*Xbw)iF_b%DK^etWEu7{DRkmqRg3g zVTuY-YIf0S*q{1>X!c6IQ0PxBSk`V~LHqHh4k*{Ke4N?WYdO5GT6CresR&s*m7r%! zANE>#Ft4+HPMCmfqY8)_=W+SP1h#eXB0Y7=BEd=fbKvKmq!N~#G+9&TLG}n|aG%D>3+BK7+sb|C zM96Z)Y@NvcPoTEbwRm<7j zRm6w8h{HQa!V=7labkAPjy-jZ-?uCis~AJ+6Hj9l1Mf)+HG>brZR^zTu=7wDy)JCqD>SEO z01s>nVTrYciXb!yjn`>ZN1$*|X=*L$azRO3nkTiVHy8cpc%cT5kG;&|dN=X}ilg|G zpc}&H3LW=rSoO=u{<_kXI!!M(p};)2z!bw05bVm4B_iq}Fx+~Li$MQcG)GAfZev*@ z&G$nDTqZ-A(@CpDu$6r>fwG2tD5)|Di74*rRIRp(Vj76#^u=JeOj(NEr)yO~LGu*` zBopd3Eded#`>lD_(*(vSAlQCa_^JeF>(#X~YcgkiY>`1aJBc=7gm(2)ujaD#n)?Kz zRb>KyKro(VR8FWX*e-JD`#rtJ2gyZB;X&<`HCvAj5hax8hN6tt! zc*)_g<+0i>NWE-Grl&`+5d>!rg@$kez)5Fy{|LJV-SG>^3!7s2KIslSG7@Yio@wnz zD-PX+2rH95%`G|dY|9i)l!j^FA9gw|-ODR(-iV!$04UOZ)AU;ZxNrK%h*TB?-t(;B zor8HH75%)-KVI2ui4=cusWp4XQMIM=P(?v%oH}%`j5OZ_LTT&$?{< zL0tL!HCKsc*eu~6bg@VeTo?-hvrE)RdR&=9*^A+gk49@tHD$W|Z{KSwBlNmOleeC6 z#ti2q|8n^El=%vq6+eIM*(~;$ev^v8^t<%af>rocPyHRRDRbpb=F?m<1l_(EK*F>H zFyDUsgZ2MVd#Gpqi3Si^LYs41OG1m3kI$KxzIZ|JXzQ{_triSC#6wK5Uoe3_V79+8 zYx7zzP8U_^ib3`D&hT=S!km9E^O7Uj8%pd4r>6F_%BfBi7D37${TcF=ZW5<~TrM7X ze(RAv`A8#s*o6YB_{sVWrn|Aax%qU0WX&D#&%WJ%O>d69M^why@Ta)Y#8fiFnnSjY zcc!{fJK`8_f!7ALS|vy=K_s>7y1A8 z>J21uE2JhnJAeIp|A%}YKs}dP72V}Qt^y%@q?k7?TJ^UWN05DMV*bC}F=xi8PH^L^ zKo_^A{0l>JA7)|C3FQOif13MoMqe}J|N4vdeEwI+|4;G%GpPD7k3Y%(8JXpO|MI_7 z&Si6m#7RmQx4DHInA{r#_h)bR1^eL@7E+c&8wC=mdhZKIzlVgTo)X$ph&v)J&;|j{glxvMMUh=#3 zmJ6wG^~y82W0Ji`L{o4apKLSGzGrYF194Cqsh^B$$0tsh-YuH+k9!1wlmoFTpt4|^ zV>ag-uM(yj0U#t6L8iYR6OtU;O#3HtJs>f)1nJR`0HtN@g#lI%!VM9Zk$-_H-v|t8 zF5V)q1FqIH72LgMRzd(uw`1Q-VE5NV%E(vGJX{i=&pvBU?|A9s>AmE410c!I#@vL6 zgGSF8C@ByLppg4Pc%`q+kzpm%I_wjnCDQt6uq62>(vVC`_UzENA89t~M$9lZE5v>>jBY=n}KZq-&oe_uA(OUi$og!Td?XWfAmJGoRn#PsYLUucv4P($qj3 z#5N#^Cx~dAfc1n)&$#1cNY;N!zX~I)_%C+j0{W7Zsp+yrN)Xbt=A#6Z=;Yf2zVzv0 zHld5ekx;2A#_wMoDYN`tyITaYzD8nmDSS}AG6Wf@Yv(kZN8voWgLFQQhK9H^Q!QV3Q^z;AP^R<`x{2%MKqVlY-N&t z{Xr^4jIO#DNC%p+Ur$8hXW?BkNl3NK0D z-PziB`R>_33u+gA4}4~Cm`#Sx6XN8jn)`SxMLNqn7)TkP;xitzgK8LZh%fIa*V5Ww z=4yK_nO+Oo9A>}k(=W{3)L&*Rf5VmC$W(64PnK)sFZ(DghE10)f7a8J!0InpTemb# zh-+fjUigCvL@~^%VtjHJB$k-#v13p^LJDca809x(rtk&u7IHG#(iX5iu;4=?x!^~) zH#dXfcw~+?u$N{E(!j{kUxJHHDrx_vvAec%w!6N*^8K6jwG|Yv9Kn~y;sYzlZ?m@2 z=j+Qior`TbhEpvXm#xmp(Mu}gG64DgIZl~UzRPKc-Ar{5FCsn$$ z4RC>ekruqNmnUDYHz-IhrU%JlBSkD=ZbK58E{u0N0p<7gU5W}x_A;#@`bI_=-2VSb zOgj$-bV6!~x%(nsOjI)i_leygkBv>vgSH=t z^7?A-WuF<_&399U2yK-tR>DL&*efR{)ON241&P{3F<2Z0NY2CzGNKtTS^}|^rVy5w z{73u2W*1JgZ-@diA^FBOQZ=(aQ7UG?PR;P#@bq$vZ8!kWDWz}zW{KQO?wM~} zqf_z9G%yq8b0C*pC*)OdbDO(rN;iKv&iqA8Oe%IgNXO0~8TG$JRiOmQ@gV{rt(aI@ zGw`F96u*l;3%We^XLkZWM*lv@vcaeir`0!RT~K#hE=frk3C%oB_; zeb3=L<;Apdn7RN^O2p}|&nJ?;<+D7f7je_<+Pn^vn$!TB^mW8b+l2_Y;XGWrmNMi^ zvUv#hMclH(+}fR<3}Mc`wsv)x*$c)gL5iJXfuhnF(VLWqVg9b&WvKakcW*op0y-E6 zbbd6l?>!JQPqO{{b(qdZ3A2C?G~tSQGHp&?+ikIdLX5kRt*y5-V%)Qw2h&tc*zVj8 z=`U#OcAek#io0@JJSaszxYVEVHS(7KR0;xjPm6k=8LEIb-X(7;)}CyJjEpbL|Z{K99~~_R_6hbFYL&MhVyc zfU>=#DoY_V6&{z@toP=Va874e-V64_#xCiirkX6zh>9@`C>dew(D*kuCGw}K%vxMW zDKk!jgM20T4Ba7SH}Ng|s%TN}S(+MZG7n6pzE2_( zWPF`GY9Vs&5^c$X1?x;~lo{xjV*})*ICsbtJ=y?dDLj(gX=OSdiTwRud-mA9gRV#LWRu%LtHQvD4W3Q_b%ulSkvDTGH*H44sd`;GbYlrN9*VuR8twWnL!sGeiDw zJS)im)%A@}@qZKP`H&Bs6tR~}ntR{xK#pTZR0=p{ul%tUmg(NH*LsJ8|IXWC>#B7< znpPtwUmb<=Zod6s#$G@`tRZ3!_IK+?@T09YSC_|kuzka6trcSCtc{{Ofj=(V<*;?) zj5DY^i_yXl#?8w>$u=P^U8V|RA z5KlXYQCh@C%CG1dVlbq?e#NiT@pX?g0*ii5cw51YlNTP~2#&3aCKnqLk#FsRyAL)V zWI}Ti$VH4m6VS4$bF}rQfC+6uu{1;`k0T#uVq}8DjYGTqK2zb$CuSN~4SY-O%_mHJ zYJCYK6i^;>X539DJmNc{wb?Vt$>t`qN|V51^tVO@!;%?z#ht5-?PedbMods1^yZMC zr!y^BYhl@|}zjDDHOELUYsH&Ww z>Tv3?RNX+>zxc#cQ2D3K(CO(On1lRs)KtsD3eFPZpe<^iYI$a1H~~jukp7^3aIwoV zFV=`Y zr{O-Y&(Dx3v3XYixAXeZZoRpCuyc0STtnSC=-$tpt1s4`!7yy?taCJ`F~B8XQNzN; zEdxeZY!v9!#4EO`U+pXJP!(fRcyOU{5A$agxN;OyxYt@nx)^g@06I$Mh1tR7TBpa( z>i;rzxb5@abEI%P&?>C z*63hvUJ!!Tqu++KJ)Jf?FD@0#sO2K8MoDz3^x6H+GDvr2)q*WK+78lwn~rQxmUKAZ3S6&QvOC*D|KaCPWm(! z;Oil*>xi_x8ld{*P3scz%{g1F%OF&|OB6mS2!7|&%UvqW?+>mS?-w*LhJ$NcVY6J6 z`_|n)(4O8VcS&MW$L@xToIA=Pwh@xPf}*={b9S1@|AFv^DGiZfgXW#Uu94dh`Ve)D z=5t${b5N!x>5#A=w5WbZFHe#Gs04iV0af2qB2fNUs{f7)p*RwJs{fvn@S}a2HUDGS zRYo7k1(oL?rv>_dpMSJb2Y_#3%o-Z=+09ok?s3f{c#{3t8C`d8M!oEpzyH7Hn}5cC zQ})JHifh=9!i!O3^ii5vIk;{2__~JY#eYPvt7!BlY zL=d&ReC86dIkSeE@r9I#Av-uedehuHK7VykZ_0PC&yRLlP2vnw%2_>0hD5N%`!nNP zx&ER#-bPaZpBx|j*gUK^zCGSE8-!BQ`6>Je$45H{VLLW$fGpRoyYBVvHCT#KG7V+y*= zFDfV>pYGL9&Du*qBS73Wgu2Z8S)e-%WCQqacwN(Z2#|yhm-29N{Swna{vRf&Zak$U z;oyC9&~GNg;ec0_*&jF;MC2FKzyShEA)-7hoC|-=(Ze~dpBE{SOL+DC2z*gQxO>?LJ7fsD zm*A`GX~f*CA03|_X7MTkblAGXdHk}A%U$3*=mBzwl`ILQ2JVuyZ&}b7i{Eia3F3SE zZ}uB!Ypae47}F~Aj+5tL44Akrrag2-Y$!XE-o5)j*|sHMPfm{yj~n$SNV3y#uo*0! z1Mh%h1fgVeqv+jFLEZIXg_Gmrw3F{C2s*eC+#SKUj=>-+W}g+FM_7lvcsFGLd;4d* zr*(|r-_GI0+y{GG_;xinTqiK4^T*Q5^)npc4mQ#;bhu$6ApT}l?8t78!S2L z&sIN!f9vJTm(M<1UBmxi;OF=FZuQyoeE#qCm#Z&7`G0>4Cc&B(kKs?;Lw*u#&rg}z zmg8M|1k4{1U(7xtq6xQ@-}Mm@_@7u^#ibg?DUS6gsQFMe!p;kolT^%pFDD}Z4hdo7 z20MY)ZjMhyX*V_5Ij}!1Nl*=Lc)Hv1*u~HH8j^y##%&%4i=81ZpIs-|_8YwAhrK4i zh*}Bv3_qFjs+?M`k{)*S0ebA*+5|p0(ErS>3mOd62yBnn$Sc%E%p#z|Kn8tAbv&8v z9S(J5+d_N5dpPfCI%;DJ&_iPY0?<7~aS;OHuYsI3PI1<7n7WJw_k&xcoq*{-N=bvc5AbTSU~ClcU_mk7EI47v1uJSf z#ThM)o6mV92*X8A@>U#`V9;Je|HRcn-vsqHS)vj?m2LEOq3aw>(IbZ~O%+yz<{r-i zgHd2=#$6XQT7(p|m<5bEePncn!STt|x3e*$+4uc3t}&gYh6`fEB0+}u;ox%Ey1oX9 zOQtN1Hq8yrM*=PvP{X4YI4sMiYQ|gE3018tq!60X)&I}l+jq5bEcxU4n^!SO&hd&| zY!JrSA%uG{V254vuppA$J$rt0gd{-MLX!1h%=PB`+JB#_>c^R$(TpB2$u+yzftjA} z>gwvM>gsv`glvU!)Usl)(vK-NC5BRvr3dbk~zpsNuZ~ z#n65%VV1Z}M#-TLd`qvpb)4?-B|a23hhLq+-T*jt?%J}w5Cg-mTZx7@NYAz$J>9`E zOYCfTBfr8Ik{_v*7MwK1e8&u+_;<%RUT;OmC-6BZ_QDL5e?ygHdY}un0y}01H9EmY z&+>uNZ%e}Ec09$WNW6oTF{7uw!BhVFDe=7(_jJ!FqEVa^zu!Q+7Gvs^x8~&d-9NIB zMDz(^&lXwaMH1gxe0MI9Yi#gT8GuN9ft29^-X64Y7-#ToU>NHPB)=K8)n^D%UVrw+ z)S^b8uK~*tl7cM5h%Bq1?cbM~U=zxPV!1?svIvlwVx;Qad%LH1i4!CnmqD&~oRUXn zTO-Q9LDrk*Q`$<`WYmKd8op!D00eN#d<6Z?%vj9VYz@Rz@cG_T_O4*rKxbTK3XTS2 zvVdSi_Ir0LQESw&eZY_jK=534f?9r{Sj`A>9&@7inz-b@*vhJtq$9oYPS+mEqN`C< zzWU-bv05;m8ZD(3d%|dF8ej`by))R<%WRW45RDOQlPG^Uhi`L41$Y)D>~?KO@7tBA zmUN*e{J}5TK_hZOfmeYJeDg3FjaVzw0tBl8_Yja28@^UF{w1v z)Ce2fjBF$&;i<#ep_ZAZhME)_!U>(oa_rbn6#bR!#o3rHK+a9gE(ke5aTf%C4u>2r`=q3Ju|x*)q&>(5E;#otW%J;v zAn+E07@93ZsP4+ws+uTk)l<$N1?dYz+fAM9U@{%U+bj|d(R+QZo4(dnU+aOs6v6_X zY3klKO{9_CULbhhUrew@E8Yg|*k>tidAqibszeH?724~JNVMjigST9#Np~ivtG@@- zCC>sU+m-({XfTlT+E{pd0|u8=*llY71S`-0r{5$&R!Whx0siiwCvxnHEBZ#!fiQ_c z;!im+I-?|k^k0>Q5+HdUU@e%zs^lYtNaDdx8@mbAbV?yxc6o9R=4l4_^4`a0w<)82#Rfe|$dW!p(l*A5sYdv(ET1H4(X54_&;scXW>^jj z(##mMtlfMWSqh0D;#8^9t`HM~;29K^s??pPJ^Am90+u>-cA2OAy0AKJc;yQVTp9pk z3G8@+;FXP)uT+@M7Y6a`N&_FS>&ET)G;=Xv=>c0Nv{(|K9G zXSGBN!0Oz|$eHJYFq;P18M8cYHGMgqEC}$x@;QTA$dz=mj6kW~jspI(q6qcodE)Pl z#NRIxe{ag)IcmIu;j@*L#HHyZWTc)WW{4}Na&CeIA5VdM`BnG$2mz8#%qZ08NHH0g*Gt3q6KiF6Zs0dh0EjfjRqS#+%UN z)HC%!sGOrXh?ojnU=4Keh;e>Lm<&8VqB_}RU19 z&0voeLa4Ypy@6P%Xj*jNR=-5TYyn>Ryr^6TV)2ISq6aP8Ui2nJ&#*wlZc90>0V39< zDZY;Q%3MYPDKN7t-%ba3p0Trj25xcL;NYS21%I4ZF|VpI5G_kdhcPVA}axp zL93*X6=wQhl()w0w*!Dbw$${#vRShq)h}P!tfmcvnG{RKo76L(&C0iW`zNwJ=u4-> zW4@wFJd>-eu!EC-f&3SBZz|^hLk`7pqb{M|rQK4<%O~6aXRZ4DMKb<(eY3j$)&Hk7 zqNn%(LMZcikxz-jNa8LD%@n_>Or7cbpx->3?tcyq4u3A`Xszv$P99*wsTD z_VU9)>^(X2q0df2VrEt(J#8D!)C?`ug`2F-Os*&@L+R{kg zgnMXdc6@U1``*DRd|lsEoDUDr#VfS}uNzdG3cl$fmoaf=Bk@%Na^+D#%wxOO+o_Dy zt@a;ionXc?!NkL|TsydGU!7C4SVJ-XkBeF5#gx@g-t&C^j{E0e*aLqa6XDJ|HH1T1>5KhWu@{Bt?LR=EE2p*kM@J;RT2+5cb zbXY?)&N(Ok(`l6q+{zoy!Y^~Dk(A3PU9HKy{W-<)-ap>{hIqIn_-_WS*6Z{A)br!k zNImAVlPEuF3Qxu{qOt2NjZG1`I6i@YihRKca#{zx0Quv}{%b@&Vzx0tw4!f+j^4Qs zmXRlshlbEM!#L7E&}(c0H_6{PSuLPIxTjqzrDv2$x%g@w1R$YhuX}?IInBT^a1_0G z_UhR>8El5pe!KgAd`lU|k$!~?E_-Zpxw~mMZivt6DsODWqF6G|AY{T>k-g@iK0p~n zuC}V2o?u@h$EHCKezG741pPpz;Ygb-M2L2If+S#2x@rgKLUn0Ql#6L1)buBy)CdU6zRBK;(}QzF|Y3e~|sJvuyk4NRL@B)GE?n)@)gQISu_B1V3m5-ThQ zx~qD-BVCBDN|Drk+%}GG;Oi+PP)~$%1hY|)6#0h_V1m5E>Qw&o2=VFFbvTU$(F2Tz zknc@>IPTI2yQuO9+978)>)C-zPg-g6C=H_VcSuK&;jTK zq!%mj8|>8KavxQzS>UCDu2kj{{NSH`~6suj3~bM?Cl3+%YxC2nG`5~jb|h&eXz2$pAZo!OD=&8@cV}!fM4Y@ zj$5Dl$i_PCQD3q)G={s@)?TWXjI6VFtxhLnxzhLu(fovMViwmj(&+^aorEeCk6&_9 z*|kk!zH#imi(~!P=h|i1DWP+}KDcXlvBXGaM}E$*b90`6@8l9rxq>40-?TuMUUI0U zkJUW^E^%E$Hdy44T>GPI7;edRm5ax;uCOv>s%drQ&I6!pp+&Lw6l!U<>UCi}bct%fq>^VTz@PLja%v9$#U*A6Yy$$!aK z1%U{raUUC-#^wym#H;8J6L`c77c7W+pl!@hQepyJ z(xB8vcT8d4prtnMbtujc?WpN*t^be=2aq7(@E;-6kl=wjP%PKm)H=MBwlv=jX*BEZ z_IkIJ8#_Wkvoz2_-3-#;p2M9uJeS}TAwmwhPS)8s%P&=4^+h!U%*7m@CEB)`RQ z2no(YVf3IBtninBkKi(tg`1r*6cWJ^Eg=)YRiCfE+gDWHovJ<2n_ib@OgKSA0m>7f zoEv(DU}{P#Jzy2#40l~&+GY)yuSV}76*+(cb%B|diPw@W5C}o#9J(|$xC5bz02C)g*X%l^Us#U6s$wU zb7Ea*I4sz{taOQEpo{ataKcw8{vAb9hgbGUL4W){HNIT~lnbd*Ys zIQdAFfs~1$dekEDcxS2ei(_1I#d~`zBw5!!z4&pBO3oqMy*l)MCr4YpXU1{!yTChS zT{IaSzvGVu*RG8i7H4FBL80=RE(6Y4XJB;JKRk{&e{PRJa)N6OrmW1b!}5e5>7Y1(*;(W%Q=ul z?;^tr1ah6zydaJQw!r2VWPG3Xp&ohD+(7TLh>quqCO zt`d_brvNw~)9F!b=2466v9MO~DUnlfQM3`ILYBaP&L+h9v?Ku>)Jb;qf@~%A@pSj; z8Il;S!0SO5- zV3SsA7~?c0^b}^GnL_48C_Dj)CkLJV77_y?Fa;?P)Wj)L6ZxWe4x~(@f-*K<1z!?j0OUgWzE067C>~crPK1~CXxl1X*7DeHm zhBQtlr`~$FNiwA#m4)p9vmrGs+`}9OF?)k4LH~tS-f+6t!`~}szrsLx@n$(X`}O zYw@Rc-208-DmSQ`-1$XidlVEvV9~nu)u}@)B z5R)DT?cx#+&GcQHb32KvyU?U`-{g>@VXCnCBoG-2&q3y^ zStRN>w-o6^ol*p zRMdH3p*q1BDrIGK($xS^4xbJ~)r`*L5!ybB@6=k}N|gR+jS%ivc}J=TCI z*vfY6BGi$)yrVpD1cn0L|M$4wq{a$d`H$?TJu1(_r;6X&-Ms_3bcR)<4X+E_+T&_m z^s@A(vUdT5S4Yn}e|w01^A47EFsdf#Le!2Q!|l% zN8S(S>JAE8j$jy2!r6hcM*~rT$1UK7c5_rtFu;`Qs`akU#* z(Pwon^>p}QFhby3;F8S{fy+b8L#B+SCF>E+DqhlS{Ik$uXS7ValjQm-J6VyNfeVaWzDC{#K6PqD!Om z<%;twdbvatVFO;^fts?&<1_cc4WJcO5n#XwK#T$SJH$!qP#aJ(2H@7mDJ&6Jmy6a zH+(tj((Oh^`3d~2uR3tr;IAc>l{zvd1U&KGT#rc-YJA5fI8>>xV{x8DhAd8DsS{rP z3raOuKOft|E!A`&1%$;)_n;i?9$@E>#G3GSZ~`XC`+|+DbaIANr5nf?G=6sQ-^A3R zZ}<-@>nmJ%lZQ!j=wEhmEeHb*u7A0!lt?6O!6it(B(D}oobe}hmFh^ii#>)!u2{`; zhYpe>!41<<2IKg@kAJ6Ly=U4<4{cp}D!pRi-W(kN8vmj-#u`;2VdpN&s0cg{dX#mH zO_!is_>z!|9c8yeyKBUxHsG3Zy`@Xi4;Mltue?4nl zxBuR5{=B}i@q)C<*N`ESo1UFs=*R>P4mTWJ`73sDT_0RhqBEnqs^mKuAJv}Wt3V$$ zkd=~>)S2sl*ktS1ID^6S4Mjs~DA=UoVFI5h%52N&`7jgXf&)(po_f9ChoOkgw(Q4t z*`ml=PBDw_-|~dlpH(-a$`RacsCq3N_0anfa_1v2ABKY|myE0IQpfgQ0D4Plz_?}$ zbRS&gP!+-9*6Qjt?sxjbXV<;nb*J?VI{7NT9pA2g|1EOsw;QWWxKF8+>gxa0e*E!n zboi!oxk2g-h16KX2)A2RKHgWY?nmurOvFq?{^lSid%pznxa@k=%83hc{&;Oe+IOw3n;M^;mz~I?rQXpN)_wguFkpDzOt6o=ztYH=tp@!N~tvwh8fiCJxJNq1XYW{&W$!p4ymhu?A z=1c<{z(TPpNv~o6=6fN!N!ukqCY*H#riu{~LSs-5KN&-MZCIOeCW&vf;33XV`^(|c zwjo1h?1B2^!{=52_#Hx$+o)9>GHeJ79Jp&EyJ6!D`^rVmKj4pUbyUd-YX>+tj!ixa4- z09epPMv&vThyQa>kq-zMxOni``~=fCq>?+b!ooys`4Cd~?xjKPhPbnAEWWV=%htz0 zdk{5(Q>@vwU*Iji53e8`IztjxY!zY1+;1UKY4n)4wVHQu@!gNi1e9HnB&v1sNJl9x z6_0nE6#u6yK+RGDlH&hL)&E>a1$4xJf35#GuOP?lehRNY69U)%&F(DYO>X>WwYvUd zGadi`y!ti%GXtG-eGFC-Wmor*0+4^T_CHs z6T9H?&EK;d?P0HjI^;l1PCgW8h4>1ba;RJf9Sh&QBcmDgZi=Eru5&1$1|S*9kMM>1 zh9hR`8I&LY8BK$pIEJ9`Ne&9PJ;mOt%AZwsW&-Oap523MS{S?Ho_mZ z7Kxz@j_i34E)H}~Pu?^Hieys5(19S(l&WST;M&yF#FwJ%2FC(#^DAh|Nd8%g@ttZ} zZlGXg&CJ1qt;-FVQED@D$c*;o20c4Lc|*Fgaf^~>4jF8nJ)kV3P&Aw4+YKKx|sA@a8Z?8&iz-pyEJHw^6 z12>Wy7_Z|EFWN$NuS;lb#!lYv;1;oqssqP6 zpZ}1%b*l@iYf?6oCP&!erzqkiv86H2AMgupH>oa;x{sxf(C-h+(y!MRlO+8y*;)gw zzp#Hf? zy@-63{Fk+UoKz|}M<7K5JH`U_bgJuJah?iX-O|9E?s2>J!w&5EQ2F5jRaIRor2mmX za^`fyOGx9RK#9pcEcYK;Ikz_<39RuYGDA(P57RD|C85_a?P1dI*xsB;b_764vJ;q# z)13_QC!sq9tR|^^6?I$-W5?7qt^UwRE(8>-9{+VVYJXp-mob3Wq#Yp*+=Sx zBUYo=t!sEDp`a&=DVVCo_K8ZM*nP^BIT*m8iOegoM^jm3eAt379$BT}LMV5BoZvyc z2z~Pnn z2pF=KmkM@@DYgP#rYu*5JEUAta0b2$bQ&~O74CQpGhbHEVLMLYuA4~tHMk8x95CG! z?og)UbbwAr8AcK9Zkj>@?oAq0)jRqyuA@>iN(Ecqqu<5)U78Q!f~F%ZMman)J;d;b zf=_A_i3*^p5uUHXYvfhCoAsuNlv#lf#{IyY6e;rk6PJ`T9y^QX?FKUfIu8*2r0P!>y726U-j& z!<4#ig(3=Ku=#ciKIP_P51t(JRv5Ox2!md4l-GaIrlpa&FJ=RZkz?zTT6Xx4eM zNu6ll5R~Xh@;6E)E67a0q9cIqVfW!u{1_SM3N~ELpli#h zPg&vlX-Vvk$SFn8XC9k9FzKY1B(Ggvx8gNIgUBX#X((&h>cE*rNnxddDtg(KBP4O+><+^n zZDT}?#djDxey@Zm+Er5F9r{-5YWua1#n2SaTOaf!PLa=D{|+8QTegNy4J7R01A{Zh zb-m8R#H8GTwz+@mS%X4cm7UVV-{EqFzR|7mXM&_dMBpJ?Z$4)Vlr*+A(DY{Pwm8;v z%{YEZz6YA}#7HYy-Rxp5Ic93#0?#(<j6b77J=QZISU^=oVJ z*H7#RDRM$gnhmg$3j=9QM*K+VN7#5F6T3lNmcg5j_Ws;*4DzgrBsYKuu|GqCd2t}? zu?WBAfrizOBThh3E}Ekya|Oh*fp`Qi4u}O$#ATu@n!RJlU1BMk#-0O+o{_BhjG*|P zrGR0flCVcyuzXU8VS^gA(!n-*_hXuV-^Rp7t--M-Fs&N)HhjR24W(0f6n64)9(Oc; zgu>A># zkyIJFFu981e{}B9wiP=mmULH2;x!H8^)g}y4SnQ$N5O3oUXLFUU5-#gBTTc=} za7g(eEE_dwYAd9MPQNcWCiw+~ht#v-bUMyt{5elOFe4H51TcPrZ1lh>G!`9MX(<{s zTF!0f;H1yp?&;k-AL$0(!5lk`u zsMYgyD`J)EM|HJPq|u8ajW&xkdRe5=t0IklEYb*x?o;?ow#8jtQ#&Q z3ksI!YQ^R#`78Npkh2H{0uwhjgybA0Jta&GQkAkA!uBqSB34}`@N_<%(&=sPol-IH zxpzu6yyxC2744pTr&Q~E?w!6|M5nJ7(dmzi=(M`FkX{$Er>YCtRMo_;GAyVDkxrpM zsmdA-2hwtw&neUx>||wkeP#Fg%I?O>?u(V(&6VAkE4!~&c7I&ig^6~ziuYACz_7&A zkTC+j21~~D1bL+Ur2n#MLgX$@z?-)!sepv2=G;9QbzGaPYs$GI@Juh*Ob6EEzb{)?#xPF%k^BPZY3p%ZVW9^1X2a|ZSv z+fm)eQxBQEy>o_5y|P0mUrjx{f4}Dpo_Jx0_FqgraQ6M514K?E3s80=1zb?mna*fF zfhQ;fzB2wYCpMw$yVPj`4BoCfP=?=IP=oI+yd}wydQ05ICSXav^&v^TRdB#y395vx zt#;Gm{7pFbnY>|wKu-E3HV015i|Y|&uwwH={kAuzDq~mFgR!}hM=}te?{?Ct@wopcQ<=UR1qo|%@f6RU37Vx<1hMn&A88`=l{Yl@AEZA>s9g9W z@g)6;t1qFw`)9gwQp3Rq$w%preBA_}_z%(_Wa|$2IQymQh(dK7V`CzWjqlINIAd0h z1wTpYq`(v}ceiN^$qjHnZyFkDyiJD;(@~ZLR_=*TkDe@K5XdP?c|4^NqnjJq=08Y( zkP;^tBlRr(S(2UOtK_5fM?uDlFN4p+pC`DX`Z)1aed=H8q?w8=mA!#rV=-1qt)c${ z4nL2J?R;f3V-{56dAUs?SLuWQI(9CtFPC*$AP=v^?Y1=P_HsLSaMpXO^J zR5;N&22$Sh4`2*U0g+I74G4+n-qpV8#0YRGf@uS=uOK@|G4s8~gx}J~Mc~~uz$A3< zJZKV4eQ-iAr-8@S?elle(LOTZ7n8f~4_Sh5)Fy}ZQLjjv={xX_=%z2PIeAL$205XzCPs^7%R44OP zYP!m2%?X9lT5Qetnl<|^{ly8q^GSC9fvmVGsKaWmL1Or|5Brz0?55@tJnfsQ1m7lS z@-Wuk6y({~25pteZjrys!?z#QTf#t*$E5?!nZ8}%65a88AG`bFYgT6?mU}G^4T`h- zW!=h4c1-Qwo>B(2cAikg^y7e9q+f+p6#XuxH0T#W@vUD5gsFZtL4@gMhAj&>RvuZJ zf!JfOZ7&?qIos-2;mxbx2KR%0nN4nPi_n_GP}&+&&K+@!z@fm%<+Ii;7K8o4T+cz6 z|6$dqauD>C0u!j#nPbNf(1qDS%#cln)oo{NYc)%|S_>Puml|>pfehd5%HhI%imc<5 zvYo(Tn!Rg}ZnW7AmjtFQK?G|Y6SsHtG5*f(AZg281%)e~I^OXVQbielFeR??!LVV& ziTjk^d1}5i_)j4VKX0vjy>)!7)khj#^c)d@CQH+r!Hiz*qF+|0{&IclFX4ux&`}oJ zjj6wUG4+?5Q-Aq#>MvhS{pF8Se+jp=X_uusJr%*hOpl71fU+&jz2uv*b0axqOD)9` z;EocW|Kq;8|C8s)6--+mSAw^6Gl)F0Sr>xFtg@{(8*Wt`KU$A-D}VT41J7jXwMg-C zSX7-6l8oGco46rxzI$wMlK%W`rNl*RxjPYO)t#^~bJLPqt2YdW>?V3EMb-Kwc1r;Eq|C?XE}z|$r2yY`d-e6Ff-q1t_L zb=3xK#D=Rfe$&hnGbPvF?3rR5)F&IE*^HBRM{;J!M~&$wZcy-iW)uK8@QT6vgt)9rb1vUM^r2T%f-XaV*Uz2OV_HMAny`7y zszhUs&+)$v{O<++w~7C~#Q$F5e?Q`X9PIb-YigFay0+l;_2&3U7ul}&Y)3=P6)v0; z)|(JwQf;^gT62gri?ja3{QBJfx?z8PVSnAUzrM7;zOujmXn)0`n~tlYLu-jMYxy}B zA_6+xs^9}kq~>G_;XJ8S`Wab4(it30pux7d#+^};LUklQWdoG49NBvxKgkDu;ut29 zJ!bZ@&38E~k#6ugh($5VU&UN;f$tThJ^6DdufAb8=^-qO5_5EV^^xZO#4eJVL|jL} zzznx_N3#Ma{m4}oCmJ*$%9}KdUe(@-#p@jtpItyRp-U=Z9*c{+O$qGYb9|;uJ9f!} zU&=xu5uC1SVLNbZ$n6yBOHDh}+5YQyrXXFh&M0%ELTC`Ycj+#j$y$VEP`tT{6oMDK zkV=@Pay8(>ipv@!|1fe#HgHLGi`}K%dJLxNNHzT zwwZzLEwcX9T~ZlFg)qd3!48?u%m$*j_~E}>NK@L0M?K~G5|5I%U)sov2%^*8aM-@& zkhS++}v)nOc-qLy*>;-azLP}9TeL~95@;oQC zlWm^Uh0jcLlX)^C13os{gtbvv-u~I{VBW3T55c+Vq=gRSRyB^$3+fW-8Da3h0$)nS z+Zk#JBO`%GPiTpxpgLKFSZ-MIaVIL_V(t#|_Z>=rplE6-DQX0m5vS6Hl0_VR6Klz3 z+6YOdMXr@t^Q3j{`T}ZW#2A9dgYGo-8~o*ku8RGns73Xw&aCWQ5?-7i z#GDkby8bGCeJZ=aDAopnZfZUKbxhTYGvu7z8&yiYL%U24H5xF|wT511?Uc+zvPoZY z$h+~R?3#))5F%dT@hR{(nvP5cwUBVm z=zx># z{b2(>CGO&-6oFtTyi}ZHB(-Rio|_-$?V{=Dlknc1W;Tf~%FZRZ^*-n9y?stppc(i% zA{mXLPMvLyj8SDQu8`IP;=WPuG{k^ms>5ML&1{pE>S+bp6lb|dr`h_{uhc5lXQ*Ki zRpF*9z-T3yb+|u*37ZX%lP_{WBs$h}w6aEN7%X>`f1H|yBY>^vQ;mqV%+$QCrMP6P zKWyXNsn{gYz*9?}i{~^mr6hU_G@q#v8}JgE?|Avm)y&5b^RzEVJC*8qIojUVwJY?Y z~bP$M%r!k=j67ze2VfSagU%$Jkuy11>&9F#uFdP}OB!-8DhFrniv70^A%JC+!~`jMj} zUD>7|K6k8I+M{+O@a#q4*=FF`%fPc&foDGko*_qV8bI73`*l_Ne7mU%l*=ClGT&0k z(`3CD)svKZNePitqw|0(NYio!O)9F+`NXu~x(JJc$Cdr3UP*L1LRv%I#p(#gEq&1PCcAwKR>OR2C*t}ga#j6HtAosksAb^XSi|KVRtFRhX}buvnu*wN ze~ui)YIfnE#d{>Dk0hdmhWC4@N=uPaLWIb8MHGEAKy3+4yniRpj0sr9cIoz7pBk+` z7`Ri%wlvXdW-b36`L#a`%?hx*Z&ey>IlB5^!w!SW8F)tDd8RS_eIT~j>tggg|NBq? zvfIIEBmetUkh1$R0sbQYd+XDpuud~|`WS8Ie;){UcD}~=FY~{j5EC7ZUV%@eM^97d zXA&=7iI}gVEQZ?KmCC59`3=ZC$!};|cnzF=pnBjYrT}18A8vz;KAum4!)=h! z$Ht^S+y)tayqMI7+aRNl%}IT@4Kn(8IjIk~K}H|1CiUSqaQa}&CJFsNe53DB-)zuj zq+@tMG3mp-f5g9>o-QqY^T>W$pU9VOl@DO6?QWwpZno54WUOCRx9RcKxZ5BdVz^p< z0g;ff18{5+x&b}eg5L*X7%NZ7cZ*ctgWxVs6PKDdQpC; z@?XHOq&|qEZ~Ct`@9W)eW(UpTZM#40WWN8Cz9_%`L>BSYUGv#Zzh7+9w91=V>%R_S z*jP`j|BJQi%WtB!V%^Wy>fe0*!KvH@CC}HWcCvp0Bf>{`TT#$@zk@1x@L8kd1j_dL zM+!d3wuaC6!@XYre$c+Y8AYcsuSC1gqSphQKcK&@g94sW-?qtr_HMe-QN7vhHQuZD z)Zk)B=_9y?UPHp?>)ob5CZ+cnjxYa-+OQOJ4~>yNd`(x3(RuHRYJj(*ckM>2OMU%{ z3Vw9>fyJF6sGPTu6r@2Dt9S2FnJ>CR{qYDa`rsJ1&((PC+33@Vdc=Gim{CM|!bhY2 z*6Qlr-Q6>0mCt&E>(#_3T=G3Sx$WY(HIxJ&i2PS^$4K)5RH-`JR6~Zau2Y)BhfZ-< z!Q){KI>@2aFK3030Y9Us#zQ!&T#nnF(bINUJajRUr~MvXG?U(i9OcR-Si6=v-e1en z6GHQV9QjbOtr^wm3!3q+J20kiMuTKiK2eTbJ3l?xJKQBl)7mfbo8R_X!UalY2ixh( z|M=*9FaGu5Z0Y;{pniQ@hpOLbIUWKclA>)%+_Qtv^b?U;gvWrClC$$FE0vmCWqiz6 z6|3R`4MHKlwnGw}=v~(tgQpF7NYm>u1buaCU*%u!xs!CuerJ{G4!c4Plxl;MdZ#_Q zUxmLX+^^&IRk$l0%&*$ltKD8a8dSN{PV192UGkRzt^-HAduJ!{!SAQL$NSOh4?nCf zIVLMcqnwSb9gDC^D(q)M#1WCIA<+nB<|%>s^$mDJz0<#`U$#c=26hYTB`<@3@fkjP zja&=%qi6Iqd2TzanUL|b8e+z&2`G`Ez`pKvhSo71>i|z+YELcY_(<*L2LRM7cpKIE zeRPQs^&|*UW!Ee;tX5+(zOM$xArgwLmh@T`V7AKx1Vh$)0iLYNLS z&p{|Ri#}l#j=YyM>k~@dKktc@L3S4C4UZTU?6A~LCPIzIg#7NDiW?vcl6RtpT z0)MI{xD2Quf2vIooWLBHU=jzNycvq{_C|=ge|Ut7RCKf|L0(E=>%JRr@2X%pY3; zaZNTFIyl-!WVeO+QJKW~G+d4e14$jESk<8}6OS(icK(DpB$h>4Y>G{bOla*cqOR*5 z4z*4m^;2$*IE~d%kXJs58@<-m6(wWujw&V!qPv2EjKlUdnVsJUfeRUFYRn`{^{ozW zm_uuD1%o&KZ72sQW6I31O0xC$fILT>gUO_m<{5b+lF5xm0yRbd0tEC?3l}JL)CkpC zL6TUbwU~Xd1S&I*tpGALn!4g43xnVz-vsN-lB@uQr#bg=XPB{4MoLas9Svug@r>gp zW}K@9=B_iC7@xaKB0y_QGhiUC5l#(5Ha0+Nu)Ev~8G$z2#eeN0xx?3p8V`tG!@ zTixcM6?bu`ZW$iDieOuU<<$Zfk`e$z^E`ecH>rcIBGj?=l^OAdPCiL;HDuw60cgBz6tkK zBllam%lz%+?7w!;PA-o3wd4BvuX`&Ls!)AiU0V*K5yY1%$oWETYs*~V#SO{kPF2Y% z>K2zK?Z*AKG7TypB-E77*vS2AqeRP7axcXQaZlLlY~o zm9ugA!QZ~Tnf`JFlbU2{9Glx)*E(MS@x~^fy#gs7YLv#?FTqcVtaAvYXozu|?Z&`$iAj~7uqr{Rbkx1;bqEV6vp65FI__vWy&=N7rwuGRA z!-ft4KyOB_1b2nbPFeVagfocZC_D-)Kop!qqb5#auKwq9tONqKMdR~1m2Ts&e3erk8{%+AO&8_A11qhtbV3aGW}@N(UgV-&LxchT;(Q1AgJjl6l$06{33kk zmo(o|r)_tgX96ig+|%X#@TT=qzya$M1@(#2?e$+Z0m=RuXX*OnT&H1D%HTv)(KkMg zSh$=+2Vh{=Jq<C6a)hbM!H5F}9Hke=QO$`epl&uqFz2j09l^*hL=#u&;7oJ3W;DK-2-ZN|n*L=m1b zCB5n7bC2tXe=jlb&@{-(lQd3+TGrwED+Pb_i4p;`2Lr53#}Fz2GE zR`YVYuhLcbEJ~i4-b5`lJnEuRSY0d%(ft=dp+D-PQ3zqPNGfDm_TW_Lk6HwU%E{lc z7MI<2|ExE9m+kmp6chHKWRo@U!%X|8HNLHP<4*ndviZOh&mKB^>NeC+A~ipUg*7^0 zljeo~RF-iwolMuF2ZZEdehys$IPl zMw7E$G@_DPxlSgPz?rgdJL-X!AkXdY`ADxznka0X&eWPg9wgb6m3L$*%S$w}98@Sp z0cXoMoD&w#amGswVemNl;ni_()Y^)=J;ZFmiAxYLk^ZXv+iHHFm}aSa!6d|Hglv4Jccu|Z(}ea%2301e zKg(>!F48hTj8uNAfYYWF2#s52(q*=N$5I2*$#zFS;OgRf5j!9}(Bh|+b>T7#+p=>> zUTNlf!_I>k<4*6cHNZ~$A|x3YJ+XqBymPk6GnK|49)8}Tfgf_p{Vz3Tf8b(Mb}uj{ zGa=91tau*cNIIi>%o&PE-TfC^toUIDWw~Pl%2FbxBm@tJ1T%fPl|>?%!UwK$#~gF& z6EaVZyZ8yqxP3Q#NH`nplv$j6ek-0kdU*0s$@nYCN+)&zjSG-GLu+!VaDvYQ7)*h;Rg9E_jE_`X+~c(CIqM`=Il6#|=*y zn;K;q=vWlKmoKn~H78a5z>J>Bz5qixDHZ5Da~?>uKA(x`jutW#xAV-Y^btKZpShTx z*r%ObBNwnbp+Pd|_RD=A#qx#LC%IznAGFYrnbD7ZX zr$tSPdd{5G!KZ#y`LrC}wy`l$6)oTDR)Fx#GNIZU%wzLkCe?4|j84f|fMux$m&F{( zm9uNE(U!PQz&WVjyTi{knn24#k%=7Ux7EL4!LtxlVk1&#Y@t-s ze?nRO=e{k2qhwEz>9|oJG~3-wpTjb9MAnJ8-(HAD0BgMNJ3OD%nWG%wH@f%vuSvUW zIuC;m^-`S{BZ%GB;F3abeHT#c;a!HU)Pc2|z;Zaf0ix+7fayCtC%qibP$d=w&Jn|f z0j~RA2;igo;xMlJ4g((cRe&}}Y?~tDBoK~jt*`AME6i}%>YxM-4w|DFrNWR!hJHYc z$33|VhGgi$EBUrPlnm$n-f-APwr5s4(KOv})%1H?zrRFUXxlaVJ)&p9uCsewH$6Ii zF`xt~X9h>;S+Z03AW#Zy5-#}Bq!YM^ddyb@o~Pm-fn(km@?h zJYk9PgV104m)Mzhp2FYw>os#|d&mfzo*W%Lz{?DcYQHLvr5Ud(bz>J*$R;iLo%6QvhkEbGm9BK zjFT)%c@W-%`Jz+~tK|ZWQWl*%k7Tc*k6=se>>T!@)Xe|{?lS#=1(7{~>9X$vb zDLj2qihA#0CA?r?jH2GBFck*yi&2z|yDvylX*_)yit2JWL-!F9l!ENh(o-69UxJ*n zu#`njQ^=BhRYaq~cv0tRAtAQ3D2No{6oMh_iPkcH z2o+Q&bp(4`v-K%uPjNmoWZfO#UbY5t?}|ql=6#a@uQ$dx6txnhe!VUIkMvVnr$6na z^RVO*;w0=ic$j1k$Y!HNg_@5)o_&!4(Ikxc^pZs(sm`-^Me$8B#h&n?jTW~h9`%HC zwnL%akUWBgb0uY%UWy(IcbK2v)VuF->%%eQq-jj;L^}9zU6&y%;Yfl4P-`>oGjgKBmT|l#Vj|0_0@kchU00B<7(u>4j2B41!f9|qA zYW%r?X5lYDbVeHpW)jiYT=n+gKCZLBNdgI3LowBq?mVlv*#N&>B;eBdVgRojyJyOZ zpEY24ylcb70vvIfY><0HiUg#uBIY#-cZl3RYmuU4Ip*+@4j z($PKtg-GYIOlcO<3G9+$LJ|Ii%E7Z3nUrx>w0&nW%c;SJ$KS%hwtZ)T%^Q_==2f44 zE!$W3DyzuxNqn@scXmQ4MRrlxr50rxl(-WVIqATw=&Ic%r#Gn!lkOuc2Z1bx>Z9Gg z%Iu&J5Z!ur#twReTV$olnne-_ohsd6lkyN;wnv#AWX4x{J!E_?9Jux*+euv$;{|t@ zw|!!`^umd9i28lo@RQK#m|(N*-_s-}fnZ#2E}lf0aX96m&>D0D=dtTn5g;^C!7&M8 z5WOza0#QyOkhPPrHtd3$sl*8Cbe617eRMX*99b8xJ73=VZ0j%#ho$DW*DI)`nnosl zBhFl66wXME70_WqNse+M&=5xm@Br4VZw<$;At=6(29ZI++R`L_s}=DmSB+Xz!(hA% z_3Jp736`3Z6zwA%gXaDRdBwsGaC#CUTXOE{QBvF7aM{RNg*$EBKlu{i24msI{mka|9VKuB0vq1 zg>fRwWSX~`@Crc{{T!`n$msVBa10dXx4t7m6q<(J$_3|c)d=zsl0!8Xiek9XoGv_W z##GG=&1hwaA~9qGz7`%W6rHMtVydYo#(jvXHowqR6XQO_R2!UD*4g0?wW|KO4>8qd zl9@fwR1@Pq#8kV(FSAz@<37Yxhdv=CL{bh1o{=pj#(jvXHowrSCdPe;sdm56UQLYq zAXEK91l;w-Pf<+ ze5W%rJkj&KFuw`Xo&cuM(wXB_fr&aNmb`%{j8u9NuR6W@Na`Spl2t1>w*phrgc2BI zG1I_hWiP#2`D;{q9{wN`CNdKN3f`J+_-oo4d3JpkOobCipD^_)NwMDi$g_pxF4fc| zo}n?Ix1U;2r7?y!Ug<^Eqv}179vrjH-Q%UFJMQ!iW0B!Pr<@sQmmFl$EG8T3Jsans z)j`^WkFB`bzPf6;r5s%{oj@oh$87b7?M|;daY%Qyyn7KhpFRAVyS*_iXz}HGS1kuS zoT=KAl*Bo-1e&uus}4~Z=#1#M?GtYFq~D{gHlco*aC3Uf_)LT2U*qei4v>C>Oo$75 zh+_u!N2oX8!(h-dBqTfc2lm_0ZwXL)>`Gqv>!N!}!>A_x<-quGqONpC8T+t6l zOH1FkuPAMgT#)~=dmg_#IeyFkEPam`?XGqKINGiK67L_>b`Rgh@7~34E{^vqLSf7Q zOJnjs>BAR4Zg)}DqlHVZ+g|g^5!x#eL$S35d324m?)ZnUvVMr#eMHzSe~!lR*SOY= zXck*r)WuKHpfwr~y3!v7C{cSIOI<;Ul<1G5Km{R)I-St~*HI3vVQ5r41Cag>FbQ(z z1I(Z|h7rRmS6RStI|mr~E(Ofe_pQ#bReXWbz6%Wn)Dj|zy?4832l4so!QSDn5Jv6r zB^RT7Jlj#y47&poy`m3YIy8@T(w&)iG)Q&}^7(MMhDN42Rej4q24O6-@J zS%FzS=;{e2FwY3B-iKnV*Whnu`S8i(T|Qq#6<)u(VvZoqsTXkOP3OrgCP+rRlM!Eb z+=qO6R3DkeDlnn22wsHnGW+Z@Ai)Z3w97}lP?r>k2(-gltoTCd31L?~zJ-!)pXP`~ zC{Qibqnwvp!6rSsY^_kJx7ixBKe9QpluA|G!NKmb-R<4NS2u3-T31(;)idERYV2C? zGk1BY53-gD{p?iWga-$`Lew-R&$8A2T7xTWWH@GL>YmgBKB*4|4k=%NCrjG`IE@E| zhb8Ak6mhEuMU#aq4^=sE1#AwT7L0q%L5uJCe)`{~;7O@ACD9o-Ywpzy)#o@X+~81| zkgTaVtHI!X2@c-O-=?~B@Jf)rnPi1Puzcs>oQ=#Z9ipaboBLny!_8@Giu)pRUb<8JdkH*E07w*1W z^km>~Ty`?e%CwX5xM%T;7+H_tTEKVNfN!~Bf6=C}Ep_j$8vAi1`H zM_r(?jmR;~dECH$W)|h~SWq=^*Ul;x+%YKl7v3@H`+Gx3GanZfyhzd%Ikuk=zSk?o z>^tsOo(uI`5UU*Gn5PGrwt#iA%%3|NIh4U}$`BfxUl@(d{eYcZbxNU;VV#Ud<(BTq zqq(fR3NaP8|H(`5HZQdL3j+Iw6N1N``t4qDjH?NpL?Pz%XiTst47RAm> ziH$KmL|l-TFN(}9MgS^qRTMI#2aq$LyM4<*iB23}K!ZKL>c$KA02+Xou1Jf5J2i;< zbk?y;%Vw(|BFd(ev2j#m07s3I8)i||XF+sst314^7T6O07S4cZVQUOOW7MN|-839i zg9owDglb=6y%zvF6F~f-2-LdiV*t2c9N>QO9X0p!pIYcz@&!%&FhwB-@E%upHw z&mX?bj&z`K@LT|9#&bcSr=QJq*@eQ<|)~O*^vO~W->(5Bp;-0!w+W0Qk|gEWR|%dq}9U#h1}o;fZ|pU z2NdGi3joEf@`2KJ+LAiEPA{BSioR$)b!IVP+m&0KumZF6qnwMbL1KzYNx=5x8L1D8 z&#S<$&sZ2JCt5#GE(<(eGOD}h&BOWX(ZHYd&;wv3RdeXe&Z6{MloPZW%Ysg7>sbrK za63D|Eux-vS>iP>zA#^4GU;7oop(Le*`3m#V3oY$+LNdB{!y{DB*_IzbQhS?V_qdy zgp%x!#2(0LJeyJL#*cC%>2jK?0#=FnlwO~O$Q`CNV!#^9=E_p>?eMy|Uld=L2bqDw zYw3ABj`eW(Y^pYOo(xTYhh>4^cJf@6y!`ev0U5UqZ>2u=+Rcm_(o8-oY zDb*Dg5UPO-M8HAFmhlq5r9cy1qbsKY3UKATMRl#bw_G|avjI65pfXnO`^=ZRDphs^ zQ!`4Mgx5+lFuUg!bbk_XF<> z!#ypy`o6}LM#}PBut51zZeb9a%-La@=hrBLGz~Phs95$hKlfQi=Cfi5V1K`2qqhBF zfERU&4J^%m(y7YSS5pp*1eS%;-Ek{3rhGHykc{JEqqhBF< zGGqzsUpiI2Ey#w#ke3-_+0Sr;mGasN>f9JCkVihMXN=&q#SkfGmR6fg|9*b=2?I#u zk|XGR=K3n;Ng93NI)+s{e;lcgZ&rT{o~ z0h%czv#hWMLbfx`b9wgV9X?n?4}9P1#2lId#>)mV#^~ori#|`yqhp}?1|OtuWFF(} z5F2OBV`_FP!)?~&)`NE0M>9FHf|+F~HaYK;N4;_mq(xWG`=r$5rsNIgP^^O1DALAO zxrDwaSqq?naFt8?Z?l_s&Pn!zI2@h%fXZZYjm(so2=YEt(_?CZ?9_TuU?r+k7MKXW zuu~`oxGjq_?V_XsPu6_Q+5Kv&_~J1Do~+BfvBHlO!@1rx%$KEzqD8^EiK(T7QFciDccvGJ@ik*pg z1Z_IdbMi*C=r--t zK(bW=Mp?#R3JF5mnI+2dwwzOqY!Ntjx_=mqI|I^uX2&;54x=a%7e|UvE!Zh=q{|_3 zwWBw`?Z>~Io-Td!_2&^|0O^`hfO3^BuB!-l>5Q8#^%vEYS{?RV4N7r;h2$*=5$_IH zt&_&Hn|{B@)YkB`xv}=m+S>ZdmoGQIS*zmzHaGD%{cLP*K7aX5_4$jJo7I;uUc9J& zv$pdh86yP(S6s8`oUK?F)F z(2eTdCRgJfv@gf_xcYT(z%PyS;ccsIE4oS-+od z*l8n^^^o>r`WplQchhd%M92f(fwN+B zYs=yUWf(-a^?RJCdRb zxJIFCq7JlLw)KcrZ8_ z&Zs8c5tWJyfI0VRzK(EOS2z607y1>lSnrKgLPiF-r&XoJJh_~7(3n`n$*p0CHOo6zr@8~B~J1o4U6`ViznU)KAO9>gf=TPC7L zj|3C*3WCOCH{1a|HK@+uI8eWcq|wV={oZzFp%>;O!=CqUTTxHMn-&s7Fi-GAMG1Gk zs0}gKy49qsmZsV2)8P<|6SR7VD|hS`19@^V2UCPpfCp-R{sqMYA*hImU=0+x4{45& z4I*U03#j-)EIOI!Aj2h)9!v72CDI&Fd>R6XicB{vT1i}v{_p?n!}#^d*}L82{k=F| zcJx9PZLBIvVPda}H7lzZ(0<>%JK3#O*IyYu6fP-4BoE?~9SQ;DuXCA7yj!HJ;ajzhBf8SP{vm20KprDwIa2KogPjgttNIKw#dCR7V1ia zB>8L9*2dK7bF1w@xgte@w!YrDT33WR(d(1))E**`0RPgL^++EJh_`>oufB`EC9o{4 zGz^k`jq2?VAokbp{MS8mOu*Tvi@j6nkB2u{4t03YPvHevMAZjo-8kY)}Zk$hyf{|EdIMP zLa}w!(RN7KG5_ozp6|YXhpO1M{n(z0n6|&w6mM&;J1uCK3Wb#|kA8B7L^jl6i^qcs z3Ot9tb(&Y?z3n$XJv(@F_`7p-0Q}LradJ1k!nO z7V8$#YSy6lFqYj-z8qz>^0()54n4$j*aORmt`aahgkd9$x3-uRK2)wKqG-B~-N|S6 z9HO(g#}`Ci?+#xtM^Bz8im(sq85@Lw&iE}_?fw3HObElFEGAAx4Zcmi0Vy2q?wy^S z$NT>PcRJjgZdO5b@!?B04~{@12nRZZZ_9~f2S}VZ7K;rCC91D!* zOCoG;pA~}#+XoqJ8T7)$Ss)(OubKN= zJ^)mD$M$7rzE%uoGyQ46K&?mCTmZ*5(eaLk#^LXW$LF=Pi=%_%TKwzo*&*?IhKYDE z*fUf;Iqdg)u*g74QK2%}5lJW>*Sr6LqfdJPyF!3v5x25@dpY85>Wd84GcqI$0nomx zc*RP(6FIV&a_!NqE{@jkRKfxf5}_{)q4PS1t+pzSGDKUGg((*OQJ&x zA!CT9=;f{rQ_ctvbl*a@Fd~j|!i3Jq<~TkXDWlO~sCsSoy8khP*-6GETW{2Z>+vo0 zHNG~XbB=0?!#H$*0JIWe$Dkpd-RxF@s)nsnzr=};Phwb1fVK^sG4}l<1}K&^*iXx# zTk8HZ{evI*XeaNZc2|ESpE%@xa(1-)jx{m7QqKv9Z-0)~Xu+^0&M#gcb2BU*{`{YV zvlIT{4+4N>iw2<(*mfB7b$I;d@c6KH;HrXp6M~N~j_>cdKwSSx*(6JNJSzR#j#$j$Dmmb1>Cd?G!>&&F2S*mmC z3F3t`ovmX@EVf$mtiaov`XZsVBi-ehWe%cNlynlW3G6VT&eBxlU{CT`zR%6Q)vLvPswJM{Z2!OqEXmfYaB; zztZPDGt0b<Der)|7!2 zyGD1~Y^gO!0beKR9$)#_xEUVDQY&E~2 z`sfXlZHTe_Bg2$|%8zgtA;2rT%VlC+kf)%~Z@0DMqJo9U5nIN1vnlsQBA|%9R%G%_ z#hR+eIRYr0@9VuAhkK*$n!LbTEs4k^&(mG&6)0+Z?vZqz}_W^z>6o4zT8uDa>(uf*XVf zQCxDT_&5|77sP^!i;@7}YRiw2uq29$=yUFvtQ`N9w338%Fh!g&E6aTpv}H0erxX^W z@CPoOGma%}C!2@H;;hUfH5O->d1)-trPf$zcWWs^|6P>Uks2dYWEn*{AgBz4^HMro z{C)|gLobFafk}~cm*p>_I824=Ke6HfkJ1^m27En>%HR)PR9|op+VH7`ADi-BkN_GA zYiM`j!p^=FpKxx&{WLi~!=JiQ$1fotX*NiUhcX{@?&&j@=ti+nVlvC7;C^hrAqh%y zfi#<+Gsjh4z4r+%hCU{TZ2tCX*0}a#D`@D$B7!>`|BpkNG4K`CWD470w1t7ESz6yQ zU|D4+uLd$VNS89E+b#GA;!>D#;4j&G7n3Pqw^#$poz3J_Uc5`dfb$Kh8mV9 zLhDtLylehTW0ddp1J*A8T%%Z!qFO@{dI^U1I(JPm18245Ue^%&!<*0awppYms>dj# zh5|V-G$rp2?7geC#=DmRFsEUZht^Ef>hI%FO%1}ogkH+)@Nb}$mPfMENOLy14$#Uv zYbGN%3@cBWBzYB_@C|)3P~3{{I??0dMn9 zt$&Zm90Y&40&1s`LnLgrpsqrWDI=aZz!g#hvgh|WbWsD}oODrxHD9O`4yVSNRi0dz z)W5Xiq_9_yc4pT^%@QZ{`ahc{YDg=1%{ocBXH_&{#x%VWiTXrqUU>rsj}8G{RrwfG zx4K{EA!|lgg@fFbni`f=Yid*7dLn#3svIL0dp9~B-y$2_@}K1fRIQLU%W)Kr2oNx^ z;O!(gaXq*aJ}|&#Sasj#kZ=SMc6#vWAK9uVCdA2!Iu1laDNWYIEs}Eun4s1;qV1i+ zkmz_um3ZZg!r~~VI~C`T`C%v&nmYM*dD&n#eZ9>4#f5che}M@*N7JRXcsQeenS18q zJLVy^YhICj?HWyz+VvkkzvScsiD$g);F`b@J=9zbOH4mD2$Iu{Ek1c-`TT!EK&vJ4 z-BFgmmznwh=Y0{kX=QDTg#oBo^U|C@UK4ga82ZTZ-z1~*p}OXa-!^+oRT_Qq?;&`TI?go z9H)fD1(76Vp*Yyr1(HD0*Wo;nQ6i@!wL}y$T@sW?1G)Oc5;8xjxXGy3LA7gj!-dpt z4GNsZof9s#C{bLUqM#|c6IaFV*9XXPhZy1({FRY=X2}G8auhIUYJv)gkZF}pm4c*^ z+l6Ago-O@G0h~YrU8}VkH{JG!aZ4qW<1~AX-WaeTInj`eAxJnyDWXy-h2oF5L(jGp z$NL9+NQA);zl~!GfR;2tgq|9Z{_8H1q>v6t@z9b!k)osPDiIyu;Z-P{TNF)7Sfw)R zEq#v@f;dblG3H1xbQ`~+AmN%0Uxg=z&T`qH)$d;K5W(qZEE!jk&#^Vg$T^9xfUAs` zN-~jLt#`xeCzY`@ZwR_6QXvjmnJ|5~LU@~lrx-WFd7`<6{UmzxtThl+!-4`Zu5-&DLEunxG(?B-4 zpPzx2OrW+gGeijRVl^>lu_ReJJw*;HKe?4o%Mv5@U*~GU&>Sd)D`3isrJJ~!Tat~x zwL>MF195&jm*ltU5mKLsZxM3+5WX-otVx7res_wTuE+Z)XYn4^T)pK6^7iBmxiJpT z&JhJiUjJ*KUaVu?xDWX!Yp;&b=c=;nx&#GI_G-VeW;wP@}?Fl23PCzX&6p%Us z#=y+*GTNl{d96CK_mxG)`Ho^y4Qed>D2G6#l}ti79~6O8vjxGXu+ z&L5D~AEG4^NH+H>=f_nE6Bbd({^KWeQs;Ec9TNB|so&0$`oOsfi0BLT*tlROpQSw&wxa&{veQN~Udm`d zvkHEbvVw-cO9`d?C{CR-kF*WR3}=)QNkYlkru@R3*e8)y0tO6hH;6M>=A=30+;cPO zit!sce}`LWnh59!1cFLNItQuSa{cgwa(7ck0*T&9r5$s=Q-P(@A8BQY9@Hhi6~T)j z<0VeUs&d%$fFi9;j&24>U~VZlp>`n?Yy-D;$j-O5gv+~YBvCStqRR7i&O=JUt&-o^ zdAGSC@0LhAqf;H2uvXLDK3=UwPa{h9M*b=kCF>;Xq)laDMm}`dU&+IZY>Rla_qV_C zWw@JCS!Yxxg_IM4V%uFJlOiSFPQjQ9nP{?V6REr=C~lF9HBgj9imaKGCP%wrIkVW#yy^7v=IkgYuku0C%}1y+b!VxO zrqpbOJHuzy@(yQQUx-dREAolWKk0GaDs!-ok+oT2jo2dM(vdop6Hv*qu-ih;n&uKj z+jlrY4qM;xep5Nm{q)e3@bQ$SbGef zL21!Q4N9&V`sUIEt5%^!OliEvO?`ljHBUY*qkKZ|>WcOU6Fm2* z9Ex0U%mxy0k~=5|oD?V%fKWS61JWO~Kf)vpognR;`1DP%B5~ zNX!rm8M+96cUY?-iB#$Sz$KJ5g%-jC0Tq}I&T17_?zj~juY{pIo9hp-BL+}y!k-|@ z%5UXtS*FNDQ5dkzuu(Wl&sqstvLqeK6apfE%h4d>A3SZ9oTb;hh5p=Ke1zlpF z^6+V)sU)5BMTBV#{A|8sH!AQZ8qckPhly#qNuWNe8B{veL-jKc%d6ma@#wo<(5NIVUMEC(AllTsl2y zX*s!rS%sxDsFszEsC3>MNjasUbe2T#_}QeT)1ld}Wkn{LIh}r@%8ou6u0)?+;eHPm z?oW7RWZa}*d>I(W?dPvHy>p>FN?uhT#fQIBL%F5)Bwqctxw(<(f}c?z-U0C_-aXo< zwt-$SnK;#rJWRv#J6f^@_>k(A<(T-zbt9_4(obrVcP!PnR3X!(n<0`cVRD6#GM8st zX&&7nm6coQkfeip=Lwy<-7yrIEz6p=SZc`BQ}A;~?PWU=snukw32Crg0Zuen2F*Pl zn$xPg0Ty^<-7I!kb)YfZnx~O_fG&7q1q}XKmGtL4CUA&aqV4f*aRxvPf=_l%NhR$0 zdTR60qx9B0+|_#zw*IiElw>=QZ2T~^x;LRTlVg}`l}}jY-xSb?%C-w{E;OYfoa+%W zY_+*?GG$c2#Ww7`s+~rJx?O}*8t&fcCE13{@(JRr=36RGsaZh!CQq>#E__#gVXWq2 z_O9sLMTBf53dB(OP8nxpMeJK7$iifDqMX; z3p3)0qw)bBbZJH#aD}0} zZ7#RduQ$ojn`IAm_FUTX-iJC!U6B_RZV0$`7CZ!~KK=c_F9&@@`a713qX?=)=nm`M z=1TN}yqvJan`()lMR|)3Rfx8yYsg;kF@WxHi8s)&^uum8>Sk*)Q-p>4Z_&D~wJm)h zOc(~0qSs*?7J$5qFozG7I9t&4h*wWPMZU7zn0kr|Lk569*h4FivF<{1giwYxD-FvC!{9 z^`W>i?W@Z|4)RVLJhmY+BB(})E$G1S)wqVGfb#R2rhI_8U-5%AU1xW;4e3M9;z@I5 z(&?;Zudl+rih;qwFQKY9tktz}w_3|h8DUF8U0q*r|1jZ&kX;1+xf8rZHoP%)VvVCI z$QI@^<>oCu&U}5!wl(dJ33VQMO{qL9QM&d~t;vSD9Jf2r)4NF}?-D{{wn$Im@UuWggN*{@nYCQ=CU4w7TXO8SR%VuQ|IrXI5~>B9gZ*m3Ef7W4oG`? z{RonI_)eG1*UnE5_TcRwpPgJB@5gU`+s{gC5^e~w>L;wgvFWOP9ZopGn~2L%tm2jz zC0VH=9Rk)l?}cO)I6B{>oB>PU_XqXs+d4GQMoaH=ClFg0z-MBqesnfH`5du*Q41NP zcj{2S(;niC?{}!FVZ(tU84fcZAVWz-+=y#WqK~?!nsoF8SwcEuAV>{4!yp+w1|~sA z$~I0Mv%nbaqc{kx5O!vSA>0Xo0NGL?pNLpWqQKRb=^tK0?MtA~7XcJ8y=-mK2r>Ud z3m6tb{0*S$w7(}1=CdW^OAcf*hg^?grsJKA>7GA>2gMh zv*S=mZ2aH-KzkGl4|(GdGx=&gMda0Tc$Q zXKoY7>)p~LF?L)cLC1Hq!HC9E+mA2KkuWBam&t$WoieB96x2fZRfx42Yi5!|4T3e11{BQiK{P~a0 z%ahN1E=uXzEIa>W_4(R*GXLjBb#wje`On4SqJGCIEvg`+R`wxqlf6>YjgXZ3td4{P zI41_1oYu#kX!lw4dVqss?+)#%RTOG$Qd$}@w-6H<)MR^UA6<-}|_-l~v+g7(VKoT#LQ|78Y zASWTXa@pibxOQsx*t<(SjP=Jf4EDpnT7w=D9&&eUMjd)KElGiCv-x`V3RJ0(VS4bS?*AE;@}KCukL*y$w#q0a-G=V4 z!;ar{xLlFxV97W!3vR$o1w&c}x@$2Gg32?HpWn6gfC$cjHy?e*cjUNFlq)A%?5GC< zzbzpr(_Ak8#m36G$ndFx0tx zSSSL^*boB|ktjXLf4&U!uOuZeKFRqeg;vJi<@TJj_1=wxSB4B^ie^WTHRiCboE`LQ zVEvbH20`jIS}YW$dI0b+K>9O@rQ&A8Iy0WD(?+UMN$f_3oC+<?2oqj0iJS z6V7m=`46L{uO0zoA3T-d8WhN>p10og$wTfHTDr~IU_!^aa5sAj)sp|~%hYmkN0R1qSuZY%m3;WG_;zR? zD=R}}p1jYjJfpe&Ty`@w1@p}eVmMj8%Ntuudez#g&|Bu~9J^=rqR~BX_Ik+Y=w&qc zwhmf-;}Zf%45za*H0aQs8w$t4cWaQ4(?!2589N)TtLtg+t!5h{OOK?nuWtSI?fUMf zw?O<6r$jFO!PwbF-cuKGPc0DN|KR&MUS!MgOZAKF!5C^8&c#r`)TcanMU|^ytQ8>& zB`lilTK6isVC-#I&RQIRCbUZYkfj~ZU?Q1eT=OE7W|q>fMNDmloAR5aJZ`fT>G{L^ z^Qq5Tjt?Cf63eoeM{Sf@WC&hak^M#>86PFnE`}BbUES z08_9Jg%KDe7VM89J9vu4ASV6n3ODeIvjblT&-BVRVU|Uq3M(uw~i%-+_-<~WzFW=k$Zfuc< zbhI%2Aeq)$+qg;&8t1j%S>prEe9uui0#>|bRN|ffobqit;CL0>0&`ph z=vlviv9hpmd3iZ62i$z8d%BP^<-x!s`Ov2y^3%VaG?Cc_rG*M9T3XcxNG{V&Qqz}L z$QjQL;1;{MJP&;QfTw&>IfLootN~+a*QB9la2-`fINOh!EyVC6Yy2@xJQBU(YGt5R z8Qf9GRU#U$=U6eH0#aI`78pFSfvQ#Ak`0QQ?On@BI$SRbSP696I5b9?m-j7 zPEom|T;{4FLrrX~q;m-G7r@+hrMmZaYk$3h;#LsHc5)1tqgrQdh=9p?###%fih6Wu ze7nE?`ptTEZ+BxW-}#j~LKko1q)L>sE0;ac$mL}!ZaMf5m_=w>SN*8lgdb%E8arJA z4cZXYJJeZx@x~FL5o*D|>2d&d#G~(}hXh1gi;oGJfaV@^^HVP<{cE}=DWRZuXjynx z4eWQ=k*@~R2nL*&0rUeiK&{p5B#vN`)qa1?0{d`v0e>NU9d1f(SVX($qMKAgAtb>} z>^C48#Gs>spzD&^q(~RGNS0zbpCU>c3S+LPsO-0~wY|Huy~|8ddP+FTQz9-+5r|%2 z9E_4r`VZNR5yc-Ow^MJ<&nPKPsml+ejz=yajBe)6m>vFpA%`s_N)2xPbz|#o<=QLi zR216JEiJGR4;HtZLtytStSc<346$GLJx7e#c<~aazR$riMLq0E-NZMs*;m5 zI!}ZkVDaE^_wD{()szH8DM0riS!G7#r^}1DMu)+KI%()8Hum1U-QGd%2O#j(_G>90 zcra*7*!$D@Wfr#jzHjrvk)8HxCk+vP?U4-5T<@?EgNot460=YYakwk4h_AM{HswSO z+!b$W4m@LXaGM4M$74!Az;b^6k*d}BEb7ntCdC* zYmaMZ=4f}?0XS-icUmvXzx=-oP2Pa?RWTuT~2Gh9w!5!GZ6S`Szs z*&sl^mdbib;{(edn{13{xG$*Of?XkVxF-c7n?JIOpGgDRwZ0jukciT>+E97GgY;v$ zY=M+ij5cS&q~fC6lG5ACidEyMCnz-T4xl0-qm&~?Lg)H;MCZ_4yDb@*O@_iUg?x?* z2Ho_>z`+=j*7cAv=4t$O;O6FJlz&fTvEod=RFrdak3)9FLSKkLFWVJut(={8tMu<7 z8k4>!0PuE*@P;AQVllY_avmuRX+EBoBppCAO2acmlX(B?Tg1R9{XgvQFauQwZR)uu zQ~Nt~43Ga=Tz>XE9sjeme6Rm^=)2Wlz-qkCzl5~nQ1CxV*6X$Nly|6q4>QEDYxQlyeUOI?^M(CC;^-WYTt!%w{ zyR%-|ItU$ftV0Hp%qNxJ+5^>Lg!)&b%0XXGvk1#)f z_z;%QBR7S`I*8}{Y2`}f+2iS^go07>A3On%P@}tfa!uKfaE_4wo-IFHPUZh9KUu!_ z|G23o9@-D2rk9eX%Pn-$Y94jro-1+LUN(fk!!ja|rjiPD=#}oE*Ka@_4=dcZR6eLB zhi!OIcYAPlD99S7HFu)4VWZ?jiiJDP<3^hq$nH!&#Gv?D7e|oZO7h>e+WYq%{L}r= zOiI7kewSZhJ?QjW^UcA0qdpMp5kIm&|J~>|&YQKf124Qj68Urif`swbcqEIz zrON%ZPlKnF;~H*-Qoag2g6;?Hq=%|VI4939;B3?FNzDv;F!WK3N&GKpkQr!w3xv1$ zmM|g!FD6FXxnr85i9U@u9u&v~!^`WjH%BryY<5aJeu-B+l8+L(*86b~W zB{&M=$QtZL61wA|(GNF}kUIkr!A^Gut@p*?2=0A}N5b(cKVMl9OI7|TsW}I@Y}Nj_ zss??fX6zTlc#ZRcLF)(vq-jsf|@}pK>@SEH3o&e#&hn+?bNpAbq%TD)w6-l6JK(AU( z95IS(b4Fll+yN0rg?WD>#~iU`tidhl+2SB~qQ`d*MZh~l;`owqq?y$hhvkM5lh4YA zkxH;gj*@NwE1w03N6MFmB&L_I0-Dc8P7xcXI|Hq$&eh9Gi{|1z^gi^T_Hxwyzm06f zi0h*ib8QX4i2MK2QzUyUFF$?$to;1x)2HSCT3lLMTwcD9|F{cUY_K?(Yi-ol`-aUBd-M!NLDIdX$YZgeO=a_mdH2y)na`#*9&|M~6Pl<$z--qTI| z^_;iNUO%{=BYC)&D4m!|px<_z9~h;=J*(l=ZGsC~t~UUF<%q-D zAbbTHoO*JCJmrE%J^KQ>pi?X>R3d-?1Hk`MH9fE(w&9L>G@!dB@?&k*J~WbbD3Q); z=e-crpsT9*AR;AtA1ULRL7t-`7zQ!$aB4t5>zg}rozDP4u@e6?pEl|%#CML3; zAP`FNyxa2UUxn{|wF_JlJgY?~#u+s8F`k=qZ1}Wyw&F<}P{Ki!K*Dh!CklP5(U*%k zfe*fT?3`&|ltz7QXJ!lN%6cQI9keW{UL>BlC!H4Zr7>|E%2FOdU8Ge~m4wHI*W!2* zFoV?OxS!AlYBW7TC)Jge;I9x1xX}z1J-qCZyRYwptB*g%sPn&vjozq3sWUjgrSrf1 ze7T(Q|6oekWO4jyT)!n0*|lzx{MW^wo?U^v6?Rnboi{Ift-|-;=nEbisWncw^`uEH|%gnG43d&2#JL>vzeEm1l#^Pk?CtJN^94xi`kCqUn z3E%Vfm1x$C_OivE{$wlb#3E7%Lysz3)H3%@U#!LMM-Xysyay^Ua+mzrMak)@M{=9x`~~{ z$_mk--s|{SOM4SJf(qa&7#87|{1LqPpbw|)%j=Raz1rNZ+6K~+;s^~p=b~^8WEZrq zc+~P^8Plw_1TVX_hCvP{ofBkkM&-kHLR}(1l1SqKXe%??xa4{VvLqs*7*@(`0f@qZ zF$v~CTMZ~5g5)PuQGln}hh#m3TERId9XF^ z4FLp9rP~f6aM(!qN%A8y4E2pq0KsU97^f_iOhf_}uAwVU7|BF)_p{+j8p&n5OB$mV zy&;Ppe(V=qL}ihWQh6Gxt~)J|LM=L!rg%$P>J0L&t)r3FV6F;&HK;jT#7!<8hRdFM?yJ{c#5{tXf z_7npio`=F)3cK<>*{Ok!EaTI30#JSwejdE=J-L|O^r7vBNRe*#l!i^@LlrC~Z)`tM zy8m>y1r%?TCFxn(ee$6SYcD639;kqZ@-}gR7vGatzNB7H@TZ35xZauo0zc%0 zYjQI5;QGdNhgsU5QBCh{3OBm<4>biy67cD)_4cKzkJnfYfZ(jW7f(FEuE+KudxwG2Gh zUXW|<5J2FEoN$K>#Q}X6i|?m_6zHyVRv7%zNNZ^kZOdr61AsH?!qFEI?KQj`1h7CN zW$rw==gOU!D&b+5VpZ-^PY3-0t=3S1BBzzRmRgPRBsb@DKEXU#URRrQu+gx{YJ8!by-#ZwM3zmG%8f ziRx{8R1|McX*HxTU^YkFm|{kS^i&9hL9UK&^n3vx#H%6%nhsUpsQLYigFVXsqucnL z$WNW#aQ{zuelDfsKNpvtKfU+=xC`QlO%1ZO_O}WH2<xAC_t(|J?%3 z*EOk9PT!?$iCd{~fQrN@ywU3jox`&dJ}h)1F@%ql=lE^m82_2Irtz~z3puzGYc%iK zPhzhYy1I(X%VH*il<}nV5=Q#dac_RmAIzULHH0+o0{${cV}buJC2!%8*M(=xdFO+G zmua{}x63B{CavG4nMb-Ivb(%)!L?>2Aj6%=TV2r z7Ymy^AhX1r!g&fQI$t)rrwxOI>-*kF$`=k*J0>yJ+TyMt?#C&|n`>o#G3Y3C?h&tE zAqcqhE}ZqxTX48V0Suu7{3XR@Q=Y!!?nF`hCxZC^CLk65)YXXRSMQ>B3;`5x++SLU z&v@myJz>sKNy;e>swxWqvbX=2_5Hm=lz$3Z%(CE9`Pt%P0tuKZZ6oUeRtf)7nx{oa zV?^y10&>v=wtH;J>SY({QX5?Z@=uy4ou0giI_90hwKSeRCT}W*Y{+=Y-z$HI_iyrd z*UWbKcV?-F;o-d2ZNd)({sQ6~^ymbY79aUuH5IzuL(V0rhZ5nf(@wY9KRd@|R-%IY z^jUyp-|V7f6#N!sD;!-tFn$2ZcAp*%Abu6HtrH3r>=KdA#IGFy{P^$2U*!Ry8X)`_ zxnk*os&#*JK*3jJA&hHw)9m5n_IU>}CgT5$m9@5KUp86&pWG)FGgxzDvXDhHjyp+0 znOX74wM38nhe)Qy-i8UspJ1JI&AC!}YY=6*g#$QIBVG8J2vYj8iX8AKM6A~^*-Zoz zinE6}R*08{g-K~LOg!WaZ<)!KDyTg>wUYF!wsMkVw52|hGBaCEcqjzq4JTxzY@TQX zOavKl3fN|eiS%|+fOU(mtayl%K7cYn8@n@sFG^#*|89NfaI1>ra%+DJhYX z@E!@K?kPowy&i=)=K;`za~NV9%O)6_5A`&mT~Gr3~M)c<{qIkD_SXRgs!} ze+TsiH>%a5jTg3=H5(H-${1j+zRvn4=96Np}XOInAYMpgFOf0pjd0EV+eY6eQpiOruz)42_11Q)IpXl z7$?^%o~H*@0z1B=9@A#}^YkdoHUaZC6le)D+(5eK&POZFj=}l!$X=Tb*%#VCLWvlR zGkR~x*}Y-Kg0at&+^r!_LPWm7{o}`0S40#lXyh&;`kFm=lS9kG4<9?Tum+Yy8 z_|(FJ4~KDH&4Fp1Woq9`vjA~7|}m>uIhHI6bijx1wn1X zkJooAB`IhyYruYyNLCp#2st)nVJ)>!I_xTWWPHg0hfdbOExC8c0!Q#=peYcv-c_Z# z#`@0o|Bsn5uFvPp3^H5{#ZUpLn0c>%eSmKWVIPof6;Y;*FAj*Jp`1WSHHF6E&Zwq*C>i(vdy5K$h{xgUHf;o!U^$r)4Yd!m?kH}HTHy;GT{Ze zJAYPQcQ97>vf0yH{;;Lbz^(hiK;SNVlWo9srv(&kH(%ahH?+UTge2ZudGJhv!-DB% zX!VxHDcBi#qul`UN3?IL-imD*^jA!6=EpZ88*@r>wGOFkQT}VV`Gf6{}?n?``sD>$*vayJj(v_Je&Xh>GS*iA2+tf!#Y}+e&8(xh{1hcU>zvY zH1K=pr12AMI?dKRRP>OyuCMKXP|D4%k<#=}8FfW^tG(UZ-mRc^TV;QJyK+zzXq(dt z7r)|!?F9#+WN453!llmjgBa9K_X@@(R&fcQON52m5S$*-n4ydYF=Y~9s<;gIdtl`I zcpu{O7z?YPt z9zM>7P8h-7oJ7S#^gFIIhHl{~0GFMH&Il%l7PXo~ujT0#7!y@;=UBlt2}vze(`E`y zd7bJCc;lhvj4DSEDXXvrXk)&z2fRBK^Sg&6iHsMJ;u|=k*b6W%-~K2AK+@B3WF z&Zj>c>4(s7LK?}#AyuCqC-`d&Yx4RI&RjrnLcNA)4xHkE*<3m&CH6=?EbDF3IH`(+6eP$AnZ={v4hS2@eY5p3 zraXeWfSSfQLNq-lS4y)SY{;{2Z8%V zgx4$pLq~*)#PXx;KqID`9SV*EDnTEj_{ETUq8(afhc5d`ju_hvG!z5}3~C9C0tNsr z4+qE^uwry4SZEwREs$@pL4rL7`ZS4+^MLRhQTCr%0=G$^76=(|9(L@FC1-}_(^Y^d znzr;xyI}&zWn&1;d^_QQoHlIKMi2Lexr+xx#f#fxFhvyLAs9{szFlf7x&;Cq_(mFC z$9LoNJO6bdHK;Vv@3LtXDKrZEx7+Gn9zl}?RP6Y|%Wt=-6@uQaP2VO3=r+tniJ}9t z+!r}-hOU+aEk1lu_8`qGDy#2;!^siHgh$c%z^vuNU?tf|*s)8kVv8ALtdn8*dJ!pl zQso1qhnT~~q$ie$x#qYG4o-`s!)5#1m{7_QRt%}0a1L5~oDGwJY+*1InciMMphHQF zY94-O0!2K~TtU!~_dT&!<*^ONGK!8tJFwl(?oJa?f;kKwRK-J)4MN-+`&j`6S83t$$Bf5p0Yo!x=j4nC}MX2$+36D(MlYb_M@bH_D z6r^{HXXcel-#L@e?}SS2;EGyyz&pSYN3iU+l~HpqcY_{NZRuz@ABW*J3sR8M(%sgK zx0 zX|kWrr~AqfVonKgH%qH&{l_iQ-{Eu~O;x5RCnsl#8b=-Dbfx)(^!XZ|A{L!imAV}x zmJhi$L{$7B&@>fm-(uZpPM<+9Mk$)*&IUB#K4_h%-HJzpX3OeWMJcN)R#iS*o4_dh z5By4c@HDxe;l~Uz-2Q`lvnci!=YKDkm!I6n|JXIU&40l>(#DnTgX+Qhn=M*Zs@uC8 zJBOQFo2ei`v3KUSql3m>M+RX?L#C@J`-)<(M!KczhBy*QF3U=pipk0nAS95H)$2(r zzJ?7x!?uO58E0}Efh^RM7F)0atB~w?@PptH<5~E`F&L{Lbypsgw+;QJxbqE58Ov)c zaw5x&lIePtmzK))-J4Q2dYRtv)ZAE@aS8r5H{Dm%_bC2PVX@gh>3q%sFoOR-U3!v^ z|HNtV?4JMM1)1b*hsyuF-P+!LwKwtr$ZzE zjFW;pX6*A?D_eIY|A0}Qi)9^X<4l`Q-N7|NScBm%>M)J!6J96422s6eMu@(XCu$TL_O{O@TC> zz&`*TVn(wvAG>yDMjpY6UmLrWj~Kzc#R#=u=EmcDLDtqf>j=ROsa|Ds79a^Xyje{| zi8Rv=fBojXd;#jx`_O`{vBc&|FQJg63ZO_#GAcwT8F64yIyLK6BOVzwhX`FOD=EnO zO_C((z?#w1)Q6lse68fh-weU1)U|QAk0`>5t6&o%D%|YV>cQde+x@-j#)d?b_aK9Q z_XKh1$leTx=z~EUS#k&UW(Skj0=8X%kPCPE)vTmo65khU!- z)IF7=M?I8kz()v|2r3IPYPOgBj_`1}MzkCAiI+JYGV^g2;ui8@LiJO#3Uye{3%jWK z8s9Z;*j_)g8aW+d1h_Z(MKuF!|DYPHpm!pzn}kufrayiRxU&$0RwB*rs9uym-9%5` zANt0?8mG&YfNr){k%+EmmN~J4bGuZTN^A_VRnJBU7yVMR%A-wu@UkZy)^@?NkM!|o z4~20Lw{XY#KKUvvn*V=d07ueX?{K?Y&{qHV_k{6wvHU5@sKygZ5yJreaAzMuw zd48^NEjzFE&Ke&OcXBg#ym9>4!2q**RwQ-V+TZz~?cLXMauj*7=QYbY;o2w7Q$5-^ zvDX_L$&>l#5XLlNQ^#gXfs_Y_=+w#+%EFu$KX1a{9;yN3bU&5+@Bbzx zd(Tus6{7~JI|u`EIz3r@jzl#`=waJdtFQn1*D8uxZ0&Eqfn2-3Q$_8?#lKdo$Wh_7 zn{pg#*a@8LqjP3+tFpemQ)M+Qp1Uaw`NJlxdUc)BSrEtr^{L7peCFgpInpU6y22_! zp_F$Wq+@!KNHDcC;-@fPWwIK|1HqkLap@w;gG_e}amC^u3@#+Y7Hf~nIjm6zK`{ps z!Z0YIb2XA{9z3ggv$2T@S5}~Fmr>KzBb*{vqN#X`8K+2>2SAX?B%XGtd1m&(joJR4 zp;uqF$TpE^&HO@Jw!T-KUWZf`Ens#KHc|IJC&gq|YdA$x9<(O^(Ihi;ZOna>Fkwsh z&hoaiUq`t{;S*^e&!s>{AI1qHisa5tWl|W0jCeDH(2F*(5YmuxbUCyWl|Mu36_~51 zll{g&22G|wa%6JOt0~IZ;@a9^@=fBCX~lR?b_MHl>&GP9Hl0Kka8jS)a(d3Z7_Duj0hht*%iL+fstbjD6~*DSMzGQ^a0u%HB7=Z zk-b2)GpNkP*ksy%htOalLr7LcGog8_04YOtGFwErSV(Q=rkkQIduNclKsupkiU#B~ zybA&7KYWZ)^8fK!E&o4RzOVm!CzP2Zmu~#Lwec6E zcG8S0MPg}AE6OH!Z~GTH-iSdNV#P~&AKV9yS#Wl7N%Cqgr|dq_#X%b`Bd=z=*=QxN zaC^w_YdQJ3BdNZBZnlw3vu_8zz6XKJg*mYg!I&1L>t@4Dvx6atF)3B4ie33Wtg-T4IUd zA61GD)uTq$!u%_Gk`TDc)Sr{`N-|eYep3y7iQrAy*SQ}XgO_sGD!+>9)JS8hRSV`**+1N} zUP8g+SL-_mTjm=tH5T{?U0=c@Ztl`Y6b8^Vid0+d6|QoQC^jiV&}3;8$~mH(e`Kt> zky_M9F7Wsa1vSq^7`L?93D&yr7{3 zme~$_2bKM;^*2u5;76;gaEm}R$)Whq$s>AVKUzs1iIeanI7)FwQyC~kkqHeEwc^ATe`aQcbaXxZLS&tJ z3@wi3VG!(jvH}T{8wIHyx0H5NW7)La<=&9)|>U+*I;6!0)X-xQnHCXjK-0s0*k%KT4`&& zDy+U8dCQyQy?~{DTktaj(yg7Sq=!SwI?bfv1u}27%Df)dIUClVV|Cv~F_WI!g>iTv zU5N((t^XS>IL*#eL)n1t%{T`9ket`9^t5jFdIJ^*LH127ocf*ilCo&xzBk6K5)QL) z)T!^KkP0N2@1qyri~04queDX$s2=1%T4C>WmFTT3ESw%6&!4sj^PTSL!qMRL517Sj z3lJeLtN3gF__X=wX8pyp&nlk6s7rn*cw9-9uJ2m_a%#dLld} zT7miq=F;l%$B(t6=KR?jUz>F?or&bcwSj}e`pfO=&uF2ZY;fQU77<;(-r0VMR#HR( zo)H1&^%_ULSUpnO9_4;UeCcO^)5^CM!vp$T41DZce z=gkYaYxBR)p3Ej6|MX1$Q+@UXZtDgM6#TgPD2DHD{)H>*te8q!r@+?C3`AB`n(B&5 zTyi;bVL?UwaQ?K@funY>Gw7oF5fr5hOo9h@h4Y1W{r$qs0$gz5ld_-k%NG9!|*FB)#~xb8q}Za5?-2`PkvzmQ%+UQp6(M>?_x)YvW||E zG_+c@oeo%|6DgcwBNgHZ7Y<8~6}4+`7Eo-o)&`ujfCvj`9>~NEv3d-d7TAIpOX?xU z;zLVO>LTfHRw9Q&UmEzJh%Y9d4D*k#vZ&E<>UPCmu`iU8cK5day0P`P@}uoXE?pLx z)st?6?)BkCtKjnodeJkUC$hHXI0r@_xhU9`YayuIb9Am2HSm?e4 zYEa^^_%L$_FMB3f;a~Y8j)YxI=nRpda-5S?_!4T(SVAOBa zCb#KA0ZRFhn?kd0f9Q&+ejHIYih@ac3?gxGMamsC=$&5fG3VB?GP{MI(l3EsM$!7LPYAh zTgQMapqcH)2&O8WHTtWvRTyAnLXnJHwi!^T6T5)tZVx-gF$^U%;D^yOZgW^ofkLSW zi@?7Cy5et{KHFZxsZx0ex_4J~HfLYjlR+@{I;hzAyx-`0n*nr0j4|$_WVZGvLU>IK zr-86;VkvXWP(OM){uCc7!|&wza`<=`hEeyw_Mp`=R>tmi?|>uje@n|ti>dqHQW+`1 zlg06-@OiCZ%|$3+@?RH!dUjQ7w+lO~_b4{C3g3UDFOdHmhm-s98gI&gfx9$)CZ5A; z&dV9S$v!7KRtGFito{xG9mne$TnS!p3)2q?@83k@nj~q0mUp#5{|pjyYR>YiPDN~z zEG^A1KA9&H@RTnq^t3x`)atlYAyCU!&HUSOG=i60MGU1I9|dYDF9eTJI5(gxt5~(A z<-|Dx1-%=n!HSkP{g60wTaoyTg6t)#WG2nNtjEFN_zbR#=o0K2z7+Inz=adgpI*sr z58jS|^Fss9EbTthtzo{6k2U&TP~2{`35g5vWACf|{#p-0APx_tKwDklpX#_FX>91Z zC|8WA)THWxDYGAmL!x>%K%?KBM;KrYX@k2>x<0a|CgpJKzGD>FG`E%0R_CbJ!YR!- z&wi&pi(3Y2e+ne@S3gF4q5v|b9*q<-(u|Www((usFEUzX+MuH$Sv4?<=gz6C`h%#> zv1R={kOJoyI*l(ZJWST}*E(8M+@au%(x!K+24#9;(Uk?kaq&QDes!!ncSzml{O7o@ ztSQ75FQmhTIJd~jZCyt4y)k45kwswFn;RL)PtSbpFurn5E7GY*6U^+vS1D(Wq*R$U zQPQdF2y22;bWEL_dJPJWz(APHEaW%JhQAotBhUX%wej(|aY259R8Xp6notlJb^bp^ zvX40b)06V^`}`kwLKArmbPvHfR1dJI8bZq7zTMle6mrtS#?b}Pm3*fTBww>RcOySk z5HaM-3o;o?cJ;2&rQcvuo?o072hP#XoBSTE95*zSqV7-P zyU8y_mJqSV2_U94{dw)U+v(}~A<3`Y9<~};BNDJ1%$O%K&gdFM6DXl*dlntCbmN$G zKovNCRU!XU5=$f(&ExkJ83q?bQm=vD1%Rv0Kn9{*f%4p4K*VOK+OmxkJ3?hUi>Nvm@?rO~t;>Vk)~UKM*91PM#dInn`rkgj-J6bUK> z4EAAM@1^6pI)W|XdiMb&0|f+(Yk-ppg6!)C%tm+tVQH3_I%-Jpg=!NRRsj*M3u~pG zt%OBNsz0Acp30YAZ)CA`(#(;ub;X=LTvI76=3e%9@A@5J3dPD=S2eeAK^$FlYjL-8e9;ny-j5 z6o=wMuyLf4VVyy9 z_L zi4uD7BN1ey+gI&I`knDsEKD}rgnA9pzvp4EkYFJ#cDms+$RSLEmwF_kiDq`%-rV}W zr{<$~%^o}wZSKnph`SK}A$9hd7YRZDglWpur?hR*sAVlp&?X7C)ygGutOAFF9`Yr; ztS%usQo3bEO$s~kva`Ku%M~Cev`}UCj13P-IR+NBGr%Dd!srz8j_Tm__Q5%TX8_;0 zZX+Aog1eha4OqSwltwM)SdAN66D6!O)P=+^H9)4(MUGdbmmKzaNp&kU^hiJdD(Xny zT2aP|QR@c>Tl*C$HChPZ)Q=MM4Uw2(=27YaYUeNT8XBA&+;t84Jd9Fmm2I{lW;5*#Hc|1a6exV*I_0mBOs;epGy2 z2Lqz`tqvg#82vs26=RSFrvYk{DP*JIwyf3BQ3n7rs+v=1+ z9RzeSJyE zxX(j7aCz2*i^gfA&C?7=4Gc(a9AUJ%q*NcGTv0;13qn17O*z~!Q zJX!wJ4|pH>*~9Cb;S9(W7$+2DaDwTVT>=30@wa0=n)`)oGN%jMP)mauSbBsJtajQ4 z3c$(<7!~_P@6i!-i1j4hDZa6u++l2h4MPx+ot>vtMQxqR7E&MXy?Kj>!F`EYaA>P; zZ|r2Az^oZW7F4TSNVh1xqB9ffFrAcIoE`{!LqcO|Kp^5Vo$X@$=g#A#!)U;=`i%R zvJa2th_VXEL!=7&R7nlcfWXW%j%QuI(o@6X*}_c-#a1m5i{v3B*!YJMZyXds0f|JMQc9yPQPGNRgG#CHj{#<{!Ykdk`>aU8N0giNF@MV!dR4m8(vD(! zjXxUW)aM8M8GiZ`OYYzYR^;F(pd#uBQj9q0dP5lc$k26_9}t9|{a8BA@Q1#JsehlK zw1$bsPqUDLX_6;|5x9(~!H1&6oP=W9NDU8P&6K16m!cS8SRSX8~_S+C)0O*%uFsnCDFd5}E@BY<0x(`KnD7_ltVwCeVz9FgCMZbG|eo;bu z2>g)k7VmFN6qNdUrSkWqfj$tDO)2Gv--hxjr%P)OyeZ+x<>W`8OoFpAst6Q z5%r9xn~4+_?@N zE-jD*j-kI3`I6Ge!Xxj@AMWL}`w$yz+BG#fJxEEPBHEgnu^%Wvmeyuw+_&i$<^$q5 z{mOn5zf*l6dxqsDm>M7qrp9_v_Ipt}nm;%-)jqO^82Tglg1rBcxd`i>IYFJ9Ts&yB zLRg}r4s|2*j2dEl+|YP#nBK6)eRvL|tc%cL%G@a3M7HRaM;>DyKo_?XLJ7If(aUIP zA0_ki^FilCl_DnxA%2pNkTFyzOGcs;j=4Yjtw^$S;98DEt(J=jy$0uM(k)!7L5PTBN6fw)*^mRBL zA%LlXK4ao{H2TT?MgorLbo#fT@0%HVW+p(Xp%!&KDn_@5P@LIVCsk`6UCSWiXP7Gs zr-o45kYpXUo;`Vnf&wXJ5&;OY3HBU**=!??+gqD-I4v46oKh9Z1;dUKj;>|8ipYed zVt--*!R*&-3P?#TQaQ;buRHe=yrD?of}dK9OSll2RL=KORZcRlU~_(9smiTW$(?_* z_rjIzxnfSq*PdJQFVF49I+*@#g{$Bkbn;DK&mW@63pdfj;LOWwdoKt9b)Q9V_kxgI zPL;Tf2X^uH_NcxM$)`xv8P|ERbMa+-13MSrvYQ{FhXB(&$s}1afdbYmioWO3vO9nG zl*k%2a-}lnheiS5uxCaFb2H;mA_*{MXR7xUm55YGpC#KqPuV)Q4-&65yB*t?<_<=7 zkRr{saV<1*jNWfP#{~+*n`sab{awb^dmym!A}OP825V;YaQBi{<3d@sn;hG`Af1+a z$Ql1QmYyil=>Zim^xr>gfs3id6&p(GuR^jcq3if}{B)v16WF~O0IIut76@HLf$E{c zgG{mU7hC)Ld;2AL%I6mCP}x!(V8o|?vbr3pp`01Wp z^_bYPJ{7kO&Y0M-Ci|NNCy#hGP$a23?goo2#y1IB4jBnxyJKQY0K2RGwvH^9z?kSN z$ST@({8#=0ufbo4Q!T1x6k5E7pO%wxtzod_@-WWfm+i{WLuN4>=un1E$m^-@W=auY zJe;C9Pt=C@IrJ#D6HH@ymoG1rW8n8>*M!rfc+{xWWLGNvxLUSfp*kgrDN|ESfG2E5nn zoP0(SxZ(Lf%1@TcIW<>W02_;it4{=D-c+qV2XdEG)jI+KO&RioQRxGhYZB_s=P|K2%i{B(MbtW65w zgU?8@F?nkGadK-+JwUGPl$;=mRMs~)_qPrX_Ffg`m5Upoi{hlC68&a_-&7J}@-!5T zfvok8VWudWmGhhtqU9g3_SlV2QzE)6+w$^od#AF!TXpb|k3)kPkB9KlU=#+EqVMNq z0@v+VgL#hz%@!g?AxUD$=n>*y&C9CeS80KB=p;lXW;J7>3Q{pu{H+2L&mXd%#u{!Q ze{zKaS1v4UW*bBpRsCEl0~a*kEE=~OXe$bqWX%XWqmI+B70A;?H0B66dPELA~2FijY=cB)nh z7uCUv;KJINo?n!-*Z8$@L*W{tHzvnVIYU;~Z0djWVHL>-RdsJNlVm4T(P~ue6a^MK zZD`Q6k*y1sol6(xpuw79Cp9&S7;pPHveFCq8jMSS$j57?%ttyy8_O$>*J#$6nljT= z?2m+dIzeU%z%v?b6dvLlYnB)8YgaAMPS|W!6Bex7xv0_R*2Yfdf8K5hcT-{9rftp- z=l248&@Rki;6_5N;FlYy5eN=_fVAtt$OAfPfU$tN9=G^=$;2E_1(Yr29$-Y&jcLCS zR}&YtoZDP^jH9I-B3ku?sH3bIs<5M^--}0y;=6DK`K=Nke-ru}YaJhV!i5|Pc6t}( z1E1gOE181ZAZZk*m!PoWS2B^*ejhcR5zX&xQdSUWy0oJ#)Fl=pB*DEDJ{{!Zm$+!kynX?Qg2bkAk!=m%!VOVAQNqeNomvPtVteWR*SsZXTi7@ z%{-L?0h3Sd0g~lTJ8YJiIyVj2h08qKY zV}B)m=$oc!QiO?N?Q<#2j*;Rx!jiVE>wV@n4$cE1O1J1Z_&8Z5e?aCY%S^axyah%= zLAIyNsV~<@IrTjrnkTCPRzlo+lyK;*B!HV*np4C=fEgqd)%>_Ac?*J8b^@LZ#+{1q z|3+t`;tZXprXlPz^n;qO$sopRd4`;?dQxJ~7kE1-M*U`aaas$fxA$TCjQw}(JBM4< z{jFD9`&+vkTL*#8!YLgr>o+=(bZzm2P^=ZlJZ#Y-M36w;iWpT^e^?;F*D)akpn1(<96tZ@C87N3=$#OuGbwD_caU;k@T zQoc_6g&X~0`2fUf#|1dkRS*`R&9TVB{IC+@?8O$@oT$PkKit{g*xEhVs+OyZ^Zkz~ zmUXQPn+c07z(7lIby`6o|UPKd6P&@n~dM=z1yn3S^vvc^>BCl z|KN~^j|*}MZ|odyqDE5ePcytNZ=f)sTO}W?k*~I2s|^~F{KYnAt9{6^HK&SW!=B>u zD0dKP4aJ?6UE=QLtWj~x)Q!?a75POZ!q&c6+K{%U8Wt`a-NvwH!sl4+Jl)8eFkwsz z3u@&Tz6!xp*2yk$HSX7{grsMC52}hgP4c_-{q6P5?Tu<>>&@Gpb*LJN!_;boBb;2; zt6FZ=bZbzIy5Cas9y{V;vMKqvdKpFeV0pi9i!GpQ)^)yBmY95_405x z#rm;S>qC||^V5QO$I4ms6~RT8iNY^f{{yMeyQi`*dfXEaitcOi*YP>+R zgW72*{&9JBg}m+frH21QNnWk#FcOX#Zr7dz67->c*!S*FgG#(%>dNnnVAPxvx9{8;zbEl z9;9TDSgO--6p_R~1;dgUs)LL30mbu$g$+ep(r+Rid=GB1NIH*NCzp*z8*f>E7s(PJ zl9Oj4nN|CJTMNn!kh;Fs?bfc)ifQb#&$G8SqnPq2#BEnEhW6g-92E&AX1%iF8{^iQ zASp$!is@Hn=+x!f=(wHYz<-Kyptb&OZIZ#zT!)jPa8-p|Ba^HiA!kcHf9#BYJ#WgY zK#yTjr6_0ThASK_S!EE^=HUGN3iqW&H(yH@XPp+djP`GoL~7%;WRpx^n6~uojr;_H zzS%G8)7f78$+Z1d2UrydaQ(NP0T`-|GTQQVH*2til$VyDXz`VGnK~~0nzx5Lmqu6{ z?Zj#aHB_Yp@9g$61kDTOxe2z6RCdG)^g1mZ9pJEo zb_?7Nsl8DNl%KG!CU>ppvN9Oc;G4l#`~5Y)b7=W$H!hQk785+_bWtRszPjE$?X8u- zvwKtYOr8=xIG?%g8$}nIB=Uug7gSY(LD)ta!DP{hvqDEs0~s*|VO=3xkiAVMRKyyr z%VBVUm5i$BmrW`L4s;_(T%=Vr7_Lq`J08hZ{ zFKKC7HuuVk;~<{X8TJ-%wy8>KObT$O<`I(h#@^;uX?M!H{G`uHV`q^avi;q6yW!s( zJE&}hXKU_bYq51O29xsCoWD_QCt#4_UI_<0#CE}W4%nitk|?7HKYjJfCZV57$m{=U z$Fl!^ZL@Y{6;5HI*-uJVh*1i7VLrBSNyg#?&9*CB`;hdjizzciH7f+DX#22T}^h-0BM_hcXiId zUM_XCT@1WY+xwm94psG<{WeYwIpV*WH82On_-irg&b{@evyvL`uOe6^@$G9;2@Yi! zdGn(Nx81M8i)ZcE_HS@UFzc!o&M&{S-1R5AZRLq`a;-4cv*G3+JDCg>9wSr$5o*Cq z4u2HOcj0zDRD|K?cdL@#O)tEPdsg_1=KgO$2JXzhb8?uFV|=63lS?m_X?#5g^4M&{ zod|bMFC>6(?$j8Ad3?*nkQNi}oG2z_B8exWVg4LBz8SZun=sNzcy0yS;Lp zW}|+6oseS9fnw7;k$U!Jgq|Kq88ZDLJ^zTGwPbic7GlJjnDmNl>bkyb=vt{ zCouZ|Oz8jh{K?Y2|JUcP?Kt0$wf?nw?V{g=uHn4VJrxIvak_SGhWmdlK3jgWobvy| zljryTUk-t{_{&XtDv9$K#GVoUU*)It|9VDs*Dx2b5&mB?4qdcr$5Pe3eMJWg$va)_ z|HY4TUAj`AOras$e$6gm>znIuE8Fx1+uDCEUSN67UpcK{>HcizD>)X7zn0?;@WJVO z7O|FbT7i|_`?Ul|u93mFQ0eEmZ;aM&$Z1e6{<0(478=K}e#7C8L%_GFTWj;}uaYu* zHaTzB>#YU?-Z417Pwb*;GPtJ?>?87LPuTkV=}Hrrx+0aI&i0{ zb(=ky-cPK-p3g*Ei>@nhN+LG8sFQF`qdXimj#!Qa?gVgHfn7H%nUGyUxVp)F4@OQZ1cHPIkniBKc5xvH2oX>m){ly|=gqci*y7?sjz<}PGWRy(R#OrERp=05*x~kx zEE*Pq&*;(2B_R(L_9z70K?Y`d0{=@;IrkYG_OQb&sd1VH+=4x%14M9afM!~akInv- zIxnraE^Al40W|?tAnOziJv#L27VC6-3j{}9La|J;`D%buoleD{+B013 zu3qccq)(ZUqPTeu@39f$nwpwkit%3)&o4#()<+O0JUiiU-b$F>TKK7$&1cnxtlO!Rn|0cA@ZGJ$FDzwD zSIV~$i(FhBP^RjSJIY1SFIhfrj#db|EYr&s^Ie#0*2km4$*S*bE#U)t)D2~%Fhxu_j;yj4cQQ-ta8Odll+5Yzgj5;+ z6;~WDjMN26!rIRYjA{)@sZhudRJoFRA-WZHy&Nf!<||jkF{2T>(&Wgyw|IN{_Pd_! z{!f{LIOiEYdbBt?WAir$Y9_oP?xMty1?iEN`A1O&A% zPQg0wQizg=vtx%h{_x`CWJI=X)=`LtL&IzZgmi- z2>OIRKvW9QAG8zJsK6yHWC6%c)9GH#=iY>iZ@z}&^YszrVq+}Sr1x4g=GS+HC9&_< zF1K+D)qp{B7fs)3$>9sGw4?8^dfk;_;_GSpY8nR&Mt3$Ui~fCXr2$56?SjfBE4ZJU zOQ^6P+)mSX(Ca8YCL)lD7t-J7Bi#V5?C#z#00a!xPOId`pW{WgzVmvo z`gVT{sX`b!$U;Xs5vn<@@)ZDL(5I%>BoWDT5vbK$RW_;8hBK@kea4J)z)`K&JVs*I zA+@s_I%QJOLt^$wHA0}2JO zrzP)_$H@m7#fR@cG-G{$omB#KWu&nDgohQM+jOX|_Jo^A@>s12Iv?#dPLPq9*i5!q zd!T}MyK#y`La`GR=g`N9p2WP&7%I7WOoAz~JPXxUW+=vsvs6i`EqI0KsnDMU%L&Gau>oS5hNNU<-!608`af_b?$ zHd0cio-u4d)Zd+8M153#dL>1%Z zAX`D5Jk39{Qks6~70WjUY79vLv%}#m!a)@eDz^rIs~{eCLHPA5Yo}zS!&vSVSy69L zvw{Hg4Rc#YO8U=Uj2OINhMu&7DH*ujlnbXQw+gdpc{8lq?)7pJO;x_V-b|g&J(`y4 z-^ZlJVD|(Q?{#5NNl|85R;HYJz9i3=nuco4wLnN04?(>m)M`T5k~~Hq?s{b(q}vGu zp_+RlA|HmB7+22tf}QDckw@)BF5Zss&MGR zYfTtRfK-EVxhIwcD&7(;cvHb;w13v@&8-Dg?`PaEF}8%uJ~N|x5UXT=#X8Q+xFxeU zKSSts>~S1eOf@{@oI5@lZ)d0Q{Ec_Y-5$PU>?oej5B`aAn?W6+ zV8?@3*c9>TY+)f_Xkt`!N`q@_mF_?MRxmJ${`Y#>zef3gJXw1B{CQgcOO^0_{O=tQ z(M_r;@AH3ADMvH-9q50DX8rOn^Ibmv4ZVH6wbDBVAXC9wJ_0iO;tp<5m(`07GKDoV z)gR^TT)2)uF^nNU(f0!N1*W~5f)h**+sxF{sIS>NTJ}M5dR#BLKR(VT?)NL>UC=x! zEhaBsB&E{FO}Ksy`AhK@#Hx|rMKI2Z(B7u0IjpwS+d{JdaKF0O}&QnP#b6P3z_@N z03qVZ0a7(JhGN{!>&u|p4gUvFRu+5!g?eKsJuH2E%mu|-J}h1FSGSmG^hdI~`T{r9 zk85lE=ZgQ>4y=w$I|6AuPOidlK{lpyv(mb5ACs^XJR?=Whr|vaHNGlpj9y-VKDA5R zF-Y{|+|?Am@zXQ|L@h}=pxlpfOFJJ!IDbr+KF%0&`X|eFSe4(Z+f(}p2c=;||4q82 zltz_{Y@Qfhg!#)R;4*)zLS4w8Jx-cA$R){<^%%bgAK(`S2NFS81c8{F-K5+xcr!R5 z$TA#Snyfu&>MR53!Zeg_q$M5G`aYwN=@;y;hedF6u)WzFK=P?YE0X%@ATARSKR0kB z_EP|Y!5sk((d1awm0b@rRq0TOAmmeN_z_rpiqPs1cFrH5$($YgfqLCV05=g?s)IrS zjXy{sdo{yw9aa@f~)_0A^`6CO>Q?t*JziO=4LBcq)k^?fiZUO1`{uf~4T zYMhV)++*v*#}2Z65?J|SEu^(S>u@vSvlZi)He+c>sB%ue4*NBS3zzJ@S%+r$K5xQA zzH1{yCI2zo1OJHIm}M!}=BMjn?E)413q2eqbDHHGoy$g7OUV-RDQ=?_Ynw{SG<{Tg zoV;&b#R=5Lj4d_`?6W<%#qi4_i|C(&s`C~t*d+!;B`W946-i_MSKm!;Drqh zIExvB;RlvI?BVKRJTNpTGO|CM`1}({=vNgo^AxVcDF1cI6{SgecpK#-JnzPCxKz-i znFCn-`9(pKJtPxFaHH%@9;b$12%t+Z1d1PZ&o5b@;U%7lZo=+hw1Q2Ul8t=mUI7W6 z3#g05kGm=+VjVyo7?x(?dvEaP_&L5&MsBGt-2arKgr?LR8Xf2_kgR1UihGXP?82&C z(7$mxUdkIGryI!TxnP=ZVn!v<0!sGy-q?N%f$7Mod z&KZ*-tB0h;$p!C9xhtqMh1R#!m_MB-fT+{Wlrh#BpPu&Q?lxzvNhgdN)hEL{WbRjj z=YUG*mu44|9fuXHtuU3l&cK`yLBu*uv@|^1r;-wDA zj&?i!#!BL{C%Hy`8f!27Yl8&+9BvY*q>eo1>Y;H#0_Yqc4^TzjiYz7oB9}24cBDB! z$&0v}cKZf!gc}<8Gk*q5Cg&M8OvpM6d+1z*oG%zcG3(Y?rU$+WrlT2*;ZA@$mZmIY zxJF-gt?B82DLw#P5A5=pAKY zH$YqXMxT6hb25xQuJliL?92&^Vhh{A9g^}H&PW+CeMHJb<;?sw1Y>4KzO?;?C-5hK zcwmCkY*-%-N-vx{tl?mEIDoV2mpmM0X_8w!8*?ZDl$wh^cQ&Tq;!pyg#Kl7!lk;-M$Kb*e;Weo&-pV(ec zsj}Cz_}m+6L40}m>ebf%&ep*}b$@H)aQ}eyhW6f83@^7~DPuLJjt6sFN_grm`Z00h zrSEN~dkHNiI>v3x{>!j}aTrwjgk2^2GOK0MOJJzj1vDwgQQ;*x3w7D(N$F3rG~oCe zKi^T~6wKi^X00Px5>nWzuzY@i7@~jun9R)u&+VCvQ&hDpPSs|9k*`Bk*vXlhD6z02 z%yp2Oj^+)ccXciR3<3%lP!`T38Ly+SH8KNF4Mph(v~&rgGt0h!0wkeo(JVTLk@_~Z zmK4f>_c(NtNYSiinOYqLV|p7VQ#;ZZl!?}&+s;aF|aR)ODggY zSWT$03F+}^6)>Ed9-N^Z$%Q1~j&YTOL0shtJKs>u3{}Rq7yg^XGYY!Hl%%2UEt+rS zv?>z{RJ$qVRM2i*R(0`#lfat3 z#URL!gpOzW!%=a-njdnCkPsIZGGjUnmcmXw-YtE*?#qzB&6pfa|KgbG!DKmsHs5bR zlWzU}NWok7PaBAg6F^56wqA&>|~hD;598m-8gz31|9ez zq9BA7pI{cWy51DUEH_<^@ApWXI_7xc1YW zzQ`atuyv1ZMDPdk=j}d!>(odDSF}d&mAgB8uXnY|E%Ay=C%v-9X!emE*Zhz z-*UcR8vU`$V>uE;VUx+PU9|)w=cq6W)UkzO$=*uLbwqS2379!*I%+*m#&?=L05<=Y z)tpeV(;nvwB5U;HZjuu})l-;F%fpYIPm)LsA|a&uZgf zG!42pOgjw<@KOB6_i1Kn>_?%N-Ymeu!Pb7IWVyL+Lf-yLrhgn@M5YdAc7|{o%uZTc z4Spbv@+M_JM^|>`g1w!Y4Kt^`$hT`-nK1w(*x1oDq!%|}(5gfke+sXIXZ8vY+~dcx zZjt-EGQ?roYD2<16m<3OeLi$EGp2zZHyY*>*Ij?mm08ZBj^uT^o0%EkT;56lFs1H0 zGkDGpGIx5jdn9uls@tkrJm7Vovr~+q7AQQwg&mUCY-eD$i^L6Pl46);bA+JOuE!4K$K`8oG~O(+XrlSVuI2A|WJU`4TFE{nV>1o?MH?cE z%$F=u`wKR4X0FJ{s9Y_!RJr+CT5(W@!e_+U1YYveMlWomd<_pRV*oeF=WBCwI+$%3 zOGua&kNDEGg-EQMUaCj8WMzcHc7R87a}My}sj*<1?IB3AZ$s|)$umE-jM_%SI=0}s zaUC+G>m2T9s8iP}B{yU^AGYUDI3z&V3`&8c3>}_sd8BzY3F2H#Wz92SkTUTdQjJGnEU<15{hjW$&VVd$k?Z|IS{U){=V3QwR+mwpII41m;vYy{RC8 zrW9p8G0Ba+HUk~wr#_ENwn#V;9JlsZmbXYE-heZ0)F889dR>c$GaFJFK^l?aa1kBe z@s;g{Fl*>C!fg&>$G-mE5Ln6zLtN(qCC%*m+r9Mxy>BYk)5x&hN)X;O(&WaYz3Kxi>QuOkPO<)C3J{K{YF%p5qQOybK>= z;`~2V7O7=@nBo0~Z%5>RUwr<&oXY?6Wbyg(eg2;ihqv|neg2WtAmkYS3~#J5eNvP z+vAmqFP+p5yPI!d1CeX2@qMw*JjQa3G#W8j)(|UzkcMDk1Yckx>iW`T*?&31LGIMV#O& zFXx03;(qONBpJtQn`;oYLA_f6H*{>0@H2@&@PFOPen9u*Zz-=`2o%ezI!RON9qp-{ z)rodk^gg8b&);fM*TLp?dqnqm)Xcr}w2B4rLP%u0aD+l-Rn(1a1b3bpHLhTMj$7Nk z$=%TtY~^UsVKyx#(g`kK8TGh=~kDm?M@x)?E8-0UJV8}5RZ_4y0 zwg(y*O*}uNRULop`TgaOFFBaT@8YZ5y;hLXjpDb&HTR}Rk@_A%M&_xmoMI1{*FSU1bku9P6_fwFr3=i5b1-m@|u6g4^?k z8xSn_EC5RmFvB7pJZ4rY81$>52YG4=(VyUT?ALDz!+2ou!DArN;-S_?+2MZesMT2A zfG`Xn-ZgPJG6po+$9Xx~S#K*-FZmPi`R(J@px#JU#g$#IqYLrX7)nOH?>+cV^^NeP z&Q^-czw{f0(j@x7TD^vBtSD6`GMeC(!;e%=4b}fGJzsvhxRlcWJ$?T4UjH`|uQ$=) zUjO$k=>N2==7De*WPyU_22q>+vsyo)+N;Ny<-OAGG;$D>cA-naL!22%oXkStsGwd? z20gfG?v)S^j}6~Nyr()2-F&8Ug_MQDnWHRe)*Ce&un@5i#5bJ6hTcCrPcCac926fK zEmR7rCr4Mwdb{3j;2)eF2t#e#IW#^(sZ%W8Fco*F?eiW7Ivb z9d%H41l%e)0$SL|&$Xj&?F|1(N@xB4#md40|Bxs1-N6Dfyy7yt_;l%q#f7PPDKGC~ zgy$8i-(u*FfWv9^bljJ78}rG}l5?7felwq}&nG)bLEY;kZZ-{b6J_NUYC`nr6^+ei zS>HfMCc(Jq<-ja4Ft|YnWSlL@mMq-C1(RTx%0K++hq>|(KP*i>Vn=pD5I%lyx8^$^ z;ipso9i^_|YSa?~hltQ`;I_T|bm7^;vnR{*CxcdN{-S;|W%AWy!kA=}A&ci|DD@?| z7~7b|>)Iaxp>|qRI%1lEW@mubf(9O~2$0wM@`(FAKEv!Ay%hq+|IH+|OMM-(2NRxfREOv52$#!8ENpf+<40^{P5TNHg8Czp6ikRIkowR49&;hxJRR+5*k&M`JVBZYeKW;&)WSEdRYB^}D#Wv4(AL8N!16~GQM ziTk5xAu^T{E&RU4n&6-SFd4-m@I?0x-?L5vkHv{nG0;O~T)TPR{Da>yC;;0U>w-ou zBwV$EkesmDa7pSgiJ^h(7bI+#(fBpCEN9odXdL4vg_s%evgRK`lRD?~8U!QstThRt zsh2T6Vi$K9iHJrG2wR`gPt8j!mxVm(QzKjlYM_&1h<>` zCCDyVYMG(IuKS2xayNC55W>vK&%`W2r>i*Uq;B#jWdzb1!<*}GD@^$!HYIPh&ao`H zn7vffam3g$Ej-{ljc%_2kz3t=MwvQp(0((nIfg4~W%O8WIto}L*b7zW+GK)DKsbtg zkl%S&uOfY!IPUf9*p>R>=%qiXtXB@IJ6rFzc6bpQx&A@>q--uHV!8B@n>hp~UrGPq zzv@9*)JkDtgo;gNI})b1``f#f>Q1?IP}!eNcBYcQ`8(Z37s#L~so%4&?OU)8({9`m zmTVW}k3gK-pwn^id-rpZWsyrJmeZs+8W$lB<`9_qW$~ zD+gnZ7go z5$EB4Zeo4B&*T`(Xh&#uEHg%zv_BgL+v#%vS`6R_(+*B5l+a8 zq|@Bhmh`R$7!_k84n1HTzfilbwHp&kp{H z`|u;NCZ8%!pxFteAlplNG~d2(+~`v?d}>Rmd1{S-N!~nOB&*;kDAkv8F$-a8>xB3f zeh_Wmrjw0MKFp~UBqmbgGX|xZHc+P(}udC)LeoknlaBBd5iNny>Im-!;Hv{i{`Mahi) zP*@u=17jP;3Q?m?c=|^GD?yD|(ThRvOiIU(y`JF}p>z&*pkxfiq=5sOuG0q%-E~3jM$gs!&;E zYdGKIX=yc;RMLSuVU=vuY!V(|zcs>wd@9dIO;EO>DpXv=C^W{<_v&87;S|jlyAN+A z$4?A>l%?^O zzh!q*P;nkuNN*=RB6fc?$m1EHShWpPSe$6+5HjS*^Fj_rwR;7>l2N$ZxiIqdhjya` z>j1Ue2W%7-Gfz*Q7)O4*q%@DL`Ow2u%P(spS8f5d!U;ln$rBLKg^x{4q7{ezoL+Ud;N~?*R}F zTi2N&!*!0AbHO{`HNOe5Zu_@1TtGo7K|+`QFqzJ*cg`|ey3%7NMIft(Yi1=lWl8md zspcMp#e;?n6~{vk3~u2JQiiT2yKu{=2u6F0TZjN|bw;h4U9!XJDeXtlt+V@AEbT{I z(NGi8GuZSEb|ZTgsHe4H=Qt|y+X9*T4L+TGq(q!Cdr?S$lbhU){d6fzD)UoSeh7YDkeipY@VdQne!wJcFM z0W&HGh#%V(z*QD^z|L1wKYxpE{bq!x)j)XI0 z+M~)hTR=nog;2OJkYVq>wy9Hs=x82*l51hqH|}rh0cDK<9WTZ5-l*;|h@{0&_YF9bD&n8i_C@MwxR71zw}DCD}}K258S36l$=BJ=AH-DbpC;Z)CzD z3H~cUTR6>-#w>;9?}rF1zl|Kuhi!8KC+C|X8=Xt!zX-t`w#E6CMV_08q^lmlGw*jk7ZOwpknr4>{xiUI*;#h!OFNADQ%@LOo3Z8;BBhZ-R038Lu$$ZAW zrm#0uj{;XEmeN?#j=7%r@FtbIxRACaQ9Rq$>}AF=+40ZdPug@rdzkkRYOxKYWH zTAwNQy|BQL+6Fu-uOx?H4|W_F^k{c7e_ztes&heqFO#;F9&_*x#mS~UNDF$E&}Yec zABm$=m*@8q0ibssefzDm8q1JgG%*w$2BnoyF|IK(xtQJ**OmmA+}-s5vG?ZfZ5>DY zX#V!6IQBfFfD}oHjF;b~Y2_zNvWHJ($ycH#$>Yf&5CM^hKmdb9OEkHk{l0H4y_^LL z7h6t*I23SBFV)pm)z#Hi)ySziC-faapI-TU`?f77`}`(oyM5c1dyHA>ntQj<5}wAc zAxMSP)3+$FB(1&I#RO>G2qP-uqf^(A${7SF{Ta|Nbmh~E_`9@UzXV-Tl#5aDTj;LnvIR9>4%5!BY5kSN>yL3}(@ znPSo4Ld9bY?NmtHHKR|?!>Rm2>pFRW4VV5@l!rK093 z&&9$ya7*fv9pv$Qmd7X9QZm;wSOe%8Q>aEl&Hh0Jk2V3=PtFM-2ts`G0b)}Fi3h9hW;_?Fm>%%SRCbXW) z<|17Hah)fPZ`-P(OvEH5>+ZdL5sVZqO;v?wNoxQoLOIg9HlDN%O50BR5(;t2oG&O; za$0&-t;t?q<`FIZ*~J;z_`<~~=uLojIs|Mw2)qD%Zo9ACXl6*`KhPdbbHdDoWC%)d zifXi#TqNS?4=@<)TVJ=^;h7_Gzc52%dZ++wD3A@yR2AO}jq@vhWvIdLOx3f}w!&&x z5K}goc!i50!S%)>h!ww(#A>+GsqY1fY>I)OPZJ7|xk#1;RWyHDCi)rp$3~oE=J(=q z9+lq`Tbr5{G!LW4lz)sUZFSM9P5&NVLl4U$AhF7qHlxq5VLO41=B_(C`U6o~q3>gv zn5l`p6<>A4alQj*yvnnZQ{Kpn!fxr`p>b3JQIYV6M76;8(w;=iRAlbz{n^ZIE5tlQ zS48g8F12HGqT*HEU^q(ply5RxA^R{dB4*ZaCW$_0JMrfx?U2@hzF1jimOw}=nQ?BA z;gse%Jc-CrVH!rmm-JoL@DljfE~G^q4l!CE6)b{@(pa5yr>hLh6Pi&|z{Wa7hhY(e0NV>&u)Z^1?*QGAgs_e2{ zRS%YRw~gi#%|tXP1eT46-ND7;0$q|5=`=~mVaZjG;jQ9-|JT?PE!b7N_737hOUscJ zfeB6Ehcrd-OB>t4ZOH)1H+Dtz|2|K zBuRtV5sC}HY{Hbl)#H+OsC-HH5n(0wudtOAdfQ8=Dh;>WnMCyBU9ehOm#EQ#HBm#s zue${mlhJyBM(hO=JSy8?A+Vh&NuW0bIP@{u)lNay=;%`i^hFA2mpXm!BFkRZ>pX$( zCvUwgJ{cT*oB+J*BNqs1mS#ltcNKAFbkKn*UUe(H4vr5|6Oxf*6CV+iXi;5VbgIe+ zdt`qy7*w#%c)4#YfP34&z1VUIFSDFACkvdk=FMr_p-tG7IOO*jxIxo_Jx#TP%Vk(Buh>IwoWAl{pr|13CS4rD4*WQuz`+Ka&I0p1* zUGFey2jL;!j;$MuKCbAr)^EeU=(X9RP6Y-kOT6Lmr6cXO&%oDNC0-4mHo`j^NQ630 zSS|}*imeFJWl15zMZy6PTCDEiWdN5i!wgo z_VG&?`eDk!Rrjylg74wgr(*$+*pMhBDp(Q`0$YHuFFa8atwzlO z!nJN0;V`3FMj@+{N97= #rWM!_aTDxgMKg6f3kYmCA&?VKu=q$!C(+6jem76O%p z=}D<#4cQ+SnHFgFCD>3V$msL(ZSla3SVWutHH9`=pA@@mK-z+^fRB%~7sLfl9I&>2 zY7>e1YrWjHF(eLNQNLWHp9CWWJ#@w8AWW%KypNA7KtvkJ(3nTS<&DbnC0#$ba_on5 zwa`scq$CYsL@%Of&%n`%l65mNOrcj@F$oVHFN?1er2&$U0t>BjtsQjk zp*0pVgLwi7pPGXp=0bnb&>5P}&@O}r@U?D$W(R3c-I^xeaClwU5QMec+4U5YDs4_e8c;%TFKd2tK^~cJZ>f#c-*3EFsiDwME+$ zA6jYM&!Xen<-O{^`EkPfwxX!>BzmaxL42u-0Fv2Io`uJDEBmfWk0rIJaK~Ci(5`|V zqyi5L*g9-S_%}PvR-9B1IhNd(zU|1#*c}u|Z11JcXwrC^w^?i2kOFw9n%~NrUd$K8 z6^gZ_3-#{W(f%N38DnN$IcUU!^7Rhd4n4UdQHp3{X&@1jx$&SUZ&-iTUm0J)f>*7d zqX1h43)JqDyJ_)WKPr@|mMdrISQ|0JS*jvobym^)sE6!A&d`4XLm3}qnqNY_>_x98 z0Cp`*9JrUgW$as#9raky!3qt+M*?&~v;f5-kP8lJ*nf-Y!^7fWyT@#eqf?7G)3cMU z+oJI!eHbz-^?Uz)&^}N}8q-fPw-{a)$h~#}dV!jcMOf}-WD=^}VMdR8t?3;KaOnB; zoslztD%*CKyR2C|l3qyyzu`&KJ;l|n$k76Yd@KtetMmU)`*Y;=LMkk@Gg@4{(5zVo z7Ag{)@>$DLS*=sMfl-UoWc^tzwM|?gf@E(KM7N2#RDf^LCpu*Ag=~8A6`({sI`x-7 zB?#;)qBs01&LJt(o&vF&ffH1`+qci*wTY=x>52)Vzg2e#$EKO=%nVdp)6VapNh#`5 z-d-%ib7+!k$Oq=_r{~l&Q3@}uO#mgLAaS5Y;6pu}Xe`VCiQw>X;9jAM?TLUU z?J-JDU`z#;`d%&4_46D_0vdZ;+2IspStf=7P%ihk7b@mcsL+e-cZv7W7?*c5a~u6! z;p0YT`ssY9IKO?a0mvw~(xD6kE8@vLgsfM$n4W zgw)XJmkCcob^Q{H=uDPgmjz2s(QCCwfl|TEYx@GJAS6VG2g$o+ zfD%RfraLw2;0XEu+vjPoN%<8^c&O#Qm6qyDP@M6L&e19YBlHp7nD%R@uh{yf=_~Of zDZ^Vc*-3{YD6UFgN$=C!Ev2Ge(6!Ka>@3V==XU5gGfe4RjuGFyX@Q4SHZ`%jh8MofvvXEeP&TTQx%G)3~ zSofW?9BZ}SqSB~nql{gIkwX7=P3TYigW-C>lm3&jTEw~`YYJF=Os&@F-y!nEj=Lrl z+OBTNFA%IhfU;G==1%CLxW!zc>2IU}Eh8H-++}1l95GGcF)Qw_krgXU!K`Q_X`Ii& z?b~qeci~2O(747Z02qANw}zitadgBdYf+TU$@L=RB~P7eu?&NtB9kaoT>$GD%47aw zItV2E4;9O z_|cQ^ALnW7HmkahCCwe%hvPTt9cP@zHMd#$_Q^`Cle~{m ztv4I%T3gW@8ti3Ebz!F`Y!-eMkHEI!m)}5^?1diHBu{PCu{*2@p;f4-0cgqm)*XQ@P7^cTrIev;c+{Z zDs~qEsr($NG}MsZS}XbOXuz4w~E@mxm4U2m**DxmifFo~VHKl!>i-~J|A zL;W!d3gXX+_^`W*Kuow@4>JWB?G=NHk-@BT^}KU{S_j*qJ(TfD-ksp699?xHEO?8L zE)Z&NqaT$`-voOUA-vlY?6cDE9X~8{gljv17}JFIlgB<4{x8PSdgPF#BUuxO^3^u7pF zFKH`aINK^cS36&#uIj`NJ2XdIjKnPi#$>IYCRyTCEr@yM{(v2~+kb=skMVgB5oe3; z6zN5du{m6(5Tlw*b?KOxO&j~r=yUp=yKLCEuJ&6JdBe_4gh=E=UO8) zkE2eI-6`_*BXK<2z+tkuGX^nrpaFbHR4FjRZ@@4jdjUAlF@n&Ho?_L4M?vqMr^^q` zAmzMgafi(lzqC2YUJqN?ta#J^EdVv!3<|442T!cBp<0%>bZ`2V6$LV*g{j@N$UZI3l21^ZrdmzD+8b(v+X#g_0wief%K=b2slK-sKas*K5T)_iYx2C$|> zm&&?CELoncu(vM|IBX{A&}3RELL40IVy8wb(!x~^V{nFn8>e)2cXOoaZ)W&X$$Vdr zb7TeIDfE2hrcC4}86hW@t4wiCwMCK_n1Rnx4S&_1f-i1S!6YWR7b<4%T{YdZQD#U2 zamdABXdpVG>0(CrPd`73>y{ao^>p#J7*VY)o21h8&PtkjwMAvb^=7x`oGnREMsg2Y ze|35zNdrdzsQNDx-tfLk1t~RIH)RB2P}NH=!#aOkI|fXEo|R^~8V7HK2Jz|W;qs*_nL%m4;ae^rHYM^p z71h>oU99z$IznI2U@^)$@+FL6`XNPIDux%hp_ zqibr(R_e4nJcZ}+9BHG-!oHvCmCgO2$(kJ#(q_LlB|3S#J#k-P+nw=X+l{hr$#Gbs zQ9w6SWmO`Aghr^dCw;2K_qa@KZ`6f2=@nrAdu*XnJ|8nWKzS(yp;c*(PFHE~VM!R4 za96;AzFb>c1#y(06EpHoBpJG`;7+!0s9B5Ea&yvDP;m3%H81ynfKuX1KE9iV=}(?n zc(4CfFB8pSrMqt?^ueBn0@-yNHi`9so*qRiAxVRGvSB3!?|u`?VcAeZ0(rwcY`24p-Gve;9y%fck)Qp%1Lun!?{_qtJ?wYU#P8*Ydv20TwDo!OnYEPGKYfKOmmRl6SIw@}< zuOQW69xWT(`HcK7z=#^0BqG~5v6q3R9YZ+6kxaVhP~cf4-;vwveJqEf=$b~+%OL{w z_2V`y{7My7eTgpW60O~EnlJPnXB{{Ws1ORko|gs0)-O||nL1XVHtUhF4vc@Z^hfKR z7nhF?jz?JSkLN)I+V3C(RUL>IZj}@trZ4m&n9fq#!jOf@dqGM;jSxbA;hE_zAjkNW z(o0JM5{Jo@B_U>nK!~D(%VT;TPi(Mpk3F#v3EPl|zGNcyTMmWpaYFm@_Q2mB=-bFh zuy#n_G{f?XFrKz38mRK*ejswxOgI4pQ8s`PIwY6CB$EFaBz8cKx3Nghzc9}cf(BM@ z%CqO3QDO`4QF06}?GZs5I_5Yig=%S!(ygP|sb8I7d{X_Xp3)gB7$|j0xKE%j%|2!R z+lj${Z$hSI#+G*w=q}P?mP|9D#_OR_J556@m)awZVhttXF#^15*~^I);0j6N@|eIk z#wdY5lrIn>k_llav%{-*(3lg+Vlp83HW6}}c#{MM)TBN@ITw_?8x?p?^MOQlZFSOj z*^zs~T%Q~y(L_nKOcn;|79bV@M{u27`CY{;T9tj@XgumjR(OqRq~ln6l9VNH%LQwy zVw7Yn8gEblMA`cEw83KPd-8?t;<_uL`7shsO!rWQP5V{s>`6=kTeJ6Cp+@xfc+;RCv1Q z7l+w&@El9A3NU7+r1GjLN0vypn56q4?h+v33?^|K+Ng%(#*55CSFvB0iD76&tD{D= zFuc*2(0T=hcZf}yfFRA*UItw{#+E=95IfbCXtbivCEg_^n5QBSfFDpH!=P3YUwP3iu)-F}Ry1aV?0BqO^Hku)11$fl)X zHYgMls)c}d7BRHf&VqKaY6co~X2EcZ!xdeEqJ!8Le8#%Q^2XT;RVb1&ddB=x!uUL} zvp&>S+Z$>+es?Jxq>Mi>3FbfJ^##phnKR~R9yWC@Dlu#xf5rWzwga+~2H6IfT*amB8@yLDwX{ zae4}GkeWcBe$BPyXW>Ov7`Z1uK({scCVCos5okk{Z-GEk z#Ogyq0Xu=@xBc#pU`!l@>+PFLj@5-xpX2WaP&9Y#7+7P<;|vGRY7?&Y_tB#3nSPsGMD6rw{-GDdKGyl(hPHvx^1Wi~nU!AlMw%gmI3 zDkC>8Me}tZ&T!2&edR`_r3k&Xsgg(5b`>EMsl;o{RVRK3Q6h&u=jsHEG7fc4fYOjs zwakF9U>K`y&oRR5AtgnXHZNo(T6dVj%%lf$syl><$Z>@Wh`JB{OHwCk8Gm1T$=!lD zMTHbt;#@M5G_{<8OznyjAW-xD68|V$Gqh4tVUtDQRt;S+wZF?$SBId>)^{!ILrkB2 zt$G#aGb%Z8vfU+pO=llpgH-o{H~ZH(AVSm1H5QK+aLSd{f7oqho3PhEcNT5Q82zG> zGg^dXoGC|Nw_H$N#Hs})7c~9K)RU~5gF4C;*=j*H=F-+(&`cy6r(+WgE1YX~2p&$| z-mHwsfi*IxYMxK!TN!RzpB{f=G)Uhly-E$fmyVbd#Yf3OXS%7|5vFPxWGd8{SXH}| zWruVuWey?|Y~ZWUPS-C%>C|rjI31tTNuL3XSQIqBvh0T~_D~`hWR&vmTXmY$%IkNw zswCTsbOYrsBn5YLu9;jsX~egTz%v`P-HSI}pIMwvqHAvRbc(L9&kKj75oV>SOp7CB zt(7cXJV>BYth3o8y79T$t)6g1dfq79k!)o%?f^K-1BpdYDm!nx;uzx4;yd5qPnlbLiIn|t~TE*nnV=Iy8d3#MtzB_>erJ}oxZ>Eo(Nq& zZrw7dbOKxStv0C|lB?@)cb_69Xv%KJAjh)6uP`ODA>(zrJ<6Pw^l%~2o5YW;Z^y4bM<5(I-MWIeJ2IIM!ck6DADp<@G6d3(Tg zkU~o52fJEAeA10===SD|u6u<+pUUP>XR+yTi&x&Q>UzJSYg=N2Ls~=?w#Uij6D$4` zDZo=g$aF$uXciZ2W?A6HCL&e_d8bK{9m^OVx~z;P?FmI3RrTA^C`b&^N#nkkMkA{? zl}dccuCgRuf*c0E!o0}Cpckd7GL*24!omxOh`al+aG|xQI8=ZK=3=B-0+Jr=4F-pd z_rXdKtMCQW#z&ZR78M&t=v9nb3Q%j-7l#9AfB7L}(k}XR_)xy$MCZpM@I>aM$9ZYO zV}v-MbNLrNaRe6h3r1bCTFDerY$Z_tBUoh7c*&@OCnW@=8OH3b=1P_6Oq#{Zb&ydW zBhODEW@G^P_jZo#W#^~{=te`2z3T-@4skM$H3S`GKx#mZ;iBGLTzO-Mb^Ioq5*5=? zId5XP*c4D*{+P)Jas>n%B`zn4B&-yd*!@r+T;X#KZw!9L#BNFcCFT60|MtAQm?44l zVO6kGp=Inbp-22JbD<&JDuXeI0_!G0GP)1qz?WK+LSZc4J<{bBM*t2*p9bX`2% zEs&J8#t5PknA&4xk0;ij&fuk-$HpD7vYSzSzRT8ERH73#N=2!HVm6@IsiMi_)K+ay z*MHB^$36A5f6+xW8*-Wp*u_2~XK@*q=Jfgb_SKu~kxz9|mkFkRP5Xwb*)sR`T6JbJ zhnDfRSbuS^mDGV0^WP*`CpxZq?@b!5SpEeXxiextpD@C00^TWBX6NB+q+G#9!I-&}C{0*O>O}F`Zi{Q1NruJfeCAk;8jY_D(Ps^{Yfm_$>Jr;aRf>SZ_&Pz2 z$~(7YB`heBI;fe4ZXVU^-By63lB`;#9s1(co1r@fcsak_xhNW0)_H6u^neuHpxQhP&9|#2Z8s z&})cJL|qN_ZhftKtJW4)x=u=wC>lk93y0`xYY8~_cnBg``pFfp9bQr>-j>v}T9APu zXO{=qqmJ+OVNTZ^bhxx5w+!zU-*KZqI-Z|uP+eZP<{wbt}$=v1D zdp!b%A2Wb5>*E#?TuQ==LHGzq_@iQmi2XwD1(E!9VvOG7>mwLH@DDsfySNYpIe`1! zi{c)e!}Nwr)!L&@7gx#X+9R;#(6fA4ikQ+by;+c*G3g)NmGKIBd*GuC#e&%rkxlO< zrF+_!=lsKZ>C1Z7yCR4^9y76^!t~8Imbx!3%7-m1K#@(g?$%y8UQ^eNKWyM5cV7=^ zJ@-v|YcctOT=VhRm1z(4c;J&t2|Z<4#oD*)y3DQ^Z;;}`G}QEzMpeIQI|{Q80gl?`3P2-hc- zG=^UiCNV-l#j{yofl6M%?xoMdOxV7U`?$ z8g*{($69eIQHd)3Q8)a!YW%aW8ggUZKg+Taq=d@Y&E0*xfg8B2ex=yY9N2v^r>HD& zS=XyRoV&20MapP*4d03~bbX2Lu7K3eq`4z#AFfnLgOtRvR8!Z!kl?ZvUutV^M-O5t zWd04p-ByVx!@~n_Q04&Rj}qUrIzsskrF|G-3oKLH{r2)Tf7>B5cGdAoB_c z=TYlXf35$TIqGO8CGf1qb$|p&jyaDzIL7(_0;DrkTHM~FHkMe2g4w7AZ+Dh zoQ?)dKV;Kn*gciIhEM??RW5LZz=TfaW6L@=6xzrRJGB%WOJ#@tPzBp%28t-R*^$2w zMnn+UN}zCeKMx$i!=!$l0}$2hb^U+*YzksJMco=gU`=rn#<)>w zb>LJ*S%Q$wAvY92{^o+v&xsqH2-ULf&RIe&rF4?PRZpSS0ihd(If!5RspG68FapIB zJ_#6gR!rwAS;H_VQlhhO9OV=kU2kO_qq?P^jQ%RsL4$!qN4?b1RXyt52)pZOhzk;$ zPo#$fl*$a0*oak7KA;NdreGk}V8m5VEqqbTrpWP0MCGbiVqJ3yDJ6B+peml%=g24a z97@e5LwLnS*?h}t(RRHoU7qS|WkVk_7l;3ji-XU0f=fX)_hLTeu2=!Fcg=a!)#sAy?x0ytgIBM5Wyh)WJ+oUyRdo^OCgm@Ci6rxC+dK&{WzO< zp&i;#*T1rL+%l$o3%hJFMRhu^C(>GbvjJMfeXZqI@NZ(G)npA1rd;mf%pRUaM&bg} zWpx=VaxE5l!7iHe5gXvmy(?mufF~lF^B2zq8a#3CL_>XYdJ%_pA4@f2%kN4WW%S5^ zNpa5E(Z1GLDaGSEgLH*w(HHAzgxEbzj&Oz(6Eo*XKYx zq9pf%A1}rI?{%@=x7-SG_o^Uk_26iDDV15*A?ssuvVjp|V)i-$SA`vS3 z-RK;QU7Bq^HGVyM*z=X9h>8?FGqWqtZFhY8V%PM~=-i49>Bh8Kf-#x+Uky#(*n#i|LyWbQD7u#K(w386xxUj~Y+_?VyQDbOILxpNi25eN z@M1BX4<qq)GXX!8 zWur5jM7wZ)ML~c~d?~JtHxROeTpo^q;)rGfABf!GlE9VTKp*RDe-rOait>4K=Nr9_ z5c1P@gSbW$t3WdGPUI%QtCI=a+63V?B7R^PSH+|ncI_qJU0hIHEdNe zw5#~>F{KG&{>3i5;Jm zTlJVZNDl=??w*akzBdejX*|YLQcNb)cN_Y7_Vc#1RQnL}FSac}3Mr;%AVEhEYRVYD z(oxb{ZFjW~Qy9upOQ6x^W^(sV*dk2GLD_UTn_UyMS=(i(f0xoh6=LiV7(5_&^;jx| zg4uQ_Yk4nQy%C%>kt@Vedj4k2Mh3jc?y&d?CdCA|TY=If6wHlioMxPO=m|(D!e(%d z#|G`FVwU4qjP0}v7PG|*jf&8I&^&wiPJ-v00R$|Se|pJ*&<z?}>H$5%*?4%5qx+FW2qzKF9Sd$j5*Pxe;QWFZvhb>AMh_vcnQHDWNxl z;5y#v_(J;EDPdD^SR3OJ;Og?urCnM;BobTD!+<=*EB5w^Z`F%2!yqSgJk{XBA{iPZ z3pq;dCH7i^l%X>^nm?W+JY4Wn8VkDT}{q$X%Wi33NpMtEeFD3+j>6Z$S3 z|3+tkkhKU-*St@)3^#;`Gg6)_0WOV+f|Qi`YvLmfBss9SjFu5RlPP+6mCTE7o(vZ#obGQdx!x z4e`o`!}+LbloLAa64?G|yf`~=2)1;!!IoG5sds#Dva^#M>)l=#cV6SNB1#3HJc)8G zYaP1K3!jJ8e3R}>QRsWVm(8|qLCwHP%T>DfAqJD_PEopZ9GstT2(PdOj83mrMIvF9 zg31DfTD6dB8^~4>R{KJNqJf32Tj^uopN)sRxN#265JO1)LEk44A0nx-NDW2|8rIO^ zD2Q0vwvLJZ;Txq~XbXr@?b2y+ArY+usEh$Y9w(4HSgTH#75L&AR~Jf5l@pK(DzVJ6 zx~dh3P|EOdak;DKfb7mfLCN&G1W=s^aWA8M5aEGnXywWvye*eeu>VQ8Io3p)S^tI% zNRUM10i+pMHJ9GDykvmA!b1R6YqU*(g5>hCNUZAKX%{Ap!TcTKG8JHJNd6J?0_Xwf zcz1Aw$7ecb=%@SX@{BM`$(!k5J`bGD zP})6-WW{OQ;A~{pvt%&4gaJn=gv2$#WP+C1`%^u3C#+79@I>Fjz+Jsd18PYS_~=be z*yA#gp7V2om4fSE*X{SZ@ROT*>?h#KtYz42IQ!kk)-`XJ{qiw=g_Kvt6>+^XH|?uLCEjE%0&4jnVTuf^$`0X(6PP1-rPV=O zl=PelQC@jXQyrRAqv&0=tl4}*_Z6;#Qkjkl5^N;7q`D(pHnn}8WMeNGCPMpqCIX5K zLgjRZy&bgFQQ_js`4Abhq%USBO@{uSjo=gJPP&R#E1j_>K^63wIzg=sx7!;DBdF>E zW=RkUsiDDk8v=?OMF4DjAR*cb{H_M$#S96udi`Pd9rkoKum&lkk-2+ya>aQL-8EZc zE{&m-K+%H;B@uC_!+v*a?nmu*W~ku4a1OaLL{4>NsOfPNgB^xk5oUJFpm@|+y?1hB z0>;;LjCuuk9NoEyvXt*eY>7?|oZJM;-t1%wo@NLL*!z)P23D!z`4|B7LRiN3IiukTkSRgHU+8v%E{}`6r{8bCP7OId*uRF!9 za!<(y{cUQ6YcnxKdupB_Ix={!1UeTItnWSkh|VSpH4J_FQH zr@}oADN-BTJ%0S3_nsc#dwfD~T8n8|K3C`fRE9TUt0~ zODRKLi8%$-kRm~Dyw4_Fg^Thr)Jx_B;I1+&g9hk&nUP)@tAV8MEFyh(eM%x6jGeA30b!Wo zmFq;-ZbBg0LcuU`O3(`_4U)C&^7T#=0 z$fS}O4>Fm*zEE9Cz$WYyeo48Y5pAoa=+o6w6kBDQFy@OX62vlAh>5;+fup@egKlVW zL9w6oIghrX<-rz@-{NYI)zHqnpTM{yXO;dOjl`Ne-hfr!s?XGl>4YGd75CLQ$A9V; zT;yu~790ndHQR7WlgmllY%hCj)QP+HOmylXHgD1Qd8m(Irp2s7>&)iOxJ7dFn%pAF zq-oWq8|~{mPt0(qE2jq+f=?YJS(Kx=cU+0xPfdCW(!?;TLushD7!8mo8QVy2A6(Dr zl;YtyNm|F5UHQm>{%qs}I1A1Oa9kk1lJy*G+{Jh#yCvyCnz@UvL|F9HQC7jrzT*Iu zJE!DOOu&KGnY0*=5Ts~&K&5miJ0O`w6%lGY7wDorK+Gb5O>avC^bxaWHYjb$i716W z?1E%L!P?K=`DdV({_TVN&{|tE6EKc#GFK8W|;@Sk+HpDY0VxR^*CDir-NoOT^iM*BL z+%tGd6gVhldTsunNTOc{X+QWD*_nzQ<=|?YneOc!jW(x})!m~}W%jGUXzF(%VvHry zm~*d_&``c~KpbwWpfShR4;`->ah(LqU4_+9mqNdt#2cZ(hkgdsC({|WGiSh-)dN+6 zETxic_p*_rDdD3E2t_>*s~R(YOJI|)xNXnzX0(l$qkMpNvM8FL3*#^lw4H21(_JFo-~+D{$-@(z+|(69wxMNvrp=C4%+@mSv!(r$ zRSg>&fjWoNC%K_M!sQ_%ttB^|<#mAB+LlF}=AD)Bi$1G#(i^;_$gXdat}uC%IV@S3hUNDkvh!_KRUCb4qbvSCAt@md?X zVoZ{trNfmQ>(&})GUSc)d-_9&!U3RQVx|30e@9&^@PXAbPdWBmU)awx*`hutl3^;)0wN||5a>8QxF%;n<=Yfpve2n~8 z!R9v;4`o4}i3HtI$s>T1^_*ZyK`+UP$U57)o-H8C1TkPAQO@RlC>J=M!3qlpqJB?u z(hlLIlZLd0ZqUgFSPY$Eq%btL5b*LVL8i^zDx%&mtrx#9#KO~F3WG*jC<%I-An#wnSE1j0<62;1oq`U}%Oh0J= zhR~4nm7)@L0df{Q@Q!*>e6#lQt*3ZFhiaTAd6m zx<-h+Qup;_v!!A(7#rkn9Xa!d1k!i1#R_5wkJFKc=YR#ssPnZ_?vGv&4xSq)uw+Ms zq8XRTB}s6})&u8Dv+~Eh8PZ`idn>rz<9?kPL_87n3LzDV#&+&}pwe{5U1n8+=~c+# zA+4=et$NB1bhy_sg`L?0GCCC@2pK5uoigQDK66K}QSRC{qCeW_IeU2C(qU*eGevTE z2fH?{+pti{E#~35RIP~FWCO`#Q<=joc9DI?R zAa({6`dA5p$q63q;A#n>$V!fSu>)XhCIm7v24gJ&`M|V$|FzCAedR#2O)`Eh zOa|%}9Lk^7DtJ_?6Cn>s{M-nQHu+LEtRl}x45nbJV_k9@4{g-9R$X=|Vp?Wfk-_d1 z-cDT5t13!T%1&$2Cy^#XTQ~q={83&iIQbHaio`9QgM_AnICJOf`|hk)40?UIvdYN% zFq6X=3`6W(V>?gB!(smvY0LV&84j@ta!f&~%-$6|$U+bPX}3?b9;OEdU5$4^&2#RbEXaET-~OFfNIO0ItvGEJI^ftvJAH~7yMa0J7l0L=cM zrOUW+btgq;NpaG0z8g)8)vfc0vTKk{_bHnLeYa$b6TIA1Jf2Gpi4!j zq@MN%!wx4Y1k9-0rqQ6svtWjSIMmPLnk;Im|8@e}0UB@?#e-E8oOy&-IJ44#PvS&F z*=uB`v%+@F&Ek)WZFsQC0dz6fF7(08ea6W5NeQ+6`AM8F6^ z0XLC{bq_TkhICiW}51iU(q$gcTga zg;G4OEE8#9b^wraCyj*Kl_L%XfXfkHu0?uk;gdT?ujj6gi|yJ9$glL{0UIA_QSg7g%{ zjPJQeh5(>4H69h=%-P?zlb3Y+}9Q0^(r)c%*^Fe2%X5B{yRnux{ zMR&KVq8d%8Z_|d`Q{9dZMmVMG7kM#E6W@LmewSQ9$Cj{F7 zt3KWg;y~dy0=5#%jWlhV;M#4A5>!63+pIQqr4ZY=bPjwb%&tg*>B*T_)vFjSR#m|J zl3imHi+fP+grmbRKx{`Z++l#KX_HlHS1IFeU_94Bsog+Q^-X$l-rd5M)ABMO)Sq&n zh0Ie&^g;EKun0!P^_ddsVkxU23wH>1RCKPgrlnC@kS>V{P3zm%Pj5?pAIZp`?-5C` z#!FHZ35-a}pas#ou^pceuv7ed9~v)0;oa%YuY?OmKvZx!i?5lem4>V{?0$?X(wcF) zmO8C(5_Lgprq70n*Eo8`P5L(}COwEGRtx^}YU={q6ozN!SJ^Dq3b%F_^6^&`WyS zYAU!9LWtDl9#9SRfZkV;gi9il1lFGlNuUX*3VbaQ2A*UnP+P&0V8?6YhExQtG0K$i zM>T|>j8aA`f6~FKAUuZ+!I|*&buAEz1X~4# z?$WF(8}dv=GKkBF8>ZLy7+JEJN)8o2?xa+~ynA>Uc{C`Y%M=?-tA94zr@2Y#h8h=* zXYIB>?xkjyStFx>Knt=B@r){hT6q%QM>|&_nsB^TDv2FZWe2uQ@3BR$vN5R>FrY-5 z^N^y7C%WUJmzbB(PH7XSbi3RY1?du0gJ5@I;mvA_*v)PG+R-XM3vFfH6#|>S0xDBw zg+MF5YWu&b8iCghm}(q&n8K#9uMKkhMKPNqhqtByNzqsJdU0$ez02yvefo6(QinT1 znEXjmR)?=kBI~M{+6+x<)2Kz(CV*5hB^X-Of-AgORZDbQHG)2aiQohYumGxrQvV6e zb@vlns{Lh*M^ME^naYkxTA|dfY1rO|XSBlX6zNZFY1v7k*@2RGA?g?nBfVeA@D!Su z(WpT)R9Tv-N)CzUU{neO6SUG*<}PNSGsWxzZcX-65962kONa!{+$H46jd@Fi(MLH? z6w`Z$_6RYh`41U?e(C^!2YLqVha~~d476dVwX055*%LfFF%Y}g&?*{PnW>#1(=xAKbtPU&R=J_mWz z{j8-9HnP_Kefwra}ne?12+z zyyq!)Ocx?M9;i?cH zyrj<+geAR|anHWGXPk5*5CI`Qg6Pe9Q|j?ki%mD<1bj}qxIBdw8N+2cWEla98MBeF zPf-AR$aW2ft!}|^UHGZ^-5jmY;0QIHe+G{u_wb|cFL9(18~>*c4dP75k@M`D{s=gh z##z4%PqAC_(3G+yrD=cCM{Fg0mf#u*+82M)7W*VdVz>KWhJJU7-$m4F>y9~O_?@3_ z5e@OK3lO$afH>8~nxzYH6gAFbNZ9~~wGx&|L+!v%-lw@caz^2Z%C+k=UQa%K1)pGe z?aCEAMe%9`Ck^-rg<3EA!!bq(1d{|rLuZ2ASs&+XHfMYZw=SDBVyg=e6F7)6OAk2G z>81)2=i1o<+8SmVS>&tYr7}QH3oozH_K%Y(xgxLwHXQ#D5_n zS{tp*e5{QIwu^7&%trj_dV|++80{&;3funy5wmrM`!LSZ zJ`jzQ&OUyK+chvJ0ia+~&_jTH+8NzjVQ3qe4PscpSUdCBR^6LE==w5y*_kam- zPZD?ogWPhy+}4GI45POx@roJ|Ce93j!En`@LkeU8#mNF@L`FHN$OsNoDjV4?uLqzc zv1*}R6WX=B<6zz&Pe)+WQ~2S?Wl-z{po_~_1j`8n>7y}C;PkKxM;_E_J`ipYBHeOO zp$d$K!3))k#|~JO1RbUxq+!$N<4OHPKU17m#c&Pq>Wv>7zUX(EVoWZp!i`J49*(ld zoU2-d>BS2exKxTQzOj_Pg8M zgO6Y04)UJc=(lX{moX6O(%mg6EocEk%YAWQ{P|NN;k$j9lhEu-p%iv)N&I z3C|X)$3~l-fdroh$d7-pTR(jv1d;_nKRtW}Q{)5>9pF%*zoWKzKwveJ%EV4FjFF+i-v$GKzz=+@i+QX*HqB zIWY)rW<3jvePEoKk78H8G zV`a*QYA6VeHfK|Z8U4RTDCfy!(g2d$gA_MRn}eg!LgwVR@Sd?fnP2gSLq z^WKIM?D%I9W*96F##kT}W4b%NbT2^~EbsJR@$Tf3y~qs$&3&E)gaAfaHg)@k0c7!q zq+7}XQIGp?&%21p)caUuTnQJLfVH$tz(zJJ4vy^4;;7JwQlp|QAd{|74nJrRhM64M za1T%4TQG0-kWlOSOiDy+9<4}vA?ravW~%*gv=-s#5$I@lKE+-WDvAik_%aEdQYA1X z=E+gxHiQ_V7TX92iae@Ebt;e&+~D{$&57lFoS`AM+ipLjuB5v|%yFWns&-AjQtQ$T z`d2^R>kWu<@KfK8bewj|NU$831ZWi|r3n)0Al@fX=bJ2^3STflxqjrjJ}7UM$ukuF z2|^S*i(FOz3sy<4gmD+OTOjFTsVp(~m*Shdki#C)W;&Eca)*6Dwgs!Ro%;5Xtacf* zsgsW?axk27>U^)uf$Z-_7!#A02Hm>p3*`>NW>7~$$OYNK9Ei}gK_aXBtF~4iT7d`GRJ=W#GBYiP{0wooe29fvF)m<$js+H zi-b;lk-ty-7qHB7+u;RtJF9ykF^6`wHMQJCn=x$Xh?IuS05_ar1K`!O_NxOS*y#}D z6z~@v2Wd>ykX1uD9!UZOtgYO_!72lH`|%s14iQOWLr@!8*cN6MJ)PH|#g--$tMb5z z9zSlxpr(U*=m#h_W>k|A{j8R?&mzY~&K4F(&bs2*b z417UlxiKr#=Kj99wMGzf{pK18iM*t#N1`5Y*47iO0J&pJo*58i+K~&YvrJX8rjzud z=|*MW}gfV za2B*Y=+B`%i}DnY83GbY2oNihY}k1+V8;TQ%K|${wV_ra?4F-VY{e!(oLZ42|dt8Bsk+dfM?$tIv8R99(z`jj@m}E@g?N2aq_Wa zB(uKRz44lomg*^dB<4zmMn>gMgVQWSR_#Yq))5RS!dT^0Oz#@@2(?jpSBYUN&^g?& zg*+NgXpEb}IRVo@kav=?iX%*FT6EU&oZjGzIB;Bx8HdH|0OG477+ziOV0ggI$%t* z*{Kb8h?E0G1vyWw(AXq&Zw|=y-YFd%z>tuBMxKJk8)SqLGls?GFr1F*jm1= zxQPSYDA%iyS;Z_UP$UgXniH5$vH}z)lBWaIPeoY%cnfZ6a@QIU$9!SaMyDC8Z!T9UC~%;9b?x z)DgA_da9P3t~yhd1Y>T@Dv2Adl|2rzE?m)Dq_QC+t*f9k z?3VyfEP%lB3c!8ZE(^HkGyVq^hEeyTKbv%MMN?1K$d1ERy#J(BfR|Ma2QR8GKnf7} z??3tE-v*=8;iA_sj^t6BHQL&48_Uhh!5Q!P*gKz0?xHZAbY5bx?e@RnYH8*WX_VwY zJbe27!_I&F_~R$P`Bi_gfIka)5K3{%*=Qnrm9DMcF zSD*jp&OZM4<(K%)&;Fg?;rssYzWD0P{ja|G;*0&?+&TCH6@F9PS+Du4mBP^n(rp&M znf#wG-*rc$#>RTHi@{_zY<&MKeNlC&zRD9AIB4T&-QOzi!-YeyEI5W{@_qO3$TAAo z*W%#L{^z^=Bi7Le$hSNlU{S`BiPU1^J_@cA_I);fImcBj{o>K!w2y?QJH>y(wGwVG z#r_`jR`&A@H+9kV>;j22#bM;-0J-uW9p8WW_}RnGe&^2K{4ET#@W=u*1rima()oNo zIc&Gzym_-HRKGW#p0!I=wrn75zqUN2&P;>}-DD9ace-G*Oj+2>G}Y6-3EKt< zy@0pYV9pD^r+w?G1Vt21{I;Zw343)j#tmgWw3yG9ROt3_;>K%uW^cNaCFRzH(fXG& zAks)@)PJ+2RV&_u6XJAniqcEUrm`8^;K6BUybR#WK@t%+?o7LHIukgoV#!djK8cI9 z@KS+%aPbkb2u8s&47U5fpqt(&;YQHHBGB)Xcc&qc?K{1FNu7qrQ)oC6-}dbQuB~*h z5tqX9+b3AO#cY)?P{2m3)Sm8+pm~*_(_a^l>-*7K*mxMQkS0ub^JG$tJrh4Qd)ayI z7uZKhYeBDXXq1Hxpr1;$kTwo5Ydg@SSRm|kC}&!?Z_C54afxE7H$Kt|@1ru^(DUEe ztv0l>?0{we7QlmY#Gw)at!)Q%dv|w`*t<{$9}Hvwl>IG^K%dJvc6ZTafwqAx9lvfk ztF3-ruxxhqwzkvMzWbt}RPr@JYXVU`nRYwrb&zE}F;be`AUT?6Ta^QRk~rVKp|(9V z>;nLbY(k42_EFc$o%LwoLj1v@LBxGT1Em$V0&5AZdKRl4d#k>zGC-s3;k@ONr^$&? zB=F&(N!`Q4D7j_HJF4#<`3htgD8ae9A&halL9Dq{TP4&6F3@}fZDMNxZud4Qss^DU z@M%3@#oy4@z}rEwD0l`ta14N4*ec6~WF&LQlEcFUC#~%P$y}v}{@o_Hr9yuzm5~87 zK#1E&i@$wcyb5A0NHO%TFup=o8$ycBXxcNrZ*zR5&QUrmmPoMr8t5mj;^o&CZ1n@H zUv{5%-}uT~OW(AYh6Hv!=x&pD9L!R(Z(ei3eb~Z_)M6`T{z!nqa?GN-j%e9*p>ATA z>tv6Wt9}Zuth|_e1=uJ2@DPe&s}-Tj)U7SK;fjZ$LeZ+AqC#g5*`080i`?%kb0qhu zP98-TS%T8LMNid`xO(^Ypn*?Yf!eOFkEA$RLnTRzzgkZ#c~#L$R$&>+!I~&$+dg-o zPkhQ4(x-{O1E`nlJ80ANolFX#p>08sPA*Gj@6(sM+@}RxCZLs)e=eR}A3m((v}d$m zgA<3x|LyHfVN``%veA~90{`)k%o4bCb75vX812^H8UIR+H8%kETJ}HE9XEWJ?4MS? zCHBAl{V%^N+5h%G|K0va``;zey-~HYsp)FJ&1|;9{&zt8-{FmVWnEA91)*0yTcfENx^ z;)a9z4s#hdp(W`Q*V+s4b=96Cumh%2!>QGqA*yyLp=St;Xhduc5Zp)&`)^^3*ExFl z7TIDDEks!!?_fTPW0dbf6GcS-WHCR6Ex9`%duX6i zaH#R*E^9pT8c!DUQWd_!hUd6IRM2rTgi)3b$DoESV)DJI$&yVA23oN|WLxoVLr`gU zu!Bk!Sy)?Xw9vAyd%ON>_f;e>)g$3L`3%QuLd^PCk<|E?7(wjR=_?$biD!k^zD|g) zn~Qa1WY(W-N_KMw)2C$~Hags|vTD^0$MU!x?oI9?}{%4s}SeI0w_ z-`sA;vD}2FP_yKt8*!fV5~E_;|E_npl4NlUa}q4^v|o6203fqHnTG_-An<04FT3;l;!)g z88VSrdHDDN=f-s^PuA%qyWPx0 z)b*F?mVwa0MpE_)j3nAYXs~{sdxP1}#X80&hBR4_a#0|MuF#O7A5SqW|M+CPEt}Bf zn6ug3N8F>^guQO-x)z^ZDJ> z^Sxp^J!+$bY@XGIHxmVRHoicT2)5Vlz3#$W6VAEfk;#T<3ncLDBE4bBj4Wn9wf&tO zKRQ17bCVBhrA(=zU)=k&(H^}ln&8cN`l^eR5Ee~96$4rp;v(fTQVcQoqNR4;u1rUL zvD9UixGH(tK7P`<|EE9g?{}X5=ek7H^72WI%f~KHHJ(1VnhX-GaRQ9n)Yk_ zx^-=6-cEOz()M<7H{TbAU3=VPzO{{_nxsEYk8_%lz0Z>UTs>JjssCzx@#!@(M!@`v z{qslB)$fEQBAD9BD?kukzq%>9Bq!C`DQItpS)RBM)58tvM^(*BHQDBqZk?T|`q|Qt zP*Z(V(zp;PqtB~n3yCU(;{`2Mj|#j~Y+$31C@_uZ@!nbq7TSKan>Dn$4T^+D!x!zP z{%=Jm5j7BHRTGpi8+5+1r~%b5(-o~b039}EFQE(22?U{TW8PH2gxqhsk`owe!|Oh> zGa~6wU#{OkgtK@u;DI>h#^(lx4DVAE!rty;g5W>g^dVu~DsT5_fc4I-yuyvet)uqfE;1J)xF30YiTomnAjbdW?0@i@w|49mPkjt|n{UPo zCZX=rIL^^x=LlboGQ5ZYgbx8WGGa3pg<5izsFo!i=gnp+7vniucaB`)k|&+o7dzCD zxiRj%Kz=$pJQzZljbGpAt;Tr>V5?4>CM2lWnRMoLT%FJkl|g}{GgLS0@TRI=tGPTB z*n)S4Zgm2GI~yllT%tf{Q9!c{%%p)U?PGM%N7t(+pWLeI$l6hb`I|N*S{$K=wj&8t z%@$g3!-9z#Ce+;NrNY^^P?gzQeX93iqU^Q zfhd!g&0tP7AHE1A@EL{NxX@dLvlX1CB({RzZdS~ZrduzAII9tCb@>;6?!`Lgyqqdm zV0Z;?Z&H@k&_=o-Q+g$?m^3Dr;=fShSK=tINuf6OjmP+8j2Jia9``laOx&D;MIH8M zGpf_Te2P1(JZ1of?1pt(?AhW8B`!_RP9EV_Tm-a*WPR%I1m?4J$~2zCxgAIOYH3H) znH*$;zl2iSO!YKr3;n=0DA8W4^v_g?$k^6hwL?#y8wowvL5su;`=VbF(dpWic(|9Bs^HQVckJ?Lt&G66#^T(j@^jegZlaG>_FuS# zb`egCReso?Uor{Eiu@m6e(_b={(JDn{=rB4?@i2ixy|d`HidA*75?9r|F?M1octFn zLa{vmZ$t85RxBm+P4fTNC-W_p|KO7U)>wQWJpAt7^G7G02M-@TJdr%)@a4V#==p<( z59-tYHW&ZZSc8{I?vnR)Vr;ESc~};3_hn}?hdmP+<~y_}FG~o#+TLugnTVW*%Y&u; zh|r!wErJ-;urvB;h?=A~knG6!(PB6xICC-dYo2Fn{15uGQ)I`6_X3mkn<&P=6vfB} z>sj5z-()--oW9%QC4_YPk7E=M|3i70%W`?Km)c$hRqx3`|5udB=n^D);$qUH{VG0v zaj}?OEXtAa9X^B;!@8113hMS38OqdA8jy0uS-%aGEUWI_!crBhf62)lL{h2SG|Md7T5*cwKzlzh>#ZP|;y1%6_e(tFf;W4i6 zC!8k24o48*O3)`nRP)0^QHIFa86SGbN6)u+(DU6--v0xLbDMXi3*>8!m)94MSM_+r z5un|l{vzJ&hfR>7oEKZwzj?>gkNlf3mQi;eKq<{1rZtW^?65nhM-50i0zQL_Bfg>| zL&_DYNhSm?K^sw&5X%9se*ra|2rl<$^Vaqj2}3igL`SDUKl=Xb!ig=^2aXG?zoPnI zr1ldM>6-!b-lN)fV~^-y8*IFUYBrd)fG3%`$>Ig1N{K0Djn5q}7R7 zEFO|m;FOnzgATF0w@!*}q!3Q49^poS{#~=UXeq2n#YBSSOFXz{i*lh;sYz|G?hH#6 zfXr4Il>w>~FX)Xb%2feRLMV2WMpPoSVQ3>W_Y*JeF=>7 zX|2ixR*>>Fos`rlhODZc^1tS|wV-!Oc|-a*{Jlo#f!j@$BT`pMHGGr9NrKqv!4k zm3?L};hPIbWn6|~*;dGI7?ij#U*K9C$rpCsWo|F%OrG9ucQ)yt4qgsUr64W@o=$;3 z;_&z9dvN;s9^Ac;}*B55mH@R_@N1ckVFqO5x|jyWimHS9k76VL+N(DI)H9 zB~L^V815n%W7Lc#>p@ARj%vHhqaCQtc>ENZf z=n@@k4ux}lG9A1gU=5&AE1mFUzDx5fRN>H=1i4j?-2)$5HGwbfDdv1??4!6fMkXw# zYWoJ)KhO;|hhbHB0X;6=`7gys&?9jrC7nNLks2idi9KVEIu>%RPo~#`zV|W+gbJ@1= z7=w#2{OHlOZzL#$PM{5<8KNd_tf`?cj_wiYeg8j;|5=u!o~@%`?Zr&%J8R> z^SNv@a#Yrm3h?VusLHv<*!PdWe{AAGo*c`d1C1chR@Bx=;yVVI+wS03Zs-vK&~eKoEP#&3y&CZwpcF9$)NwLi~|<6Fp};0 z`CukXr6=^PE;d-$>qRx}LQv*swz^QGwg4R|G7$!BU z(rFdzQa`lY&kNZiaC?K&^r`T@4G@M;-7-g$H}c*+-zx4FcS3eJxox(^Esr2jB!QqpuU^l4-Zr8089h%MP?*OEX<-f#*`Fy<(e-v*(}bUkqfYW zrcT@v`L~s&)-1v4c9|_ZOF-MuILJP-(R8r@!piCS4$MI-MSawKPK8O9Key=+JkGY2~58?9j|2v<5_0>T+ z{_D;czx#Ope|e0rUvphs^?K!CAH#nu;=k_vKfM3rWBk{8C}k-*7G84y@5$49$0yI4 zg1?ftznZiD5}?6iS4nYJf6||XhN%@Up2mxu&%D0YasseeFlva|6~d_{+b^Bxt{Zwa zw-1HL&*I&nKkVTLGAqD_Pb+fKf@>+`e{lUZjeW`HzSDh)Ga!j}C~ghsU!UAMn}2Ol zK*cxTNE7r!)x6dh{qBe=YkY(P#<?SLj_F4w{pgMIDj0_=XxvEqRu+ z;;79&lp^jE>#&zeiW1(MB01A|sY*_Ixa@-i;BF~WAP5aRV;(J3rV7(DenF%oGYQnw zWQv@+?ADR;Rw|yVa6Z!E>$!?*;I`SpsE2xyV(GjpagR=$;E8HBHO`^8+_s4+uKO5z zMSX8-yAIbl=7Tz$AGm=$fS6$#R#rVy!uFsU@H~H=pEsRwM?A+2At63UN^g__TQ6xy zj(}uPNvkT9Ve3lk7m`f=lM#cTxx9|LJtGF1PozK&$FHcs1>syd=G$cA5 z%-L-7~=dBd*f_%g%4>YnHL(a{d3{i!b;0OZxx8!AJc+;_oKEt*?ZxQxbw5|E{Hr+5Jmv>FRYmQd&Zlc(aTT<4%% zU$E5VhnuKknS3s}Ceu~~EBf-p(8>N~Np7Q68yB-MQY%Z`lFP0L&3mglk1ac@T|0fW z>tyE43Y82CuIf$hS13!MuQMUv9LxDZZSz{s?UWwTsJ)c662`fPuiB#iZPpdkPV0U) zHvk2jbX+DX9-bzq)k|e}gOXRo(_ujdG59h}re}VuGPxA0U zVD>#mniRUw)0dmf3jNDs^pe?SuR&fUO^}435XoOtyjt+<0A7&5}KcjXLMwj637i$klp() zkJj|QfP`7D;p;m5CL&QR6!S`w){hM6skg*lxRe2x;_;uCD}zr~J&!SIeL3}SkUA#I zHqflq#>h=;K7u@~S4gfUiF<2cj`eCao2rI~9$Y7^i0h@)vI3{(JQFe{2YeQ5 zN%2(N+`IyQRFiiXGUXlC4N%9%pYYo>|D*2MyZN3zTECWyvWi4jB<~ z)t`>wPtDU99BdYUl|1Ty<%y!iD(Mm2@?`i){*U}rE{FAlu(`Y(CY7-c?XrX)YVsN&A9_?syahln7fWdXmJ1FWKeW`_GX(k9C6xB1ev~mYa7yc^0E$ez6-VaO(co6X9kdz`Y+L0s%I~ zfh{M>P2dIwsF5ZZ;W9(zTd0kjEW|@Gs7JEu^7aZ|W@xNr(_zhWrW)?DfIh~{W6+IS zo7hWn>#t7aXu#<_x4S8x%U3|CU2Cn&9e@nw@LuX3`Q*`qJ)z-3fdwx~Jzze%t2ZqktQKyzvGj zxS-FKjf8rZ`e)HCO5Gp&qw(VGoF!~{GFQCoXLmB};$|S(LdzwCh!Lb3)8&FpM=!{+ zx0CURCM_sRzB;p$N^6h_1DyRyr35${8(H3cFcMLR(d7Vr2MvS%{mX72Li^OuDpw!T zQ%Axr)xL=?m-X}nLz8?L5(^oTy-i=bl0Yq9K(vYDmYN#MD*;C=D+g4s$zmRF=z$`c zj}LBGr8|(a_t_7)??1#+u|tKf+-d!Eg%su)j`E~iR?*N5M24=ywO@A^KgY$Zn{O)E36&9WIFc)l{X82<7&9(Fw*6L zHzkRfPZq^rZ~)6k5QzXFw%eb{&hPNh$Qw2sO&oAo{PyIx+}(9ecYzXSm!mO)ZuDEp zR6>D8hgMa#_CE8yfO3LTSsqdQsr5(w$eiTFrdea?GQYhLkED&(EYFVrIJ6b(ZD|p4 zqPz0ql{H|{=sA<%S_e?`SCG+Q`>r;V^>W1@S6gl?5&rNXgqEI6F*XI*S(Id^>@%?6 zt)Z<%D04k8im>>EO#m0#K#Ot8tKy<6!!e%LNS;J_r&j-8S*YPHue3!Jn(*HXoOJ!cu zB@HckwbcK6fB*B(zbxl}-v8=%pMQ-1T!PYTdv!&{u2g+J|L>3apG#<4`m@%t`uXGI z|M&UB4&vw;^|>_nb5qfOS?6k99eDBHMrok)j5_r<26FXjyDRewC+==Xf&wB6DHwiu`_0a)(mM(cHyZi;3T7`NH~PWeKR)Zx)KNqo%fN- z%@S@4Y|P|#1Z(NVcqHlSG>zOIa{;p}d?docOt~q%%*4oEq?x1z1%~$D@K!qENmp#O z#g}rGpT#EMZ6CQgwmY9KXyy)Qer{33Wzw;p!hm z^&&PFDg55_yRVSgpE=spl0BL7c6wOOWl$FT%iX`EsIeSuLYq8a$5Fpee~h(MqVx>B zccgG``{qf$F;S>b+($}3V!CY|B&=G|iZ6suGd@zfok@~&?X6TBskpuN%ZQQF*Snl` zxaV_5{MT~?c&lwcNnV8a5(8dM>W3qUQStl|3E!8lPNkQCSqYtgH5V#86zEofH|u}6 zHkA%XmxQS#8w`#7#_mGDh^riOuTI`k@@RA`p@A$fPS3jl4e=wLx!4o6hWHwE=EZw` z-&%hst-ZZHH7Pb$(Y}EuuM&1d&+SY? z*N4%#6if=QKK!SYw5^?JrfxYoF@W@71beF()ol5fyg%%xT6ea#m{P#rC`4!xgH1L` z`6>0XiKxuPgOCK-h(YAyET4%mZqHp*>qhy&owp-_k-~VkBlG9;THBgnqw1QOw<#&K zytzD@t$ENi4K{WSW9zBe4v#{fQxIjv3{61f?0%zZ5lnlmabkv>4VZ~7q5@ZVC9AfJ)*IF>4_=>?1t81b& z8gA1;)0GiuuIo8Lxz$MEs=<7EdidaOks~+nGyPR=)X^>}gX!Y5zO2-c+t7GiiaNdS zyt`RLF00(rAQ|A8gbg0=GiA6#W1;g7VYwjz)l5_n3tls8i$Dex;tL8j3zqs8gkfVFY=Mt3mw4E45?UI4 ztHCSgu(;?fv|HHMkZOfsOru^7-8sDyE<{0AZ9uisA4vh5C7K zCrL$*emTt~;B=BSAd6LApAGy-DiHDf0F4S+O^`eYxus>@FJa?W;YzpX>n;~i&7t(v z5;m8f-cp^Qvb;z6(8SP3C<5Uj>XC#89KsP%fG!?1XaR;v)fD~}nf(D-T{u4Bj0W<% z6tjm8CTkFQi4-VBHe~h(WF;L@*5OSsd!xj85aVQ19^a}1tO3_etX@i#3RaCijHv^M z)%VPr>fN}xWZ0xTu0TnDx^9>tA#wfO0_4(aji?)Ld9vGV_=ns=^`fm||J+C-5+_o!nPgxqOdZ z!90jzmw}DYAC5UNNJQ^Z|Y{q*bu4EBi&F3+-qy2yToLLm0a zKbb{ChtF0v#0sjs)Coib^8p&=Kp=;yjldygdM*;|mD(wQq-GMpFf&U=DP{MPnF#hG zf*A5bu7~5F2g6YN6|dov%!dJah7q2Z83ozQMmuelt>+!!Qg6eFQ{sJK`u47-_9`k6LWn>alz5t~+zvs|O)&GkJMp0l&bY|e7Uhy^ zMPvI7GOxrfHFMc?qvF!33j?Yinsx7Z_S9{4iO>V-Vi!?1 z;gwn0ckL*R%yEoOL0(`Ux?~8%TQ15+=(;?St_+2lgzZP?jQ|J=)73`R=xedkSCk#k z6T@JG&P%NHqGxPq6b~jP<`LzbbwX}4B0^#IP>m)>Qt5?JQOjOO;SCSk_`m) z)7z;%M)9#(b0!b+afXZQ*d#Y3mpUsm0p5HvW(6weV9(Vu<*#K1nDP1SjP^B|i_4sM zwL%k(hh9D;a zoiC>S7Jx`}zs`K@MXT$!Et6=VQmF;e^FXJRy)Y8j2(!7F+TkCuA?GF`5ou2-Ic@pM z&FZQmsBf{g7K-XH#wnX39z-oMvp1X<@)>Z?B$> zZApP(zfg`<$tF`>nL0KOJ3fxFsysA zE?riTjY2%I+<8WVr$&CWrNo(z-{3|7&-7qdUb=_PMR(LagKLu(WXNT#Iu)}RE-ci2 zt-8oSz4)~FfmcK#)B7o|B^zQ7jBMUZfLLhjGu#!5oCEy%>&9UllV* zzrOl7i6am?n?oz#(S~N-fkeauL&YQ+-wA?!F8WyIMuXW!@#3AO9A7w4GldACyaGGI z&j}7mNLK&$p5>JnF+lhjGB?Nt<5mO;8X&mF;a-VIIV^ z^f<@`pv6?++^SgYaR{MobzpnNa|9jZObb4fv$?w0EhK3_Mt}xd<^i~crgT!-q+A8y zl;{Ak&wwuGhL@YfIBp~wfg7I;yHAWWCkfEqSLZMz8Qhj3bn&T2 zqIqH=n3N-@0OeU7uCXJn$)9_@o*>43V9jBFhe>-m9uCKENXD4*IXOhYnPH(A_M)pInw^j#La;IG zf-iTyHDX^Uhj;05D$>&Cx+c>u!)76@>@}?*wFG=H<*JLGSd9$N^x6Rv~OQ55GZ~(k>=}^^TB1 zs==jEh7f_A;fi7OaLN^2Z`?*3-4|HI5r0lla*7ibL9QEyiZFu!n7yPwq>vpuL3c@u zeT+-`lPQ%8Ab&v1_tPsaL^km0z2LHlZ6eqeSOd`)_u*BSR~W(Zmrr8_Mdb;`=*CoD ziHr>(PRik@h;bx1YrHN!nGiN5uDN+tPm&EG@_HcNso}nIAme3!t~ri+?{G?DVicTC z84RRe;ELlZxPAiq0SA`m0Ua%?ri+@3d=;n~J4|L?T9b66bQ_io8L2!ww!3`bv#Ay@ zZpC!nOK^7d!@CnahtuemP!c#6ITx5e0+Tcw@@5T4)b0>Z`-vF&Q5Segpul#ypzy9^ zq^=+>!_5>@blT@#*?5MPf>a8jq-QGQDQJ>H94~~Kb$;aXPLvzJfPXDi)!g%UJNIOE z--KQBc4dboDxE+V&E6!EJ@nrapWe23Lwg&3Eh>hbRTn(|*IWn=WBO5OLsTD-Be998 z<-lw~%(Nb__5dE+Scy$zX00fU?Uh{Ks|{lHkrr!+{Q+kL`-J4yW;jj5W;KAz{O)Wq z!FArib*PEs2)VmS1_4F3C?44Ds^ZV=1n0tuka_x_-C(UDae7Hejj6@h*B3~eioJ43 za{tOsaRv$jHQFUP;`uIUd?3W&&nf+gSRyzw_Ytf*+@2YdbH=~X)}3l!(gPj7D+VVw%LW7~w}9wp zb1)lnQ_apHuuQPm_x%_i{M^kObJtu?74}&$?&YKiLlhD{>UJznS}?J(bh5#%kB|h3 zCRUl)O2wlHS4*>hPKa#OW6@1jmhg-#&WS`S$rq=kb%1&iyAp{+SP2 zu_sN0!U@69!tst#r<{um#p0scC7-l-N3W>rPi07H!&xAV`ebUG@hG&mAx%|Hwkd-^ zzfOTM>x+Gg69CPB=+sDlsT-A-fwYlwOB`?4YVp7sEqDR`|LnbcdmA^BH=4iwDd5TT zcqm6V>Sjll^&VNG9q#HbD#@PgJpIxXCG$igWs=BfDwjXC>|WEv8f(mC>2jP4Qjaeu>( zl?ga;(Mb?tm@x&nr5<)x#AVjS5N9JhYc%$bc54OeKBsr#j4Fi`zS-ef1T0AVUU&$} zPP0E~IU|Q0(MAQMR^x;XQ}#yP2;4uRe0VI;m?AuAxIF?|)WlsdG3|j?g3dWIqegRH z4;~RCvQbKEMc;ai{A{^=hHPu;?e=CxY0T=@Gg9T=2eTlQVlMPtThB(X7-NEPU25?_kf&OI?Z!bn3u_Y#b1; zhEK6PyjfR-!rG8HLw#1biVW-6+eOOJ5xpa#0uidX@u9YYtY;S4oT6Y01+XR`bcPCq ztCxI9t}?_MmQ_Y@iv0_`h_Y*DXwap>G^`5z>20H=uRxQ%WPVih)v(1(&eqZv6NQ`7 z2w@9GUarTQ6AXtJ-ON<-Gu|0GYc+m8K6TcxC^VZSn#>*lnPB6G-!#|$Cv7!PKVybC z<%HFUznzq}_@&@8R}eV*nY~?|9M5xJgQw!*TtGaev` zFP#hF>=C3h#6|?QJOdd!97is&xZz54-@q74(!SkMq(nq$`v$Eu1?mf;+UC;aV~Z*eqwv?Qt)>MqFDQF1@4wFyN z>8uc>$l%FI>XC+|Q$5F!F7jAdau2(NI0ZXVI@V;EJ2iNife5>%zu;SjzS&lO zNSm{StW`+6LTPu>336aTk%jmGlTf;*{2pMV@RoR5Gf^7HylM$wyIKZkH6}SN`D&=i zD>q*awV^SiSwC6_-XH8{bJUZg9UV=TFw|CHsI3rJ;K!-`2N`Omn$Wp%L=vQSv7++g zs409k+vHOI)yy^oYph5gl9tedJ)eJ4vyHi?lvu6V=DAxf(Rzll?>^GoW%d^ZJLPKe zUpe(|B$x3@(6Iztj3)L>s$s}7sZqI<+%6>wUoV>ex2hk6!Z}p{H0MsWA;)YE;PS>m zJf*X1gcNK4L5K|9Cm(TZ_XnH6u4hYI7IF4v58W-wa0o8IVAb^j>7rA?t`zm5_bx$rgzmj^lmsS>0FaN^ zbFmRgW}ZP24aLHDP;Yy2!x70jmvr3F-isZ`K2V8;x45t1E+=he=r~@xbY%Dqqu9|+ zg}buTA34{WRfo6)QpTuvi$nB;O98aQ@>n%P+5~W5EJtRISInZx%g;s|vz);X3T}{d zH_p;#8LBg7Ls{W(ogkf$U4&*LJmUtdNw_a|-5z1-_?EW0NsT5Lnd(6I!?<)}cxLR&TL{iLbRq+F)FFu#D_433JFf>!{(ip7z>Dpk z>jptz3!=*h1`sA`EgJTwvB6LngCN3(| zxHjh&+V`_l#!*t2Rp0N}+kXC9(QUe`KEDVull_hj!N=HaS1=L6=!+M;Udc-~a>*qr zxtDq99NSJtuaCUj1Dn8hSw6GCBCEEO(;b9XKuhh`F2t!l|K_%9kN?yw||OFH}-2@G3$e-+WaIf-gjo6mWtQjVNFKMLS%+~n*e<&7BOsr*-X95&@iQeAUDVStw1&wZ#>E= zDDVYXo8B%O3(VPWJ96W)z3F{AQ=W-0GR_J+Ko;-|RmY_|(EUU=9r~iDv$2{c_H$-C z4zlz0fYY0fh+6P8(idZEaI+m*Y|vwqfcuHjKM8n#^VKvQF8N~)we z$)5=gPT&5tLP$JOv8g&PRnyr^6$)$ZY)5n@% zdRw%T`$Vdl(|QVppe~tCc2@&=w_U|B_d;#zl+1RbJ@c+2#VH6-cpO}hDwz*8e9DGp znsKxrWzz(oduLZ=r>M>jO7V~zB_47S1r|qhzqySPwEq$t{kxmDlzZh;$H&v{F)mT*5e6z~kSYha=Gdha+aY*l zY1aRj-ajT;$cVRz#t^@LMx^8{rn}E~K7Zjg{^cJvw(RKDCp>l4tGePlXJ?JmR?S?O zcCK|whdTCE%k=mQEt?}!kf)$J{A3NRbX4&Um7k3VW#O5rw z_DR{L{d;<6KyRt!^no*$9jFd-;!<|!H8C{jvtsGJ%CcIggwVzbrswR4;4s z>C4&%6-d+E!_t-|KcYoCAfK_Kk-0=|8^~l18d65N=qch?0@3L$0kJlh#17TPPfnhy z?VGm9KFf>cgW0z=W3P9iQFONUQ;fRMa-2Z;xML*buB)P!=%6nlGxTQ#y7X{Fj!T^ zXh28y3yM``mBJRKYDLgEk2XIvfhPV}aka|r8j>*);`8R1iFibc4w>hJuC2&bRjcOf z035nqUu3xYL?`F4wrBx~ID}1eVG`TXddrYzPhQp-g4)~&QstW*#LExJDq0~YEiw>t z?nD@u$e#uGC2nUT6`<4Q+ir(*x6!;baVc7~;#txpHQPHUcS}C{QD`cwoAFI!MOx&ES3{hldH{kv?_=%1snYJUJIW zLKoMAK2k8l--^{jZYE2RQNGoC9%SoieZ9r2y(Go=K$MyAVbHrMa*a%Q2iKK%O+mne z-JkRnAM0C&vGcgkL^k*-JUDYVm|ySU;&ldvQiX2(Bjudk5l^N-v|7O#5R^vb@Q1$s zZ`379z<<>!T4w)SXcUrEFp`ij7Teh9mdEw>8S@HmKYOh^e*X!U1gTjCn{}L4i}bJ4 zv12MiI8T&0Chv_bI50{W5$4!@^bv^-DZd{_8HESo@FtqGa5$?Gz96VUL@#@e-zE}K z{|WIwv==B+iHt|A=DFH*ZJ&UnbDdtB#^J7dfdIM>Tx>>M}ea_x(2`A`P8x27|a z1>>xn67cYmw-$oM?aUU?X>Gn~87W^{&L=3^HD=_eMIOw(c8tUDG>=5+I3Dw230^yQ z$i>}R#LyyhVu~l9Fhb6zp0QfzjDJt=a|91+GJ~NfWjSXipO-m%d7`3EDy$XO6`OW=ErWHp4&6OwN^}~NIXZEm=QmUrnjjt^KZ;W=LITNi?_k!` zOW?F;g2j(y(>SDU|B7HnigQA=z}xQlBjSmb1cj?yTdRh|4RJh#Otx~lKp#RS1|w43 z8;m&Y@VJJ+2JuOz$^TN5nhi7VA$>@`I*KbIXf4-DAjF%T*wRM`v*l&UlWq67ot_nan|b?ou5Oik+<@$dvC?(M?nF2YBc`*=+U?O9iT1# zvP2Q2OBY?dVs*U)7sO@n3NNo-EWW$F-9}~niUUYG(ePi9<;cVH!{*6(BRg)LWJMpG{2QuvS=fxo|>Eohp_t#&M$TJ73iT%Nw_CKlhRhvMrFRU!r zR~N+|9?C)9ML@Yw?r(BszaqInP|gOIV_ahCiv3=v+o#+EKg#$PQD0nM6ty!vgWB%U z^{aOOo*ZJAJ-l3vhWpLk#^G5bt7prL<4*`Hq12$rae!EpcjNKx=F-x~j~^GAdlm=7 ztEHg+9AI$&fFG?7aW*2+#1HKa`B{>SL5E*{;y?u2?BIX1{2?)Ui4y`Z7;0y4KV!Lf z_S4QWNxVnj%By&;`ypQ`0ELGWUN_&!=9DM1bA5M#fC4F8qyUz}S3UjmEw!h6an9pH zKkS@k$EQ1Q4tBDm!`;T*qi^x9(6D`V)5a-8r>n#^dB0yFdjKCz@G>v%BB?g+D3iOM zuy%lz#Cb-$|0`z@Eu%a>!f=Ui(a|Oygv(--+fWqV;tZmW;*DS_~Of3?dz+-5O>sXwh=9ZV3aW?hOHhFoxkl} zc}U9+&UUjO8>e&hHm#4zz2@P6o*(?QbBgz7T6_D=R~%GlbtF=xU-!oM^t{m0(q6Cs z>)nk2Jr3bL#*vU(ei&p8|)dxvHr0gm8Q= zxc_P}0C}LwXpE3K4DKzxLHQ2vBX^O)Tc#Jo93)7g=rVZL86C}0aC5De zWi-4jgQc<-e!`&(zF{qNt%K&_(J9wmos;=07`)*Pym7kZ4sh`uXLgq;)Ic%{1&YH( z!K#jyL~I7+BM`E-xQZy9aStp&u!$%a-^t7)L%iP&w&BFK#4AkrR6(sS)?P(=SW0=T z2PpyR0h+hEoqpHC4)JOP(u?rppt5xwx(AuV8hs+lK)<^%#6aq2&7;GBlxahsA*&6> z333KsVfocV43vLiAOiwH+@0^fQ*;SQF-8odLBR;zfKWlAK1IJ-*15gD8`1xZ?U&Ft z_4@MazN8Mld=3wx+t)ZYeA~t=#3Utl(UodO041_4P7Sy4fWwyGKVMp2HL}jOa)gZP z8kg{gSX`L2QoK-z>1d41@>o(9^&uU{UvKk-inQ~K-Z7^&9o^DHliZy=w#7r5xTBFV zN@0ydBO}8NBGmfhtOMmMpOZ6x))p5RaSlsIu&Snd(vA15vNAn3i^uBS0wH51y-)IZ z@rm{~&e!k`rn=N1J0SXiKofZ3c_{9?Bl)@%7}5ObG4uyq_E}cFxVyQz|7GPLIGuZe z0BY^yurIf@wjZe$kW!gDs9H;%dOpD?k(QJ5C)p~ z%)gUI5=)4-u@U3tb1~k=E0>4~6+d*Z5nuV47Cc`4oCS+obB)%EE*)Ri&Y#XJ09!ov zniS!BJ|{3a`QGaO9&N+tY8`JD`1lHXcW%FbE>YSB~bOXib=&aXxx(-T-G!c zem_fnQvi817{)S0yrQ@+uJS|D+U0wF2lJNU{?H!bkIuHHIcG76cQVQtqnD8BKQgAv zHY7?xSB1d0cr0K~&=XUHT6cW@X$Y0DDexPiN0W;xpvYzVjGsGtDwnEBq%#HJvq#P} znVR8u!;q+^Xh5MHP{fmqZijBoXP0+<6(DU(c~H8-M~qMpL{(v|N+iknx|eE{YLyf% zxeFI^tH7&MasU#(4ExaEcu=4*tgk3q;1t#^Gey^$5GsUR6{iAvKQ_U`KW#smgNrYfoMXUwqow0Nl4b7 zaQK`ujReOe=z9DBd{KuU&h+GbyakI5ed#z6qY+ZjqJvNOwbm1X!*Bc-FLN6e2s+fZ z4WjMIuZLSG@FZM!DQjG3>v60Ca}=zhtb20@k&Ig{@B&hs3tkMoeXFTj-aV4~Lkh;F zCE86`OA*@w^Uk1r4hB#EA})UL>)oxm#CX&mEZ9?#H-h&>gyp3r$kD%(F(t4Im)5(253z+O)oEHI+rvf*o=U{Z)rVg8aDmQ38|zK+!i$PCyn z#N@;)$HIino>gf}1qC;rnzmS_~@f!)xa&*C*R$F?sK?sNM zu1oC8t+rr+2oMzf(fEX|EG}cgw+UAV8@(Kk-DY>rTSOGIeZDiiVqY>G>d3NkLAq*R z>Z%&l$Q=0|N4T?tUAhbp9o=?2J>2d3Cmc2;+k`ej>1J8`1N0l|P0mh>m+=Z}BWzsP zp63A@N+WL`bShpQz&yAJG0d2bd|_GM18>p;ji@w|9{j}v$U%5ONgN8J#CfJPd#xzx z!9E6vp{evq<_b6CslRFZq_jOU6$cu@Rkqa`Ty(cva+P6w-~gPz2)W6I?4#7Z@(-E; z-LO-0z*+*9$?6JVG|q*$?44#Ln)-O85Z*?t7A?ehuqk-B0084(4&cGkUya*_IVmf< zL{xake2(p0=#oJjsvqt* zRRddzAsm=jbkxF?R~T86u9a=zjhYEcV)PgW(M=a8N_hH{h9e{d-5vhMiZSOfWYwda zTZ9+`^zXJ_QO(|VuX_DHjZEKGrDT}6r@|9U0AWDnNPz>JW41W0oF3hRfHRzutThQG z=JyqGgVRY+U02?0cAHY?rXt;19pIG&IoAcg+Dc{xiv-w`I+4MJZBl2H8wf#H3KB(- z+R;*%XFv+yLZKR5O9tIZ5rkwGKst>@U(`~|FK)5SjBr|Sp}*qF3QI9M``}W>A%nG8 zW>2-GfE-nu@dIsg-)g?#=7RklPZ2p+OET_eR5RsuLm$p3rc7@&bkaukjxb!Fctyvy3d@ zPz6ZuApRo^+NiHk(8da>tD?A#lAsOlCmOd=5VS#!qH!2g#ci-XdI@Fs1XU{cD1Y)&uVl}T!E+MVHmqaD=YJqAejx>Sv@24H0Y1COPF+U9^5ZQzfhVIjLm z2p&j8gP1ZpI&|Vme$OC~=)tHT@W+OPiaH4*QfU2jcwi8#LAxyR|Bzirzp=R~_k%b} zpa3A1`kWtX%a9>Q<~(6XC2)@>w8bGK2!o;R6#^Zo8Lx)4%!qEJz59xsnl|!+0#Cx= z3A2&jYwR~#jlJyk`QdI0=ip}?f8cKc6R!s|Xx(x*y#Pzf{RBSBGx8 zI^hFjf(?l0gb5cFF#RGvB1j;6)c&A(@@Z#en(~zC367GmwAWbN;#sGwe_2MB6VlSY*JULOEOEoVBjJYCSB@$5a8N;JU+G7}W?*7>&17@pg@hc>p?U zV?xOC6f6mpqgx0*g4BGE#_)r9i})NwtN}#-0tPvPs(Nj9?}`1fV0!q$Z7}PBXlJ>(?96cpat9@Q#`sJ)gy)?%E^Rt~qA|*!E$u{ms+rQ`!Y^#TZkM<+Jfy!7cQDBM$#GX_g zJ@YcG@SCQRqaPbtgos`|`U43B=lEZcI0!$M9mrl#OR1P5PC1Hb&CnRh2(jchMdYhZ zBzmrf?Q6Lb$S?-~m`p6jtSn6eatY#4aD*Tvuzn9A$8d1U6(ix%7JnnT`8QIWh~Wn? zrAbwtO)j8bq_u)xC=~ZPd~Zu1r1E%!BT>PukdN7s%mJq&hGVBoXLoWnG(DyR0v>aB zmJ#HxAG8FB!8SjS_gP8+*bL}W|5u|o@o)O%$^|mZ;SpR-X4aRBj|%O@BSO8+ge*!o z)HFa{hf7~^2p7E(pRh9s`VW2zXdy1_%15Z9J*Wp2Qxwn+8!l{C`jE~Q{v zygQP+q7;k?=_i0lFM64MjU1E*u=?0Cpv6EcM1DAgYP1{~9HFl|MTgx^LfYk>S0eD; zo!0IT*zz8pwX)NF-YWaTAkk0As@6WxvIcU(e#|Q`EzPyLi4zokdLb36vom)iq)59H z+=M)L;-Hkk-7;s{c{5bLP?VXYp)HI;$3fwigMuK$V?%*yX>66aYDRHej&TZn;D-?* zPcZm^F_-NFb+p+atBFt2C}7F^J7Uew*;%~JO&BbNSbOrsV9hSkL|8MphWcr3&jf`} z9b$5}!hTPPtu`OLDPymR6nP^AKT{MEO%H(%`0v-n@afrLPc9syP}H8u%h0aKBSPGP z(c-LuWQm|$3mO9GTO{luIc>n#(P$}W2i$)~({aN<7&v^nC3G{f4G6E<3li17+|R3> zvqp{n4R)6 z|2xaUMb|4j0$&rE(KfPDSFOf>;9qn=xH?5|`Yrzx1w)l@KY{N+!}@HFo~wuxY7L1( zsW~|sQ9~&kLSEmRfyg2asB}09NU=eA4sAv1vt06t=#i`)=%bb)zqi5ph%CYTs(%cT^m#Is}h);YV^f#nhL6oMR)O)z?D#| zw(M{Zx29S8ujt0R!MOG%PmYv4v6}(bzii~%Z;rB;o_1|qZHb7N4abHQs3Y%4Lc4v| zPCw~MMBL;P+9&X(JX-3?z>sZ5UanvhM)~~=aD=71P=A9N$OmntUvU%v=m?vr^tmJ3 zjCAnK2iJT|EjVu}T~Y>Iy7>S!@aZUWIPiN0`nYsnNM8~K+;Qp!mJf8Z5jP$rO+S|5 zgXX>2MGk<&3G5ITC2*;?-<4;vA91A~eeq62qKm)`hD-AFmY=G{Na$IUHf1Ex&{c4n zcgjy^yO(#@*Z0DK8l8Y#MZSiSv(;GGht`MBcaGMaR`(N%BL}P|k~SNgL(I53EL=Ff zP`n6g6?wLD!TI^)X%>PaLgk9v<-cWu;3$k1OZ5fFr!3FnNnnp*jzahg+<5Xe5AH~h8rR2I)YrMAEyhokbgIe0@vkn z!HUBtKK4dkCO0GLB2qKG3nyf0uS42Ft!~?*Zg6|~i@3uH|8lb(Jq}SyMDcn(rDZcj6l{M?G z?APe#%IAidC!Xv-3NK)5Pw|^3U#UQ5KU+;fQY_4P+FB&;5H>kZi(kFRWk*D4-Hhaw zJ{;lSv=@*PiEi|f(o(m`&85T9yjnWC_>e1=@#1(&9zhKqhY!IS7UhXn-|9NFpTm<+lQ>4yzBA1Rvtu zSKs`?6_=aa@x7JJMP!sUUuU~N|6H#dPeX1TY4S>qo{m1g{OHk3$>?bu>Csn{USzar zZZ)ErBYtv{xj@@SY)=y1D#9;ymL(-{I0e^)cjiEMJvj>1Y8>SHxTMfWwPS((u4Y2k zzOk{R)>~x2(Sy5~lBjHyB?+_I5g7IDop%MS78RY79CHO7=rgUtZh~cv94NXJ=?^h% zYv>nj?(5;=cGb{ly*xe=J$ftdXcA;byHhAFoLsd-!U(TSYq_WB_u%Zu-E8L^XE@r& ze|~xh;|h_CNJ=K-9&vw%cj8{Qq)(z_>j+eV|{WkMLDYy-VT zwnZTi-e}vfNqj5o;lJ{(TZcCG!(N*uBND{X%cXQ%P3<40Q;NRP)&ds;#nEXIl#hcu zWR1hnsOqQHgF z)dZHZkvf2bCbwy`4ea3M+m!q=l}ioK&4fIr4C8{JJGHWi)uZHYTG)j>jTn8 z(oS>E@xEc=I6l5bW|AIVLjh`X)3K15(jgMmT3-)v$6E0g-QEVz5j!fjQ4Ft_+gB7? zKpIM!$6DA!P@o8ZnvPj6N@pgl*@z&WndB{sfXCe08Kv|a*#LM9H1Efu6?VT9ANfJ4 zC^kDo<)1hWLrhS|5f|=>An_RWY7b1D9=vQj3WESOZJ>#T5RDiCWbRv1L^5au)wBl( zzbf*Pp(FTP1}xy0-yJ8@g^{>8!LpGLBo|79+4zWgB9QM;E~p!EfO>h%NH3Q>YZK^! zI>0#_JDgm61u+K>6&RpF71z}WNRu+9I)89FQjrRBNu$9D=tetZZ94Za$Hdh=P=i~z zQX#--Htt!2w4VTn)*1h>j5oU{lBh;Gvdt<_DCTLK1kty=>L_Df@nYd}IJhw$2<-$? z9njSlvb3l+<)n}YE^oUK#_|Pg>hu5l(He9AS6sjaOu|^^(=+-Ndhw=5N!}pSS@_zS zG9L^b=_Ck!LY;@b4ldPf+RhxHU9_DU*)Xyam{o*I zR1DjX4#|QyXsBA)*fTsGuMNDL13c&St`$3AOI_m1-Nd5Hn>r;evr(m|526nrm}{NY z?+|~j`Paoj+5LZYnf5^wr2GHRlJ7rI>2i4ge`RCk8?pYNUMn{KH-G=3;`+0Md&dcU z*+8v`Tv?44IGz7t<=N`WMzH>?YtO#E|1lAcr>#8WST`7Bh`RLO|7Zq}cGQD}H^H<2z$60WY zMs_T_)&X2QpHs)3C3|Gt1une+e2$kraNMVQ2t6rZIx@bXL)X$yk%9sbTj zhPlAWNap}tRo^0VMkg;O9`Bs)9OzOyt8nk_@_s?4+yI`{Qz{u}hk=t|+toDsZJ9HXu|h^3q}Q=XmMr}@1ADx*_|zE>Gk zB%(;)dEJWRKRqfgNnEu3J=S-n+WM;bQKs#|Fo~nzV|_)k_ksl;evtQ?CtaNsNDz6J z9EYJe{8FF`rX7{l4YWB@$gZ}!|YPzuu=|j18YT&Lk%~S++Rr2NEs1(Cdg_jb~8mZ>MutgE0-&;%0!fD?w$TW>*E@a?e1{r$B^;=8tkpi9(xWZ zfhOkLajkZTJ5zp%IurAd?8^?iXXUgp*jEf(oCqt~L9vY(?js;L{N!N04CHJMI#5awdoaEK?Fjibfxt~)-Nf~(EXmXoi;Ih5qw73JGz zl}#xP-nY?pT!OAYl}!4qTVoChhMP=#8N+kp3yPIDF@F)(`sA8X8qEpfb0w~?T$~1y zy=S&Zfo*{`n&6DPnmdg>bd{WRSsfX;{=}ZT^TT~gbSllOR+BPSw2mI&#>2~He=1)d zr3*|M#mdh|xs|0?a!etF3D?@Zh@uJ^&XNwA0?n+%9A z$txIyHr(**WZMjX0u!@ZiBsVLUPRDQR_9l|J%%oq$kBvfVf6QJx5#JtlpKU!L3LQy5>=5BlY#LxQthK1q_d)Ap+&3m&$1 z&SXZ8gU6_J^K571OZ6gIe46L6sQ>t(EUqQy*23=(+P_T?H{9Vm$S60awhQ`I$F&+W z50%kV`gqIChrrW2+40C%v7j6r4$-(AG@TTi@&49&h>fQ>dS}TCC!y!+rj3UG_iI=2 z{s&U8bvVCE*6)6#8_JVls`&oLa(#VcExiA+v9k7!Se~SlY3u%*-~T~umh*NaGtyq8 zwbR_sj`w$V8wZU;B=&6ll)7M$tXuW0reZyLN>g^RWQ{JCtS=V5DoO`KXM@WzKYqF2 z>va30?!5RBPlZ!{kow~CqNqh*6{Uv3E1{I*kW-Q(H^J;)6@`yrOzB65oG-!4YDrgS z@V}YI2zcDm}&@6jXmf|0WWg>cEn90`r*t@u?kIRLt&yoJK;N4@?v za3i?vsmV5sA_Qw*Y;KNv|HKuLc~yQp?>#6E;Pe14NCQzm?pTxkXn0X@ zoC-HM#VqEdX+_nSXjf7GBOed4Qg+5!e^TL(L6^w?mDQDcDF5qg>tE&nmssx*=1gS? z2`7@1CHMcIDzIiiMg{wYPF$~hZ;@mn@DsH30rn~GWi-d<{a(K}-hL#5tgZBV z#Q9Lv(*d*tqC|w8!pYXDxgf-_{gK})LETMpliiMoHTpD<-$~ijxbU;gGNU!tP<>Tf ztna>)bveaKSkqBkqA!7|X0nm^?xpC5Er)n|7`Z(BZdCo3V)@Rg|1W1^9{7*%knp)C z8!ar%F=C`&gJ=1REcwUczgqV7(BEii{2!etoIZH?;>O&+J2MIF#Uo0e{M&Cxd}5bW zEpnLCNUpMq4~p*kli+|5+_UpmbDv@cPa7phK&<$7(1Q>TOC!GX)JFdkmZBn+x zOLi!jVY{$>q&qm*E2*FP#M_?A;o&q_3n*IK@}=b})0BHGOR)yrt!M5gB)>(wd-t`x+?*!B{V73t?oT{Lar?c?CJ3TiEe^*jD@| zcTC24haHRR$HazkceqwcHCsa0tj!hFq`itBSH63qJP0*XOWldOQqYeM7 z+Eh(If(5dCkKa_3{PgQ4>G0gHolLJGRf)G^%xQYj)O$F#K zvf=K&61CgGEoD{XsLG1;QIY@e`n~tCaNzyUtShjpC@ALt)sgukjxh*YF|Ls&aObCGphAxN1}7$3lx~eJ6C< zH||~DSM4#sFgl;Ugfsm(*!wu?Fen`AtGjpH-TG4QUc0AvSb>r5Is35qhC^+WPT&c5 zoU&8!h6}f1^E|cwRb0POgu*u!1<=~(>e^I>*V2P~enIkGS+P|<{*jy#hPRzn@0$4HFyuHn zDgZq!fLe960~s+H{&LcH9y?fiwG>;~LmV9}o1wdy^iDvW&5St@TV{sO<0XJbXq`tN zB63ud23t7hXb)Hbrhw9M>xG#YhYNL3wLEZ(s@c>MYY z7IU4Dd)pTmnS9$eo1Fm^1?uxL9t%210>jXCs3u1|&6S z1e`61&9oS(mf$Mr!^50cHaTcLET!=Z2JX~|brTA0LNf!;lan|8P+J+QGa3nAfpK=% zHw70jT%$xzz^~x@5pwP2xI8Fk6fx>Biqji~gre1@*QKSJ3As-}`Fe`3(Fsi44k*@P zSXG4@;gPrV9AHd>1*iWup1^9TB7j@1r%HSj0DVA60pkPXH%u@abXagRLx=%s1#=~o zOtEK;E{NN|-o8~EfVw_7HOtOiZDPH1FsE6kP&7y2PPkZ8;0T?zhr{;74%XcE-vDA% zcxE8`<0cIW;!!!9f;2?Kzj6jc<@lGCe;|_W1*_%m4X);oaY0v7-TAg=K58(=tcdxN6 z3$eVlr#CCcD0F+KH-l0e{yl@Eh=rzC#9U0GJU-8@ZZBs%T>-^b#LUeX>8 z?yla6?)7!=cGMdglO?z0URi&0`z)h2Rny5ZyI}3qa@2N+oSOm z15g{FDOW-<^kkEMa9@)yz808&2-9feuVr2Fh3wN>o`A4psGPjRN%46Nqh)GlnrL_~ zTTO(RYK%4ESR59cY%m2(HsKIhe}dg6>i@x1V%fa4JSnkA=8FuWOdCq~M3E+OG@^!Y zw+{v2i}h22JL#-c-QSYRYf=M@_Iw|D!|`4F8UcLr2p><_Rs=(qka?ubHN&vA&_S9=00$3`loWu(4U^N5YV6 zD`zjAA7_-1<;Uh}>wIS)2BFLob97p3&A~E^qX%VVE#^|Y?84f7zyJ45J zeW8&At3KA^U2t8P@G~4RGP*F?`y467zq1H(0Yv%CBA!9L(((*SBPHnAiJi75)ypWy_(70I%zcOyM5%<2a$a^sYY z^z88b;8o+4Moo{$ec3_m9_=;WGdS-Uwz;yLa8jOGe^;a7VXB5%)8G*F}1~ z!PT&RbAtf*U;BfPBk}Pak_w{11&(8`zQmmDUO-(KsVWYQ6ZEDxg4g8g0g~11LbmkT zg4W6BG-du#jyoBJ3I84KuN+s(mN&4plahx@Hu3G)NTSv`ZX3Zua5P3dv z-S}`ZDfZ>)T7CKX}{>DXlg){S^UnfdTnW8Pba- zIVxC4#v2eu%MskWjh<3a!c=pJmj{~*S3E)43Lk1*k5AOSW?+u)n7zO zOBYDT)4N`}{CJVwv^&GWsOqIZXQGAo|LQBNxbzp?|68rEe$D^vVDQWRT5S(hwH9m$ z@{pF~|Kv2yYk%?kzpz1m$284hmS#8YCq3(au(Nx5bXJn_E2#LVxZo!Rk1J|E4u-$B zal$534OGYn3f)LD%D=y73@O}tP%-;=eU35w%m=Epn^0Fl$fVFt46zkd=O?w0%|inr zxcKWgK7dcR0(HQ$=kUHn+o;|)Gf8T0?5u-bX8OJfjycJ9fvMt9=t8?9j(%*wi2#2@ zeK|X5&?YgH&o*SIjn~<$^EYUg%g*V1VFSYqv}|i~gEL|nDKNn`vb5RA&r_@{H!colbV%EYbYJh;U>~JtBvQ7Z&e!g^flu{Km3h9#8r2Uls?$bsRzkWiV~T( zwAwfdhv19>3A+-5coGi6dxfSp&S#}ur!kKdp$G~sBQX?Lf^>#EMj&^2xo`$SPl zLtYQ3jpN2n>#)WG2b+Bf$Jv;Jil|2I)4Y&%(4R9xS(-IbUIv0IX&^Ze-+ue4bP&s> zHR`Gc23hdKBTdhB#Q@2TQp2AYaw2IUt7#w_emRh}G!PBH9LRbah=yMdWFrkk!!HN& zEDc1%F9-5G4Mf8)2l9Oyh=yMdq^{{P&k!1Z1t6NF@<0rH#d>LCt80>q0MYQvfoPJ7 z0MYO@5Lkr{Z@>^aj13OomlNOXdG<6?6?p-W0_9@sczL^aOTNy$Py*x?cbNDaX*Kf@ z>VQyBL0AnSAVXyy!U`a)q#LROlRsmr(1z|mauoi=`1_)~@2pa)}^%#V8Kv+*f zcosm|h(Xu@gpCx0=K+LgF$m89;aLj8_W^|GF$m8A;W-C;`NVgUqP~+9`JF`QFTeOF zAi(!Y0z3&R@FYfpCm_N1NfJB>Y49XQgeM@v_eml=390ZTMusOK!}m!tJPGOWBu0oQ zAjJ1cLOcm6@gzoyCm_Z5Nm4usY4IdRj3*$*_eo+r390cUMvf;S$M;EcJPGOXBu0=Y zAjtPQf@~ce?`Llstte6I!YE>((Etnxv=EF( zq8bdyGynq{Ed=9HsRjc|4Zwg*3&D7Vs=h#OK+bHv?rk=3X z;O1FQlM!0f)Dy58oNP+gXHip6sH&!*N*XYkokdMOL8_X94yh^Gn?+4M;i;N}@~9~p znng`LfvK8;)~G32m_B?a|BNz^Q1CZdbSsIv9$ipd)Ll)~^~eBq$u?U{)b&;!b;$r*Pt^4m z8Fk6Z+DO#())aNglzNt^>n$PblD+htE(SPzOni+ zb_3NWlObG6x;^vb&VG~&Ratb2R9S=@$;35&BgflMu^}D0fy|Dqs2EW|y`|S3IS!CG z(3JJ70C@bZJ1Pa5vV;`?PY~#iN`a=VVgXAg)W0P{KRDOxIu`*Gs^baE~wi zHCQNs60jxw<7){G7Mh|2YzYVX>O_NuN+|&=c_&rHN|?yJ{`I`>wn) z0p>v(z=YNmU^N{Jm@5ZH>;XW=A)p{C!Kp>e;BhQts)F z{CyMy$kW(KElp(p)`|h-$?T+-rZZoKGXUuC91hZ?<|}Ik08O0(kft_YEi(Y<5vL?dwd)=|=m?|Dd(Cqx>R#Hh<7WvWy_Ux7$tkh$?DMH*Gl(HL!CTxQ}C zq^T?rX$&#~AWdk2NFxAwQah=oX)O?G1RzgsC$%)W1tN_AGuO0+1)WlUjuC$nr}FH7ZJoH7bgdp1<-`ElGS-7>G9p8!SGE1j3KO#$cq#ks1Udkio`aq$rXa z1cH#k#$Y6fG9?ZPPD&thS)4BOgqaqL3?@RF zAu7S-C>A7{H4mHd7%W{F6{Wf`L9_zClI2>?1ENAzqdQp*(W77e5d;i~^$0|Y8mPk^ z6Y-qr#vUo_k5Kl2xDtU#!2~PC5IwQ0A;QW8#MKByiZNI%hUf`l4G|O$h-(pu6nd~$ z4AB$G8X|}t5Z5CRDIx)RIg0S;31|%wbPtFd5r`D1uu%-r6W1CdSO5^8MIciA!n0zC zp77QX!3}`;JOYuz8lD59e~zi!#YMR(Eo6+ig-b5Vo9umrHB=C7;R5(ZuNen3$NLC# zsG!A42l?>8m{A@fBN{Lx zOrnBvi(y8&gzRd-jIfCc(k+G=y4N4IR!H1s(A7Np)*rR}PuybA)jT@ZAGM@U z++WbuJbKk1wMv;`mNNFtDRkMK&}zqn^5@U|L7%%E;5i{RGoGN?As7CT=E})=}CrGBR-|!L*K2 zmyw2v+X$w0l)jAIOWZ>+t)moXBwXSKf@vM4F(b?JcMr~Sein5eP(hTms30b(K=VDz+C%vw2uZwQFV{P7+|jb2HHo%q^P<_V+=6Y{u$aw1E;9E zM`a8!*Zw)$hoMwdGcL`zBuQ>@DdrR02?#D8E61>N6lXmFn&eJEa`E^%hLEE<>jW?m zKy>k#I);#=I+A9=EI@YgI6H=rqdV&-HDdtb#bfUnLXPsRqtrkE>BZym7($Nrtf$mK z0P)3R^cX^p`mC$eKmhs06yFA&JYkoPRA=%faJvv0Wq|7yjlfFUJ4NqLukiqRe+$BJmWqewDfm5L; zNx3;{M-4|R^t3xSN9`!-Q=zBExjAY_`G5*N@yE?kJIWMP=qYAyj@nTUp+ZlXadXs; zvI`Y@s+OChcE~&QJb@WIx5bbTtBzE{Xx9hniy1ZNx zV^&Um-ltc8O+>2aB32i4`9X8aLLncyiCO&Ig+~#xQ|FQBDqYmey6}idb~<4fD`j1H zbjMwQ?u;kB$}CpPy6{Mqy8x+9)Wup^7anzU7ohHmx>zsk!ea>T0t_)x7aL_=cs#^i zfQKgP;#pZ29@}vjV7rOBc&@wfbt=P(OJZ4+=GC|?o@i7En=Rp1f6pU_1PMOL)DcHp z)=8dWN$gM5Nh!zr`z1M(33(Qgwq-NPGc75YiDpvDwZ1<}&SXNqMJ#UFO!ACNs%)Z} zlya``>5?;XeJ5nrPLWe$21)kL^+oVB1%@C;Ir4C({a$jCxY&m z@ibs0BLrZ0T2unf!N8#>VAPW^Jgy@cIiR&;oEZVeN)m>r2MIuv9pjt`FxHYVJWWP0azJaxI3WUz^&||B;t56$XzdthLx8c7gyHETf{_DSJI1LH zU_490@aUCbEfnB@ zE>CK7q)EZRNd))@0}LidngGMJ`94jXzQkuRIqC!$CeQb2^7K7q3?@gQ0K*jeK24#% z)MhX_8U+|8()Vd1^*v+^CP$_K!*u#SO{c!(WiUBP1sEpP_i0k~J!A|fN2~zD)cQV8 zt$0Z&POK=1i%%3pNcDJ`xFJE8XyQ{3!@#Kmnj~ltHGE287&t>flLWn?hEEj?11AP( zlAtZr@F{>{;Cuj05_E(b{%SJ}oCcstf@V;|Us;9$-#?lp=mRzURb&|O^rK0F7Er?% zTMPq!eKd)#dqPT~Swc!tNo48aw?iK(nM93pi%-rzTK$v+qDHyp2N?VhjneBM$Qua; zkkBYi0fBU(M(`364WwiVRml+nz~Fyql%|3}a!4?MghpvP2;>Acf_srDAte>4N{$o& z2LD5&94&C_?ZhFZDvL@2RaUo8gvCrHRm&p*-Ljy*xB3<8dz@dPzQ^_z>U+ywp}xoP z73zE3UZK9XzNWr!iX_%FaiUB|$y>1%!5OY=h@f7)mbYZdTHZn>YkA9)tmQ3AvX-|L z$y(k5Bx`wSr&>P7-^5*hZ{lb8Z-DXb7%t!V7)QN$Ef3?#S{}xewLFX`Yk3$?*77i( ztmR=mS$Zk zJd7u6c^FUD@-R-de2h1vB;JfF&*$i8>yZ6LmZs zC+c_@PSo-6i#k4fL0|iizE$t7y3|GmwNI2+)geLpNKagXs1r@NG;D%*FOvI}wNQ~7m;7d7wfv!!0g=r-e3jkKV$ID1kFv1l;o_>5oIa6jY%j?#H?ITv>B zmPPS}uG~6ad!W*pKVyu#np1t@1>(r8(CBRsW0Ax0xS~m`;FKoXdv$^V0hxeaW8kUg z%d%KprYh7`g)tEPG*QVJW;leSqncA1ry$G})o$BEe?^!Kzx`IAAklB(iPoYRkL+;8p9(O;ML}PP7m(#JhcExQc<#@ zD)(5OAwuwd`|W+Q-7>4Rya?g8%dFE9h4p1p7O6sN=}$a9>!VY8$QpBYCah+QuQB+x z)NLcN=Kx_z`3Yh&{C1y9!i2UvhkLQUWJzLC(584*Y=v-HP*S)qC@)wTDy@?x5=A~r zu{1@c`L#it7&Ls&uMR%)v=htY6nm&=9J`Wpf(1gZ|Jd;Gnd}2+f$@dL7Nr|q7SvA| z2B-}OY7~noS`l&DN71Sf(V#jMtqBp0phMBR5Yccs6m19*jg3RmGa;gZa432%L^SFR zMc)hYJb_LS&iAPzP)!OQb=bF2S%BW^uy0ccsl&cq4aCIR`K#Cn@HtP4_*lS!x-^h3 z_zZ!VAQBWV6HQ?YkY_Fw*7F3HhD2tnOKsfVr&iR65-X~%=3B40`~%z;v|h`%Uaj7G zJ>Pn*dh3mR>-FlbpXFO`RB!z}-}+hg*5Bt_Kd;^z&%@^y{QC)-hr~tnvOGci7`@de zXdj_CyklRPVCxZ@t4E2>Hw=)9ImT`H9H0|llG0t5x%`H23F(fK<%9@F5d?o!Vxb6v zKPtje1i>E_;V6ROkBV>rlL-wI|+-Tj#_(ntS5Cq{?o^)}bulmqkUP%qXLXYSCcA&3Sf$k5% zLXW2ccc8CVf$k5%LXT$%cc5=nf$k5%LXRg7cc4G30^J{ig&xl*?m&ND1-d^33ms|3 zBX+t2{rf7={UKQB--jt^HQ;&)E18Ba^kPN>bf3x-(ETA;=*5f%=suMvp!-9x(2E%j(0wXT zK=+4Wp%*h6p!-ywfbI{$LN8`CKrd&s+z>4EB%>{tFdE92AHrzySEV$S1A4&55k|`m z!A`4~jnUBOq1ck-hG3x=voRX_Jd}X$55Yn&W@AA2c_;zhAA*Hm%*KH3^H2i1KLiWC zn2iD5=b;32e+U+OF&hKA&qE35{tztmVm1c!ayHHl!9p))V>B#hIj*x82D3Pq}WuU8rou5x(==hbU>xeM&}n{%L8ob+a65Ixc7;y!Lkv1ivy->~`wN{tBJuhZuC4=6|_0;kY469%-V{P9v=rPqefups zu$C^(t4L@mNlD@$KdhY4a^z~RcCNCO!;vu+$u!jqNsC-B`KcGpV6rh4i9FQ{36tt$ ziq2rNF%?NfH71fZ)yEW_!DM495}0aCB#Nq!DLRA6##AIv)tE?9RUcDy29u4cNZhJ1 zkszx+rsxbN8&i=qR%0SLSA9&;8B8{&B4Mq@M3TDtn4&Y7Y)n;Td2~!k0fmTGA@WU1 zH3p8ZB6H8pMj=Xz+5lNdIu#tR?e4Tc&ca?VI}Q`m>Gtv-S1$`Zvoft9AS% zmM83Is_J*6aeFAlH@D9>?%Vx-62`^orguBKPL}^g3zla30|vtXL=ER_yMx>NVejhQ zSTqNH@uvOHal7BXYKxWS`pN?Sv%W|*_j;r8u=nQb?;7=+yN$!MMpn<3 z7ssE*Vlc$>2)Fm5J*F<-jmNi}OG_U=eq3a#UmOgtmVzcE38*f?kJi8Ly&WwPg9xO| z5*LHc-A%VYZjUiK8X5jK%O8@WkHvq}85m;Iem>z3pE0 z`Xn@PL9w9r$HDN|_HY0i;JN~06`1XGd;RNPAN>_HwX!Me42IpXug++E0qMLA&A>1P z{@&ai_5Rt-D7b&=?52HvEeOa0<&hZ=+r9Bfj0a+LcY8Y+js;EX(Id*5Ho9$hx`L-F zK2zJ*gCQvN0?0!yQcx-vZEg-fJQ{azZm-+puGo@UN?Y41UFq-x5`9=;1U!>MR)VZT zH|UuZo&4#IGN_@;?hpisf+{~|bb4?)m+JZUBk<#0XDmFZpC6$s$jNc9qaGT;M6bn% z_VryCSyLaQ@(AeJYR!vtr10VIFCP8I8BHpU$DI$lYTw>o-%mN0*Lp6;?P2@I%twOc ziO?#Ox;9yZUL)&}UM{Y;CELnmL|pG7vmsn%RcB+DhKT7}>}I&xtJZ`8iA~Y#kGogH z_BF`8k5%c9iTkeSQFr?h&rpcLZFkrnLo`uIO+OFw8HUUFZrDf77veWsRPIApuFa)t z(o$-)@hG-HC0$}E{-Hmz7eS57_VvhA;XhENDjEWU5Pg>2m1s#J3oSlRNrCs>5obVL z>JRwes)N=T>b!$Rp@Cq|dPE8uFA>+tep&g)11Jkq>|IXGCyqqY17kSTVr$rC88+;) z2!d{?vPw{qn&q?%GGv|u=y7e!;m67#wpvdVYv?s{!T1{W@F?5;`R95)JH;DK=M8$! zvT@pg5R$)#s`7fgD~DNV!{@RsblP zxE+w}8&)MTyIxB9w!}8{7%Mm*qLyUtzn_`XNK+_cK_MiH!A%*=t=3Z`AvN3?z?2ww zAkPBkhXITgn3o#tEMT&BLRxeUIRUfkVg@RqeQ}XZNDh&e)3Vux=CPPD5<;nD-cft% z2&9UlFESNIR#jA(iD=u>orZ+uO+v1OEAq-A8L2s&%#O!HE@;~R%Gb)(n2T(h7hmCh50uH+N`5#qQqMiGCkj7Dk|6x zWGa@6i!xWznKnhhC3*N=IKXYO?qcE|v?$@H7Sx!W9=u}R$@KG(VoUbr^rGkC6uW)p z*E+|Wd1~~SwOryDsu*W?eM8e1FUX+R_Kkr;gdq9LudPz8QWFn~tel3GVsr@*fBl-p>sy*!Z z1^)bPS}z0EnwLKt3_<>I+f_wz(JBWJ8CObVjz11~%lBFEKNoj5H}|yrBl$$=)BXpw zvw$N8U$x7H_LI2*XXEY&ws4IkZtZ+?^XVM_IyYAiP!A>vb8&G|g3%)&M}u@0Xr~W3 z&<2;a6bLMGZFz1^ynHECO`11=V!l;T9Z)kU3g<4P!DZF<8mYP68bQi>aL|!OAh%R4 z@kD%pg92E0PPtwmo$fZ8hx^ULhVUBIuqQwRF}I0UHTp$-W`|0mv39YD))SF;vY=y7 zGWC5s?0taOaFc%bIz(?8#!E`Zg5?Ox6>bYB&FJHq%ULHzt5&@wo{CE~(|K_{fPY=` zAdL<`iV=r!(t;3g@n_a)kH)m`si`Wc^@K+&ONa)ZY=fzT7J*V_7D2rabBdZJaw?AY zsrWEYJ~A~}GtLhX7*by3ag+c}7$7t=-pray+^N~e--j@b7}+fGE)_~@iMKbrE#sQWK@3D3#51p5r%<$Mxdt%=!8aP$jJVMYqkUB8 zv|X2OXOe+j*;qD^d1?dr6i(>niUNyZIKl~8gQt~9B>D#Z58dIo_Z9~;6|E2VtR*`* z+s%G#oX!bsbZYu9vHcPkQVc2fH(YlMlBz0+gf&P!}tT z)3q*oIQAKL-dQSD6(n558|Vr&a|k?LY{x{x5+>| znl20oPqoUC7`#(hf^{zD5sydkWhy#|082r`4w@q#3UG;*ktWMAFgmXfhNzg_+Vus{rS;3i(zb6-~Yi^RLaLB;NdVho+BQr${tPYwrxB74Ot`i5^?^`Ig^f%oE8_S>YYT3w0;}%kJ09cLnaX5T^4OcX=PrVVv$MyPTnh6BH67in|;4#O3X6> z_0k${3R8u9PZ9a{jAkE!FNYCeAyQ9rtQ|)+6;`zt^b`I^#2@`>_b=#F6#tv$kEJA% z0h(rCfo54q>JPi&hduqlkTs2u_6QQ0`me25>Ui?Z?>Bo!D+Qu5?Kpc>&^f4C3sVs+(R_X{3bc zfCDJ9-;?a58KE&nbmxB|+{rIy4KYGXcE`NM!q@LwFFL|8FVjarHp8meZc@ zn>ejH?%%pdM2_?9D9=T^l<(Zgx4R8zbM&Bbl9C5_g7-TKWtq&oYlvn5DtYyq;C zct!*!?4E~>#>cH3j`MBy<0<7uiwrC#WUpfz!LTM#JVWf1j>f@-9**;=!g#9Eezkf< zs)`&f99Gl4xucV&K|hnYR5r=%86&j7jW#M93NLH06BO7s7{?gLhCHFzm6)YpwI6w6 zQf|T|PF%HpR5F{bVAwS3s(n^l^{Tasr~@d+4{$#GAT5R2lY^0y#(iKG%IUWJcW{CD?&07@{73ila@f5W`-lhs0UovCUH@uc z+#u*2eztc1SKJ2CGu*OaL7L_mVH7KCJwnx~YKjnxN+a09Q3Nw(MSQS34-wSj%MA!S zw$YfPr{SNSWN4G29t))XY*Y1SuKi4aiJ9PxT%f}+ki`kA(!nxxqzHEo4FAcN%Lb*( zc=RmZA?fiP#_6N^QT|1vy0F736T2-PHXZ{s{GdUzuTlv;K2(vXk&x1;p?AO$G_jO~ zzn9!}Za^Pl3N3Tf31?6VJ~(P#m`TgcKH?4CUUgJZNxztI^&aJJi<&rHh02#E&S%ZP z5lvKE=^~L9B@JM56IUVV!dR4cHaBC}A-WgTso)D z=JuHGZr-EdT^lp|h?{d#8KQy|nB0wlf;)D&>Pe>(0*ImN!*2UpRmJZrG;D-ej>Ybx zoR|5kJH zC#)ZOI0gI%Z@)h?WzdCz!EnAk8sVt@H$*EC#_&JD=wt9|5o#C)60GaxnHL}5^*ZlF z`v$if<&8q1O^4*EXdWyh9p~?U_ucX*7#(+GvSM&vZ&0Tu!#C~B?6LB)&FZ2Mt#`c< zwjzXh(eHK;s?r`}TQWc_QTGGl|HR*LLzcS*c4<%M^_4wc(>R;3<7%s#wERd-aidQvQw-Tz;c_y3D7|C87&zW*=cm;b3@ zaGBq^{~y21AJngQ`5*EQ8=XFM&hL@|!1o{=9R1kH)Mb8|4i?W&wT`mWou9JfqvjzJ zj&s71NDxScRupRDBsAGQI(*%HBjLg8=->F4Vqe|4S0N;5K3zJ2LIq<*5Sv2bHGfu8 zoRUH3EXj+i;uHibm@w;JcPW{JQe##}YBgxTkk&*d2&hK;%_vc`eRjN)GMj;DJr#B~ z11(Hz^m&dvgDSMN$5Fw06Q;p5l_=hRq@d9rkNT&mF7jxpQEhJ8J{V(Lrlkp-B7ys)JNpm@Y#PzC8fCnMwyY=B@^CdO60d z{`LU)@~G7eoJViJ;pEV@37bfnWlUVmRURycR8ZslbAYrdZnDnZkaBk6Iw0(uAKAm# z>-WZRKKA~}AwT5AYj@uDpnJvN`gh1urn?yZP1FuoH`b687r=1ykpAg@y2XW(9{Evy zWnIJIhOwUIN7X#nN^Sze&v3OyK`p**kGeHH7itHjcP@%Kj>tnx9D*7l)SAvC6AXPz zH$u16F8pz>RXF^k5~^)(+W0d}M&H!ZFz2zsQ3gLQkS)i+SDk4%9q+bgVrm+Z*zXxy zz)AT~Arkv4ZJIwF!^JE2S@>9hRif2!Cs-X9l-txN92~969B39ddh7SH%8E&1m~eg| zR!K?{Z`3tVq;@F=QwAMIPMQ0$PxS>`ZmNb3sD!wh0U$470r)}~thcm&DBJ3^X@4l15?6aEW!h(Thamn+Mn{xd#SI7hp2lZ=sFCCKIMy)CNO+7){OqQj z_;%%aZ_Rw(xC2}j>D#lOHx5@TuJ`uL=Zy=DvCi{rYJ|qisMI6*0kvVNc;O{U!xvhS z_&PNWexV}x?~1@HRtbAC8tXe`Luw#oIMV->0)~CMs9C3c5BV*m@>SFj*0r$UgjEjM z@XTNPU)}H4{TiJ0kcUGbuBiQZH6qHc!Y!@2dfk5UX&^#9V%!f~dQg7qpC z`hV;7^^N*^;Qw7+U0?s||Miggh5o4M*{xWOPT&3H|Nk*~hioN?NgH&2h3|J+CGIbL zAYggjJP<$tALb#R%02u$d4&eal>BcSLBGHFMO}%hXJRr|Do6KBaJw~+_s@o z5d(-_#o4&s`Sl3u=kj{+5oQydOL+C9A|X_)7WkUoW4+dY9XGPp=}xm%_L@OhGXOei z_`g0*&q**G&d^1BYWUFn$!Otmh{xHNO-VO&8q{v~TcX;6eek^1h?117H#ZTS8!}aMULK?w19(Ft9Ydq=!QYBM~qI?D)Dfn|l zd?N!>$#|j=OAO2oi5R1KiJ;Y+?ghdob0cMf&t#oz zrxZ<+S-JDB3sweMibHZqO3-Ay zr`&XIDZ?mEBnHS_2;5-;ybgF52MPv*V}z>kDkJxf^7ti(2szR?JU=KTH%v|n5>9T* zqC^{nEmvrAM@SMgkX%Mm@?sM=7eG*m>VljA(~(3DY*DcI6|QTL0=DW_cOaQ$XCEwa z&^T;mN3T;u^~~R4_x&BTI+?;F7VcyUx1dK{dn`kiM2NoQ<1ABI6YU2|oVfhyIW`&c z+zvA70Pi^sK6Z!F>XizI#c^FJc!ha%qhy^eG; zRV5@;qE$||35W`a67ml@rN5|S>_U>W9Oi}po7N2 zaf|ISA3FYG_;4ohV}AdhD}HU#0juti8h4< zw@=FstxJ>w7GL z5{0f6UTr1pxZ)&JJY4n9NTA-$Itjgqa)DBPl zcONIKq{5LJot9T&-e{#h(J1hBi*g?fa8ymp8(Tk@V*;}=)KmtVX4%T)xV^7B04XoS zo>@xf7b-n<$w$>XwTu}kEX#}%P{rw5Jy)%NUvK(Tx3DVWT+4FDbSfT&RaKq}mBWZY zn|K^$Yi|c2*Iq4x?V1siWPfgxW;uKD%WV;0`-=!@6vLh zq-siDXi9VhAC}*>4Ly7&cawfsN+jj_kY>Buk<(4{$$?wq52s)#KRtQ`HpM+v?(luZ z63oHVEa{F4y0L=W(;TWFEk3KRN2QMZ<*;2mU^(dL}f9M@9Eg5vRTj(CF;LOLUbC)H_5=b(P*1zz77;~X1qRa8Zy zBRq4Z9IY|gmK51p7HFQR_`Z5K($X8k`-d}fl1WGG`N6BkDGBEd+9)Q7>MtVNe5L3! zQetK<`|lok29*_%jzN{DSQmoB6aH8XOH3|?d_bNQDwvbz(m?o2V46`YW5`1DFl6DB zVn{>CVMxPpF!cYk_vYPg97n&f|JJ7%+vh4E1(5(ZIW)u^3WQ`P++Gs0L>vm3>9xALy0)%LnN}8QNG?m>hEdyuC-PGMu0&=Rg1mx~(=UB3V=73jMUv`GWb9nQK z&4VkZ0FTG2vk;|@4mt}1x5m}$cppw$KL2Tqh>}My*ak=K*JFil4{PXfY`i6DM60Vf zeu)>*_E8Z+P#a0f;5~$=7TK&}d=(e5*~^I{6v78Jnsz&I*kPYB@?uJ#C#Zm)WhK>k zA(}I)Vem4RnF>Qr|D?7_c4?HRW{Ujyo4@Z$-#M ztIWhSeMR`SUK3k5fj5M-kmX^X+Xf(#x(ckpgwAE8k;|+}#x#6doIV}t#C7m1yjM=> zj}$ZZUmUb(Yh{eh5s1s6M*ths7dp!x16E#PN}$dBN7m~35G#VQi-KL@h14Qok@ehb zz1)3$&<-qV>a=zHn0+1&o5`nll#134>J*&5uU;zx1GkRB=@baK#o3*)I2hc@rmuwp zK^*8srq0`06yKG5x!6c~?!NWg#`+Qv!|W23Q&VExvw? zPVV~I=c-MwtfHkhu2oN=Ncu@M&z3d1u_73&N}H{dvbw5Z$qlNinf8lqh@ACRytY0% zk5AKQs|u&nOmEJrg4KF~HCDCKyIJtmPkzmxa~gw@I%AfE@(8e+YFg_Hoha>?{E70u z(hFwLEoGuqyu_NOwZ71a=Fuq!>MoT^nWZRHVxD(JkJZo_jz#Bb6;`A&Wu8{a5|g!R zsrGNZo>KRfj<4jrttFYrK3!zh0u%7sNF6lUZ1dz86TFt4`kipLY&tcOOw;f6ksCce zU^(;+BRop`_<_?*;!39hL~zJUS?eZ^@zY@1t>tHs6RE{y>K0?H5Ez%9zh$Y|Y|y_* zRg*p?Jpd&sr@@cY4@h{+AVl**TUB2KtYuq`_Hs_%JU!8@Q45R`NX6>!tin3TLI4Fs za-nNX}wtVB!MO$vB<4d1RwbvY7u8_jTU*Q6RH<=ceCP&Ay^ zqy6 z0<9@ht6D^66uYewGaX#S-6E5eF$R%=4QJSpa=Ylz<7T$p80NDLLlW}OqL39oP#0qv znTA{CEl!iq9k5KT!;s4=t)Qres|V>cV68>l0bHT#D#4+kPkITQh6+#UU7^`fCmu0U z6Vkc+h>WOD+649dvKrLnSG9(J7tx?5DWIsgY|v>+3^Q$nS@0DHAO`}v8Ii|dpYENf zeKNMF(}YNdXaO(tYudQgQdx&cvX_P!bku#*nFP)hO>xxhxS$|JoUO1_C%BP4nfbj~ z!`Gc~LAf2m$6@+RU=Q%SaF9iJf`Wi6;c@wyP^g4NFQJ)mOa;@4V?85H)xq)6EB<5Q zhCcHHlQe25YB}aVGzH4+X7#V7jT^6+p046w%>w$ThSNLAN(hNd5w8>gMOsKr2Q)d+ z)EOLRA<_&H01-@Zrei|PpBC9dnm#MuD$z>Z^(h+wl+M|+nbW}pFkkW`*|$&^4Ia8K znc0QrHxlOz3n*QDSWz*YvaxM z7Xr#$Ly6uKP|6O)B6`KKSFj9=M=p)Lch!Nl$AMl2k*6Gp^c?Q012qRa9`0fWdIBXn zD8NA(rHQ|{HCq(9Y|+9dr#tZYu7Vx-Oj+n?Rm4ghsv=(nDRtHJ+n%bn@PhMH;Q$4m zW>qsh)nbZCi5MUm$F0+fLTi;E&FGQ?ZDOwzPf2PHDOzVMH>+W+{MlX2YVQLQOx zX4UZM`i#)St>SR*ZEsHzVJx0SN4`qHY3?6K^Y&eoR~9~P8L-zA2%(Rxok>wGY-0Fu zP7QcJ5SqE1x_QlvXs9$K1M}yW^u|kH7y(U3U#S*3ZI`JD zqjkBr3N>E@INC@fsT{gOw6yd7L}h#|3uH|)l(a@j%BufF(?AeSTMMp$+7`MOqzf3r zbtrnhlhI3~9lhS(Ufv=7Kpy0>No`^dbOs5Ocfod-$WLi@kXSLM_;^J=dIM;v*@Qs1 zh9PIu0VC(}Wlnuj%CkKlA!yD?`_xz*p?vxBA zkX2+8OPr?Xd*wRZ;3G;mFJF!jkUe`^n!NeEM>e>$NUwXm%QaUS+lwwa!iSEg*9cXH zc!VF}aem%?@`OV2bw&s?2FG(ZsxDf6Nf9e`Vt5V=CX$uH6FnM=^AGpc)Hs+~0DB?> zb8!Jr~c%`QKf|_bd2Jh5?7!mvu&7c%qo1e<wM|Z6fSWVlAITweX)lu4vO(mneaX{7tQbsi~+|D1{A(A}|C&Q4t#s zVP7fCDDn>o%1b+vE;-=J;nm>s%?u$Ckqb;AghU65a7&AXTEuW5K&cASN;e!S$X&;d z`byzoQ3_VhJ|bsuHN6tksM24#T-l~@ws=i-^*dU5g;pZ8>C;GW&xkTGs5PXLat&=l zCFj&;vW_*25XX{@b#n60iMio<$4E5Kfwv3;NcSL2MXqiAK}DLBUEI9Qsi-HIsGU<$ zPd-u6Cdmq9tk2FSmY9VeOv;`xT?vlZM`R=WpfRWG227(wjdL6`taGSP+nQ2)o#krh z?ZcI@P<$|IUU)ny^3eoFad|f6xgq#INpUjw2(}!{{F_cLuv0tJz({r-QbiXL9AyHw zIl-xc%G;_eP=jZ*Xo(Y#q?11^W9mkxYv8ogy$#NUFw4?z-iGQBO|NUe(Hkka<|%FS zjv|~-M+8AmoGduH2PIxK?M<8B6$FhY2^xBnsi^{T!W5XfpeYSgYmSVeT2)-goiUzb z`N==C=)Mea^X$JWy+-LUe}TXR2-rJ{Dl&z|8_w|XMkIJxxx^m1IbRu!SKHt$ej4;U zlkS_3E7!dX`=I8nOTI5g>`SwNv?uLbWBH%k6K0u2Ah{H97M_wbkA+y)soVB>VA3 z$kZXY=d zKJ8o}Z-Km&oy`-vleX^a=CdR;H>@7(4E+IqW_EBbWFe^H*p3GOSlitC7fXUVH5|S3 z8)UCQ|LJ2PLV9IQLQ<7k(Jvq*#_-(MARb!-bM&A#Xr$b=KW(yp&j?;-<03bmMg1wn zuyczbkNgMEea-K>M@yn{OH?6nrXMm=s`fyHN!T*C`*uyhuNX<9k(Jq=&i!&plr(N8 z=mtfz%uTfRnPaaohGMTGMuIau7?6)%_oR!4FJ zT&;!mlCs%YX9EK1q2YQx1}~Vrk*9A`szpuUB96iU3|aDlY`zZ%sG*^TKwPLE$I#YY zA!h+t%INIn{?TrW^ZQUUq?i)aV=R-2sr)U9Lzr$8zQ91jf1^G!T~DBOx*2sTI7zgu zzQyEKyiA%<(kde7i)IRYNZgGyn-HOJp!&_rW`mpJ^<$(~Rod>?D&Y$~0jt+|{TL~{ zmzIzaKB@s9#qjWVp3nau$@;XGQGIQt7FB*8OpzZ5fqv@Dka&AyA2_J%7?7Ytz zIXDZ>N_5so_%RF#YeRhgbQ@Wm#-kC^b*x+sDAm&VVzz?35UZlQv)N4#JpV<%-=i=v zGKbi771*@C_QNW4`%jSyochHdxpJh8rKjhU@!S50I-_$~U|vs!_ov{1*{G*Nxp|mp z^s|~qk^jA3-NtLF_;3}j7=>KZ00k0Dgi(@lKV@^$Jj6#0NQt9@jEZ-ucth&S7*5Ts z+; zH3YmkW#mLVBbIS!(^7s@k%y8xccmOe7^M44NN0*Ppv1-#ks|5DElSw1l1%_Cu`Xw% zh!Y{qW;R}?e^0?!H#+{}(KXQirwsa+HhngA_|aV!g{S3N$YK zfD~6oF{)z!q{YRW2PEJz)Nlhwfepj-@9E0f?AA+Qf|`2roT2S8hvCW^S%9*p&((fY zXx@R==a_d2*=E~>J*4#S!7bnu*7WN3n?m#Uo1SCR$rxITSZV7Vu_u-Oz0h=TLFE)~ zFNVfhh&_D|M^%bfxd?);sDx>hPvLa22?JrHkx^C2+bOW3nrHKIUOH_>JkARAW3Q=R zMcag@&2x5xNP34X_B=aWZmR!Cd?w4_UH*z^Yy2fqhx}Px=X`y6ZWkFcWbBFPEYRz4 zdk>nFqhFPVOCRIB! zWKiZkKh~(S6ZD-DH_8%+(BYnf*I-6Da$e?z8=4ai#E+M zy6ht_HL}}}E@AbU;L>7rF&SS)l$nG)Uishcrxn$}>#1ao;7Pp>G;G)i=$bEF#iZG6ruenfH_;+`^P_eDGgjH98PiOuuz1+P4Ca|uqs zYs*rF&|a#V3F5R7Zc@-2ByROyMFOylAK!O@DV5DAC)4LHQ-pRDpgz3O}rxy14=yP$mg4J29o2U<#^+o;!>Aa>IE z4Su~D-ymTQc}ECaAlzDv*!_sTJb~k~D?yx?Cec2_hrY*5l|)z;@sz)d#{^sT!FTbH zr!JrJWm|5+vHiI5Pf%9ho^@~M;*EJAnh{~@@q!&YWjFj?^e$pqi09(Fc+P0DES}T% zm~IkrlRREojeC>T{(%)E+%(I}3mGlnjNXnwdZZhzZpTIsZ7wz4B%B;)lPK^^jLGzw zf@3Jghl1P$-cp)Hjc1u5vT&A3jN=~ry?6>b+quj++&Mu-;P#TH2$tWExSmAx1~+IA z`Xl$U-!2hQ_vqq5kdp;Q9x$hKAF%wNwU1ACU$x?2_S-+jf-33mE4#=^uC)O6frkO? z{8PElBx{Mq)+1=}cz03b6Z-=2<`CN%Z~pb;Kd}h^1OQ1=etk_R#>U?azTmdU$Lj&o zT13}?C?5?=k9_)>HXa&`QF%3rF=Ea4WoSY{f!l7#qcIMcuYGa`UMA3XEH_u?2d9izPy=6|9JWfNWd63 z_MUcT&>rF7>QDa_z3)tr;Nz0~r76$c*2;&~XDc7Jkuz@eCxp{PVz`b_*@dE?418_@BXW*jdFH_ddq2 zmG0%>FN5CmAJ*2M)lw-+agr9lpFn!*PsCYkXfBaENo<%P3ZB7b{O2R2OwHv5Cpyg( zTjchw#^sEGii#nyJqw(-KpL3iHKjHFoyr{K0)yzSWHeNdd{z;U#4b2(NpdHA*7^k2 zk$egOK;2tVu_lk-CeD@-?i}G{Njn|f;qTIF=thHWSs+7DN_~-wU@gFP*4}L+=nizR zta8DYW=+pexP+yp-a=%h=23_X+E{f%$+OPJQsKY!Wegzxfd~U{^R{@{s?Geds2Cvirlw$atG2+xm9qKu zyz!*)^YHHDl%GQSR~sZ_PSrHYK#WmcfzKNbfye1vN~wAEAkzrQqA;?iC*u^sjv zO=}C+ys0swIaEX)m-H{|zo^mjX|%U!OVB&jBobVsRaLrN*(9KcXD z1re?uI!r`OsML67;^YXGtB8XCN0y_tB@bEwgTLN@)*^i$CC-I+%~gL4|7FUm+ZoLU zxQPxYUOENMoJBR2cbBwc?t9_sWuzbWEL&pBy1t76(0a9$p7X!7#suo=b*D?3w|D(m zCpqw5vSS%?B0%{#>JD#u{iwl@R;iYBr6up%i@{|K#lgy(>+2m9W*q|K5~!Td&F;0@ zyZZ+*9UpK-*xhfR#Xp^#Jo@JTKXf^IGFlZgk`t7_?D+we;t|y1Vtyru37)>TwNd+~ zR$F`a?AgXQwL1Q{wT0jOsn^#xzNxQoKHI84+uYo&e^Xmquh%!eiE1VLnX5Pu6JaHy zZ?1pX`Uo%c)HZt4tHJejnEL)Jeeu0*X}JCOM`(}!A61%5Q4>xw6AoLkPZCz=KiKV^ z%MLleZ$70zD_nFBe3%f)dN4Kg5C((9suyEYho8Zb9a369Iv8~OqbWkN{|wqos`UCw zO;oRtpw;P;r%z|}k;FL!uRw+UX6xvz71!h1%IpIa>l5LL)0uIn@_Ow1_wQF2_gOUa z>fqdzvr)1f{OsKt2>vov825H&YR=kw@zGff0XE*- z-+gs-d`6PM$?LP9h=zWD4NcoshvnPepaUUzN>Nd+$JhKe!53t-W|1_D+sml%m2QbY z)UeCZ|MULkU_>WeDHsuz&!GQno3)xx|2Nia5A?qjkmoGCaQgH>|L>OmJ2vq6VE;w) zzRoN3;TMmek(tyhtnCBE+;#Yek`t+SKeW((Swz3j@Zqdi?2-@U5B5H5OF zH`-nuy{2XXR=%96UdFEo(73tj4?*ALggikiWQa){D_hy4qA3~K1DtiFoBw(LZ2!gn z!G8N!x(!N7wk2HY)~{1~&+d+apvLb)L5?0uG7R60iBdmWNF)yXl8`|LYYQT4*+V3V zq)oB{00~7*DvqSjkY)m(147Z%+KJ_06+n7<>g~V!dexj{_lv1k@cfr?L1MVS6N6ih z1;{@C>-EhwU;f*uKdV2S|M!6;ixf_9^z(mt!rul7f6rE;48e~LXqmEK6qfs_q9?{# zq8}UN5<;9;p5iER|I&b$D4!|xaot5il@w2D3Z#=`3Mz0KBT&I%>!{62qyXiT>ZVX> zuW{V3c)9;dv_nBo9EF!qatQ^OQp;j&-lcHzyE%c^#NlpyeAGmE+3zDn3t%C1JnHr} zoFc5>gUNen0;)4g| zEo#S`s2mXleD8(Q1xQ5&q%lvyVXG7ZDwUIiT$_!Y%6L1t*<@k zf9GD*5*5R$ta+b8+lBw~^uKGQ|6O~~{}zLChK9D7ewGw!(qRXeqb+r;y8cqRhAG$9 z)9M$!!IW;{!{c;geQjfjXra(hQjnwf6b2SiJCSgphe%1dm=?o{vOAn!_q*Z-0-{TX zy0co{dbY`}ey1)rez#4jK&Rv3JIZ5#AWlf#j@zZ^>Vog|AmJ8xOZKvQ+UtXt>A@TY z$MW&po9mpu{`}{yL|@b}jTtUxm_`2@7kr=)MGmF7c?x&`R`c~~E5==vz1GQTs|h9Q zYJAo_uwMMKdwR5g^a{FFqvj5Q?^#`d&z|U2XYv+(VF+;y7vpY!FdC8-oG#gluf3dB z>ub+=N+8d@0o^diJ;444%mNW{;3LP;r-YNOQoH-4p&nT=oQR3TZ&l! zzGnlJ@T^cCG$qV`WSdD7V^4qHJ$T)UPg^frr!ANfvtzG^Y+YzP0Ed&->C0BL9ltz2 z1?k=c=~k4{nM;g-8c3kl?;sLjKh6DwruwqA+r}9I3T{H^Ed{sSkyH@*k`>_N_-yxRzrFu|Tk-DR-f8RXOgel8=C2B<8mBPQ>JhB2 z9(E{tcoLtHGGlT*p7y6J(M$HE?!grsCk-M&@HIfb2rJL!&@HSt{(gu61-;hN}oE!6RTR1G~wSNpGyD(yO|)`hXvfE@l% zO@JB6h`=nw;umQmaLike4)>3aPvaPoZ@}l+DFIy1yw%l{NuTm@a$t=}r1gvtHl|1Z z?30@z?k0xu`S@TjHhU$0v42E39iP5FXq^!nTIP9`NI(wo@T^IGgEZ#)mJF7Ii%(f& z;D8?-@Sm>mP*#+*VNtN1xL%77TZb>;pJ0#h^{bSraGl-P?cUR$3`5i|+;y_6{JP~Ic)ys`(f$UH^oU3s!&9Tm! zS{Mv!zX(h;+owUh2ZYT$p$(O`pCDXdPpqyU59!Vbyf3FBJ*u0U!eXpb@Gd;uRJTF9 zcxVYEG8MW1<(t|3i|i|rcYhuDhCgAbLS1~Ru5qbYA{6&E-w0$K72n#(y%Dtcn@);oLMe~tPjA=_J%w@zDDd=OPY;RxB zCe#l?sRcgX2%L$u1LfUEDGS$Lc8eu{g;uToI9bkp5?(T%Wcoft6JP3jLC=dz(QM@W z0#;3p#)Y~4E3|5|R>srNf~5+u{}lY;8Q=erg>NSTfY{6> z1ZX1l^+^L+5&(2(r@Ozz$}5F$&j`JbvH(-YMiqS~S@@RxKULRSX`ve_ZVpK2^>JcQ za2<<#&*Jr6Q)RXkAXx>vEbhg|kSKdf4`W&?&osQ1)62(7Iy}a|EmagP+pMYMD z{U82cYu@=^+pIl%IR6uXyn_b?PxgYvf(*c3=iQ(e?Ve9MZ#q{~L~x=|PPldWVm#~5 zzz@{^%<*!wBSzK!ES$z3l!gVDg5!lNr6H*gcagwi#7XgRL`*u+O1$ZJM6|6A`5W<7 z-znhxEyv%2y_vI7%*NMGhsc6Al*OkjK?a1+ycB*zzq=)SaXWW|Tk{t;v%wHSA>~Em zkhW2&4Kj+%SZ9_|pfiNV2>D8`GRg=i?bM)yK`B!&f=fj5=)XNBw`TEQ+4O%6#-6%I z|Lf~p5B8tp0KP@ZqST~Vxgh=D_k;gQ|KA5vUJR%(MKM)QxBqC>Q3?Te-hbUhSduT*Ea$Wd9*YuqguTM(2Hajtr1bix>*HIMWM`?m6Tb zow|1aL$`lTaoC9oK}>mYBz3+n}b*g&v4Gh)fcuPDM!Pb8V=$q zUHvKCIJXGrbxcY6UFiX=zy^(}FyDlrnfho(QeTul@8h505Ph;s6v2qwQd48cxJe%& zHV|T%k_wV9mnw?yD+vw4{%l8PqH+K(ENs^|=YRp{1XI?U{h);=i85(V)JWO3=2&u4 zH4CN+GcpbH8@dQ}T`tR3mld+axQS_}Ps`2G7Wt3={_CsOQM`Zj^YPzWd+Z3LfMQHc zB{fisK`PJYh+%q97SoN! zWo4z+G%i+8aE}nZTbO98lnOrHS}*WeHRe_Dh1m zCyC2Rg)uJMAkbpHZuyMn5Q8iiST%mBW?iPyGqPX|dTZmmeDCb(3YQiE@42|zBbkdR z5g!$7wWu|7-5HMsciD*bo5g96{P{NjI)+6F(HzYIDr%&}vpFX{_nWC3@W{PTAGj$fvhnQK*sN#{c zXk>2{gD^Jd=QUR$&_qvAQz+np07Z7bf%B8+fl=^Q#maNr&!f?gYNPP1%PpxlV1s2( z7dQW>^Uwcj-u$1IpMR1F{^MT(C|ktg^N>Ya-+v(0pz2-SUI7vX38O4umNZ@vgV|5zH{2gjmy!rv3kA(!O3BGpdG0Ukm5-#vGz~i zc_c5+C(3hjbr*GPaSE*MCw;^vDpw%ruv^9=Cz}iJ^G^4z95M3UOlH^xGBN!f0G^?~ z%W#GTkh;?%uh7U5P{ih-n6A@EhI4`fkW_X;-$f%9dF!!@W*tN@nCLY!p=G1y4uy|s zqO%_Oi>Rr~3TZWc-n?s?%QOtpdVD3s@PJ0FnTo{7G_LEDl7pEYrR~s4o#yto(a4Cl z%=?=vqiK(HA<MIMWMtDWss& zpXn;ONKwby$t67kG_CZ_lMkT#A9QCV&OY5y=P*Y9!3b9c`X+@3eLf`ykB0^7lZ=1M z`Xti^`loPMP|F8tZtB1q%^fU-A-_eowxr8hZ6+Ymp9owNr=?u?tQIgT9Mkt~h`E@6 zn%oWrCxqCK6U)DL7@U42>@nNDAWTsoazwJf3LmWom8 zVx8U*sV>raCao^gKqj#+*uWgrI=$svkn7Awqr}@F!A_LYe5@GQ{Zni~I9*`?Cm{Y? zVgIjuXy~*PYoL za(XoJVSl9JH^@oF#1M}7lm4o=T}Yog!vzbzF5%ui2o+5ekcn|}On!oY|9f0z4SwXOEd>(~2x@$PPYv-NCa_lM1`m-Tw9_QQ)G z_Wr#7a&6;>wT)W+&o6Y4#Db-98(4>OTdvn?Ph{XX85MD7y@t?=c2q>cQnvoyY@M|C zkB{Qk5pQ2B$g-8re)?#&JR_z|!q09+*=mi=r(1#4;%+ax{bp&`8`;)f*;TgE@ zE6{}jMaQPE2+cH^M$?oJTd-`fcfi7x3|(axAE>KEk=uGiLT6h+#uYPzIeCAA6c zOT6U*J{_;EMJIjOj}T`IjGl<@hor)T=&;`#bfSY9$P+c3sP_YI+tvOYwXO!kXm330 zzUjZ4z8!D_r??C@x$H-0vzy*vjQf21qb{|=4c+#DpuvDN$+0~Hdmtc6qcM%fBAfMs-x__NZ(^U>#WuEw~C75h=8*%j!zGE zkM#E2sN`lv~S zieTt9-@Tb2=G81#f$e46E~xX`l`!_ZQw!oPoYxuze&d3!=cql^Jv5IY@)etGHI85I zBOq#wFBGekf(;8_+7jdOddFDRq%7YK=B^;F0`Dj^m>3=$g!Mw4J$fW^qPna~1z8FZ z$4bwcR3x~~`Z(%Gu;77YfOVTFl1z*jMQc`01fd3F+=d}rydwI15j3?IX%zMR6k0oa z0wT06FowhZhdQi8Eql;HWXH&NheL4+Aow!fn*m=2TRf66O#1)68Bh`f++@KOngPuA zP{Ce#fT*(mXLS{Y`lBf&ad2iNZl?smyu$UoH46i!52XPu7^DWZVtTn^Ny^H3Uyo-q*FW$9l(iy>Hg(5;fJg* zVNID@QsoHLQkOQAw=JSQbJ$|8M^$KX^$#C__9~OZW8;K^oT^MD4O=+XhJ|vyrB}=Z;O?nQpq*_uq05D-iAJ6;EIM; ze4s34RF_o&rwRcpt*9tQK&;Ro&Kjmh@?VC=e-&O)P!lU+qM%NM>xz_Uer`^#R&$(V zgkX`#EdNpb`lA2MkpDn5iNwTU{UNacyPx0cvnDb%-+qPL}i2V2WF;AGcYKiE5kCVdoup)|-{6VgZo4K`VgRF8o`Evbobf z>D_yv-B)zyRVtl2!`b+<54XBWxQ)8g#^D%FU;}aDlPYS|e;+l3K1wvp9H(rX8azZ6 ziE;NWPn(C*$K%^Qq9mR5DJ5}# z*_l#e@KgYcH%zIYB5EdqAeU|RX4<(-8@4KAY&A^h!LTWKlj26mguO`VC`iVUx(Rho zAuGuA4GU}ji=Igwwn_3Fot$W}1LcF@aLApM6N%gmdz|nJx2Z*Z8l>L}^kg--r5YTc z|JLu$qCc?%>7V#c_K1`dbTgZ@ubt6sz}dW>GQ*F2VHY^zd(Hq9->iuH6HEyI!v{f}Yb1RJh4&F$F`F zWr-0cD{ZpJ_KwpRf(Ao1jqt%B5WV^T z;27zM=no-8#v&M16*U?2AHtCWgE3WaLUq5#t%cyw4$lxkqP?||GqRX)b8Dl(Ks0JN zRnWi438RRl+Er&9(_JEKmA00=7a!VIPGMCrio)9|7APIuR4mjw8_H~_;0ifCH$=+{ z`DqUpsg$z^+%B>))h&B#{BxT#sI*8-a{DNT9Is`_|AOe@70*MEkxnU48b`wG?e*W# zTOo%Ar`F4(f~gg=u_v|Ktr5v@*`U%wsgmE#jl>fedoXiFrYxGXy83)^A1pqz!BgCs zYzk3rN{6t^F6;?T9|c6VV6u{ezS+D(h{T1e8ANWkqYgzJus;}!vsEy7iVCLRQz6lt3e3fFlQ-7XL-urqOI#Ik%?m@>gt+NLJt{ zQ5#7&=+@Vw=Z0HX&Igkd9V!8hfud4Bla<5F8B>+%HuG1T?g~kjD)kpQ3<=E`=s>u0 z#b)Axixs2}YnH_CL>(8oX-RAtSnJzGZvq}dZk9;VrZD2O2~gv)-WpadnKhKua~dl| z2g%h{yC8SFpuhPsr{l~RS;8}BOcuM8c`H=3XK&40yiT8e4ngS3`IQ9)_J%wAr=> zDXk63*K|`zRqleQl}qmGVl+)`4lHAr?-VYWeBYA9spwM}WI+UGFc4M-2wIY!aY#jR zQvZFa@~b81ht6uyK43KaKN)oTHTnoz#IiYoGG~|{Q|ZXxZTTL!L;Hx1Lz5s^Si9-K z6Z-h8&WH&lDKZgvu`_%dbk05DZ1N}b_U_Kzi=UiZ6$i;t*xb8#U- zj+mHq=QJ9QF9!&asi%d=;XJaJfX-AeexqfWQKWHVc>-Nh6{9o|kpkLnQmOKe zmNSfL+4@i-;U4=$26!Mwg)Tp%C_By#Bf8uzgTLiqCNT-b8{m(7>bL%V)1esPO>+L5 zkS?_V?M+rv!=kG$F zJC8=0A@WAYj>3Ng6~tX2eioZj9-)Zenj8WlhZb25cX%q4Z%cJy>piy%0XTD8aw#LwNH1U@Twf2RF8HKTUvSV z!jE1-(fe{Rna-AwTnW3f2hCLKhcwckQr{MNA#~bm9hC_|Xp_Z2KSdSV?@Jg9BuW-w zVkn6tTun;($TpRpE2UJ{V>K#CJ>0HMP=!u(d_t00U?`>q24+%x&FY@tnHI!4P)FrH z)B@Rd9LtW2CdVf-ZERT-Iqd^M^6-QPFh6=I00Tj!aJ0BLmM`SWVThu85nA4Xykiq-uVb&tlgd8;?7n%2+Jc>|r(Q891t zJJsmbqz{ABgbv9$2C#zx$QH~Pumm9phPL06YIHKZnP&7Hsrr?n{$xk?yO|Z|5J@%^X5tb${i>uU*3$m#1Kcv!bPB&s;Yd&IdR~MP_0m< zr3&^o1O`j`QLE+>A6*Z819Pwy=>XCY4Tw}|yyY~(!CdLXoGUTCI(EkOaC@7>&B2pe zlo4#J_zu2kZ%o`WP;v-{{XP5|q7Htkutjhf>iiRo;155iJg4Nr8|9To-P2Y95qBosu==3UZN>gi2 za2AUu*Nl6x)-^|JS;Vs0T@u?sjzEHFS@%lhEiMEY5U+rmlb0viDL)L?PdME1LT)`Jna9=lX$!7=>0VTzbF1uX;MUnyNgL;S?IqmnaNGvz^ zvV>>Qc%~hU(Cifc@AC4NG*Y1D_irGx^J!o(+ zi$T^F_1HkPp-7l$#igEZTRFQGLsKl99Cw%+rBl!gcz{EisZND3Lo-w#XTyn7zzxi~ zhs_OylESxEV(75`)PN95CaOJ6>cZp8pq9bmeS!OrvF&%V|6ClrqYdbGlD7kS6Ge;+ z3a2EyFHn*mhPEbe^Ap_ufxc}9m6YIQu%E3{GqeredN~>papI-z3TzbOo9N&pWgPD? zS9$TJoh82~Ty_`oj&RxS#K&d(EGcx7B=D87-)NkGLZ29oLYOP|m2M&*b)gKUFrq<< z{(!rDiTyM2LEci{5%PMySlCMkxsAMn2uqWhB){4ZfSF9XZ6SDi;ukMS)&%nimXW-y ziEo4~EjTn0uUPVKY~$gJskl!E%y!wUCh>@|H%vv!lUsv=i+P0`G>dA)Wg(g~6GN7g z^j#F})9fX1L7pY{LK-Dp%1#humM2+(pD=hI6QE4n*oexyjVQOu94Fb@=&FBp4nKYd zEyQ>x11aiql&O%ZL-@p#$og>5$ZHRGAhZNA=8m>(urF)lGFA}I3#|fnF){hd*qz+D z?ta^)tc7I3)0!N$*@Q?SrP1w3znA-q%&>H6n6Y|$8+np(sfFFv&1Qqq5~ZMX=YPYc zaq8%rEN;;@3Y~Sykt*>{>};y%*HqU<07GToZdmf9d1XxpB&27%b_}}o{wFtOK@Y52wiyvA- zFjg?a+fyvFg5tbLTf(d}M%8IZWTDa0GyOBMiWah^7rLMg8$0t!FDyi$VCe!IFVK|` zwA==BFeWqxsV*qhjs=|{88DdVuGwcqJw}ge2xb-v7Q(TnN7qZH)vu36CdF93b*MEl6fT<2JBZ zMrC&BQ-H<4cDD{35yRBJFF;kou&hSE2^P4G$m`04E!PQwoOa~yf^#NK*4bZHId`iGQp*f| z0uUrFDXTTvrLq64c1qeeJ)=<8Rye$2Q7`tU?;KCwy8`Q$(yCE%M3^9B>9R#I${=Y7 zP2m8HO)n8Ogqkk~JwyUyF|9KUB53)k2HU(#L=ARW5M9r002D>qr%&_9Sg)T-)Irvt zKFuTRsr8ejNUU)hVOMw;gpq^O!4eX)iThG5l}89wGuT52F_r-#+VR#-5R?jky)9t? z6`e;cLxm0F*#Wlv$d-j_?)R(832@nU$G_ zd1QXxX-MQ}&L7TH`mB+Am{LJI4bg~@NIJ2d9Xz#L$r;*+=lB$yg*`a&-I}R2x4^K3 ztHFS>G$&fI8j<-KDTXfA(x0DjP;kyooF(d_fOD`=CnPfQIi4<(m_f6;4p0LqLx+;0 z7ool3kgQMvYa^<5QgI&rf0E1T?k~Z{s`{aBLVJ`TPGl>2I5_Cw!Mz~eQY_1DL4603 zK7=l5yb9d!)-S6F94DaWi1$sSkV}Z&ZiY=?P7f9Lam@QIILJ`NDSV*>TIz4R0|WrRu|*diQ=;1Zr6_d9lCs}?o`sb zOZ&>99yxYDTk}U#;4?)LV%@y0zw;%^B6zLl@7HC# zN=3Mp1ik^)-gmAm-8GG!LBv51d4L55 zIyd~oT%aDk2EBoOpm#Mzg~>hvaWP39s^PA~@bFs{rTDLm#$unc78fT|xLRAxVGGmAQ$X??SQmxH6!i1^IYln*5zN&WW%aaL0CW+i|&9v(}! zD}+L}Jl0e!u8ll_^~pyK!?x*fY6TJtX^}dmqEV#6kaQjX4$P}9V#>n zW~b~58h$=y^E&ZYTuhh$-UC@uKqfmtw@Zo*Yj`D10oVl=ORv{DpIHxr%|<)59aGVd zSdm~W7Iu2uK%t&)+tNVz6iSNvH|1r1?8U@zLkyXM-u)S>%PTR8_QU?XyE*x_I zebcAQV|=%a?re@I{K}OuO#%1C%3}NRg-BJrS~=4y7PUZ$v*t{=jIc@yap-5!E=A^_ zj1V#d^6guo5TfFQ!s{VC`~-PK=(ZdJ?8ps>;p#{`*TW7pi8#OD*Boh_ik?3G>#H+U zd}U=Nn&OV?n~(5L>yQ34qwA^{ZAa4M2{X_FfgJ)iBHa~%{+wsk4mODTUnuk3c2qMO<T!Y8||V)`PWRd2jb7!gvk!RbSHK2!hVg_V+j;N1@(^@usi(I09v#u*z?`helXkKqoU@%C zv$g^uqdQHb+M%27#zog!gsNIV{UyYoIx89in{#{^LKmyWDn2%6t*cg3_IHa(*Jl}+ zywiRU35_V42wSj;2|NcALIi|ZP+Y3I0oykNk2plwit|3WITiGPjwff9T6$KfB*~Ea z$usl#>&&xW*p4Le_+$~0t~3+{5KNkiy2#Ts^KnbkoiO%ks8~{@8o5#Mvl;xlGnh2g zyQ=!K6X_@b0_W6=s5?-LYO1?Ms_xI7sH@x3T!17C^gDX18noYf>_&(~Kx!^XAR%VqmOO#D)8XK_3mZih(hM9GFC_*1|hyP zw7Rsc_pzd910?*qqxDR0JG7bv1)q|uLyp-GDxg3@P!Clw2pyTPb|rDp9-bV;>X5}Q zn$Dm{5((BCs!QwGa!#$V&~pM}93oh^CunIce?Aa~;C_W5Qb_DYuMiVSf43p8su`-r z$Bkavs$CJs7!F9vBaCEWxGBIb+pXoUqp4O6G*w_p&yX#t-aJ_5O>GP2i2nwR5^}`3oMdPT-*y?kin}*n zLe%X$@lv2O309tdt(&(vvOxOkbi>O-orBnge646Jvp(7v5|jE9&17hqFry5UkEG@) zmFM)23&k2GtelGW*aH{qsjIj@HTtWX>6_BnM*uF}+_fTBZo5%ezc6%AkIJ=ZaFRd< zv-{j)@l)Gyd-Yp#-=^{ThJvOshY;O<>P+8+sU#tepwj4$EeTEN;l*_jbu508+r|}t z1t)JxC-;mzvoB;20G+{7q@CT~b{q|xqI)eX?L>%)sg{R>D%1I2t}P#erCLm+Ur{48 z5ckF?y5qkI+5@Cx@{w?(5RV-f3Q|`Hr!oxyEpg_OE=T*Ogx^H3>V?;Dit}WecO>J5 zC#9>csJDxzE%YS7?}aMp4XVB(o$BCOlrJX6_AbU!UyRYPI^)wOYL%{dL?QB2QoR>gGSl*CVXedjlkN7(mgC$Z13b z5Z)JR=of^J(b@Q7hI_~T=wQ%AxL)`v{0v7wy0=wdsUf31C9uauCo+|cK9ZjS_kJ-z zG`j=DRX#dv#r3$hGW&q6c$8fR@s^SLCz$fyE5Gz;p-_3gyy|AydinZn|M)20J$Q9| zy5IikFs@^708pDTF#pdWpP+_FRUT!Rqxj6D?(ha66&%>=#SMXHbqbjgV)QDA?Zx0y zrj!pC)th`(92%%zusn3hlaB?<&S37DUW_MKFuAD?)EV)WZk*rAuruiY6=|K3RJ7Os zK$#=Ob+Gv2eXs0!KvX`1{y$r<)jayYfdk@!{@(|RtuDi>OOb0(pmieE>mbz~=mAI3 zVRV4YsQzT;;g;#E?n`^zijTdmpL7_ga6CU;eTe|8#PqDYR6G21+o+7j(Q= zi4V`3@z1SOkoN0I=klr(5g)8bV1kZYgge3tQQiPD#In7M;@=~v$~%fKGlItuC4`ua zC|-SZc=mIX#_t~s*0fgpIE))IVQd*yaR=h$t$)`9h`C2xj}z&0A!Ro=qS4$hYuBW zig1Bc*^uoCP=FaLZ4i02@iS?*cjQW|j5n8uUmJSHUd5I=SKM){;|spc^@6``&o z%WrhF^GIZ1jz+ULVsQ%B*NwLkOi4AvlP=su$`JG=qFXnFePUffE8JZA)XEPnqpif~ zfYFyo9Ywdpkr47XDCKmB+bL2<;Me;e7-UX;fiE`*GfaDZ3`52hvQI7xKaE}=XiB?S zqbI!s)zWxjV=m)z-KZjym~6e&m|1ramfKj%YQuV|+gN+F^N95lDxAUd=M{{Mp#rz( z0COQWK)o6oqi(jogACL(yxfM?0u8NIbwg`th;opA@o;NAfX$=%h0yKW2Xyn#%0h74 zc|f;$&~4`d-R45K#+ME^eZmX2Q2$JxQs#uzhs@3+Ht?|Z2WM8su@^Y3%vq(*yj#@g zqYldbWk?N*1-F`G4gxQ&M~3Ny(;H%1ikxOw$a%?}2c@#-Gze0Ps?yCSa4T11Qs&K& zB--wZHO!LfhL#GASv_rUTR%*;H?be}|GK^e1!TLHYHsZ>>M9e=+>MWvO!O5BmZ% z9*Qu;W6rLcs}831&(QyFk+ILU|7|^6TYu31-g0RRRlgVe-xie0wP#U#d_L$*qqFWC zx)t1?fFHttQS=&jPOirA7ohZYWZokMNl)pS`2mc8h`7ia6R1Q2CPHqgsGTrZ=ZrxG zmB_xCaAom!LRK4ptMtY~y)4auFJB)u+prt%!i#!u_oUrAjqwKIoz;u@_{Cpa%{D2h zp{{Noyhi+IV@$k#TemVe65lMt^{*nTC!EJ*1c`sx zYq5dnQ3ZHSS%{x+qxO{SS5IlM7JVGb-%Zw4F-mV7aZ{? zi>Vj$d-RF7gwhE{4WUzhDSh|geaH!AgA^TnH|@*S)u;5qeSPrv={Yaht?~Az0Nik>zkq3eb zMx1Y~OR@ws#L%n8+QBumrL=Zr3p{ESkb{5F$h4o*S-bW3lT-Oy?%G!;uVVyXe{s;- z(-j7zA({94AFdJEgA6;NbG1SkYEK}#fXAT%R7FOGp#JHz?L)3|p&U375mh=Ab4h>6 za4&pE5Mp{g?_9K4EOXn8DM(0gGd28qkuukOFdU)URV%5~#}&#ADc@mvr%R%ku56Hr zQpHg=Qi3Z`B6T3Ts_5Mx7aUeezJ0pm;bhg^D^i}?+(03~{{8RujTqUGOQK3y@G`#U z09H>w9m2ZEVt~t|x)ZS8IY2E!k^rm3R1GW-o)5U1x&wL330x&IBxrXg9QDgD0weXd zM3Ng7g9p)Kk?I?^JwXZW6Aa;Khse;Z4&yU~QbNd3K8R`hdTvew4LCInFQmDPNZ?Xr zN)qAOmOaH~Xs)67g7{g+Ze}ScEXCFMUElC&4YNYl0C2P{Xok0%T7cfsy!85%pA%K5 zsr?tO`ehiu@iq89<^C-HEhLJ4mO|y^|C6BX;|-;a7*AFq z4Tptir<8UXmd?Zd0(HQSp30QCf=Ezvy%aLv-AqLdb_Q zo35dVZWHQ-n;Dh-xT-~&lyXIM6euG+(pKNW-v^)-|D?1i1QzHwM4DYou`wK64Q45D zO0N}Ahm<F|cVJ!RNiHB=iA6!O037cIf~r*qc6vjZtxX_FuJ!GpMr|sw%hx)+ z^fbIF7|kP9qr|~K!|BxTsVKu)3R&u$KB+V#sE<|a^_9@9&qaScRbx8c(W(S3;ucat zsGDU{&kMHj<^BQZ294{{KQ;Q&`nq?@)cRR0iNq|y%1{mZBs-8yC+@o)>>uv8&%ACb z^{N22)R!xk_Hg&_@h)!1{c6D6gdrXJ%R!x z2o<*8#<1LwO(O!K7FE?I4(v#I7$w_4WOzE*-4lj)w4mjHBrWEx$GV6?YC=nxu7@X8 zEV-kcP3rOh{W_ppbi8*5S<-h2E2nG7QdVZm{H*q>Eq+4z1qPQ4o6=M&w?je#U0v|! z(dsJxiy{Q>)Pih;OdvD36%3&wRdOfxPp>ZuFLnePY)6K=YT^eHrKzjhR<0gc6SdaS z>%;hD_jLF0ta4<0O500D?dy;WS3#W843d6ZT3gyS+ls_!F}DFmMF^hYPxWZ2EPZst z&E2-gbybg+8sz4!R*ACD!Kon)^^t+X_VC%;c!!c4^5_S6!jk2Ivlpv4(0yHuw1vf`ZP zPxXl0&7-%zP1Z!&yTcnZ=`R~=^wR(C5$1c2{1Y8XlUV__LD|;s$RP3uYj!UCABP1k z9tI-E{)fmv&piL%&9#lS2mjyuK*b09-|xcyM=A&oOkw-|CUqAH87yJ?a_oEeW(5=~ zB(2_&nkQ#0Mt-}c-4M>Du0jU=cW!t~e;9lH2{PmK)F{lTG+#=>f%aSD zAy%W|7?(PC5it;9UX<`4^%TyyV~Tw*WDFSv)$iYQ==LGnb*!%f6uLicc2x?6WY4-R zG~CKMD_YSO&MG|J1l+6I-?|DfJn^vV8ltrJLv z50O2+7V68H0=NP8#bf|~Gv$4l4gtF#-|D7nv3i(&Gc;6`Qsx3kYP+S&<`QOKDa@7j z%=JyUVsXNTTm{OcAved6LJ0cbA0x31mAccY0W70PQ8S1brZI*j8`Zi%WeBO%!ln;# zntKKiO^UTZt&Ja;#@A=}(1@%YUmcxhhO%C5R@$WrV+gIQR%{AlyS?oYfyPU&2*r+4 zQHUMfaJO~XbduROt0HLts%2&3Sr4P_Kc zWx_%{5ur{huhmdZsnb&PH&q0PqpI{V{0aRc_3Z5&(sEh}vK8bODz+QdrcYuV7Q5A% z#=;HB=DDZ>>9^%8y7s51s96+sHXm00Qyt(sm*{K$zrt}stF$fVNk6m3twcH8TAWq~ zlC4tQRpg$y(MDFp`Pf+kJ>v=p@C^ik#Ah-(wsb-#@eU5`v>sNH#T$Kt8F8r79Cc3PV+yt zqd8?wog5bcXAhEhs*69&IXH-M_p@}#i~&{B7N0l2 zHe!{t|3IKZ6oRtpAhPX0wXNE^AOC56V-xXz9`Zljy#?sO{_|Dae}cEa3Oes4>n1OS zNgF|tgc5XEeJ$}_w4LHBj_0D810~fdBLNd>DfN`Q?38Shk3_+-aI^f|NQ$cKEKRoL zjda^e!yLRN@byJ)S+HJO^B_r9>TaX7B%`uGy(+{XC7SB7S%QNuloydj-wP5XMMZ>2 zbo*7rToI$zaVtuLNkh_XC1Nv!QERNe?gBQY%`V z>uN=Cr@H{nZQWN>0Ho0-Z(lKJ?i*F~@)o*Il%!I3711O?DBLJKw0-o@wVLaT3}9ky z=*7>0B-Pv40w269?_TEml6sg!{*U=~P48yHenkZ)lOz9c);89C|If{}XAkm!0npyM z$bR8-VFd!XBqKJ zpY$Jp@LFdnxDgCN7_UC@aDgnSDCQkKCo$ ztWjH5f6OekDibxdXxrAFcwKZsa)b3TUU{;e$7~;9&paxY+g_vncxSQgNi(5nG;4f3 zVSw-IW=6SUU>B6Ba>@d*0O%;wcI;FAhEzdbco&T%v7mY*szLm^82 zWH{~sxm0V&5hao6d^~$&Fo`ouwW9)Hxy%L&BX$|EPDx(+&Op_{KrNi(NKxq$DSc_ z*X}sjIB!!D9qm!cv9h$J{X4PeNWgwKp|F3Os`27F+*5>Ae{jUs+=Pmod|9{o| zzlf;oGyb631$}@6^}k;S34tw9 zJlYanfp_wQ17}P#di>aqd@L`r$O@{DSFNMgDL|u#hC4U12t5)Ii_iA|Z_9wKKbedt z(Ra?Z-SX{yXMrzs302dHAO%HW=vBHyNcuh94vs}zv!SSN8$OzsHs43RV(0&GaQSBT zzE6MSi}3_WPJ6M;xLV*gQ1uo$B@s_2m|IBDR_6aXAIk(n#f0^CH5DQSs50F(|K+69leo-B1RqoH1u5p-NUw zi8B`%C$vlUs?32#n&V(TAi)V0LPgz1RIeEpDS^$v;5`S0O}$36F8dd8Vasg=-OfVh zAVwk?N)x?<8RE!GuiY@t=gPyWip?<-@zCPqNqjgMacnf?r+Qi!?+!a3%p)14S=_bC zIB!chY?(1jy*x0?3iF}#iwzmc?QlGusYoHA>1e&XnqiYd<#^H1^ql1s)vQgN5qWn# zV~R3B9P1ou$OUQ$-v?d8_?uCEGf_PSTy6koEgOc)Z}?HdmCDlxn!wj03tV)CG~-$^ z3hsxZQQUC4cAckOcT80S-L*|;A6&H`Xzz3eMY7iUQ493RX+`G;!OrhbC{|?reu9bg zCk>cI478~!OQAPUPsR?i9etqIovZOh#;PnZI|w*%s}^98v0HG!p0;AJ1$5tx$4E)x zE4iim8|M@(Qchdh!0$R`4RkejwGmv573#6Vn|M}wiMuct5OAZ^)m(UgQsi|WOwdeL37WO8|JND#~I?K}$Au&UBB zWt4ARRGHG-2SHVl|D7tFVe$WN)oZY#N__kLY5gye`W0;_+7bm4kG=M2klTsVIE%N` z2kKH{Y>Cd&#;_gLDDw#KnZUkMhe^tD>7A4UNpcTKy+L(6P%&+@{JPu37lDo@=~Oj> zz3d%j?N&v(b#=t3m{J5>`ea~1MKvHXKDq!ipq?RurMV+XWKO@huwH=lnh-U#A4yzL zCB*=6bojJKxC7GbL>1n*$trR?TZf|82@Vps7sQhjpHJ!<>oTQ`z`3RuLpLEh4K*R& zB%9D}1Te@s%RNSbhO`Y50IlUPdq<0kR#Zsl3L4HWNIv-VP()hGe8e*A!?Rm*GhWgN zCBX{JO@VBoyQATasG8(bEv`@dFux8nq-Q%fyih3oWQ6>PBI&+d>2;m+B|7lR)J*e_|@JPvM|d3Fj~Qa~`@#KhGJ zV{&mmCifW4Q!1RB=LABW4I8@KPQyq#X^x`o6UW2R%#Gle&Da73kYD5@a^T^djWW2e zC76Gi=R_C*LddRyRSV6CckT$Tprpiq)<+OJL)Ht++1uOVa70M-;e`$)OPiEFp`dbN zw0pRuh>MCbSyPU74_i?ekvoSM6bHd+#XV;s*!}XRKeF=dM!j)=I{MQrdeeD_V4tIp z5l1TTBdhxqC*>^acJNk{WHfLN=}%w;(joNN4UEe~2xu0ay+p3MRyCTANoCXT^!O<= znRXlMcs8BMnh`|IUcWnlx%B;;{_IVELQjykVb&SV$khr%TCvzR6?fY5WULy6%PE*b zy3bK+U8Wa>YbCDoZAc0a_XL$(;-`_oPoVcZv%4&i8}i5XIoMXTwO39c^GC*b!84SXkTs zXlCz-h?^jVbToe3`M9F%swL7Ytz_K%mrWI@x;0|w$~mA-2@K-@^e1E8F@bP9i}#l~ zNOc8og#sv{)l&?r*hZ&Ml3}D?>7%CY_{Qq4xCBH6A`SxXc4JWJVEf^X-nwAP`VkNN1(sVms6ik>3W-%8u zOp@<#{s$?zIh#~x&!Tu~n(n2h$SrqrDP5+J(i}>|B46=^l^noeJ&{Dc1RMiY8Q}w9ezMB*|PLP@w!fpmf!fp|oA=R*z2mXf5gEtRg4-2_S%AjfA@T zP&Q*^Uhy1>-_aa9*%iqBZe@vAGUMe9oY5bB(LVO~;Kn_77sdSl2cvgm;U-l!_6rS+ z{Qt|ve_6u?z=!xRb1!O%ilx_|P~mM~8zJNI`EUI$Cw@-tHT(WYeXG9l%!~i>Y-{}? z{!1!67y05|?tg4PU8~i$qQ8zi<7oH1j|6LjDW3<;@%6_E-71PI@Wi7+R5EZ~giF7M zt?p{vL&O3>i`b0U8-TYToWoTfQAJ=Wil#S=kz|7+OV$gxe$Jw^@x=_cmV|}uV9@Q4 zru}O4Gwg*_t-exQi7ID(n5(+o@zpgfibxP2T?`O=<6ytpIy!5`U*$E?{iC0co4f7( zE9ep-e~kLkbu?KiHPOh(3DFb>VOWFO1trqRi}f@;&0%K zJ?O5&*eVs_(v9c(OXe@mH*557zJO`CiCqMli@&?2>&y z`H^wYV1++aR_2MAkGxi59%tX&aCmcR0g=N{R&JG!-nFKZk>m)D23oC`lDyung;5Wq z)6S?jzS>2Mrs)(d;10xKHbn}MX*}UKF-6{)PVJnmobc3bO3QnW72cVT5d)?6Cd_*H zw?(u%KxW_80AS0ImGCyZRrV<1wA53}@U0TZ8UZNZPDe)!F3@XporN9Y83~MJISYT1 zT_&t{o<$DEFCm}Fo8u{@-#B+`uLg% z2MY==ytOPvyDQkT&P`l}htt1r=ypvC_G;oBzd<%)Lh7XcNu#>57KT?{sQ2_zsO6`B zbqmr?=#zOpUg^qt5GuJA_$IH3;%H*MpgBI=c3vr;_w-qCrc9Er%Zh z`J2TuBl+qny(3gsBwtk0i>0%0OThDDgmJ^%9Dub*p(JPA;!0+rq>}G`mPQT4$0AC9 zjr%oIsmcE;)I=UoZmEJZ<~zl8M=bID&7j^!l{0nUM;goND#78{C75YW#JA*8{D zPc+*zTGsuuSe{!)ua+LIF7|`=@Lv?2fYG0fiT%JeO*j}rSm+GFoP>8%74s>uL-I}cp&PKXRSQBep6VjF`^tfq|s&b zN^JMiN4)O%s5+b6Eac?WhlTRvQ=NG>9o9tuFK$w)Dcg{h&kPS>$fk0k*ASw51X<_6 zON_!PPE`sHOR?S51Cr7!4LM|-3vlH-Q7vpwizG+;(oBImEp=Q`1^NgZpRyRIu>?%X zU*ez%9y_8XvQ&l8TL?686(?l;ZKon>qpC#zs(gnP!%l01(*G_+I6pLO>}urbL3HK| zhtlfuba~ajWf8LJX%JXuZ<;I5aRgnLnIxM|?u?F5r<#_8xe%e#5HgV=FGtu{?dbdO zqu?~TB~PaTRpXCLZGl;X`3d%NIPcDmLSCV{pVsS%e+x1EZL)RcpJH0}TUN8OI1 zVYHCyquSLlNla5$S5;Ex9kA4*cdY!9i{aFa1cOWEZb#h8=4zo~ESAJki}pu@l)7(4Xh_P_w@qRzj6ilOXMwVc@_8Rt8nA7$CQk z-4Q7E{0!(^l zfwhdtOUu%dQR{j%xtmjFf>lFe?nC=*6m{5mNGH2UW9=QZHK+ZbRMdq>lWqTBU)$PR z^X&f{8?}e{kA>lTn}QGa|38-f-@fMnPVB+n&$_}@qauX8eJ*?d^v&R6)|as{wH+>PrFL8-+RrwBt-t}Re)y@T>0^>>8LQW0Cp<n%;19$uDy?7Lcj0l_MX6OCATPhTZ&%B&0joDg&6;L7X{5~a zLfU?X=42Ih)RS-r>a8hHdN}q1IlmbUXX)Mz!p3asUG=Zd`;+*3OmPiT)-l={a5A#QJ_dgxecieO`UMcV#Sq$xtk4i^h*m)+va zG^Z-zQ&f!-a8B#;VnmpHU%g>&@x{pMO=%;I9>DTnlFUlxmJ}LlL8g^zAlYcbL#dMD zlT^|NN$)_lC#{Glxccw=7O|IGiN!%eFM0OKb5{2U<1$4Gn$m_RZ0=M1Uyd6ab*64I zL*WoVjo^~JvSLEh5U{p^F2Z}Bv7kYQa+KjfHX^h-A<`5(U2D?N%%$*^R?wz@HL7DM z+uM?bYbY9_h-u^Hj%ylGO~_6h?uZJT-r0?``wkD4Hb2>t*|tYj*DKHVc#WCfTs3F5RoZrAtojWRptd6h?%*QUfK6eH3=K{KNiMk9h`OM5{eeo{9!Oxl zWCID*%x_C0FU>}(8TGSUEKGvd-F8Ll!cV{kMAnM<=q^`9a;X|F0az|#K?#_7i(1cH zRI3r|4AMh4K3>>tFSQ7_>7S9_^eIl6j zp)nu4cR7Z(GX{!qFG6@(W1zWOLr~`MYzzsWggPxM%cTAWP|Iscx>mRJR@hjY3$Lt#pcNK#!(|w|7tAA-49*Mgv~pKP1vd(^{+J3DzU6#;Kg_VfFYMGE_6NJS-x=X zedba)%t_Ro^bIwlm>wd(HakAV@TIa2dcrBO{RI8CR;@(qDMTzlyOaA$08o#vh=YoP zxyAE&&b`d$I9P7#sBgMUiSNFmOOIY6yCJ_B4Wq2J2T}^k1`X8AlG5O4U=GPHG`R&$ z$DII=#h|N;prsK+(tri|kn8o)jH84rLtUWrEq%npXjB@~>a2Ir0fS}omEjYvJJS4# zC(Q{Ax@)kexq*j)Thi@&!63d{H*ece^x)QQ^d(xgQK74_0p~7_$@(ahKCo(QRI?ni zb?xkZK(w=>A^`Z+1YMJTZKQz8u=%HY; z0MyUWi{2;ds~OS1p;?(NNF}}i`cA{JKT;&GXqjB|5v<1&+Ajy0?b_-)(F@NYZ)k>6 zxddAQMIo8rIbv#b=ZBR5OYQ+2pZ&D|vfbKKx3&CTriKF%O!<#mr*eShQWfU;H|bx? zR^2IGZh%kjXYi-j01jbd$)hFJ1|qn^ve#!6TX9hNPgPxG)R-o<;+C0K>st{Xbz5eh z1Bq?I5gJ$JzT%hun%7^T&OnFnKi2h3S2TI=-3}UV6j(IZ{XN< z=(`}_z{4~bc)!A3Tuae|4@0|{-bfAfRh3jIbb980%z8ZcHHz_Z+w;yg&K7!@o3%N=; z=l#E!!|e2KCVb~1=K@;x{lEI==Chi2|8Hw!bN!pBmecM+Uf+Ouo}jNu)aQRJw*QPM+I)@g)cEVA&>q0d|&EKK$3LS zbvxeyC_K$V@rS|i+4lewxBM=o%F^6Q^Y5^PJ5Sb=j=uUunR{s-gDJWUjFp46E+EwL z{oD9x8M7Ui2HPsc&9~I-w=n2ay-e?G0q)k()X?Aums5l>R%ct8NWzZWg$T8( z37b(}>J6w&%>IR0bHHXD`i7inht{L2a3n}`*-21O%P9>DifJ3oEmf zMe-xs(g5twMZ)obLK!Bs$)Uis_c@P3#@vfaXxxEdvx%sG_k&FAt2`$z*=u&6fcK&s zyPN|J>cKV3UYbJRT^?SsUz&_*=Wk_F5bG@+jJ!yT2vr(+LII6IGD6Wl2QZF80T{D} z>W>nq=)sTxAsTlUQwr_ z`J5P%T`u67X@T?c_j9hyi}arh^0^1g7l-MZmMM^Z?xXMS`~$ueEAITp$I|v+A#|2X z15Ebca`}JPx7LvVb#wk{6|eaRxBt$&{_3Iu8B+3qoo)ZGZEn`KeEWa>8S+0r*#Gk& zd;9nIV*gLe>KjFTRxBW|uW0BGnb>!))!yAdh}%CQ)xt^p)VJ%)>oS5rl?frk`Mt6l zA|;I*S5^o(CXD8IbTPOLTXJzTC_4nH3h#+1Gmtcx2(}z+uU7*71@-plYoZ{n=MNvDwVSL`1Oa}c4!@}Uj z&2%ujRDiU0lpzg5#V{UCXP`J@Ch{z@25Qx;AS@*uMf{V-M8pc?+>*K4dZqW z^3r_+M^4`M@vJ{Zylc?1WlPf?t~DHE=w2;FJF?B{wA^|~@^nZnJNrrKQU+v%RFWd2 z9U$)eWGFiM9tb)VBaAr0Z}eQZN3GC@;!2M%D$X=)Xj0?I)f7E{9@WjF-hcXci&#^zb{ zRXGMegPr}?1n`I&{Fk$*%1v^6KKygFP+I;o3GE9HIY<7hZ`Gf9@*ncQY(2<-g#mnv zf)DavJ+7_HKFlIy4DODvKSrGyQ=d1p+4c77>ihTaSC~Us8BZ=(5B8g_qq9~l>nyE2 zdcM#P&Rw>Kdxw6e*d`p_e6bG{GsG5zCBHxu7zdh2riYP3*+2UE_;0P)@|vUK^a=I) z|JZx?uC|h6Z9M;GKE+OEEsyYEgT%!)VVs3Awv}VRKagi8Id6VivJjv%AQ4H}=1lT_ z_V;A>VH^lG#=#t z6m*`Z%C*SCdbmTJ#SfKkWu-XS3DZ-Pw5GezURJ z+THtmAmp`x_A0>hp}F7IuFyMgl?Z3F^6ts`LHcc%KDJ4c#$ZAH(kYCTFwd(Pzw{#a zE5_RXCksK9+MoJ^&gdeR$SQ;~=zT#Tm++Y^%nN#hozu3r70M~aEdka3oFaT3vp||O zR0g;B7T+uY-YD*W{P1CSuhrh!-Pvll)E=H4i%|^tpfMjCz1z@KIP``-r4_qUYRnQ# zbAr2Uji|n;EA>vG0+{`JPKEVo$u^^Iww9=6Ys7ShoOVnr3FCyYf;QwbgB$DyvShVk zJ{WfCVtdv(5>6Mn<2Hn0xkE&J*ZkD(3=Y}{y^|iMi1T_k#m_q9ac``lPloL=4M4`q zElqHfn6&t$3{;#Q$O}GP3bLY9ois_J(QPCwkjG0y^5s{&e&W^+?&%Z@8zV4{xKuT`__en7 zHd$&--n9wqx`qN5@c>_2p z5Gf5(_}DT4P*cZSk%a~$TMzd>JChzlfnf1I@FtG#q+vV@MzAf*Yd;zY!XOIDccMS zdAO@OVK*N|)Cldf+MFU-2qO54Q1pT4V`XLUcE*!+3qq*(_+>3oi4~O{AF2BiHB`H( zH#zPjR;IEpvkE`<1XBGeM<~NH>g&T%ZLa2c=W%p48I|h;w7J@!{-nyI(vz3}*MW)O z3ShH&eJ#su}YcD-l7yjebwCAfYs{5 z#@@#EK4SH@=An|{7}|*)Cvvn@_Qg#En~ys3R?0~T+(IQpy>|RZBb-j@+e;j`NI#Ac z8Um(xD0Zo`<*8j${q=M*x^PlHJb%}850)camIKZY2BN0gohvsWNlEDTJ~Ei=W~oxb z+OyBhW5W!M%+m(kN&&1UrIyfZrZ?z?GB@!zCQx$~c+-ay-lxt*_yX#V-nVtr*Xe*UwxxccD# zU6ssJm47(@xot=PZ?|@6=EA{Ha2$jMKTsNzJ_8vQX{8QNh$^^t>!Kzk7tDT6R4mAv zf)c$0Z3Ikjr>L@vk8wFLrk%FR&^;}%^MThTV~d+=?%jk+<>dcyXMEf~{37F69qR)5 zzqqp4h@by+NqD&bQ=Qb6YkUXYWfN{sqyEwHBx)=!t~|lli|BP{(C?i@e?!9i@lzIh z-G|MukEHg!gNQr25mc&P^or@~qy6FG3Cf55RGtr3RLcJ z@b00+4`bhL?6*JcZM@yyXz%W9Zb4?AjXFoCooG1d_RL&Pk%#tBgA-xFpA9c>kE)l- z8|CN!G@74kvS|JQb9PCodLMc*(MxtwhD@o4+IovnB)^Kcnphv*G^zQBMAQoBAn8MEPGW z{zqeJ`62$t6qK%BrSkZTQOC1^lxVVe{g3DWSXpU2CayB&70Co zzh}nX-oPEKk2^5+ZoQt~7@P@Z#!5lwpmPRa>IF}DyhIaeR_o388~gk1)`$1)osI1+ z*qg-UnqrudbPZ;G53SESP!*Q0w#Y2qyxt5NAIi(mpxX^$I{7cd(KdAV^r}>16w3d2 z{->qIJ~v+)}N!D~zux#W1gEZO9ZXC0B~n`VZ?y zw$P|7|F0?jW4-iX7^^=@lR8$val*x{~IgI@$=tjD-ZD>v#2@S=MU@u4O;(k zEWR@gT?uhZk#3IaxE%j#7n+0U^!#MfKf@XNq>m$dJfHLiJfML;<;BzF>KtSFPJ zLDuBI)3UxZhN{nkJjzo%{S^I9i2?|6{(=V7IEug>!7iYxjUvXSz8M#hkaQO-FQuHxj|~GtMOY~ zOAO%p8+*Yn7WWD+`2?l!C1m$dVYXQ=?4b4;w^XtOjrGuy$Kof*1XQqPYHySuIdi$F z8!e8O+NpVp25X1bl^h|yFpvD(3#nY2TEt>`(_Mipum7P_U#Z2YVEwNz#rOY>mHO&K z{I629y=IuyfNOu=}UXK z$VF2AVgG*FS)N`067oMhn$K?H4@L4H(H>*|KhJOg{9ymhA?eIsJ;?vNA^%;ZLtly) z`vaw~Ch5?wa!m+@NhNEqO?3OPPE;2Q<>bG((pCqqYf%1I^Z%)1Pw-&>otoekDpnYO z79G$GBw_w4w2{C5H?Y@Rj;;R)|M_tKTYr3Kd*FhQNOM$ROu#YZF2?^lMYP5BXjK#u_$8KM@`lsM9uqj(rfn* z(*f$pJ&e~l$}oEe#&IvQDSvh*?ZeUVv^^Q7gU_nVAe6Cyrpev?&TgCeJL~OtulL#; zdwUyySGIE7Q>5GIT%hYF@@D~v*2fR;d8-W;Tnl1y4(==uVtZ>Fk!E8sR3L>ANEpQg zJ)zB0t|hm&wm-Z_AinnQ-s`Qs=FVF{v*?J~eSwx)6G*j>Fq-V9rf+U&PiK(U@$F1F z%vZ|rj%mHN#%vhvNhH_wByvVg9-npkqxFsX=oM0hFcZlmZRw4}Y#Epv#V|kj7;tGF zRW@b_^#pe<1DMh08Q^-*``3A|9N7OdB-k`RO3-55o2;WEs#scN;yqOZa^y8tD|Se$ z^yjp5#{QsgwJuH97?1OET9kv31g91=Xm`lP>FYZ4;~1t-g@uWsrqnbu3F9n4-3g38 z5yw3&&p$S&3_OF9^g%ury62$H=TOCj3j)5HE~Jn^ExCHOjJjwk!88}^YMA$C-+_W7x#o372VZ;)*Wz&JC^(&R*J9KH!&sgmZZ5SvPr zq)U+-g<_7hyK+43^q7gfyrJmkO5Cf$S?9j<#baDgNr>#EwDH6YB|9PXMozr?(6#VY zMIeo^$Q)T2L|H5a{{Npe5R^ddyAza%evCvWudlD#-!ES_3WROS5muU#%Z3xH88$+m z`nFTNxQW_Gjb_KJZb?#2BLFL^+w6?<7LnmpyO`*AVWY6Kejl6jUc5ckUlxx0OX%UY z8=ZD{z1CzhH-RMzew#`!cwuc#G~T&n05-;t)m|SKD>f$h>P5IMu#~#2v}goPY#GhL zR&(95@hkn|oLLXoucL!90bDN)2azU#5K?Xy|mS%n|JnsLZU z(tN#%`Br~vv>cno-Q|pI=c+4NqmO(3QosZm@nrJL5wW zk`H^tgrUQVj-NO7nj5d1n{BhV+*b;xlOcv8u$e@fC|LyY_Jl&4^%g2sk|4o2D*Boo z8e$7das-(yr7@UY>$3R|?o^41NGt>GH?{wrj}YY)sYOeD{*Uy+5P7{+o$Nvi8s96A zE<`@{f{(WUp^-Bq8ExcZsi3{gZm!ZB1+DaW6~Hdp)BFzFHcU^|1`ZS0zM1BSg7*6~ zRa5G?o~A6c>C+?yig~1*RXC$NVj#lg9XzUB1A;RxZ!5R@4`rum%#Usdr)6hg!+leMIh zfs$yZ>TrUiQv@94v96y)&GCk^(6T;1+Uqx^pM2}!@Gl2T8zr0u$k!TFe*i1EV8Ms{ zgi!cI*|_nKvwji-BtW(@BY=<&g-=x~XGaOqUjCA(%%YlQWi%D9nl+Gb&Bq1rRYVZLB~ zKTe|`u}%>V+PDOx67)vG@-#+P;in?$6HFK%0ZVoQw+U-PR#$m|*4B(s-)%|UsIfXf z#`}9`YrlmH>_)W%mB8_+XxnqcY~9n9cwyvawGQN-KNtZc08zzL$@Qb}l*ouVUjnE> zib2dv7WWoJ8ZZUKjuN|5qZz*`y`pXT!>vZ1@vdhG0}WxQIUWdIPN2 zAUo6{o{n?vmX$tI`JzT+ISv1x^RddpjQRtf9-t^MC7oQzc{fBkhBG@0t!F zB&082XD(NKS;&d5Q5L_9RAGI7G8j2ex~PhADPx`%NgGoxE_KZFD@CZZG&0x_ODmP^ zLr-?9pQacUW4C-2O-ZQ!8v69!KFOLD{J&%pO%nt<-~Vf|{%mXY%!VJS%cOfo;N79u_NxFqE z!_jY@(Gcbn<%{#3TR}zj(D`-UvS$`8vrth)#Bw@C>$Z?&uoEd_&F5~z`Y36K&w$jN zP(O1!U4f|7q2^>hY8vN(IGU{IP*4>-I5_FB)w9&eSG#-fH+Ei&PN}rbmfE}E_VMCZ z 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

    +|0P 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

    )zr4vOs_+GG9^rwFj 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�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%0D=&J-kcWh7K* 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

    e?-;HVn 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

    ~?TbhRo6@yb|843XA$C zt{&5i#)v1JH{;GBf(w3?1+$cG0X4X*5J`mfJ%HtX%(8(Z%9kiG@i}gmskbj%PBT2KEuuI0 zX2g`5ug#w`rioT-!mJ%#Fz!=~b)p-a%7WapsGOI@J<$YKL+vG~;6>Rtp-IB<&bP%S zX1tTu7RleIVvUMDCX3yDn%agkSMheAwOxpVh^|?Us-L>*6|VLhy<{#FjDA~(T(_g#xUc(>&7g6UDIG2;O>*NYpl8(> zt-Yp8HR6Ey1zf!saE)UxdZ-4+_PT`{UMlqaPGm6@fMaaT9q6GLhN?3nOf6Fi2CA{e zf(K4e-ti>QKgoZcf6=xTMuiWV|7XjlDO0QZq?-X`7s3VhF(nMaBKyPR4OK}QBJ5u{ zNLH`Xl2_*GTWLJ(#MJ8;nDyrxFSf_ytWqzX-lp+!gN;)Jcp%sV&-95l16zvf9eh z651-0+0Df~tcojM7e@EE!stLD9}+vkxIfddTt@N(F!4h@R2 z7(gEZ80(Rq9e>XXi2>*?SEO$q^<&)S)twE0_NJSf4j=@P90j9uizp&&ViiW2FapS` zj)uqQan(@}v*Y^RsA)syQx|4V2k!F}axk%OijAZ; zI)#XU863~kQzKk z1*A9z-6ceR? z1tC&?aNg{}FxlvL4zb02>`a2GA`TMP+zF_}6bRNTu%6P7?`OlK5!8~>UEcxbi$+Hd zDG+t>{P|`2KqPocCsapI`_19`Vz#MPDlzVadN=YNaKu?0w^wC4BN{uy$YO1-bf8g- z39}Nt7eE%kPW=;xz+Kl9^r;At?Qk(`+k;3*<>+14=|e;9=;;MIMZ!zwLEjap&B^|R83oN4rDqv)0nhEddG7>r@+s@GAC zQ@6l8w+h9`Cp)moE8F8d4s$FD$Ey;g**ta!F^^Kx519o~pV)7j?dAzQ6{!Cy{e*eo zp>Ew+!n+Q#rHO7l8ZH0Hw0BD|O5)Tv{jQI(SpLnh-!FFI`hf{UFVe9i!2=kx^uaX@ zCkB7DW5PC`9upp1=a^#fS3IV{c(J)i=i4I9ZZh9?s&dJj*DzZ+Hd*_OKmIWhvl`>M zRRsUAnkRF%I}~+Aw7IhZ0)C_Tl)T6Qa{r^DC~}qlXNRj!=QA z`7XNs&}N7)#=Pp^&_&NKm=a(eo_ojw>tQa$)Y^rasoBR>5@MZD{~_+_mi!pnE9_dM zi2@F$Jt;_NJ%w6}P#uHnN1?k$Hyz{Cp@Z*$w3)}LUV0R>FiNlMVNGt77% zqD;(Pf-@1G1M$|{nG6h^)aTJaREX99F$DC;!s#X(30&2GeDwI)s)~2x+T24-##Uo< zcX#{UUgOp7_b}{*TahxHx0q!cNXd_8B>R8ipx{xEeJN=1RlY$z{{s$(llq)vuIS3b zKR_=2-2=;NW&acbj^Ury>|x8Vu0oaN4YvdW!re1ELqwIWH?Md1Hec`6AljHTYFLu4 zSZ14%r*Yo^xEv>tD<|7>o=OF>!L~4wY#36G#hnByu9Mstvk^{*)@u~;vzJ#F7&6k} zkoldbULC!`GME3|`bK2lsV}I^(-62s2nYq@XBP~2OJle$gLd`!zY)T>I>+jKM1J)Q zQGhfjPKf_odGu^G7ytM8>FUZ|{NH8fwQAdv_`lu1?e1;AYHYoE|9Wrx1)~7VLI4wQ z-f$FP#yGogZ%-It5D0irHmhY97-u4FP4wNpASh5%fHxpCy)c!=uaYC%*S^jGYi z)-5e+o|H02@C_?~F(?f-TdTr|`5EFnr}jZrL5v?2I*lQN?jn(L2uMI=1;FEpD)a@- zOqwOZWCmohFaUc<_b1IsF-iMbcEHfPf z(&7==-8At#(YNW1&yU+m8T+B6iKS$8B+-_|pQga@KKF(yCQ#N2zbOn%t&5Cw^KGq~ zc3xo7L@5tR>@MP>cX#n%z^BnC<;5Wc7)ELpeLKlU|P7NB1;M_F<46w@@G~qBdHgG-^bbddWbc@$}>!UPpK6j za&fg4{>+$6sFDttYN+;S%tr{OQ!NsQB5`{I7hdmziX|kIL02?(k6dV>Y`I9XyzPYEquo+(PF(>iG^_eG6hk#iO= zb5h7pik}dBevFnZ!}lO>9NF3|{1Ew~t2En?dQ?Io%%kOw0z2Ka(c_i4*6&qc_4;gg5?l+pW38fphSj1VRsy3b z9x{N58&Q02%kH~XQ(P8OyRwH{7z(XMgN3Zm2xi1%oi79+BjSL;mb67>F;m{z*BqAVoQ;2F5jmdQ2G*)QH7?-+ELLOQ29wxhs=&ad}V&6f< zj!dK3I*KbjPOz@WgHnafdC8p4H+5ug8!sJ{Ulb`%m*H-wtvFq;3Oqljk=@q~Ez|?~ zE)8CK!JyeE{D0aYZgf7y&c?~; zSPBO%+nXqdvlz{D4drWmh${Xx35Td{vN8~H&n;=G7{uQvLADeyDxH9Fdgu%dBMg&A zL`{#%&F9{RQ5`fx<+RU~m&QljC@w6R?eX?oQ}oNo#E7=y$+EvB&RkFc$O#qxw7=rC z;A}Q%R|TS!1B-#2Bb0dRH4ots9*v)KiR0h+3>S=+&y?D3`?RAH=A){Nh z=M6-VzR=^7p^DxBjfho5_}kw^_3?*DIVM@_c`0_r{7|TNJB4yZdKVx#x(Hrw*Qkt< zYcc2b-84TWknxRUG~Aw284cIsB53%=F&f9sUwkfC-OZpmNXKhZV#^XkTzf3J69~Rt zRG}C(%Vk!OaAsr9^QYy22qz3SsNt*o4U8pJt{Hys*Na=F)1Zf~2%Yjgh4BiN0Rt7D z&?e3u)#obS$mgz*iJh^-tl)SdJIO0@jo*w+i->)nT6?^X4b|{FOf+a^*hC2)3eJdB zUV5taq+(|h%Km_MTKq?OY#sNFaP#<8_!kz@o!>0}cf2uB_b?BPWLMFbE_ zlp2cVih~AC#mO-ziF@y!O6UltRWc?0H3=*09pQr5V0*D!u7<5f;@C`M4NVZtXca*m zIp8$b&{h9iYKkp3OxV3XWY#O;60t1&p>jiD308EI_&Wh-Fbcr_lr~-oOM%hn8#8 zi?ix7keP7*2}FwpFFGSM*NTf`e7QvdyI&4V)Q#B6m1__>m&g?Ec}}HsoI2@4z{PfOrZ_y)pc) zsE(*uj|Nf;5Oh`x$s)JggY@O3J@jMtYC@&_hvp<3 zRR<0NRhqEV35~>=ntj4oTI*;S8R1qQe6=5g4KA_uHjnqaho^&6oKBJSi4qG&bLuts zJ3ZMb*hn(D&Vd)}3iVK=%T*-;kx%gp0=P+coHB4>frL*XCWSQ{_*pQ>*?fgKG&DEz z204XaRJ9sfXhk1$=yrYwL+L>E{V@I=7BF-m5%2{AQ6phAvYV@I<#99L9H1Xemqy_` zh~gw3jgk3p6$$naHUj|Sjg}6usdpyRrgkI^sx#C;17bsOq$IrJvnN>|2q#xahIk&* zvH>e0iwk8hg~|kCz!H`c7tU)mOF=@++2Q!e!FcT|z*wjZRgeH~u=W7+381LD*!HlX zYGGxFkK&ZMBH{d;Ee)4Ih_G+#0XOnUND{AB0~*;hyho)Wl#tb|qs9QkqhX}oMNwi^ zv}@;dhkKZ4CMjD5kX$N405L(;N@fEaRaiukVE0%TPXcxdL14UJhnXC(XBnO`fn(8- zVSO&e8wTFsQ0cVdNE+H@?F}>;m=B3VhKX>!UI|%f=_w4@gUch2OcEJO9((O)p&VBg z)gG{#a!5;~pD4)f{_n6!42%FVbQPGkz<^Ap)?`g+M%gG!kZ}!-U z6^a76xsQY*C;W^nOZp%rGcw98x6_$Ql?bOg;2nJ&X((+3gFwhR5LYeYK*qFy6YM!N zMp}~I(L`nQf4(`HL^Q8ZA{FFOkqpzN(G0Rk*b0*jo<1X2p`zl`6_io6tDmd|I^*#w zU0`;$!H%qhDqFb!B;@5CqIFv}XOUQ4#GgNp3mW zcZ?HDmBlTidtKMCQXH5uG7tS3vQz(m!J9L&H~Xft9`HIY4n)8r1qG#$ zHpF7yWRN57Jwwq15mR;w=NacDDy@hIhcF{bIhH~0;k69`B}D0JyB9x(Z8;ECwK$;*;H~2!VkfNGFT)q zA~qD{q`TGf(ny&_Pcm(z7CWF;kK4yAp+twX zS-C`aqITQ zjnFonC&!Z1N)%5WwiDG8LoH&-z;=PEB$L)TKnPsE=)Jw))DoS zm9_fH3jSx$xVi1tFcaZzU(qHxVI0YQ^6Cc_^LzGEtS5y%mL#iFktTI728W-S9GMcK^TZJ{f&Y=w?yJ74t&L+H9Fw|~?*?v74q?-6AVE6Aw9 z$K7@t7I~<&REp1WxrrkTPcfbdT(HROGA9;%i_JTHxfUo;xIQ{+t5?Q{FT}uNXx_YH zt>yMC!|C!T9yL=%{VG_ex=V^>^nxO0Bt*_g751AtYlVG#EEo)zeL|WgGAv7|4NJ^^ z=Mc4~psz2ZZxTErc9oIbzmGd<{MKwpeEE?i`Yy~Ky!cVyS226;T&f6!LqkAaj(t8k zzI2l`$x0iX0Fw(gT=wy2-*1KG7&i^S5lk$xordDM$c>51Coz6Iw<$|%arEZx&}=)? z*oiV>Tw>gnMomM+`QX&vJJau=j1Wx-*xJP!gvAS=l&Rt*G%Yu_8VcHQUBnd2FQWVD z4L?#fi~*jg0D#0wsqor7@9}!b0{blu7bd{ZZh66!s}_& z602A7s7=Cj0h=e!+^C6MRf+}MIqtq0J1yl7>7bS(NyI3;GF(vvlN zFhvs`;;Ti3+Z5i+57*cjDTu9s={HO(gnPefT{ zaNuoYT1}4Q(B*13bmAD0&Dj0ttv!tk)KpB^v^Pqb?=mIu$?~E!!qurGF=76(I2jQa z^gyFM-gba-ArIcScZCtq!GHyIL3R`2KX0u1?4WUgYTLZSV=;Tj&;Z)@?3qol2<98E zY+%#Op%MyRRN6q_fv;PXVNPG;0|-Ntpv=0PI)e#`w#d&2xyuA2dRBxWDteIXE8JqJ zq3li#JB5rqm53udI{TJBQBaE$yCX)l2lAf-6lCj&_cPg@j9D>K^lWdG<&|j6HETwO z4lP^DNjyiH7OMT_DZ|!$jpWF88KPo_J(c$k8k9f#YH)3)-VblF5#7$qu?{ER7OW;e!sN4Btm0*>Aj=WmEwaT+1VgYe_F|i z)1wlch=yYe;t?wyNs8!7$CyV)-2(_D@vfVxQd_Fs>`d82C(^2hgyi%N9~z>vCKWIO z)x+(%s_d0Sj6kF^4oAeON&TcMtx>=3lRYrlkP-fyZw5&NezQ%ZZ~5k=tQAay;d(%j zqIeeNnJ>Exr(0!;x>?J7Y8(A3qB*~;8H(% z+qf#)3*)MkaH6Op<@mlXN==GQiPhS)6g!fNe*}iX<)wr^EdDp&H|Y`!bo6Xzt=K&J zB@atPTTU1TCV#^U?g)xubMLnqT7+hekTO-llvk&}Evtqw#U&+^t+NGZ zi(6WDQp}i(?M%>6#BQeXZ`*d>LB zo1@EM5dsORAb4o01{3>>AKU9wCzQ9|S>x*SR zDSOOD3>6*~Gn;Lve+3|J;eOByp3xx56>HKd5PH zJ#IB8A`3QIWvN&qJ%>AD0S1hsR%v*|EC5`p%g9p5kys&n{&Z!7Q@1MjwNW0xRu5H` z=ePH}0zQxita#06bmDsW1)B1Sw!hs2A=(dq~$DNcdFvs`YM>ZE4iE--dAeG4qD zr48!E zkw#Q>xa1bIS%#(m+-ZuGO(NmSgLq?+Rz^z#!n$4%X_u0jv*>WKv~+u)!32tc`GkIM zyTWFMkWwO)ilP}>0V`*fqB29z0mU(^z%{4FsPMibZ%pkHR-{1b-cOAO>Im`jn z&2CncRha3n?yjz`uBxs>uWIEl`|ql@0W0rKTY1$s6inTHHFYPmk^465;DMoPHZYA> z&4$g3vk5T$A+@*zWz`|4a#(*AiV^}WcQcJ6&si$8i;yTyc}yy12ZOs@LMlMV8Upf~ zjRdLi_@-^MyKpfn0%s znd1Lto8^t;MhO5W$N#UaudUoK)c?5mVD0{w`2ULS`s5##49-+f2#a-;PhiF3A0x>DaDP}b02rMSsD*-Jkc!lo1ESO0tl4_k zhM2T8CG7u1Y(G4%*u3^eqRx(KPFBeQ{~0GW#Po?$Rq9`^#AF=4+*iv zt%1x?%6{Qlyq9h3<{T-rzu4QPE`q4(HSVH0)W}iO zfa4j$1)}8R+O4QI_{Uv|$63hc=@-Y{_I}ID{s|t{thI>cGIRndX{PjKuWHtAA-lyE z;j%YL;{={)W_uKuJPvJb-1$h6qZh{+l&e8o;X_ zaN~1QtDr6P5Rwn5lg62^Pd4T=;qI(E1L8uX8)1zLucCGe`JzaxL%<}GlEfg`?Qr-X z2~Hw}Z1j_Cl_1VZZ_){&(5!eR_2zzaQpftD6{g=0jO?NeE!2QgTy9|r?=u=w67=*zuy;B7xQcLsn}&6$YQKZYh*Dc)XYZ;X8} z@{72ge5H?^0(LHXqfSy9ESc9Qmx_Kn0B4i`f2uc+>yp>=8fE_i5+}?5YY$N!uq6NA zTmK^e2Lyh`A1dVkf7ExL)Sqk}?v70Wc2sOqDgCc4&La39UL5}ub(dYzdooKMKMMY} z!xp526FNmVdRLS|MSgz1x4rukQ(vvGEREhv48A?3UtV4=$sH)~=!JIR_w(5nqEGsR zjqI!4ZC=9dbVV!w#g9Kj5e3q>SIAZsUA2Dc1K63+fNjPrQ8J z@7=BU(GVZC8r`(fY560_eV$J%c9m5ukNR(0z4lKn5#m!Y`gOeLDdd;GAH5m$FY5{% z9;wxh^x}g+x@?a215`(29Kf{Z!qY{x5KUtC=FViw6OMBc;P9?z=|Y8Ep}|bdHAeY! z_x(xh+?;WNik_ym8vR7Mv%zUVUFk7ao}w`%(E(Cmqbw2p#@RrqO(Z3A&BSM7j|E90 z@ll&m5}}&4NbjBgSsSh)gF!B-S56(l-AdR6IB*Wya0?t-6oEk^fo`A#R-1d>lK>6) zu-LTWk)%@+VVjF+L-~_&cwm<1@XBSPvX?L)GYvIuCZpXFB+%dgv(7Mkig|LBjcg90 z5N9o8mgWs{fzpZmHQNp=j%X!5=|c+v8#-;bP`L`&yf{GxDXQR=+kM<<)}^Ud3oL9k z4DR&Efrs>&hQNGK45z9mCRzYu`4n;pW?|>BJ+}8L^jfSfX7%UON0)8U#Hc|9nuc3j zIGcDU81$hf4&McGP~3@L4*JIz!c@&DA&NdUHaXYa0?U5@?FW4qfoQz+dJ7Rf zfP{7QjLzn>X8!{0Yw`bH^buy`lLfyF(I?-W^qXP7=eD|tx;kkrzk1Whh4dcz&=?6K zfmkVY1?Tgeo8wVU|DcynP^Rqdz5(^5qxt882U~uK48l(98ztTUN#;x9 X(pS?i@ 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

    7p~DVS9fwActL^d#n(>S?DZaO0+q zM=6;;#RH&D2sJ2_LeQhW)`#*nzq`Ja;ih{3$4->9KmRAZ|5w)@!`XlJ!J{XSSD!q3 z^yuNgt*kv*Tf5Ew|5;GP-v3cN_}Yi|>DV28fbYV>ALc=KKGZsRg13 z|9BO^9nk=YC5P_IWG9_>&;eK+;qdJAw2#sQ!dXpp9cHzkw%)$N*{vfC4T;9P@Re)! zkUJX>bBSX_NI%R=^y`Pbcn=50>=7_+pTH>tPbifv$eCqaHsZq=?@JLz@voboV3);Z z?hOYu0um`Rh5g_{bUfM4M=(9K+VYzaA8aYKvzV=}z*V@5>=J`M{u1>@^APX)tcQ20 zWRjK6@~vbk!s8M4r|ch{L7(qhEae@nYkc@3JPs9Z@#_9%W$~}Sq8od@dcD81j<=F1 zl12j*QUf>!h$T3|TT@aU@a-QHwl!)GxIK0!;5tnTC`lV8|Bm}`bOd#xBl7hRsLayt z7+SLEsQ@(W%llu}wRMcd->-Zg2I$4GVK@*9Ecz`lYI=G{=jH-Xn>{Y;41s|D_?ENR zJmcg@k+GqFb`0%@Zsi+vs^2MwOaPnY#n})!MSqlyHQD9u@qJ?P(aG2HV1VDj{3}a;a6n_LdZ&L$AIkQ=Et(mIt^Kw zy{CLXY++3E+(tqu1UE3W$^x<_RiGgV2PaQ_{XztEfz9nMuwC- zEoZyoF3E)lkb%<3n)p6DJw^d5+5q1&)jijJj3B!SANHC^

    e>8?pWrl`%sL!` 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℞|940t>FQAbv9$?o1nee< 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

    ID>ck^nujJlI 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�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 `AzVa^dUOz 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 +a4S)%kN9R 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