Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Larry Price
gmsh
Commits
a32f2e5f
Commit
a32f2e5f
authored
17 years ago
by
Christophe Geuzaine
Browse files
Options
Downloads
Patches
Plain Diff
*** empty log message ***
parent
05da2c09
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
Geo/GModelIO_MED.cpp
+45
-23
45 additions, 23 deletions
Geo/GModelIO_MED.cpp
Post/PViewDataGModelIO.cpp
+6
-5
6 additions, 5 deletions
Post/PViewDataGModelIO.cpp
with
51 additions
and
28 deletions
Geo/GModelIO_MED.cpp
+
45
−
23
View file @
a32f2e5f
// $Id: GModelIO_MED.cpp,v 1.2
2
2008-0
3-30 20:45:27
geuzaine Exp $
// $Id: GModelIO_MED.cpp,v 1.2
3
2008-0
4-01 13:41:33
geuzaine Exp $
//
//
// Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
// Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
//
//
...
@@ -37,29 +37,51 @@ extern "C" {
...
@@ -37,29 +37,51 @@ extern "C" {
#include
<med.h>
#include
<med.h>
}
}
static
int
getElementTypeForMED
(
int
msh
,
med_geometrie_element
&
med
)
static
med_geometrie_element
msh2medElementType
(
int
msh
)
{
{
switch
(
msh
)
{
switch
(
msh
)
{
case
MSH_LIN_2
:
med
=
MED_SEG2
;
return
2
;
case
MSH_LIN_2
:
return
MED_SEG2
;
case
MSH_TRI_3
:
med
=
MED_TRIA3
;
return
3
;
case
MSH_TRI_3
:
return
MED_TRIA3
;
case
MSH_QUA_4
:
med
=
MED_QUAD4
;
return
4
;
case
MSH_QUA_4
:
return
MED_QUAD4
;
case
MSH_TET_4
:
med
=
MED_TETRA4
;
return
4
;
case
MSH_TET_4
:
return
MED_TETRA4
;
case
MSH_HEX_8
:
med
=
MED_HEXA8
;
return
8
;
case
MSH_HEX_8
:
return
MED_HEXA8
;
case
MSH_PRI_6
:
med
=
MED_PENTA6
;
return
6
;
case
MSH_PRI_6
:
return
MED_PENTA6
;
case
MSH_PYR_5
:
med
=
MED_PYRA5
;
return
5
;
case
MSH_PYR_5
:
return
MED_PYRA5
;
case
MSH_LIN_3
:
med
=
MED_SEG3
;
return
3
;
case
MSH_LIN_3
:
return
MED_SEG3
;
case
MSH_TRI_6
:
med
=
MED_TRIA6
;
return
6
;
case
MSH_TRI_6
:
return
MED_TRIA6
;
case
MSH_TET_10
:
med
=
MED_TETRA10
;
return
10
;
case
MSH_TET_10
:
return
MED_TETRA10
;
case
MSH_PNT
:
med
=
MED_POINT1
;
return
1
;
case
MSH_PNT
:
return
MED_POINT1
;
case
MSH_QUA_8
:
med
=
MED_QUAD8
;
return
8
;
case
MSH_QUA_8
:
return
MED_QUAD8
;
case
MSH_HEX_20
:
med
=
MED_HEXA20
;
return
20
;
case
MSH_HEX_20
:
return
MED_HEXA20
;
case
MSH_PRI_15
:
med
=
MED_PENTA15
;
return
15
;
case
MSH_PRI_15
:
return
MED_PENTA15
;
case
MSH_PYR_13
:
med
=
MED_PYRA13
;
return
13
;
case
MSH_PYR_13
:
return
MED_PYRA13
;
default:
med
=
MED_NONE
;
return
0
;
default:
return
MED_NONE
;
}
}
}
}
int
med2msh
(
med_geometrie_element
med
,
int
k
)
int
med2mshElementType
(
med_geometrie_element
med
)
{
switch
(
med
)
{
case
MED_SEG2
:
return
MSH_LIN_2
;
case
MED_TRIA3
:
return
MSH_TRI_3
;
case
MED_QUAD4
:
return
MSH_QUA_4
;
case
MED_TETRA4
:
return
MSH_TET_4
;
case
MED_HEXA8
:
return
MSH_HEX_8
;
case
MED_PENTA6
:
return
MSH_PRI_6
;
case
MED_PYRA5
:
return
MSH_PYR_5
;
case
MED_SEG3
:
return
MSH_LIN_3
;
case
MED_TRIA6
:
return
MSH_TRI_6
;
case
MED_TETRA10
:
return
MSH_TET_10
;
case
MED_POINT1
:
return
MSH_PNT
;
case
MED_QUAD8
:
return
MSH_QUA_8
;
case
MED_HEXA20
:
return
MSH_HEX_20
;
case
MED_PENTA15
:
return
MSH_PRI_15
;
case
MED_PYRA13
:
return
MSH_PYR_13
;
default:
return
0
;
}
}
int
med2mshNodeIndex
(
med_geometrie_element
med
,
int
k
)
{
{
switch
(
med
)
{
switch
(
med
)
{
case
MED_SEG2
:
return
k
;
case
MED_SEG2
:
return
k
;
...
@@ -206,11 +228,11 @@ int GModel::readMED(const std::string &name, int meshIndex)
...
@@ -206,11 +228,11 @@ int GModel::readMED(const std::string &name, int meshIndex)
0
,
nodeTags
.
empty
()
?
0
:
nodeTags
[
i
]);
0
,
nodeTags
.
empty
()
?
0
:
nodeTags
[
i
]);
// read elements
// read elements
for
(
int
mshType
=
0
;
mshType
<
50
;
mshType
++
){
// loop over all possible MSH types
for
(
int
mshType
=
0
;
mshType
<
50
;
mshType
++
){
// loop over all possible MSH types
med_geometrie_element
type
;
med_geometrie_element
type
=
msh2medElementType
(
mshType
);
int
numNodPerEle
=
getElementTypeForMED
(
mshType
,
type
);
if
(
type
==
MED_NONE
)
continue
;
if
(
type
==
MED_NONE
)
continue
;
med_int
numEle
=
MEDnEntMaa
(
fid
,
meshName
,
MED_CONN
,
MED_MAILLE
,
type
,
MED_NOD
);
med_int
numEle
=
MEDnEntMaa
(
fid
,
meshName
,
MED_CONN
,
MED_MAILLE
,
type
,
MED_NOD
);
if
(
numEle
<=
0
)
continue
;
if
(
numEle
<=
0
)
continue
;
int
numNodPerEle
=
type
%
100
;
std
::
vector
<
med_int
>
conn
(
numEle
*
numNodPerEle
);
std
::
vector
<
med_int
>
conn
(
numEle
*
numNodPerEle
);
if
(
MEDconnLire
(
fid
,
meshName
,
meshDim
,
&
conn
[
0
],
MED_FULL_INTERLACE
,
0
,
MED_ALL
,
if
(
MEDconnLire
(
fid
,
meshName
,
meshDim
,
&
conn
[
0
],
MED_FULL_INTERLACE
,
0
,
MED_ALL
,
MED_MAILLE
,
type
,
MED_NOD
)
<
0
)
{
MED_MAILLE
,
type
,
MED_NOD
)
<
0
)
{
...
@@ -241,7 +263,7 @@ int GModel::readMED(const std::string &name, int meshIndex)
...
@@ -241,7 +263,7 @@ int GModel::readMED(const std::string &name, int meshIndex)
for
(
int
j
=
0
;
j
<
numEle
;
j
++
){
for
(
int
j
=
0
;
j
<
numEle
;
j
++
){
std
::
vector
<
MVertex
*>
v
(
numNodPerEle
);
std
::
vector
<
MVertex
*>
v
(
numNodPerEle
);
for
(
int
k
=
0
;
k
<
numNodPerEle
;
k
++
)
for
(
int
k
=
0
;
k
<
numNodPerEle
;
k
++
)
v
[
k
]
=
verts
[
conn
[
numNodPerEle
*
j
+
med2msh
(
type
,
k
)]
-
1
];
v
[
k
]
=
verts
[
conn
[
numNodPerEle
*
j
+
med2msh
NodeIndex
(
type
,
k
)]
-
1
];
MElement
*
e
=
factory
.
create
(
mshType
,
v
,
eleTags
.
empty
()
?
0
:
eleTags
[
j
]);
MElement
*
e
=
factory
.
create
(
mshType
,
v
,
eleTags
.
empty
()
?
0
:
eleTags
[
j
]);
if
(
e
)
elements
[
-
fam
[
j
]].
push_back
(
e
);
if
(
e
)
elements
[
-
fam
[
j
]].
push_back
(
e
);
}
}
...
@@ -320,7 +342,7 @@ static void fillElementsMED(med_int family, std::vector<T*> &elements, med_int &
...
@@ -320,7 +342,7 @@ static void fillElementsMED(med_int family, std::vector<T*> &elements, med_int &
for
(
int
j
=
0
;
j
<
elements
[
i
]
->
getNumVertices
();
j
++
)
for
(
int
j
=
0
;
j
<
elements
[
i
]
->
getNumVertices
();
j
++
)
conn
.
push_back
(
elements
[
i
]
->
getVertexMED
(
j
)
->
getIndex
());
conn
.
push_back
(
elements
[
i
]
->
getVertexMED
(
j
)
->
getIndex
());
fam
.
push_back
(
family
);
fam
.
push_back
(
family
);
if
(
!
i
)
get
ElementType
ForMED
(
elements
[
i
]
->
getTypeForMSH
()
,
type
);
if
(
!
i
)
type
=
msh2med
ElementType
(
elements
[
i
]
->
getTypeForMSH
());
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Post/PViewDataGModelIO.cpp
+
6
−
5
View file @
a32f2e5f
// $Id: PViewDataGModelIO.cpp,v 1.3
2
2008-04-01 1
2
:4
7:10
geuzaine Exp $
// $Id: PViewDataGModelIO.cpp,v 1.3
3
2008-04-01 1
3
:4
1:33
geuzaine Exp $
//
//
// Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
// Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
//
//
...
@@ -146,7 +146,8 @@ extern "C" {
...
@@ -146,7 +146,8 @@ extern "C" {
#include
<med.h>
#include
<med.h>
}
}
extern
int
med2msh
(
med_geometrie_element
med
,
int
k
);
extern
int
med2mshElementType
(
med_geometrie_element
med
);
extern
int
med2mshNodeIndex
(
med_geometrie_element
med
,
int
k
);
bool
PViewDataGModel
::
readMED
(
std
::
string
fileName
,
int
fileIndex
)
bool
PViewDataGModel
::
readMED
(
std
::
string
fileName
,
int
fileIndex
)
{
{
...
@@ -262,8 +263,6 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
...
@@ -262,8 +263,6 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
mult
=
ngauss
;
mult
=
ngauss
;
setType
(
GaussPointData
);
setType
(
GaussPointData
);
}
}
// only a guess, since several element types may be combined
_steps
[
step
]
->
resizeData
(
numVal
/
mult
);
_steps
[
step
]
->
resizeData
(
numVal
/
mult
);
// read field data
// read field data
...
@@ -290,6 +289,8 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
...
@@ -290,6 +289,8 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
// FIXME: store this in stepData, e.g. in a vector indexed by
// FIXME: store this in stepData, e.g. in a vector indexed by
// mshEleType std::vector<std::vector<u,v,w, u,v,w, u,v,w, ...> >
// mshEleType std::vector<std::vector<u,v,w, u,v,w, u,v,w, ...> >
// (ele/100==geo dim, ele%100==num nodes)
// (ele/100==geo dim, ele%100==num nodes)
// int msh = med2mshElementTupe(ele);
// gaussPointsCoordinates[msh] = gscoo; // zero pad
}
}
// compute profile (indices in full array of entities of given type)
// compute profile (indices in full array of entities of given type)
...
@@ -349,7 +350,7 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
...
@@ -349,7 +350,7 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
double
*
d
=
_steps
[
step
]
->
getData
(
num
,
true
,
mult
);
double
*
d
=
_steps
[
step
]
->
getData
(
num
,
true
,
mult
);
for
(
int
j
=
0
;
j
<
mult
;
j
++
){
for
(
int
j
=
0
;
j
<
mult
;
j
++
){
// reorder nodes if we have ElementNode data
// reorder nodes if we have ElementNode data
int
j2
=
(
ent
==
MED_NOEUD_ELEMENT
)
?
med2msh
(
ele
,
j
)
:
j
;
int
j2
=
(
ent
==
MED_NOEUD_ELEMENT
)
?
med2msh
NodeIndex
(
ele
,
j
)
:
j
;
for
(
int
k
=
0
;
k
<
numComp
;
k
++
)
for
(
int
k
=
0
;
k
<
numComp
;
k
++
)
d
[
numCompMsh
*
j
+
k
]
=
val
[
numComp
*
mult
*
i
+
numComp
*
j2
+
k
];
d
[
numCompMsh
*
j
+
k
]
=
val
[
numComp
*
mult
*
i
+
numComp
*
j2
+
k
];
double
s
=
ComputeScalarRep
(
numCompMsh
,
&
d
[
numCompMsh
*
j
]);
double
s
=
ComputeScalarRep
(
numCompMsh
,
&
d
[
numCompMsh
*
j
]);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment