Scrambler
1
|
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