Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
sunethwarna committed Mar 16, 2024
1 parent 7ce0aee commit a2d5c66
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ def _SetFixedModelPartValues(self, is_backward = False) -> None:
else:
Kratos.Expression.NodalPositionExpressionIO.Read(field, Kratos.Configuration.Initial)

Kratos.Expression.VariableExpressionIO.Write(field, self.filter._GetSolver()._GetSolvingVariable(),True)
Kratos.Expression.VariableExpressionIO.Write(field, self.filter._GetSolver().GetSolvingVariable(),True)

def __str__(self) -> str:
return f"Control [type = {self.__class__.__name__}, name = {self.GetName()}, model part name = {self.filter_model_part.FullName()}, control variable = {KratosOA.SHAPE.Name()}"
Original file line number Diff line number Diff line change
Expand Up @@ -39,21 +39,10 @@ def _SetHelmHoltzSourceMode(self, integrated_field=False):
#### Public user interface functions ####
def Initialize(self):
super().Initialize()
self.InitializeFilterModelPart()

def InitializeFilterModelPart(self):
self._SetSolverMode()
self.SetFilterRadius(self._GetSolver().GetFilterRadius())
self.SetBulkFilterRadius()
self._GetSolver().SetFilterRadius(self._GetSolver().GetFilterRadius())
self._SetHelmHoltzSourceMode()

def SetFilterRadius(self, filter_radius: float):
self._GetComputingModelPart().ProcessInfo.SetValue(KOA.HELMHOLTZ_RADIUS, filter_radius)

def SetBulkFilterRadius(self):
if self._GetSolver().GetFilterType() == "bulk_surface_shape" or self._GetSolver().GetFilterType() == "shape":
KOA.ImplicitFilterUtils.SetBulkRadiusForShapeFiltering(self._GetComputingModelPart())

def RunSolver(self):
self.InitializeSolutionStep()
self._GetSolver().Predict()
Expand Down Expand Up @@ -111,7 +100,7 @@ def __AssignDataExpressionToNodalSource(self, data_exp: ContainerExpressionTypes

KOA.ExpressionUtils.MapContainerVariableToNodalVariable(mapped_values, data_exp, self.__neighbour_entities[key])

KM.Expression.VariableExpressionIO.Write(mapped_values, self._GetSolver()._GetSourceVariable(), False)
KM.Expression.VariableExpressionIO.Write(mapped_values, self._GetSolver().GetSourceVariable(), False)

def __AssignNodalSolutionToDataExpression(self) -> ContainerExpressionTypes:
if self.__source_data is None:
Expand All @@ -125,7 +114,7 @@ def __AssignNodalSolutionToDataExpression(self) -> ContainerExpressionTypes:
# data containers.
nodal_solution_field = KM.Expression.NodalExpression(self.__source_data.GetModelPart())

KM.Expression.VariableExpressionIO.Read(nodal_solution_field, self._GetSolver()._GetSolvingVariable(), True)
KM.Expression.VariableExpressionIO.Read(nodal_solution_field, self._GetSolver().GetSolvingVariable(), True)

if isinstance(self.__source_data, KM.Expression.NodalExpression):
return nodal_solution_field.Clone()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@ def CreateSolver(model: KM.Model, custom_settings: KM.Parameters):
return HelmholtzScalarSolver(model, custom_settings)

class HelmholtzScalarSolver(HelmholtzSolverBase):
def _GetSolvingVariable(self) -> KM.DoubleVariable:
def GetSolvingVariable(self) -> KM.DoubleVariable:
return KOA.HELMHOLTZ_SCALAR

def _GetComputingModelPartName(self) -> str:
return self.GetOriginModelPart().FullName().replace(".", "_") + "_helmholtz_scalar"

def SetFilterRadius(self, filter_radius: float) -> None:
self.GetComputingModelPart().ProcessInfo.SetValue(KOA.HELMHOLTZ_RADIUS, filter_radius)

def _FillComputingModelPart(self) -> None:
if self.GetOriginModelPart().NumberOfElements() > 0:
# here we have to replace the elements, while keeping the
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Importing the Kratos Library
import KratosMultiphysics as KM
import KratosMultiphysics.OptimizationApplication as KOA

# Import baseclass
from KratosMultiphysics.OptimizationApplication.filtering.helmholtz_solver_base import HelmholtzSolverBase
Expand All @@ -8,12 +9,16 @@ def CreateSolver(model: KM.Model, custom_settings: KM.Parameters):
return HelmholtzShapeSolver(model, custom_settings)

class HelmholtzShapeSolver(HelmholtzSolverBase):
def _GetSolvingVariable(self) -> KM.Array1DVariable3:
def GetSolvingVariable(self) -> KM.Array1DVariable3:
return KM.MESH_DISPLACEMENT

def _GetComputingModelPartName(self) -> str:
return self.GetOriginModelPart().FullName().replace(".", "_") + "_helmholtz_shape"

def SetFilterRadius(self, filter_radius: float) -> None:
self.GetComputingModelPart().ProcessInfo.SetValue(KOA.HELMHOLTZ_RADIUS, filter_radius)
KOA.ImplicitFilterUtils.SetBulkRadiusForShapeFiltering(self.GetComputingModelPart())

def _FillComputingModelPart(self) -> None:
if self.GetOriginModelPart().NumberOfElements() > 0:
# here we have to replace the elements, while keeping the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,33 @@ def GetDefaultParameters(cls) -> KM.Parameters:

#### Public user interface functions ####

@abc.abstractmethod
def _GetComputingModelPartName(self) -> str:
pass

@abc.abstractmethod
def _FillComputingModelPart(self) -> None:
pass

@abc.abstractmethod
def GetSolvingVariable(self) -> SupportedSensitivityFieldVariableTypes:
pass

@abc.abstractmethod
def SetFilterRadius(self, filter_radius: float) -> None:
pass

def AddVariables(self) -> None:
self.GetOriginRootModelPart().AddNodalSolutionStepVariable(self._GetSolvingVariable())
self.GetOriginRootModelPart().AddNodalSolutionStepVariable(self.GetSolvingVariable())
KM.Logger.PrintInfo("::[HelmholtzSolverBase]:: Variables ADDED.")

def AddDofs(self) -> None:
if isinstance(self._GetSolvingVariable(), KM.DoubleVariable):
KM.VariableUtils().AddDof(self._GetSolvingVariable(), self.GetOriginRootModelPart())
elif isinstance(self._GetSolvingVariable(), KM.Array1DVariable3):
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self._GetSolvingVariable().Name()}_X"), self.GetOriginRootModelPart())
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self._GetSolvingVariable().Name()}_Y"), self.GetOriginRootModelPart())
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self._GetSolvingVariable().Name()}_Z"), self.GetOriginRootModelPart())
if isinstance(self.GetSolvingVariable(), KM.DoubleVariable):
KM.VariableUtils().AddDof(self.GetSolvingVariable(), self.GetOriginRootModelPart())
elif isinstance(self.GetSolvingVariable(), KM.Array1DVariable3):
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self.GetSolvingVariable().Name()}_X"), self.GetOriginRootModelPart())
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self.GetSolvingVariable().Name()}_Y"), self.GetOriginRootModelPart())
KM.VariableUtils().AddDof(KM.KratosGlobals.GetVariable(f"{self.GetSolvingVariable().Name()}_Z"), self.GetOriginRootModelPart())
else:
raise RuntimeError("Unsupported solving variable type.")
KM.Logger.PrintInfo("::[HelmholtzSolverBase]:: DOFs ADDED.")
Expand Down Expand Up @@ -151,9 +167,6 @@ def GetOriginRootModelPart(self) -> KM.ModelPart:
def GetOriginModelPart(self) -> KM.ModelPart:
return self.model[self.__filtering_model_part_name]

def GetFilterType(self) -> str:
return self.filter_type

def GetFilterRadius(self) -> str:
return self.filter_radius

Expand Down Expand Up @@ -212,33 +225,10 @@ def _GetContainerTypeNumNodes(self, container: 'typing.Union[KM.ConditionsArray,
def _IsSurfaceContainer(self, container: 'typing.Union[KM.ConditionsArray, KM.ElementsArray]') -> bool:
return any(map(lambda x: x.GetGeometry().WorkingSpaceDimension() != x.GetGeometry().LocalSpaceDimension(), container))

def GetComputingModelPartName(self) -> str:
model_part_name = self.__filtering_model_part_name.replace(".", "_")
for container in self.GetContainers():
if isinstance(container, KM.ConditionsArray):
model_part_name += "_conditions"
elif isinstance(container, KM.ElementsArray):
model_part_name += "_elements"
else:
raise RuntimeError("Unsupported container type provided.")
return model_part_name + f"_{self.GetConditionName()}_{self.GetElementName()}"

@abc.abstractmethod
def _GetComputingModelPartName(self) -> str:
pass

@abc.abstractmethod
def _FillComputingModelPart(self) -> None:
pass

@abc.abstractmethod
def _GetSolvingVariable(self) -> SupportedSensitivityFieldVariableTypes:
pass

def _GetSourceVariable(self) -> SupportedSensitivityFieldVariableTypes:
if isinstance(self._GetSolvingVariable(), KM.DoubleVariable):
def GetSourceVariable(self) -> SupportedSensitivityFieldVariableTypes:
if isinstance(self.GetSolvingVariable(), KM.DoubleVariable):
return KOA.HELMHOLTZ_SCALAR_SOURCE
elif isinstance(self._GetSolvingVariable(), KM.Array1DVariable3):
elif isinstance(self.GetSolvingVariable(), KM.Array1DVariable3):
return KOA.HELMHOLTZ_VECTOR_SOURCE
else:
raise RuntimeError("Unsupported solving variable.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@ def CreateSolver(model: KM.Model, custom_settings: KM.Parameters):
return HelmholtzVectorSolver(model, custom_settings)

class HelmholtzVectorSolver(HelmholtzSolverBase):
def _GetSolvingVariable(self) -> KM.Array1DVariable3:
def GetSolvingVariable(self) -> KM.Array1DVariable3:
return KOA.HELMHOLTZ_VECTOR

def _GetComputingModelPartName(self) -> str:
return self.GetOriginModelPart().FullName().replace(".", "_") + "_helmholtz_vector"

def SetFilterRadius(self, filter_radius: float) -> None:
self.GetComputingModelPart().ProcessInfo.SetValue(KOA.HELMHOLTZ_RADIUS, filter_radius)

def _FillComputingModelPart(self) -> None:
if self.GetOriginModelPart().NumberOfElements() > 0:
# here we have to replace the elements, while keeping the
Expand Down

0 comments on commit a2d5c66

Please sign in to comment.