55 INTEGER,
INTENT(IN) :: I,J
57 INTEGER,
INTENT(IN) :: iIJK
59 INTEGER,
INTENT(IN) :: iM
61 DOUBLE PRECISION,
INTENT(IN) :: CENTER_DIST
62 DOUBLE PRECISION :: DES_CONDUCTION
69 DOUBLE PRECISION MIN_RAD
71 DOUBLE PRECISION MAX_RAD
75 DOUBLE PRECISION Q_pfp
77 DOUBLE PRECISION RD_OUT
79 DOUBLE PRECISION RD_IN
81 DOUBLE PRECISION LENS_RAD
83 DOUBLE PRECISION DeltaTp
85 DOUBLE PRECISION lK_eff
87 DOUBLE PRECISION lRadius
89 DOUBLE PRECISION OLAP_Sim, OLAP_actual
91 DOUBLE PRECISION CENTER_DIST_CORR
93 DOUBLE PRECISION :: K_gas
95 DOUBLE PRECISION :: OLAP_1, OLAP_2
97 DOUBLE PRECISION :: RLENS_1, RLENS_2
99 DOUBLE PRECISION :: S_1, S_2
101 DOUBLE PRECISION :: H_1, H_2
103 DOUBLE PRECISION :: H
105 DOUBLE PRECISION :: RATIO
114 min_rad = min(des_radius(i), des_radius(j))
115 max_rad = max(des_radius(i), des_radius(j))
125 center_dist_corr = center_dist
126 IF(center_dist < (max_rad + min_rad))
THEN 128 olap_sim = max_rad + min_rad - center_dist
135 center_dist_corr = max_rad + min_rad - olap_actual
140 lradius =
radius(max_rad, min_rad)
144 q_pp = 2.0d0 * lk_eff * lradius * deltatp
154 lens_rad = max_rad * (1.0d0 +
flpc)
155 olap_actual = max_rad + min_rad - center_dist_corr
158 IF(olap_actual > (-max_rad*
flpc))
THEN 159 rd_out =
radius(lens_rad, min_rad)
161 ratio = olap_actual / max_rad
162 olap_1 = max_rad*max_rad*(ratio-0.5d0*ratio*ratio)/center_dist_corr
163 olap_2 = olap_actual - olap_1
166 s_1 = (max_rad*max_rad*(ratio-0.5d0*ratio*ratio)/&
170 rlens_1 = sqrt(rd_out*rd_out+(min_rad-olap_1)**2.0)
171 rlens_2 = sqrt(rd_out*rd_out+(max_rad-olap_2)**2.0)
180 IF (
units ==
'SI') k_gas = 418.3925d0*k_gas
185 h_1 = eval_h_pfp(rlens_1, s_1, olap_1,min_rad)*min_rad*k_gas
186 h_2 = eval_h_pfp(rlens_2, s_2, olap_2,max_rad)*max_rad*k_gas
190 h = h_1*h_2/(h_1+h_2)
201 des_conduction = q_pp + q_pfp
259 DOUBLE PRECISION FUNCTION radius(R1, R2)
264 DOUBLE PRECISION,
INTENT(IN) :: R1, R2
266 DOUBLE PRECISION BETA
268 DOUBLE PRECISION VALUE
271 VALUE = (r1**2 - r2**2 + center_dist_corr**2)/(2.0d0 * r1 * center_dist_corr
277 IF(
VALUE .GT. 1.0d0)
THEN 295 DOUBLE PRECISION FUNCTION k_eff(K1, K2)
300 DOUBLE PRECISION,
INTENT(IN) :: K1, K2
302 k_eff = 2.0d0 * (k1*k2)/(k1 + k2)
324 DOUBLE PRECISION FUNCTION f(R)
329 DOUBLE PRECISION,
INTENT(IN) :: R
331 f = (2.0d0*
pi*r)/max((center_dist_corr - sqrt(max_rad**2-r**2) - &
353 DOUBLE PRECISION,
INTENT(IN) :: A, B
355 INTEGER,
PARAMETER :: Kmax = 25
359 DOUBLE PRECISION :: V(kmax,6)
361 DOUBLE PRECISION :: H
363 DOUBLE PRECISION :: lS, rS
366 DOUBLE PRECISION :: rF, lF
368 DOUBLE PRECISION :: Err_BND
370 DOUBLE PRECISION :: EPS = 10.0**(-2)
373 LOGICAL,
SAVE :: ADPT_SIMPSON_ERR = .false.
380 ls = (
f(a) + 4.0d0*
f((a+b)/2.0d0) +
f(b))*(h/3.0d0)
382 v(1,:) = (/ a, h,
f(a),
f((a+b)/2.0d0),
f(b), ls/)
391 ls = (v(k,3) + 4.0d0*lf + v(k,4))*(h/3.0d0)
393 rf =
f(v(k,1) + 3.0d0*h)
395 rs = (v(k,4) + 4.0d0*rf + v(k,5))*(h/3.0d0)
397 err_bnd = (30.0d0*eps*h)/(b-a)
399 IF( abs(ls + rs - v(k,6)) .LT. err_bnd)
THEN 402 (1.0d0/15.0d0)*(ls + rs - v(k,6))
408 ELSEIF( (k .GE. kmax) .OR. &
409 (h == (b-a)*(1.0d0/2.0d0)**(kmax+3)))
THEN 411 IF(.NOT.adpt_simpson_err)
THEN 414 adpt_simpson_err = .true.
418 (1.0d0/15.0d0)*(ls + rs - v(k,6))
423 v(k+1,:) = (/v(k,1) + 2.0d0*h, h, v(k,4), rf, v(k,5), rs/)
424 v(k,:) = (/v(k,1), h, v(k,3), lf, v(k,4), ls/)
430 1000
FORMAT(/1x,70(
'*'),/
' From: DES_COND_EQ',/,
' Message: ', &
431 'Integration of the particle-fluid-particle equation did ', &
432 'not',/
' converge! No definite bound can be placed on the ', &
433 'error.',/
' Future convergence messages will be suppressed!', &
438 DOUBLE PRECISION FUNCTION eval_h_pfp(RLENS_dim,S,OLAP_dim,RP)
444 DOUBLE PRECISION,
intent(in) :: RLENS_dim, S, OLAP_dim, RP
446 DOUBLE PRECISION :: RLENS, OLAP, KN
447 DOUBLE PRECISION :: TERM1,TERM2,TERM3
448 DOUBLE PRECISION :: Rout,Rkn
449 DOUBLE PRECISION,
PARAMETER :: TWO = 2.0d0
455 IF(-olap.ge.(rlens-
one))
THEN 457 ELSEIF(olap.le.two)
THEN 458 rout = sqrt(rlens**2-(
one-olap)**2)
460 WRITE(*,*)
'ERROR: Extremeley excessive overlap (Olap > Diam)' 461 WRITE(*,*)
'OLAP = ',olap_dim,olap, rp
462 WRITE(*,*)
'RLENS_dim',rlens_dim, rlens
463 write(*,*)
'S, Kn', s,kn
469 ! particle in contact(below code verified)
470 term1 =
pi*((
one-olap)**2-(
one-olap-kn)**2)/kn
471 term2 = two*
pi*(sqrt(
one-rout**2)-(
one-olap-kn))
472 term3 = two*
pi*(
one-olap)*log((
one-olap-sqrt(
one-rout**2))/kn)
473 eval_h_pfp = term1+term2+term3
478 rkn=sqrt(
one-(
one-olap-kn)**2)
481 term1 = (rkn**2/(two*kn))+sqrt(
one-rout**2)-sqrt(
one-rkn**2)
482 term2 = (
one-olap)*log((
one-olap-sqrt(
one-rout**2))/(
one-olap-sqrt
487 END FUNCTION eval_h_pfp
501 tpart, rpart, rlens, m)
505 DOUBLE PRECISION :: DES_CONDUCTION_WALL
506 DOUBLE PRECISION,
intent(in) :: OLAP, K_sol, K_wall, K_gas, TWall&
507 & ,TPart,RPart, RLens
508 DOUBLE PRECISION :: Rin, Rout
509 DOUBLE PRECISION :: OLAP_ACTUAL, TAUC_CORRECTION
510 DOUBLE PRECISION :: KEff
511 DOUBLE PRECISION :: Q_pw, Q_pfw
522 keff = 2.0d0*k_sol*k_wall/(k_sol+k_wall)
528 rin = sqrt(2.0d0*olap_actual*rpart-olap_actual*olap_actual)
532 q_pw = 2.0d0*rin*keff*(twall-tpart)
536 & k_gas*rpart*(twall-tpart)
538 des_conduction_wall=q_pw+q_pfw
549 DOUBLE PRECISION :: CORRECT_OLAP
550 DOUBLE PRECISION,
INTENT (IN) :: OLAP
551 INTEGER,
INTENT (IN) :: M, L
552 DOUBLE PRECISION :: KN_ACTUAL, KN_SIM
556 IF(des_coll_model_enum .EQ. hertzian)
THEN 557 correct_olap = (hert_kwn(m)/hert_kwn_actual(m))**(2.0d0/3.0d0
559 correct_olap = (kn_w*olap/hert_kwn_actual(m))**(2.0d0/3.0d0)
563 IF(des_coll_model_enum .EQ. hertzian)
THEN 564 correct_olap = (hert_kn(m,l)/hert_kn_actual(m,l))**(2.0d0/3.
566 correct_olap = (kn*olap/hert_kn_actual(m,l))**(2.0d0/3.0d0)
573 DOUBLE PRECISION FUNCTION eval_h_pfw(RLENS_dim,S,OLAP_dim,RP)
579 DOUBLE PRECISION,
intent(in) :: RLENS_dim, S, OLAP_dim, RP
581 DOUBLE PRECISION :: RLENS, OLAP, KN
582 DOUBLE PRECISION :: TERM1,TERM2,TERM3
583 DOUBLE PRECISION :: Rout,Rkn
584 DOUBLE PRECISION,
PARAMETER :: TWO = 2.0d0
590 IF(-olap.ge.(rlens-
one))
THEN 592 ELSEIF(olap.le.two)
THEN 593 rout = sqrt(rlens**2-(
one-olap)**2)
595 WRITE(*,*)
'ERROR: Extremeley excessive overlap (Olap > Diam)' 596 WRITE(*,*)
'OLAP = ',olap_dim,olap, rp
597 WRITE(*,*)
'RLENS_dim',rlens_dim, rlens
598 write(*,*)
'S, Kn', s,kn
604 ! particle in contact(below code verified)
605 term1 =
pi*((
one-olap)**2-(
one-olap-kn)**2)/kn
606 term2 = two*
pi*(sqrt(
one-rout**2)-(
one-olap-kn))
607 term3 = two*
pi*(
one-olap)*log((
one-olap-sqrt(
one-rout**2))/kn)
613 rkn=sqrt(
one-(
one-olap-kn)**2)
616 term1 = (rkn**2/(two*kn))+sqrt(
one-rout**2)-sqrt(
one-rkn**2)
617 term2 = (
one-olap)*log((
one-olap-sqrt(
one-rout**2))/(
one-olap-sqrt
626 use discretelement
, only: tau_c_base_actual, tauw_c_base_actual
627 use discretelement
, only: tau_c_base_sim, tauw_c_base_sim
628 use discretelement
, only: des_coll_model_enum, hertzian
630 INTEGER,
intent (in) :: phaseI, phaseJ
631 DOUBLE PRECISION :: time_corr, tau_actual, tau_sim
632 DOUBLE PRECISION :: vimp
636 if (phasej == -1)
then 639 IF (des_coll_model_enum .EQ. hertzian)
THEN 640 time_corr = tauw_c_base_actual(m) / tauw_c_base_sim(m)
643 if (vimp .le. 0.0d0)
then 646 time_corr = tauw_c_base_actual(m)*vimp**(-0.2d0) / tauw_c_base_sim
652 if (phasei .le. phasej)
then 660 IF (des_coll_model_enum .EQ. hertzian)
THEN 661 time_corr = tau_c_base_actual(m,n) / tau_c_base_sim(m,n)
664 if (vimp .le. 0.0d0)
then 667 time_corr = tau_c_base_actual(m,n)*vimp**(-0.2d0) / tau_c_base_sim
671 time_corr = time_corr **(2.0d0/3.0d0)
double precision function eval_h_pfw(RLENS_dim, S, OLAP_dim, RP)
double precision, dimension(:), allocatable des_t_s
double precision, parameter one
double precision des_min_cond_dist
double precision, parameter undefined
double precision function correct_olap(OLAP, M, L)
double precision function k_eff(K1, K2)
logical do_area_correction
double precision function f(POS, ALPHAC, D_Target, L, N)
double precision, dimension(dim_m) k_s0
integer, parameter unit_log
double precision function radius(R1, R2)
double precision function des_conduction_wall(OLAP, K_sol, K_wall, K_gas, TWall, TPart, Rpart, RLens, M)
logical function mfix_isnan(x)
subroutine calc_time_correction(time_corr, phaseI, phaseJ)
double precision, dimension(:,:), allocatable des_qw_cond
double precision, parameter pi
double precision function des_conduction(I, J, CENTER_DIST, iM, iIJK)
double precision, parameter zero
double precision function adpt_simpson(A, B)