53 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
mom 56 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
mom0 59 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
set_mom 65 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
birth_mom 68 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
death_mom 74 REAL(wp),
ALLOCATABLE ::
phi1(:)
77 REAL(wp),
ALLOCATABLE ::
rho1(:)
83 REAL(wp),
ALLOCATABLE ::
phi2(:)
86 REAL(wp),
ALLOCATABLE ::
rho2(:)
131 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
m_quad 134 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
w_quad 137 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
phi_quad 143 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
vol_quad 146 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
rho_quad 155 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
cp_quad 158 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:) ::
f_quad 164 REAL(wp),
ALLOCATABLE,
DIMENSION(:) ::
phil 167 REAL(wp),
ALLOCATABLE,
DIMENSION(:) ::
phir 170 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:) ::
m 173 LOGICAL,
ALLOCATABLE,
DIMENSION(:,:,:,:,:) ::
q_flag 178 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:,:,:,:,:) ::
a 180 REAL(wp),
ALLOCATABLE,
DIMENSION(:,:,:,:,:,:,:) ::
wij 199 use,
intrinsic :: iso_fortran_env
200 use,
intrinsic :: ieee_arithmetic
206 notset = ieee_value(0.0_wp, ieee_quiet_nan)
362 REAL(wp) :: particles_settling_velocity
364 REAL(wp),
INTENT(IN) :: diam
365 REAL(wp),
INTENT(IN) :: rhop
366 REAL(wp),
INTENT(IN) :: shape_fact
368 REAL(wp) :: k1 , k2 , k3
369 REAL(wp) :: CD , CD1 , CD2
371 REAL(wp) :: Reynolds , Reynoldsk1k2
372 REAL(wp) :: Vinit , Vg_Ganser
380 REAL(wp) :: Cd_100 , Cd_1000
383 REAL(wp) :: Cd_interp
386 REAL(wp) :: Us_100 , Us_1000
392 REAL(wp) :: Us , Us_1 ,Us_2
395 REAL(wp) :: Rey1 , Rey2
398 REAL(wp) :: c0 , c1 , c2
401 REAL(wp) :: sqrt_delta
407 IF ( diam .LE. 1.e-4_wp )
THEN 412 * ( 0.5_wp * diam )**2
414 ELSEIF ( diam .LE. 1.e-3_wp )
THEN 426 particles_settling_velocity = k3 * sqrt( rhop / cd ) &
439 k1 = 3.0_wp / (1.0_wp + 2.0_wp * ( shape_fact**(-0.5_wp)))
441 k2 = 10.0_wp**(1.8148_wp * ((-1.0_wp*log10(shape_fact))**0.5743_wp))
443 reynoldsk1k2 = reynolds * k1 * k2
445 cd1 = k2 * 24.0_wp / reynoldsk1k2 * &
446 ( 1.0_wp + 0.1118_wp * reynoldsk1k2**0.6567_wp )
448 cd2 = 0.4305_wp * k2 / ( 1.0_wp + 3305.0_wp / reynoldsk1k2 )
452 vg_ganser = ( ( 4.0_wp *
gi * diam * ( rhop -
rho_atm ) ) &
453 / ( 3.0_wp * cd *
rho_atm) )**0.5_wp
459 particles_settling_velocity = vg_ganser
461 IF ( vg_ganser .LE. 0.0_wp )
THEN 463 WRITE(*,*)
'diam',diam
464 WRITE(*,*)
'NEGATIVE VALUE', vinit,vg_ganser
471 k1 = shape_fact**(-0.828_wp)
472 k2 = 2.0_wp * sqrt( 1.07_wp - shape_fact )
474 mass = rhop * 4.0_wp/3.0_wp *
pi_g * ( 0.5_wp * diam )**3
476 a_cs =
pi_g * ( 0.5_wp * diam )**2
478 c0 = -2.0_wp * diam * mass *
gi 480 c2 =
rho_atm * diam * k2 * a_cs
482 sqrt_delta = sqrt( c1**2 - 4.0_wp * c0*c2 )
484 us_1 = ( - c1 + sqrt_delta ) / ( 2.0_wp * c2 )
485 us_2 = ( - c1 - sqrt_delta ) / ( 2.0_wp * c2 )
488 cd_100 = 24.0_wp/100.0_wp * k1 + k2
489 us_100 = sqrt( 2.0_wp * mass *
gi / ( cd_100*
rho_atm * a_cs ) )
492 us_1000 = sqrt( 2.0_wp * mass *
gi / ( cd_1000*
rho_atm * a_cs ) )
499 WRITE(*,*)
'rho_atm , diam , Us_1 , visc_atm',
rho_atm , diam , us_1 , &
501 WRITE(*,*)
'Rey1,Rey2',rey1,rey2
509 IF ( ( rey1 .GT. 0.0_wp ) .AND. ( rey1 .LE. 100.0_wp ) )
THEN 516 ELSEIF ( ( rey1 .GT. 100.0_wp ) .AND. ( rey1 .LE. 1000.0_wp ) )
THEN 521 cd_interp = cd_100 + ( rey1 - 100.0_wp ) / ( 1000.0_wp - 100.0_wp ) * &
523 us = sqrt( 2.0_wp * mass *
gi / ( cd_interp *
rho_atm * a_cs ) )
525 ELSEIF ( rey1 .GT. 1000.0_wp )
THEN 534 IF ( ( rey2 .GT. 0.0_wp ) .AND. ( rey2 .LE. 100.0_wp ) )
THEN 538 ELSEIF ( ( rey2 .GT. 100.0_wp ) .AND. ( rey2 .LE. 1000.0_wp ) )
THEN 540 cd_interp = cd_100 + ( rey2 - 100.0_wp ) / ( 1000.0_wp - 100.0_wp ) &
541 * ( cd_1000 - cd_100 )
543 us = sqrt( 2.0_wp * mass *
gi / ( cd_interp *
rho_atm * a_cs ) )
545 ELSEIF ( rey2 .GT. 1000.0_wp )
THEN 551 particles_settling_velocity = us
555 WRITE(*,*)
'wrong settling model' 586 REAL(wp) :: particles_heat_capacity
587 INTEGER,
INTENT(IN) :: i_part
588 REAL(wp),
INTENT(IN) :: diam
590 particles_heat_capacity =
cp_part(i_part)
610 REAL(wp) :: particles_density
612 INTEGER,
INTENT(IN) :: i_part
613 REAL(wp),
INTENT(IN) :: phi
615 REAL(wp) :: phi_temp,rho_temp
617 IF (
phi1(i_part) .GT.
phi2(i_part) )
THEN 619 phi_temp =
phi1(i_part)
620 rho_temp =
rho1(i_part)
625 phi2(i_part) = phi_temp
626 rho2(i_part) = rho_temp
630 IF ( phi .LE.
phi1(i_part) )
THEN 632 particles_density =
rho1(i_part)
634 ELSEIF ( phi .LE.
phi2(i_part) )
THEN 637 particles_density =
rho1(i_part) + ( phi -
phi1(i_part) ) / &
642 particles_density =
rho2(i_part)
665 REAL(wp) :: particles_shape
667 INTEGER,
INTENT(IN) :: i_part
668 REAL(wp),
INTENT(IN) :: phi
670 REAL(wp) :: phi_temp,shape_temp
672 IF (
phi1(i_part) .GT.
phi2(i_part) )
THEN 674 phi_temp =
phi1(i_part)
675 shape_temp =
shape1(i_part)
680 phi2(i_part) = phi_temp
681 shape2(i_part) = shape_temp
685 IF ( phi .LE.
phi1(i_part) )
THEN 687 particles_shape =
shape1(i_part)
689 ELSEIF ( phi .LE.
phi2(i_part) )
THEN 692 particles_shape =
shape1(i_part) + ( phi -
phi1(i_part) ) / &
697 particles_shape =
shape2(i_part)
729 FUNCTION particles_beta(temp,visc,diam_i,diam_j,rho_i,rho_j,Vs_i,Vs_j,lw_vf, &
734 REAL(wp) :: particles_beta
736 REAL(wp),
INTENT(IN) :: temp
737 REAL(wp),
INTENT(IN) :: visc
738 REAL(wp),
INTENT(IN) :: diam_i
739 REAL(wp),
INTENT(IN) :: diam_j
740 REAL(wp),
INTENT(IN),
OPTIONAL :: rho_i
741 REAL(wp),
INTENT(IN),
OPTIONAL :: rho_j
742 REAL(wp),
INTENT(IN),
OPTIONAL :: Vs_i
743 REAL(wp),
INTENT(IN),
OPTIONAL :: Vs_j
744 REAL(wp),
INTENT(IN),
OPTIONAL :: lw_vf
745 REAL(wp),
INTENT(IN),
OPTIONAL :: ice_vf
746 REAL(wp),
INTENT(IN),
OPTIONAL :: solid_mf
752 particles_beta = 0.0_wp
760 particles_beta = ( 2.0_wp * k_b * temp ) / ( 3.0_wp * visc ) * &
761 ( diam_i + diam_j ) ** 2 / ( diam_i * diam_j )
765 particles_beta = diam_i**3 + diam_j**3
769 IF ( max(lw_vf,ice_vf) .LT. 1.0e-10_wp )
THEN 771 particles_beta = 0.0_wp
776 lw_vf,ice_vf,solid_mf,temp,visc)
782 IF ( verbose_level .GE. 2 )
THEN 784 WRITE(*,*)
'beta =',particles_beta
787 WRITE(*,fmt)
' ',
'END particles_beta' 788 indent_space = indent_space - 2
789 WRITE(fmt,*) indent_space
790 fmt =
"(A" // trim(fmt) //
",A)" 820 lw_vf , ice_vf , solid_mf , temp , visc )
824 REAL(wp) :: aggregation_kernel
826 REAL(wp),
INTENT(IN) :: diam_i
827 REAL(wp),
INTENT(IN) :: rho_i
828 REAL(wp),
INTENT(IN) :: Vs_i
829 REAL(wp),
INTENT(IN) :: diam_j
830 REAL(wp),
INTENT(IN) :: rho_j
831 REAL(wp),
INTENT(IN) :: Vs_j
832 REAL(wp),
INTENT(IN) :: lw_vf
833 REAL(wp),
INTENT(IN) :: ice_vf
834 REAL(wp),
INTENT(IN) :: solid_mf
835 REAL(wp),
INTENT(IN) :: temp
836 REAL(wp),
INTENT(IN) :: visc
841 IF ( verbose_level .GE. 2 )
THEN 843 indent_space = indent_space + 2
844 WRITE(fmt,*) indent_space
845 fmt =
"(A" // trim(fmt) //
",A)" 846 WRITE(*,fmt)
' ',
'BEGINNING aggregation_kernel' 858 aggregation_kernel = beta * alfa
860 IF ( aggregation_kernel .GT. 0.0_wp )
THEN 868 IF ( verbose_level .GE. 2 )
THEN 870 WRITE(*,fmt)
' ',
'END aggregation_kernel' 871 indent_space = indent_space - 2
872 WRITE(fmt,*) indent_space
873 fmt =
"(A" // trim(fmt) //
",A)" 905 REAL(wp) :: collision_kernel
907 REAL(wp),
INTENT(IN) :: diam_i
908 REAL(wp),
INTENT(IN) :: rho_i
909 REAL(wp),
INTENT(IN) :: Vs_i
910 REAL(wp),
INTENT(IN) :: diam_j
911 REAL(wp),
INTENT(IN) :: rho_j
912 REAL(wp),
INTENT(IN) :: Vs_j
913 REAL(wp),
INTENT(IN) :: temp
914 REAL(wp),
INTENT(IN) :: visc
936 IF ( verbose_level .GE. 2 )
THEN 938 indent_space = indent_space + 2
939 WRITE(fmt,*) indent_space
940 fmt =
"(A" // trim(fmt) //
",A)" 941 WRITE(*,fmt)
' ',
'BEGINNING collision_kernel' 947 beta_b = 2.0_wp / 3.0_wp * k_b * temp / visc * ( diam_i + diam_j )**2 &
954 beta_s = 1.0_wp / 6.0_wp * gamma_s * ( diam_i + diam_j )**3
957 beta_ds =
pi_g / 4.0_wp * ( diam_i + diam_j )**2 * abs( vs_j - vs_i )
961 collision_kernel = beta_b + beta_s + beta_ds
963 IF ( verbose_level .GE. 2 )
THEN 965 WRITE(*,fmt)
' ',
'END collision_kernel' 966 indent_space = indent_space - 2
967 WRITE(fmt,*) indent_space
968 fmt =
"(A" // trim(fmt) //
",A)" 1000 REAL(wp) :: coalescence_efficiency
1002 REAL(wp),
INTENT(IN) :: diam_i
1003 REAL(wp),
INTENT(IN) :: rho_i
1004 REAL(wp),
INTENT(IN) :: Vs_i
1005 REAL(wp),
INTENT(IN) :: diam_j
1006 REAL(wp),
INTENT(IN) :: rho_j
1007 REAL(wp),
INTENT(IN) :: Vs_j
1008 REAL(wp),
INTENT(IN) :: lw_vf
1009 REAL(wp),
INTENT(IN) :: ice_vf
1010 REAL(wp),
INTENT(IN) :: solid_mf
1012 REAL(wp) :: coalescence_efficiency_ice , coalescence_efficiency_water
1018 REAL(wp) :: Stokes_cr
1025 IF ( verbose_level .GE. 2 )
THEN 1027 indent_space = indent_space + 2
1028 WRITE(fmt,*) indent_space
1029 fmt =
"(A" // trim(fmt) //
",A)" 1030 WRITE(*,fmt)
' ',
'BEGINNING coalescence_efficiency' 1035 coalescence_efficiency_ice = 0.09_wp * ice_vf
1040 stokes = 8.0_wp * ( 0.5_wp * ( rho_i + rho_j ) ) * abs( vs_i - vs_j ) / &
1041 ( 9.0_wp * mu_liq ) * diam_i * diam_j / ( diam_i + diam_j )
1048 coalescence_efficiency_water = 1.0_wp / ( 1.0_wp+( stokes/stokes_cr ) )**q &
1051 IF ( lw_vf .GT. 0.0_wp )
THEN 1053 IF ( ice_vf .GT. 0.0_wp )
THEN 1055 coalescence_efficiency = coalescence_efficiency_water &
1056 + coalescence_efficiency_ice
1060 coalescence_efficiency = coalescence_efficiency_water
1064 ELSEIF ( ice_vf .GT. 0.0_wp )
THEN 1066 coalescence_efficiency = coalescence_efficiency_ice
1070 coalescence_efficiency = 0.0_wp
1075 IF ( verbose_level .GE. 2 )
THEN 1077 WRITE(*,fmt)
' ',
'END coalescence_efficiency' 1078 indent_space = indent_space - 2
1079 WRITE(fmt,*) indent_space
1080 fmt =
"(A" // trim(fmt) //
",A)" 1106 INTEGER :: i_part , j_part
1107 INTEGER :: i_sect , j_sect , k_sect
1110 INTEGER :: i_node , j_node
1128 IF (
mom(1,i_sect,i_part) .GT. 0.0_wp )
THEN 1132 *
m_quad(:,i_sect,i_part)**i_mom ) /
mom(i_mom,i_sect,i_part)
1137 *
w_quad(:,i_sect,i_part) *
m_quad(:,i_sect,i_part)**i_mom ) &
1138 /
mom(i_mom,i_sect,i_part)
1142 set_mom(i_mom,i_sect,i_part) = 0.0_wp
1150 WRITE(*,*)
'i_part,i_mom',i_part,i_mom
1152 WRITE(*,*)
'set_mom(i_mom,i_sect,i_part) = ' , &
1184 INTEGER :: i_part , i_sect
1185 REAL(wp) :: coeff_lin(4)
1186 REAL(wp) :: Mai , Mbi
1187 REAL(wp) :: alfai , betai,gamma1,gamma2
1191 INTEGER :: condition1(n_nodes) , condition2(n_nodes)
1195 DO i_sect = 1,n_sections
1197 ml =
m(i_sect,i_part)
1198 mr =
m(i_sect+1,i_part)
1201 alfai , betai , gamma1 , gamma2 )
1203 f_quad(:,i_sect,i_part) = alfai * ( ( mr -
m_quad(:,i_sect,i_part) ) &
1204 / ( mr - ml ) )**gamma1 + ( betai - alfai ) &
1205 * ( (
m_quad(:,i_sect,i_part) - ml ) / ( mr - ml ) )**gamma2
1232 REAL(wp) :: x(n_nodes) , w(n_nodes)
1234 INTEGER :: i_part , i_sect
1239 CALL gaulegf(-1.0_wp, 1.0_wp, x, w, n_nodes)
1241 IF ( verbose_level .GE. 1 )
THEN 1243 WRITE(*,*)
'original quadrature points in [-1;1]' 1252 DO i_sect=1,n_sections
1254 ml =
m(i_sect,i_part)
1255 mr =
m(i_sect+1,i_part)
1258 m_quad(:,i_sect,i_part) = 0.5_wp * ( ( mr - ml ) * x + ( mr + ml ) )
1259 w_quad(:,i_sect,i_part) = 0.5_wp * ( mr - ml ) * w
1261 IF ( verbose_level .GE. 1 )
THEN 1263 WRITE(*,*)
'i_part,i_sect',i_part,i_sect
1264 WRITE(*,*)
'Ml,Mr',ml,mr
1265 WRITE(*,
"(100ES12.4)")
m_quad(:,i_sect,i_part)
1266 WRITE(*,
"(100ES12.3)")
w_quad(:,i_sect,i_part)
1294 REAL(wp) :: diam1 , diam2
1295 REAL(wp) :: Vol1 , Vol2
1317 diam1 = 1.e-3_wp * 2.0_wp**( -
phi2(i_part) )
1320 vol1 =
shape2(i_part) * diam1**3
1322 m1 = vol1 *
rho2(i_part)
1325 diam2 = 1.e-3_wp * 2.0_wp**( -
phi1(i_part) )
1328 vol2 =
shape1(i_part) * diam2**3
1330 m2 = vol2 *
rho1(i_part)
1336 IF ( verbose_level .GE. 2 )
THEN 1348 WRITE(*,*) f1(1:
n_nodes,i_sect)
1355 WRITE(*,*) f2(1:
n_nodes,i_sect)
1376 phi = 0.5_wp * (phil+phir)
1377 diam = 1.e-3_wp * 2.0_wp**( - phi )
1380 shape_p =
shape1(i_part) + ( phi -
phi1(i_part) ) / (
phi2(i_part) - &
1383 vol = shape_p * diam**3
1385 rho_p =
rho1(i_part) + ( phi -
phi1(i_part) ) / (
phi2(i_part) - &
1393 cond1 = merge( 1.0_wp , 0.0_wp , f1*f2 .LT. 0.0_wp )
1394 cond2 = merge( 1.0_wp , 0.0_wp , f*f1 .LT. 0.0_wp )
1395 cond3 = merge( 1.0_wp , 0.0_wp , f1 .GT. 0.0_wp )
1397 phir = cond1 * ( cond2 * phi + (1.0_wp-cond2) * phir ) + &
1398 (1.0_wp-cond1) * ( cond3*phir + (1.0_wp-cond3)*phi )
1400 f2 = cond1 * ( cond2 * f + (1.0_wp-cond2) * f2 ) + &
1401 (1.0_wp-cond1) * ( cond3 * f2 + (1.0_wp-cond3) * f )
1403 phil = cond1 * ( (1.0_wp-cond2) * phi + cond2 * phil ) + &
1404 (1.0_wp-cond1) * ( (1.0_wp-cond3) * phil + cond3 * phi )
1406 f1 = cond1 * ( (1.0_wp-cond2) * f + cond2 * f1 ) + &
1407 (1.0_wp-cond1) * ( (1.0_wp-cond3) * f1 + cond3 * f )
1438 IF ( verbose_level .GE. 1 )
THEN 1440 WRITE(*,*)
'i_part',i_part
1481 REAL(wp),
INTENT(IN) :: temp
1482 REAL(wp),
INTENT(IN) :: visc
1483 REAL(wp),
INTENT(IN) :: lw_vf
1484 REAL(wp),
INTENT(IN) :: ice_vf
1485 REAL(wp),
INTENT(IN) :: solid_mf
1487 INTEGER :: i_part , j_part
1488 INTEGER :: i_sect , j_sect , k_sect
1490 INTEGER :: i_node , j_node
1496 REAL(wp) :: integrand_ijkm
1522 lw_vf , ice_vf , solid_mf )
1528 kernel_aggr(:,:,j_sect,j_part,i_sect,i_part) = kernel_ji
1549 f1i =
f_quad(:,i_sect,i_part)
1557 f2j =
f_quad(:,j_sect,j_part)
1563 IF (
q_flag(k_sect,j_sect,i_sect,j_part,i_part) )
THEN 1573 integrand_ijkm = sum( &
1574 a(:,:,k_sect,j_sect,j_part,i_sect,i_part) &
1575 *
wij(:,:,0,j_sect,j_part,i_sect,i_part) &
1589 + 0.5_wp * integrand_ijkm
1591 integrand_ijkm = sum( &
1592 a(:,:,k_sect,j_sect,j_part,i_sect,i_part) &
1593 *
wij(:,:,1,j_sect,j_part,i_sect,i_part) &
1651 INTEGER :: i_part , j_part
1652 INTEGER :: i_sect , j_sect , k_sect
1654 INTEGER :: i_node , j_node
1683 aijk = merge(1 , 0 , ( mij12 .GE.
m(k_sect,
n_part) ) .AND. &
1684 ( mij12 .LE.
m(k_sect+1,
n_part) ) )
1689 q_flag(k_sect,j_sect,i_sect,j_part,i_part) = &
1690 ( sum(aijk) .GT. 0 )
1692 a(:,:,k_sect,j_sect,j_part,i_sect,i_part) = aijk
1705 wij(:,:,i_mom,j_sect,j_part,i_sect,i_part) = wijm
1717 WRITE(*,*)
'Aggregation initialization completed' subroutine phifromm
Compute size from mass.
real(wp), dimension(:), allocatable phi1
First diameter for the density function.
integer n_mom
Number of moments.
real(wp) function particles_shape(i_part, phi)
Particle shape factor.
integer n_part
number of particle phases
real(wp) visc_atm
Atmospheric kinematic viscosity.
real(wp) function particles_beta(temp, visc, diam_i, diam_j, rho_i, rho_j, Vs_i, Vs_j, lw_vf, ice_vf, solid_mf)
Particles aggregation.
real(wp) t_part
Particle temperature for aggregation (Costa model)
real(wp) rho_atm
Atmospheric density.
subroutine linear_reconstruction(Ml, Mr, mom, Ma, Mb, alfa, beta, gamma1, gamma2)
character(len=20) distribution
Ditribution of the particles: .
subroutine eval_particles_moments
Particles moments computation.
real(wp), dimension(:,:,:), allocatable diam_quad
Particle diameters (meters) at quadrature points.
real(wp), dimension(:,:,:), allocatable m_quad
Abscissa of quadrature formulas.
character(len=20) aggregation_model
Aggregation kernel model: .
real(wp), dimension(:,:,:), allocatable phi_quad
Particle size (phi-scale) at quadrature points.
real(wp), dimension(:), allocatable shape1
Shape factor at phi=phi1.
real(wp), dimension(:,:), allocatable cum_particle_loss_rate
cumulative rate of particles lost up to the integration height ( kg s^-1)
subroutine init_quadrature_points
Quadrature initialization.
real(wp) function particles_heat_capacity(i_part, diam)
Heat capacity.
real(wp), dimension(:,:,:,:,:,:,:), allocatable a
real(wp), dimension(:), allocatable solid_volume_fraction
volume fraction of the particle phases with respect to the mixture
subroutine allocate_particles
Particles variables allocation.
real(wp), dimension(:,:,:), allocatable set_mom
Moments of the settling velocities.
integer n_nodes
Number of nodes for the quadrature.
subroutine deallocate_particles
real(wp), dimension(:), allocatable rho1
Density at phi=phi1.
real(wp), dimension(:,:,:), allocatable set_cp_mom
Moments of the settling velocities times the heat capacity.
real(wp), dimension(:,:,:), allocatable f_quad
Values of linear reconstructions at quadrature points.
subroutine gaulegf(x1, x2, x, w, n)
real(wp), dimension(:,:,:), allocatable rho_quad
Particle densities at quadrature points.
real(wp), dimension(:), allocatable cp_part
Heat capacity of particle phases.
real(wp), dimension(:,:), allocatable bin_partial_mass_fraction
mass fraction of the bins of particle with respect to the total solid
real(wp), dimension(:), allocatable solid_partial_mass_fraction
mass fraction of the particle phases with respect to the total solid
subroutine init_aggregation
Aggregation initialization.
subroutine update_aggregation(temp, visc, lw_vf, ice_vf, solid_mf)
Aggregation terms.
integer, dimension(:), allocatable aggr_idx
Index defining the couple aggregated-non aggregated.
real(wp), dimension(:,:,:), allocatable shape_quad
Particle densities at quadrature points.
real(wp), dimension(:), allocatable solid_mass_fraction
mass fraction of the particle phases with respect to the mixture
real(wp), dimension(:), allocatable aggregate_porosity
Array for porosity volume fraction of aggregates.
real(wp) rho_atm0
Atmospheric density at sea level.
real(wp), dimension(:,:), allocatable m
boundaries of the sections in mass scale (kg)
Method of Moments module.
real(wp) function particles_settling_velocity(diam, rhop, shape_fact)
Settling velocity.
real(wp), dimension(:,:,:), allocatable mom
Moments of the particles diameter.
real(wp), dimension(:), allocatable phil
left boundaries of the sections in phi-scale
logical, dimension(:,:,:,:,:), allocatable q_flag
logical defining if particles ip/is+jp/js aggregates on section ks
real(wp) function aggregation_kernel(diam_i, rho_i, Vs_i, diam_j, rho_j, Vs_j, lw_vf, ice_vf, solid_mf, temp, visc)
Aggregation kernel.
real(wp), dimension(:), allocatable solid_partial_mass_fraction0
init mass fraction of the particle phases with respect to the total solid
real(wp), dimension(:,:,:), allocatable w_quad
Weights of quadrature formulas.
logical, dimension(:), allocatable aggregation_array
Flag for the aggregation: .
real(wp), dimension(:), allocatable shape_factor
shape factor for settling velocity (Pfeiffer)
real *8, parameter k_b
Boltzmann constant.
real(wp), dimension(:,:), allocatable particle_loss_rate
rate of particles lost from the plume in the integration steps ( kg s^-1)
real(wp), dimension(:,:,:,:,:,:), allocatable kernel_aggr
aggregation kernel computed for ip/is+jp/js
real(wp), dimension(:,:,:), allocatable birth_mom
Term accounting for the birth of aggregates in the moments equations.
real(wp) cpsolid
Average heat capacity of particles.
integer, parameter wp
working precision
real(wp), dimension(:), allocatable solid_mass_fraction0
initial mass fraction of the particle phases with respect to the mixture
real(wp), dimension(:), allocatable phir
right boundaries of the sections in phi-scale
real(wp), dimension(:,:,:,:,:,:,:), allocatable wij
real(wp) function collision_kernel(diam_i, rho_i, Vs_i, diam_j, rho_j, Vs_j, temp, visc)
Collision kernel.
real(wp), dimension(:,:,:), allocatable death_mom
Term accounting for the loss of particles because of aggregation.
real(wp) function particles_density(i_part, phi)
Particle density.
real *8 gi
Gravity acceleration.
real(wp), dimension(:,:,:), allocatable vol_quad
Particle volumes at quadrature points.
real(wp), dimension(:,:,:), allocatable set_vel_quad
Particle settling velocities at quadrature points.
real(wp), dimension(:), allocatable phi2
Second diameter for the density function.
subroutine eval_quad_values
Quadrature values computation.
real(wp), dimension(:,:,:), allocatable cp_quad
Particle heat capacities at quadrature points.
real(wp), dimension(:,:,:), allocatable mom0
Initial moments of the particles diameter.
real(wp), dimension(:), allocatable rho2
Density at phi=phi2.
real(wp), dimension(:), allocatable solid_partial_volume_fraction
volume fraction of the particle phases with respect to the total solid
real(wp), dimension(:), allocatable shape2
Shape factor at phi=phi2.
real(wp) function coalescence_efficiency(diam_i, rho_i, Vs_i, diam_j, rho_j, Vs_j, lw_vf, ice_vf, solid_mf)
Coalescence efficiency.
character *10 settling_model
Settling model: .
integer verbose_level
Level of verbose output (0 = minimal output on screen)