[yt-svn] commit/yt: 2 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Mon Oct 17 14:20:33 PDT 2016


2 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/26b2a52ee4bd/
Changeset:   26b2a52ee4bd
Branch:      yt
User:        hyschive
Date:        2016-10-04 20:43:13+00:00
Summary:     Support units in GAMER frontend
Affected #:  2 files

diff -r 1d70bf4124996d584483c173e37f29670a73db99 -r 26b2a52ee4bd2e2de18e6410442dd031fe60219b doc/source/examining/loading_data.rst
--- a/doc/source/examining/loading_data.rst
+++ b/doc/source/examining/loading_data.rst
@@ -1055,8 +1055,8 @@
    import yt
    ds = yt.load("InteractingJets/jet_000002")
 
-Currently GAMER does not assume any unit for non-cosmological simulations. To specify the units for yt,
-you need to supply conversions for length, time, and mass to ``load`` using the ``units_override`` functionality:
+For simulations without units (i.e., OPT__UNIT = 0), you can supply conversions for
+length, time, and mass to ``load`` using the ``units_override`` functionality:
 
 .. code-block:: python
 

diff -r 1d70bf4124996d584483c173e37f29670a73db99 -r 26b2a52ee4bd2e2de18e6410442dd031fe60219b yt/frontends/gamer/data_structures.py
--- a/yt/frontends/gamer/data_structures.py
+++ b/yt/frontends/gamer/data_structures.py
@@ -230,45 +230,64 @@
         self.storage_filename = storage_filename
 
     def _set_code_unit_attributes(self):
-        # GAMER does not assume any unit yet ...
-        if len(self.units_override) == 0:
-            mylog.warning("GAMER does not assume any unit ==> " +
-                          "Use units_override to specify the units")
+        if self.parameters['Opt__Unit']:
+            # GAMER units are always in CGS
+            setdefaultattr( self, 'length_unit', self.quan(self.parameters['Unit_L'], 'cm') )
+            setdefaultattr( self, 'mass_unit',   self.quan(self.parameters['Unit_M'], 'g' ) )
+            setdefaultattr( self, 'time_unit',   self.quan(self.parameters['Unit_T'], 's' ) )
 
-        for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
-            setdefaultattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
+        else:
+            if len(self.units_override) == 0:
+                mylog.warning("Cannot determine code units ==> " +
+                              "Use units_override to specify the units")
 
-            if len(self.units_override) == 0:
-                mylog.warning("Assuming 1.0 = 1.0 %s", cgs)
+            for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
+                setdefaultattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
+
+                if len(self.units_override) == 0:
+                    mylog.warning("Assuming %s unit = 1.0 %s", unit, cgs)
 
     def _parse_parameter_file(self):
         self.unique_identifier = \
             int(os.stat(self.parameter_filename)[stat.ST_CTIME])
 
-        # shortcuts for different simulation information
-        KeyInfo   = self._handle['Info']['KeyInfo']
-        InputPara = self._handle['Info']['InputPara']
-        Makefile  = self._handle['Info']['Makefile']
-        SymConst  = self._handle['Info']['SymConst']
+        # code-specific parameters
+        for t in self._handle['Info']:
+            info_category = self._handle['Info'][t]
+            for v in info_category.dtype.names: self.parameters[v] = info_category[v]
+
+        # shortcut for self.parameters
+        parameters = self.parameters
+
+        # reset 'Model' to be more readable
+        if parameters['Model'] == 1:
+            parameters['Model'] = 'Hydro'
+        elif parameters['Model'] == 2:
+            parameters['Model'] = 'MHD'
+        elif parameters['Model'] == 3:
+            parameters['Model'] = 'ELBDM'
+        else:
+            parameters['Model'] = 'Unknown'
 
         # simulation time and domain
-        self.current_time      = KeyInfo['Time'][0]
+        self.current_time      = parameters['Time'][0]
         self.dimensionality    = 3  # always 3D
         self.domain_left_edge  = np.array([0.,0.,0.], dtype='float64')
-        self.domain_right_edge = KeyInfo['BoxSize'].astype('float64')
-        self.domain_dimensions = KeyInfo['NX0'].astype('int64')
+        self.domain_right_edge = parameters['BoxSize'].astype('float64')
+        self.domain_dimensions = parameters['NX0'].astype('int64')
 
         # periodicity
-        periodic         = InputPara['Opt__BC_Flu'][0] == 0
+        periodic         = parameters['Opt__BC_Flu'][0] == 0
         self.periodicity = (periodic,periodic,periodic)
 
         # cosmological parameters
-        if Makefile['Comoving']:
+        if parameters['Comoving']:
             self.cosmological_simulation = 1
             self.current_redshift        = 1.0/self.current_time - 1.0
-            self.omega_matter            = InputPara['OmegaM0']
+            self.omega_matter            = parameters['OmegaM0']
             self.omega_lambda            = 1.0 - self.omega_matter
-            self.hubble_constant         = 0.6955   # H0 is not set in GAMER
+            # default to 0.7 for old data format
+            self.hubble_constant         = parameters.get('Hubble0', 0.7)
         else:
             self.cosmological_simulation = 0
             self.current_redshift        = 0.0
@@ -276,25 +295,14 @@
             self.omega_lambda            = 0.0
             self.hubble_constant         = 0.0
 
-        # code-specific parameters
-        for t in KeyInfo, InputPara, Makefile, SymConst:
-            for v in t.dtype.names: self.parameters[v] = t[v]
+        # make aliases to some frequently used variables
+        if parameters['Model'] == 'Hydro' or parameters['Model'] == 'MHD':
+            self.gamma = parameters["Gamma"]
+            # default to 0.6 for old data format
+            self.mu    = parameters.get('MolecularWeight', 0.6)
 
-        # reset 'Model' to be more readable
-        if KeyInfo['Model'] == 1:
-            self.parameters['Model'] = 'Hydro'
-        elif KeyInfo['Model'] == 2:
-            self.parameters['Model'] = 'MHD'
-        elif KeyInfo['Model'] == 3:
-            self.parameters['Model'] = 'ELBDM'
-        else:
-            self.parameters['Model'] = 'Unknown'
-
-        # make aliases to some frequently used variables
-        if self.parameters['Model'] == 'Hydro' or \
-           self.parameters['Model'] == 'MHD':
-            self.gamma = self.parameters["Gamma"]
-            self.mu    = self.parameters.get("mu",0.6) # mean molecular weight
+        # old data format (version < 2210) does not contain any information of code units
+        self.parameters.setdefault('Opt__Unit', 0)
 
     @classmethod
     def _is_valid(self, *args, **kwargs):


https://bitbucket.org/yt_analysis/yt/commits/362ac1f1f4b6/
Changeset:   362ac1f1f4b6
Branch:      yt
User:        ngoldbaum
Date:        2016-10-17 21:20:05+00:00
Summary:     Merged in hyschive/yt-fork (pull request #2408)

Support units in GAMER
Affected #:  2 files

diff -r 1d43d35f96cf7d7ed8aa8e52222a5a415c4e6215 -r 362ac1f1f4b6a08dae5c4463ee20d5f5215cf639 doc/source/examining/loading_data.rst
--- a/doc/source/examining/loading_data.rst
+++ b/doc/source/examining/loading_data.rst
@@ -1055,8 +1055,8 @@
    import yt
    ds = yt.load("InteractingJets/jet_000002")
 
-Currently GAMER does not assume any unit for non-cosmological simulations. To specify the units for yt,
-you need to supply conversions for length, time, and mass to ``load`` using the ``units_override`` functionality:
+For simulations without units (i.e., OPT__UNIT = 0), you can supply conversions for
+length, time, and mass to ``load`` using the ``units_override`` functionality:
 
 .. code-block:: python
 

diff -r 1d43d35f96cf7d7ed8aa8e52222a5a415c4e6215 -r 362ac1f1f4b6a08dae5c4463ee20d5f5215cf639 yt/frontends/gamer/data_structures.py
--- a/yt/frontends/gamer/data_structures.py
+++ b/yt/frontends/gamer/data_structures.py
@@ -230,45 +230,64 @@
         self.storage_filename = storage_filename
 
     def _set_code_unit_attributes(self):
-        # GAMER does not assume any unit yet ...
-        if len(self.units_override) == 0:
-            mylog.warning("GAMER does not assume any unit ==> " +
-                          "Use units_override to specify the units")
+        if self.parameters['Opt__Unit']:
+            # GAMER units are always in CGS
+            setdefaultattr( self, 'length_unit', self.quan(self.parameters['Unit_L'], 'cm') )
+            setdefaultattr( self, 'mass_unit',   self.quan(self.parameters['Unit_M'], 'g' ) )
+            setdefaultattr( self, 'time_unit',   self.quan(self.parameters['Unit_T'], 's' ) )
 
-        for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
-            setdefaultattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
+        else:
+            if len(self.units_override) == 0:
+                mylog.warning("Cannot determine code units ==> " +
+                              "Use units_override to specify the units")
 
-            if len(self.units_override) == 0:
-                mylog.warning("Assuming 1.0 = 1.0 %s", cgs)
+            for unit, cgs in [("length", "cm"), ("time", "s"), ("mass", "g")]:
+                setdefaultattr(self, "%s_unit"%unit, self.quan(1.0, cgs))
+
+                if len(self.units_override) == 0:
+                    mylog.warning("Assuming %s unit = 1.0 %s", unit, cgs)
 
     def _parse_parameter_file(self):
         self.unique_identifier = \
             int(os.stat(self.parameter_filename)[stat.ST_CTIME])
 
-        # shortcuts for different simulation information
-        KeyInfo   = self._handle['Info']['KeyInfo']
-        InputPara = self._handle['Info']['InputPara']
-        Makefile  = self._handle['Info']['Makefile']
-        SymConst  = self._handle['Info']['SymConst']
+        # code-specific parameters
+        for t in self._handle['Info']:
+            info_category = self._handle['Info'][t]
+            for v in info_category.dtype.names: self.parameters[v] = info_category[v]
+
+        # shortcut for self.parameters
+        parameters = self.parameters
+
+        # reset 'Model' to be more readable
+        if parameters['Model'] == 1:
+            parameters['Model'] = 'Hydro'
+        elif parameters['Model'] == 2:
+            parameters['Model'] = 'MHD'
+        elif parameters['Model'] == 3:
+            parameters['Model'] = 'ELBDM'
+        else:
+            parameters['Model'] = 'Unknown'
 
         # simulation time and domain
-        self.current_time      = KeyInfo['Time'][0]
+        self.current_time      = parameters['Time'][0]
         self.dimensionality    = 3  # always 3D
         self.domain_left_edge  = np.array([0.,0.,0.], dtype='float64')
-        self.domain_right_edge = KeyInfo['BoxSize'].astype('float64')
-        self.domain_dimensions = KeyInfo['NX0'].astype('int64')
+        self.domain_right_edge = parameters['BoxSize'].astype('float64')
+        self.domain_dimensions = parameters['NX0'].astype('int64')
 
         # periodicity
-        periodic         = InputPara['Opt__BC_Flu'][0] == 0
+        periodic         = parameters['Opt__BC_Flu'][0] == 0
         self.periodicity = (periodic,periodic,periodic)
 
         # cosmological parameters
-        if Makefile['Comoving']:
+        if parameters['Comoving']:
             self.cosmological_simulation = 1
             self.current_redshift        = 1.0/self.current_time - 1.0
-            self.omega_matter            = InputPara['OmegaM0']
+            self.omega_matter            = parameters['OmegaM0']
             self.omega_lambda            = 1.0 - self.omega_matter
-            self.hubble_constant         = 0.6955   # H0 is not set in GAMER
+            # default to 0.7 for old data format
+            self.hubble_constant         = parameters.get('Hubble0', 0.7)
         else:
             self.cosmological_simulation = 0
             self.current_redshift        = 0.0
@@ -276,25 +295,14 @@
             self.omega_lambda            = 0.0
             self.hubble_constant         = 0.0
 
-        # code-specific parameters
-        for t in KeyInfo, InputPara, Makefile, SymConst:
-            for v in t.dtype.names: self.parameters[v] = t[v]
+        # make aliases to some frequently used variables
+        if parameters['Model'] == 'Hydro' or parameters['Model'] == 'MHD':
+            self.gamma = parameters["Gamma"]
+            # default to 0.6 for old data format
+            self.mu    = parameters.get('MolecularWeight', 0.6)
 
-        # reset 'Model' to be more readable
-        if KeyInfo['Model'] == 1:
-            self.parameters['Model'] = 'Hydro'
-        elif KeyInfo['Model'] == 2:
-            self.parameters['Model'] = 'MHD'
-        elif KeyInfo['Model'] == 3:
-            self.parameters['Model'] = 'ELBDM'
-        else:
-            self.parameters['Model'] = 'Unknown'
-
-        # make aliases to some frequently used variables
-        if self.parameters['Model'] == 'Hydro' or \
-           self.parameters['Model'] == 'MHD':
-            self.gamma = self.parameters["Gamma"]
-            self.mu    = self.parameters.get("mu",0.6) # mean molecular weight
+        # old data format (version < 2210) does not contain any information of code units
+        self.parameters.setdefault('Opt__Unit', 0)
 
     @classmethod
     def _is_valid(self, *args, **kwargs):

Repository URL: https://bitbucket.org/yt_analysis/yt/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the yt-svn mailing list