113 :
G4VTwistSurface(a), fTheta(0.), fPhi(0.), fDy1(0.), fDx1(0.), fDx2(0.),
114 fDy2(0.), fDx3(0.), fDx4(0.), fDz(0.), fAlph(0.), fTAlph(0.), fPhiTwist(0.),
115 fAngleSide(0.), fDx4plus2(0.), fDx4minus2(0.), fDx3plus1(0.), fDx3minus1(0.),
116 fDy2plus1(0.), fDy2minus1(0.), fa1md1(0.), fa2md2(0.), fdeltaX(0.),
245 std::vector<Intersection> xbuf ;
260 if ( std::fabs(p.
z()) <= L )
267 *(v.
y()*std::cos(phi) - v.
x()*std::sin(phi))))
277 xbuf.push_back(xbuftmp) ;
286 areacode[0], isvalid[0],
287 0, validate, &gp, &gv);
326 + 4*
fDy1*(9*phixz - 9*fTAlph*phiyz - 56*
fDz*fTAlph*v.
x()
334 G4cout <<
"coef = " << c[0] <<
" "
352 G4cout <<
"Solution " << i <<
" : " << srd[i] <<
G4endl ;
354 phi = std::fmod(srd[i] , pihalf) ;
366 xbuf.push_back(xbuftmp) ;
369 G4cout <<
"solution " << i <<
" = " << phi <<
" , " << u <<
G4endl ;
384 for (
size_t k = 0 ;
k<xbuf.size() ; ++
k )
387 G4cout <<
"Solution " <<
k <<
" : "
388 <<
"reconstructed phiR = " << xbuf[
k].phi
389 <<
", uR = " << xbuf[
k].u <<
G4endl ;
395 IsConverged =
false ;
397 for (
G4int i = 1 ; i<maxint ; ++i )
400 surfacenormal =
NormAng(phi,u) ;
403 deltaX = ( tmpxx - xxonsurface ).mag() ;
404 theta = std::fabs(std::acos(v*surfacenormal) - pihalf) ;
416 G4cout <<
"Step i = " << i <<
", distance = " << tmpdist
417 <<
", " << deltaX <<
G4endl ;
425 G4cout <<
"approximated phi = " << phi <<
", u = " << u <<
G4endl ;
428 if ( deltaX <= factor*ctol ) { IsConverged =
true ; break ; }
432 if ( std::fabs(tmpdist)<ctol ) { tmpdist = 0 ; }
435 G4cout <<
"refined solution " << phi <<
" , " << u <<
G4endl ;
449 if (tmpdist >= 0) tmpisvalid =
true;
457 if (tmpdist >= 0) { tmpisvalid =
true; }
462 G4Exception(
"G4TwistTrapAlphaSide::DistanceToSurface()",
464 "Feature NOT implemented !");
476 xbuf[
k].distance = tmpdist ;
477 xbuf[
k].areacode = tmpareacode ;
478 xbuf[
k].isvalid = tmpisvalid ;
485 G4cout << G4endl <<
"list xbuf after sorting : " <<
G4endl ;
497 G4int nxxtmp = xbuf.size() ;
499 if ( nxxtmp<2 || IsParallel )
515 xbuf.push_back(xbuftmp) ;
530 xbuf.push_back(xbuftmp) ;
532 for (
size_t k = nxxtmp ;
k<xbuf.size() ; ++
k )
536 G4cout <<
"Solution " <<
k <<
" : "
537 <<
"reconstructed phiR = " << xbuf[
k].phi
538 <<
", uR = " << xbuf[
k].u <<
G4endl ;
544 IsConverged =
false ;
546 for (
G4int i = 1 ; i<maxint ; ++i )
549 surfacenormal =
NormAng(phi,u) ;
551 deltaX = ( tmpxx - xxonsurface ).mag();
552 theta = std::fabs(std::acos(v*surfacenormal) - pihalf);
563 G4cout <<
"Step i = " << i <<
", distance = " << tmpdist
564 <<
", " << deltaX << G4endl
565 <<
"X = " << tmpxx <<
G4endl ;
572 G4cout <<
"approximated phi = " << phi <<
", u = " << u <<
G4endl ;
575 if ( deltaX <= factor*ctol ) { IsConverged =
true ; break ; }
579 if ( std::fabs(tmpdist)<ctol ) { tmpdist = 0; }
582 G4cout <<
"refined solution " << phi <<
" , " << u <<
G4endl ;
596 if (tmpdist >= 0) { tmpisvalid =
true; }
604 if (tmpdist >= 0) { tmpisvalid =
true; }
609 G4Exception(
"G4TwistedBoxSide::DistanceToSurface()",
611 "Feature NOT implemented !");
623 xbuf[
k].distance = tmpdist ;
624 xbuf[
k].areacode = tmpareacode ;
625 xbuf[
k].isvalid = tmpisvalid ;
638 G4cout << G4endl <<
"list xbuf after sorting : " <<
G4endl ;
644 for (
size_t i = 0 ; i<xbuf.size() ; ++i )
646 distance[i] = xbuf[i].distance;
648 areacode[i] = xbuf[i].areacode ;
649 isvalid[i] = xbuf[i].isvalid ;
652 isvalid[i], nxx, validate, &gp, &gv);
654 G4cout <<
"element Nr. " << i
655 <<
", local Intersection = " << xbuf[i].xx
656 <<
", distance = " << xbuf[i].distance
657 <<
", u = " << xbuf[i].u
658 <<
", phi = " << xbuf[i].phi
659 <<
", isvalid = " << xbuf[i].isvalid
667 G4cout << nxx <<
" possible physical solutions found" <<
G4endl ;
670 G4cout <<
"global intersection Point found: " << gxx[
k] <<
G4endl ;
726 for (
G4int i = 1 ; i<20 ; ++i )
729 surfacenormal =
NormAng(phiR,uR) ;
731 deltaX = ( xx - xxonsurface ).mag() ;
734 G4cout <<
"i = " << i <<
", distance = " << distance[0]
735 <<
", " << deltaX <<
G4endl
736 <<
"X = " << xx <<
G4endl ;
743 if ( deltaX <= ctol ) { break ; }
750 if ( phiR > halfphi ) { phiR = halfphi ; }
751 if ( phiR < -halfphi ) { phiR = -halfphi ; }
752 if ( uR > uMax ) { uR = uMax ; }
753 if ( uR < -uMax ) { uR = -uMax ; }
756 distance[0] = ( p -
xx ).mag() ;
757 if ( distance[0] <= ctol ) { distance[0] = 0 ; }
762 G4cout <<
"refined solution " << phiR <<
" , " << uR <<
" , " <<
G4endl ;
771 G4cout <<
"intersection Point found: " << gxx[0] <<
G4endl ;
801 G4cout <<
"GetAreaCode: yprime = " << yprime <<
G4endl ;
802 G4cout <<
"Intervall is " << fYAxisMin <<
" to " << fYAxisMax <<
G4endl ;
817 if (yprime < fYAxisMin + ctol)
820 if (yprime <= fYAxisMin - ctol) { isoutside =
true; }
823 else if (yprime > fYAxisMax - ctol)
826 if (yprime >= fYAxisMax + ctol) { isoutside =
true; }
840 if (xx.
z() <=
fAxisMin[zaxis] - ctol) { isoutside =
true; }
842 else if (xx.
z() >
fAxisMax[zaxis] - ctol)
850 if (xx.
z() >=
fAxisMax[zaxis] + ctol) { isoutside =
true; }
859 areacode = tmpareacode;
871 if (yprime < fYAxisMin )
875 else if (yprime > fYAxisMax)
910 "Feature NOT implemented !");
980 "Method NOT implemented !");
998 direction = direction.
unit();
1004 direction = direction.
unit();
1010 direction = direction.
unit();
1016 direction = direction.
unit();
1025 "Feature NOT implemented !");
1048 -
fPhiTwist*(fTAlph*p.
x() + p.
y())))*std::cos(phi)
1053 /
fDy1 - 4*std::sin(phi)))
1054 *(std::fabs(((
fa1md1 + 4*
fDy1*fTAlph)*std::cos(phi))
1055 /
fDy1 - 4*std::sin(phi)))
1056 + (std::fabs(4*std::cos(phi)
1058 * (std::fabs(4*std::cos(phi)
1118 for (
G4int i = 0 ; i<
n ; ++i )
1120 z = -
fDz+i*(2.*
fDz)/(n-1) ;
1124 for (
G4int j = 0 ; j<
k ; ++j )
1126 nnode =
GetNode(i,j,k,n,iside) ;
1127 u = -b/2 +j*b/(k-1) ;
1130 xyz[nnode][0] = p.
x() ;
1131 xyz[nnode][1] = p.
y() ;
1132 xyz[nnode][2] = p.
z() ;
1134 if ( i<n-1 && j<k-1 )
1136 nface =
GetFace(i,j,k,n,iside) ;
1138 * (
GetNode(i ,j ,k,n,iside)+1) ;
1140 * (
GetNode(i ,j+1,k,n,iside)+1) ;
1142 * (
GetNode(i+1,j+1,k,n,iside)+1) ;
1144 * (
GetNode(i+1,j ,k,n,iside)+1) ;