rdomain.h

Go to the documentation of this file.
00001 /* 
00002 rdomain.h
00003 Igor Terentyev.
00004 ********************************************************************************
00005 */
00012 /*============================================================================*/
00013 
00014 #ifndef __RDOMAIN_H_
00015 #define __RDOMAIN_H_
00016 /*----------------------------------------------------------------------------*/
00017 
00018 #include "utils.h"
00019 #include "rarray.h"
00020 
00021 /*----------------------------------------------------------------------------*/
00022 /*
00023 Domain.
00024 
00025 int narr  :  number of arrays in the domain.
00026 RARR _s[] :  array storage pointer.
00027 */
00031 typedef struct
00032 {
00034   int narr;
00037   RARR _s[RDOM_MAX_NARR];
00038 } RDOM;
00039 /*----------------------------------------------------------------------------*/
00040 /*
00041 Functions' parameters.
00042 
00043 RDOM *dom         :  domain pointer.
00044 int narr          :  number of arrays.
00045 int iarr          :  array index
00046 int ndim          :  number of dimensions.
00047 int idim          :  dimension number.
00048 IPNT dgs[], dge[] :  array start/end global indices pointer.
00049 IPNT dn[]         :  array sizes pointer.
00050 IPNT gs, ge       :  array start/end global indices pointer. 
00051 IPNT n            :  array sizes pointer.
00052 IPNT os, oe       :  array start, end offsets (>0 - inside, <0 - outside).
00053 IPNT li           :  local indices.
00054 IPNT gi           :  global indices.
00055 int islice        :  slice index.
00056 ireal r            :  array value.
00057 FILE* stream      :  output stream.
00058 const char* path  :  file name.
00059 
00060 int return        :  error code.
00061 */
00062 /*----------------------------------------------------------------------------*/
00069 int rd_a_setnull(RDOM *dom);
00078 int rd_setnull(RDOM *dom, int iarr);
00079 /*----------------------------------------------------------------------------*/
00080 /* 
00081 Create domain arrays / next array (STORAGE ALLOCATION). 
00082 */
00093 int rd_a_create_s(RDOM *dom, int narr, IPNT dgs[], IPNT dn[]);
00104 int rd_a_create_e(RDOM *dom, int narr, IPNT dge[], IPNT dn[]);
00115 int rd_a_create(RDOM *dom, int narr, IPNT dgs[], IPNT dge[]);
00125 int rd_create_s(RDOM *dom, IPNT gs, IPNT n);
00135 int rd_create_e(RDOM *dom, IPNT ge, IPNT n);
00145 int rd_create(RDOM *dom, IPNT gs, IPNT ge);
00146 /*----------------------------------------------------------------------------*/
00147 /* 
00148 Declare domain arrays / next array. 
00149 */
00161 int rd_a_declare_s(RDOM *dom, int narr, IPNT dgs[], IPNT dn[]);
00173 int rd_a_declare_e(RDOM *dom, int narr, IPNT dge[], IPNT dn[]);
00185 int rd_a_declare(RDOM *dom, int narr, IPNT dgs[], IPNT dge[]);
00196 int rd_declare_s(RDOM *dom, IPNT gs, IPNT n);
00207 int rd_declare_e(RDOM *dom, IPNT ge, IPNT n);
00218 int rd_declare(RDOM *dom, IPNT gs, IPNT ge);
00219 /*----------------------------------------------------------------------------*/
00220 /*
00221 Allocate all arrays/array.
00222 NOTE: rd_a_allocate supresses E_ALREADYALLOC errors!
00223 */
00231 int rd_a_allocate(RDOM *dom);
00240 int rd_allocate(RDOM *dom, int iarr);
00241 /*----------------------------------------------------------------------------*/
00245 int rd_a_destroy(RDOM *dom);
00246 /*----------------------------------------------------------------------------*/
00247 /* 
00248 Set array (NO STORAGE ALLOCATION). 
00249 */
00260 int rd_a_greset(RDOM *dom, IPNT dgs[], IPNT dge[]);
00272 int rd_greset_s(RDOM *dom, int iarr, IPNT gs, IPNT n);
00284 int rd_greset_e(RDOM *dom, int iarr, IPNT ge, IPNT n);
00296 int rd_greset(RDOM *dom, int iarr, IPNT gs, IPNT ge);
00307 int rd_offset_s(RDOM *dom, int iarr, IPNT os, IPNT n);
00318 int rd_offset_e(RDOM *dom, int iarr, IPNT oe, IPNT n);
00329 int rd_offset(RDOM *dom, int iarr, IPNT os, IPNT oe);
00330 /*----------------------------------------------------------------------------*/
00331 /* Resize all arrays (NO STORAGE ALLOCATION). */
00332 /*----------------------------------------------------------------------------*/
00333 /* 
00334 Dump domain information. 
00335 */
00339 int rd_a_dump (const RDOM *dom, FILE* stream);
00348 int rd_dump(const RDOM *dom, int iarr, FILE* stream);
00349 /*----------------------------------------------------------------------------*/
00350 /* 
00351 Formatted and binary output of array / all arrays in domain.
00352 */
00361 int rd_a_print(RDOM *dom, FILE* stream);
00370 int rd_a_fprint(RDOM *dom, const char *path);
00380 int rd_a_fsprint(RDOM *dom, const char *path);
00390 int rd_print(RDOM *dom, int iarr, FILE* stream);
00400 int rd_fprint(RDOM *dom, int iarr, const char *path);
00410 int rd_write(RDOM *dom, int iarr, FILE* stream);
00420 int rd_fwrite(RDOM *dom, int iarr, const char *path);
00421 /*----------------------------------------------------------------------------*/
00422 /* 
00423 Formatted and binary output of array slice to stream/file. 
00424 */
00430 int rd_printslice(RDOM *dom, int iarr, FILE* stream, int idim, int islice);
00436 int rd_fprintslice(RDOM *dom, int iarr, const char *path, int idim, int islice);
00442 int rd_writeslice(RDOM *dom, int iarr, FILE* stream, int idim, int islice);
00448 int rd_fwriteslice(RDOM *dom, int iarr, const char *path, int idim, int islice);
00449 /*----------------------------------------------------------------------------*/
00450 /* 
00451 Get/set value. 
00452 If index or array number is out of bounds, these functions:
00453   1) Do not perform get/set operation.
00454   2) Write error info into stderr.
00455 */
00466 ireal rd_get(const RDOM *dom, int iarr, IPNT li);
00476 ireal rd_gget(const RDOM *dom, int iarr, IPNT gi);
00488 void rd_set(RDOM *dom, int iarr, IPNT li, ireal r);
00499 void rd_gset(RDOM *dom, int iarr, IPNT gi, ireal r);
00500 /*----------------------------------------------------------------------------*/
00501 /* 
00502 Get size, gloabal start/end indices. 
00503 gs, ge can be NULL.
00504 */
00510 int rd_size(RDOM *dom, int iarr, IPNT n);
00516 int rd_a_size(RDOM *dom, int iarr, IPNT n);
00522 int rd_gse(const RDOM *dom, int iarr, IPNT gs, IPNT ge);
00528 int rd_a_gse(const RDOM *dom, int iarr, IPNT gs, IPNT ge);
00529 /*----------------------------------------------------------------------------*/
00530 /*
00531 Get number of dimensions/arrays
00532 */
00544 int rd_ndim(const RDOM *dom, int iarr, int *ndim);
00548 int rd_a_narr(const RDOM *dom, int *narr);
00549 /*----------------------------------------------------------------------------*/
00550 /*
00551 Array empty query.
00552 */
00558 int rd_setempty(RDOM *dom, int iarr);
00567 int rd_empty(RDOM *dom, int iarr, int *empty);
00568 /*----------------------------------------------------------------------------*/
00569 /*
00570 Populates exchange info. Creates MPI_Datatype inside - do not forget to destroy.
00571 */
00582 int rd_setexchangeinfo(RDOM *dom, int iarr, EXCHANGEINFO *einfo);
00583 /*----------------------------------------------------------------------------*/
00584 /*
00585 Checks if arrays overlap.
00586 */
00596 int rd_overlap(RDOM *dom1, int iarr1, RDOM *dom2, int iarr2, int *overlap);
00597 /*----------------------------------------------------------------------------*/
00598 /*
00599 Set arr1 := arr1 intesect arr2
00600 */
00612 int rd_setoverlap(RDOM *dom1, int iarr1, RDOM *dom2, int iarr2);
00613 /*----------------------------------------------------------------------------*/
00614 /*
00615  * part of infrastructure to give RDOM minimal DataContainer characteristics
00616  *
00617  * note that inner product is over ALLOCATED arrays, not just 
00618  * virtual arrays
00619  *
00620  * @param [in] d1 - (RDOM const *) input array 1
00621  * @param [in] d2 - (RDOM const *) input array 2
00622  * @param [out] ip  - (ireal) inner product - unscaled l2
00623  * @return 0 - normal return
00624  */
00625 int rd_a_inner(RDOM const * dom1, RDOM const * dom2, ireal * ip);
00626 
00627 /*----------------------------------------------------------------------------*/
00628 /*
00629  * part of infrastructure to give RDOM minimal DataContainer characteristics
00630  *
00631  * note: zeros ALL ALLOCATED arrays, not just virtual arrays
00632  *
00633  * @param [in] dom - (RDOM const *) input array 
00634  * @return 0 - normal return
00635  */
00636 int rd_a_zero(RDOM * dom);
00637 
00638 /*----------------------------------------------------------------------------*/
00639 /*
00640  * part of infrastructure to give RDOM minimal DataContainer characteristics
00641  *
00642  * note: scales ALLOCATED array by index
00643  *
00644  * @param [in] dom - (RDOM const *) input array 
00645  * @return 0 - normal return
00646  */
00647 int rd_a_scale(RDOM * dom, int iarr, ireal fac);
00648 
00649 #endif /*__RDOMAIN_H_*/

Generated on 5 Jan 2017 for IWAVECORE by  doxygen 1.4.7