Fri 16 May 23:06:54 CEST 2025

This commit is contained in:
sbosse 2025-05-16 23:08:42 +02:00
parent 5ed0ca22c1
commit cc86756bcd

View File

@ -1,9 +1,13 @@
from SimNDT.engine.engineBase import EngineBase from SimNDT.engine.engineBase import EngineBase
#
# Setup and control of numerical simulation
# Input: Simulation.Im derived from Scenario.Iabs
#
try: try:
import SimNDT.engine.efit2dcython as EFIT2DCython import SimNDT.engine.efit2dcython as EFIT2DCython
except: except:
print("error in importation for Serial EFIT2D") print("error in import for Serial EFIT2D (efit2dcython)")
from SimNDT.core.material import Material from SimNDT.core.material import Material
from SimNDT.core.constants import BC from SimNDT.core.constants import BC
@ -30,7 +34,6 @@ pzt = Material("pzt", 7750.0, c11, c12, c22, c44)
class EFIT2D(EngineBase): class EFIT2D(EngineBase):
def __init__(self, simPack, Platform): def __init__(self, simPack, Platform):
EngineBase.__init__(self, simPack, Platform) EngineBase.__init__(self, simPack, Platform)
self.max_value = 0.0 self.max_value = 0.0
self._Receiver = False self._Receiver = False
@ -38,8 +41,9 @@ class EFIT2D(EngineBase):
if self.Platform == "OpenCL": if self.Platform == "OpenCL":
self.initFieldsCL() self.initFieldsCL()
# Main setup of numerical model
def materialSetup(self): def materialSetup(self):
print("EFIT2D: Creating material matrix from material library.")
Materials = copy.deepcopy(self.simPack.Materials) Materials = copy.deepcopy(self.simPack.Materials)
MRI, NRI = np.shape(self.simPack.Simulation.Im) MRI, NRI = np.shape(self.simPack.Simulation.Im)
@ -77,7 +81,7 @@ class EFIT2D(EngineBase):
self.Eta_v[ind] = Materials[n].Eta_v self.Eta_v[ind] = Materials[n].Eta_v
self.Eta_s[ind] = Materials[n].Eta_s self.Eta_s[ind] = Materials[n].Eta_s
# Find the base materials # Find the base materials (always label 0)
for i, item in enumerate(Materials): for i, item in enumerate(Materials):
if item.Label == 0: if item.Label == 0:
base_material = i base_material = i
@ -92,6 +96,40 @@ class EFIT2D(EngineBase):
self.Eta_v[ind] = Materials[base_material].Eta_v self.Eta_v[ind] = Materials[base_material].Eta_v
self.Eta_s[ind] = Materials[base_material].Eta_s self.Eta_s[ind] = Materials[base_material].Eta_s
# Direct import of Rho, VL and VT material matrix
def materialImport(self,Rho,VL,VT,Eta_v,Eta_s):
print("EFIT2D: Importing material matrix.")
eta_v=1e-30
eta_s = 1e-30
MRI, NRI = np.shape(Rho)
self.Rho = Rho.astype('float32')
ind = np.nonzero(Rho < 2)
self.Rho[ind] = 10e23
self.Eta_v = np.ones((MRI, NRI), dtype=np.float32)*eta_v
self.Eta_s = np.ones((MRI, NRI), dtype=np.float32)*eta_s
Lam = Rho*(VL*VL-2*VT*VT)
Mu = Rho*(VT*VT)
C11 = Lam+2*Mu
C12 = Lam
C22 = C11
C44 = Mu
self.C11 = C11.astype('float32')
self.C12 = C12.astype('float32')
self.C22 = C22.astype('float32')
self.C44 = C44.astype('float32')
self.C11[ind] = 1e-20
self.C12[ind] = 1e-20
self.C22[ind] = 1e-20
self.C44[ind] = 1e-20
print("Rho=["+str(self.Rho.min())+","+str(self.Rho.max())+"]")
print("C11=["+str(self.C11.min())+","+str(self.C11.max())+"]")
print("C12=["+str(self.C12.min())+","+str(self.C12.max())+"]")
print("C22=["+str(self.C22.min())+","+str(self.C22.max())+"]")
print("C44=["+str(self.C44.min())+","+str(self.C44.max())+"]")
# Warning: If boundary is air the boundary must be set to base material, but applyBoundaries sets boundary again to 0; don't care about it here?
def initFields(self): def initFields(self):
MRI, NRI = np.shape(self.simPack.Simulation.Im) MRI, NRI = np.shape(self.simPack.Simulation.Im)