!--------1---------2---------3---------4---------5---------6---------7---------8 subroutine flux_frez(flux_out) !--------1---------2---------3---------4---------5---------6---------7---------8 use global_constants, only : rkind, dt, time, year, density use global_parameters, only : temp, radius, dr, surface_area, halfdr, surface_arear use heat_parameters, only : latent_heat_init, specific_heat use material_parameters, only : mn, iw, ii, i_irw & & , ice_reach_rock, melt, radius_ice, radius_water, frez_start & & , radius_ice_water, radius_rock, ice_rockice & & , material_select, mass_ratio_rock, mass_ratio_ice, mass_ratio_water use ice_parameters, only : temperature_melting_I use energy, only : lat_energy implicit none real(rkind) :: flux_out real(rkind) :: coef_latent, dlat_energy, dr_water if(.NOT.frez_start) then frez_start = .TRUE. radius_ice_water = radius_water i_irw = iw endif if(mn(ii) <= 3) then mn(ii) = 3 elseif(mn(ii) == 8 .OR. mn(ii) == 9 .OR. mn(ii) == 11) then mn(ii) = 9 elseif(mn(ii) == 5 .OR. mn(ii) == 12) then mn(ii) = 12 else call log_error(ii,'flux_frez_mncheck') return endif coef_latent = latent_heat_init*density(1)*surface_arear(radius_water) lat_energy(ii) = lat_energy(ii) - flux_out dr_water = flux_out*dt/coef_latent radius_water = radius_water - dr_water if(radius_water < radius(ii) - halfdr) then dlat_energy = coef_latent*((radius(ii)-halfdr)-radius_water)/dt lat_energy(ii) = lat_energy(ii) + dlat_energy if(mn(ii)==3) then mn(ii) = 2 mass_ratio_water(ii) = 0._rkind mass_ratio_ice(ii) = 1._rkind elseif(mn(ii)==9) then mn(ii) = 10 call ice_rockice(ii) endif if(mn(ii-1)<=3) then mn(ii-1) = 3 elseif(mn(ii-1)==5) then mn(ii-1) = 12 else write(999,*) 'error occurs at flux_frez_check! mn(ii-1)', mn(ii-1), ii-1 call log_error(ii-1,'flux_frez_check mn(ii-1)') return endif melt(ii-1) = .FALSE. lat_energy(ii-1) = lat_energy(ii-1) - dlat_energy elseif(radius_water < radius_rock) then ice_reach_rock = .TRUE. dlat_energy = coef_latent*(radius_rock-radius_water)/dt lat_energy(ii) = lat_energy(ii) + dlat_energy temp(ii) = temp(ii) - dlat_energy*dt/(density(15)*specific_heat(15) & &*surface_area(ii)*dr) radius_water = radius_rock melt(ii) = .FALSE. mn(ii) = 13 call material_select(ii) endif return end subroutine flux_frez