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
Phillip Lino Rall
UGBlocks_V3
Commits
51060ea8
Commit
51060ea8
authored
Nov 10, 2020
by
Phillip Lino Rall
Browse files
core aufgeräumt, updatefunktionen hinzugefügt, minimalbeispiel für jens auch
parents
e7b82f34
bb52a776
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
program/source/grid/blockgrid.cc
View file @
51060ea8
...
...
@@ -372,6 +372,11 @@ inline std::vector<int> find_p_quad ( dir3D quad, Hexahedron_el *hex )
// WDed, EDed, WTed, ETed,
// SWed, SEed, NWed, NEed };
std
::
vector
<
int
>
ijk
=
{
1
,
1
,
1
};
// for (int iter = 0 ; iter < 12; iter++)
// {
// std::cout << hex->orientation[iter] << "\n" ;
// }
// std::cout << std::endl;
if
(
quad
==
Wdir3D
)
{
...
...
@@ -550,14 +555,45 @@ D3vector Blockgrid::Give_coord_hexahedron ( int id_hex,
int
quadWaddK
=
(
p_quad_Wdir3D
[
2
]
==
1
)
?
0
:
nEdgeZ
;
// std::cout <<"Nx " << Give_Nx_quadrangle ( idW ) << " Ny " << Give_Ny_quadrangle ( idW ) << "\n";
// std::cout <<"Nx " << Give_Nx_quadrangle ( idE ) << " Ny " << Give_Ny_quadrangle ( idE ) << "\n";
// std::cout <<"Nx " << Give_Nx_quadrangle ( idS ) << " Ny " << Give_Ny_quadrangle ( idS ) << "\n";
// std::cout <<"Nx " << Give_Nx_quadrangle ( idN ) << " Ny " << Give_Ny_quadrangle ( idN ) << "\n";
// std::cout <<"Nx " << Give_Nx_quadrangle ( idD ) << " Ny " << Give_Ny_quadrangle ( idD ) << "\n";
// std::cout <<"Nx " << Give_Nx_quadrangle ( idT ) << " Ny " << Give_Ny_quadrangle ( idT ) << std::endl;
// std::cout << std::endl;
// std::cout << " transface coordiantes: "<< std::endl;
//with modification
QPsi
[
0
]
=
Give_coord_quadrangle
(
idW
,
quadWaddJ
+
j
*
p_quad_Wdir3D
[
1
]
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
]);
QPsi
[
1
]
=
Give_coord_quadrangle
(
idE
,
quadEaddJ
+
j
*
p_quad_Edir3D
[
1
]
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
]);
QPsi
[
2
]
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
quadSaddK
+
k
*
p_quad_Sdir3D
[
2
]);
QPsi
[
3
]
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
]
,
quadNaddK
+
k
*
p_quad_Ndir3D
[
2
]);
QPsi
[
4
]
=
Give_coord_quadrangle
(
idD
,
quadDaddI
+
i
*
p_quad_Ddir3D
[
0
]
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
]);
QPsi
[
5
]
=
Give_coord_quadrangle
(
idT
,
quadTaddI
+
i
*
p_quad_Tdir3D
[
0
]
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
]);
bool
invertTD
=
false
;
bool
invertNS
=
false
;
bool
invertEW
=
false
;
if
(
!
(
nEdgeY
==
Give_Nx_quadrangle
(
idW
)
&&
nEdgeZ
==
Give_Ny_quadrangle
(
idW
)))
{
invertEW
=
true
;
}
if
(
!
(
nEdgeX
==
Give_Nx_quadrangle
(
idS
)
&&
nEdgeZ
==
Give_Ny_quadrangle
(
idS
)
))
{
invertNS
=
true
;
}
if
(
!
(
nEdgeX
==
Give_Nx_quadrangle
(
idD
)
&&
nEdgeY
==
Give_Ny_quadrangle
(
idD
)))
{
invertTD
=
true
;
}
QPsi
[
0
]
=
Give_coord_quadrangle
(
idW
,
quadWaddJ
+
j
*
p_quad_Wdir3D
[
1
]
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
],
invertEW
);
QPsi
[
1
]
=
Give_coord_quadrangle
(
idE
,
quadEaddJ
+
j
*
p_quad_Edir3D
[
1
]
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
],
invertEW
);
QPsi
[
2
]
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
quadSaddK
+
k
*
p_quad_Sdir3D
[
2
],
invertNS
);
QPsi
[
3
]
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
]
,
quadNaddK
+
k
*
p_quad_Ndir3D
[
2
],
invertNS
);
QPsi
[
4
]
=
Give_coord_quadrangle
(
idD
,
quadDaddI
+
i
*
p_quad_Ddir3D
[
0
]
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
],
invertTD
);
QPsi
[
5
]
=
Give_coord_quadrangle
(
idT
,
quadTaddI
+
i
*
p_quad_Tdir3D
[
0
]
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
],
invertTD
);
//delete again!!!
// QPsi[5] = Give_coord_quadrangle( idT , quadTaddJ + j*p_quad_Tdir3D[1] , quadTaddI + i*p_quad_Tdir3D[0]);
//std::cout << std::endl;
// Version: 1 x Flaechen + 2 x Kanten + 3 x Ecken
// /////////////////////////////////////////////////////////
Pres
=
(
QPsi
[
0
]
+
eta
*
(
QPsi
[
1
]
-
QPsi
[
0
])
+
QPsi
[
2
]
+
xi
*
(
QPsi
[
3
]
-
QPsi
[
2
])
+
QPsi
[
4
]
+
phi
*
(
QPsi
[
5
]
-
QPsi
[
4
]));
...
...
@@ -597,21 +633,21 @@ D3vector Blockgrid::Give_coord_hexahedron ( int id_hex,
if
(
md
==
0
)
// EW
{
PSW
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
quadSaddK
);
PSW
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
quadSaddK
,
invertNS
);
if
(
coordianteFromCorners
)
PSW
=
Psi
[
SDed
];
PSE
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
],
quadNaddK
);
PSE
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
],
quadNaddK
,
invertNS
);
if
(
coordianteFromCorners
)
PSE
=
Psi
[
NDed
];
PNW
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
nEdgeZ
-
quadSaddK
);
PNW
=
Give_coord_quadrangle
(
idS
,
quadSaddI
+
i
*
p_quad_Sdir3D
[
0
]
,
nEdgeZ
-
quadSaddK
,
invertNS
);
if
(
coordianteFromCorners
)
PNW
=
Psi
[
STed
];
PNE
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
],
nEdgeZ
-
quadNaddK
);
PNE
=
Give_coord_quadrangle
(
idN
,
quadNaddI
+
i
*
p_quad_Ndir3D
[
0
],
nEdgeZ
-
quadNaddK
,
invertNS
);
if
(
coordianteFromCorners
)
PNE
=
Psi
[
NTed
];
...
...
@@ -625,21 +661,21 @@ D3vector Blockgrid::Give_coord_hexahedron ( int id_hex,
{
PSW
=
Give_coord_quadrangle
(
idD
,
quadDaddI
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
]);
PSW
=
Give_coord_quadrangle
(
idD
,
quadDaddI
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
]
,
invertTD
);
if
(
coordianteFromCorners
)
PSW
=
Psi
[
WDed
];
PSE
=
Give_coord_quadrangle
(
idD
,
nEdgeX
-
quadDaddI
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
]);
PSE
=
Give_coord_quadrangle
(
idD
,
nEdgeX
-
quadDaddI
,
quadDaddJ
+
j
*
p_quad_Ddir3D
[
1
]
,
invertTD
);
if
(
coordianteFromCorners
)
PSE
=
Psi
[
EDed
];
PNW
=
Give_coord_quadrangle
(
idT
,
quadTaddI
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
]);
PNW
=
Give_coord_quadrangle
(
idT
,
quadTaddI
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
]
,
invertTD
);
if
(
coordianteFromCorners
)
PNW
=
Psi
[
WTed
];
PNE
=
Give_coord_quadrangle
(
idT
,
nEdgeX
-
quadTaddI
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
]);
PNE
=
Give_coord_quadrangle
(
idT
,
nEdgeX
-
quadTaddI
,
quadTaddJ
+
j
*
p_quad_Tdir3D
[
1
]
,
invertTD
);
if
(
coordianteFromCorners
)
PNE
=
Psi
[
ETed
];
...
...
@@ -654,20 +690,20 @@ D3vector Blockgrid::Give_coord_hexahedron ( int id_hex,
{
PSW
=
Give_coord_quadrangle
(
idW
,
quadWaddJ
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
]);
PSW
=
Give_coord_quadrangle
(
idW
,
quadWaddJ
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
]
,
invertEW
);
if
(
coordianteFromCorners
)
PSW
=
Psi
[
SWed
];
PSE
=
Give_coord_quadrangle
(
idE
,
quadEaddJ
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
]);
PSE
=
Give_coord_quadrangle
(
idE
,
quadEaddJ
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
]
,
invertEW
);
if
(
coordianteFromCorners
)
PSE
=
Psi
[
SEed
];
PNW
=
Give_coord_quadrangle
(
idW
,
nEdgeY
-
quadWaddJ
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
]);
PNW
=
Give_coord_quadrangle
(
idW
,
nEdgeY
-
quadWaddJ
,
quadWaddK
+
k
*
p_quad_Wdir3D
[
2
]
,
invertEW
);
if
(
coordianteFromCorners
)
PNW
=
Psi
[
NWed
];
PNE
=
Give_coord_quadrangle
(
idE
,
nEdgeY
-
quadEaddJ
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
]);
PNE
=
Give_coord_quadrangle
(
idE
,
nEdgeY
-
quadEaddJ
,
quadEaddK
+
k
*
p_quad_Edir3D
[
2
]
,
invertEW
);
if
(
coordianteFromCorners
)
PNE
=
Psi
[
NEed
];
...
...
@@ -764,7 +800,7 @@ D3vector Blockgrid::Give_coord_hexahedron ( int id_hex,
return
Pres
+
hex
->
transform_hex
(
id_hex
,
eta
,
xi
,
phi
);
}
D3vector
Blockgrid
::
Give_coord_quadrangle
(
int
id
,
int
i
,
int
j
)
const
D3vector
Blockgrid
::
Give_coord_quadrangle
(
int
id
,
int
i
,
int
j
,
bool
invert
)
const
{
if
(
bg_coord
!=
NULL
)
if
(
bg_coord
->
blockgrid_quad_coordinates_calculated
)
{
...
...
@@ -775,6 +811,8 @@ D3vector Blockgrid::Give_coord_quadrangle ( int id, int i, int j ) const
}
double
eta
,
xi
;
D3vector
PSW
,
PSE
,
PNW
,
PNE
,
PW
,
PE
,
PN
,
PS
;
D3vector
PTransFace
,
PWithoutTrans
;
...
...
@@ -783,9 +821,30 @@ D3vector Blockgrid::Give_coord_quadrangle ( int id, int i, int j ) const
quad
=
this
->
ug
->
Give_quadrangle
(
id
);
double
Nx
=
(
double
)
Give_Nx_quadrangle
(
id
);
double
Ny
=
(
double
)
Give_Ny_quadrangle
(
id
);
// std::cout << "nx ny " << Nx << " " << Ny << std::endl;
// if (id == 23 && Nx != Ny)
// {
// std::cout << "break";
// }
// std::cout << "nx ny " << Nx << " " << Ny << std::endl;
if
(
invert
)
{
double
temp
=
Nx
;
Nx
=
Ny
;
Ny
=
temp
;
}
//std::cout << "nx ny " << Nx << " " << Ny << std::endl;
eta
=
(
double
)
i
/
Nx
;
xi
=
(
double
)
j
/
Ny
;
if
(
eta
>
1
||
xi
>
1
)
{
std
::
cout
<<
"debug : flag is "
<<
invert
<<
", but should be "
<<
!
invert
<<
std
::
endl
;
std
::
cout
<<
std
::
endl
;
}
eta
=
(
double
)
i
/
(
double
)
Give_Nx_quadrangle
(
id
);
xi
=
(
double
)
j
/
(
double
)
Give_Ny_quadrangle
(
id
);
// @todo : so sollte es sein
PSW
=
quad
->
Give_coord
(
SWdir2D
);
...
...
@@ -814,7 +873,9 @@ D3vector Blockgrid::Give_coord_quadrangle ( int id, int i, int j ) const
if
(
quad
->
transform
!=
NULL
)
{
PTransFace
=
quad
->
transform
(
eta
,
xi
,
quad
->
shiftPointer
(
ug
->
Get_pointer_global_data
()));
PTransFace
=
PSW
+
(
PSE
-
PSW
)
*
eta
+
(
PNW
-
PSW
)
*
xi
+
(
PNE
-
PSE
-
PNW
+
PSW
)
*
xi
*
eta
+
PTransFace
;
//std::cout << "PTransFace ";PTransFace.Print();
D3vector
TEMP
=
PSW
+
(
PSE
-
PSW
)
*
eta
+
(
PNW
-
PSW
)
*
xi
+
(
PNE
-
PSE
-
PNW
+
PSW
)
*
xi
*
eta
;
PTransFace
=
TEMP
+
PTransFace
;
// + PTransFace;
return
PTransFace
;
}
...
...
@@ -849,7 +910,6 @@ D3vector Blockgrid::Give_coord_edge ( int id, int i ) const
if
(
bg_coord
!=
NULL
)
if
(
bg_coord
->
blockgrid_edge_coordinates_calculated
)
{
return
bg_coord
->
blockgrid_edge_coordinates
.
at
(
id
).
at
(
i
)
;
}
...
...
@@ -903,49 +963,85 @@ D3vector Blockgrid::Give_coord_edge ( int id, int i ) const
}
}
}
ug
->
Set_edge_to_hex_id
(
id
,
idHex
);
ug
->
Set_edge_to_quad_id
(
id
,
quadId
);
ug
->
Set_edge_to_quad_dir
(
id
,(
int
)
dirForQuad
);
}
else
{
idHex
=
ug
->
Give_edge_to_hex_id
(
id
);
quadId
=
ug
->
Give_edge_to_quad_id
(
id
);
dirForQuad
=
(
dir3D
)
ug
->
Give_edge_to_quad_dir
(
id
);
quad
=
ug
->
Give_quadrangle
(
quadId
);
}
int
Nx
=
Give_Nx_quadrangle
(
dirForQuad
);
int
Ny
=
Give_Ny_quadrangle
(
dirForQuad
);
int
Nx
=
Give_Nx_quadrangle
(
quadId
);
int
Ny
=
Give_Ny_quadrangle
(
quadId
);
int
nEdgeX
=
Give_Nx_hexahedron
(
idHex
);
int
nEdgeY
=
Give_Ny_hexahedron
(
idHex
);
int
nEdgeZ
=
Give_Nz_hexahedron
(
idHex
);
bool
invert
=
false
;
// std::cout << "dirForQuad " << dirForQuad << std::endl;
// std::cout << "Nx " << Nx << " Ny " << Ny << std::endl;
// if (!(Nx == Give_Nx_quadrangle ( dirForQuad ) && Ny == Give_Ny_quadrangle ( dirForQuad ) ))
// {
// invert = true;
// }
// if (dirForQuad == Edir3D || dirForQuad == Wdir3D)
// {
// if (!(nEdgeY == Give_Nx_quadrangle ( dirForQuad ) && nEdgeZ == Give_Ny_quadrangle ( dirForQuad ) ))
// {
// invert = true;
// }
// }
// else if (dirForQuad == Ndir3D || dirForQuad == Sdir3D)
// {
// if (!(nEdgeX == Give_Nx_quadrangle ( dirForQuad ) && nEdgeZ == Give_Ny_quadrangle ( dirForQuad ) ))
// {
// invert = true;
// }
// }
// else if (dirForQuad == Tdir3D || dirForQuad == Ddir3D)
// {
// if (!(nEdgeX == Give_Nx_quadrangle ( dirForQuad ) && nEdgeY == Give_Ny_quadrangle ( dirForQuad )))
// {
// invert = true;
// }
// }
// else
// {
// std::cout << "should not happen, dirForQuad only has 6 possibilities\n";
// }
if
(
Nx
==
nEdgeX
&&
Ny
==
nEdgeY
||
Nx
==
nEdgeX
&&
Ny
==
nEdgeZ
||
Nx
==
nEdgeY
&&
Ny
==
nEdgeZ
)
{
invert
=
false
;
}
else
{
invert
=
true
;
}
invert
=
false
;
if
(
id
==
quad
->
Give_id_edge
(
Wdir2D
))
//Wdir2D
{
Psi
=
Give_coord_quadrangle
(
quadId
,
0
,
i
);
Psi
=
Give_coord_quadrangle
(
quadId
,
0
,
i
,
invert
);
}
if
(
id
==
quad
->
Give_id_edge
(
Edir2D
))
//Edir2D
{
Psi
=
Give_coord_quadrangle
(
quadId
,
Nx
,
i
);
Psi
=
Give_coord_quadrangle
(
quadId
,
Nx
,
i
,
invert
);
}
if
(
id
==
quad
->
Give_id_edge
(
Sdir2D
))
//Sdir2D
{
Psi
=
Give_coord_quadrangle
(
quadId
,
i
,
0
);
Psi
=
Give_coord_quadrangle
(
quadId
,
i
,
0
,
invert
);
}
if
(
id
==
quad
->
Give_id_edge
(
Ndir2D
))
//Ndir2D
{
Psi
=
Give_coord_quadrangle
(
quadId
,
i
,
Ny
);
Psi
=
Give_coord_quadrangle
(
quadId
,
i
,
Ny
,
invert
);
}
return
Psi
;
...
...
@@ -1066,6 +1162,8 @@ void Blockgrid_coordinates::init_blockgrid_coordinates()
}
}
//test:: ??? Nx = 3????
blockgrid_edge_coordinates
.
resize
(
bg
->
Give_unstructured_grid
()
->
Give_number_edges
());
for
(
int
id_edge
=
0
;
id_edge
<
bg
->
Give_unstructured_grid
()
->
Give_number_edges
()
;
id_edge
++
)
{
...
...
program/source/grid/blockgrid.h
View file @
51060ea8
...
...
@@ -114,7 +114,7 @@ class Blockgrid {
void
Set_blockgrid_coordinates
(
Blockgrid_coordinates
*
bg_coord_
)
{
bg_coord
=
bg_coord_
;
};
D3vector
Give_coord_hexahedron
(
int
id
,
int
i
,
int
j
,
int
k
)
const
;
D3vector
Give_coord_quadrangle
(
int
id
,
int
i
,
int
j
)
const
;
D3vector
Give_coord_quadrangle
(
int
id
,
int
i
,
int
j
,
bool
invert
=
false
)
const
;
D3vector
Give_coord_edge
(
int
id
,
int
i
)
const
;
D3vector
Give_coord_point
(
int
id
)
const
;
...
...
program/source/grid/examples_ug_optics.cc
View file @
51060ea8
...
...
@@ -450,6 +450,7 @@ D3vector transform_left_lens_diag_NE_quad ( double t1, double t2, double* pointe
}
D3vector
transform_diag_inner_faces_NE_quad
(
double
t1
,
double
t2
,
double
*
pointer_global_data
)
{
return
D3vector
{
0
,
0
,
0
};
double
R_global_data
=
pointer_global_data
[
0
];
double
r_global_data
=
pointer_global_data
[
1
];
double
curvatureLeft_global_data
=
pointer_global_data
[
2
];
...
...
@@ -507,6 +508,7 @@ D3vector transform_diag_inner_faces_NE_quad( double t1, double t2, double* point
}
D3vector
transform_diag_inner_faces_NE_quad_cut
(
double
t1
,
double
t2
,
double
*
pointer_global_data
)
{
return
D3vector
{
0
,
0
,
0
};
double
R_global_data
=
pointer_global_data
[
0
];
double
r_global_data
=
pointer_global_data
[
1
];
double
curvatureLeft_global_data
=
pointer_global_data
[
2
];
...
...
@@ -562,6 +564,7 @@ D3vector transform_diag_inner_faces_NE_quad_cut( double t1, double t2, double* p
zLeft
=
0
;
}
double
z
=
zRight
*
(
t1
)
+
zLeft
*
(
1
-
t1
)
;
if
((
t1
==
0
&&
t2
==
0
)
||
(
t1
==
1
&&
t2
==
0
)
||
(
t1
==
0
&&
t2
==
1
)
||
(
t1
==
1
&&
t2
==
1
))
{
...
...
@@ -658,8 +661,12 @@ D3vector transform_right_lens_diag_NE_quad ( double t1, double t2, double* point
radiusSquared
)
+
sign
*
(
-
curvatureRight_global_data
+
(
(
1
-
t
)
*
(
thickness_global_data
-
z_right_inner_global_data
)
+
t
*
(
thickness_global_data
-
z_right_outer_global_data
)))));
//std::cout << "z inner " << z << std::endl;
if
(
std
::
isnan
(
x
)
||
std
::
isnan
(
y
)
||
std
::
isnan
(
z
))
{
z
=
0
;}
// std::cout << "transform_right_lens_diag_NE_quad ";
// D3vector ( x,y,z).Print();
// std::cout << std::endl;
return
D3vector
(
x
,
y
,
z
);
}
...
...
@@ -1060,13 +1067,15 @@ D3vector transform_left_lens_diag_NE_quad_cut ( double t1, double t2, double* po
x
=
x
*
t2
;
double
y
=
R_global_data
*
(
cos
(
t1
*
0.5
*
M_PI
)
-
(
1
-
t1
))
;
y
=
y
*
t2
;
double
xT
=
x
;
double
yT
=
y
;
//added due to bended inner part :
double
xAdd
=
r_global_data
*
(
sin
(
t1
*
0.5
*
M_PI
)
-
t1
);
double
yAdd
=
r_global_data
*
(
cos
(
t1
*
0.5
*
M_PI
)
-
(
1
-
t1
))
;
x
+=
(
1
-
t2
)
*
xAdd
;
y
+=
(
1
-
t2
)
*
yAdd
;
double
actualX
=
0
+
r_global_data
*
t1
+
0
*
t2
+
(
R_global_data
-
r_global_data
)
*
t1
*
t2
;
double
actualY
=
r_global_data
-
r_global_data
*
t1
+
(
R_global_data
-
r_global_data
)
*
t2
-
(
R_global_data
-
r_global_data
)
*
t1
*
t2
;
...
...
@@ -1079,12 +1088,14 @@ D3vector transform_left_lens_diag_NE_quad_cut ( double t1, double t2, double* po
if
(
z_left_inner_global_data
==
z_left_outer_global_data
)
{
//std::cout << "set to zero again!\n";
z
=
0
;
}
if
(
std
::
isnan
(
z
))
{
z
=
0
;}
//return D3vector ( xT,yT,z);
return
D3vector
(
x
,
y
,
z
);
}
...
...
@@ -1121,6 +1132,8 @@ D3vector transform_right_lens_diag_NE_quad_cut ( double t1, double t2, double* p
double
y
=
R_global_data
*
(
cos
(
t1
*
0.5
*
M_PI
)
-
(
1
-
t1
))
;
y
=
y
*
t2
;
double
xT
=
x
;
double
yT
=
y
;
//added due to bended inner part :
double
xAdd
=
r_global_data
*
(
sin
(
t1
*
0.5
*
M_PI
)
-
t1
);
double
yAdd
=
r_global_data
*
(
cos
(
t1
*
0.5
*
M_PI
)
-
(
1
-
t1
))
;
...
...
@@ -1133,11 +1146,18 @@ D3vector transform_right_lens_diag_NE_quad_cut ( double t1, double t2, double* p
double
radiusSquared
=
((
x
+
actualX
)
*
(
x
+
actualX
)
+
(
y
+
actualY
)
*
(
y
+
actualY
));
// std::cout << "(-curvatureRight_global_data +( (1-t)*(thickness_global_data-z_right_inner_global_data) + t * (thickness_global_data-z_right_outer_global_data))) " << (-curvatureRight_global_data +( (1-t)*(thickness_global_data-z_right_inner_global_data) + t * (thickness_global_data-z_right_outer_global_data))) << "\n";
// std::cout << "t1,2 :: " << t1 << " " << t2 << "\n";
//std::cout << "radius " << sqrt(radiusSquared) << std::endl;
double
z
=
offsetZ_global_data
+
sign
*
(
(
sqrt
(
pow
(
curvatureRight_global_data
,
2
)
-
radiusSquared
)
+
sign
*
(
-
curvatureRight_global_data
+
(
(
1
-
t
)
*
(
thickness_global_data
-
z_right_inner_global_data
)
+
t
*
(
thickness_global_data
-
z_right_outer_global_data
)))));
// z =radiusSquared;
//z *= 10;
//z = 1;
//std::cout << "z outer" << z << std::endl;
// double ADAD = offsetZ_global_data+sign*(-1*( sqrt(pow(curvatureLeft_global_data,2)-pow(r_global_data * (1-t) + R_global_data * t,2)) +sign *(-curvatureLeft_global_data +( (1-t)*z_left_inner_global_data + t * z_left_outer_global_data))));
if
(
z_right_inner_global_data
==
z_right_outer_global_data
)
{
...
...
@@ -1146,7 +1166,19 @@ D3vector transform_right_lens_diag_NE_quad_cut ( double t1, double t2, double* p
if
(
std
::
isnan
(
x
)
||
std
::
isnan
(
y
)
||
std
::
isnan
(
z
))
{
z
=
0
;}
// std::cout << "transform_right_lens_diag_NE_quad_cut ";
// D3vector ( x,y,z).Print();
// std::cout << std::endl;
// double actualZ = offsetZ_global_data+
// sign*( ( sqrt(pow(curvatureRight_global_data,2)-
// radiusSquared)
// + sign*(-curvatureRight_global_data))) ;
// return D3vector (actualX, actualY,actualZ );
//return D3vector ( xT,yT,z);
return
D3vector
(
x
,
y
,
z
);
//return D3vector ( (1-t2) * xAdd,(1-t2) * yAdd,z);
return
D3vector
(
0
,
0
,
z
);
}
...
...
@@ -2021,17 +2053,26 @@ Lens_Geometry_cutted_edges::Lens_Geometry_cutted_edges(double RadiusLeft, double
//1,16,3,17,1+8,16+4,3+8,17+4
Set_transformation_face
(
1
,
16
,
3
,
17
,
transform_left_lens_diag_NE_quad_cut
);
Set_transformation_face
(
1
,
16
,
9
,
20
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
1
,
3
,
9
,
11
,
transform_quadrangle_NULL
);
// inner face : no transform necessary
//Set_transformation_face(1,3,9,11,transform_quadrangle_NULL); // inner face : no transform necessary
Set_transformation_face
(
1
,
3
,
9
,
11
,
transform_outer_boundary_NE
);
// inner face :
Set_transformation_face
(
3
,
17
,
11
,
21
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
16
,
17
,
20
,
21
,
transform_outer_boundary_NE_cut
);
//
Set_transformation_face
(
9
,
20
,
11
,
21
,
transform_right_lens_diag_NE_quad_cut
);
//all set to zero!!!
// Set_transformation_face(1,16,3,17,transform_quadrangle_NULL);
// Set_transformation_face(1,16,9,20,transform_diag_inner_faces_NE_quad_cut);
// Set_transformation_face(1,3,9,11,transform_quadrangle_NULL); // inner face :
// Set_transformation_face(3,17,11,21,transform_diag_inner_faces_NE_quad_cut);
// Set_transformation_face(16,17,20,21,transform_outer_boundary_NE_cut); //
// Set_transformation_face(9,20,11,21,transform_quadrangle_NULL);
//north-west outer block: corner ids: 2 3 4 5 10 11 12 13
//north-west outer block: corner ids: 3 17 5 18 11 21 13 22
//3,17,5,18,3+8,17+4,5+8,18+4
Set_transformation_face
(
3
,
17
,
5
,
18
,
transform_left_lens_diag_NW_quad_cut
);
//transform_left_lens_diag_NW_quad
Set_transformation_face
(
3
,
17
,
11
,
21
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
3
,
5
,
11
,
13
,
transform_quadrangle_NULL
);
// inner face : no transform necessary
//Set_transformation_face(3,5,11,13,transform_quadrangle_NULL); // inner face : no transform necessary
Set_transformation_face
(
3
,
5
,
11
,
13
,
transform_outer_boundary_NW
);
// inner face : no transform necessary
Set_transformation_face
(
5
,
18
,
13
,
22
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
17
,
18
,
21
,
22
,
transform_outer_boundary_NW_cut
);
//transform_outer_boundary_NW
Set_transformation_face
(
11
,
21
,
13
,
22
,
transform_right_lens_diag_NW_quad_cut
);
//transform_right_lens_diag_NW_quad
...
...
@@ -2041,7 +2082,8 @@ Lens_Geometry_cutted_edges::Lens_Geometry_cutted_edges(double RadiusLeft, double
//5,18,7,19,5+8,18+4,7+8,19+4
Set_transformation_face
(
5
,
18
,
7
,
19
,
transform_left_lens_diag_SW_quad_cut
);
Set_transformation_face
(
5
,
18
,
13
,
22
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
5
,
7
,
13
,
15
,
transform_quadrangle_NULL
);
// inner face : no transform necessary
//Set_transformation_face(5,7,13,15,transform_quadrangle_NULL); // inner face : no transform necessary
Set_transformation_face
(
5
,
7
,
13
,
15
,
transform_outer_boundary_SW
);
// inner face : no transform necessary
Set_transformation_face
(
7
,
19
,
15
,
23
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
18
,
19
,
22
,
23
,
transform_outer_boundary_SW_cut
);
//
Set_transformation_face
(
13
,
22
,
15
,
23
,
transform_right_lens_diag_SW_quad_cut
);
...
...
@@ -2051,7 +2093,8 @@ Lens_Geometry_cutted_edges::Lens_Geometry_cutted_edges(double RadiusLeft, double
//7,19,1,16,7+8,19+4,1+8,16+4
Set_transformation_face
(
1
,
16
,
7
,
19
,
transform_left_lens_diag_SE_quad_cut
);
Set_transformation_face
(
1
,
16
,
9
,
20
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
1
,
7
,
9
,
15
,
transform_quadrangle_NULL
);
// inner face : no transform necessary
//Set_transformation_face(1,7,9,15,transform_quadrangle_NULL); // inner face : no transform necessary
Set_transformation_face
(
1
,
7
,
9
,
15
,
transform_outer_boundary_SE
);
// inner face : no transform necessary
Set_transformation_face
(
7
,
19
,
15
,
23
,
transform_diag_inner_faces_NE_quad_cut
);
Set_transformation_face
(
16
,
19
,
20
,
23
,
transform_outer_boundary_SE_cut
);
Set_transformation_face
(
9
,
20
,
15
,
23
,
transform_right_lens_diag_SE_quad_cut
);
...
...
@@ -2073,6 +2116,7 @@ Lens_Geometry_cutted_edges::Lens_Geometry_cutted_edges(double RadiusLeft, double
Set_transformation_face
(
1
,
3
,
9
,
11
,
transform_outer_boundary_NE
);
//
Set_transformation_face
(
8
,
9
,
10
,
11
,
transform_right_lens_diag_NE_quad
);
//north-west block: corner ids: 2 3 4 5 10 11 12 13
Set_transformation_face
(
2
,
3
,
4
,
5
,
transform_left_lens_diag_NW_quad
);
//transform_left_lens_diag_NW_quad
Set_transformation_face
(
2
,
3
,
10
,
11
,
transform_diag_inner_faces_NE_quad
);
...
...
program/source/grid/marker.cc
View file @
51060ea8
...
...
@@ -467,7 +467,7 @@ Boundary_Marker::Boundary_Marker ( Unstructured_grid* ug_ ) : Marker ( ug_ )
else
{
Set_marker
<
quadrangleEl
>
(
id
,
yes_mark
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
Set_marker
<
edgeEl
>
(
quad
->
Give_id_edge
(
(
dir2D
)
i
),
yes_mark
);
Set_marker
<
edgeEl
>
(
quad
->
Give_id_edge
(
(
dir2D
)
i
),
yes_mark
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
Set_marker
<
pointEl
>
(
quad
->
Give_id_corner
(
(
dir2D_sons
)
i
),
yes_mark
);
}
...
...
program/source/grid/ug.cc
View file @
51060ea8
...
...
@@ -229,7 +229,11 @@ void Unstructured_grid::Set_hexahedron(int id,
// Anwender muss sehr schlau sein beim Anwenden dieser
// Funktion, da sonst Orientierung nicht stimmt.
// std::cout <<
// i_WSD << " " << i_ESD
// << " " << i_WND << " " << i_END
// << " " << i_WST << " " << i_EST
// << " " << i_WNT << " " << i_ENT << std::endl;
hexahedra
[
id
].
Set_id_corner
(
WSDdir3D
,
i_WSD
);
hexahedra
[
id
].
Set_id_corner
(
ESDdir3D
,
i_ESD
);
hexahedra
[
id
].
Set_id_corner
(
WNDdir3D
,
i_WND
);
...
...
@@ -974,10 +978,11 @@ void Unstructured_grid::construction_done() {
if
(
transformFromQuadrangle
)
{
edge_to_quad_id
.
resize
(
Give_number_edges
());
edge_to_quad_dir
.
resize
(
Give_number_edges
());
edge_to_hex_id
.
resize
(
Give_number_edges
());
for
(
int
iter
=
0
;
iter
<
edge_to_quad_id
.
size
();
iter
++
)
{
edge_to_quad_id
.
at
(
iter
)
=
-
1
;
edge_to_hex_id
.
at
(
iter
)
=
-
1
;
}}
}
...
...
program/source/grid/ug.h
View file @
51060ea8
...
...
@@ -190,11 +190,15 @@ class Unstructured_grid : public Partitioning {
bool
Give_transform_From_Quadrangle
()
{
return
transformFromQuadrangle
;}
// bool Adjacent(int num_hex, int num_edge);
void
Set_edge_to_quad_id
(
int
index
,
int
value
){
if
(
index
<
Give_number_edges
()){
edge_to_quad_id
.
at
(
index
)
=
value
;
}
};
int
Give_edge_to_quad_id
(
int
index
){
if
(
index
<
Give_number_edges
()){
return
edge_to_quad_id
.
at
(
index
);
}
};
void
Set_edge_to_quad_id
(
int
index
,
int
value
){
if
(
index
<
Give_number_edges
()){
edge_to_quad_id
.
at
(
index
)
=
value
;
}
}
int
Give_edge_to_quad_id
(
int
index
){
if
(
index
<
Give_number_edges
()){
return
edge_to_quad_id
.
at
(
index
);
}
}
void
Set_edge_to_hex_id
(
int
index
,
int
value
){
if
(
index
<
Give_number_edges
()){
edge_to_hex_id
.
at
(
index
)
=
value
;
}
}
int
Give_edge_to_hex_id
(
int
index
){
if
(
index
<
Give_number_edges
()){
return
edge_to_hex_id
.
at
(
index
);
}
}
void
Set_edge_to_quad_dir
(
int
index
,
int
value
){
if
(
index
<
Give_number_edges
()){
edge_to_quad_dir
.
at
(
index
)
=
value
;
}
}
int
Give_edge_to_quad_dir
(
int
index
){
if
(
index
<
Give_number_edges
()){
return
edge_to_quad_dir
.
at
(
index
);
}
}
void
Set_edge_to_quad_dir
(
int
index
,
int
value
){
if
(
index
<
Give_number_edges
()){
edge_to_quad_dir
.
at
(
index
)
=
value
;
}
};
int
Give_edge_to_quad_dir
(
int
index
){
if
(
index
<
Give_number_edges
()){
return
edge_to_quad_dir
.
at
(
index
);
}
};
Hexahedron_el
*
Give_hexahedron
(
int
i
)
{
return
&
(
hexahedra
[
i
]);
}
Quadrangle_el
*
Give_quadrangle
(
int
i
)
{
return
&
(
quadrangles
[
i
]);
}
...
...
@@ -314,6 +318,7 @@ class Unstructured_grid : public Partitioning {
bool
periodic
;
// is num_poi == num_poi_plus_periodic
//* Necessary for getting edge transfrom from quad transform. Stores edge id and the direction, such that the correct edge from the quad is used.
std
::
vector
<
int
>
edge_to_quad_id
;
std
::
vector
<
double
>
edge_to_hex_id
;
std
::
vector
<
int
>
edge_to_quad_dir
;
Topf
<
2
,
sorted_pair
>
topf_edges
;
// spaeter löschen?
...
...
program/source/interpol/interpol.cc
View file @
51060ea8
This diff is collapsed.
Click to expand it.
program/source/interpol/interpol.h
View file @
51060ea8
...
...
@@ -66,9 +66,9 @@ class Interpolate_on_structured_grid {
**/
Interpolate_on_structured_grid
(
int
nx_
,
int
ny_
,
int
nz_
,
D3vector
pWSD
,
D3vector
pENT
,
Blockgrid
&
blockgrid_
,
Interpolate_direct
*
id
=
NULL
);
Blockgrid
&
blockgrid_
,
bool
trilinearInterpolationFlag_
=
false
);
Interpolate_on_structured_grid
(
int
nx_
,
int
ny_
,
int
nz_
,
Blockgrid
&
blockgrid_
,
Interpolate_direct
*
id
=
NULL
);
Blockgrid
&
blockgrid_
,
bool
trilinearInterpolationFlag_
=
false
);
~
Interpolate_on_structured_grid
();
/**
...
...
@@ -90,6 +90,9 @@ class Interpolate_on_structured_grid {
double
getHy
(){
return
hy
;}
double
getHz
(){
return
hz
;}
public:
D3vector
trilinarInterpolation
(
D3vector
X
,
int
id_Hex
,
int
i
,
int
j
,
int
k
);
bool
trilinearInterpolationFlag
{
true
};
int
nx
,
ny
,
nz
;
D3vector
pENT
,
pWSD
;
private:
...
...
@@ -228,7 +231,7 @@ public:
**/
Interpolate_on_block_grid_from_pointinterpolator
(
PointInterpolator
*
interp
,
Blockgrid
*
blockgrid_to_
);