code: def cal_v(self, p, temp, min_strain=0.3, max_strain=1.0):
          
          v0 = self.params_therm['v0'].nominal_value
          self.force_norm = True
          pp = unp.nominal_values(p)
          ttemp = unp.nominal_values(temp)
  
          def _cal_v_single(pp, ttemp):
              if (pp <= 1.e-5) and (ttemp == 300.):
                  return v0
  
              def f_diff(v, ttemp, pp):
                  return self.cal_p(v, ttemp) - pp
              # print(f_diff(v0 * 0.3, temp, p))
              v = brenth(f_diff, v0 * max_strain, v0 * min_strain,
                         args=(ttemp, pp))
              return v
          f_vu = np.vectorize(_cal_v_single)
          v = f_vu(pp, ttemp)
          self.force_norm = False
          return v
docs: calculate unit-cell volume at given pressure and temperature
  
          :param p: pressure in GPa
          :param temp: temperature in K
          :param min_strain: minimum strain searched for volume root
          :param max_strain: maximum strain searched for volume root
          :return: unit-cell volume in A^3
          :note: 2017/05/10 I found wrap function is not compatible with
              OrderedDict. So I convert unp array to np array.