! 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 ! ! 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