1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------------- 4 5# This file is part of Code_Saturne, a general-purpose CFD tool. 6# 7# Copyright (C) 1998-2021 EDF S.A. 8# 9# This program is free software; you can redistribute it and/or modify it under 10# the terms of the GNU General Public License as published by the Free Software 11# Foundation; either version 2 of the License, or (at your option) any later 12# version. 13# 14# This program is distributed in the hope that it will be useful, but WITHOUT 15# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 16# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 17# details. 18# 19# You should have received a copy of the GNU General Public License along with 20# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin 21# Street, Fifth Floor, Boston, MA 02110-1301, USA. 22 23#------------------------------------------------------------------------------- 24 25""" 26This module defines the 'Interfacial area' page. 27 28This module contains the following classes: 29- InterfacialAreaView 30""" 31 32#------------------------------------------------------------------------------- 33# Library modules import 34#------------------------------------------------------------------------------- 35 36import os, sys, string, types 37import logging 38 39#------------------------------------------------------------------------------- 40# Third-party modules 41#------------------------------------------------------------------------------- 42 43from code_saturne.Base.QtCore import * 44from code_saturne.Base.QtGui import * 45from code_saturne.Base.QtWidgets import * 46 47#------------------------------------------------------------------------------- 48# Application modules import 49#------------------------------------------------------------------------------- 50 51from code_saturne.model.Common import GuiParam 52from code_saturne.Base.QtPage import ComboModel, DoubleValidator, from_qvariant 53from code_saturne.Pages.InterfacialArea import Ui_InterfacialArea 54from code_saturne.model.InterfacialAreaModel import InterfacialAreaModel 55from code_saturne.model.MainFieldsModel import MainFieldsModel 56from code_saturne.model.InterfacialForcesModel import InterfacialForcesModel 57#------------------------------------------------------------------------------- 58# log config 59#------------------------------------------------------------------------------- 60 61logging.basicConfig() 62log = logging.getLogger("InterfacialAreaView") 63log.setLevel(GuiParam.DEBUG) 64 65 66#------------------------------------------------------------------------------- 67# SolidView class 68#------------------------------------------------------------------------------- 69 70class InterfacialAreaView(QWidget, Ui_InterfacialArea): 71 """ 72 InterfacialAreaView layout. 73 """ 74 def __init__(self, parent, case): 75 """ 76 Constructor 77 """ 78 QWidget.__init__(self, parent) 79 80 Ui_InterfacialArea.__init__(self) 81 self.setupUi(self) 82 83 self.case = case 84 self.case.undoStopGlobal() 85 self.mdl = InterfacialAreaModel(self.case) 86 87 dispersed_fields = self.mdl.getDispersedFieldList() + InterfacialForcesModel(self.case).getGLIMfields() 88 89 if dispersed_fields == []: 90 self.groupBoxField.hide() 91 self.groupBoxMinMaxDiameter.hide() 92 self.groupBoxModel.hide() 93 self.labelNoDispersedPhase.show() 94 self.mdl.remove() 95 return 96 97 # Combo box models 98 id_to_set = -1 99 self.modelField = ComboModel(self.comboBoxField, 1, 1) 100 101 # For consistency with the previous pages, the second phase of the 102 # Large Interface Model is set before the dispersed fields 103 104 for fieldId in dispersed_fields: 105 label = self.mdl.getLabel(fieldId) 106 name = str(fieldId) 107 self.modelField.addItem(self.tr(label), name) 108 109 if len(dispersed_fields) > 0 and id_to_set == -1: 110 id_to_set = dispersed_fields[0] 111 self.modelField.setItem(str_model=id_to_set) 112 113 # case no field 114 self.currentid = id_to_set 115 116 self.modelModel = ComboModel(self.comboBoxModel, 2, 1) 117 self.modelModel.addItem(self.tr("constant"), "constant") 118 self.modelModel.addItem(self.tr("interfacial area transport"), "interfacial_area_transport") 119 120 self.modelSourceTerm = ComboModel(self.comboBoxSourceTerm, 4, 1) 121 122 self.modelSourceTerm.addItem(self.tr("No coalescence, no fragmentation"),"no_coalescence_no_fragmentation") 123 self.modelSourceTerm.addItem(self.tr("Yao & Morel"),"wei_yao") 124 self.modelSourceTerm.addItem(self.tr("Kamp & Colin"),"kamp_colin") 125 self.modelSourceTerm.addItem(self.tr("Ruyer & Seiler"), "ruyer_seiler") 126 self.modelSourceTerm.disableItem(2) # Why ? 127 128 # Validators 129 validatorDefDiam = DoubleValidator(self.lineEditDefaultDiameter, min = 0.0) 130 validatorMinDiam = DoubleValidator(self.lineEditMinDiameter, min = 0.0) 131 validatorMaxDiam = DoubleValidator(self.lineEditMaxDiameter, min = 0.0) 132 133 validatorDefDiam.setExclusiveMin(True) 134 validatorMinDiam.setExclusiveMin(True) 135 validatorMaxDiam.setExclusiveMin(True) 136 137 self.lineEditDefaultDiameter.setValidator(validatorDefDiam) 138 self.lineEditMinDiameter.setValidator(validatorMinDiam) 139 self.lineEditMaxDiameter.setValidator(validatorMaxDiam) 140 141 # Connect signals to slots 142 self.comboBoxField.activated[str].connect(self.slotField) 143 self.comboBoxModel.activated[str].connect(self.slotModel) 144 self.comboBoxSourceTerm.activated[str].connect(self.slotSourceTerm) 145 self.lineEditDefaultDiameter.textChanged[str].connect(self.slotDefaultDiameter) 146 self.lineEditMinDiameter.textChanged[str].connect(self.slotMinDiameter) 147 self.lineEditMaxDiameter.textChanged[str].connect(self.slotMaxDiameter) 148 149 # Initialize widget 150 self.initializeVariables(self.currentid) 151 152 self.case.undoStartGlobal() 153 154 155 @pyqtSlot(str) 156 def slotField(self, text): 157 """ 158 INPUT label for choice of field 159 """ 160 self.currentid = self.modelField.dicoV2M[text] 161 self.initializeVariables(self.currentid) 162 163 if self.mdl.getFieldNature(self.currentid) == "gas" : 164 self.modelSourceTerm.enableItem(0) 165 else : 166 self.modelSourceTerm.disableItem(0) 167 168 169 @pyqtSlot(str) 170 def slotModel(self, text): 171 """ 172 INPUT type for choice of model 173 """ 174 model = self.modelModel.dicoV2M[text] 175 self.mdl.setAreaModel(self.currentid, model) 176 self.initializeVariables(self.currentid) 177 178 179 @pyqtSlot(str) 180 def slotSourceTerm(self, text): 181 """ 182 INPUT type for choice of model source term 183 """ 184 model = self.modelSourceTerm.dicoV2M[text] 185 self.mdl.setSourceTerm(self.currentid, model) 186 187 188 @pyqtSlot(str) 189 def slotDefaultDiameter(self, var): 190 """ 191 """ 192 if self.lineEditDefaultDiameter.validator().state == QValidator.Acceptable: 193 value = from_qvariant(var, float) 194 self.mdl.setInitialDiameter(self.currentid, value) 195 196 197 @pyqtSlot(str) 198 def slotMinDiameter(self, var): 199 """ 200 """ 201 if self.lineEditMinDiameter.validator().state == QValidator.Acceptable: 202 value = from_qvariant(var, float) 203 self.mdl.setMinDiameter(self.currentid, value) 204 205 206 @pyqtSlot(str) 207 def slotMaxDiameter(self, var): 208 """ 209 """ 210 if self.lineEditMaxDiameter.validator().state == QValidator.Acceptable: 211 value = from_qvariant(var, float) 212 self.mdl.setMaxDiameter(self.currentid, value) 213 214 215 def initializeVariables(self, fieldId): 216 """ 217 Initialize variables when a new fieldId is choosen 218 """ 219 self.labelNoDispersedPhase.hide() 220 model = self.mdl.getAreaModel(fieldId) 221 self.modelModel.setItem(str_model = model) 222 223 value = self.mdl.getInitialDiameter(self.currentid) 224 self.lineEditDefaultDiameter.setText(str(value)) 225 226 if self.mdl.getAreaModel(fieldId) == "constant" : 227 self.groupBoxAreaTransport.hide() 228 self.groupBoxMinMaxDiameter.hide() 229 else : 230 self.groupBoxAreaTransport.show() 231 model = self.mdl.getSourceTerm(fieldId) 232 self.modelSourceTerm.setItem(str_model = model) 233 234 self.groupBoxMinMaxDiameter.show() 235 236 value = self.mdl.getMinDiameter(self.currentid) 237 self.lineEditMinDiameter.setText(str(value)) 238 239 value = self.mdl.getMaxDiameter(self.currentid) 240 self.lineEditMaxDiameter.setText(str(value)) 241 242 if MainFieldsModel(self.case).getFieldNature(fieldId) != 'gas' : 243 self.modelSourceTerm.disableItem(1) 244 self.modelSourceTerm.disableItem(2) 245 self.modelSourceTerm.disableItem(3) 246 else: 247 if MainFieldsModel(self.case).getPredefinedFlow() == "multiregime": 248 self.modelSourceTerm.disableItem(1) 249 self.modelSourceTerm.disableItem(2) 250 self.modelSourceTerm.enableItem(3) 251 else: 252 self.modelSourceTerm.enableItem(1) 253 self.modelSourceTerm.enableItem(2) 254 self.modelSourceTerm.enableItem(3) 255