Changeset 585 for palm


Ignore:
Timestamp:
Oct 14, 2010 11:15:06 AM (14 years ago)
Author:
heinze
Message:

Bugfix: enable plot of data if it is of kind double instead of kind float

Location:
palm/trunk/SCRIPTS/NCL
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SCRIPTS/NCL/cross_sections.ncl

    r566 r585  
    276276
    277277   vNam  = getfilevarnames(f_att)
     278   vType = getfilevartypes(f_att,vNam)
     279
     280   if ((all(vType .eq. "double"))) then ;distinction if data is double or float
     281      check_vType = True
     282   else
     283      check_vType = False
     284   end if
     285
    278286   print(" ")
    279287   print("Variables in input file:")
     
    13461354   if (xyc .EQ. 1) then
    13471355      no_layer = (ze-zs)+1
    1348       data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
     1356      if (check_vType) then
     1357         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),double)
     1358      else
     1359         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
     1360      end if
    13491361   end if
    13501362   if (xzc .EQ. 1) then
    13511363      no_layer = (ye-ys)+1
    1352       data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
     1364      if (check_vType) then
     1365         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),double)
     1366      else
     1367         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
     1368      end if
    13531369   end if
    13541370   if (yzc .EQ. 1) then
    13551371      no_layer = (xe-xs)+1
    1356       data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
    1357    end if
    1358 
    1359    MinVal = new(dim,float)
    1360    MaxVal = new(dim,float)
     1372      if (check_vType) then
     1373         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),double)
     1374      else
     1375         data = new((/dim,nt,(ze-zs)+1,(ye-ys)+1,(xe-xs)+1/),float)
     1376      end if
     1377   end if
     1378
     1379   if (check_vType) then
     1380      MinVal = new(dim,double)
     1381      MaxVal = new(dim,double)
     1382   else
     1383      MinVal = new(dim,float)
     1384      MaxVal = new(dim,float)
     1385   end if
    13611386   unit   = new(dim,string)
    13621387
  • palm/trunk/SCRIPTS/NCL/profiles.ncl

    r566 r585  
    403403   ListSetType(f,"cat")
    404404   
    405    vNam = getfilevarnames(f_att)   
     405   vNam  = getfilevarnames(f_att)
     406   vType = getfilevartypes(f_att,vNam)
     407
     408   if ((all(vType .eq. "double"))) then ;distinction if data is double or float
     409      check_vType = True
     410   else
     411      check_vType = False
     412   end if
    406413   
    407414   if (nof .EQ. 0)then
     
    13391346   end do 
    13401347   
    1341    if (log_z .EQ. 1) then
    1342       data   = new((/dim,np,dimz-1/),float)
     1348   if (log_z .EQ. 1) then     
     1349      if (check_vType) then
     1350         data   = new((/dim,np,dimz-1/),double)
     1351         data_0 = new((/np,dimz-1/),double)
     1352      else
     1353         data   = new((/dim,np,dimz-1/),float)
     1354         data_0 = new((/np,dimz-1/),float)
     1355      end if
    13431356      data@_FillValue=9.96921e+36
    1344       data_0 = new((/np,dimz-1/),float)
    13451357      data_0 = 0.1
    13461358      t      = new((/np,dimz-1/),float)
     
    13711383      end if
    13721384   else
    1373       data   = new((/dim,np,dimz/),float)
    1374       data@_FillValue=9.96921e+36
    1375       data_0 = new((/np,dimz/),float)
     1385      if (check_vType) then
     1386         data   = new((/dim,np,dimz/),double)
     1387         data_0 = new((/np,dimz/),double)
     1388      else
     1389         data   = new((/dim,np,dimz/),float)
     1390         data_0 = new((/np,dimz/),float)
     1391      end if
     1392      data@_FillValue=9.96921e+36     
    13761393      data_0 = 0.0
    13771394      t      = new((/np,dimz/),float)
     
    14181435   if (over .EQ. 1) then
    14191436      plot_u         = gsn_csm_xy(wks,t,data_0(:,:),res)
    1420       miniu = 1.E27
    1421       maxiu =-1.E27
    14221437      plot_v         = gsn_csm_xy(wks,t,data_0(:,:),res)
    1423       miniv = 1.E27
    1424       maxiv =-1.E27
    14251438      plot_w         = gsn_csm_xy(wks,t,data_0(:,:),res)
    1426       miniw = 1.E27
    1427       maxiw =-1.E27
    1428       plot_pt        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1429       minipt = 1.E27
    1430       maxipt =-1.E27
     1439      plot_pt        = gsn_csm_xy(wks,t,data_0(:,:),res)     
    14311440      plot_vpt       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1432       minivpt = 1.E27
    1433       maxivpt =-1.E27
    14341441      plot_lpt       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1435       minilpt = 1.E27
    1436       maxilpt =-1.E27
    14371442      plot_q         = gsn_csm_xy(wks,t,data_0(:,:),res)
    1438       miniq = 1.E27
    1439       maxiq =-1.E27
    14401443      plot_qv        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1441       miniqv = 1.E27
    1442       maxiqv =-1.E27
    14431444      plot_ql        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1444       miniql = 1.E27
    1445       maxiql =-1.E27
    14461445      plot_rho       = gsn_csm_xy(wks,t,data_0(:,:),res)
    14471446      plot_s         = gsn_csm_xy(wks,t,data_0(:,:),res)
    14481447      plot_sa        = gsn_csm_xy(wks,t,data_0(:,:),res)
    14491448      plot_e         = gsn_csm_xy(wks,t,data_0(:,:),res)
    1450       minie = 1.E27
    1451       maxie =-1.E27
    14521449      plot_es        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1453       minie = 1.E27
    1454       maxie =-1.E27
    14551450      plot_km        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1456       minie = 1.E27
    1457       maxie =-1.E27
    14581451      plot_kh        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1459       minie = 1.E27
    1460       maxie =-1.E27
    14611452      plot_l         = gsn_csm_xy(wks,t,data_0(:,:),res)     
    14621453      plot_wpup      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1463       miniwpup = 1.E27
    1464       maxiwpup =-1.E27
    14651454      plot_wsus      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1466       miniwsus = 1.E27
    1467       maxiwsus =-1.E27
    14681455      plot_wu        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1469       miniwu = 1.E27
    1470       maxiwu =-1.E27
    14711456      plot_wpvp      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1472       miniwpvp = 1.E27
    1473       maxiwpvp =-1.E27
    14741457      plot_wsvs      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1475       miniwsvs = 1.E27
    1476       maxiwsvs =-1.E27
    14771458      plot_wv        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1478       miniwv = 1.E27
    1479       maxiwv =-1.E27
    14801459      plot_wpptp     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1481       miniwpptp = 1.E27
    1482       maxiwpptp =-1.E27
    14831460      plot_wspts     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1484       miniwspts = 1.E27
    1485       maxiwspts =-1.E27
    14861461      plot_wpt       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1487       miniwpt = 1.E27
    1488       maxiwpt =-1.E27
    14891462      plot_wsptsBC   = gsn_csm_xy(wks,t,data_0(:,:),res)
    1490       miniwsptsBC = 1.E27
    1491       maxiwsptsBC =-1.E27
    14921463      plot_wptBC     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1493       miniwptBC = 1.E27
    1494       maxiwptBC =-1.E27
    14951464      plot_wpvptp    = gsn_csm_xy(wks,t,data_0(:,:),res)
    1496       miniwpvptp = 1.E27
    1497       maxiwpvptp =-1.E27
    14981465      plot_wsvpts    = gsn_csm_xy(wks,t,data_0(:,:),res)
    1499       miniwsvpts = 1.E27
    1500       maxiewsvpts=-1.E27
    15011466      plot_wvpt      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1502       miniwvpt = 1.E27
    1503       maxiwvpt =-1.E27
    15041467      plot_wpqp      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1505       miniwpqp = 1.E27
    1506       maxiwpqp =-1.E27
    15071468      plot_wsqs      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1508       miniwsqs = 1.E27
    1509       maxiwsqs =-1.E27
    15101469      plot_wq        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1511       miniwq = 1.E27
    1512       maxiwq =-1.E27
    15131470      plot_wpqvp     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1514       miniwpqvp = 1.E27
    1515       maxiwpqvp =-1.E27
    15161471      plot_wsqvs     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1517       miniwsqvs = 1.E27
    1518       maxiwsqvs =-1.E27
    15191472      plot_wqv       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1520       miniwqv = 1.E27
    1521       maxiwqv =-1.E27
    15221473      plot_wpsp      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1523       miniwpsp = 1.E27
    1524       maxiwpsp =-1.E27
    15251474      plot_wsss      = gsn_csm_xy(wks,t,data_0(:,:),res)
    1526       miniwsss = 1.E27
    1527       maxiwsss =-1.E27
    15281475      plot_ws        = gsn_csm_xy(wks,t,data_0(:,:),res)
    1529       miniws = 1.E27
    1530       maxiws =-1.E27
    15311476      plot_wpsap     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1532       miniwpsap = 1.E27
    1533       maxiwpsap =-1.E27
    15341477      plot_wssas     = gsn_csm_xy(wks,t,data_0(:,:),res)
    1535       miniwssas = 1.E27
    1536       maxiwssas =-1.E27
    15371478      plot_wsa       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1538       miniwsa = 1.E27
    1539       maxiwsa =-1.E27
    15401479      plot_wses      = gsn_csm_xy(wks,t,data_0(:,:),res)
    15411480      plot_us2       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1542       minius2 = 1.E27
    1543       maxius2 =-1.E27
    15441481      plot_vs2       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1545       minivs2 = 1.E27
    1546       maxivs2 =-1.E27
    15471482      plot_ws2       = gsn_csm_xy(wks,t,data_0(:,:),res)
    1548       miniws2 = 1.E27
    1549       maxiws2 =-1.E27
    15501483      plot_pts2      = gsn_csm_xy(wks,t,data_0(:,:),res)
    15511484      plot_ws3       = gsn_csm_xy(wks,t,data_0(:,:),res)
     
    15541487      plot_wspts2    = gsn_csm_xy(wks,t,data_0(:,:),res)
    15551488      plot_wsususodz = gsn_csm_xy(wks,t,data_0(:,:),res)
    1556       miniwsususodz = 1.E27
    1557       maxiwsususodz =-1.E27
    15581489      plot_wspsodz   = gsn_csm_xy(wks,t,data_0(:,:),res)
    1559       miniwspsodz = 1.E27
    1560       maxiwspsodz =-1.E27
    15611490      plot_wpeodz    = gsn_csm_xy(wks,t,data_0(:,:),res)
    1562       miniwpeodz = 1.E27
    1563       maxiwpeodz =-1.E27
     1491 
     1492      if (check_vType) then
     1493        miniu         =  100000.d
     1494        maxiu         = -100000.d
     1495        miniv         =  100000.d
     1496        maxiv         = -100000.d
     1497        miniw         =  100000.d
     1498        maxiw         = -100000.d
     1499        minipt        =  100000.d
     1500        maxipt        = -100000.d
     1501        minivpt       =  100000.d
     1502        maxivpt       = -100000.d
     1503        minilpt       =  100000.d
     1504        maxilpt       = -100000.d
     1505        miniq         =  100000.d
     1506        maxiq         = -100000.d
     1507        miniqv        =  100000.d
     1508        maxiqv        = -100000.d
     1509        miniql        =  100000.d
     1510        maxiql        = -100000.d
     1511        minie         =  100000.d
     1512        maxie         = -100000.d
     1513        minies        =  100000.d
     1514        maxies        = -100000.d
     1515        minikm        =  100000.d
     1516        maxikm        = -100000.d
     1517        minikh        =  100000.d
     1518        maxikh        = -100000.d
     1519        miniwpup      =  100000.d
     1520        maxiwpup      = -100000.d
     1521        miniwsus      =  100000.d
     1522        maxiwsus      = -100000.d
     1523        miniwu        =  100000.d
     1524        maxiwu        = -100000.d
     1525        miniwpvp      =  100000.d
     1526        maxiwpvp      = -100000.d
     1527        miniwsvs      =  100000.d
     1528        maxiwsvs      = -100000.d
     1529        miniwv        =  100000.d
     1530        maxiwv        = -100000.d
     1531        miniwpptp     =  100000.d
     1532        maxiwpptp     = -100000.d
     1533        miniwspts     =  100000.d
     1534        maxiwspts     = -100000.d
     1535        miniwpt       =  100000.d
     1536        maxiwpt       = -100000.d
     1537        miniwsptsBC   =  100000.d
     1538        maxiwsptsBC   = -100000.d
     1539        miniwptBC     =  100000.d
     1540        maxiwptBC     = -100000.d
     1541        miniwpvptp    =  100000.d
     1542        maxiwpvptp    = -100000.d
     1543        miniwsvpts    =  100000.d
     1544        maxiwsvpts    = -100000.d
     1545        miniwvpt      =  100000.d
     1546        maxiwvpt      = -100000.d
     1547        miniwpqp      =  100000.d
     1548        maxiwpqp      = -100000.d
     1549        miniwsqs      =  100000.d
     1550        maxiwsqs      = -100000.d
     1551        miniwq        =  100000.d
     1552        maxiwq        = -100000.d
     1553        miniwpqvp     =  100000.d
     1554        maxiwpqvp     = -100000.d
     1555        miniwsqvs     =  100000.d
     1556        maxiwsqvs     = -100000.d
     1557        miniwqv       =  100000.d
     1558        maxiwqv       = -100000.d
     1559        miniwpsp      =  100000.d
     1560        maxiwpsp      = -100000.d
     1561        miniwsss      =  100000.d
     1562        maxiwsss      = -100000.d
     1563        miniws        =  100000.d
     1564        maxiws        = -100000.d
     1565        miniwpsap     =  100000.d
     1566        maxiwpsap     = -100000.d
     1567        miniwssas     =  100000.d
     1568        maxiwssas     = -100000.d
     1569        miniwsa       =  100000.d
     1570        maxiwsa       = -100000.d
     1571        minius2       =  100000.d
     1572        maxius2       = -100000.d
     1573        minivs2       =  100000.d
     1574        maxivs2       = -100000.d
     1575        miniws2       =  100000.d
     1576        maxiws2       = -100000.d
     1577        miniwsususodz =  100000.d
     1578        maxiwsususodz = -100000.d
     1579        miniwspsodz   =  100000.d
     1580        maxiwspsodz   = -100000.d
     1581        miniwpeodz    =  100000.d
     1582        maxiwpeodz    = -100000.d
     1583      else
     1584        miniu         =  100000.
     1585        maxiu         = -100000.
     1586        miniv         =  100000.
     1587        maxiv         = -100000.
     1588        miniw         =  100000.
     1589        maxiw         = -100000.
     1590        minipt        =  100000.
     1591        maxipt        = -100000.
     1592        minivpt       =  100000.
     1593        maxivpt       = -100000.
     1594        minilpt       =  100000.
     1595        maxilpt       = -100000.
     1596        miniq         =  100000.
     1597        maxiq         = -100000.
     1598        miniqv        =  100000.
     1599        maxiqv        = -100000.
     1600        miniql        =  100000.
     1601        maxiql        = -100000.
     1602        minie         =  100000.
     1603        maxie         = -100000.
     1604        minies        =  100000.
     1605        maxies        = -100000.
     1606        minikm        =  100000.
     1607        maxikm        = -100000.
     1608        minikh        =  100000.
     1609        maxikh        = -100000.
     1610        miniwpup      =  100000.
     1611        maxiwpup      = -100000.
     1612        miniwsus      =  100000.
     1613        maxiwsus      = -100000.
     1614        miniwu        =  100000.
     1615        maxiwu        = -100000.
     1616        miniwpvp      =  100000.
     1617        maxiwpvp      = -100000.
     1618        miniwsvs      =  100000.
     1619        maxiwsvs      = -100000.
     1620        miniwv        =  100000.
     1621        maxiwv        = -100000.
     1622        miniwpptp     =  100000.
     1623        maxiwpptp     = -100000.
     1624        miniwspts     =  100000.
     1625        maxiwspts     = -100000.
     1626        miniwpt       =  100000.
     1627        maxiwpt       = -100000.
     1628        miniwsptsBC   =  100000.
     1629        maxiwsptsBC   = -100000.
     1630        miniwptBC     =  100000.
     1631        maxiwptBC     = -100000.
     1632        miniwpvptp    =  100000.
     1633        maxiwpvptp    = -100000.
     1634        miniwsvpts    =  100000.
     1635        maxiwsvpts    = -100000.
     1636        miniwvpt      =  100000.
     1637        maxiwvpt      = -100000.
     1638        miniwpqp      =  100000.
     1639        maxiwpqp      = -100000.
     1640        miniwsqs      =  100000.
     1641        maxiwsqs      = -100000.
     1642        miniwq        =  100000.
     1643        maxiwq        = -100000.
     1644        miniwpqvp     =  100000.
     1645        maxiwpqvp     = -100000.
     1646        miniwsqvs     =  100000.
     1647        maxiwsqvs     = -100000.
     1648        miniwqv       =  100000.
     1649        maxiwqv       = -100000.
     1650        miniwpsp      =  100000.
     1651        maxiwpsp      = -100000.
     1652        miniwsss      =  100000.
     1653        maxiwsss      = -100000.
     1654        miniws        =  100000.
     1655        maxiws        = -100000.
     1656        miniwpsap     =  100000.
     1657        maxiwpsap     = -100000.
     1658        miniwssas     =  100000.
     1659        maxiwssas     = -100000.
     1660        miniwsa       =  100000.
     1661        maxiwsa       = -100000.
     1662        minius2       =  100000.
     1663        maxius2       = -100000.
     1664        minivs2       =  100000.
     1665        maxivs2       = -100000.
     1666        miniws2       =  100000.
     1667        maxiws2       = -100000.
     1668        miniwsususodz =  100000.
     1669        maxiwsususodz = -100000.
     1670        miniwspsodz   =  100000.
     1671        maxiwspsodz   = -100000.
     1672        miniwpeodz    =  100000.
     1673        maxiwpeodz    = -100000.
     1674      end if
     1675
    15641676   end if
    15651677
     
    18641976         end if
    18651977
    1866          if (max_z_int .gt. dimz-1)
     1978         if (max_z_int .ge. dimz-1)
    18671979            max_z_int = dimz-1
    18681980            if (log_z .EQ. 1) then
  • palm/trunk/SCRIPTS/NCL/spectra.ncl

    r566 r585  
    203203   
    204204   vNam = getfilevarnames(f_att)
     205   vType = getfilevartypes(f_att,vNam)
     206
     207   if ((all(vType .eq. "double"))) then ;distinction if data is double or float
     208      check_vType = True
     209   else
     210      check_vType = False
     211   end if
     212
    205213   print(" ")
    206214   print("Variables in input file:")
     
    530538         end do 
    531539         
     540         if (check_vType) then
     541            min_y=new(dimz,double)
     542            max_y=new(dimz,double)
     543         else
     544            min_y=new(dimz,float)
     545            max_y=new(dimz,float)
     546         end if
    532547         min_x=new(dimz,double)
    533548         max_x=new(dimz,double)
    534          min_y=new(dimz,float)
    535          max_y=new(dimz,float)
     549         
    536550         plot_h  = new(dimz,graphic)
    537551         
  • palm/trunk/SCRIPTS/NCL/timeseries.ncl

    r566 r585  
    170170   ListSetType(f,"cat")
    171171
    172    vNam=getfilevarnames(f_att)
    173    vNam_static=vNam
     172   vNam  =getfilevarnames(f_att)
     173   vType = getfilevartypes(f_att,vNam)
     174   vNam_static = vNam
     175
     176   if ((all(vType .eq. "double"))) then ;distinction if data is double or float
     177      check_vType = True
     178   else
     179      check_vType = False
     180   end if
    174181
    175182   print(" ")
     
    356363                                 
    357364   n=0
    358    minE=1.E27
    359    maxE=-1.E27
    360    minus=1.E27
    361    maxus=-1.E27
    362    minu=1.E27
    363    maxu=-1.E27
    364    minz=1.E27
    365    maxz=-1.E27
    366    minw=1.E27
    367    maxw=-1.E27
    368    minp=1.E27
    369    maxp=-1.E27
    370    mins=1.E27
    371    maxs=-1.E27
    372 
    373    data   = new((/dim,(end_time_step-start_time_step)+1/),float)
    374    unit   = new(dim,string)
    375    data_0 = new((end_time_step-start_time_step)+1,float)
     365   if (check_vType) then
     366      minE  =  100000.d
     367      maxE  = -100000.d
     368      minus =  100000.d
     369      maxus = -100000.d
     370      minu  =  100000.d
     371      maxu  = -100000.d
     372      minz  =  100000.d
     373      maxz  = -100000.d
     374      minw  =  100000.d
     375      maxw  = -100000.d
     376      minp  =  100000.d
     377      maxp  = -100000.d
     378      mins  =  100000.d
     379      maxs  = -100000.d
     380   else
     381      minE  =  100000.
     382      maxE  = -100000.
     383      minus =  100000.
     384      maxus = -100000.
     385      minu  =  100000.
     386      maxu  = -100000.
     387      minz  =  100000.
     388      maxz  = -100000.
     389      minw  =  100000.
     390      maxw  = -100000.
     391      minp  =  100000.
     392      maxp  = -100000.
     393      mins  =  100000.
     394      maxs  = -100000.
     395   end if
     396
     397   if (check_vType) then
     398      data   = new((/dim,(end_time_step-start_time_step)+1/),double)
     399      data_0 = new((end_time_step-start_time_step)+1,double)
     400      mini   = new(dim,double)
     401      maxi   = new(dim,double)
     402   else
     403      data   = new((/dim,(end_time_step-start_time_step)+1/),float)
     404      data_0 = new((end_time_step-start_time_step)+1,float)
     405      mini   = new(dim,float)
     406      maxi   = new(dim,float)
     407   end if
     408   unit   = new(dim,string)   
    376409   data_0 = 0.0
    377    mini   = new(dim,float)
    378    maxi   = new(dim,float)
     410 
    379411   
    380412   if (over .EQ. 1) then
Note: See TracChangeset for help on using the changeset viewer.