Changeset 953
- Timestamp:
- 09/28/16 00:45:10 (8 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/config/domain_attribute.conf
r789 r953 51 51 DECLARE_ARRAY(double, 2, area) 52 52 53 DECLARE_ENUM 3(type,rectilinear,curvilinear,unstructured)53 DECLARE_ENUM4(type,rectilinear,curvilinear,unstructured, gaussian) 54 54 DECLARE_ATTRIBUTE(StdString, domain_ref) -
XIOS/trunk/src/node/domain.cpp
r942 r953 34 34 , isClientAfterTransformationChecked(false), hasLonLat(false) 35 35 , lonvalue_client(), latvalue_client(), bounds_lon_client(), bounds_lat_client() 36 , isRedistributed_(false) 36 , isRedistributed_(false), hasPole(false) 37 37 { 38 38 } … … 44 44 , isClientAfterTransformationChecked(false), hasLonLat(false) 45 45 , lonvalue_client(), latvalue_client(), bounds_lon_client(), bounds_lat_client() 46 , isRedistributed_(false) 46 , isRedistributed_(false), hasPole(false) 47 47 { 48 48 } … … 614 614 << "please define the 'type' attribute.") 615 615 } 616 616 if (type == type_attr::gaussian) 617 { 618 hasPole=true ; 619 type.setValue(type_attr::unstructured) ; 620 } 621 else if (type == type_attr::rectilinear) hasPole=true ; 622 617 623 if (type == type_attr::unstructured) 618 624 { -
XIOS/trunk/src/node/domain.hpp
r924 r953 164 164 bool hasArea; 165 165 bool hasLonLat; 166 bool hasPole ; 167 166 168 private: 167 169 void checkDomain(void); … … 206 208 std::vector<int> nGlobDomain_; 207 209 bool isUnstructed_; 208 210 209 211 private: 210 212 static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m); -
XIOS/trunk/src/test/test_unstruct_complete.f90
r944 r953 204 204 205 205 CALL xios_set_axis_attr("axis_srf",n_glo=llm ,value=lval) ; 206 CALL xios_set_domain_attr("domain_srf", ni_glo=ncell_glo, ni=ncell, ibegin= 1, i_index=i_index)206 CALL xios_set_domain_attr("domain_srf", ni_glo=ncell_glo, ni=ncell, ibegin=0, i_index=i_index) 207 207 CALL xios_set_domain_attr("domain_srf", type='unstructured', data_dim=1, data_ni=data_n_index, & 208 208 data_i_index=data_i_index) … … 215 215 dtime%second=3600 216 216 CALL xios_set_timestep(dtime) 217 218 !CALL MSE_XIOS_GAUSS_GRID(NDGLG,NDLON,NPRGPNS ,NPRGPEW,MYSETA,MYSETB) 219 CALL MSE_XIOS_GAUSS_GRID(127 ,255 ,mpi_size,1 ,mpi_rank+1, 1) 220 217 221 CALL xios_close_context_definition() 218 222 … … 228 232 CALL xios_update_calendar(ts) 229 233 CALL xios_send_field("field_A_srf",field_A_compressed) 234 CALL xios_send_field("field_B_srf",field_A_compressed(:,1)) 230 235 ENDDO 231 236 … … 253 258 CALL xios_finalize() 254 259 255 END PROGRAM test_unstruct_complete 256 257 258 259 260 260 CONTAINS 261 SUBROUTINE MSE_XIOS_GAUSS_GRID(NDGLG,NDLON,NPRGPNS, NPRGPEW,MYSETA, MYSETB) 262 !! 263 !! PURPOSE : declare to XIOS a distribution for a rectilinear grid 264 !! -------- 265 ! 266 USE XIOS , ONLY : XIOS_DOMAIN, XIOS_DOMAINGROUP,XIOS_GET_HANDLE, & 267 XIOS_ADD_CHILD, XIOS_SET_DOMAIN_ATTR 268 ! 269 ! 270 IMPLICIT NONE 271 ! 272 INTEGER, INTENT(IN) :: NDGLG,NDLON,NPRGPNS, NPRGPEW,MYSETA, MYSETB 273 ! 274 ! 275 !* 0.2 Declarations of local variables 276 ! ------------------------------- 277 ! 278 CHARACTER(LEN=8), PARAMETER :: YNAMGRID="complete" 279 INTEGER :: NI,NJ,I,J,IOFF,JOFF 280 REAL :: ZINCR 281 DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: ZLATI,ZLONG 282 ! 283 TYPE(xios_domaingroup) :: domaingroup_hdl 284 TYPE(xios_domain) :: domain_hdl 285 ! 286 ! Basic XIOS declarations 287 CALL XIOS_GET_HANDLE("domain_definition",domaingroup_hdl) 288 CALL XIOS_ADD_CHILD(domaingroup_hdl,domain_hdl,YNAMGRID) 289 CALL XIOS_SET_DOMAIN_ATTR(YNAMGRID, type="rectilinear", data_dim=2) 290 ! 291 ! Compute domain size in longitude 292 ! 293 IF (MOD(NDLON,NPRGPEW)==0) THEN 294 NI=NDLON/NPRGPEW 295 IOFF=(MYSETB-1)*NI 296 ELSE 297 NI=NDLON/NPRGPEW+1 298 IOFF=(MYSETB-1)*NI 299 IF (MYSETB==NPRGPEW) NI=MOD(NDLON,NI) 300 ENDIF 301 ! 302 ! Compute evenly spaced longitudes 303 ! 304 ALLOCATE(ZLONG(NI)) 305 ZINCR=360./NDLON 306 DO I=1,NI 307 ZLONG(I)=(IOFF+I)*ZINCR 308 ENDDO 309 ! 310 write(0,*) 'i=',IOFF+1,IOFF+NI 311 CALL XIOS_SET_DOMAIN_ATTR(YNAMGRID, ni_glo=NDLON, ni=NI,ibegin=IOFF) 312 CALL XIOS_SET_DOMAIN_ATTR(YNAMGRID, lonvalue_1d=ZLONG(:)) 313 ! 314 ! Compute domain size in latitude 315 ! 316 IF (MOD(NDGLG,NPRGPNS)==0) THEN 317 NJ=NDGLG/NPRGPNS 318 JOFF=(MYSETA-1)*NJ 319 ELSE 320 NJ=NDGLG/NPRGPNS+1 321 JOFF=(MYSETA-1)*NJ 322 IF (MYSETA==NPRGPNS) NJ=MOD(NDGLG,NJ) 323 ENDIF 324 ! 325 ALLOCATE(ZLATI(NJ)) 326 ZINCR=180./NDGLG 327 DO J=1,NJ 328 ZLATI(J)=(JOFF+J)*ZINCR 329 ENDDO 330 ! 331 !write(0,*) 'j=',JOFF+1,JOFF+NJ ; call flush(0) 332 CALL XIOS_SET_DOMAIN_ATTR(YNAMGRID, nj_glo=NDGLG, nj=NJ, jbegin=JOFF) 333 CALL XIOS_SET_DOMAIN_ATTR(YNAMGRID,latvalue_1d=ZLATI(:)-90.) 334 ! 335 DEALLOCATE(ZLATI,ZLONG)!,ZLATIC,ZLONGC) 336 END SUBROUTINE MSE_XIOS_GAUSS_GRID 337 338 END PROGRAM test_unstruct_complete 339 340 341 342 343 -
XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp
r949 r953 84 84 CArray<double,2> boundsLatSrc(nVertexSrc,localDomainSrcSize); 85 85 86 if ( CDomain::type_attr::rectilinear == domainSrc_->type) srcPole[2] = 1;86 if (domainSrc_->hasPole) srcPole[2] = 1; 87 87 if (hasBoundSrc) // Suppose that domain source is curvilinear or unstructured 88 88 { … … 144 144 CArray<double,2> boundsLatDest(nVertexDest,localDomainDestSize); 145 145 146 if ( CDomain::type_attr::rectilinear == domainDest_->type) dstPole[2] = 1;146 if (domainDest_->hasPole) dstPole[2] = 1; 147 147 if (hasBoundDest) 148 148 {
Note: See TracChangeset
for help on using the changeset viewer.