I want to export variables about u,v,t,s,zeta etc, not by nc. At the last of main3d.F, I write like this 'write(stdout,*) u(100,100,1,nnew)',however,when I make it ,it said 'Error: Function 'u' at (1) has no IMPLICIT type'.OK,when I define the u at the beginning of the main3d.F,error like this 'real(r8), intent(inout) :: u(:,:,:,:)
Error: Symbol at (1) is not a DUMMY variable
how to solve this problem ?
how to export variables about u,v,t,s,zeta etc
Re: how to export variables about u,v,t,s,zeta etc
It's not so easy as that, especially if you are running in parallel. You'd be better off letting it write the netcdf files and then using some other means to create the ascii dump, if that's what you really want.
Re: how to export variables about u,v,t,s,zeta etc
30, I want to run ROMS with data assimilation with ensemble optimal interpolation(EnOI), EnOI need u,v,t,s,zeta, ROMS export them and EnOI use them to calculate ,then return back to ROMS, and ROMS continue to run . This is my idea of my work .
I define the ‘use mod_ocean ’at main3d.F, and it can write u, however ,another problem occur ,my domain is 450*140*30,however ,it can export ‘ write(stdout,*) ocean(ng)%u(2000,2000,1,nnew)’,2000,2000,it is so larger than 450*140,I donot know why it can do like this .for my original idea ,if ocean(ng)%u(2000,2000,1,nnew),it will not make success.
I define the ‘use mod_ocean ’at main3d.F, and it can write u, however ,another problem occur ,my domain is 450*140*30,however ,it can export ‘ write(stdout,*) ocean(ng)%u(2000,2000,1,nnew)’,2000,2000,it is so larger than 450*140,I donot know why it can do like this .for my original idea ,if ocean(ng)%u(2000,2000,1,nnew),it will not make success.
Re: how to export variables about u,v,t,s,zeta etc
I don't understand at all. You are asking it to print one point that is not within your domain? Is one point enough for your EnOI?
- arango
- Site Admin
- Posts: 1356
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Re: how to export variables about u,v,t,s,zeta etc
You cannot do this
Data assimilation is a complicated beast. If you want to do ensemble assimilation, you need to follow ROMS framework design. You cannot write to standard output neither other Fortran output units, it is a huge parallel bug
You need to follow ROMS metadata I/O design and do it via NetCDF files. ROMS has a predictor/corrector scheme and you need to do the I/O at the appropriate place and for the correct time level index.
ROMS already has a very sophisticated adjoint-based data assimilation system. It already has observations operators to interpolate the model fields to the observations points. The observations are also provided to ROMS via NetCDF files.
Your strategy to code this capability is flaw and you need to understand better ROMS framework before you even start coding a single line
Others have coded ensemble Kalman filters in ROMS very easily using already coded ensemble capabilities in ROMS. As a matter of fact, the changes required in ROMS were minimal or none because this assimilation strategy if done offline using ROMS rich metadata design and NetCDF I/O.
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
ROMS already has a very sophisticated adjoint-based data assimilation system. It already has observations operators to interpolate the model fields to the observations points. The observations are also provided to ROMS via NetCDF files.
Your strategy to code this capability is flaw and you need to understand better ROMS framework before you even start coding a single line
![Exclamation :!:](./images/smilies/icon_exclaim.gif)