13 use,
intrinsic :: iso_fortran_env
14 use,
intrinsic :: ieee_arithmetic
157 solid_partial_mass_fraction , phi1 , rho1 , phi2 , rho2 , shape1 , &
177 initial_neutral_density , water_mass_fraction0 ,
vent_height ,
dz0 , &
189 namelist / umbrella_run_parameters / t_end , dt_output , c_d ,
steady_flag 223 notset = ieee_value(0.0_wp, ieee_quiet_nan)
248 initial_neutral_density = .false.
288 settling_model =
"none" 291 pi_g = 4.0_wp * atan(1.0_wp)
297 INQUIRE (file=
inp_file,exist=lexist)
299 IF (lexist .EQV. .false.)
THEN 326 distribution =
'LOGNORMAL' 327 solid_partial_mass_fraction = 1.0_wp
334 shape_factor = 1.0_wp
337 settling_model=
"textor" 355 settling_model =
"textor" 367 initial_neutral_density = .false.
368 water_mass_fraction0= 3.0e-2_wp
397 WRITE(
inp_unit, control_parameters )
399 WRITE(
inp_unit, particles_parameters )
400 WRITE(
inp_unit, entrainment_parameters )
402 WRITE(
inp_unit, std_atm_parameters )
404 WRITE(
inp_unit, volcgas_parameters )
405 WRITE(
inp_unit, lognormal_parameters )
409 WRITE(*,*)
'Input file plume_model.inp not found' 410 WRITE(*,*)
'A new one with default values has been created' 457 CHARACTER(LEN=80) :: card
463 REAL(wp),
DIMENSION(max_n_part) :: solid_volume_fraction0
464 REAL(wp),
ALLOCATABLE :: d_max(:)
466 REAL(wp) :: solid_tot_volume_fraction0
468 REAL(wp),
DIMENSION(max_n_part) :: rho_solid_avg
470 REAL(wp) :: rho_solid_tot_avg
481 REAL(wp),
ALLOCATABLE :: atm_profile0(:,:)
485 INTEGER,
ALLOCATABLE :: coeff(:,:)
487 REAL(wp),
ALLOCATABLE :: rho_atm_month(:,:)
489 REAL(wp) :: rho_atm_jan(100,13)
490 REAL(wp) :: rho_atm_apr(100,13)
491 REAL(wp) :: rho_atm_jul(100,13)
492 REAL(wp) :: rho_atm_oct(100,13)
494 REAL(wp),
ALLOCATABLE :: pres_atm_month(:,:)
496 REAL(wp) :: pres_atm_jan(100,13)
497 REAL(wp) :: pres_atm_apr(100,13)
498 REAL(wp) :: pres_atm_jul(100,13)
499 REAL(wp) :: pres_atm_oct(100,13)
501 REAL(wp),
ALLOCATABLE :: temp_atm_month(:,:)
503 REAL(wp) :: temp_atm_jan(100,13)
504 REAL(wp) :: temp_atm_apr(100,13)
505 REAL(wp) :: temp_atm_jul(100,13)
506 REAL(wp) :: temp_atm_oct(100,13)
510 INTEGER :: n_atm_levels
512 REAL(wp) :: coeff_lat
514 REAL(wp) :: Rrhovolcgas_mix
527 namelist / bin_parameters / bin_partial_mass_fraction
532 WRITE(*,*)
'PlumeMoM (by M. de'' Michieli Vitturi)' 534 WRITE(*,*)
'*** Starting the run ***' 547 READ(
inp_unit, control_parameters,iostat=io)
549 IF ( io .EQ. 0 )
THEN 559 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read control_parameters: done' 563 WRITE(*,*)
'Problem with namelist CONTROL_PARAMETERS' 570 READ(
inp_unit, inversion_parameters,iostat=ios)
572 IF ( ios .NE. 0 )
THEN 574 WRITE(*,*)
'IOSTAT=',ios
575 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 576 WRITE(*,*)
'Please check the input file' 577 WRITE(*,inversion_parameters)
584 IF ( ios .NE. 0 )
THEN 586 WRITE(*,*)
'IOSTAT=',ios
587 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 588 WRITE(*,*)
'Please check the input file' 589 WRITE(*,initial_values)
600 WRITE(*,*)
'ERROR: problem with INVERSION' 601 WRITE(*,*)
'Search for both radius and velocity is not possible' 602 WRITE(*,*)
'with UMBRELLA_FLAG = T' 603 WRITE(*,*)
'Please check the input file' 613 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 615 WRITE(*,inversion_parameters)
617 WRITE(*,*)
'Please check HEIGHT_OBJ value (>0 [m])' 624 IF (
verbose_level.GE.1 )
WRITE(*,*)
'read inversion_parameters: done' 625 WRITE(
bak_unit, inversion_parameters)
636 READ(
inp_unit, entrainment_parameters,iostat=io)
638 IF ( io .EQ. 0 )
THEN 640 WRITE(
bak_unit, entrainment_parameters)
641 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read entrainment_parameters: done' 645 WRITE(*,*)
'ERROR: problem with namelist ENTRAINMENT_PARAMETERS' 646 WRITE(*,*)
'Please set alpha_inp (>0)' 648 WRITE(*,entrainment_parameters)
655 WRITE(*,*)
'ERROR: problem with namelist ENTRAINMENT_PARAMETERS' 656 WRITE(*,*)
'Please set beta_inp (>0)' 658 WRITE(*,entrainment_parameters)
667 WRITE(*,*)
'IOSTAT=',ios
668 WRITE(*,*)
'ERROR: problem with namelist ENTRAINMENT_PARAMETERS' 669 WRITE(*,*)
'Please check the input file' 670 WRITE(*,entrainment_parameters)
677 READ(
inp_unit, mom_parameters,iostat=io)
679 IF ( io .EQ. 0 )
THEN 683 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read MoM_parameters: done' 687 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'allocated particles parameters' 693 WRITE(*,*)
'Problem with namelist MoM_PARAMETERS' 699 READ(
inp_unit, particles_parameters,iostat=io)
701 IF ( io .EQ. 0 )
THEN 703 WRITE(
bak_unit, particles_parameters)
704 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read particles_parameters: done' 709 WRITE(*,*)
'Problem with namelist PARTICLES_PARAMETERS' 711 WRITE(*,particles_parameters)
726 WRITE(*,*)
'grain size sections:' 727 WRITE(*,
"(100F6.2)") phil
728 WRITE(*,
"(100F6.2)") phir
738 IF (
isset(phi1(i_part)) .AND.
isset(phi2(i_part)) )
THEN 740 IF ( phi1(i_part) .GT. phi2(i_part) )
THEN 742 WRITE(*,*)
'ERROR: problem with namelist PARTICLES_PARAMETERS' 743 WRITE(*,*)
'Please check the input file' 744 WRITE(*,*)
'phi1 MUST BE SMALLER THAN phi2' 745 WRITE(*,*)
'phi1',phi1
746 WRITE(*,*)
'phi2',phi2
753 WRITE(*,*)
'ERROR: problem with namelist PARTICLES_PARAMETERS' 754 WRITE(*,*)
'Please check the input file' 755 WRITE(*,*)
'phi1',phi1
756 WRITE(*,*)
'phi2',phi2
761 IF (
isset(shape_factor(i_part)) )
THEN 763 IF (
isset(shape1(i_part)) .AND.
isset(shape2(i_part)) )
THEN 765 WRITE(*,*)
'ERROR: problem with namelist PARTICLES_PARAMETERS' 766 WRITE(*,*)
'Please check the input file' 767 WRITE(*,*)
'Shape factor',shape_factor
768 WRITE(*,*)
'Shape1',shape1
769 WRITE(*,*)
'Shape2',shape2
770 WRITE(*,*)
'IF SHAPE_FACTOR is defined, SHAPE1 and SHAPE2' 771 WRITE(*,*)
'are not used' 776 shape1(i_part) = shape_factor(i_part)
777 shape2(i_part) = shape_factor(i_part)
783 IF (
isset(shape1(i_part)) .AND.
isset(shape2(i_part)) )
THEN 788 WRITE(*,*)
'ERROR: problem with namelist PARTICLES_PARAMETERS' 789 WRITE(*,*)
'Please check the input file' 790 WRITE(*,*)
'Shape factor',shape_factor
791 WRITE(*,*)
'Shape1',shape1
792 WRITE(*,*)
'Shape2',shape2
802 diam = 1.e-3_wp * 2.0_wp**( - phir(i_sect) )
806 m(i_sect+1,i_part) = rhop * (shapep * diam**3)
814 distribution =
lower(distribution)
816 IF ( distribution .EQ.
'lognormal' )
THEN 821 READ(
inp_unit, lognormal_parameters,iostat=io)
823 IF ( io .EQ. 0 )
THEN 825 WRITE(
bak_unit, lognormal_parameters)
826 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read lognormal_parameters: done' 831 WRITE(*,*)
'Problem with namelist LOGNORMAL_PARAMETERS' 836 ELSEIF ( distribution .EQ.
'bin' )
THEN 838 READ(
inp_unit, bin_parameters,iostat=io)
840 IF ( io .EQ. 0 )
THEN 843 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read bin_parameters: done' 847 bin_partial_mass_fraction(1:
n_sections,i_part) = &
848 bin_partial_mass_fraction(1:
n_sections,i_part) / &
849 sum(bin_partial_mass_fraction(1:
n_sections,i_part))
855 WRITE(*,*)
'Problem reading namelist BIN_PARAMETERS' 856 WRITE(*,*)
'Please check the input file' 858 WRITE(*,bin_parameters)
865 WRITE(*,*)
'Error in namelist PARTICLES_PARAMETERS' 866 WRITE(*,*)
'Please check the values of distribution: ',distribution
867 WRITE(*,particles_parameters)
875 READ(
inp_unit, water_parameters,iostat=io)
877 IF ( io .EQ. 0 )
THEN 879 IF ( .NOT.
isset(rho_lw) )
THEN 881 WRITE(*,*)
'Namelist WATER_PARAMETERS' 882 WRITE(*,*)
'Plase define RHO_LW (kg/m3)' 887 IF ( .NOT.
isset(rho_ice) )
THEN 889 WRITE(*,*)
'Namelist WATER_PARAMETERS' 890 WRITE(*,*)
'Plase define RHO_ICE (kg/m3)' 895 IF ( .NOT.
isset(added_water_mass_fraction) )
THEN 898 WRITE(*,*)
'ERROR: problem with namelist WATER_PARAMETERS' 900 WRITE(*,water_parameters)
902 WRITE(*,*)
'Please check ADDED_WATER_MASS_FRACTION value [0;1]' 903 WRITE(*,*)
'ADDED_WATER_MASS_FRACTION =',added_water_mass_fraction
909 IF ( ( added_water_mass_fraction .LT. 0.0_wp ) .OR. &
910 ( added_water_mass_fraction .GE. 1.0_wp ) )
THEN 912 WRITE(*,*)
'Namelist WATER_PARAMETERS' 913 WRITE(*,*)
'added_water_mass_fraction should be >=0 and <1' 914 WRITE(*,*)
'actual value:',added_water_mass_fraction
921 IF ( .NOT.
isset(added_water_temp) )
THEN 924 WRITE(*,*)
'ERROR: problem with namelist WATER_PARAMETERS' 926 WRITE(*,water_parameters)
928 WRITE(*,*)
'Please check ADDED_WATER_TEMP value [K]' 929 WRITE(*,*)
'ADDED_WATER_TEMP =',added_water_temp
941 WRITE(*,*)
'Problem reading namelist WATER_PARAMETERS' 942 WRITE(*,*)
'Please check the input file' 944 WRITE(*,water_parameters)
953 added_water_mass_fraction = 0.0_wp
954 added_water_temp = 273.0_wp
958 READ(
inp_unit, atm_parameters,iostat=io)
960 IF ( io .EQ. 0 )
THEN 962 IF ( .NOT.
isset(added_water_temp) )
THEN 965 WRITE(*,*)
'ERROR: problem with namelist ATM_PARAMETERS' 967 WRITE(*,atm_parameters)
969 WRITE(*,*)
'Please check VISC_ATM0 value [Pa s]' 970 WRITE(*,*)
'VISC_ATM0 =',visc_atm0
976 IF ( .NOT.
isset(rair) )
THEN 979 WRITE(*,*)
'ERROR: problem with namelist ATM_PARAMETERS' 981 WRITE(*,atm_parameters)
983 WRITE(*,*)
'Please check RAIR value [J K-1 kg-1]' 984 WRITE(*,*)
'RAIR =',rair
990 IF ( .NOT.
isset(cpair) )
THEN 993 WRITE(*,*)
'ERROR: problem with namelist ATM_PARAMETERS' 995 WRITE(*,atm_parameters)
997 WRITE(*,*)
'Please check CPAIR value [J kg-1 K-1]' 998 WRITE(*,*)
'CPAIR =',cpair
1004 IF ( .NOT.
isset(wind_mult_coeff) )
THEN 1007 WRITE(*,*)
'ERROR: problem with namelist ATM_PARAMETERS' 1009 WRITE(*,atm_parameters)
1011 WRITE(*,*)
'Please check WIND_MULT_COEFF value' 1012 WRITE(*,*)
'WIND_MULT_COEFF =',wind_mult_coeff
1023 WRITE(*,*)
'Problem with namelist ATM_PARAMETERS' 1029 IF ( read_atm_profile .EQ.
'table' )
THEN 1033 READ(
inp_unit, table_atm_parameters )
1034 WRITE(
bak_unit, table_atm_parameters )
1040 atm_file =
'../AtmProfile_info/Density_April.txt' 1048 atm_read_levels_apr:
DO 1050 atm_level = atm_level + 1
1052 READ(
atm_unit,*,iostat=io ) rho_atm_apr(atm_level,1:8)
1056 END DO atm_read_levels_apr
1064 atm_file =
'../AtmProfile_info/Density_Jan.txt' 1072 atm_read_levels_jan:
DO 1074 atm_level = atm_level + 1
1076 READ(
atm_unit,*,iostat=io) rho_atm_jan(atm_level,1:8)
1080 END DO atm_read_levels_jan
1088 atm_file =
'../AtmProfile_info/Density_July.txt' 1096 atm_read_levels_jul:
DO 1098 atm_level = atm_level + 1
1100 READ(
atm_unit,*,iostat=io) rho_atm_jul(atm_level,1:8)
1104 END DO atm_read_levels_jul
1112 atm_file =
'../AtmProfile_info/Density_Oct.txt' 1120 atm_read_levels_oct:
DO 1122 atm_level = atm_level + 1
1124 READ(
atm_unit,*,iostat=io) rho_atm_oct(atm_level,1:8)
1128 n_atm_levels = atm_level
1130 END DO atm_read_levels_oct
1140 atm_file =
'../AtmProfile_info/Pressure_April.txt' 1148 pres_read_levels_apr:
DO 1150 atm_level = atm_level + 1
1152 READ(
atm_unit,*,iostat=io) pres_atm_apr(atm_level,1:8)
1156 END DO pres_read_levels_apr
1164 atm_file =
'../AtmProfile_info/Pressure_Jan.txt' 1172 pres_read_levels_jan:
DO 1174 atm_level = atm_level + 1
1176 READ(
atm_unit,*,iostat=io) pres_atm_jan(atm_level,1:8)
1180 END DO pres_read_levels_jan
1188 atm_file =
'../AtmProfile_info/Pressure_July.txt' 1196 pres_read_levels_jul:
DO 1198 atm_level = atm_level + 1
1200 READ(
atm_unit,*,iostat=io) pres_atm_jul(atm_level,1:8)
1204 END DO pres_read_levels_jul
1213 atm_file =
'../AtmProfile_info/Pressure_Oct.txt' 1221 pres_read_levels_oct:
DO 1223 atm_level = atm_level + 1
1225 READ(
atm_unit,*,iostat=io) pres_atm_oct(atm_level,1:8)
1229 n_atm_levels = atm_level
1231 END DO pres_read_levels_oct
1242 atm_file =
'../AtmProfile_info/Temp_April.txt' 1250 temp_read_levels_apr:
DO 1252 atm_level = atm_level + 1
1254 READ(
atm_unit,*,iostat=io) temp_atm_apr(atm_level,1:8)
1258 END DO temp_read_levels_apr
1266 atm_file =
'../AtmProfile_info/Temp_Jan.txt' 1274 temp_read_levels_jan:
DO 1276 atm_level = atm_level + 1
1278 READ(
atm_unit,*,iostat=io) temp_atm_jan(atm_level,1:8)
1282 END DO temp_read_levels_jan
1290 atm_file =
'../AtmProfile_info/Temp_July.txt' 1298 temp_read_levels_jul:
DO 1300 atm_level = atm_level + 1
1302 READ(
atm_unit,*,iostat=io) temp_atm_jul(atm_level,1:8)
1306 END DO temp_read_levels_jul
1315 atm_file =
'../AtmProfile_info/Temp_Oct.txt' 1323 temp_read_levels_oct:
DO 1325 atm_level = atm_level + 1
1327 READ(
atm_unit,*,iostat=io) temp_atm_oct(atm_level,1:8)
1331 n_atm_levels = atm_level
1333 END DO temp_read_levels_oct
1337 ALLOCATE( h_levels(n_atm_levels) )
1343 IF ((
month .GE. 0.0_wp) .and. (
month .LE. 1.0_wp))
THEN 1345 rho_atm_month(1:n_atm_levels,1:8) = rho_atm_jan(1:n_atm_levels,1:8)
1346 pres_atm_month(1:n_atm_levels,1:8) = pres_atm_jan(1:n_atm_levels,1:8)
1347 temp_atm_month(1:n_atm_levels,1:8) = temp_atm_jan(1:n_atm_levels,1:8)
1349 ELSEIF ((
month .GT. 1.0_wp) .and. (
month .LE. 2.0_wp))
THEN 1351 rho_atm_month(1:n_atm_levels,1:8) = rho_atm_apr(1:n_atm_levels,1:8)
1352 pres_atm_month(1:n_atm_levels,1:8) = pres_atm_apr(1:n_atm_levels,1:8)
1353 temp_atm_month(1:n_atm_levels,1:8) = temp_atm_apr(1:n_atm_levels,1:8)
1355 ELSEIF ((
month .GT. 2.0_wp) .and. (
month .LE. 3.0_wp))
THEN 1357 rho_atm_month(1:n_atm_levels,1:8) = rho_atm_jul(1:n_atm_levels,1:8)
1358 pres_atm_month(1:n_atm_levels,1:8) = pres_atm_jul(1:n_atm_levels,1:8)
1359 temp_atm_month(1:n_atm_levels,1:8) = temp_atm_jul(1:n_atm_levels,1:8)
1361 ELSEIF ((
month .GT. 3.0_wp) .and. (
month .LE. 4.0_wp))
THEN 1363 rho_atm_month(1:n_atm_levels,1:8) = rho_atm_apr(1:n_atm_levels,1:8)
1364 pres_atm_month(1:n_atm_levels,1:8) = pres_atm_apr(1:n_atm_levels,1:8)
1365 temp_atm_month(1:n_atm_levels,1:8) = temp_atm_apr(1:n_atm_levels,1:8)
1369 IF ( (
lat .GE. 0.0_wp ) .AND. (
lat .LE. 15.0_wp ) )
THEN 1371 coeff_lat = 1.0_wp - (
lat - 0.0_wp ) / ( 15.0_wp - 0.0_wp )
1374 rho_atm_month(1:n_atm_levels,2) + ( 1.0_wp - coeff_lat ) * &
1375 rho_atm_month(1:n_atm_levels,3)
1378 pres_atm_month(1:n_atm_levels,2) + ( 1.0_wp - coeff_lat ) * &
1379 pres_atm_month(1:n_atm_levels,3)
1382 temp_atm_month(1:n_atm_levels,2) + ( 1.0_wp - coeff_lat ) * &
1383 temp_atm_month(1:n_atm_levels,3)
1385 ELSEIF ( (
lat .GT. 15.0_wp ) .AND. (
lat .LE. 30.0_wp ) )
THEN 1387 coeff_lat = 1.0_wp - (
lat - 15.0_wp ) / ( 30.0_wp - 15.0_wp )
1390 rho_atm_month(1:n_atm_levels,3) + ( 1.0_wp - coeff_lat ) * &
1391 rho_atm_month(1:n_atm_levels,4)
1394 pres_atm_month(1:n_atm_levels,3) + ( 1.0_wp - coeff_lat ) * &
1395 pres_atm_month(1:n_atm_levels,5)
1398 temp_atm_month(1:n_atm_levels,3) + ( 1.0_wp - coeff_lat ) * &
1399 temp_atm_month(1:n_atm_levels,5)
1401 ELSEIF ( (
lat .GT. 30.0_wp ) .AND. (
lat .LE. 45.0_wp ) )
THEN 1403 coeff_lat = 1.0_wp - (
lat - 30.0_wp ) / ( 45.0_wp - 30.0_wp )
1406 rho_atm_month(1:n_atm_levels,4) + ( 1.0_wp - coeff_lat ) * &
1407 rho_atm_month(1:n_atm_levels,5)
1410 pres_atm_month(1:n_atm_levels,4) + ( 1.0_wp - coeff_lat ) * &
1411 pres_atm_month(1:n_atm_levels,5)
1414 temp_atm_month(1:n_atm_levels,4) + ( 1.0_wp - coeff_lat ) * &
1415 temp_atm_month(1:n_atm_levels,5)
1417 ELSEIF ( (
lat .GT. 45.0_wp ) .AND. (
lat .LE. 60.0_wp ) )
THEN 1419 coeff_lat = 1.0_wp - (
lat - 45.0_wp ) / ( 60.0_wp - 45.0_wp )
1422 rho_atm_month(1:n_atm_levels,5) + ( 1.0_wp - coeff_lat ) * &
1423 rho_atm_month(1:n_atm_levels,6)
1426 pres_atm_month(1:n_atm_levels,5) + ( 1.0_wp - coeff_lat ) * &
1427 pres_atm_month(1:n_atm_levels,6)
1430 temp_atm_month(1:n_atm_levels,5) + ( 1.0_wp - coeff_lat ) * &
1431 temp_atm_month(1:n_atm_levels,6)
1433 ELSEIF ( (
lat .GT. 60.0_wp ) .AND. (
lat .LE. 75.0_wp ) )
THEN 1435 coeff_lat = 1.0_wp - (
lat - 60.0_wp ) / ( 75.0_wp - 60.0_wp )
1438 rho_atm_month(1:n_atm_levels,6) + ( 1.0_wp - coeff_lat ) * &
1439 rho_atm_month(1:n_atm_levels,7)
1442 pres_atm_month(1:n_atm_levels,6) + ( 1.0_wp - coeff_lat ) * &
1443 pres_atm_month(1:n_atm_levels,7)
1446 temp_atm_month(1:n_atm_levels,6) + ( 1.0_wp - coeff_lat ) * &
1447 temp_atm_month(1:n_atm_levels,7)
1449 ELSEIF ( (
lat .GT. 75.0_wp ) .AND. (
lat .LE. 90.0_wp ) )
THEN 1451 coeff_lat = 1.0_wp - (
lat - 75.0_wp ) / ( 90.0_wp - 75.0_wp )
1454 rho_atm_month(1:n_atm_levels,7) &
1455 + ( 1.0_wp - coeff_lat ) * rho_atm_month(1:n_atm_levels,8)
1458 pres_atm_month(1:n_atm_levels,7) &
1459 + ( 1.0_wp - coeff_lat ) * pres_atm_month(1:n_atm_levels,8)
1462 temp_atm_month(1:n_atm_levels,7) &
1463 + ( 1.0_wp - coeff_lat ) * temp_atm_month(1:n_atm_levels,8)
1470 h_levels(1:n_atm_levels) = 1000.0_wp * temp_atm_month(1:n_atm_levels,1)
1472 ELSEIF ( read_atm_profile .EQ.
'card' )
THEN 1476 WRITE(*,*)
'search atm_profile' 1478 atm_profile_search:
DO 1482 IF( trim(card) ==
'ATM_PROFILE' )
THEN 1484 EXIT atm_profile_search
1488 END DO atm_profile_search
1492 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'n_atm_profile',n_atm_profile
1494 ALLOCATE( atm_profile(7,n_atm_profile) )
1495 ALLOCATE( atm_profile0(7,n_atm_profile) )
1497 DO i = 1, n_atm_profile
1499 READ(
inp_unit,*) atm_profile0(1:7,i)
1501 atm_profile(1:7,i) = atm_profile0(1:7,i)
1503 atm_profile(1,i) = atm_profile(1,i) * 1000.0_wp
1506 atm_profile(3,i) = atm_profile(3,i) * 100.0_wp
1508 atm_profile(6,i) = atm_profile(6,i) * wind_mult_coeff
1509 atm_profile(7,i) = atm_profile(7,i) * wind_mult_coeff
1521 ELSEIF ( read_atm_profile .EQ.
'standard' )
THEN 1524 READ(
inp_unit,std_atm_parameters,iostat=ios )
1526 IF ( ios .NE. 0 )
THEN 1528 WRITE(*,*)
'IOSTAT=',ios
1529 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1530 WRITE(*,*)
'Please check the input file' 1531 WRITE(*,std_atm_parameters)
1536 IF ( .NOT.
isset(u_max) )
THEN 1539 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1541 WRITE(*,std_atm_parameters)
1543 WRITE(*,*)
'Please check u_max value (>0 [m/s])' 1544 WRITE(*,*)
'u_max =',u_max
1550 IF ( .NOT.
isset(sphu_atm0) )
THEN 1552 IF ( .NOT.
isset(rel_hu) )
THEN 1555 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1557 WRITE(*,std_atm_parameters)
1559 WRITE(*,*)
'Please assign sphu_atm0 or rel_hu' 1563 ELSEIF ( ( rel_hu .LT. 0.0_wp ) .OR. ( rel_hu .GT. 1.0_wp ) )
THEN 1566 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1568 WRITE(*,std_atm_parameters)
1570 WRITE(*,*)
'Please check rel_hu value (0<=rel_hu<=1)' 1571 WRITE(*,*)
'rel_hu =',rel_hu
1579 IF (
isset(rel_hu) )
THEN 1582 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1584 WRITE(*,std_atm_parameters)
1586 WRITE(*,*)
'Please assign only sphu_atm0 or rel_hu' 1592 IF ( sphu_atm0 .LE. 2.0e-6_wp )
THEN 1594 WRITE(*,*)
'WARNING: sphu_atm0 value at sea level' 1595 WRITE(*,*)
'should be higher than value at tropopause' 1596 WRITE(*,*)
'base (2.0E-6 kg/kg)' 1597 WRITE(*,*)
'Value changed to 2.01E-6' 1599 sphu_atm0 = 2.01e-6_wp
1610 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1612 WRITE(*,std_atm_parameters)
1614 WRITE(*,*)
'Please check p_atm0 value (Pa)' 1615 WRITE(*,*)
'p_atm0 =',
p_atm0 1628 WRITE(*,*)
'ERROR: problem with namelist STD_ATM_PARAMETERS' 1630 WRITE(*,std_atm_parameters)
1632 WRITE(*,*)
'Please check t_atm0 value (K)' 1633 WRITE(*,*)
't_atm0 =',
t_atm0 1644 WRITE(
bak_unit, std_atm_parameters)
1651 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read atm_parameters: done' 1653 READ(
inp_unit,initial_values,iostat=ios)
1655 IF ( ios .NE. 0 )
THEN 1657 WRITE(*,*)
'IOSTAT=',ios
1658 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 1659 WRITE(*,*)
'Please check the input file' 1660 WRITE(*,initial_values)
1665 ALLOCATE ( rvolcgas(n_gas) , cpvolcgas(n_gas) , &
1666 volcgas_mass_fraction(n_gas) , volcgas_mol_wt(n_gas) , &
1667 rhovolcgas(n_gas) , volcgas_mass_fraction0(n_gas) )
1679 WRITE(*,*)
'WARNING: you should not assign mfr when inversion is true' 1680 WRITE(*,*)
'in the input file: mfr0',
mfr0 1687 WRITE(*,*)
'WARNING: you should not assign mfr when inversion is true' 1688 WRITE(*,*)
'in the input file: log10_mfr',
log10_mfr 1695 WRITE(*,*)
'WARNING: you should not assign R0 and W0 with inversion=true' 1706 WRITE(*,*)
'WARNING: you should not assign W0,W_MIN and W_MAX with inversion=true' 1708 WRITE(*,*)
'W_MIN',
w_min 1709 WRITE(*,*)
'W_MAX',
w_max 1719 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 1721 WRITE(*,inversion_parameters)
1723 WRITE(*,*)
'Please check W_MIN value (>0 [m/s])' 1724 WRITE(*,*)
'W_MIN =',
w_min 1734 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 1736 WRITE(*,inversion_parameters)
1738 WRITE(*,*)
'Please check W_MAX value (>W_MIN [m/s])' 1739 WRITE(*,*)
'W_MAX =',
w_max 1752 WRITE(*,*)
'WARNING: you should not assign R0,R_MIN and R_MAX with inversion=true' 1754 WRITE(*,*)
'R_MIN',
r_min 1755 WRITE(*,*)
'R_MAX',
r_max 1765 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 1767 WRITE(*,inversion_parameters)
1769 WRITE(*,*)
'Please check R_MIN value (>0 [m])' 1770 WRITE(*,*)
'R_MIN =',
r_min 1779 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 1781 WRITE(*,inversion_parameters)
1783 WRITE(*,*)
'Please check R_MAX value (>R_MIN [m])' 1784 WRITE(*,*)
'R_MAX =',
r_max 1797 WRITE(*,*)
'ERROR: problem with namelist INVERSION_PARAMETERS' 1799 WRITE(*,inversion_parameters)
1801 WRITE(*,*)
'Please check N_VALUES value (>0 [integer])' 1815 WRITE(*,*)
'WARNING: only one of these parameters can be assigned in' 1824 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 1826 WRITE(*,initial_values)
1828 WRITE(*,*)
'Please check MFR0 value (>0 [kg/s])' 1829 WRITE(*,*)
'MFR0 =',
mfr0 1848 'WARNING: initial radius calculated from MER and velocity' 1855 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 1857 WRITE(*,initial_values)
1859 WRITE(*,*)
'Not enough input parameters assigned in INITIAL_VALUES' 1860 WRITE(*,*)
'MFR0',
mfr0 1874 'WARNING: initial radius calculated from MER and radius' 1881 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 1883 WRITE(*,initial_values)
1885 WRITE(*,*)
'Not enough input parameters assigned in INITIAL_VALUES' 1886 WRITE(*,*)
'MFR0',
mfr0 1899 WRITE(*,*)
'ERROR: problem with namelist INITIAL_VALUES' 1901 WRITE(*,initial_values)
1903 WRITE(*,*)
'Not enough input parameters assigned in INITIAL_VALUES' 1904 WRITE(*,*)
'MFR0',
mfr0 1915 WRITE(*,*)
'ERROR: too many input parameters: input log10_mfr or w0 and r0' 1923 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'read initial_parameters: done' 1928 READ(
inp_unit, aggregation_parameters,iostat=ios)
1930 IF ( ios .NE. 0 )
THEN 1932 WRITE(*,*)
'IOSTAT=',ios
1933 WRITE(*,*)
'ERROR: problem with namelist AGGREGATION_PARAMETERS' 1934 WRITE(*,*)
'Please check the input file' 1935 WRITE(*,aggregation_parameters)
1942 aggregation_model =
lower(aggregation_model)
1944 IF ( aggregation_model.EQ.
'costa')
THEN 1949 WRITE(*,*)
'ERROR: only wet aggregation is possible' 1950 WRITE(*,*)
'with ''Costa'' aggregation model' 1957 ELSEIF ( aggregation_model.EQ.
'constant')
THEN 1959 IF ( .not.
isset(particles_beta0) )
THEN 1962 WRITE(*,*)
'ERROR: particles_beta0 requested' 1963 WRITE(*,*)
'with ''constant'' aggregation model' 1964 WRITE(*,*)
'PARTICLES_BETA0 = ',particles_beta0
1970 ELSEIF ( aggregation_model.NE.
'brownian')
THEN 1972 WRITE(*,*)
'ERROR: problem with namelist AGGREGATION_PARAMETERS' 1973 WRITE(*,*)
'Please check aggregation_model:',aggregation_model
1978 WRITE(
bak_unit, aggregation_parameters)
1986 READ(
inp_unit,hysplit_parameters,iostat=ios)
1988 IF ( ios .NE. 0 )
THEN 1990 WRITE(*,*)
'IOSTAT=',ios
1991 WRITE(*,*)
'ERROR: problem with namelist HYSPLIT_PARAMETERS' 1992 WRITE(*,*)
'Please check the input file' 1993 WRITE(*,hysplit_parameters)
2001 WRITE(*,*)
'ERROR: problem with namelist HYSPLIT_PARAMETERS' 2003 WRITE(*,hysplit_parameters)
2005 WRITE(*,*)
'Please check hy_deltaz value (>0 [m])' 2016 WRITE(*,*)
'ERROR: problem with namelist HYSPLIT_PARAMETERS' 2017 WRITE(*,*)
'Please check n_cloud value (>0 [integer])' 2018 WRITE(*,*)
'n_cloud =',
n_cloud 2026 WRITE(
bak_unit, hysplit_parameters)
2042 rvolcgas(1:n_gas) = -1.0_wp
2043 cpvolcgas(1:n_gas) = -1.0_wp
2044 volcgas_mol_wt(1:n_gas) = -1.0_wp
2045 volcgas_mass_fraction0(1:n_gas) = -1.0_wp
2047 IF ( n_gas .GT. 0.0_wp )
THEN 2051 IF ( any( rvolcgas(1:n_gas) ==-1.0_wp ) )
THEN 2053 WRITE(*,*)
'Error in namelist VOLCGAS PARAMETERS' 2054 WRITE(*,*)
'Please check the values of rvolcgas',rvolcgas(1:n_gas)
2059 IF ( any( cpvolcgas(1:n_gas) .EQ. -1.0_wp ) )
THEN 2061 WRITE(*,*)
'Error in namelist VOLCGAS PARAMETERS' 2062 WRITE(*,*)
'Please check the values of cpvolcgas',cpvolcgas(1:n_gas)
2067 IF ( any( volcgas_mol_wt(1:n_gas) .EQ. -1.0_wp ) )
THEN 2069 WRITE(*,*)
'Error in namelist VOLCGAS PARAMETERS' 2070 WRITE(*,*)
'Please check the values of rvolcgas' , &
2071 volcgas_mol_wt(1:n_gas)
2076 IF ( any( volcgas_mass_fraction0(1:n_gas) .EQ. -1.0_wp ) )
THEN 2078 WRITE(*,*)
'Error in namelist VOLCGAS PARAMETERS' 2079 WRITE(*,*)
'Please check the values of rvolcgas', &
2080 volcgas_mass_fraction0(1:n_gas)
2086 IF ( ( sum( volcgas_mass_fraction0(1:n_gas) ) + water_mass_fraction0 ) &
2089 WRITE(*,*)
'WARNING: Sum of gas mass fractions :', &
2090 sum( volcgas_mass_fraction0(1:n_part) + water_mass_fraction0 )
2098 rvolcgas_mix = 0.0_wp
2099 cpvolcgas_mix = 0.0_wp
2100 rrhovolcgas_mix = 0.0_wp
2102 CALL initialize_meteo
2106 IF ( n_gas .GT. 0 )
THEN 2110 rvolcgas_mix = rvolcgas_mix + volcgas_mass_fraction0(i_gas) &
2113 cpvolcgas_mix = cpvolcgas_mix + volcgas_mass_fraction0(i_gas) &
2116 rrhovolcgas_mix = rrhovolcgas_mix + volcgas_mass_fraction0(i_gas) &
2117 / ( pa / ( rvolcgas(i_gas) * t_mix0 ) )
2121 rvolcgas_mix = rvolcgas_mix / sum( volcgas_mass_fraction0(1:n_gas) )
2123 cpvolcgas_mix = cpvolcgas_mix / sum( volcgas_mass_fraction0(1:n_gas) )
2125 rhovolcgas_mix = sum(volcgas_mass_fraction0(1:n_gas)) / rrhovolcgas_mix
2127 volcgas_mix_mass_fraction = sum(volcgas_mass_fraction0(1:n_gas))
2131 rvolcgas_mix = 0.0_wp
2133 cpvolcgas_mix = 0.0_wp
2135 rhovolcgas_mix = 0.0_wp
2137 volcgas_mix_mass_fraction = 0.0_wp
2143 WRITE(*,*)
'volcgas_mix_mass_fraction',volcgas_mix_mass_fraction
2147 rhowv = pa / ( rwv * t_mix0 )
2156 IF ( n_gas .GT. 0 )
THEN 2159 + volcgas_mix_mass_fraction / rhovolcgas_mix )
2169 WRITE(*,*)
'rvolcgas_mix :', rvolcgas_mix
2170 WRITE(*,*)
'cpvolcgas_mix :', cpvolcgas_mix
2171 WRITE(*,*)
'rhovolcgas_mix :', rhovolcgas_mix
2172 WRITE(*,*)
'rhowv :', rhowv
2173 WRITE(*,*)
'rho_gas :', rho_gas
2178 IF ( n_gas .GT. 0 )
WRITE(
bak_unit, volcgas_parameters)
2180 IF ( sum( solid_partial_mass_fraction(1:n_part) ) .NE. 1.0_wp )
THEN 2182 WRITE(*,*)
'WARNING: Sum of solid mass fractions :', &
2183 sum( solid_partial_mass_fraction(1:n_part) )
2185 solid_partial_mass_fraction(1:n_part) = &
2186 solid_partial_mass_fraction(1:n_part) &
2187 / sum( solid_partial_mass_fraction(1:n_part) )
2191 WRITE(*,*)
' Modified solid mass fractions :', &
2192 solid_partial_mass_fraction(1:n_part)
2198 solid_partial_mass_fraction0 = solid_partial_mass_fraction
2201 solid_mass_fraction0(1:n_part) = ( 1.0_wp - water_mass_fraction0 &
2202 - volcgas_mix_mass_fraction ) * solid_partial_mass_fraction(1:n_part)
2204 WRITE(*,*)
'---------- INITIALIZATION ------------' 2206 WRITE(*,*)
'SOLID PARTIAL MASS DISTRIBUTOINS' 2210 DO i_part = 1,n_part
2216 IF ( distribution .EQ.
'lognormal' )
THEN 2223 ELSEIF ( distribution .EQ.
'bin' )
THEN 2227 mom0(1,i_sect,i_part) = bin_partial_mass_fraction(
n_sections-i_sect+1,i_part)
2233 mom0(1,:,i_part) = mom0(1,:,i_part) / sum( mom0(1,:,i_part) )
2237 WRITE(*,*)
'Particle phase:',i_part
2240 WRITE(*,
"(30ES8.1)") mom0(1,
n_sections:1:-1,i_part)
2257 DO i_part = 1,n_part
2262 rho_solid_avg(i_part) = 1.0_wp / ( sum( f_quad(:,:,i_part) * &
2263 w_quad(:,:,i_part) * m_quad(:,:,i_part) / rho_quad(:,:,i_part) ) / &
2264 sum(f_quad(:,:,i_part) * w_quad(:,:,i_part) * m_quad(:,:,i_part) ) )
2268 WRITE(*,*)
'rho avg',rho_solid_avg(i_part)
2277 rho_solid_tot_avg = 1.0_wp / sum( solid_partial_mass_fraction(1:n_part) / &
2278 rho_solid_avg(1:n_part) )
2283 WRITE(*,*)
'******* CHECK ON MASS AND VOLUME FRACTIONS *******' 2284 WRITE(*,*)
'rho solid avg', rho_solid_tot_avg
2288 IF ( initial_neutral_density )
THEN 2294 solid_tot_volume_fraction0 = ( rho_mix - rho_gas ) / &
2295 ( rho_solid_tot_avg - rho_gas )
2314 WRITE(*,*)
'solid_tot_volume_fraction0',solid_tot_volume_fraction0
2315 WRITE(*,*)
'rho_gas',rho_gas
2316 WRITE(*,*)
'rho_mix',rho_mix
2319 WRITE(*,*)
'solid_mass_fractions',solid_mass_fraction0(1:n_part)
2323 DO i_part = 1,n_part
2327 alfa_s = solid_partial_mass_fraction(i_part) * rho_solid_tot_avg / &
2328 rho_solid_avg(i_part)
2331 solid_volume_fraction0(i_part) = solid_tot_volume_fraction0 * alfa_s
2335 WRITE(*,*)
'i_part =',i_part
2336 WRITE(*,*)
'alfa_s',i_part,alfa_s
2337 WRITE(*,*)
'solid_volume_fraction0',solid_volume_fraction0(i_part)
2338 WRITE(*,*)
'solid_partial_mass_fract', &
2339 solid_partial_mass_fraction(i_part)
2340 WRITE(*,*)
'solid_mass_fract', solid_mass_fraction0(i_part)
2361 WRITE(*,*)
'Plume equations integrated up to neutral buoyance level' 2364 READ(
inp_unit, umbrella_run_parameters,iostat=ios )
2366 IF ( ios .NE. 0 )
THEN 2368 WRITE(*,*)
'IOSTAT=',ios
2369 WRITE(*,*)
'ERROR: problem with namelist UMBRELLA_RUN_PARAMETERS' 2370 WRITE(*,*)
'Please check the input file' 2371 WRITE(*,umbrella_run_parameters)
2376 IF ( ( .NOT.
isset(c_d) ) .OR. ( c_d .LT. 0.0_wp ) )
THEN 2379 WRITE(*,*)
'ERROR: problem with namelist UMBRELLA_RUN_PARAMETERS' 2381 WRITE(*,umbrella_run_parameters)
2383 WRITE(*,*)
'Please check C_D value' 2384 WRITE(*,*)
'C_D =',c_d
2391 WRITE(
bak_unit, umbrella_run_parameters)
2397 READ(
inp_unit,numeric_parameters,iostat=ios )
2399 IF ( ios .NE. 0 )
THEN 2401 WRITE(*,*)
'IOSTAT=',ios
2402 WRITE(*,*)
'ERROR: problem with namelist NUMERIC_PARAMETERS' 2403 WRITE(*,*)
'Please check the input file' 2404 WRITE(*,numeric_parameters)
2410 WRITE(
bak_unit, numeric_parameters)
2418 WRITE(*,*)
'WARNING: no correct solver scheme selected',
solver_scheme 2419 WRITE(*,*)
'Chose between: LxF, GFORCE or KT' 2424 IF ( (
cfl .GT. 0.25 ) .OR. (
cfl .LT. 0.0_wp ) )
THEN 2426 WRITE(*,*)
'WARNING: wrong value of cfl ',
cfl 2427 WRITE(*,*)
'Choose a value between 0.0 and 0.25' 2437 IF ( ( maxval(
limiter(1:n_vars)) .GT. 3 ) .OR. &
2438 ( minval(
limiter(1:n_vars)) .LT. 0 ) )
THEN 2440 WRITE(*,*)
'WARNING: wrong limiter ',
limiter(1:n_vars)
2441 WRITE(*,*)
'Choose among: none, minmod,superbee,van_leer' 2448 WRITE(*,*)
'Linear reconstruction and b. c. applied to variables:' 2449 WRITE(*,*)
'h,hu,hv' 2456 WRITE(*,*)
'WARNING: wrong value of reconstr_coeff ',
reconstr_coeff 2457 WRITE(*,*)
'Change the value between 0.0 and 1.0 in the input file' 2470 IF ( read_atm_profile .EQ.
'card' )
THEN 2472 WRITE(
bak_unit,*)
'''ATM_PROFILE''' 2475 DO i = 1, n_atm_profile
2477 WRITE(
bak_unit,107) atm_profile0(1:7,i)
2479 107
FORMAT(7(1x,es14.7))
2488 IF (
verbose_level .GE. 1 )
WRITE(*,*)
'end subroutine reainp' 2554 IF ( inversion_flag )
THEN 2561 187
FORMAT(1x,
' radius (m) ',1x,
' velocity (m/s) ',1x, &
2562 'MER (kg/s) ', 1x,
'plume height (m)',1x, &
2563 ' inversion ',1x,
'column regime')
2592 IF ( .NOT. umbrella_flag )
CLOSE(
dak_unit)
2630 INTEGER :: i_part , j_part , i_mom , i_sect
2634 CHARACTER(15) :: mom_str
2635 CHARACTER(LEN=2) :: i_part_string , i_sect_string
2642 IF (
z .EQ. vent_height )
THEN 2653 i_part_string =
lettera(i_part)
2654 i_sect_string =
lettera(i_sect)
2655 mom_str =
' rhoB'//i_part_string//
'_'//i_sect_string
2657 WRITE(
col_unit,98,advance=
"no") mom_str
2658 WRITE(
sed_unit,98,advance=
"no") mom_str
2674 96
FORMAT(1
x,
' z(m) ',1
x,
' r(m) ',1
x,
' x(m) ', &
2677 97
FORMAT(1
x,
' z(m) ',1
x,
' r(m) ',1
x,
' x(m) ', &
2678 1
x,
' y(m) ',1
x,
'mix.dens(kg/m3)',1
x,
'temperature(C)', &
2679 1
x,
' vert.vel.(m/s)',1
x,
' mag.vel.(m/s) ',1
x,
' d.a.massfract ', &
2680 1
x,
' w.v.massfract ',1
x,
' l.w.massfract ',1
x' i.massfract ',1
x)
2685 198
FORMAT(1
x,
'agr.massfract ')
2687 99
FORMAT(1
x,
' volgas.massf ')
2689 100
FORMAT(1
x,
' volgasmix.massf',1
x,
'atm.rho(kg/m3)',1
x,
' MFR(kg/s) ', &
2690 1
x,
'atm.temp(K) ', 1
x,
' atm.pres.(Pa) ')
2703 101
FORMAT(12(1
x,es16.9))
2704 141
FORMAT(4(1
x,es16.9))
2710 WRITE(
col_unit,102,advance=
"no")
mom(1,i_sect,i_part)
2717 102
FORMAT(1(1
x,es16.9))
2726 103
FORMAT(20(1
x,es16.9))
2730 104
FORMAT(1(1
x,es15.8))
2738 WRITE(
mom_unit,105,advance=
"no")
mom(i_mom,i_sect,i_part)
2746 105
FORMAT(1(1
x,es16.9))
2752 WRITE(*,*)
'******************' 2758 WRITE(*,*)
'******************' 2784 CHARACTER(20),
INTENT(IN) :: description
2786 REAL(wp),
INTENT(IN) :: value
2788 WRITE(
dak_unit,*) description,
value 2792 WRITE(*,*) description,
value 2820 REAL(wp),
INTENT(IN) :: r0,w_opt,opt_mfr,opt_height
2821 LOGICAL,
INTENT(IN) :: search_flag
2822 INTEGER,
INTENT(IN) :: opt_regime
2824 WRITE(
inversion_unit,181) r0,w_opt,opt_mfr,opt_height,search_flag,opt_regime
2826 181
FORMAT(2(2x,f15.8),1(1x,es15.8),1(1x,f15.6)4x,l,7x,i4)
2848 CHARACTER(len=8) :: x1 , x2
2850 INTEGER :: i_part , i_sect
2852 REAL(wp),
ALLOCATABLE :: delta_solid(:)
2860 WRITE(
hy_unit,107,advance=
"no")
2864 WRITE(x1,
'(I2.2)') i_part
2868 WRITE(x2,
'(I2.2)') i_sect
2870 WRITE(
hy_unit,108,advance=
"no")
'S_'//trim(x1)//
'_'//trim(x2)//
' (kg/s)' 2878 ALLOCATE( delta_solid(n_tot) )
2880 delta_solid(1:
n_part) = 0.0_wp
2885 DEALLOCATE( delta_solid )
2889 107
FORMAT(1x,
' x (m) ',1x,
' y (m) ', 1x,
' z (m) ')
2893 110
FORMAT(50(1x,e15.8))
2926 CHARACTER(len=8) :: x1 , x2
2928 INTEGER :: i , j , n_hy
2930 REAL(wp) :: temp_k,mfr
2931 REAL(wp) :: da_mf,wv_mf,lw_mf, ice_mf, volcgas_tot_mf
2932 REAL(wp),
ALLOCATABLE :: x_col(:) , y_col(:) , z_col(:) , r_col(:)
2933 REAL(wp),
ALLOCATABLE :: mom_col(:,:) , mfr_col(:)
2934 REAL(wp),
ALLOCATABLE :: volcgas_mf(:,:)
2935 REAL(wp),
ALLOCATABLE :: solid_mass_flux(:,:) , solid_mass_loss_cum(:,:)
2936 REAL(wp),
ALLOCATABLE :: volcgas_mass_flux(:,:)
2937 REAL(wp) :: z_min , z_max , z_bot , z_top , x_top , x_bot , y_bot , y_top
2938 REAL(wp) :: r_bot , r_top
2939 REAL(wp) :: solid_bot , solid_top
2940 REAL(wp) :: solid_loss_bot , solid_loss_top
2942 REAL(wp),
ALLOCATABLE :: delta_solid(:) , cloud_solid(:)
2943 REAL(wp),
ALLOCATABLE :: cloud_gas(:)
2944 REAL(wp),
ALLOCATABLE :: solid_tot(:)
2947 REAL(wp) :: angle_release , start_angle
2948 REAL(wp) :: delta_angle
2949 REAL(wp) :: dx , dy , dz , dv(3)
2951 REAL(wp) :: vect(3) , vect0(3) , v(3) , c , s
2952 REAL(wp) :: mat_v(3,3) , mat_R(3,3)
2954 INTEGER :: i_part , i_sect
2957 INTEGER :: read_col_unit , read_sed_unit
2967 ALLOCATE( solid_mass_flux(n_tot,
col_lines) )
2968 ALLOCATE( solid_mass_loss_cum(n_tot,
col_lines) )
2969 ALLOCATE( volcgas_mass_flux(n_gas,
col_lines) )
2970 ALLOCATE( delta_solid(n_tot) , cloud_solid(n_tot) )
2971 ALLOCATE( cloud_gas(n_gas) )
2972 ALLOCATE( solid_tot(n_tot) )
2979 READ(read_col_unit,*)
2983 READ(read_col_unit,111) z_col(i) , r_col(i) , x_col(i) , y_col(i) , &
2984 rho_mix , temp_k ,
w ,
mag_u, da_mf , wv_mf , lw_mf , ice_mf , &
2985 mom_col(1:n_tot,i) , volcgas_mf(1:n_gas,i) , volcgas_tot_mf , &
2986 rho_atm , mfr_col(i) , ta, pa
2988 solid_mass_flux(1:n_tot,i) = mom_col(1:n_tot,i) * pi_g * r_col(i)**2 &
2991 volcgas_mass_flux(1:n_gas,i) = volcgas_mf(1:n_gas,i) &
3005 111
FORMAT(90(1
x,es16.9))
3007 CLOSE(read_col_unit)
3014 READ(read_sed_unit,*)
3018 READ(read_sed_unit,112) z_col(i) , r_col(i) , x_col(i) , y_col(i) , &
3019 solid_mass_loss_cum(1:n_tot,i)
3023 112
FORMAT(200(1
x,es16.9))
3025 CLOSE(read_sed_unit)
3029 WRITE(
hy_unit,107,advance=
"no")
3033 WRITE(x1,
'(I2.2)') i_part
3037 WRITE(x2,
'(I2.2)') i_sect
3039 WRITE(
hy_unit,108,advance=
"no")
'S_'//trim(x1)//
'_'//trim(x2)//
' (kg/s)' 3049 IF ( nbl_stop )
THEN 3059 n_hy = floor( ( z_max - z_min ) /
hy_deltaz )
3061 solid_tot(1:n_tot) = 0.0_wp
3072 CALL interp_1d_scalar(z_col, x_col, z_bot, x_bot)
3073 CALL interp_1d_scalar(z_col, x_col, z_top, x_top)
3075 CALL interp_1d_scalar(z_col, x_col, z_bot, y_bot)
3076 CALL interp_1d_scalar(z_col, x_col, z_top, y_top)
3078 CALL interp_1d_scalar(z_col, r_col, z_bot, r_bot)
3079 CALL interp_1d_scalar(z_col, r_col, z_top, r_top)
3085 CALL interp_1d_scalar(z_col, solid_mass_loss_cum(j,:), z_bot, solid_loss_bot)
3086 CALL interp_1d_scalar(z_col, solid_mass_loss_cum(j,:), z_top, solid_loss_top)
3088 delta_solid(j) = abs(solid_loss_top - solid_loss_bot)
3092 IF ( n_cloud .EQ. 1 )
THEN 3094 IF ( verbose_level .GE. 1 )
THEN 3096 WRITE(*,110) 0.5_wp * ( x_top + x_bot ) , 0.5_wp * ( y_top+y_bot ) , &
3097 0.5_wp * ( z_top + z_bot ) , delta_solid(1:
n_part)
3103 WRITE(
hy_unit,110) 0.5_wp * ( x_top+x_bot ) , 0.5_wp * ( y_top+y_bot ) ,&
3104 0.5_wp * ( z_top + z_bot ) , delta_solid(1:n_tot)
3110 IF (
u_atm .LT. 1.0d+3 )
THEN 3112 delta_angle = 2.0_wp*pi_g/n_cloud
3116 delta_angle = pi_g / ( n_cloud - 1.0_wp )
3124 angle_release = (j-1) * delta_angle - 0.5_wp*pi_g
3126 dx = 0.5_wp* ( r_bot + r_top ) * cos(start_angle + angle_release)
3127 dy = 0.5_wp* ( r_bot + r_top ) * sin(start_angle + angle_release)
3137 IF ( verbose_level .GE. 1 )
THEN 3139 WRITE(*,110) 0.5_wp * ( x_top + x_bot ) + dx , &
3140 0.5_wp * ( y_top + y_bot ) + dy , &
3141 0.5_wp * ( z_top + z_bot ) + dz , &
3142 delta_solid(1:n_tot)/n_cloud
3146 WRITE(
hy_unit,110) 0.5_wp * ( x_top + x_bot ) + dx , &
3147 0.5_wp * ( y_top + y_bot ) + dy , &
3148 0.5_wp * ( z_top + z_bot ) + dz , &
3149 delta_solid(1:n_tot)/n_cloud
3155 solid_tot(1:n_tot) = solid_tot(1:n_tot) + delta_solid(1:n_tot)
3167 CALL interp_1d_scalar(z_col, x_col, z_bot, x_bot)
3168 CALL interp_1d_scalar(z_col, x_col, z_top, x_top)
3170 CALL interp_1d_scalar(z_col, x_col, z_bot, y_bot)
3171 CALL interp_1d_scalar(z_col, x_col, z_top, y_top)
3173 CALL interp_1d_scalar(z_col, r_col, z_bot, r_bot)
3174 CALL interp_1d_scalar(z_col, r_col, z_top, r_top)
3177 CALL interp_1d_scalar(z_col, solid_mass_flux(j,:), z_top, solid_top)
3180 cloud_solid(j) = solid_top
3182 CALL interp_1d_scalar(z_col, solid_mass_loss_cum(j,:), z_bot, solid_loss_bot)
3183 CALL interp_1d_scalar(z_col, solid_mass_loss_cum(j,:), z_top, solid_loss_top)
3185 delta_solid(j) = solid_loss_top - solid_loss_bot
3189 solid_tot(1:n_tot) = solid_tot(1:n_tot) + delta_solid(1:n_tot)
3190 solid_tot(1:n_tot) = solid_tot(1:n_tot) + cloud_solid(1:n_tot)
3192 IF ( n_cloud .EQ. 1 )
THEN 3194 IF ( verbose_level .GE. 1 )
THEN 3196 WRITE(*,110) 0.5_wp * ( x_top + x_bot ) , 0.5_wp * ( y_top + y_bot ) , &
3197 0.5_wp * ( z_top + z_bot ) , delta_solid(1:n_tot)
3201 WRITE(
hy_unit,110) 0.5_wp * ( x_top + x_bot ) , 0.5_wp * ( y_top+y_bot ) , &
3202 0.5_wp * ( z_top + z_bot ) , delta_solid(1:n_tot)
3206 IF (
u_atm .LT. 1.0d+3 )
THEN 3208 delta_angle = 2.0_wp*pi_g/n_cloud
3212 delta_angle = pi_g / ( n_cloud - 1.0_wp )
3220 angle_release = (i-1) * delta_angle - 0.5_wp*pi_g
3222 dx = 0.5* ( r_bot + r_top ) * cos(start_angle + angle_release)
3223 dy = 0.5* ( r_bot + r_top ) * sin(start_angle + angle_release)
3227 IF ( verbose_level .GE. 1 )
THEN 3229 WRITE(*,110) 0.5_wp * ( x_top + x_bot ) + dx , &
3230 0.5_wp * ( y_top + y_bot ) + dy , &
3231 0.5_wp * ( z_top + z_bot ) + dz , &
3232 delta_solid(1:n_tot)/n_cloud
3236 WRITE(
hy_unit,110) 0.5_wp * ( x_top + x_bot ) + dx , &
3237 0.5_wp * ( y_top + y_bot ) + dy , &
3238 0.5_wp * ( z_top + z_bot ) + dz , &
3239 delta_solid(1:n_tot)/n_cloud
3247 IF ( umbrella_flag )
THEN 3249 IF ( verbose_level .GE. 1 )
THEN 3251 WRITE(*,110) x_top+dx , y_top+dy , z_top+dz , &
3252 cloud_solid(1:n_tot)
3256 WRITE(
hy_unit,110) x_top+dx , y_top+dy , z_top+dz , &
3257 cloud_solid(1:n_tot)
3261 IF ( n_cloud .EQ. 1 )
THEN 3263 IF ( verbose_level .GE. 1 )
THEN 3265 WRITE(*,110) x_top , y_top , z_top , cloud_solid(1:n_tot)
3269 WRITE(
hy_unit,110) x_top , y_top , z_top , cloud_solid(1:n_tot)
3277 IF (
u_atm .LT. 1.0d+3 )
THEN 3279 delta_angle = 2.0_wp*pi_g/n_cloud
3283 delta_angle = pi_g / ( n_cloud - 1.0_wp )
3290 angle_release = (i-1) * delta_angle - 0.5_wp*pi_g
3292 dx = 0.5* ( r_bot + r_top ) * cos(start_angle + angle_release)
3293 dy = 0.5* ( r_bot + r_top ) * sin(start_angle + angle_release)
3296 IF ( verbose_level .GE. 1 )
THEN 3298 WRITE(*,110) x_top+dx , y_top+dy , z_top+dz , &
3299 cloud_solid(1:n_tot)/n_cloud
3303 WRITE(
hy_unit,110) x_top+dx , y_top+dy , z_top+dz , &
3304 cloud_solid(1:n_tot)/n_cloud
3313 WRITE(*,*)
'Solid mass released in the atmosphere (kg/s): ',sum(solid_tot)
3315 107
FORMAT(1
x,
' x (m) ',1
x,
' y (m) ', 1
x,
' z (m) ')
3319 110
FORMAT(90(1
x,e15.8))
3330 WRITE(x1,
'(I2.2)') i
3341 IF ( nbl_stop )
THEN 3354 n_hy = floor( ( z_max - z_min ) /
hy_deltaz )
3363 CALL interp_1d_scalar(z_col, volcgas_mass_flux(j,:), z_top, gas_top)
3365 CALL interp_1d_scalar(z_col, x_col, z_bot, x_bot)
3366 CALL interp_1d_scalar(z_col, x_col, z_top, x_top)
3368 CALL interp_1d_scalar(z_col, x_col, z_bot, y_bot)
3369 CALL interp_1d_scalar(z_col, x_col, z_top, y_top)
3371 CALL interp_1d_scalar(z_col, r_col, z_bot, r_bot)
3372 CALL interp_1d_scalar(z_col, r_col, z_top, r_top)
3375 cloud_gas(j) = gas_top
3382 IF ( umbrella_flag )
THEN 3384 IF ( verbose_level .GE. 1 )
THEN 3386 WRITE(*,210) x_top+dx , y_top+dy , z_top+dz , &
3395 IF ( n_cloud .EQ. 1 )
THEN 3397 IF ( verbose_level .GE. 1 )
THEN 3399 WRITE(*,210) x_top , y_top , z_top , cloud_gas(1:n_gas)
3407 IF (
u_atm .LT. 1.0d+3 )
THEN 3409 delta_angle = 2.0_wp*pi_g/n_cloud
3413 delta_angle = pi_g / ( n_cloud - 1.0_wp )
3420 angle_release = (i-1) * delta_angle - 0.5_wp*pi_g
3422 dx = 0.5* ( r_bot + r_top ) * cos(start_angle + angle_release)
3423 dy = 0.5* ( r_bot + r_top ) * sin(start_angle + angle_release)
3426 IF ( verbose_level .GE. 1 )
THEN 3428 WRITE(*,210) x_top+dx , y_top+dy , z_top , cloud_gas(1:n_gas) &
3434 cloud_gas(1:n_gas)/n_cloud
3442 207
FORMAT(1
x,
' x (m) ',1
x,
' y (m) ', 1
x,
' z (m) ')
3446 210
FORMAT(33(1
x,e15.8))
3463 FUNCTION cross(a, b)
3464 REAL(wp),
DIMENSION(3) :: cross
3465 REAL(wp),
DIMENSION(3),
INTENT(IN) :: a, b
3467 cross(1) = a(2) * b(3) - a(3) * b(2)
3468 cross(2) = a(3) * b(1) - a(1) * b(3)
3469 cross(3) = a(1) * b(2) - a(2) * b(1)
3486 FUNCTION normpdf(phi, mu,sigma )
3488 REAL(wp),
INTENT(IN) :: phi,mu,sigma
3490 normpdf = 1.0_wp / ( sigma * sqrt( 2.0_wp *
pi_g ) ) * exp( -0.5_wp * &
3491 ( ( phi - mu ) / sigma )**2 )
3505 FUNCTION lower( string ) result (new)
3506 character(len=*) :: string
3508 character(len=len(string)) :: new
3514 length = len(string)
3516 do i = 1,len(string)
3517 k = iachar(string(i:i))
3518 if ( k >= iachar(
'A') .and. k <= iachar(
'Z') )
then 3519 k = k + iachar(
'a') - iachar(
'A')
3544 REAL(wp),
INTENT(IN) :: MassL(:)
3545 REAL(wp),
INTENT(IN) :: MassR(:)
3546 REAL(wp),
INTENT(IN) :: Mass(:)
3548 REAL(wp) :: Number(size(mass))
3561 a = ( 6.0_wp * mass(j) / ( x2-x1 ) - b * ( x1+2.0_wp*x2 ) ) / ( 2.0_wp*x1+x2 )
3563 IF ( a .GT. 0.0_wp )
THEN 3567 a = 2.0_wp * mass(j) / ( x2**2-x1**2 )
3572 number(j) = 0.5_wp*(a+b)*(x2-x1)
3581 WRITE(*,
"(30ES8.1)") massl
3583 WRITE(*,
"(30ES8.1)") massr
3585 WRITE(*,
"(30ES8.1)") mass
3587 WRITE(*,
"(30ES8.1)") number
3610 CHARACTER*2 FUNCTION lettera(k)
3612 CHARACTER ones,tens,hund,thou
3616 INTEGER :: iten, ione, ihund, ithou
3619 ihund=int((k-(ithou*1000))/100)
3620 iten=int((k-(ithou*1000)-(ihund*100))/10)
3621 ione=k-ithou*1000-ihund*100-iten*10
subroutine write_zero_hysplit
Hysplit output initialization.
subroutine phifromm
Compute size from mass.
subroutine close_file_units
Close output units.
real(wp), dimension(:), allocatable phi1
First diameter for the density function.
integer n_mom
Number of moments.
character(len=30) col_file
Name of output file for values along the profile.
real(wp) function particles_shape(i_part, phi)
Particle shape factor.
logical dakota_flag
Flag for dakota run (less files on output)
integer n_part
number of particle phases
integer n_unit
Counter for unit files.
integer n_rk
Runge-Kutta order.
subroutine write_dakota(description, value)
Dakota outputs.
character(len=30) bak_file
Name of output file for backup of input parameters.
real(wp) pa
Atmospheric pressure.
subroutine initialize
Initialize variables.
character(len=len(string)) function lower(string)
Convert from capital to small.
real(wp) rho_atm
Atmospheric density.
real(wp) ice_mass_fraction
mass fraction of ice in the mixture
character(len=20) distribution
Ditribution of the particles: .
real(wp) liquid_water_mass_fraction
mass fraction of liquid water in the mixture
real(wp), dimension(:), allocatable volcgas_mass_fraction
mass fractions of volcanic gases
real(wp) dt0
Initial time step.
real(wp) cpair
specific heat capacity for dry air
real(wp) w0
initial vertical velocity of the plume
real(wp) rh
Relative humidity for standard atmosphere.
real(wp), dimension(:,:,:), allocatable m_quad
Abscissa of quadrature formulas.
character(len=20) aggregation_model
Aggregation kernel model: .
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.
integer atm_unit
Atmosphere input unit.
character(len=30) hy_file_volcgas
Name of output file for hysplit volcanic gas.
real(wp) dz0
Initial integration step.
character(len=50) atm_file
Name of file for the parameters of the atmosphere.
real(wp), dimension(:), allocatable volcgas_mol_wt
molecular weight of additional volcanic gases
character(len=30) mom_file
Name of output file for backup of input parameters.
real(wp) gas_volume_fraction
gas vlume fraction in the mixture
real(wp) water_vapor_mass_fraction
mass fraction of water vapor in the mixture
subroutine allocate_particles
Particles variables allocation.
real(wp) rho_ice
Density of ice in the mixture.
logical water_flag
Flag for water.
character(len=30) inp_file
Name of input file.
real(wp) water_volume_fraction0
initial water volume fraction
real(wp) ta
Atmospheric temperature.
real(wp) dry_air_mass_fraction
mass fraction of dry air in the mixture
integer n_nodes
Number of nodes for the quadrature.
real(wp) x
plume location (downwind)
character(len=30) sed_file
Name of output file for particle loss rate.
real(wp) rvolcgas_mix
gas constant of volcanic gases mixture ( J/(kg K) )
subroutine deallocate_particles
real(wp), dimension(:), allocatable rho1
Density at phi=phi1.
real(wp) volcgas_mix_mass_fraction
mass fraction of the volcanic gas in the mixture
real(wp) u_atm
Horizonal wind speed.
integer n_vars
Number of conservative variables.
real(wp), dimension(:), allocatable solid_mfr
integer sed_unit
Particle loss values along the column data unit.
integer dak_unit
Dakota variables data unit.
integer hy_unit_volcgas
hysplit volcanic gas data unit
real(wp) added_water_temp
real(wp), dimension(:,:,:), allocatable f_quad
Values of linear reconstructions at quadrature points.
real(wp) beta_inp
entrainment coefficient (normal direction)
logical hysplit_flag
Flag for hysplit run.
logical nbl_stop
Flag for hysplit output .
real(wp) dt_output
time interval for the output of the solution
real(wp) added_water_mass_fraction
real(wp) alpha_inp
entrainment coefficient (parallel direction)
real(wp), dimension(:,:,:), allocatable rho_quad
Particle densities at quadrature points.
subroutine write_inversion(r0, w_opt, opt_mfr, opt_height, search_flag, opt_regime)
Write inversion file.
real(wp) cpvolcgas_mix
specific heat of volcanic gases mixture
real(wp), dimension(:), allocatable cp_part
Heat capacity of particle phases.
character(len=30) inversion_file
Name of output file for the inversion variables.
real(wp) y
plume location (crosswind)
real(wp) sphu_atm0
Atmospheric specific humidity at sea level (kg/kg)
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
real(wp), dimension(:), allocatable sigma_lognormal
real(wp) cfl
Courant-Friedrichs-Lewy parameter.
real(wp) r0
initial radius of the plume
real(wp) rgasmix
universal constant for the mixture
real(wp) visc_atm0
Atmospheric kinematic viscosity at sea level.
real(wp), dimension(:), allocatable solid_mfr_init
subroutine interp_1d_scalar(x1, f1, x2, f2)
Scalar interpolation.
real(wp) atm_mass_fraction
mass fraction of the entrained air in the mixture
real(wp) function normpdf(phi, mu, sigma)
Normal probability density function.
logical steady_flag
Flag to stop the umbrella solver when a steady upwind spreading is reached.
integer inp_unit
Input data unit.
real(wp), dimension(:), allocatable pres_atm_month_lat
character(len=20) solver_scheme
Finite volume method: .
Gas/particles mixture module.
real(wp) rho_mix
mixture density
real(wp), dimension(:,:), allocatable m
boundaries of the sections in mass scale (kg)
character(len=30) hy_file
Name of output file for hysplit.
integer mom_unit
Moments values along the column data unit.
subroutine open_file_units
Initialize output units.
real(wp) cos_theta
Wind angle.
subroutine write_column
Write outputs.
real(wp), dimension(:), allocatable h_levels
subroutine zmet
Meteo parameters.
real(wp), dimension(:), allocatable solid_mfr_oldold
real(wp) rair
perfect gas constant for dry air ( J/(kg K) )
Method of Moments module.
logical particles_loss
logical defining if we loose particles
real(wp), dimension(:), allocatable rvolcgas
gas constants for volcanic gases
logical function isset(var)
Input variable check.
real(wp), dimension(:,:,:), allocatable mom
Moments of the particles diameter.
real(wp), dimension(:), allocatable phil
left boundaries of the sections in phi-scale
real(wp) t_end
end time for the run
subroutine check_hysplit
Hysplit outputs.
character(len=30) dak_file
Name of output file for the variables used by dakota.
logical entr_abv_nbl_flag
Flag to allow for entrainment above neutral buoyancy level.
real(wp) mag_u
velocity magnitude along the centerline
real(wp), dimension(:), allocatable solid_partial_mass_fraction0
init mass fraction of the particle phases with respect to the total solid
subroutine read_inp
Read Input data.
real(wp), dimension(:,:), allocatable atm_profile
atmospheric profile above the vent. It is an array with n_atm_profile rows and 7 columns: ...
real(wp), dimension(:,:,:), allocatable w_quad
Weights of quadrature formulas.
real(wp), dimension(:), allocatable rho_atm_month_lat
logical initial_neutral_density
logical defining if the plume has neutral density at the base
real(wp), dimension(:), allocatable shape_factor
shape factor for settling velocity (Pfeiffer)
real(wp) vent_height
height of the base of the plume
real(wp) z
plume vertical coordinate
logical umbrella_flag
Flag to solve the model for the umbrella spreading.
integer, dimension(10) limiter
Limiter for the slope in the linear reconstruction: .
real(wp), dimension(:), allocatable cpvolcgas
specific heat capacity for volcanic gases
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) function, dimension(3) cross(a, b)
Cross product.
real(wp) function, dimension(size(mass)) numberfrommass(MassL, MassR, Mass)
Particle number from mass in each bin.
real(wp), dimension(:), allocatable phir
right boundaries of the sections in phi-scale
real(wp) t_mix
mixture temperature
real(wp) max_dt
Largest time step allowed.
real(wp), dimension(:), allocatable temp_atm_month_lat
subroutine initialize_meteo
Meteo parameters initialization.
character(len=30) run_name
Name of the run (used for the output and backup files)
real(wp) rhovolcgas_mix
volcanic gases mixture density
real(wp) t_start
initial time for the run
real(wp) function particles_density(i_part, phi)
Particle density.
real *8 gi
Gravity acceleration.
real(wp), dimension(:), allocatable mu_lognormal
real(wp), dimension(:), allocatable volcgas_mass_fraction0
initial mass fractions of volcanic gases
real(wp), dimension(:), allocatable rhovolcgas
volcanic gases densities
real(wp), parameter rwv
gas constant for water vapor ( J/(kg K) )
real(wp) t_mix0
initial temperature
character *2 function lettera(k)
Numeric to String conversion.
real(wp) rho_lw
Density of liquid water in the mixture.
real(wp), dimension(:), allocatable phi2
Second diameter for the density function.
real(wp) theta
Van Leer limiter parameter.
subroutine eval_quad_values
Quadrature values computation.
real(wp), dimension(:,:,:), allocatable mom0
Initial moments of the particles diameter.
real(wp), dimension(:), allocatable rho2
Density at phi=phi2.
integer col_unit
Output values along the column data unit.
real(wp) water_mass_fraction0
initial water mass fraction
real(wp), dimension(:), allocatable solid_mfr_old
integer n_gas
volcanic gas species number
real(wp) reconstr_coeff
Slope coefficient in the linear reconstruction.
integer hy_unit
hysplit data unit
real(wp), dimension(:), allocatable shape2
Shape factor at phi=phi2.
real(wp) gas_mass_fraction
gas mass fraction in the mixture
real(wp) w
plume vertical velocity
character *10 settling_model
Settling model: .
logical interfaces_relaxation
Flag to add the relaxation terms after the linear reconstruction: .
character *10 read_atm_profile
integer inversion_unit
Inversion variables data unit.
integer bak_unit
Backup input unit.
integer verbose_level
Level of verbose output (0 = minimal output on screen)
integer temp_unit
hysplit scratch unit