[ncl-talk] avoiding loops

Dennis Shea shea at ucar.edu
Mon Sep 23 10:57:13 MDT 2019


*  fmtf*

Format to be used, specified *via Fortran style*. The format string used
must agree with the variable type.

===

Google fortran edit descriptors..

"384(f0.1,','),f0.1"

"384(i5,','),i5"

On Mon, Sep 23, 2019 at 12:43 PM Micah Sklut via ncl-talk <ncl-talk at ucar.edu>
wrote:

> This worked great Dave. I appreciate the great support. I did the
> asciiread to read back in all the string arrays, and then used write_table
> to format the final output.
>
> One last question. When formating the write_matrix calls, I'm trying to
> write a float variable to integer format.  When I use, floattointeger
> function, it properly converts the values to integers, however, it doesn't
> change the variable type in the metadata from float to integer. This
> doesn't allow me to write_matrix using integer format. Is there an easy way
> to get around this?
>
> On Sun, Sep 22, 2019 at 8:31 PM Dave Allured - NOAA Affiliate <
> dave.allured at noaa.gov> wrote:
>
>> Write_matrix is strictly for output to only a text file, or Unix standard
>> output.  There is no internal write capability.  However, you can simulate
>> internal writes by using one or more temporary files.
>>
>> Read the formatted lines back in from a temp file with asciiread
>> ("tmp.txt", -1, "string").  This gives you a 1-D array of strings, one full
>> line for each of your grid points.  Then repeat for each of your other
>> variables.  This will efficiently give you arrays of full formatted line
>> strings for several variables.
>>
>> You should then be able to join these line strings together, however you
>> have in mind.  Also, now that you are operating on strings, you can add
>> text columns at the beginning or end of each string, if this would be of
>> any help.  For example:
>>
>> long_lines = "precip," + p_lines(:) + ",Tmin," + tmin_lines(:) +
>> ",Tmax," + tmax_lines(:)
>>
>> This example is for joining horizontally.  You could also join vertically
>> by simply joining the string arrays, with or without interleaving.  There
>> are many variations on this theme, depending on how you want your final
>> output to be structured.
>>
>>
>> On Sun, Sep 22, 2019 at 5:29 PM Micah Sklut <micahs2005 at gmail.com> wrote:
>>
>>> Instead of sending output to a file, is it possible to do a write_matrix
>>> formatting to 1d array?  I need to add more than 1 of these variables
>>> together, so if I can create 1d arrays for all of the variables and
>>> metadata, such as lat/lon, then I can use write_table to join everything
>>> together. When I'm re-ordering or reshaping the arrays, I'll just need to
>>> delete the old arrays, to free up memory.
>>>
>>> On Sun, Sep 22, 2019 at 1:51 PM Dave Allured - NOAA Affiliate <
>>> dave.allured at noaa.gov> wrote:
>>>
>>>> There is a mistake in the untested example that I sent.  Please change
>>>> the format spec from "384(f0.1,','),f0.1" to "383(f0.1,','),f0.1".  The
>>>> latter is correct for 384 numbers per line.  I split the format spec into
>>>> two parts so that there would not be a trailing comma at the end of each
>>>> line.
>>>>
>>>> Generally speaking, the format spec in write_matrix is specified for a
>>>> single output line.  It is repeated for each output line.  It is important
>>>> that the total item count in the format spec (383 + 1 in this case) exactly
>>>> matches the intended number of items per line.
>>>>
>>>>
>>>> On Sun, Sep 22, 2019 at 11:32 AM Micah Sklut <micahs2005 at gmail.com>
>>>> wrote:
>>>>
>>>>> Okay, thanks, Dave.  That sounds like what I need. I've always
>>>>> struggled with the formatting in NCL, but I'll give that a go and see where
>>>>> I get.
>>>>>
>>>>> On Sun, Sep 22, 2019 at 1:26 PM Dave Allured - NOAA Affiliate <
>>>>> dave.allured at noaa.gov> wrote:
>>>>>
>>>>>> Try write_matrix and the F0 format descriptor.  F0 format is part of
>>>>>> fortran 90 and up.  It is described in modern fortran documentation.  It is
>>>>>> like the common Fw.d format descriptor, except leading blanks to the left
>>>>>> of the decimal point are suppressed.
>>>>>>
>>>>>> Reshape your array from, e.g. (lat,lon,time), to a 2-D array in the
>>>>>> desired output order, (points,time).  Npoints = Nlats x Nlons.  Then a
>>>>>> single call to write_matrix should write the entire output file:
>>>>>>
>>>>>>     opt = True
>>>>>>     opt at fout = "temperature.csv"
>>>>>>     write_matrix (data_out, "384(f0.1,','),f0.1", opt)
>>>>>>
>>>>>> You can add arbitrary extra numeric columns to the output array, if
>>>>>> it would be helpful to have lats and lons, or other such metadata, on each
>>>>>> line of output.
>>>>>>
>>>>>>
>>>>>> On Sat, Sep 21, 2019 at 2:53 PM Micah Sklut via ncl-talk <
>>>>>> ncl-talk at ucar.edu> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have a task to take GFS data and concatenate variables across all
>>>>>>> the forecast hours, for each grid point.
>>>>>>>
>>>>>>> For example, taking a temperature variable for each grid point, for
>>>>>>> all latitude and longitudes, and creating a string that represents the
>>>>>>> values for each forecast hour.
>>>>>>> So, if we have for latitude y, and longitude x, there would be a
>>>>>>> string value like "70.5,71.5,71.5,72.0,...nHours".  The end product will be
>>>>>>> a line for each grid point for the variables i"m looking at that will be
>>>>>>> written to a file to be imported into a database.
>>>>>>>
>>>>>>> Creating loops through all hours, latitudes, and longitudes will get
>>>>>>> the job done, but is expensive and was looking to see if there were any NCL
>>>>>>> functions that would help here.
>>>>>>>
>>>>>>> Thank you.
>>>>>>>
>>>>>>
>
> --
> Micah Sklut
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190923/9a218834/attachment.html>


More information about the ncl-talk mailing list