! rd_cdf READ netcdf format
! Copyright (C) 1999,2010 Gauthier Delerce
!
! This program is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 2, or (at your option)
! any later version.
!
! This program 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 General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software Foundation,
! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
!
! Gauthier Delerce <gauthier@delerce.fr>
!
! NETCDF DESCRIPTION
!
! FLAG INTEGER :
! FIX1 = 1 IF THE FIELD 1 HAS BEEN FIXED
! PATCH1 = 1 IF THE FIELD 1 HAS BEEN INTERPOLATED
! CIV2 = 1 IF A CIV2 FIELD HAS BEEN COMPUTED
! FIX2 = 1 IF THE CIV2 FIELD HAS BEEN FIXED
! PATCH2 = 1 IF THE CIV2 FIELD HAS BEEN INTERPOLATED
! USER1_1 = 1 IF vec_user1 EXIST
! USER1_2 = 1 IF vec2_user1 EXIST
! IF NOT VALUE = 0
!
! GLOBAL BEHAVIORS
! EACH PROGRAM READ ALL DATA IN THE FILE
! IT CHANGE SOME OF THEM AND OVERWRITE THE FILE
! IF A THIRD PASS IS PROCESSED, CIV2 BECOME CIV1 AND THE
! NEW IS RECORDED AS CIV2
!
! READ NETCDF ALLOCATE AND READ ALL DATA IN THE FILE
!
! ALL FIELD USE "CONVECT-FLOW" APPROXIMATION EXCEPT VDx
subroutine rd_netcdf(filename)
use mod_parameters
implicit none
!use modnetcdf
INCLUDE '/usr/lib/netcdf/include/netcdf.inc'
!INCLUDE '..\..\..\..\libraries\netcdf.inc'
integer::nb_col,tmp
!integer:: user1_1,user2_1
INTEGER::STATUS,STATUS2, NCID, NDIMS, NVARS, NGATTS, UNLIMDIMID,nb_vect
integer,dimension(2)::field_dim_XYUVCF
integer,dimension(1)::pixcm_dim
integer,dimension(1)::vec1D_dim
integer::cpt
real,dimension(:),allocatable::vec1Dtmp
real,dimension(:,:),allocatable::field
real,dimension(:,:),allocatable::field_tmp
character(256)::filename
integer::nb_vec2_patch_id,nb_vec_patch_id,nb_vectors2_id,vec2_c_id,vec2_fixflag_id,vec2_f_id
integer::vec2_patch0_dudx_id,vec2_patch0_dvdy_id,vec2_patch0_dvdx_id,vec2_patch0_v_id,vec2_patch_dudy_id
integer::vec2_patch_dvdy_id,vec2_patch_dvdx_id,vec2_patch_dudx_id,vec2_patch0_u_id,vec2_patch_v_id
integer::vec2_patch_x_id,vec2_patch_y_id,vec2_v_id,vec2_user1_id,vec2_u_id,vec2_patch_u_id,vec2_x_id
integer::vec2_y_id,vec2_w_id,vec_c_id,vec_fixflag_id,vec_f_id,vec_patch0_dudy_id,vec_patch0_dvdx_id
integer::vec_patch0_dudx_id,vec_patch0_u_id,vec_patch0_v_id,vec_patch0_dvdy_id,vec_patch_dudy_id
integer::vec_patch_dudx_id,vec_patch_dvdy_id,vec_patch_u_id,vec_patch_dvdx_id,vec_patch_x_id
integer::vec_patch_v_id,vec_v_id,vec_user1_id,vec_x_id,vec_y_id,vec_w_id,vec_u_id,vec_z_idvec_patch_y_id
integer::vec2_z_id,vec2_patch0_dudy_id,nb_vectors_ID,vec_z_id,vec_patch_y_id
integer::fix,i
!print*,filename,"filename",index(filename,'.nc',back=.true.)
if(index(filename,'.nc',back=.true.)==0) filename=trim(filename)//'.nc'
!print*,filename,"filename",index(filename,'.nc',back=.true.)
print*,'Reading netcdf file ',trim(adjustl(filename))
STATUS = NF_OPEN(trim(adjustl(filename)), 0, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'nb_coord', nb_coord)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'nb_dim',nb_dim )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMID(NCID, 'nb_vectors', nb_vectors_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMLEN(NCID, nb_vectors_ID, nb_vectors)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,'nb_vectors : ',nb_vectors
STATUS = NF_INQ_VARID (NCID, 'vec_X', vec_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_Y', vec_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_dim>2)then
STATUS = NF_INQ_VARID (NCID, 'vec_Z', vec_Z_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_INQ_VARID (NCID, 'vec_U', vec_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_V', vec_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_coord>2)then
STATUS = NF_INQ_VARID (NCID, 'vec_W', vec_W_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_INQ_VARID (NCID, 'vec_C', vec_C_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_F', vec_F_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'civ1',civ1)
IF (STATUS .NE. NF_NOERR) THEN
civ1=0
ENDIF
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'convect_flow',convect_flow)
IF (STATUS .NE. NF_NOERR) THEN
convect_flow=1
ENDIF
STATUS = NF_INQ_VARID (NCID, 'vec_User1', vec_User1_ID)
IF (STATUS .NE. NF_NOERR) THEN
user1_1=0
ELSE
user1_1=1
print*,'vec_User1 exist'
ENDIF
print*,"netcdf, step2"
!*********************************************************
! TEST IF THE FILE HAS BEEN FIXED
!*********************************************************
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'fix',fix )
IF (STATUS .NE. NF_NOERR) THEN
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'Fix',fix )
IF (STATUS .NE. NF_NOERR) THEN
fix=0
!IF( NF_STRERROR(STATUS)=='Attribute not found') then ! test si ca existe qd meme
! Print*,'fix attribute not set'
! STATUS2 = NF_INQ_VARID (NCID, 'vec_FixFlag', vec_FixFlag_ID)
! IF (STATUS2 .NE. NF_NOERR) THEN
! IF( NF_STRERROR(STATUS2)=='Attribute not found') then
! fix=0
! ENDIF
! ELSE
! fix=1
! ENDIF
! ELSE
! CALL HANDLE_ERR(STATUS)
ENDIF
ENDIF
if(fix==1) then
STATUS = NF_INQ_VARID (NCID, 'vec_FixFlag', vec_FixFlag_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
!Print*,'FIX result:',fix
!*********************************************************
! TEST IF THE FILE HAS BEEN INTERPOLATED
!*********************************************************
!print*,0
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch',patch )
print*,"01",patch
IF (STATUS .NE. NF_NOERR) THEN
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch',patch )
IF (STATUS .NE. NF_NOERR) patch=0
ENDIF
print*,"01",patch
IF (patch==1) then
! MODIFICATION FOR READING THE UNFILTERED VELOCITY
STATUS = NF_GET_ATT_DOUBLE (NCID,NF_GLOBAL,'ro_patch', ro)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMID(NCID, 'nb_vec_patch', nb_vec_patch_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMLEN(NCID, nb_vec_patch_ID, nb_vec_patch)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,"reading patch_nx,ny values",patch_nx,patch_ny
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch_nx', patch_nx)
IF (STATUS .NE. NF_NOERR) THEN
!CALL HANDLE_ERR(STATUS)
! patch_nx=nint(sqrt(nb_vec_patch))
ENDIF
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch_ny', patch_ny)
IF (STATUS .NE. NF_NOERR) THEN
!CALL HANDLE_ERR(STATUS)
! patch_ny=nint(sqrt(nb_vec_patch))
ENDIF
STATUS = NF_INQ_VARID (NCID, 'vec_patch_X', vec_patch_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_Y', vec_patch_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_U', vec_patch_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_V', vec_patch_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_DUDX', vec_patch_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_DUDY', vec_patch_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_DVDX', vec_patch_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch_DVDY', vec_patch_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_U', vec_patch0_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_V', vec_patch0_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_DUDX', vec_patch0_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_DUDY', vec_patch0_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_DVDX', vec_patch0_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec_patch0_DVDY', vec_patch0_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
!print*,1
!*********************************************************
! TEST IF THE FILE HAS BEEN CIV2ed
!*********************************************************
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'civ2',civ2 )
IF (STATUS .NE. NF_NOERR) THEN
civ2=0
ENDIF
!print*,2
IF (civ2==1) THEN
STATUS = NF_INQ_DIMID(NCID, 'nb_vectors2', nb_vectors2_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMLEN(NCID, nb_vectors2_ID, nb_vectors2)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_X', vec2_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_Y', vec2_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_U', vec2_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_V', vec2_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_C', vec2_C_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_F', vec2_F_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_User1', vec2_User1_ID)
IF (STATUS .NE. NF_NOERR) THEN
user1_2=0
ELSE
user1_2=1
ENDIF
ENDIF
!*********************************************************
! TEST IF THE FILE HAS BEEN FIXED 2222
!*********************************************************
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'fix2',fix2 )
IF (STATUS .NE. NF_NOERR) THEN
fix2=0
ENDIF
IF(fix2==1) THEN
STATUS = NF_INQ_VARID (NCID, 'vec2_FixFlag', vec2_FixFlag_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
!print*,3
!*********************************************************
! TEST IF THE FILE HAS BEEN INTERPOLATED 222222
!*********************************************************
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch2',patch2 )
IF (STATUS .NE. NF_NOERR) THEN
patch2=0
ENDIF
IF (patch2==1) THEN
! MODIFICATION FOR READING THE UNFILTERED VELOCITY
STATUS = NF_GET_ATT_DOUBLE (NCID,NF_GLOBAL,'ro2_patch', ro2)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMID(NCID, 'nb_vec2_patch', nb_vec2_patch_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_DIMLEN(NCID, nb_vec2_patch_ID, nb_vec2_patch)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch2_nx', patch2_nx)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch2_ny', patch2_ny)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_X', vec2_patch_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_Y', vec2_patch_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_U', vec2_patch_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_V', vec2_patch_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_DUDX', vec2_patch_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_DUDY', vec2_patch_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_DVDX', vec2_patch_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch_DVDY', vec2_patch_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_U', vec2_patch0_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_V', vec2_patch0_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_DUDX', vec2_patch0_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_DUDY', vec2_patch0_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_DVDX', vec2_patch0_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_VARID (NCID, 'vec2_patch0_DVDY', vec2_patch0_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'constant_pixcm',constant_pixcm)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(constant_pixcm==1) then
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'pixcmx',pixcmx )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'pixcmy',pixcmy )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'absolut_time_T0',T0 )
IF (STATUS .NE. NF_NOERR) THEN
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'Absolut_time_T0',T0 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
ENDIF
STATUS = NF_GET_ATT_INT (NCID,NF_GLOBAL,'hart',hart )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'dt',dt )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!STATUS = NF_GET_ATT_TEXT(NCID, NF_GLOBAL, 'title', TITLE)
!IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(civ2==1) then
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'absolut_time_T0_2',T02 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_GET_ATT_REAL(NCID,NF_GLOBAL,'dt2',dt2 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
!*** END DEFINITIONS ***
!print*,'civ1'
! READING CIV1 FIELDS IN V
allocate(V(nb_vectors,nb_coord+nb_dim+2+1),vec1Dtmp(nb_vectors))
STATUS = NF_GET_VAR_REAL(NCID, vec_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,1)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,2)=vec1Dtmp
if(nb_dim>2) then
STATUS = NF_GET_VAR_REAL(NCID, vec_Z_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,8)=vec1Dtmp
endif
STATUS = NF_GET_VAR_REAL(NCID, vec_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,3)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,4)=vec1Dtmp
if(nb_coord>2) then
STATUS = NF_GET_VAR_REAL(NCID, vec_W_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,9)=vec1Dtmp
endif
STATUS = NF_GET_VAR_REAL(NCID, vec_C_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,5)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_F_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,6)=vec1Dtmp
if(fix==1) then
STATUS = NF_GET_VAR_REAL(NCID, vec_FixFlag_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V(:,7)=vec1Dtmp
if (verbose) print*,'fichier fixe'
else
if (verbose) print*,'fichier non fixe'
V(:,7)=0.
endif
cpt=0
do i=1,nb_vectors
if(V(i,7)==0) cpt=cpt+1
enddo
if (verbose) print*,"Nb V(i,7)=0 ",cpt,"/",nb_vectors
cpt=0
do i=1,nb_vectors
if(V(i,7)==1) cpt=cpt+1
enddo
if (verbose) print*,"Nb V(i,7)=1 ",cpt,"/",nb_vectors
!V(:,7)=0.
if(user1_1==1) then
allocate(V_USER1_1(nb_vectors))
STATUS = NF_GET_VAR_INT(NCID, vec_User1_ID, V_USER1_1)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,'vec_User1 rode'
! do i=1,nb_vectors
! if(v_user1_1(i)/=0) print*,V_USER1_1(i)
! enddo
endif
print*,'field wrote'
deallocate(vec1Dtmp)
if(patch==1) then
! READING PATCH FIELDS
allocate(vec1Dtmp(nb_vec_patch),VD(nb_vec_patch,14))
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,1)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,2)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,3)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,4)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,5)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,6)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,7)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,8)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,9)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,10)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,11)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,12)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,13)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec_patch0_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD(:,14)=vec1Dtmp
deallocate(vec1Dtmp)
endif
!********************************************************
! READING SECOND PASS RESULTS
!**********************************************************
if(civ2==1) then
! READING CIV2 FIELDS IN V
allocate(V2(nb_vectors2,nb_coord+nb_dim+2+1),vec1Dtmp(nb_vectors2))
STATUS = NF_GET_VAR_REAL(NCID, vec2_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,1)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,2)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,3)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,4)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_C_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,5)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_F_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,6)=vec1Dtmp
if(fix2==1) then
STATUS = NF_GET_VAR_REAL(NCID, vec2_FixFlag_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
V2(:,7)=vec1Dtmp
! print*,'fichier fixe'
else
! print*,'fichier non fixe'
V2(:,7)=0.
endif
if(user1_2==1) then
STATUS = NF_GET_VAR_INT(NCID, vec2_User1_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
allocate(V_USER1_2(nb_vectors2))
V_USER1_2=vec1Dtmp
endif
!print*,'field wrote'
deallocate(vec1Dtmp)
if(patch2==1) then
! READING PATCH FIELDS
allocate(vec1Dtmp(nb_vec2_patch),VD2(nb_vec2_patch,14))
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,1)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,2)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,3)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,4)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,5)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,6)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,7)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,8)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,9)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,10)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,11)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,12)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,13)=vec1Dtmp
STATUS = NF_GET_VAR_REAL(NCID, vec2_patch0_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
VD2(:,14)=vec1Dtmp
deallocate(vec1Dtmp)
endif
endif
!*** CLOSE DATASET ***
STATUS = NF_CLOSE(NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if (verbose) print*,'NetCDF OK'
if(allocated(vec1Dtmp)) deallocate(vec1Dtmp)
return
end subroutine rd_netcdf