!--------1---------2---------3---------4---------5---------6---------7---------8 subroutine melt_check(i) !--------1---------2---------3---------4---------5---------6---------7---------8 use global_constants, only : rkind, density, dt, time,year,Myr & & , volume_ratio_rock, Rocky_Core, mass_ratio_rock_H2O_solar use global_parameters, only : radius, temp, surface_area, dr, halfdr use heat_parameters, only : specific_heat, latent_heat_init & & , thermal_conductivity use ice_parameters, only : temperature_melting_I use material_parameters, only : ice_water_rock, iw, mn, material_select & & , iw_old, ir_old, drock, radius_water, ii, mass_ratio_rock & & , mass_ratio_ice, mass_ratio_water, mass_ratio_anhydrous_rock, mass_ratio_hydrous_rock use energy, only : lat_energy use heat_radiogenic, only : iAl, ftime implicit none integer,intent(in) :: i real(rkind) :: dm, m, latent_heat, coef_dm, time_Myr& & , Tspecific_heat, Tdensity if(mn(i) == 11 .OR. mn(i) == 13 .OR. mn(i) == 12 .OR. mn(i) == 9) return m = mass_ratio_ice(i) if(m == 0._rkind) then return elseif(m > 0._rkind) then if(mn(i) == 7 .OR. mn(i) == 6) then mn(i) = 7 elseif(mn(i) == 8) then mn(i) = 8 elseif(mn(i) == 3) then mn(i) = 3 else call log_error(i,'melt_check mn(i)') return endif latent_heat = latent_heat_init coef_dm = Tspecific_heat(i)/(latent_heat) dm = (temp(i)-temperature_melting_I)*coef_dm lat_energy(i) = lat_energy(i) + latent_heat*dm*Tdensity(i)*surface_area(i)*dr/dt temp(i) = temperature_melting_I m = m - dm mass_ratio_water(i) = mass_ratio_water(i) + dm time_Myr = (time/year+ftime(iAl))/Myr if(m <= 1e-7_rkind) then m = 0._rkind if(i>=2) drock = drock + (radius(i)+halfdr-radius_water) & & *(mass_ratio_anhydrous_rock(i)/density(4)+mass_ratio_hydrous_rock(i)/density(4))& & *Tdensity(i)*radius_water*radius_water radius_water = radius(i)+halfdr if(i /= 0) then if(Rocky_Core) mn(i) = 1 if(.NOT.Rocky_Core) mn(i) = 15 elseif(i == 0) then m = 0._rkind if(.NOT.Rocky_Core) mn(i) = 15 endif endif elseif(m < 0._rkind) then m = 0._rkind if(i>=2) drock = drock + (radius(i)+halfdr-radius_water) & & *(mass_ratio_anhydrous_rock(i)/density(4)+mass_ratio_hydrous_rock(i)/density(4))& & *Tdensity(i)*radius_water*radius_water radius_water = radius(i)+halfdr if(i /= 0) then if(Rocky_Core) mn(i) = 1 if(.NOT.Rocky_Core) mn(i) = 15 elseif(i == 0) then m = 0._rkind if(.NOT.Rocky_Core) mn(i) = 15 endif return else write(999,*) 'error occurs at melt_check!' write(999,*) i, temp(i), m call log_error(i,'melt_check') return endif mass_ratio_ice(i) = m return end subroutine melt_check