@@ -42,6 +42,7 @@ def setup_handler(self, domain):
42
42
self .ds = ds = domain .ds
43
43
self .domain = domain
44
44
self .domain_id = domain .domain_id
45
+
45
46
basename = os .path .abspath (ds .root_folder )
46
47
iout = int (os .path .basename (ds .parameter_filename ).split ("." )[0 ].split ("_" )[1 ])
47
48
@@ -166,6 +167,9 @@ def __init_subclass__(cls, *args, **kwargs):
166
167
register_field_handler (cls )
167
168
168
169
cls ._unique_registry = {}
170
+ cls .parameters = {}
171
+ cls .rt_parameters = {}
172
+ cls ._detected_field_list = {}
169
173
return cls
170
174
171
175
def __init__ (self , domain ):
@@ -231,6 +235,10 @@ def level_count(self):
231
235
232
236
return self ._level_count
233
237
238
+ @property
239
+ def field_list (self ):
240
+ return self ._detected_field_list [self .ds .unique_identifier ]
241
+
234
242
@cached_property
235
243
def offset (self ):
236
244
"""
@@ -242,7 +250,7 @@ def offset(self):
242
250
It should be generic enough for most of the cases, but if the
243
251
*structure* of your fluid file is non-canonical, change this.
244
252
"""
245
- nvars = len (self .field_list )
253
+ nvars = len (self ._detected_field_list [ self . ds . unique_identifier ] )
246
254
with FortranFile (self .fname ) as fd :
247
255
# Skip headers
248
256
nskip = len (self .attrs )
@@ -265,7 +273,7 @@ def offset(self):
265
273
fd ,
266
274
min_level ,
267
275
self .domain .domain_id ,
268
- self .parameters ["nvar" ],
276
+ self .parameters [self . ds . unique_identifier ][ "nvar" ],
269
277
self .domain .amr_header ,
270
278
Nskip = nvars * 8 ,
271
279
)
@@ -314,7 +322,7 @@ def detect_fields(cls, ds):
314
322
attrs = cls .attrs
315
323
with FortranFile (fname ) as fd :
316
324
hvals = fd .read_attrs (attrs )
317
- cls .parameters = hvals
325
+ cls .parameters [ ds . unique_identifier ] = hvals
318
326
319
327
# Store some metadata
320
328
ds .gamma = hvals ["gamma" ]
@@ -445,7 +453,9 @@ def detect_fields(cls, ds):
445
453
count_extra += 1
446
454
if count_extra > 0 :
447
455
mylog .debug ("Detected %s extra fluid fields." , count_extra )
448
- cls .field_list = [(cls .ftype , e ) for e in fields ]
456
+ cls ._detected_field_list [ds .unique_identifier ] = [
457
+ (cls .ftype , e ) for e in fields
458
+ ]
449
459
450
460
cls .set_detected_fields (ds , fields )
451
461
@@ -476,9 +486,9 @@ def detect_fields(cls, ds):
476
486
basedir = os .path .split (ds .parameter_filename )[0 ]
477
487
fname = os .path .join (basedir , cls .fname .format (iout = iout , icpu = 1 ))
478
488
with FortranFile (fname ) as fd :
479
- cls .parameters = fd .read_attrs (cls .attrs )
489
+ cls .parameters [ ds . unique_identifier ] = fd .read_attrs (cls .attrs )
480
490
481
- nvar = cls .parameters ["nvar" ]
491
+ nvar = cls .parameters [ds . unique_identifier ][ "nvar" ]
482
492
ndim = ds .dimensionality
483
493
484
494
fields = cls .load_fields_from_yt_config ()
@@ -497,7 +507,9 @@ def detect_fields(cls, ds):
497
507
for i in range (nvar - ndetected ):
498
508
fields .append (f"var{ i } " )
499
509
500
- cls .field_list = [(cls .ftype , e ) for e in fields ]
510
+ cls ._detected_field_list [ds .unique_identifier ] = [
511
+ (cls .ftype , e ) for e in fields
512
+ ]
501
513
502
514
cls .set_detected_fields (ds , fields )
503
515
@@ -572,7 +584,7 @@ def read_rhs(cast):
572
584
# Touchy part, we have to read the photon group properties
573
585
mylog .debug ("Not reading photon group properties" )
574
586
575
- cls .rt_parameters = rheader
587
+ cls .rt_parameters [ ds . unique_identifier ] = rheader
576
588
577
589
ngroups = rheader ["nGroups" ]
578
590
@@ -581,7 +593,7 @@ def read_rhs(cast):
581
593
fname = os .path .join (basedir , cls .fname .format (iout = iout , icpu = 1 ))
582
594
fname_desc = os .path .join (basedir , cls .file_descriptor )
583
595
with FortranFile (fname ) as fd :
584
- cls .parameters = fd .read_attrs (cls .attrs )
596
+ cls .parameters [ ds . unique_identifier ] = fd .read_attrs (cls .attrs )
585
597
586
598
ok = False
587
599
@@ -615,16 +627,18 @@ def read_rhs(cast):
615
627
for ng in range (ngroups ):
616
628
fields .extend ([t % (ng + 1 ) for t in tmp ])
617
629
618
- cls .field_list = [(cls .ftype , e ) for e in fields ]
630
+ cls ._detected_field_list [ds .unique_identifier ] = [
631
+ (cls .ftype , e ) for e in fields
632
+ ]
619
633
620
634
cls .set_detected_fields (ds , fields )
621
635
return fields
622
636
623
637
@classmethod
624
638
def get_rt_parameters (cls , ds ):
625
- if cls .rt_parameters :
626
- return cls .rt_parameters
639
+ if cls .rt_parameters [ ds . unique_identifier ] :
640
+ return cls .rt_parameters [ ds . unique_identifier ]
627
641
628
642
# Call detect fields to get the rt_parameters
629
643
cls .detect_fields (ds )
630
- return cls .rt_parameters
644
+ return cls .rt_parameters [ ds . unique_identifier ]
0 commit comments