replica nfl jerseysreplica nfl jerseyssoccer jerseyreplica nfl jerseys forums.silverfrost.com :: View topic - FTN95 and netCDF
forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

FTN95 and netCDF

 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General
View previous topic :: View next topic  
Author Message
arctica



Joined: 10 Sep 2006
Posts: 146
Location: United Kingdom

PostPosted: Tue Feb 18, 2025 12:21 pm    Post subject: FTN95 and netCDF Reply with quote

Hello,

Just wondering if anyone has managed to build the netcdf Fortran module to work with FTN95 or if there are other ways to deal with netCDF in Fortran?

The code is rather involved!
https://docs.unidata.ucar.edu/netcdf-fortran/current/


I have used a workaround that requires GMT (Generic Mapping Tools) installed to allow reading and writing netCDF grid files. Not perfect but works.

A simple read/write test:

Code:
! Test driver program for working with netCDF files
! Prerequisite - full install of Generic Mapping Tools (GMT)
! Binaries must be in the PATH (default under Windows)

program read_netcdf
 
  implicit none
 
  character(len=30) :: filename
  character(len=100) :: range_str, command
  integer :: ierror, ios, n
  real(kind=2) :: x, y, z
  real(kind=2) :: xmin, xmax, ymin, ymax, zmin, zmax
  character(len=200) :: line
  logical :: first = .true.
 
  filename = 'Bathy_crop1_scaled.grd'

  ! Prompt user for the NetCDF file name
  !write(*,*) 'Enter the NetCDF filename: '
  !read(*, '(a)') filename

  ! Use GMT to get x, y  and z from a netCDF file for processing
  ! Use gmt command grd2xyz with redirection
  call system(trim('grd2xyz ' // trim(filename) // ' > gmt_xyz.txt'))

! XYZ file generated by grd2xyz (netCDF to xyz)
open(10, file="gmt_xyz.txt", status="old", action="read", iostat=ierror)
open(20, file='xyz_output.txt')

n = 0
do
     read(10, '(a)', IOSTAT=ios) line
     if (ios /= 0) exit  ! exit loop if end of file

     ! read x, y, z values from the line
     read(line, *, iostat=ios) x, y, z
     if (ios /= 0) cycle  ! skip invalid lines
     n = n + 1 ! Line count

     ! initialize min/max with the first valid values
     if (first) then
        xmin = x; ymin = y; zmin = z
        xmax = x; ymax = y; zmax = z
        first = .false.
     else
        xmin = min(xmin, x)
        ymin = min(ymin, y)
        zmin = min(zmin, z)
        xmax = max(xmax, x)
        ymax = max(ymax, y)
        zmax = max(zmax, z)
     end if

      ! Match the data precision of the GMT text data from xyz2grd
      write(20,'(f12.5,1x,f15.5,1x,f15.8)') x, y, z
end do

close(10)
close(20)

! Convert each real number to a string and trim spaces
write(range_str, '(F0.2,"/",F0.2,"/",F0.2,"/",F0.2)') xmin, xmax, ymin, ymax

write(*,*) 'Data read complete. Number of points: ', n
write(*,'(A,F12.5,A,F12.5)') 'X range: ', xmin, ' to ', xmax
write(*,'(A,F15.5,A,F15.5)') 'Y range: ', ymin, ' to ', ymax
write(*,'(A,F10.5,A,F10.5)') 'Z range: ', zmin, ' to ', zmax

! GMT command to build a netCDF grid file
command = 'xyz2grd xyz_output.txt -Gxyzoutput2.grd -R' // trim(range_str) // ' -I0.25 -V'

! Check the string results
print *, trim(range_str)
print *, trim(command)

call system(command)

end program read_netcdf


Lester
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group