| 70 |
{ |
{ |
| 71 |
const SymMat<Double> dbl_S_red( chToDouble(S_red.first) ); |
const SymMat<Double> dbl_S_red( chToDouble(S_red.first) ); |
| 72 |
|
|
| 73 |
if( brat.enumPointGroup() == Ci && brat.enumBravaisLattice() == Prim ) |
if( brat.enumLaueGroup() == Ci && brat.enumBravaisLattice() == Prim ) |
| 74 |
{ |
{ |
| 75 |
assert( dbl_S_red(2,2)*0.9999 < dbl_S_red(1,1) && dbl_S_red(1,1)*0.9999 < dbl_S_red(0,0) |
assert( dbl_S_red(2,2)*0.9999 < dbl_S_red(1,1) && dbl_S_red(1,1)*0.9999 < dbl_S_red(0,0) |
| 76 |
&& fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(1,1) |
&& fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(1,1) |
| 77 |
&& fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) |
&& fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) |
| 78 |
&& fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(2,2) ); |
&& fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(2,2) ); |
| 79 |
} |
} |
| 80 |
else if( brat.enumPointGroup() == C2h_Y && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == C2h_Y && brat.enumBravaisLattice() == Prim ) |
| 81 |
{ |
{ |
| 82 |
assert( 0.0 <= dbl_S_red(0,2) && dbl_S_red(2,2)*0.9999 < dbl_S_red(0,0) |
assert( 0.0 <= dbl_S_red(0,2) && dbl_S_red(2,2)*0.9999 < dbl_S_red(0,0) |
| 83 |
&& fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) && fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(0,0) ); |
&& fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) && fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(0,0) ); |
| 84 |
} |
} |
| 85 |
else if( brat.enumPointGroup() == C2h_Z && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == C2h_Z && brat.enumBravaisLattice() == Prim ) |
| 86 |
{ |
{ |
| 87 |
assert( 0.0 <= dbl_S_red(0,1) && dbl_S_red(1,1)*0.9999 < dbl_S_red(0,0) |
assert( 0.0 <= dbl_S_red(0,1) && dbl_S_red(1,1)*0.9999 < dbl_S_red(0,0) |
| 88 |
&& fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(0,0) && fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(1,1) ); |
&& fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(0,0) && fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(1,1) ); |
| 89 |
} |
} |
| 90 |
else if( brat.enumPointGroup() == C2h_X && brat.enumBravaisLattice() == Prim ) |
else if( brat.enumLaueGroup() == C2h_X && brat.enumBravaisLattice() == Prim ) |
| 91 |
{ |
{ |
| 92 |
assert( 0.0 <= dbl_S_red(1,2) && dbl_S_red(2,2)*0.9999 < dbl_S_red(1,1) |
assert( 0.0 <= dbl_S_red(1,2) && dbl_S_red(2,2)*0.9999 < dbl_S_red(1,1) |
| 93 |
&& fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(1,1) && fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(2,2) ); |
&& fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(1,1) && fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(2,2) ); |
| 94 |
} |
} |
| 95 |
else if( brat.enumPointGroup() == C2h_Y && brat.enumBravaisLattice() == BaseZ ) |
else if( brat.enumLaueGroup() == C2h_Y && brat.enumBravaisLattice() == BaseZ ) |
| 96 |
{ |
{ |
| 97 |
assert( 0.0 <= dbl_S_red(0,2) && fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) && fabs( dbl_S_red(0,2) ) * 0.9999 < dbl_S_red(0,0) ); |
assert( 0.0 <= dbl_S_red(0,2) && fabs( dbl_S_red(0,2) ) * 1.9999 < dbl_S_red(2,2) && fabs( dbl_S_red(0,2) ) * 0.9999 < dbl_S_red(0,0) ); |
| 98 |
} |
} |
| 99 |
else if( brat.enumPointGroup() == C2h_Z && brat.enumBravaisLattice() == BaseX ) |
else if( brat.enumLaueGroup() == C2h_Z && brat.enumBravaisLattice() == BaseX ) |
| 100 |
{ |
{ |
| 101 |
assert( 0.0 <= dbl_S_red(0,1) && fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(0,0) && fabs( dbl_S_red(0,1) ) * 0.9999 < dbl_S_red(1,1) ); |
assert( 0.0 <= dbl_S_red(0,1) && fabs( dbl_S_red(0,1) ) * 1.9999 < dbl_S_red(0,0) && fabs( dbl_S_red(0,1) ) * 0.9999 < dbl_S_red(1,1) ); |
| 102 |
} |
} |
| 103 |
else if( brat.enumPointGroup() == C2h_X && brat.enumBravaisLattice() == BaseY ) |
else if( brat.enumLaueGroup() == C2h_X && brat.enumBravaisLattice() == BaseY ) |
| 104 |
{ |
{ |
| 105 |
assert( 0.0 <= dbl_S_red(1,2) && fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(1,1) && fabs( dbl_S_red(1,2) ) * 0.9999 < dbl_S_red(2,2) ); |
assert( 0.0 <= dbl_S_red(1,2) && fabs( dbl_S_red(1,2) ) * 1.9999 < dbl_S_red(1,1) && fabs( dbl_S_red(1,2) ) * 0.9999 < dbl_S_red(2,2) ); |
| 106 |
} |
} |
| 107 |
else if( brat.enumPointGroup() == D2h |
else if( brat.enumLaueGroup() == D2h |
| 108 |
&& brat.enumBravaisLattice() != BaseX |
&& brat.enumBravaisLattice() != BaseX |
| 109 |
&& brat.enumBravaisLattice() != BaseY |
&& brat.enumBravaisLattice() != BaseY |
| 110 |
&& brat.enumBravaisLattice() != BaseZ ) |
&& brat.enumBravaisLattice() != BaseZ ) |
| 121 |
&& S_super(2,3) <= VCData() ); |
&& S_super(2,3) <= VCData() ); |
| 122 |
|
|
| 123 |
SymMat<VCData> S_red_cp = S_red.first; |
SymMat<VCData> S_red_cp = S_red.first; |
| 124 |
cal_average_crystal_system(brat.enumPointGroup(), S_red_cp); |
cal_average_crystal_system(brat.enumLaueGroup(), S_red_cp); |
| 125 |
assert( S_red.first(0,0).putVecCoef() == S_red_cp(0,0).putVecCoef() ); |
assert( S_red.first(0,0).putVecCoef() == S_red_cp(0,0).putVecCoef() ); |
| 126 |
assert( S_red.first(1,1).putVecCoef() == S_red_cp(1,1).putVecCoef() ); |
assert( S_red.first(1,1).putVecCoef() == S_red_cp(1,1).putVecCoef() ); |
| 127 |
assert( S_red.first(2,2).putVecCoef() == S_red_cp(2,2).putVecCoef() ); |
assert( S_red.first(2,2).putVecCoef() == S_red_cp(2,2).putVecCoef() ); |
| 333 |
|
|
| 334 |
SymMat43_VCData ans2(SymMat<VCData>(3), NRMat<Int4>(3,3)); |
SymMat43_VCData ans2(SymMat<VCData>(3), NRMat<Int4>(3,3)); |
| 335 |
|
|
| 336 |
if( brat.enumPointGroup() == C2h_X ) |
if( brat.enumLaueGroup() == C2h_X ) |
| 337 |
{ |
{ |
| 338 |
ans2.first = transform_sym_matrix(put_matrix_YZX(), m_S_red.first); |
ans2.first = transform_sym_matrix(put_matrix_YZX(), m_S_red.first); |
| 339 |
ans2.second = mprod( m_S_red.second, put_matrix_ZXY() ); |
ans2.second = mprod( m_S_red.second, put_matrix_ZXY() ); |
| 340 |
} |
} |
| 341 |
else if( brat.enumPointGroup() == C2h_Y ) |
else if( brat.enumLaueGroup() == C2h_Y ) |
| 342 |
{ |
{ |
| 343 |
ans2.first = transform_sym_matrix(put_matrix_ZXY(), m_S_red.first); |
ans2.first = transform_sym_matrix(put_matrix_ZXY(), m_S_red.first); |
| 344 |
ans2.second = mprod( m_S_red.second, put_matrix_YZX() ); |
ans2.second = mprod( m_S_red.second, put_matrix_YZX() ); |
| 345 |
} |
} |
| 346 |
else // if( brat.enumPointGroup() == C2h_Z ) |
else // if( brat.enumLaueGroup() == C2h_Z ) |
| 347 |
{ |
{ |
| 348 |
ans2.first = transform_sym_matrix(put_matrix_XYZ(), m_S_red.first); |
ans2.first = transform_sym_matrix(put_matrix_XYZ(), m_S_red.first); |
| 349 |
ans2.second = m_S_red.second; |
ans2.second = m_S_red.second; |
| 373 |
{ |
{ |
| 374 |
ans.clear(); |
ans.clear(); |
| 375 |
const BravaisType& brat = m_latfom.putBravaisType(); |
const BravaisType& brat = m_latfom.putBravaisType(); |
| 376 |
if( epg_new == Ci || epg_new == brat.enumPointGroup() ) |
if( epg_new == Ci || epg_new == brat.enumLaueGroup() ) |
| 377 |
{ |
{ |
| 378 |
ans.insert( m_S_red ); |
ans.insert( m_S_red ); |
| 379 |
return true; |
return true; |
| 381 |
|
|
| 382 |
if( epg_new == C2h_X || epg_new == C2h_Y || epg_new == C2h_Z ) |
if( epg_new == C2h_X || epg_new == C2h_Y || epg_new == C2h_Z ) |
| 383 |
{ |
{ |
| 384 |
assert( brat.enumPointGroup() == Ci ); |
assert( brat.enumLaueGroup() == Ci ); |
| 385 |
assert( brat.enumBravaisLattice() == Prim ); |
assert( brat.enumBravaisLattice() == Prim ); |
| 386 |
|
|
| 387 |
return checkIfLatticeIsMonoclinic(epg_new, cv2, ans); |
return checkIfLatticeIsMonoclinic(epg_new, cv2, ans); |
| 388 |
} |
} |
| 389 |
else if( epg_new == D4h_Z ) |
else if( epg_new == D4h_Z ) |
| 390 |
{ |
{ |
| 391 |
assert( brat.enumPointGroup() == D2h ); |
assert( brat.enumLaueGroup() == D2h ); |
| 392 |
assert( brat.enumBravaisLattice() == Prim |
assert( brat.enumBravaisLattice() == Prim |
| 393 |
|| brat.enumBravaisLattice() == Inner ); |
|| brat.enumBravaisLattice() == Inner ); |
| 394 |
|
|
| 396 |
} |
} |
| 397 |
else if( epg_new == D2h ) |
else if( epg_new == D2h ) |
| 398 |
{ |
{ |
| 399 |
assert( brat.enumPointGroup() != Ci || brat.enumBravaisLattice() == Prim ); |
assert( brat.enumLaueGroup() != Ci || brat.enumBravaisLattice() == Prim ); |
| 400 |
assert( brat.enumPointGroup() != C2h_Z || brat.enumBravaisLattice() == BaseX ); |
assert( brat.enumLaueGroup() != C2h_Z || brat.enumBravaisLattice() == BaseX ); |
| 401 |
assert( brat.enumPointGroup() != C2h_X || brat.enumBravaisLattice() == BaseY ); |
assert( brat.enumLaueGroup() != C2h_X || brat.enumBravaisLattice() == BaseY ); |
| 402 |
assert( brat.enumPointGroup() != C2h_Y || brat.enumBravaisLattice() == BaseZ ); |
assert( brat.enumLaueGroup() != C2h_Y || brat.enumBravaisLattice() == BaseZ ); |
| 403 |
assert( brat.enumBravaisLattice() != Rhom_hex ); |
assert( brat.enumBravaisLattice() != Rhom_hex ); |
| 404 |
|
|
| 405 |
return checkIfLatticeIsOrthorhombic(cv2, ans); |
return checkIfLatticeIsOrthorhombic(cv2, ans); |
| 407 |
else if( epg_new == D6h ) |
else if( epg_new == D6h ) |
| 408 |
{ |
{ |
| 409 |
assert( brat.enumBravaisLattice() == Prim ); |
assert( brat.enumBravaisLattice() == Prim ); |
| 410 |
assert( brat.enumPointGroup() == C2h_X |
assert( brat.enumLaueGroup() == C2h_X |
| 411 |
|| brat.enumPointGroup() == C2h_Y |
|| brat.enumLaueGroup() == C2h_Y |
| 412 |
|| brat.enumPointGroup() == C2h_Z ); |
|| brat.enumLaueGroup() == C2h_Z ); |
| 413 |
return checkIfLatticeIsHexagonal(epg_new, cv2, ans); |
return checkIfLatticeIsHexagonal(epg_new, cv2, ans); |
| 414 |
} |
} |
| 415 |
else |
else |