@@ -5490,7 +5490,7 @@ REAL(EB) FUNCTION CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RAD,X1,X2,Y1,Y2)
54905490
54915491! No overlap
54925492
5493- IF ((X2 <= X0- RAD) .OR. (X1 >= X0+ RAD) .OR. (Y2 <= Y0- RAD) .OR. (Y1 >= Y0+ RAD)) THEN
5493+ IF ((X2 <= X0- RAD) .OR. (X1 >= X0+ RAD) .OR. (Y2 <= Y0- RAD) .OR. (Y1 >= Y0+ RAD) .OR. RAD < TWO_EPSILON_EB ) THEN
54945494 CIRCLE_CELL_INTERSECTION_AREA = 0._EB
54955495 RETURN
54965496ENDIF
@@ -5527,7 +5527,7 @@ REAL(EB) FUNCTION CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RAD,X1,X2,Y1,Y2)
55275527 RETURN
55285528 ENDIF
55295529 IF (Y1 >= Y0 .AND. Y1 < Y0+ RAD) THEN
5530- THETA = 2._EB * ACOS ((X1 - X0 )/ RAD)
5530+ THETA = 2._EB * ACOS ((Y1 - Y0 )/ RAD)
55315531 CIRCLE_CELL_INTERSECTION_AREA = 0.5_EB * R2* (THETA- SIN (THETA))
55325532 RETURN
55335533 ENDIF
@@ -5646,9 +5646,10 @@ REAL(EB) FUNCTION CONE_MESH_INTERSECTION_VOLUME(NM,X0,Y0,Z0,RR0,RRI,HH0,G_FACTOR
56465646
56475647INTEGER , INTENT (IN ) :: NM,G_FACTOR
56485648REAL (EB), INTENT (IN ) :: X0,Y0,Z0,RR0,RRI,HH0
5649- INTEGER :: I,J,K,NX,NY,NZ
5650- REAL (EB) :: XX,YY,ZZ,R2,X_MIN,X_MAX,Y_MIN,Y_MAX,Z_MIN,Z_MAX,DX,DY,DZ,SHORT_DIMENSION,&
5651- OUTER_BASE_AREA,INNER_BASE_AREA,HH_IN,RR0_BASE,RRI_BASE,RR0_TOP,RRI_TOP
5649+ INTEGER :: K,NZ
5650+ REAL (EB) :: X_MIN,X_MAX,Y_MIN,Y_MAX,Z_MIN,Z_MAX,DZ,Z1,Z2,&
5651+ OUTER_BASE_AREA,INNER_BASE_AREA,OUTER_TOP_AREA,INNER_TOP_AREA,HH_IN,&
5652+ RR0_BASE,RRI_BASE,RR0_TOP,RRI_TOP
56525653TYPE (MESH_TYPE), POINTER :: M
56535654
56545655CONE_MESH_INTERSECTION_VOLUME = 0._EB
@@ -5691,29 +5692,24 @@ REAL(EB) FUNCTION CONE_MESH_INTERSECTION_VOLUME(NM,X0,Y0,Z0,RR0,RRI,HH0,G_FACTOR
56915692 RETURN
56925693ENDIF
56935694
5694- ! Case 4: partial hollow cone intersection volume (numerical integration)
5695- SHORT_DIMENSION = MIN (X_MAX- X_MIN,Y_MAX- Y_MIN,Z_MAX- Z_MIN)
5696- ! Limit resolution length scale
5697- SHORT_DIMENSION = MAX (SHORT_DIMENSION, 0.1_EB * MIN (M% DXMIN,M% DYMIN,M% DZMIN))
5698- NX = CEILING (50 * (X_MAX- X_MIN)/ SHORT_DIMENSION)
5699- NY = CEILING (50 * (Y_MAX- Y_MIN)/ SHORT_DIMENSION)
5700- NZ = CEILING (50 * (Z_MAX- Z_MIN)/ SHORT_DIMENSION)
5701- DX = (X_MAX- X_MIN)/ REAL (NX,EB)
5702- DY = (Y_MAX- Y_MIN)/ REAL (NY,EB)
5703- DZ = (Z_MAX- Z_MIN)/ REAL (NZ,EB)
5695+ ! Case 4: partial hollow cone intersection volume (trapezoidal integration)
5696+ NZ = 100
5697+ DZ = HH_IN/ REAL (NZ,EB)
57045698
57055699DO K= 1 ,NZ
5706- ZZ = Z_MIN + (K-0.5_EB )* DZ
5707- IF (ZZ< Z0 .OR. ZZ> Z0+ HH0) CYCLE
5708- DO J= 1 ,NY
5709- YY = Y_MIN + (J-0.5_EB )* DY
5710- DO I= 1 ,NX
5711- XX = X_MIN + (I-0.5_EB )* DX
5712- R2 = (XX- X0)** 2 + (YY- Y0)** 2
5713- IF ((R2<(RR0* (1._EB - G_FACTOR* (ZZ- Z0)/ HH0))** 2 ) .AND. (R2>(RRI* (1._EB - G_FACTOR* (ZZ- Z0)/ HH0))** 2 )) &
5714- CONE_MESH_INTERSECTION_VOLUME = CONE_MESH_INTERSECTION_VOLUME + DX* DY* DZ
5715- ENDDO
5716- ENDDO
5700+ Z1 = Z_MIN + (K-1 )* DZ
5701+ Z2 = Z1 + DZ
5702+ RR0_BASE = RR0* (1 - (Z1- Z0)/ HH0)
5703+ RRI_BASE = RRI* (1 - (Z1- Z0)/ HH0)
5704+ RR0_TOP = RR0* (1 - (Z2- Z0)/ HH0)
5705+ RRI_TOP = RRI* (1 - (Z2- Z0)/ HH0)
5706+ OUTER_BASE_AREA = CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RR0_BASE,M% XS,M% XF,M% YS,M% YF)
5707+ INNER_BASE_AREA = CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RRI_BASE,M% XS,M% XF,M% YS,M% YF)
5708+ OUTER_TOP_AREA = CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RR0_TOP,M% XS,M% XF,M% YS,M% YF)
5709+ INNER_TOP_AREA = CIRCLE_CELL_INTERSECTION_AREA(X0,Y0,RRI_TOP,M% XS,M% XF,M% YS,M% YF)
5710+
5711+ CONE_MESH_INTERSECTION_VOLUME = CONE_MESH_INTERSECTION_VOLUME + &
5712+ DZ* 0.5_EB * (OUTER_BASE_AREA+ OUTER_TOP_AREA- INNER_BASE_AREA- INNER_TOP_AREA)
57175713ENDDO
57185714
57195715END FUNCTION CONE_MESH_INTERSECTION_VOLUME
0 commit comments