PetscErrorCode MPIU_File_read_all(MPI_File fd,void *data,PetscMPIInt cnt,MPI_Datatype dtype,MPI_Status *status) { PetscDataType pdtype; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscMPIDataTypeToPetscDataType(dtype,&pdtype);CHKERRQ(ierr); ierr = MPI_File_read_all(fd,data,cnt,dtype,status);CHKERRQ(ierr); if (!PetscBinaryBigEndian()) {ierr = PetscByteSwap(data,pdtype,cnt);CHKERRQ(ierr);} PetscFunctionReturn(0); }
EXTERN_C_END #endif PetscErrorCode MPIU_File_write_all(MPI_File fd,void *data,PetscMPIInt cnt,MPI_Datatype dtype,MPI_Status *status) { PetscErrorCode ierr; PetscDataType pdtype; PetscFunctionBegin; ierr = PetscMPIDataTypeToPetscDataType(dtype,&pdtype);CHKERRQ(ierr); ierr = PetscByteSwap(data,pdtype,cnt);CHKERRQ(ierr); ierr = MPI_File_write_all(fd,data,cnt,dtype,status);CHKERRQ(ierr); ierr = PetscByteSwap(data,pdtype,cnt);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscMPIInt PetscDataRep_write_conv_fn(void *userbuf, MPI_Datatype datatype,PetscMPIInt count,void *filebuf, MPI_Offset position,void *extra_state) { PetscDataType pdtype; PetscMPIInt ierr; size_t dsize; ierr = PetscMPIDataTypeToPetscDataType(datatype,&pdtype);CHKERRQ(ierr); ierr = PetscDataTypeGetSize(pdtype,&dsize);CHKERRQ(ierr); /* offset is given in units of MPI_Datatype */ userbuf = ((char*)userbuf) + dsize*position; ierr = PetscMemcpy(filebuf,userbuf,count*dsize);CHKERRQ(ierr); if (!PetscBinaryBigEndian()) {ierr = PetscByteSwap(filebuf,pdtype,count);CHKERRQ(ierr);} return ierr; }
PETSC_EXTERN PetscMPIInt PetscDataRep_read_conv_fn(void *userbuf, MPI_Datatype datatype,PetscMPIInt count,void *filebuf, MPI_Offset position,void *extra_state) { PetscDataType pdtype; PetscMPIInt ierr; size_t dsize; ierr = PetscMPIDataTypeToPetscDataType(datatype,&pdtype);CHKERRQ(ierr); ierr = PetscDataTypeGetSize(pdtype,&dsize);CHKERRQ(ierr); /* offset is given in units of MPI_Datatype */ userbuf = ((char*)userbuf) + dsize*position; ierr = PetscMemcpy(userbuf,filebuf,count*dsize);CHKERRQ(ierr); ierr = PetscByteSwap(userbuf,pdtype,count);CHKERRQ(ierr); return ierr; }