Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Kirill Terekhov
INMOST
Commits
86377f47
Commit
86377f47
authored
Nov 09, 2020
by
Kirill Terekhov
Browse files
preparations for pack/unpack with large data; recover streamlines in DrawGrid
parent
ac1cc6af
Changes
3
Show whitespace changes
Inline
Side-by-side
Examples/DrawGrid/streamline.cpp
View file @
86377f47
...
...
@@ -132,9 +132,9 @@ namespace INMOST
return
;
}
printf
(
"preparing octree around mesh, was sets %d
\n
"
,
mesh
->
NumberOfSets
());
SearchKDTree
octsearch
(
mesh
);
//~
Octree octsearch = Octree(mesh->CreateSet("octsearch").first);
//~
octsearch.Construct(vel_def, false); //auto-detect octree or quadtree
//~
SearchKDTree octsearch(mesh);
Octree
octsearch
=
Octree
(
mesh
->
CreateSet
(
"octsearch"
).
first
);
octsearch
.
Construct
(
vel_def
,
false
);
//auto-detect octree or quadtree
printf
(
"done, sets %d
\n
"
,
mesh
->
NumberOfSets
());
printf
(
"building streamlines
\n
"
);
Tag
cell_size
=
mesh
->
CreateTag
(
"STREAMLINES_TEMPORARY_CELL_SIZES"
,
DATA_REAL
,
CELL
,
NONE
,
1
);
...
...
@@ -259,13 +259,13 @@ namespace INMOST
mesh
->
DeleteTag
(
cell_size
);
printf
(
"done, total streamlines = %lu
\n
"
,
output
.
size
());
printf
(
"killing octree, was sets %d
\n
"
,
mesh
->
NumberOfSets
());
//~
octsearch.Destroy();
octsearch
.
Destroy
();
printf
(
"done, sets %d
\n
"
,
mesh
->
NumberOfSets
());
}
Streamline
::
Streamline
(
SearchKDT
ree
&
octsearch
,
coord
pos
,
Tag
velocity_tag
,
ElementType
velocity_defined
,
Tag
cell_size
,
Storage
::
real
velocity_min
,
Storage
::
real
velocity_max
,
Storage
::
real
sign
,
MarkerType
visited
)
Streamline
::
Streamline
(
const
Oct
ree
&
octsearch
,
coord
pos
,
Tag
velocity_tag
,
ElementType
velocity_defined
,
Tag
cell_size
,
Storage
::
real
velocity_min
,
Storage
::
real
velocity_max
,
Storage
::
real
sign
,
MarkerType
visited
)
{
Storage
::
real
coef
,
len
,
size
;
coord
next
=
pos
,
vel
;
...
...
@@ -277,8 +277,8 @@ namespace INMOST
velarr
.
push_back
(
0
);
while
(
points
.
size
()
<
maxsteps
)
{
//
c = octsearch.FindClosestCell(next.data());
c
=
octsearch
.
SearchCell
(
next
.
data
());
c
=
octsearch
.
FindClosestCell
(
next
.
data
());
//~
c = octsearch.SearchCell(next.data());
if
(
!
c
.
isValid
())
break
;
//if( !c.getAsCell().Inside(next.data()) ) break;
//check we are inside mesh
...
...
Examples/DrawGrid/streamline.h
View file @
86377f47
...
...
@@ -17,7 +17,7 @@ namespace INMOST
std
::
vector
<
double
>
velarr
;
public:
Streamline
()
{}
Streamline
(
SearchKDT
ree
&
octsearch
,
coord
pos
,
Tag
velocity_tag
,
ElementType
velocity_defined
,
Tag
cell_size
,
Storage
::
real
velocity_min
,
Storage
::
real
velocity_max
,
Storage
::
real
sign
,
MarkerType
visited
);
Streamline
(
const
Oct
ree
&
octsearch
,
coord
pos
,
Tag
velocity_tag
,
ElementType
velocity_defined
,
Tag
cell_size
,
Storage
::
real
velocity_min
,
Storage
::
real
velocity_max
,
Storage
::
real
sign
,
MarkerType
visited
);
Streamline
(
const
Streamline
&
other
)
{
points
=
other
.
points
;
velarr
=
other
.
velarr
;
}
Streamline
&
operator
=
(
Streamline
const
&
other
)
{
points
=
other
.
points
;
velarr
=
other
.
velarr
;
return
*
this
;
}
~
Streamline
()
{
points
.
clear
();
velarr
.
clear
();
}
...
...
Source/Mesh/parallel.cpp
View file @
86377f47
...
...
@@ -64,22 +64,106 @@ static std::string NameSlash(std::string input)
#define PROCESSID -1
#endif
#if 1
#define MPI_Pack_call(data,size,type,buf,buf_size,pos,comm) MPI_Pack(data,size,type,buf,buf_size,pos,comm)
#define MPI_Pack_size_call(size,type,comm,ret) MPI_Pack_size(size,type,comm,ret)
#define MPI_Unpack_call(buf,buf_size,pos,data,size,type,comm) MPI_Unpack(buf,buf_size,pos,data,size,type,comm)
#define POS_TYPE int
#define SEND_AS MPI_PACKED
#else
#define MPI_Pack_call(data,size,type,buf,buf_size,pos,comm) MPI_Pack_external("external32",data,size,type,buf,buf_size,pos)
#define MPI_Pack_size_call(size,type,comm,ret) MPI_Pack_external_size("external32",size,type,ret)
#define MPI_Unpack_call(buf,buf_size,pos,data,size,type,comm) MPI_Unpack_external("external32",buf,buf_size,pos,data,size,type)
#define POS_TYPE MPI_Aint
#define SEND_AS MPI_BYTE
#endif
#if SIZE_MAX == UCHAR_MAX
#define MPI_SIZE_T MPI_UNSIGNED_CHAR
#elif SIZE_MAX == USHRT_MAX
#define MPI_SIZE_T MPI_UNSIGNED_SHORT
#elif SIZE_MAX == UINT_MAX
#define MPI_SIZE_T MPI_UNSIGNED
#elif SIZE_MAX == ULONG_MAX
#define MPI_SIZE_T MPI_UNSIGNED_LONG
#elif SIZE_MAX == ULLONG_MAX
#define MPI_SIZE_T MPI_UNSIGNED_LONG_LONG
#else
#error "Cannot detect size_t type"
#endif
namespace
INMOST
{
//static int block_recursion = 0;
/*
std::string ro()
template
<
typename
T
>
struct
MPIType
;
template
<
>
struct
MPIType
<
bool
>
{
static
MPI_Datatype
Type
()
{
return
MPI_C_BOOL
;}};
template
<
>
struct
MPIType
<
char
>
{
static
MPI_Datatype
Type
()
{
return
MPI_CHAR
;}};
template
<
>
struct
MPIType
<
int
>
{
static
MPI_Datatype
Type
()
{
return
MPI_INT
;}};
template
<
>
struct
MPIType
<
short
>
{
static
MPI_Datatype
Type
()
{
return
MPI_SHORT
;}};
template
<
>
struct
MPIType
<
long
>
{
static
MPI_Datatype
Type
()
{
return
MPI_LONG
;}};
template
<
>
struct
MPIType
<
long
long
>
{
static
MPI_Datatype
Type
()
{
return
MPI_LONG_LONG
;}};
template
<
>
struct
MPIType
<
unsigned
char
>
{
static
MPI_Datatype
Type
()
{
return
MPI_UNSIGNED_CHAR
;}};
template
<
>
struct
MPIType
<
unsigned
short
>
{
static
MPI_Datatype
Type
()
{
return
MPI_UNSIGNED_SHORT
;}};
template
<
>
struct
MPIType
<
unsigned
>
{
static
MPI_Datatype
Type
()
{
return
MPI_UNSIGNED
;}};
template
<
>
struct
MPIType
<
unsigned
long
>
{
static
MPI_Datatype
Type
()
{
return
MPI_UNSIGNED_LONG
;}};
template
<
>
struct
MPIType
<
unsigned
long
long
>
{
static
MPI_Datatype
Type
()
{
return
MPI_UNSIGNED_LONG_LONG
;}};
template
<
>
struct
MPIType
<
double
>
{
static
MPI_Datatype
Type
()
{
return
MPI_DOUBLE
;}};
template
<
>
struct
MPIType
<
long
double
>
{
static
MPI_Datatype
Type
()
{
return
MPI_LONG_DOUBLE
;}};
template
<
>
struct
MPIType
<
float
>
{
static
MPI_Datatype
Type
()
{
return
MPI_FLOAT
;}};
//template<> struct MPIType<size_t> {static MPI_Datatype Type() {return MPI_SIZE_T;}};
template
<
typename
T
>
void
pack_data
(
Mesh
::
exch_buffer_type
&
buf
,
const
T
&
data
,
INMOST_MPI_Comm
comm
)
{
int rank = 0;
#ifdef USE_MPI
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
#endif
std::stringstream ss;
for (int i = 0; i < rank; i++)
ss << " ";
return ss.str();
int
ierr
;
POS_TYPE
pack_size
=
0
,
shift
;
size_t
write_pos
=
buf
.
size
();
MPI_Pack_size_call
(
1
,
MPIType
<
T
>::
Type
(),
comm
,
&
pack_size
);
buf
.
resize
(
write_pos
+
pack_size
);
MPI_Pack_call
((
void
*
)
&
data
,
1
,
MPIType
<
T
>::
Type
(),
&
buf
[
write_pos
],
pack_size
,
&
shift
,
comm
);
buf
.
resize
(
write_pos
+
shift
);
}
*/
template
<
typename
T
>
void
pack_data_array
(
Mesh
::
exch_buffer_type
&
buf
,
const
std
::
vector
<
T
>
&
data
,
INMOST_MPI_Comm
comm
)
{
pack_data
(
buf
,
data
.
size
(),
comm
);
if
(
!
data
.
empty
()
)
{
POS_TYPE
pack_size
=
0
,
shift
;
size_t
write_pos
=
buf
.
size
();
MPI_Pack_size_call
((
int
)
data
.
size
(),
MPIType
<
T
>::
Type
(),
comm
,
&
pack_size
);
buf
.
resize
(
write_pos
+
pack_size
);
MPI_Pack_call
((
void
*
)
&
data
[
0
],
data
.
size
(),
MPIType
<
T
>::
Type
(),
&
buf
[
write_pos
],
pack_size
,
&
shift
,
comm
);
buf
.
resize
(
write_pos
+
shift
);
}
}
template
<
typename
T
>
void
unpack_data
(
Mesh
::
exch_buffer_type
&
buf
,
int
&
pos
,
T
&
data
,
INMOST_MPI_Comm
comm
)
{
POS_TYPE
lpos
=
(
POS_TYPE
)
pos
;
MPI_Unpack_call
((
void
*
)
&
buf
[
0
],(
int
)
buf
.
size
(),
&
lpos
,
&
data
,
1
,
MPIType
<
T
>::
Type
(),
comm
);
pos
=
(
int
)
lpos
;
}
template
<
typename
T
>
void
unpack_data_array
(
Mesh
::
exch_buffer_type
&
buf
,
int
&
pos
,
std
::
vector
<
T
>
&
data
,
INMOST_MPI_Comm
comm
)
{
size_t
unpack_size
;
unpack_data
(
buf
,
pos
,
unpack_size
,
comm
);
data
.
resize
(
unpack_size
);
POS_TYPE
lpos
=
(
POS_TYPE
)
pos
;
MPI_Unpack_call
((
void
*
)
&
buf
[
0
],(
int
)
buf
.
size
(),
&
lpos
,
&
data
[
0
],(
int
)
unpack_size
,
MPIType
<
T
>::
Type
(),
comm
);
pos
=
(
int
)
lpos
;
}
//////////////////////////////
/// REDUCTION FUNCTIONS ///
//////////////////////////////
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment