Scrambler  1
io_bov.f90
Go to the documentation of this file.
00001 !#########################################################################
00002 !               
00003 !    Copyright (C) 2003-2012 Department of Physics and Astronomy,
00004 !                            University of Rochester,
00005 !                            Rochester, NY
00006 !
00007 !    io_bov.f90 is part of AstroBEAR.
00008 !
00009 !    AstroBEAR is free software: you can redistribute it and/or modify    
00010 !    it under the terms of the GNU General Public License as published by 
00011 !    the Free Software Foundation, either version 3 of the License, or    
00012 !    (at your option) any later version.
00013 !
00014 !    AstroBEAR is distributed in the hope that it will be useful, 
00015 !    but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 !    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 !    GNU General Public License for more details.
00018 !
00019 !    You should have received a copy of the GNU General Public License
00020 !    along with AstroBEAR.  If not, see <http://www.gnu.org/licenses/>.
00021 !
00022 !#########################################################################
00025 
00029 
00032 MODULE IOBOV
00033    IMPLICIT NONE
00034 
00035 CONTAINS
00036 
00037    SUBROUTINE WriteBOV2DScalar(name, lower, upper, tnow, data, varname)
00038       USE GlobalDeclarations
00039       CHARACTER(LEN=*) :: name, varname
00040       CHARACTER(LEN=100) :: Filename
00041       REAL(KIND=qPREC) :: lower(2), upper(2), tnow
00042       REAL(KIND=qPREC), DIMENSION(:,:) :: data
00043       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".dat"
00044       OPEN(UNIT=BOV_DATA_HANDLE, FILE=TRIM(FileName), status="replace", FORM="unformatted")
00045       write(BOV_DATA_HANDLE) data
00046       CLOSE(BOV_DATA_HANDLE)
00047       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".bov"
00048       OPEN(UNIT=BOV_DATA_HANDLE, FILE=Filename)
00049       WRITE(BOV_DATA_HANDLE,'(A6,E26.16)')  "TIME: ", tnow
00050       write(BOV_DATA_HANDLE,'(A11,A,A4)') "DATA_FILE: ", TRIM(name), ".dat"
00051       WRITE(BOV_DATA_HANDLE,'(A11,3I12)')  "DATA_SIZE: ", shape(data), 1
00052       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_FORMAT: DOUBLE"
00053       WRITE(BOV_DATA_HANDLE,'(A10,A)')  "VARIABLE: ", TRIM(varname)
00054 # if defined BIGENDIAN
00055       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_ENDIAN: BIG"
00056 # else
00057       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_ENDIAN: LITTLE"
00058 # endif
00059       WRITE(BOV_DATA_HANDLE,'(A16)')  "CENTERING: zonal"
00060       WRITE(BOV_DATA_HANDLE,'(A14,3E26.16)')  "BRICK_ORIGIN: ", lower,0d0
00061       WRITE(BOV_DATA_HANDLE,'(A12,3E26.16)')  "BRICK_SIZE: ", upper-lower,0d0
00062       WRITE(BOV_DATA_HANDLE,'(A14)')  "BYTE_OFFSET: 4"
00063       WRITE(BOV_DATA_HANDLE,'(A17,I4)')  "DATA_COMPONENTS: ", 1
00064       CLOSE(BOV_DATA_HANDLE)
00065    END SUBROUTINE WriteBOV2DScalar
00066 
00067 
00068    SUBROUTINE READBOV2DScalar(FileName, lower, upper, tnow, data)
00069       USE GlobalDeclarations
00070 
00071       CHARACTER(LEN=*) :: Filename
00072       CHARACTER(LEN=100) :: DISCARD
00073       REAL(KIND=qPREC) :: lower(2), upper(2), tnow, size(3), DISCARD_REAL
00074       REAL(KIND=qPREC), DIMENSION(:,:), POINTER :: data
00075       INTEGER :: mx, my, mz, nComps
00076       OPEN(UNIT=BOV_DATA_HANDLE, FILE=Filename)
00077       READ(BOV_DATA_HANDLE,'(A6,E26.16)')  DISCARD, tnow
00078       READ(BOV_DATA_HANDLE,'(A11,A,A4)') DISCARD, DISCARD, DISCARD
00079       READ(BOV_DATA_HANDLE,'(A11,3I12)')  DISCARD, mx,my,mz
00080       READ(BOV_DATA_HANDLE,'(A19)')  DISCARD
00081       READ(BOV_DATA_HANDLE,'(A10,A)')  DISCARD, DISCARD
00082       READ(BOV_DATA_HANDLE,'(A19)')  DISCARD !"DATA_ENDIAN: LITTLE"
00083       READ(BOV_DATA_HANDLE,'(A16)')  DISCARD 
00084       READ(BOV_DATA_HANDLE,'(A14,3E26.16)')  DISCARD, lower,DISCARD_REAL
00085       READ(BOV_DATA_HANDLE,'(A12,3E26.16)')  DISCARD, size
00086       READ(BOV_DATA_HANDLE,'(A14)')  DISCARD !"BYTE_OFFSET: 4"
00087       READ(BOV_DATA_HANDLE,'(A17,I4)')  DISCARD, nComps
00088       CLOSE(BOV_DATA_HANDLE)
00089       write(*,*) 'mx, my=', mx, my
00090       ALLOCATE(data(mx,my))
00091       upper(1:2)=lower(1:2)+size(1:2)
00092       write(FileName,'(A,A4)') Filename(1:LEN(TRIM(Filename))-4),".dat"
00093       OPEN(UNIT=BOV_DATA_HANDLE, FILE=TRIM(FileName), status="old", FORM="unformatted")
00094       READ(BOV_DATA_HANDLE) data
00095       CLOSE(BOV_DATA_HANDLE)
00096 
00097     END SUBROUTINE READBOV2DScalar
00098 
00099 
00100 
00101 
00102    SUBROUTINE WriteBOV2DVector(name, lower, upper, tnow, data, varname)
00103       USE GlobalDeclarations
00104       CHARACTER(LEN=*) :: name, varname
00105       CHARACTER(LEN=100) :: Filename
00106       REAL(KIND=qPREC) :: lower(2), upper(2), tnow
00107       REAL(KIND=qPREC), DIMENSION(:,:,:) :: data
00108       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".dat"
00109       OPEN(UNIT=BOV_DATA_HANDLE, FILE=TRIM(FileName), status="replace", FORM="unformatted")
00110       write(BOV_DATA_HANDLE) reshape(data,(/size(data,3),size(data)/size(data,3)/),(/0d0/),(/2,1/))
00111       CLOSE(BOV_DATA_HANDLE)
00112       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".bov"
00113       OPEN(UNIT=BOV_DATA_HANDLE, FILE=Filename)
00114       WRITE(BOV_DATA_HANDLE,'(A6,E26.16)')  "TIME: ", tnow
00115       write(BOV_DATA_HANDLE,'(A11,A,A4)') "DATA_FILE: ", TRIM(name), ".dat"
00116       WRITE(BOV_DATA_HANDLE,'(A11,3I12)')  "DATA_SIZE: ", size(data,1),size(data,2),1
00117       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_FORMAT: DOUBLE"
00118       WRITE(BOV_DATA_HANDLE,'(A10,A)')  "VARIABLE: ", TRIM(varname)
00119       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_ENDIAN: LITTLE"
00120       WRITE(BOV_DATA_HANDLE,'(A16)')  "CENTERING: zonal"
00121       WRITE(BOV_DATA_HANDLE,'(A14,3E26.16)')  "BRICK_ORIGIN: ", lower,0d0
00122       WRITE(BOV_DATA_HANDLE,'(A12,3E26.16)')  "BRICK_SIZE: ", upper-lower,0d0
00123       WRITE(BOV_DATA_HANDLE,'(A14)')  "BYTE_OFFSET: 4"
00124       WRITE(BOV_DATA_HANDLE,'(A17,I4)')  "DATA_COMPONENTS: ", size(data,3)
00125       CLOSE(BOV_DATA_HANDLE)
00126    END SUBROUTINE WriteBOV2DVector
00127 
00128 
00129    SUBROUTINE WriteBOV3DScalar(name, lower, upper, tnow, data, varname)
00130       USE GlobalDeclarations
00131       CHARACTER(LEN=*) :: name, varname
00132       CHARACTER(LEN=100) :: Filename
00133       REAL(KIND=qPREC) :: lower(3), upper(3), tnow
00134       REAL(KIND=qPREC), DIMENSION(:,:,:) :: data
00135       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".dat"
00136       OPEN(UNIT=BOV_DATA_HANDLE, FILE=TRIM(FileName), status="replace", FORM="unformatted")
00137       write(BOV_DATA_HANDLE) data
00138       CLOSE(BOV_DATA_HANDLE)
00139       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".bov"
00140       OPEN(UNIT=BOV_DATA_HANDLE, FILE=Filename)
00141       WRITE(BOV_DATA_HANDLE,'(A6,E26.16)')  "TIME: ", tnow
00142       write(BOV_DATA_HANDLE,'(A11,A,A4)') "DATA_FILE: ", TRIM(name), ".dat"
00143       WRITE(BOV_DATA_HANDLE,'(A11,3I12)')  "DATA_SIZE: ", shape(data)
00144       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_FORMAT: DOUBLE"
00145       WRITE(BOV_DATA_HANDLE,'(A10,A)')  "VARIABLE: ", TRIM(varname)
00146       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_ENDIAN: LITTLE"
00147       WRITE(BOV_DATA_HANDLE,'(A16)')  "CENTERING: zonal"
00148       WRITE(BOV_DATA_HANDLE,'(A14,3E26.16)')  "BRICK_ORIGIN: ", lower
00149       WRITE(BOV_DATA_HANDLE,'(A12,3E26.16)')  "BRICK_SIZE: ", upper-lower
00150       WRITE(BOV_DATA_HANDLE,'(A14)')  "BYTE_OFFSET: 4"
00151       WRITE(BOV_DATA_HANDLE,'(A17,I4)')  "DATA_COMPONENTS: ", 1
00152       CLOSE(BOV_DATA_HANDLE)
00153    END SUBROUTINE WriteBOV3DScalar
00154 
00155 
00156 
00157    SUBROUTINE WriteBOV3DVector(name, lower, upper, tnow, data, varname)
00158       USE GlobalDeclarations
00159       CHARACTER(LEN=*) :: name, varname
00160       CHARACTER(LEN=100) :: Filename
00161       REAL(KIND=qPREC) :: lower(3), upper(3), tnow
00162       REAL(KIND=qPREC), DIMENSION(:,:,:,:) :: data
00163       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".dat"
00164       OPEN(UNIT=BOV_DATA_HANDLE, FILE=TRIM(FileName), status="replace", FORM="unformatted")
00165       write(BOV_DATA_HANDLE) reshape(data,(/size(data,4),size(data)/size(data,4)/),(/0d0/),(/2,1/))
00166       CLOSE(BOV_DATA_HANDLE)
00167       write(FileName,'(A4,A,A4)') 'out/',TRIM(name),".bov"
00168       OPEN(UNIT=BOV_DATA_HANDLE, FILE=Filename)
00169       WRITE(BOV_DATA_HANDLE,'(A6,E26.16)')  "TIME: ", tnow
00170       write(BOV_DATA_HANDLE,'(A11,A,A4)') "DATA_FILE: ", TRIM(name), ".dat"
00171       WRITE(BOV_DATA_HANDLE,'(A11,3I12)')  "DATA_SIZE: ", size(data,1),size(data,2),size(data,3)
00172       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_FORMAT: DOUBLE"
00173       WRITE(BOV_DATA_HANDLE,'(A10,A)')  "VARIABLE: ", TRIM(varname)
00174       WRITE(BOV_DATA_HANDLE,'(A19)')  "DATA_ENDIAN: LITTLE"
00175       WRITE(BOV_DATA_HANDLE,'(A16)')  "CENTERING: zonal"
00176       WRITE(BOV_DATA_HANDLE,'(A14,3E26.16)')  "BRICK_ORIGIN: ", lower
00177       WRITE(BOV_DATA_HANDLE,'(A12,3E26.16)')  "BRICK_SIZE: ", upper-lower
00178       WRITE(BOV_DATA_HANDLE,'(A14)')  "BYTE_OFFSET: 4"
00179       WRITE(BOV_DATA_HANDLE,'(A17,I4)')  "DATA_COMPONENTS: ", size(data,4)
00180       CLOSE(BOV_DATA_HANDLE)
00181    END SUBROUTINE WriteBOV3DVector
00182 
00183 
00184 END MODULE IOBOV
00185 
00186 
 All Classes Files Functions Variables