PLUME-MoM  1.0
Integralvolcanicplumemodel
 All Classes Files Functions Variables Pages
solver_rise.f90
Go to the documentation of this file.
1  !********************************************************************************
3 !
9 !********************************************************************************
10 
12  USE moments_module, ONLY: n_mom
13  USE particles_module, ONLY : n_part , distribution_variable
14  !
15  IMPLICIT NONE
16 
18  REAL*8, ALLOCATABLE, DIMENSION(:) :: rhstemp
19 
21  REAL*8, ALLOCATABLE, DIMENSION(:) :: rhs
22 
24  REAL*8, ALLOCATABLE, DIMENSION(:) :: ftemp
25 
27  REAL*8, ALLOCATABLE, DIMENSION(:) :: f
28 
30  REAL*8, ALLOCATABLE, DIMENSION(:) :: f_stepold
31 
33  INTEGER :: itotal
34 
36  REAL*8 :: ds
37 
39  REAL*8 :: ds0
40  !
41  SAVE
42 
43 CONTAINS
44 
45  !******************************************************************************
47  !
53  !******************************************************************************
54 
55  SUBROUTINE allocate_matrix
56 
57  IMPLICIT NONE
58  !
59  itotal = n_part * n_mom + 9
60  !
61  ALLOCATE(f(itotal))
62  ALLOCATE(f_stepold(itotal))
63  ALLOCATE(rhs(itotal))
64  ALLOCATE(rhstemp(itotal))
65  ALLOCATE(ftemp(itotal))
66 
67  !
68  f = 0.d0
69  f_stepold = 0.d0
70  ftemp = 0.d0
71  rhs = 0.d0
72  rhstemp = 0.d0
73  !
74  RETURN
75  END SUBROUTINE allocate_matrix
76 
77  !******************************************************************************
79  !
85  !******************************************************************************
86 
87  SUBROUTINE rate(rhs_)
88 
89  USE meteo_module, ONLY: u_atm , rho_atm , ta , duatm_dz , cpair , rair , &
90  cos_theta , sin_theta
91 
92  USE mixture_module, ONLY: rho_mix , tp , cpmix , solid_tot_volume_fraction ,&
93  gas_mass_fraction , rgasmix , rho_gas
94 
95  USE particles_module, ONLY: mom , set_rhop_mom , set_cp_rhop_mom , set_mom ,&
96  set_cp_mom , solid_partial_mass_fraction , solid_volume_fraction , &
97  solid_mass_fraction
98 
99  USE plume_module, ONLY: s , r , u , w , mag_u , phi , alpha_inp , beta_inp ,&
100  rp , prob_factor , particles_loss , r0
101 
102  USE variables, ONLY: gi
103 
104  !
105  REAL*8, DIMENSION(:), INTENT(OUT) :: rhs_
106  !
107  INTEGER :: i
108  INTEGER :: i_part
109 
110  REAL*8 :: ueps
111 
112  REAL*8 :: cos_phi
113  REAL*8 :: factor0
114 
115  REAL*8 :: solid_term , cp_solid_term
116 
117  REAL*8 :: ri
118 
119  REAL*8 :: alpha_p , beta_p
120 
121  REAL*8 :: a , c
122 
123  REAL*8 :: a_poly , b_poly , c_poly , d_poly
124  REAL*8 :: s_star
125 
126  REAL*8 :: a_10 , a_10_deriv
127 
128  cos_phi = u / mag_u
129 
130  IF ( alpha_inp .LE. 0.d0 ) THEN
131 
132  s_star = s / r0
133 
134  IF ( s_star .LE. 10 ) THEN
135 
136  ! value and slope at s_star=10 from equation 3.4 Carazzo et al. 2006
137  a_10 = 2.45 - 1.05* exp( -4.65e-3*10.d0)
138 
139  a_10_deriv = - 1.05* exp( -4.65e-3*10.d0) * ( -4.65e-3)
140 
141  ! coefficients for the 3rd order polynomial defining A as a function of z/D
142 
143  a_poly = 1.1
144 
145  b_poly = 0
146 
147  d_poly = - ( a_10 - 1.1 - a_10_deriv ) / 500
148 
149  c_poly = ( a_10 - 1.1 - 1000*d_poly ) / 100
150 
151  ! Equation 12 Carazzo et al. 2008
152  a = a_poly + b_poly*s_star + c_poly*s_star**2 + d_poly*s_star**3
153 
154  ELSE
155 
156  ! Equation 3.4 Carazzo et al. 2006
157  a = 2.45d0 - 1.05d0* exp( -4.65e-3*s_star )
158 
159  END IF
160 
161  c = 0.135d0
162 
163  ri = gi * ( rho_atm - rho_mix ) * r / ( rho_atm * mag_u**2 )
164 
165  alpha_p = max( 0.d0 , 0.5d0 * c + ( 1.d0 - 1.d0 / a ) * ri )
166 
167  !WRITE(*,*) 's_star,Ri,alpha_p',s_star,Ri,alpha_p
168 
169  ELSE
170 
171  alpha_p = alpha_inp
172 
173  END IF
174 
175  IF ( particles_loss ) THEN
176 
177  factor0 = ( 1.d0 + 6.d0 / 5.d0 * alpha_p )** 2
178  prob_factor = ( factor0 - 1.d0 ) / ( factor0 + 1.d0 )
179 
180  ELSE
181 
182  prob_factor = 0.d0
183 
184  END IF
185 
186 
187  IF ( beta_inp .LE. 0.d0 ) THEN
188 
189  beta_p = 0.0d0
190 
191  ELSE
192 
193  beta_p = beta_inp
194 
195  END IF
196 
197 
198  ueps = alpha_p * abs( mag_u - u_atm * cos_phi ) + beta_p * abs( u_atm * &
199  sin(phi))
200 
201  IF ( distribution_variable .EQ. "particles_number" ) THEN
202 
203  solid_term = sum( solid_volume_fraction(1:n_part) * &
204  set_rhop_mom(1:n_part,3) )
205 
206  ELSEIF ( distribution_variable .EQ. "mass_fraction" ) THEN
207 
208  solid_term = rho_mix * sum( solid_mass_fraction(1:n_part) * &
209  set_mom(1:n_part,0) )
210 
211  END IF
212 
213  !---- Mass conservation of the plume (Eq.4 Bursik 2001)
214 
215  rhs_(1) = 2.d0 * r * rho_atm * ueps - prob_factor * 2.d0 * r * &
216  solid_term
217 
218  !---- Horizontal momentum conservation (from Eq.3.2 Weil with added the
219  !---- contribution of M_i)
220  rhs_(2) = - r**2 * rho_mix * w * duatm_dz - u * prob_factor * 2.d0 * r * &
221  solid_term
222 
223  !---- Vertical momentum conservation (from Eq.3.3 Weil with added the
224  !---- contribution of M_i)
225  rhs_(3) = gi * r**2 * ( rho_atm - rho_mix ) - w * prob_factor * 2.d0 * r * &
226  solid_term
227 
228  !---- Mixture specific heat integration
229 
230  IF ( distribution_variable .EQ. "particles_number" ) THEN
231 
232  cp_solid_term = sum( solid_volume_fraction(1:n_part) * &
233  set_cp_rhop_mom(1:n_part,3) )
234 
235  ELSEIF ( distribution_variable .EQ. "mass_fraction" ) THEN
236 
237  cp_solid_term = rho_mix * sum( solid_mass_fraction(1:n_part) * &
238  set_cp_mom(1:n_part,0) )
239 
240  END IF
241 
242  rhs_(4) = 1.d0 / ( rho_mix * mag_u * r**2 ) * ( - cpmix * rhs_(1) &
243  + cpair * 2.d0 * r * rho_atm * ueps - prob_factor * 2.d0 * r * &
244  cp_solid_term )
245 
246  !---- Energy conservation (Eq.7 Bursik 2001) (Eq. 6 Barsotti)
247  rhs_(5) = 2.d0 * r * ueps * rho_atm * cpair * ta - ( r**2 ) * w * rho_atm * &
248  gi - tp * prob_factor * 2.d0 * r * cp_solid_term - rp * r * &
249  ( tp**4 - ta**4 )
250 
251  !---- Gas constant for the mixture integration (Eq. 7 Barsotti)
252  rhs_(6) = ( rair - rgasmix ) / ( rho_gas * mag_u * r**2 ) &
253  * ( 2.d0 * r * rho_atm * ueps )
254 
255  !---- Z integration (Eq.1a Bursik 2001)
256  rhs_(7) = w / mag_u
257 
258  !---- X integration (Eq.1b Bursik 2001)
259  rhs_(8) = cos_phi * cos_theta
260 
261  !---- Y integration (Eq.1b Bursik 2001)
262  rhs_(9) = cos_phi * sin_theta
263 
264  !---- Moments equations
265  DO i_part=1,n_part
266 
267  DO i=0,n_mom-1
268 
269  IF ( distribution_variable .EQ. "particles_number" ) THEN
270 
271  rhs_(10+i+(i_part-1)*n_mom) = - prob_factor * 2.d0 * r * &
272  set_mom(i_part,i) * mom(i_part,i)
273 
274  ELSEIF ( distribution_variable .EQ. "mass_fraction" ) THEN
275 
276  rhs_(10+i+(i_part-1)*n_mom) = - prob_factor * 2.d0 * r * &
277  rho_mix * set_mom(i_part,i) * mom(i_part,i)
278 
279  END IF
280 
281  END DO
282 
283  END DO
284 
285  RETURN
286 
287  END SUBROUTINE rate
288 
289 
290  !******************************************************************************
292  !
299  !******************************************************************************
300 
301  SUBROUTINE lump(f_)
302 
303  USE mixture_module, ONLY: rgasmix , cpmix , rho_mix , tp
304  USE meteo_module, ONLY: u_atm
305  USE particles_module, ONLY: mom
306  USE plume_module, ONLY: s , x , z , y , r , u , w , mag_u
307  !
308  IMPLICIT NONE
309  REAL*8, DIMENSION(:), INTENT(OUT) :: f_
310  INTEGER :: i_mom
311  INTEGER :: i_part
312  INTEGER :: idx
313 
314  f_(1) = rho_mix * mag_u * r**2
315  f_(2) = f_(1) * ( u - u_atm )
316  f_(3) = f_(1) * w
317  f_(4) = cpmix
318  f_(5) = f_(1) * cpmix * tp
319  f_(6) = rgasmix
320  f_(7) = z
321  f_(8) = x
322  f_(9) = y
323 
324  DO i_part=1,n_part
325 
326  DO i_mom=0,n_mom-1
327 
328  idx = 10+i_mom+(i_part-1)*n_mom
329 
330  IF ( distribution_variable .EQ. "particles_number" ) THEN
331 
332  f_(idx) = mag_u * r**2 * mom(i_part,i_mom)
333 
334  ELSEIF ( distribution_variable .EQ. "mass_fraction" ) THEN
335 
336  f_(idx) = mag_u * r**2 * mom(i_part,i_mom) * rho_mix
337 
338  END IF
339 
340  ENDDO
341 
342  END DO
343 
344  RETURN
345 
346  END SUBROUTINE lump
347 
348  !******************************************************************************
350  !
359  !******************************************************************************
360 
361  SUBROUTINE marching(fold,fnew,rate)
362 
363  IMPLICIT NONE
364  REAL*8, DIMENSION(:), INTENT(IN) :: fold, rate
365  REAL*8, DIMENSION(:), INTENT(OUT) :: fnew
366  INTEGER :: i
367  INTEGER :: i_part, i_mom
368 
369  DO i=1,itotal
370 
371  fnew(i) = fold(i) + rate(i) * ds
372 
373  END DO
374 
375  DO i_part=1,n_part
376 
377  DO i_mom=0,n_mom-1
378 
379  IF ( fnew(10+i_mom+(i_part-1)*n_mom) .LE. 0.d0 ) THEN
380 
381  IF ( distribution_variable .EQ. 'particle_moments' ) THEN
382 
383  WRITE(*,*) 'WARNING: negative moment, part',i_part,'mom',i_mom
384  READ(*,*)
385 
386  END IF
387 
388  END IF
389 
390  ENDDO
391 
392  END DO
393 
394  RETURN
395 
396  END SUBROUTINE marching
397 
398  !******************************************************************************
400  !
407  !******************************************************************************
408 
409  SUBROUTINE unlump(f_)
410 
411  USE meteo_module, ONLY: u_atm , ta , rho_atm , rair , pa
412 
413  USE mixture_module, ONLY: rho_gas , rgasmix , cpmix , rho_mix , tp , &
414  gas_volume_fraction , solid_tot_volume_fraction , gas_mass_fraction , &
415  atm_mass_fraction , wvapour_mass_fraction , rwvapour
416 
417  USE particles_module, ONLY : mom , solid_partial_mass_fraction , &
418  solid_partial_volume_fraction , rhop_mom , solid_volume_fraction , &
419  distribution , distribution_variable , solid_mass_fraction
420 
421  USE plume_module, ONLY: x , z , y , r , u , w , mag_u , phi
422 
423  USE moments_module, ONLY: n_nodes
424 
425  USE variables, ONLY : pi_g , verbose_level
426 
427  USE meteo_module, ONLY : zmet
428 
430 
433 
434  IMPLICIT NONE
435 
436  REAL*8, DIMENSION(:), INTENT(INOUT) :: f_
437  !
438  REAL*8, DIMENSION(n_part,n_nodes) :: xi , wi , wi_temp
439  REAL*8, DIMENSION(n_part,n_nodes) :: part_dens_array
440 
441  REAL*8 :: rho_wvapour
442 
443  REAL*8 :: rhob_solid_u_r2(n_part)
444  REAL*8 :: rhob_solid_tot_u_r2
445 
446  REAL*8 :: alfa_s_u_r2(1:n_part)
447  REAL*8 :: alfa_g_u_r2
448 
449  REAL*8 :: alfa_g_wvapour
450  REAL*8 :: alfa_g_atm
451 
452  REAL*8 :: atm_volume_fraction
453  REAL*8 :: wvapour_volume_fraction
454 
455  REAL*8 :: u_r2
456 
457  REAL*8 :: rho_solid_avg(n_part)
458  REAL*8 :: rho_solid_tot_avg
459 
460  INTEGER :: j
461  INTEGER :: i_part
462  INTEGER :: iter
463 
464  INTEGER :: idx1 , idx2
465 
466 
467  REAL*8 :: rho_atm_tp
468 
469  phi = atan(w/u)
470  z = f_(7)
471  x = f_(8)
472  y = f_(9)
473 
474  ! ---- evaluate the new atmospheric density ad u and temperature at z -------
475 
476  CALL zmet
477 
478  u = u_atm + f_(2)/f_(1)
479 
480  w = f_(3)/f_(1)
481 
482  mag_u = sqrt( u*u + w*w )
483 
484  cpmix = f_(4)
485 
486  tp = f_(5) / ( f_(1) * cpmix )
487  rgasmix = f_(6)
488 
489  rho_gas = pa / ( rgasmix * tp )
490 
491  rho_wvapour = pa / ( rwvapour * tp )
492 
493  rho_atm_tp = pa / ( rair * tp )
494 
495  alfa_g_wvapour = ( rho_gas - rho_atm_tp ) / ( rho_wvapour - rho_atm_tp )
496 
497  alfa_g_atm = 1.d0 - alfa_g_wvapour
498 
499  IF ( verbose_level .GT. 2 ) THEN
500 
501  WRITE(*,*) '************** UNLUMP ***************'
502  WRITE(*,*) 'rgasmix',rgasmix
503 
504  WRITE(*,*) 'rho_gas,rho_wvapour,rho_atm_tp',rho_gas,rho_wvapour, &
505  rho_atm_tp
506 
507  WRITE(*,*) 'alfa_g_wvapour,alfa_g_atm',alfa_g_wvapour,alfa_g_atm
508 
509  END IF
510 
511 
512  DO i_part=1,n_part
513 
514  idx1 = 10 + 0 + n_mom * ( i_part - 1 )
515  idx2 = 10 + n_mom - 1 + n_mom * ( i_part - 1 )
516 
517  IF ( distribution_variable .EQ. 'particles_number' ) THEN
518 
519  CALL moments_correction( f_(idx1:idx2) , iter )
520 
521  END IF
522 
523  IF ( distribution .EQ. 'constant' ) THEN
524 
525  CALL wheeler_algorithm( f_(idx1:idx1+1) , xi(i_part,:) , &
526  wi_temp(i_part,:) )
527 
528  ELSE
529 
530  CALL wheeler_algorithm( f_(idx1:idx2) , xi(i_part,:) , &
531  wi_temp(i_part,:) )
532 
533  END IF
534 
535  DO j=1,n_nodes
536 
537  part_dens_array(i_part,j) = particles_density( i_part , xi(i_part,j) )
538 
539  END DO
540 
541 
542  IF ( distribution_variable .EQ. 'particles_number' ) THEN
543 
544  rhob_solid_u_r2(i_part) = sum( part_dens_array(i_part,:) * &
545  wi_temp(i_part,:) * xi(i_part,:)**3 ) / 6.d0 * pi_g
546 
547 
548  rho_solid_avg(i_part) = sum( part_dens_array(i_part,:) * &
549  wi_temp(i_part,:) * xi(i_part,:)**3 ) / &
550  sum( wi_temp(i_part,:) * xi(i_part,:)**3 )
551 
552  ELSEIF ( distribution_variable .EQ. 'mass_fraction' ) THEN
553 
554  rhob_solid_u_r2(i_part) = f_(idx1)
555 
556  rho_solid_avg(i_part) = 1.d0 / ( sum( wi_temp(i_part,:) / &
557  part_dens_array(i_part,:) ) / sum( wi_temp(i_part,:) ) )
558 
559  END IF
560 
561  IF ( verbose_level .GT. 3 ) THEN
562 
563  WRITE(*,*) 'rhoB_solid_U_r2',idx1,rhob_solid_u_r2(i_part)
564  WRITE(*,*) 'i_part,rho_solid_avg',i_part, rho_solid_avg(i_part)
565 
566  END IF
567 
568  END DO
569 
570  alfa_s_u_r2(1:n_part) = rhob_solid_u_r2(1:n_part) / rho_solid_avg(1:n_part)
571 
572  rhob_solid_tot_u_r2 = sum( rhob_solid_u_r2(1:n_part) )
573 
574  alfa_g_u_r2 = ( f_(1) - rhob_solid_tot_u_r2 ) / rho_gas
575 
576  u_r2 = sum( alfa_s_u_r2(1:n_part) ) + alfa_g_u_r2
577 
578  r = dsqrt( u_r2 / mag_u )
579 
580  rho_mix = f_(1) / u_r2
581 
582  IF ( verbose_level .GT. 2 ) THEN
583 
584  WRITE(*,*) 'rho_gas',rho_gas
585  WRITE(*,*) 'u_r2,r,mag_u',u_r2,r,mag_u
586  WRITE(*,*) 'rho_mix',rho_mix
587  WRITE(*,*) ' alfa_g', alfa_g_u_r2/ u_r2
588  READ(*,*)
589 
590  END IF
591 
592  ! -------- solid fractions --------------------------------------------------
593 
594  solid_volume_fraction(1:n_part) = alfa_s_u_r2(1:n_part) / u_r2
595 
596  solid_tot_volume_fraction = sum( solid_volume_fraction(1:n_part) )
597 
598  solid_partial_volume_fraction(1:n_part) = solid_volume_fraction(1:n_part) / &
599  solid_tot_volume_fraction
600 
601  solid_partial_mass_fraction = solid_partial_volume_fraction * rho_solid_avg &
602  / sum( solid_partial_volume_fraction * rho_solid_avg )
603 
604  solid_mass_fraction(1:n_part) = solid_volume_fraction(1:n_part) * &
605  rho_solid_avg(1:n_part) / rho_mix
606 
607  rho_solid_tot_avg = sum( solid_partial_volume_fraction * rho_solid_avg )
608 
609  ! --------- gas fractions ---------------------------------------------------
610 
611  gas_mass_fraction = ( f_(1) - rhob_solid_tot_u_r2 ) / f_(1)
612 
613  gas_volume_fraction = 1.d0 - solid_tot_volume_fraction
614 
615  atm_volume_fraction = gas_volume_fraction * alfa_g_atm
616 
617  wvapour_volume_fraction = gas_volume_fraction * alfa_g_wvapour
618 
619  atm_mass_fraction = atm_volume_fraction * rho_atm_tp / rho_mix
620 
621  ! WRITE(*,*) 'SOLVER_RISE: atm_mass_fraction',atm_mass_fraction
622  ! READ(*,*)
623 
624 
625  wvapour_mass_fraction = wvapour_volume_fraction * rho_wvapour / rho_mix
626 
627  ! -------- update the moments -----------------------------------------------
628 
629  DO i_part=1,n_part
630 
631  idx1 = 10 + 0 + n_mom * ( i_part - 1 )
632  idx2 = 10 + n_mom - 1 + n_mom * ( i_part - 1 )
633 
634  IF ( distribution_variable .EQ. 'particles_number' ) THEN
635 
636  mom(i_part,0:n_mom-1) = f_(idx1:idx2) / ( u_r2 )
637 
638  ELSEIF ( distribution_variable .EQ. 'mass_fraction' ) THEN
639 
640  mom(i_part,0:n_mom-1) = f_(idx1:idx2) / ( rho_mix * u_r2 )
641 
642  END IF
643 
644  IF ( verbose_level .GE. 2 ) THEN
645 
646  WRITE(*,*) 'i_part',i_part
647  WRITE(*,*) 'f',f_(idx1:idx2)
648  WRITE(*,*) 'mom',mom(i_part,0:n_mom-1)
649 
650  END IF
651 
652  IF ( distribution .EQ. 'constant' ) THEN
653 
654  CALL wheeler_algorithm( mom(i_part,0:1) , xi(i_part,:) , &
655  wi(i_part,:) )
656 
657  ELSE
658 
659  CALL wheeler_algorithm( mom(i_part,0:n_mom-1) , xi(i_part,:) , &
660  wi(i_part,:) )
661 
662  END IF
663 
664  END DO
665 
666  ! ------- evaluate the new averaged terms -----------------------------------
667 
668  CALL eval_particles_moments( xi , wi )
669 
670  IF ( verbose_level .GE. 2 ) THEN
671 
672  WRITE(*,*) ''
673  WRITE(*,*) '************** UNLUMPED VARIABLES **************'
674  WRITE(*,*) 'cpmix',cpmix
675  WRITE(*,*) 'pres',pa
676  WRITE(*,*) 'rgasmix',rgasmix
677  WRITE(*,*) 'tp',tp
678  WRITE(*,*) 'u,w',u,w
679  WRITE(*,*) 'r',r
680 
681  WRITE(*,*) ''
682  WRITE(*,*) '************** DENSITIES **************'
683  WRITE(*,*) 'rho_gas',rho_gas
684  WRITE(*,*) 'rho solids',rho_solid_avg
685  WRITE(*,*) 'rho solid tot avg',rho_solid_tot_avg
686  WRITE(*,*) 'rho_mix',rho_mix
687 
688  WRITE(*,*) ''
689  WRITE(*,*) '************** VOLUME FRACTIONS **************'
690  WRITE(*,*) 'gas volume fraction',gas_volume_fraction
691  WRITE(*,*) 'solid_tot_volume_fraction',solid_tot_volume_fraction
692  WRITE(*,*) 'partial solid volume fraction',solid_partial_volume_fraction
693 
694  WRITE(*,*) ''
695  WRITE(*,*) '************** MASS FRACTIONS **************'
696  WRITE(*,*) 'solid partial mass fraction',solid_partial_mass_fraction
697  WRITE(*,*) 'solid mass fraction',solid_mass_fraction
698  WRITE(*,*) 'solid_tot_mass_fraction',1.d0 - gas_mass_fraction
699  WRITE(*,*) 'gas mass fraction',gas_mass_fraction
700  WRITE(*,*) 'atm_mass_fraction',atm_mass_fraction
701  WRITE(*,*) 'wvapour_mass_fraction',wvapour_mass_fraction
702  WRITE(*,*) ''
703  READ(*,*)
704 
705  END IF
706 
707  END SUBROUTINE unlump
708 
709 END MODULE solver_module
subroutine rate(rhs_)
Compute the right-hand side of the equations.
Definition: solver_rise.f90:87
real *8 function particles_density(i_part, diam_in)
Particle density.
Definition: particles.f90:440
Meteo module.
Definition: meteo.f90:11
subroutine zmet
Meteo parameters.
Definition: meteo.f90:131
Global variables.
Definition: variables.f90:10
Gas/particles mixture module.
Definition: mixture.f90:11
subroutine moments_correction(m, iter)
Moments correction.
Definition: moments.f90:171
Solver module.
Definition: solver_rise.f90:11
Plume module.
Definition: plume.f90:11
subroutine unlump(f_)
Calculate physical variables from lumped variables.
subroutine allocate_matrix
Solver variables allocation.
Definition: solver_rise.f90:55
subroutine lump(f_)
Calculate the lumped variables.
Method of Moments module.
Definition: moments.f90:11
subroutine eval_particles_moments(xi, w)
Particles moments computation.
Definition: particles.f90:794
Particles module.
Definition: particles.f90:11
subroutine marching(fold, fnew, rate)
Marching s one step.
subroutine wheeler_algorithm(m, xi, w)
Wheeler algorithm.
Definition: moments.f90:41