package matertals import "github.com/rs/zerolog/log" type MaterialProperties struct { Density float64 //Плотность (кг / м3) Tougnness float64 //Ударная вязкость, мера скорости поглощения энергии без деформаций, джоули на квадратный метр в секунду Brittleness float64 //Хрупкость - обратная пластичности (в основном за счет внешних эффектов), джоули на квадртаный метр, после которых раскол MeltingPoint float64 //точка перехода из твердого в жидкое, градусы Цельсия при нормальном давлении BoilingPoint float64 //точка кипения - из жидкого в газ, градусы Цельсия при нормальном давлении Conductivity bool //проводимость эл. тока } //агрегатное состояние type MatterState int const ( Solid MatterState = iota //кристаллическая решетка Liquid Gas Plasma Glass //нет кристаллической решетки, аморфный ) var transitions = map[MatterState][]MatterState{ Solid: {Liquid, Gas}, Liquid: {Solid, Gas, Glass}, Gas: {Solid, Plasma}, Plasma: {Gas}, Glass: {Liquid}, } func (ms MatterState) Change(from MatterState, to MatterState) bool { if from == to { return true } _, ok := transitions[from] if ok { newStateFound := func(lst []MatterState, to MatterState) bool { for _, b := range lst { if b == to { return true } } return false }(transitions[from], to) if !newStateFound { log.Warn().Msgf(`Transition %d -> %d is impossible`, from, to) return false } // check temperatures/conditions, see template /* Solid -> Gas Sublimation Solid -> Liquid Melting Liquid -> Gas Boiling Liquid -> Solid Freezing Gas -> Solid Deposition Gas -> Liquid Condensation Gas -> Plasma Ionization Plasma -> Gas Recombination */ } //При фазовом переходе первого рода скачкообразно изменяются самые главные, первичные экстенсивные параметры: // удельный объём, // количество запасённой внутренней энергии, // концентрация компонентов и т. п. // // Фазовые переходы второго рода происходят в тех случаях, когда меняется симметрия строения вещества // (симметрия может полностью исчезнуть или понизиться). return true }