83 lines
2.8 KiB
Go
83 lines
2.8 KiB
Go
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
|
|
|
|
}
|