Changeset 934 for XIOS/trunk/src


Ignore:
Timestamp:
09/22/16 10:58:44 (8 years ago)
Author:
mhnguyen
Message:

Adding new transformation: Compute_connectivity_domain

Test
+) On Curie
+) Test passes

Location:
XIOS/trunk/src
Files:
11 added
22 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/config/node_type.conf

    r895 r934  
    7171#endif //__XIOS_CExtractDomainToAxis__ 
    7272 
     73#ifdef __XIOS_CComputeConnectivityDomain__ 
     74   DECLARE_NODE(ComputeConnectivityDomain, compute_connectivity_domain) 
     75#endif //__XIOS_CComputeConnectivityDomain__ 
     76 
     77 
    7378#ifdef __XIOS_CContext__ 
    7479   DECLARE_NODE_PAR(Context, context) 
  • XIOS/trunk/src/generate_fortran_interface.cpp

    r891 r934  
    3333  CZoomDomain zoomDomain; 
    3434  CGenerateRectilinearDomain genDomain; 
     35  CComputeConnectivityDomain compConDomain; 
    3536 
    3637  CInterpolateAxis interpolateAxis; 
     
    290291  file.close(); 
    291292 
     293  file.open((path+"compute_connectivity_domain_interface_attr.F90").c_str()); 
     294  compConDomain.generateFortran2003Interface(file); 
     295  file.close(); 
     296 
     297  file.open((path+"iccompute_connectivity_domain_attr.cpp").c_str()); 
     298  compConDomain.generateCInterface(file); 
     299  file.close(); 
     300 
     301  file.open((path+"icompute_connectivity_domain_attr.F90").c_str()); 
     302  compConDomain.generateFortranInterface(file); 
     303  file.close(); 
     304 
     305 
     306 
     307 
    292308  file.open((path+"inverse_axis_interface_attr.F90").c_str()); 
    293309  inverseAxis.generateFortran2003Interface(file); 
  • XIOS/trunk/src/group_factory_decl.cpp

    r895 r934  
    3535  macro(CReduceDomainToAxisGroup) 
    3636  macro(CExtractDomainToAxisGroup) 
     37  macro(CComputeConnectivityDomainGroup) 
    3738} 
  • XIOS/trunk/src/group_template_decl.cpp

    r895 r934  
    2424  macro(ReduceDomainToAxis) 
    2525  macro(ExtractDomainToAxis) 
     26  macro(ComputeConnectivityDomain) 
    2627 
    2728} 
  • XIOS/trunk/src/interface/c/icxml_tree.cpp

    r891 r934  
    5050   typedef xios::CInterpolateDomain         *  XInterpolateDomainPtr; 
    5151   typedef xios::CGenerateRectilinearDomain *  XGenerateRectilinearDomainPtr; 
     52   typedef xios::CComputeConnectivityDomain *  XComputeConnectivityDomainPtr; 
    5253 
    5354   typedef xios::CTransformation<CAxis>   *  XTransformationAxisPtr; 
     
    452453      } 
    453454      *child_ = static_cast<XGenerateRectilinearDomainPtr>(tmpChild_); 
     455      CTimer::get("XIOS").suspend() ; 
     456   } 
     457 
     458   void cxios_xml_tree_add_computeconnectivitydomaintodomain 
     459      (XDomainPtr parent_, XComputeConnectivityDomainPtr * child_, const char * child_id, int child_id_size) 
     460   { 
     461      std::string child_id_str; 
     462      XTransformationDomainPtr tmpChild_; 
     463      CTimer::get("XIOS").resume() ; 
     464      if (cstr2string(child_id, child_id_size, child_id_str)) 
     465      { 
     466         tmpChild_ = parent_->addTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, child_id_str); 
     467      } 
     468      else 
     469      { 
     470         tmpChild_ = parent_->addTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN); 
     471      } 
     472      *child_ = static_cast<XComputeConnectivityDomainPtr>(tmpChild_); 
    454473      CTimer::get("XIOS").suspend() ; 
    455474   } 
  • XIOS/trunk/src/interface/fortran/ixios.F90

    r891 r934  
    106106                                        xios(is_defined_reduce_axis_to_scalar_attr) 
    107107 
     108USE icompute_connectivity_domain, ONLY : txios(compute_connectivity_domain), xios(is_valid_compute_connectivity_domain) 
     109 
     110USE icompute_connectivity_domain_attr, ONLY : xios(set_compute_connectivity_domain_attr), & 
     111                                              xios(get_compute_connectivity_domain_attr), & 
     112                                              xios(is_defined_compute_connectivity_domain_attr) 
     113 
    108114USE XIOS_INTERFACES, ONLY : xios(set_attr), xios(get_attr), xios(is_defined_attr), xios(get_handle), xios(add_child), & 
    109115                            xios(send_field), xios(recv_field), xios(field_is_active), xios(getVar), xios(setVar) 
  • XIOS/trunk/src/interface/fortran/ixios_interfaces.F90

    r932 r934  
    8888                                              xios(get_generate_rectilinear_domain_attr_hdl), & 
    8989                                              xios(is_defined_generate_rectilinear_domain_attr_hdl) 
     90USE icompute_connectivity_domain, ONLY : xios(get_compute_connectivity_domain_handle) 
     91 
     92USE icompute_connectivity_domain_attr, ONLY : xios(set_compute_connectivity_domain_attr_hdl), & 
     93                                              xios(get_compute_connectivity_domain_attr_hdl), & 
     94                                              xios(is_defined_compute_connectivity_domain_attr_hdl) 
    9095 
    9196USE ireduce_axis_to_scalar, ONLY : xios(get_reduce_axis_to_scalar_handle) 
     
    103108                      xios(add_generatedomaintodomain), xios(add_zoomaxistoaxis),                          & 
    104109                      xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis), xios(add_scalar),      & 
    105                       xios(add_scalargroup), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar) 
     110                      xios(add_scalargroup), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar), & 
     111                      xios(add_computeconnectivitydomaintodomain) 
    106112 
    107113PRIVATE 
     
    116122                   xios(set_interpolate_domain_attr_hdl), xios(set_inverse_axis_attr_hdl),                   & 
    117123                   xios(set_generate_rectilinear_domain_attr_hdl), xios(set_scalar_attr_hdl),                & 
    118                    xios(set_scalargroup_attr_hdl), xios(set_reduce_axis_to_scalar_attr_hdl) 
     124                   xios(set_scalargroup_attr_hdl), xios(set_reduce_axis_to_scalar_attr_hdl),                 & 
     125                   xios(set_compute_connectivity_domain_attr_hdl) 
    119126END INTERFACE xios(set_attr) 
    120127 
     
    128135                   xios(get_interpolate_domain_attr_hdl), xios(get_inverse_axis_attr_hdl),                   & 
    129136                   xios(get_generate_rectilinear_domain_attr_hdl), xios(get_scalar_attr_hdl),                & 
    130                    xios(get_scalargroup_attr_hdl), xios(get_reduce_axis_to_scalar_attr_hdl) 
     137                   xios(get_scalargroup_attr_hdl), xios(get_reduce_axis_to_scalar_attr_hdl),                 & 
     138                   xios(get_compute_connectivity_domain_attr_hdl) 
    131139END INTERFACE xios(get_attr) 
    132140 
     
    141149                   xios(is_defined_inverse_axis_attr_hdl), xios(is_defined_generate_rectilinear_domain_attr_hdl),                 & 
    142150                   xios(is_defined_scalar_attr_hdl), xios(is_defined_scalargroup_attr_hdl),                                       & 
    143                    xios(is_defined_reduce_axis_to_scalar_attr_hdl) 
     151                   xios(is_defined_reduce_axis_to_scalar_attr_hdl), xios(is_defined_compute_connectivity_domain_attr_hdl) 
    144152END INTERFACE xios(is_defined_attr) 
    145153 
     
    153161                   xios(get_interpolate_domain_handle), xios(get_inverse_axis_handle),              & 
    154162                   xios(get_generate_rectilinear_domain_handle), xios(get_scalar_handle),           & 
    155                    xios(get_scalargroup_handle), xios(get_reduce_axis_to_scalar_handle) 
     163                   xios(get_scalargroup_handle), xios(get_reduce_axis_to_scalar_handle),            & 
     164                   xios(get_compute_connectivity_domain_handle) 
    156165END INTERFACE xios(get_handle) 
    157166 
     
    164173                   xios(add_interpolatedomaintodomain), xios(add_generatedomaintodomain),                            & 
    165174                   xios(add_zoomaxistoaxis), xios(add_interpolateaxistoaxis), xios(add_inverseaxistoaxis),           & 
    166                    xios(add_scalar), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar) 
     175                   xios(add_scalar), xios(add_scalartogrid), xios(add_reduceaxistoscalartoscalar),                   & 
     176                   xios(add_computeconnectivitydomaintodomain) 
    167177END INTERFACE xios(add_child) 
    168178 
  • XIOS/trunk/src/interface/fortran/ixml_tree.F90

    r903 r934  
    1313   USE IINTERPOLATE_DOMAIN 
    1414   USE IGENERATE_RECTILINEAR_DOMAIN 
     15   USE ICOMPUTE_CONNECTIVITY_DOMAIN 
    1516   USE IZOOM_AXIS 
    1617   USE IINTERPOLATE_AXIS 
     
    214215      END SUBROUTINE cxios_xml_tree_add_generatedomaintodomain 
    215216 
     217      SUBROUTINE cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_, child_, child_id, child_id_size) BIND(C) 
     218         USE ISO_C_BINDING 
     219         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_ 
     220         INTEGER  (kind = C_INTPTR_T)               :: child_ 
     221         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id 
     222         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size 
     223      END SUBROUTINE cxios_xml_tree_add_computeconnectivitydomaintodomain 
     224 
    216225      SUBROUTINE cxios_xml_tree_add_zoomaxistoaxis(parent_, child_, child_id, child_id_size) BIND(C) 
    217226         USE ISO_C_BINDING 
     
    582591   END SUBROUTINE xios(add_generatedomaintodomain) 
    583592 
     593   SUBROUTINE xios(add_computeconnectivitydomaintodomain)(parent_hdl, child_hdl, child_id) 
     594      TYPE(txios(domain))                      , INTENT(IN) :: parent_hdl 
     595      TYPE(txios(compute_connectivity_domain)) , INTENT(OUT):: child_hdl 
     596      CHARACTER(len = *), OPTIONAL             , INTENT(IN) :: child_id 
     597 
     598      IF (PRESENT(child_id)) THEN 
     599         CALL cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id)) 
     600      ELSE 
     601         CALL cxios_xml_tree_add_computeconnectivitydomaintodomain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1) 
     602      END IF 
     603 
     604   END SUBROUTINE xios(add_computeconnectivitydomaintodomain) 
     605 
    584606   SUBROUTINE xios(add_zoomaxistoaxis)(parent_hdl, child_hdl, child_id) 
    585607      TYPE(txios(axis))                      , INTENT(IN) :: parent_hdl 
  • XIOS/trunk/src/node/domain.cpp

    r924 r934  
    7373     m["interpolate_domain"] = TRANS_INTERPOLATE_DOMAIN; 
    7474     m["generate_rectilinear_domain"] = TRANS_GENERATE_RECTILINEAR_DOMAIN; 
     75     m["compute_connectivity_domain"] = TRANS_COMPUTE_CONNECTIVITY_DOMAIN; 
    7576   } 
    7677 
  • XIOS/trunk/src/node/field.cpp

    r894 r934  
    10211021       } 
    10221022     } 
     1023     else if (grid && grid->hasTransform() && !grid->isTransformed()) 
     1024     { 
     1025       grid->transformGrid(grid); 
     1026     } 
    10231027   } 
    10241028 
  • XIOS/trunk/src/node/node_enum.hpp

    r895 r934  
    2929         eReduceAxisToScalar, 
    3030         eReduceDomainToAxis, 
    31          eExtractDomainToAxis 
     31         eExtractDomainToAxis, 
     32         eComputeConnectivityDomain 
    3233 
    3334      } ENodeType; 
  • XIOS/trunk/src/node/node_type.hpp

    r895 r934  
    2020#include "reduce_domain_to_axis.hpp" 
    2121#include "extract_domain_to_axis.hpp" 
     22#include "compute_connectivity_domain.hpp" 
    2223 
    2324 
  • XIOS/trunk/src/node/transformation.hpp

    r895 r934  
    33 
    44#include "xios_spl.hpp" 
     5#include "xml_node.hpp" 
    56#include "transformation_enum.hpp" 
    67 
  • XIOS/trunk/src/node/transformation_enum.hpp

    r895 r934  
    1515        TRANS_REDUCE_AXIS_TO_SCALAR = 6, 
    1616        TRANS_REDUCE_DOMAIN_TO_AXIS = 7, 
    17         TRANS_EXTRACT_DOMAIN_TO_AXIS = 8 
     17        TRANS_EXTRACT_DOMAIN_TO_AXIS = 8, 
     18        TRANS_COMPUTE_CONNECTIVITY_DOMAIN = 9 
    1819      } ETranformationType; 
    1920 
  • XIOS/trunk/src/object_factory_decl.cpp

    r895 r934  
    3636  macro(CReduceDomainToAxis) 
    3737  macro(CExtractDomainToAxis) 
     38  macro(CComputeConnectivityDomain) 
    3839 
    3940  macro(CFieldGroup) 
     
    5455  macro(CReduceDomainToAxisGroup) 
    5556  macro(CExtractDomainToAxisGroup) 
     57  macro(CComputeConnectivityDomainGroup) 
    5658} 
  • XIOS/trunk/src/object_template_decl.cpp

    r895 r934  
    2323  template class CObjectTemplate<CReduceDomainToAxis>; 
    2424  template class CObjectTemplate<CExtractDomainToAxis>; 
     25  template class CObjectTemplate<CComputeConnectivityDomain>; 
    2526 
    2627  template class CObjectTemplate<CContextGroup>; 
     
    4142  template class CObjectTemplate<CReduceDomainToAxisGroup>; 
    4243  template class CObjectTemplate<CExtractDomainToAxisGroup>; 
     44  template class CObjectTemplate<CComputeConnectivityDomainGroup>; 
    4345} 
  • XIOS/trunk/src/test/test_unstruct_complete.f90

    r666 r934  
    3030  INTEGER,ALLOCATABLE :: i_index(:) 
    3131  LOGICAL,ALLOCATABLE :: mask_glo(:),mask(:) 
     32  INTEGER,ALLOCATABLE :: n_local(:),local_neighbor(:,:) 
    3233  DOUBLE PRECISION,ALLOCATABLE :: lon(:),lat(:),field_A_srf(:,:), lonvalue(:) ; 
    3334  DOUBLE PRECISION,ALLOCATABLE :: bounds_lon(:,:),bounds_lat(:,:) ; 
    3435  INTEGER :: ni,ibegin,iend,nj,jbegin,jend 
    35   INTEGER :: i,j,l,ts,n 
     36  INTEGER :: i,j,l,ts,n, nbMax 
    3637  INTEGER :: ncell_glo,ncell,ind 
    3738  REAL :: ilon,ilat 
     
    164165  ALLOCATE(field_A_srf(ncell,llm)) 
    165166  ALLOCATE(mask(ncell)) 
     167  ALLOCATE(n_local(ncell)) 
    166168  ncell=0 
    167169  data_n_index=0 
     
    205207  CALL xios_set_domain_attr("domain_srf", lonvalue_1D=lon, latvalue_1D=lat) 
    206208  CALL xios_set_domain_attr("domain_srf", nvertex=4, bounds_lon_1D=bounds_lon, bounds_lat_1D=bounds_lat) 
     209!  CALL xios_set_compute_connectivity_domain_attr("compute", n_neighbor=n_local, local_neighbor=local_neighbor) 
    207210 
    208211 
     
    211214  CALL xios_set_timestep(dtime) 
    212215  CALL xios_close_context_definition() 
     216 
     217  CALL xios_get_compute_connectivity_domain_attr("compute", n_neighbor_max=nbMax) 
     218  ALLOCATE(local_neighbor(nbMax,ncell)) 
     219  CALL xios_get_compute_connectivity_domain_attr("compute", n_neighbor=n_local, local_neighbor=local_neighbor) 
    213220 
    214221   DO ts=1,24*10 
  • XIOS/trunk/src/transformation/algo_types.hpp

    r895 r934  
    2323#include "axis_algorithm_extract_domain.hpp" 
    2424#include "extract_domain_to_axis.hpp" 
     25#include "domain_algorithm_compute_connectivity.hpp" 
     26#include "compute_connectivity_domain.hpp" 
     27 
    2528#endif // __XIOS_ALGORITHM_TRANSFORMATION_TYPES_HPP__ 
  • XIOS/trunk/src/transformation/axis_algorithm_transformation.hpp

    r895 r934  
    1111 
    1212#include "generic_algorithm_transformation.hpp" 
     13#include "grid_transformation_factory_impl.hpp" 
    1314 
    1415namespace xios { 
  • XIOS/trunk/src/transformation/grid_transformation_selector.cpp

    r933 r934  
    1818{ 
    1919  if (0 == source) 
    20   {  gridSource_ = gridDestination_; isSameGrid_ = true; } 
     20  {  gridSource_ = gridDestination_; } 
     21  if (gridSource_ == gridDestination_) isSameGrid_ = true; 
    2122 
    2223  //Verify the compatibity between two grids 
     
    321322 
    322323  //! Domain 
    323 //  CDomainAlgorithmComputeConnectivity::registerTrans(); 
     324  CDomainAlgorithmComputeConnectivity::registerTrans(); 
    324325  CDomainAlgorithmInterpolate::registerTrans(); 
    325326  CDomainAlgorithmZoom::registerTrans(); 
  • XIOS/trunk/src/type/type_util.hpp

    r895 r934  
    4040    class CExtractDomainToAxis; 
    4141    class CExtractDomainToAxisGroup; 
     42    class CComputeConnectivityDomain; 
     43    class CComputeConnectivityDomainGroup; 
    4244 
    4345  template <typename T> inline string getStrType(void); 
     
    9698  macro(CExtractDomainToAxis) 
    9799  macro(CExtractDomainToAxisGroup) 
     100  macro(CComputeConnectivityDomain) 
     101  macro(CComputeConnectivityDomainGroup) 
    98102#undef macro 
    99103} 
  • XIOS/trunk/src/xml_parser_decl.cpp

    r895 r934  
    2929    macro( ReduceDomainToAxis ) 
    3030    macro( ExtractDomainToAxis ) 
     31    macro( ComputeConnectivityDomain ) 
    3132  } 
    3233} 
Note: See TracChangeset for help on using the changeset viewer.