!----- LGPL -------------------------------------------------------------------- ! ! Copyright (C) Stichting Deltares, 2011-2014. ! ! This library is free software; you can redistribute it and/or ! modify it under the terms of the GNU Lesser General Public ! License as published by the Free Software Foundation version 2.1. ! ! This library is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public ! License along with this library; if not, see . ! ! contact: delft3d.support@deltares.nl ! Stichting Deltares ! P.O. Box 177 ! 2600 MH Delft, The Netherlands ! ! All indications and logos of, and references to, "Delft3D" and "Deltares" ! are registered trademarks of Stichting Deltares, and remain the property of ! Stichting Deltares. All rights reserved. ! !------------------------------------------------------------------------------- ! $Id$ ! $HeadURL$ program his2csv use Dio_Plt_Rw implicit none integer, external :: nargs integer :: numArgs ! #program arguments character(Len=DioMaxStreamLen), & dimension(3) :: args ! program arguments character(Len=DioMaxStreamLen) :: hisFileName ! incoming his file (with or without ext.) character(Len=DioMaxStreamLen) :: outFileName ! name(s) of resulting file(s) integer :: outFileHandle ! out file handle type(DioPltType) :: plt ! par./loc./time dataset read from his file character(Len=DioMaxParLen), & pointer, dimension(:) :: pars ! par. names character(Len=DioMaxParLen), & pointer, dimension(:) :: locs ! loc. names double precision, & pointer, dimension(:) :: times ! pointer to julTimes character(Len=DioMaxParLen), & pointer, dimension(:) :: parsCopy ! par. names double precision, & pointer, dimension(:) :: timesCopy ! pointer to julTimes character(Len=DioMaxParLen), & pointer, dimension(:) :: locsCopy ! loc. names integer :: nPar ! #pars integer :: nLoc ! #locs integer :: nTim ! #time steps real, & pointer, dimension(:,:,:) :: rValues ! received reals integer :: par,loc,t ! loop counters integer :: retval ! return value integer :: streamType ! delftIO stream type character(Len=20) :: valueString ! string containing value retval = 0 ! check / read arguments numArgs = nargs() args(:) = '' if (numArgs >= 1) call GetArg(1, args(1)) if ( numArgs == 1 .or. & numArgs == 2 .and.& ( args(1) == '/?' .or. args(1) == '-?' .or. & StringsEqual( CaseInsens, args(1), '-help' ) .or. & StringsEqual( CaseInsens, args(1), '/help' ) ) ) then write(*,'(A)') 'Usage: his2csv [ specific parameter [ specific location ] ]' write(*,'(A)') ' ex.1: his2csv myResults or his2csv myResults.his' write(*,'(A)') ' ex.2: his2csv myResults.his "discharge [m3/s]"' write(*,'(A)') ' ex.3: his2csv myResults "water level" "hoek van holland"' stop endif if (numArgs >= 2) call GetArg(2, args(2)) if (numArgs >= 3) call GetArg(2, args(2)) ! open and check the dataset streamType = DioDetermineStreamTypeFromName(args(1)) if ( streamType == Dio_Unknown_stream) then streamType = Dio_Unknown_stream endif if ( streamType /= Dio_His_stream) then write(*, '(A)') 'only HIS files support' endif hisFileName = args(1) plt = DioPltGetDataset(hisFileName) if ( .not. DioPltOpenedOK(plt) ) then write(*, '(A)') DioGetLastErrorMsg() retval = -1 endif nPar = DioPltGetNPar(plt) ; pars => DioPltGetPars(plt) nLoc = DioPltGetNLoc(plt) ; locs => DioPltGetLocs(plt) nTim = DioPltGetNTimes(plt); times => DioPltGetTimes(plt) allocate( parsCopy(nPar)); parsCopy = pars allocate(timesCopy(nTim)); timesCopy = times allocate( locsCopy(nLoc)); locsCopy = locs if (nPar <= 0 ) then write(*, '(2A)') 'No parameters available in ', hisFileName retval = -2 endif if (nLoc <= 0 ) then write(*, '(2A)') 'No locations available in ', hisFileName retval = -2 endif if (nTim <= 0 ) then write(*, '(2A)') 'No time steps available in ', hisFileName retval = -2 endif if ( retVal == 0 ) then outFileHandle = DioNewLun() if (numArgs == 2) then ! all values rValues => DioPltGetAllReals(plt) outFileName = trim(hisFileName(1:len_trim(hisFileName)-4))//'.csv' open(outFileHandle,file=outFileName) ! full his file do par = 1, nPar write(outFileHandle, '(2A)') 'parameter: ', trim(parsCopy(par)) write(outFileHandle,'(A)') 'Time Stamp' do loc = 1, nLoc write(outFileHandle, '(2A)') ',', trim(locsCopy(loc)) enddo write(outFileHandle,'(A)') '' do t = 1, nTim write(outFileHandle, '(A)') DioDsJulian2DioTime(timesCopy(t)) do loc = 1, nLoc write(valueString,'(G15.7)') rValues(par,loc,t) write(outFileHandle, '(2A)') ',', trim(valueString) enddo write(outFileHandle, '(A)') '' enddo enddo endif close(outFileHandle) endif end program his2csv