Changeset 790
- Timestamp:
- 11/16/15 16:21:45 (7 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/config/field_attribute.conf
r711 r790 20 20 DECLARE_ATTRIBUTE(StdString, grid_ref) 21 21 DECLARE_ATTRIBUTE(StdString, field_ref) 22 DECLARE_ATTRIBUTE(StdString, grid_path) 22 23 23 24 DECLARE_ATTRIBUTE(double, default_value) -
XIOS/trunk/src/filter/spatial_transform_filter.cpp
r709 r790 18 18 "Impossible to build the filter graph if either the source or the destination grid are null."); 19 19 20 // TODO: Implement the real path finding algorithm after a solution has been found 21 // to support initializing grid transformations during parsing. 22 CSpatialTransformFilterEngine* engine = CSpatialTransformFilterEngine::get(destGrid->getTransformations()); 23 boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine)); 20 boost::shared_ptr<CSpatialTransformFilter> firstFilter, lastFilter; 21 // Note that this loop goes from the last transformation to the first transformation 22 do 23 { 24 CGridTransformation* gridTransformation = destGrid->getTransformations(); 25 CSpatialTransformFilterEngine* engine = CSpatialTransformFilterEngine::get(destGrid->getTransformations()); 26 boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine)); 24 27 25 return std::make_pair(filter, filter); 28 if (!lastFilter) 29 lastFilter = filter; 30 else 31 filter->connectOutput(firstFilter, 0); 32 33 firstFilter = filter; 34 destGrid = gridTransformation->getGridSource(); 35 } 36 while (destGrid != srcGrid); 37 38 return std::make_pair(firstFilter, lastFilter); 26 39 } 27 40 -
XIOS/trunk/src/interface/c_attr/icfield_attr.cpp
r711 r790 287 287 288 288 289 void cxios_set_field_grid_path(field_Ptr field_hdl, const char * grid_path, int grid_path_size) 290 { 291 std::string grid_path_str; 292 if (!cstr2string(grid_path, grid_path_size, grid_path_str)) return; 293 CTimer::get("XIOS").resume(); 294 field_hdl->grid_path.setValue(grid_path_str); 295 CTimer::get("XIOS").suspend(); 296 } 297 298 void cxios_get_field_grid_path(field_Ptr field_hdl, char * grid_path, int grid_path_size) 299 { 300 CTimer::get("XIOS").resume(); 301 if (!string_copy(field_hdl->grid_path.getInheritedValue(), grid_path, grid_path_size)) 302 ERROR("void cxios_get_field_grid_path(field_Ptr field_hdl, char * grid_path, int grid_path_size)", << "Input string is too short"); 303 CTimer::get("XIOS").suspend(); 304 } 305 306 bool cxios_is_defined_field_grid_path(field_Ptr field_hdl) 307 { 308 CTimer::get("XIOS").resume(); 309 bool isDefined = field_hdl->grid_path.hasInheritedValue(); 310 CTimer::get("XIOS").suspend(); 311 return isDefined; 312 } 313 314 289 315 void cxios_set_field_grid_ref(field_Ptr field_hdl, const char * grid_ref, int grid_ref_size) 290 316 { -
XIOS/trunk/src/interface/c_attr/icfieldgroup_attr.cpp
r711 r790 287 287 288 288 289 void cxios_set_fieldgroup_grid_path(fieldgroup_Ptr fieldgroup_hdl, const char * grid_path, int grid_path_size) 290 { 291 std::string grid_path_str; 292 if (!cstr2string(grid_path, grid_path_size, grid_path_str)) return; 293 CTimer::get("XIOS").resume(); 294 fieldgroup_hdl->grid_path.setValue(grid_path_str); 295 CTimer::get("XIOS").suspend(); 296 } 297 298 void cxios_get_fieldgroup_grid_path(fieldgroup_Ptr fieldgroup_hdl, char * grid_path, int grid_path_size) 299 { 300 CTimer::get("XIOS").resume(); 301 if (!string_copy(fieldgroup_hdl->grid_path.getInheritedValue(), grid_path, grid_path_size)) 302 ERROR("void cxios_get_fieldgroup_grid_path(fieldgroup_Ptr fieldgroup_hdl, char * grid_path, int grid_path_size)", << "Input string is too short"); 303 CTimer::get("XIOS").suspend(); 304 } 305 306 bool cxios_is_defined_fieldgroup_grid_path(fieldgroup_Ptr fieldgroup_hdl) 307 { 308 CTimer::get("XIOS").resume(); 309 bool isDefined = fieldgroup_hdl->grid_path.hasInheritedValue(); 310 CTimer::get("XIOS").suspend(); 311 return isDefined; 312 } 313 314 289 315 void cxios_set_fieldgroup_grid_ref(fieldgroup_Ptr fieldgroup_hdl, const char * grid_ref, int grid_ref_size) 290 316 { -
XIOS/trunk/src/interface/fortran_attr/field_interface_attr.F90
r711 r790 210 210 211 211 212 SUBROUTINE cxios_set_field_grid_path(field_hdl, grid_path, grid_path_size) BIND(C) 213 USE ISO_C_BINDING 214 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 215 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: grid_path 216 INTEGER (kind = C_INT) , VALUE :: grid_path_size 217 END SUBROUTINE cxios_set_field_grid_path 218 219 SUBROUTINE cxios_get_field_grid_path(field_hdl, grid_path, grid_path_size) BIND(C) 220 USE ISO_C_BINDING 221 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 222 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: grid_path 223 INTEGER (kind = C_INT) , VALUE :: grid_path_size 224 END SUBROUTINE cxios_get_field_grid_path 225 226 FUNCTION cxios_is_defined_field_grid_path(field_hdl) BIND(C) 227 USE ISO_C_BINDING 228 LOGICAL(kind=C_BOOL) :: cxios_is_defined_field_grid_path 229 INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 230 END FUNCTION cxios_is_defined_field_grid_path 231 232 212 233 SUBROUTINE cxios_set_field_grid_ref(field_hdl, grid_ref, grid_ref_size) BIND(C) 213 234 USE ISO_C_BINDING -
XIOS/trunk/src/interface/fortran_attr/fieldgroup_interface_attr.F90
r711 r790 210 210 211 211 212 SUBROUTINE cxios_set_fieldgroup_grid_path(fieldgroup_hdl, grid_path, grid_path_size) BIND(C) 213 USE ISO_C_BINDING 214 INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 215 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: grid_path 216 INTEGER (kind = C_INT) , VALUE :: grid_path_size 217 END SUBROUTINE cxios_set_fieldgroup_grid_path 218 219 SUBROUTINE cxios_get_fieldgroup_grid_path(fieldgroup_hdl, grid_path, grid_path_size) BIND(C) 220 USE ISO_C_BINDING 221 INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 222 CHARACTER(kind = C_CHAR) , DIMENSION(*) :: grid_path 223 INTEGER (kind = C_INT) , VALUE :: grid_path_size 224 END SUBROUTINE cxios_get_fieldgroup_grid_path 225 226 FUNCTION cxios_is_defined_fieldgroup_grid_path(fieldgroup_hdl) BIND(C) 227 USE ISO_C_BINDING 228 LOGICAL(kind=C_BOOL) :: cxios_is_defined_fieldgroup_grid_path 229 INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 230 END FUNCTION cxios_is_defined_fieldgroup_grid_path 231 232 212 233 SUBROUTINE cxios_set_fieldgroup_grid_ref(fieldgroup_hdl, grid_ref, grid_ref_size) BIND(C) 213 234 USE ISO_C_BINDING -
XIOS/trunk/src/interface/fortran_attr/ifield_attr.F90
r711 r790 13 13 SUBROUTINE xios(set_field_attr) & 14 14 ( field_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 15 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &16 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&17 , valid_max, valid_min )15 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 16 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 17 , unit, valid_max, valid_min ) 18 18 19 19 IMPLICIT NONE … … 32 32 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset 33 33 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op 34 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path 34 35 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 35 36 LOGICAL , OPTIONAL, INTENT(IN) :: indexed_output … … 54 55 CALL xios(set_field_attr_hdl_) & 55 56 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 56 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &57 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&58 , valid_max, valid_min )57 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 58 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 59 , unit, valid_max, valid_min ) 59 60 60 61 END SUBROUTINE xios(set_field_attr) … … 62 63 SUBROUTINE xios(set_field_attr_hdl) & 63 64 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 64 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &65 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&66 , valid_max, valid_min )65 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 66 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 67 , unit, valid_max, valid_min ) 67 68 68 69 IMPLICIT NONE … … 80 81 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset 81 82 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op 83 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path 82 84 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 83 85 LOGICAL , OPTIONAL, INTENT(IN) :: indexed_output … … 101 103 CALL xios(set_field_attr_hdl_) & 102 104 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 103 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &104 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&105 , valid_max, valid_min )105 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 106 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 107 , unit, valid_max, valid_min ) 106 108 107 109 END SUBROUTINE xios(set_field_attr_hdl) … … 109 111 SUBROUTINE xios(set_field_attr_hdl_) & 110 112 ( field_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 111 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, indexed_output_, level_ &112 , l ong_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_, ts_enabled_ &113 , ts_ split_freq_, unit_, valid_max_, valid_min_ )113 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, indexed_output_ & 114 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ & 115 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 114 116 115 117 IMPLICIT NONE … … 127 129 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset_ 128 130 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op_ 131 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path_ 129 132 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref_ 130 133 LOGICAL , OPTIONAL, INTENT(IN) :: indexed_output_ … … 188 191 ENDIF 189 192 193 IF (PRESENT(grid_path_)) THEN 194 CALL cxios_set_field_grid_path(field_hdl%daddr, grid_path_, len(grid_path_)) 195 ENDIF 196 190 197 IF (PRESENT(grid_ref_)) THEN 191 198 CALL cxios_set_field_grid_ref(field_hdl%daddr, grid_ref_, len(grid_ref_)) … … 255 262 SUBROUTINE xios(get_field_attr) & 256 263 ( field_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 257 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &258 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&259 , valid_max, valid_min )264 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 265 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 266 , unit, valid_max, valid_min ) 260 267 261 268 IMPLICIT NONE … … 274 281 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset 275 282 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op 283 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path 276 284 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 277 285 LOGICAL , OPTIONAL, INTENT(OUT) :: indexed_output … … 296 304 CALL xios(get_field_attr_hdl_) & 297 305 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 298 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &299 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&300 , valid_max, valid_min )306 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 307 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 308 , unit, valid_max, valid_min ) 301 309 302 310 END SUBROUTINE xios(get_field_attr) … … 304 312 SUBROUTINE xios(get_field_attr_hdl) & 305 313 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 306 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &307 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&308 , valid_max, valid_min )314 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 315 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 316 , unit, valid_max, valid_min ) 309 317 310 318 IMPLICIT NONE … … 322 330 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset 323 331 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op 332 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path 324 333 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 325 334 LOGICAL , OPTIONAL, INTENT(OUT) :: indexed_output … … 343 352 CALL xios(get_field_attr_hdl_) & 344 353 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 345 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &346 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&347 , valid_max, valid_min )354 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 355 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 356 , unit, valid_max, valid_min ) 348 357 349 358 END SUBROUTINE xios(get_field_attr_hdl) … … 351 360 SUBROUTINE xios(get_field_attr_hdl_) & 352 361 ( field_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 353 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, indexed_output_, level_ &354 , l ong_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_, ts_enabled_ &355 , ts_ split_freq_, unit_, valid_max_, valid_min_ )362 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, indexed_output_ & 363 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ & 364 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 356 365 357 366 IMPLICIT NONE … … 369 378 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset_ 370 379 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op_ 380 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path_ 371 381 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref_ 372 382 LOGICAL , OPTIONAL, INTENT(OUT) :: indexed_output_ … … 430 440 ENDIF 431 441 442 IF (PRESENT(grid_path_)) THEN 443 CALL cxios_get_field_grid_path(field_hdl%daddr, grid_path_, len(grid_path_)) 444 ENDIF 445 432 446 IF (PRESENT(grid_ref_)) THEN 433 447 CALL cxios_get_field_grid_ref(field_hdl%daddr, grid_ref_, len(grid_ref_)) … … 497 511 SUBROUTINE xios(is_defined_field_attr) & 498 512 ( field_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 499 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &500 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&501 , valid_max, valid_min )513 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 514 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 515 , unit, valid_max, valid_min ) 502 516 503 517 IMPLICIT NONE … … 524 538 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op 525 539 LOGICAL(KIND=C_BOOL) :: freq_op_tmp 540 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path 541 LOGICAL(KIND=C_BOOL) :: grid_path_tmp 526 542 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref 527 543 LOGICAL(KIND=C_BOOL) :: grid_ref_tmp … … 558 574 CALL xios(is_defined_field_attr_hdl_) & 559 575 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 560 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &561 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&562 , valid_max, valid_min )576 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 577 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 578 , unit, valid_max, valid_min ) 563 579 564 580 END SUBROUTINE xios(is_defined_field_attr) … … 566 582 SUBROUTINE xios(is_defined_field_attr_hdl) & 567 583 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 568 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &569 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&570 , valid_max, valid_min )584 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 585 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 586 , unit, valid_max, valid_min ) 571 587 572 588 IMPLICIT NONE … … 592 608 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op 593 609 LOGICAL(KIND=C_BOOL) :: freq_op_tmp 610 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path 611 LOGICAL(KIND=C_BOOL) :: grid_path_tmp 594 612 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref 595 613 LOGICAL(KIND=C_BOOL) :: grid_ref_tmp … … 625 643 CALL xios(is_defined_field_attr_hdl_) & 626 644 ( field_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value, domain_ref & 627 , enabled, field_ref, freq_offset, freq_op, grid_ ref, indexed_output, level, long_name,name &628 , operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq, unit&629 , valid_max, valid_min )645 , enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, indexed_output, level, long_name & 646 , name, operation, prec, read_access, scale_factor, standard_name, ts_enabled, ts_split_freq & 647 , unit, valid_max, valid_min ) 630 648 631 649 END SUBROUTINE xios(is_defined_field_attr_hdl) … … 633 651 SUBROUTINE xios(is_defined_field_attr_hdl_) & 634 652 ( field_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 635 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, indexed_output_, level_ &636 , l ong_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_, ts_enabled_ &637 , ts_ split_freq_, unit_, valid_max_, valid_min_ )653 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, indexed_output_ & 654 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ & 655 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 638 656 639 657 IMPLICIT NONE … … 659 677 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op_ 660 678 LOGICAL(KIND=C_BOOL) :: freq_op__tmp 679 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path_ 680 LOGICAL(KIND=C_BOOL) :: grid_path__tmp 661 681 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref_ 662 682 LOGICAL(KIND=C_BOOL) :: grid_ref__tmp … … 740 760 ENDIF 741 761 762 IF (PRESENT(grid_path_)) THEN 763 grid_path__tmp = cxios_is_defined_field_grid_path(field_hdl%daddr) 764 grid_path_ = grid_path__tmp 765 ENDIF 766 742 767 IF (PRESENT(grid_ref_)) THEN 743 768 grid_ref__tmp = cxios_is_defined_field_grid_ref(field_hdl%daddr) -
XIOS/trunk/src/interface/fortran_attr/ifieldgroup_attr.F90
r711 r790 13 13 SUBROUTINE xios(set_fieldgroup_attr) & 14 14 ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 15 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &15 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 16 16 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 17 17 , ts_split_freq, unit, valid_max, valid_min ) … … 32 32 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset 33 33 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op 34 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path 34 35 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 35 36 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref … … 55 56 CALL xios(set_fieldgroup_attr_hdl_) & 56 57 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 57 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &58 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 58 59 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 59 60 , ts_split_freq, unit, valid_max, valid_min ) … … 63 64 SUBROUTINE xios(set_fieldgroup_attr_hdl) & 64 65 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 65 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &66 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 66 67 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 67 68 , ts_split_freq, unit, valid_max, valid_min ) … … 81 82 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset 82 83 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op 84 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path 83 85 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 84 86 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref … … 103 105 CALL xios(set_fieldgroup_attr_hdl_) & 104 106 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 105 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &107 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 106 108 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 107 109 , ts_split_freq, unit, valid_max, valid_min ) … … 111 113 SUBROUTINE xios(set_fieldgroup_attr_hdl_) & 112 114 ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 113 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, group_ref_, indexed_output_ &114 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ &115 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ )115 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, group_ref_ & 116 , indexed_output_, level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_ & 117 , standard_name_, ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 116 118 117 119 IMPLICIT NONE … … 129 131 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_offset_ 130 132 TYPE(txios(duration)) , OPTIONAL, INTENT(IN) :: freq_op_ 133 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_path_ 131 134 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref_ 132 135 CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ … … 191 194 ENDIF 192 195 196 IF (PRESENT(grid_path_)) THEN 197 CALL cxios_set_fieldgroup_grid_path(fieldgroup_hdl%daddr, grid_path_, len(grid_path_)) 198 ENDIF 199 193 200 IF (PRESENT(grid_ref_)) THEN 194 201 CALL cxios_set_fieldgroup_grid_ref(fieldgroup_hdl%daddr, grid_ref_, len(grid_ref_)) … … 262 269 SUBROUTINE xios(get_fieldgroup_attr) & 263 270 ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 264 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &271 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 265 272 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 266 273 , ts_split_freq, unit, valid_max, valid_min ) … … 281 288 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset 282 289 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op 290 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path 283 291 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 284 292 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref … … 304 312 CALL xios(get_fieldgroup_attr_hdl_) & 305 313 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 306 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &314 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 307 315 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 308 316 , ts_split_freq, unit, valid_max, valid_min ) … … 312 320 SUBROUTINE xios(get_fieldgroup_attr_hdl) & 313 321 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 314 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &322 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 315 323 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 316 324 , ts_split_freq, unit, valid_max, valid_min ) … … 330 338 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset 331 339 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op 340 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path 332 341 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 333 342 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref … … 352 361 CALL xios(get_fieldgroup_attr_hdl_) & 353 362 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 354 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &363 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 355 364 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 356 365 , ts_split_freq, unit, valid_max, valid_min ) … … 360 369 SUBROUTINE xios(get_fieldgroup_attr_hdl_) & 361 370 ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 362 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, group_ref_, indexed_output_ &363 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ &364 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ )371 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, group_ref_ & 372 , indexed_output_, level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_ & 373 , standard_name_, ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 365 374 366 375 IMPLICIT NONE … … 378 387 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_offset_ 379 388 TYPE(txios(duration)) , OPTIONAL, INTENT(OUT) :: freq_op_ 389 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_path_ 380 390 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref_ 381 391 CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ … … 440 450 ENDIF 441 451 452 IF (PRESENT(grid_path_)) THEN 453 CALL cxios_get_fieldgroup_grid_path(fieldgroup_hdl%daddr, grid_path_, len(grid_path_)) 454 ENDIF 455 442 456 IF (PRESENT(grid_ref_)) THEN 443 457 CALL cxios_get_fieldgroup_grid_ref(fieldgroup_hdl%daddr, grid_ref_, len(grid_ref_)) … … 511 525 SUBROUTINE xios(is_defined_fieldgroup_attr) & 512 526 ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 513 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &527 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 514 528 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 515 529 , ts_split_freq, unit, valid_max, valid_min ) … … 538 552 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op 539 553 LOGICAL(KIND=C_BOOL) :: freq_op_tmp 554 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path 555 LOGICAL(KIND=C_BOOL) :: grid_path_tmp 540 556 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref 541 557 LOGICAL(KIND=C_BOOL) :: grid_ref_tmp … … 574 590 CALL xios(is_defined_fieldgroup_attr_hdl_) & 575 591 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 576 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &592 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 577 593 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 578 594 , ts_split_freq, unit, valid_max, valid_min ) … … 582 598 SUBROUTINE xios(is_defined_fieldgroup_attr_hdl) & 583 599 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 584 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &600 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 585 601 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 586 602 , ts_split_freq, unit, valid_max, valid_min ) … … 608 624 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op 609 625 LOGICAL(KIND=C_BOOL) :: freq_op_tmp 626 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path 627 LOGICAL(KIND=C_BOOL) :: grid_path_tmp 610 628 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref 611 629 LOGICAL(KIND=C_BOOL) :: grid_ref_tmp … … 643 661 CALL xios(is_defined_fieldgroup_attr_hdl_) & 644 662 ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value & 645 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ ref, group_ref, indexed_output &663 , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_path, grid_ref, group_ref, indexed_output & 646 664 , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, ts_enabled & 647 665 , ts_split_freq, unit, valid_max, valid_min ) … … 651 669 SUBROUTINE xios(is_defined_fieldgroup_attr_hdl_) & 652 670 ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_ & 653 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ ref_, group_ref_, indexed_output_ &654 , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_ &655 , ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ )671 , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_path_, grid_ref_, group_ref_ & 672 , indexed_output_, level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_ & 673 , standard_name_, ts_enabled_, ts_split_freq_, unit_, valid_max_, valid_min_ ) 656 674 657 675 IMPLICIT NONE … … 677 695 LOGICAL, OPTIONAL, INTENT(OUT) :: freq_op_ 678 696 LOGICAL(KIND=C_BOOL) :: freq_op__tmp 697 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_path_ 698 LOGICAL(KIND=C_BOOL) :: grid_path__tmp 679 699 LOGICAL, OPTIONAL, INTENT(OUT) :: grid_ref_ 680 700 LOGICAL(KIND=C_BOOL) :: grid_ref__tmp … … 760 780 ENDIF 761 781 782 IF (PRESENT(grid_path_)) THEN 783 grid_path__tmp = cxios_is_defined_fieldgroup_grid_path(fieldgroup_hdl%daddr) 784 grid_path_ = grid_path__tmp 785 ENDIF 786 762 787 IF (PRESENT(grid_ref_)) THEN 763 788 grid_ref__tmp = cxios_is_defined_fieldgroup_grid_ref(fieldgroup_hdl%daddr) -
XIOS/trunk/src/node/field.cpp
r775 r790 819 819 { 820 820 if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) 821 grid->transformGrid(getDirectFieldReference()->grid); 821 { 822 std::vector<CGrid*> grids; 823 // Source grid 824 grids.push_back(getDirectFieldReference()->grid); 825 // Intermediate grids 826 if (!grid_path.isEmpty()) 827 { 828 std::string gridId; 829 size_t start = 0, end; 830 831 do 832 { 833 end = grid_path.getValue().find(',', start); 834 if (end != std::string::npos) 835 { 836 gridId = grid_path.getValue().substr(start, end - start); 837 start = end + 1; 838 } 839 else 840 gridId = grid_path.getValue().substr(start); 841 842 if (!CGrid::has(gridId)) 843 ERROR("void CField::solveTransformedGrid()", 844 << "Invalid grid_path, the grid '" << gridId << "' does not exist."); 845 846 grids.push_back(CGrid::get(gridId)); 847 } 848 while (end != std::string::npos); 849 } 850 // Destination grid 851 grids.push_back(grid); 852 853 for (size_t i = 0, count = grids.size() - 1; i < count; ++i) 854 { 855 CGrid *gridSrc = grids[i]; 856 CGrid *gridDest = grids[i + 1]; 857 if (!gridDest->isTransformed()) 858 gridDest->transformGrid(gridSrc); 859 } 860 } 822 861 } 823 862 -
XIOS/trunk/src/transformation/grid_transformation.hpp
r687 r790 45 45 const std::map<int, CArray<int,1> >& getLocalIndexToSendFromGridSource() const; 46 46 const std::map<int, std::vector<std::vector<std::pair<int,double> > > >& getLocalIndexToReceiveOnGridDest() const; 47 CGrid* getGridSource() { return gridSource_; }47 CGrid* getGridSource() { return originalGridSource_; } 48 48 CGrid* getGridDestination() { return gridDestination_; } 49 49 ListAlgoType getAlgoList() const {return listAlgos_; }
Note: See TracChangeset
for help on using the changeset viewer.