16
16
import collections
17
17
import os
18
18
import unittest
19
+ import copy
19
20
from statistics import mean
20
21
21
22
from numpy import array , linspace , zeros
@@ -267,6 +268,8 @@ def test_thermalExpansionContractionConservation_simple(self):
267
268
a = buildTestAssemblyWithFakeMaterial (name = "HT9" )
268
269
origMesh = a .getAxialMesh ()[:- 1 ]
269
270
origMasses , origNDens = self ._getComponentMassAndNDens (a )
271
+ # set component detailedNDens
272
+ origDetailedNDens = self ._setComponentDetailedNDens (a , origNDens )
270
273
axialExpChngr = AxialExpansionChanger (detailedAxialExpansion = True )
271
274
272
275
tempGrid = linspace (0.0 , a .getHeight ())
@@ -281,16 +284,20 @@ def test_thermalExpansionContractionConservation_simple(self):
281
284
# Set new isothermal temp and expand
282
285
tempField = array ([temp ] * len (tempGrid ))
283
286
oldMasses , oldNDens = self ._getComponentMassAndNDens (a )
287
+ oldDetailedNDens = self ._getComponentDetailedNDens (a )
284
288
axialExpChngr .performThermalAxialExpansion (a , tempGrid , tempField )
285
289
newMasses , newNDens = self ._getComponentMassAndNDens (a )
290
+ newDetailedNDens = self ._getComponentDetailedNDens (a )
286
291
self ._checkMass (oldMasses , newMasses )
287
292
self ._checkNDens (oldNDens , newNDens , totGrowthFrac )
293
+ self ._checkDetailedNDens (oldDetailedNDens , newDetailedNDens , totGrowthFrac )
288
294
289
295
# make sure that the assembly returned to the original state
290
296
for orig , new in zip (origMesh , a .getAxialMesh ()):
291
297
self .assertAlmostEqual (orig , new , places = 12 )
292
298
self ._checkMass (origMasses , newMasses )
293
299
self ._checkNDens (origNDens , newNDens , 1.0 )
300
+ self ._checkDetailedNDens (origDetailedNDens , newDetailedNDens , 1.0 )
294
301
295
302
def test_thermalExpansionContractionConservation_complex (self ):
296
303
"""Thermally expand and then contract to ensure original state is recovered.
@@ -412,7 +419,13 @@ def _checkNDens(self, prevNDen, newNDens, ratio):
412
419
for prev , new in zip (prevComp .values (), newComp .values ()):
413
420
if prev :
414
421
self .assertAlmostEqual (prev / new , ratio , msg = f"{ prev } / { new } " )
415
-
422
+
423
+ def _checkDetailedNDens (self , prevDetailedNDen , newDetailedNDens , ratio ):
424
+ for prevComp , newComp in zip (prevDetailedNDen .values (), newDetailedNDens .values ()):
425
+ for prev , new in zip (prevComp , newComp ):
426
+ if prev :
427
+ self .assertAlmostEqual (prev / new , ratio , msg = f"{ prev } / { new } " )
428
+
416
429
@staticmethod
417
430
def _getComponentMassAndNDens (a ):
418
431
masses = {}
@@ -422,6 +435,23 @@ def _getComponentMassAndNDens(a):
422
435
masses [c ] = c .getMass ()
423
436
nDens [c ] = c .getNumberDensities ()
424
437
return masses , nDens
438
+
439
+ @staticmethod
440
+ def _setComponentDetailedNDens (a , nDens ):
441
+ detailedNDens = {}
442
+ for b in a :
443
+ for c in getSolidComponents (b ):
444
+ c .p .detailedNDens = copy .deepcopy ([val for val in nDens [c ].values ()])
445
+ detailedNDens [c ] = c .p .detailedNDens
446
+ return detailedNDens
447
+
448
+ @staticmethod
449
+ def _getComponentDetailedNDens (a ):
450
+ detailedNDens = {}
451
+ for b in a :
452
+ for c in getSolidComponents (b ):
453
+ detailedNDens [c ] = copy .deepcopy (c .p .detailedNDens )
454
+ return detailedNDens
425
455
426
456
def test_targetComponentMassConservation (self ):
427
457
"""Tests mass conservation for target components."""
0 commit comments