[MITgcm-support] Barotropic ocean gyre tutorial

jklymak at uvic.ca jklymak at uvic.ca
Thu Apr 1 17:18:30 EDT 2021


Hi Jeff,
>   MITgcm requires big endian files,

I’ve always run the MITgcm with native little-endian with no difficulty.  Are there any clusters that are big-endian these days?  I’ve been using MITgcm for 12 years, and probably on 12 different clusters, and they have all been little-endian.  I’m not clear why the big-endian convention is still so strongly favoured.

Cheers   Jody

—
Jody Klymak
http://ocean-physics.seos.uvic.ca/~jklymak/

On Apr 1, 2021, 13:59 -0700, Jeffery R Scott <jscott at mit.edu>, wrote:
> Hi Jeremy,
>
> As Jan responded, MITgcm requires big endian files, which the byteswap statement accomplishes.
> (the other way to do this : data.astype('>f4').tofile('data.bin’) forces python to write out the field in big endian, as mentioned in manual section 3.9)
>
> When you write out a file in big endian, you also need to tell python to read it back in big endian format:
>
> tau_2_1 = np.fromfile('windx_siny.bin',dtype=‘>f4’)
>
> (you might then also want to reshape it)
>
> This is why when you read in field tau2_1 without telling python it is big endian, it doesn’t match your tau2 field.
>
> However, I believe the reason your run is failing using the sine profile is different: as configured, the model expects single precision aka float32 files.
> (MITgcm default for namelist parm readBinaryPrec is 32, i.e. float32; this can be changed in file data)
> The cosine profile file in github is float32, and this works for you. However it looks like you are writing the sine profile file out as float64.
>
> Incidentally, I’ve written a python gendata.py for this tutorial, and better still, a carefully documented python script to compute and display some output
> for tutorial baroclinic gyre, which you might find very helpful. These will hopefully be merged soon into the main github repository, but for
> now can be found in this pull request: https://github.com/MITgcm/MITgcm/pull/386
>
> Jeff
>
>
>
>
> But if you write a file
> > On Apr 1, 2021, at 9:47 AM, Jan Klaus Rieck <jan.rieck at mail.mcgill.ca> wrote:
> >
> > Hello Jeremy Miller,
> >
> > I also use python to to generate input data for the MITgcm. I found that, to generate files that can be read by the MITgcm consistently, I needed to specify the type explicitly.
> > My way of saving the files would look like this in your case:
> >
> > if sys.byteorder == 'little': tau_2.byteswap(True)
> > fid = open(''windx_siny.bin', 'wb')
> > tau_2.astype('float32').tofile(fid)
> >
> > Of course, 'float32' could be replaced by 'float64' if you require double precision.
> >
> > I hope this helps,
> > Jan Rieck
> >
> > On Thu, 2021-04-01 at 10:22 +0300, Jeremy Miller wrote:
> > > Dear MITGCM forum,
> > >
> > > I am Jeremy Miller, I am new to MITgcm and I've been going through the tutorials. I have a question about the "Barotropic Ocean Gyre" tutorial (section 4.1).
> > >
> > > I managed to compile and run the code, and re-produce the first two plots shown in section 4.1.5 for  wind stress of τ = τ0 cos( πy/Ly), for both the advection and non-advection cases (with the provided input binary files).
> > > I ran into problems when trying to produce the third plot, for the case where τ = τ0 sin( πy/Ly). I am a python user, so I translated gendata.m into python to write the input binary files 'windx_cosy.bin' 'windx_siny.bin' (see the file gendata_tut4.1py attached).  As explained in section 3.9 I've included the snippet
> > >
> > > if sys.byteorder == 'little': tau_2.byteswap(True)
> > >
> > > where "tau2" is the array to be output. There was no issue in the cosine wind stress, and I managed to reproduce the results that I got with the original 'windx_cosy.bin' provided in the tutorial. However, with the sine wind stress case, the output in 'Eta.0000077760.001.001' is all zeros.
> > >
> > > When I attempt to read  'windx_siny.bin' with python into a new array called tau2_1. I get absurdly big numbers back, which do not match the original array tau2 that I created. If I Remove the snippet " if sys.byteorder == 'little': tau_2.byteswap(True) ", in the python gendata code, tau2_1 and tau2 match. But, then when I run the code again, the file output.txt contains a long list of NaNs.
> > >
> > > I have also included the python code used to generate the plots in the file tut_4.1_plots.py
> > >
> > > Look forward to hearing from you.
> > > Yours sincerely
> > > Jeremy Miller
> > > _______________________________________________
> > > MITgcm-support mailing list
> > > MITgcm-support at mitgcm.org
> > >
> > > http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support
> > >
> > _______________________________________________
> > MITgcm-support mailing list
> > MITgcm-support at mitgcm.org
> > http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support
>
> _______________________________________________
> MITgcm-support mailing list
> MITgcm-support at mitgcm.org
> http://mailman.mitgcm.org/mailman/listinfo/mitgcm-support
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.mitgcm.org/pipermail/mitgcm-support/attachments/20210401/b37e5bc0/attachment-0001.html>


More information about the MITgcm-support mailing list