! wr_cdf test 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>
!
! PLEASE CHECK THE READ NETCDF ROUTINE
!
! IF A FLAG IS 0 WE DON'T WRITE THE CORRESPONDING FIELD
subroutine wr_netcdf(filename)
use mod_parameters
!use modnetcdf
!use modvsv
implicit none
INCLUDE '/usr/lib/netcdf/include/netcdf.inc'
integer::nb_col
INTEGER::STATUS, NCID, NDIMS, NVARS, NGATTS, UNLIMDIMID,nb_vect
integer,dimension(2)::field_dim_XYUVCF
integer,dimension(1)::pixcm_dim
integer,dimension(1)::vec1D_dim
integer::patch12
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
if(index(filename,'.nc',back=.true.)==0) filename=trim(adjustl(filename))//'.nc'
print*,'Writing netcdf file ',trim(adjustl(filename))
print*,'nombre de vecteurs: ',nb_vectors
!print*,'*************************'
!if((nb_dim==2).and.(nb_coord==2)) nb_col=6
!field=0.
! PUT DATAS IN THE FIELD ARRAY WITH THE CONVECT FLOW TRANSFORMATION
!do i=1,mg*ng
! x=(grille(i,1)-grille(i,4)/2.)/pixcmx;y=(grille(i,2)-grille(i,5)/2.)/pixcmy;u1=grille(i,4)/pixcmx/dt;v1=grille(i,5)/pixcmy/dt
! field(1:6,i)= (/x,y,-u1,-v1,grille(i,6),grille(i,3)/)
!enddo
!call showmodnetcdf
!*** CREATE CDF DATASET ***
STATUS = NF_CREATE(trim(adjustl(filename)), NF_CLOBBER, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!print*, trim(filename)//'.nc' 'CREATED'
!*** DEFINE DIMENSIONS ***
STATUS = NF_DEF_DIM(NCID, 'nb_vectors', nb_vectors, nb_vectors_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1D_dim(1)=nb_vectors_ID
STATUS = NF_DEF_VAR (NCID, 'vec_X', NF_FLOAT, 1, vec1D_dim, vec_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_Y', NF_FLOAT, 1, vec1D_dim, vec_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_dim==3) then
STATUS = NF_DEF_VAR (NCID, 'vec_Z', NF_FLOAT, 1, vec1D_dim, vec_Z_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_DEF_VAR (NCID, 'vec_U', NF_FLOAT, 1, vec1D_dim, vec_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_V', NF_FLOAT, 1, vec1D_dim, vec_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_coord==3) then
STATUS = NF_DEF_VAR (NCID, 'vec_W', NF_FLOAT, 1, vec1D_dim, vec_W_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_DEF_VAR (NCID, 'vec_C', NF_FLOAT, 1, vec1D_dim, vec_C_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_F', NF_FLOAT, 1, vec1D_dim, vec_F_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(fix1==1) then
STATUS = NF_DEF_VAR (NCID, 'vec_FixFlag', NF_FLOAT, 1, vec1D_dim, vec_FixFlag_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(user1_1==1) then
print*,'defining vec_User1'
STATUS = NF_DEF_VAR (NCID, 'vec_User1', NF_INT, 1, vec1D_dim, vec_User1_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
! deallocate(v_user1_1)
endif
IF(CIV2==1) THEN
STATUS = NF_DEF_DIM(NCID, 'nb_vectors2', nb_vectors2, nb_vectors2_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1D_dim(1)=nb_vectors2_ID
STATUS = NF_DEF_VAR (NCID, 'vec2_X', NF_FLOAT, 1, vec1D_dim, vec2_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!print*,'writing vec2'
STATUS = NF_DEF_VAR (NCID, 'vec2_Y', NF_FLOAT, 1, vec1D_dim, vec2_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_dim==3) then
STATUS = NF_DEF_VAR (NCID, 'vec2_Z', NF_FLOAT, 1, vec1D_dim, vec2_Z_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_DEF_VAR (NCID, 'vec2_U', NF_FLOAT, 1, vec1D_dim, vec2_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_V', NF_FLOAT, 1, vec1D_dim, vec2_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_coord==3) then
STATUS = NF_DEF_VAR (NCID, 'vec2_W', NF_FLOAT, 1, vec1D_dim, vec2_W_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_DEF_VAR (NCID, 'vec2_C', NF_FLOAT, 1, vec1D_dim, vec2_C_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_F', NF_FLOAT, 1, vec1D_dim, vec2_F_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(fix2==1) then
STATUS = NF_DEF_VAR (NCID, 'vec2_FixFlag', NF_FLOAT, 1, vec1D_dim, vec2_FixFlag_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(user1_2==1) then
STATUS = NF_DEF_VAR (NCID, 'vec2_User1', NF_INT, 1, vec1D_dim, vec2_User1_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
! deallocate(v_user1_2)
endif
ENDIF
!if(test_seuil==.true.) then
! STATUS = NF_DEF_VAR (NCID, 'vec_X_seuil', NF_FLOAT, 1, vec1D_dim, vec_X_seuil_ID)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! STATUS = NF_DEF_VAR (NCID, 'vec_Y_seuil', NF_FLOAT, 1, vec1D_dim, vec_Y_seuil_ID)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! STATUS = NF_DEF_VAR (NCID, 'vec_U_seuil', NF_FLOAT, 1, vec1D_dim, vec_U_seuil_ID)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! STATUS = NF_DEF_VAR (NCID, 'vec_V_seuil', NF_FLOAT, 1, vec1D_dim, vec_V_seuil_ID)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! STATUS = NF_DEF_VAR (NCID, 'vec_C_seuil', NF_FLOAT, 1, vec1D_dim, vec_C_seuil_ID)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!endif
!if(write7_for_fix) then ! on va ecrire une nouvelle variable pour le flag du fix
! on test si cette variable existe deja
!*** DEFINE ATTRIBUTE ***
print*,'defining attributes'
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'civ1',NF_INT,1, civ1)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'convect_flow',NF_INT,1, convect_flow)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'nb_coord',NF_INT,1, nb_coord)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'nb_dim',NF_INT,1,nb_dim )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'constant_pixcm',NF_INT,1,constant_pixcm)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(constant_pixcm==1) then
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'pixcmx',NF_FLOAT,1,pixcmx )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'pixcmy',NF_FLOAT,1,pixcmy )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'absolut_time_T0',NF_FLOAT,1,T0 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'hart',NF_INT,1,hart )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'dt',NF_FLOAT,1,dt )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
IF(civ2==1) then
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'absolut_time_T0_2',NF_FLOAT,1,T02 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'dt2',NF_FLOAT,1,dt2 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_PUT_ATT_TEXT (NCID, NF_GLOBAL, 'title',256,trim(adjustl(title)))
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_TEXT (NCID, NF_GLOBAL, 'unit',256,trim(adjustl(unit)))
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(fix1==1) then
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'fix',NF_INT,1,fix1 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(patch1==1) then
print*,"wr_cdf wrote patch=",patch1
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch',NF_INT,1,1)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch',patch )
print*,"01",patch12
IF (STATUS .NE. NF_NOERR) THEN
STATUS = NF_GET_ATT_INT(NCID,NF_GLOBAL,'patch',patch )
print*,"01",patch
IF (STATUS .NE. NF_NOERR) patch=0
ENDIF
print*,"01",patch
if(fix2==1) then
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'fix2',NF_INT,1,fix2 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(patch2==1) then
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch2',NF_INT,1,patch2 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(civ2==1) then
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'civ2',NF_INT,1,civ2 )
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
IF(patch1==1) THEN
STATUS = NF_DEF_DIM(NCID, 'nb_vec_patch', nb_vec_patch, nb_vec_patch_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1D_dim(1)=nb_vec_patch_ID
print*,"writing patch_nx,ny values",patch_nx,patch_ny
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch_nx',NF_INT,1, patch_nx)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch_ny',NF_INT,1, patch_ny)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_X', NF_FLOAT, 1, vec1D_dim, vec_patch_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_Y', NF_FLOAT, 1, vec1D_dim, vec_patch_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_U', NF_FLOAT, 1, vec1D_dim, vec_patch_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_V', NF_FLOAT, 1, vec1D_dim, vec_patch_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_DUDX', NF_FLOAT, 1, vec1D_dim, vec_patch_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_DUDY', NF_FLOAT, 1, vec1D_dim, vec_patch_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_DVDX', NF_FLOAT, 1, vec1D_dim, vec_patch_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch_DVDY', NF_FLOAT, 1, vec1D_dim, vec_patch_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_U', NF_FLOAT, 1, vec1D_dim, vec_patch0_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_V', NF_FLOAT, 1, vec1D_dim, vec_patch0_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_DUDX', NF_FLOAT, 1, vec1D_dim, vec_patch0_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_DUDY', NF_FLOAT, 1, vec1D_dim, vec_patch0_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_DVDX', NF_FLOAT, 1, vec1D_dim, vec_patch0_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec_patch0_DVDY', NF_FLOAT, 1, vec1D_dim, vec_patch0_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_DOUBLE (NCID,NF_GLOBAL,'ro_patch',NF_DOUBLE,1, ro)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'kc_patch',NF_FLOAT,1, kc)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
ENDIF !(patch==1)
IF(patch2==1) THEN
STATUS = NF_DEF_DIM(NCID, 'nb_vec2_patch', nb_vec2_patch, nb_vec2_patch_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1D_dim(1)=nb_vec2_patch_ID
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch2_nx',NF_INT,1, patch2_nx)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_INT (NCID,NF_GLOBAL,'patch2_ny',NF_INT,1, patch2_ny)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_X', NF_FLOAT, 1, vec1D_dim, vec2_patch_X_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_Y', NF_FLOAT, 1, vec1D_dim, vec2_patch_Y_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_U', NF_FLOAT, 1, vec1D_dim, vec2_patch_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_V', NF_FLOAT, 1, vec1D_dim, vec2_patch_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_DUDX', NF_FLOAT, 1, vec1D_dim, vec2_patch_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_DUDY', NF_FLOAT, 1, vec1D_dim, vec2_patch_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_DVDX', NF_FLOAT, 1, vec1D_dim, vec2_patch_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch_DVDY', NF_FLOAT, 1, vec1D_dim, vec2_patch_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_U', NF_FLOAT, 1, vec1D_dim, vec2_patch0_U_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_V', NF_FLOAT, 1, vec1D_dim, vec2_patch0_V_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_DUDX', NF_FLOAT, 1, vec1D_dim, vec2_patch0_DUDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_DUDY', NF_FLOAT, 1, vec1D_dim, vec2_patch0_DUDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_DVDX', NF_FLOAT, 1, vec1D_dim, vec2_patch0_DVDX_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_DEF_VAR (NCID, 'vec2_patch0_DVDY', NF_FLOAT, 1, vec1D_dim, vec2_patch0_DVDY_ID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_DOUBLE (NCID,NF_GLOBAL,'ro_patch2',NF_DOUBLE,1, ro2)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_PUT_ATT_REAL (NCID,NF_GLOBAL,'kc_patch2',NF_FLOAT,1, kc2)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
ENDIF !(patch2==1)
!*** END DEFINITIONS ***
STATUS = NF_ENDDEF(NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!*** PROVIDE VALUES FOR VARIABLES ***
!STATUS = NF_PUT_VAR_REAL (NCID, VF_XYUVCF_ID, field)
!IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!****** CIV1****************
allocate(vec1Dtmp(nb_vectors))
vec1Dtmp=V(:,1)
STATUS = NF_PUT_VAR_REAL (NCID, vec_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V(:,2)
STATUS = NF_PUT_VAR_REAL (NCID, vec_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_dim==3) then
vec1Dtmp=V(:,8)
STATUS = NF_PUT_VAR_REAL (NCID, vec_Z_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
vec1Dtmp=V(:,3)
STATUS = NF_PUT_VAR_REAL (NCID, vec_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V(:,4)
STATUS = NF_PUT_VAR_REAL (NCID, vec_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(nb_coord==3) then
vec1Dtmp=V(:,9)
STATUS = NF_PUT_VAR_REAL (NCID, vec_W_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
vec1Dtmp=V(:,5)
STATUS = NF_PUT_VAR_REAL (NCID, vec_C_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V(:,6)
STATUS = NF_PUT_VAR_REAL (NCID, vec_F_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
if(user1_1==1) then
print*,'writing vec_User1'
STATUS = NF_PUT_VAR_INT (NCID, vec_User1_ID, V_User1_1)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,'writing vec_User1 done'
endif
!if(test_seuil==.true.) then
! vec1Dtmp=V(:,7)
! STATUS = NF_PUT_VAR_REAL (NCID, vec_X_seuil_ID, vec1Dtmp)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! vec1Dtmp=V(:,8)
! STATUS = NF_PUT_VAR_REAL (NCID, vec_Y_seuil_ID, vec1Dtmp)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! vec1Dtmp=V(:,9)
! STATUS = NF_PUT_VAR_REAL (NCID, vec_U_seuil_ID, vec1Dtmp)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! vec1Dtmp=V(:,10)
! STATUS = NF_PUT_VAR_REAL (NCID, vec_V_seuil_ID, vec1Dtmp)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
! vec1Dtmp=V(:,11)
! STATUS = NF_PUT_VAR_REAL (NCID, vec_C_seuil_ID, vec1Dtmp)
! IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
!
!endif
if(fix1==1) then
vec1Dtmp=V(:,7)
STATUS = NF_PUT_VAR_REAL (NCID, vec_FixFlag_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(patch1==1) then
if(allocated(vec1Dtmp)) deallocate(vec1Dtmp)
allocate(vec1Dtmp(nb_vec_patch))
vec1Dtmp=VD(:,1)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,2)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,3)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,4)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,5)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,6)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,7)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,8)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,9)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,10)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,11)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,12)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,13)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD(:,14)
STATUS = NF_PUT_VAR_REAL (NCID, vec_patch0_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
deallocate(vec1Dtmp)
endif
!print*,'field wrote'
if(allocated(vec1Dtmp)) deallocate(vec1Dtmp)
!****** CIV2****************
if(civ2==1) then
if(allocated(vec1Dtmp)) deallocate(vec1Dtmp)
allocate(vec1Dtmp(nb_vectors2))
vec1Dtmp=V2(:,1)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V2(:,2)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V2(:,3)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V2(:,4)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V2(:,5)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_C_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=V2(:,6)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_F_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,"wrote civ2 fields in wr_cdf.f90"
if(fix2==1) then
vec1Dtmp=V2(:,7)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_FixFlag_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
if(user1_2==1) then
STATUS = NF_PUT_VAR_INT (NCID, vec2_User1_ID, V_User1_2)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
endif
!print*,'field wrote'
deallocate(vec1Dtmp)
if(patch2==1) then
if(allocated(vec1Dtmp)) deallocate(vec1Dtmp)
allocate(vec1Dtmp(nb_vec2_patch))
vec1Dtmp=VD2(:,1)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_X_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,2)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_Y_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,3)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,4)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,5)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,6)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,7)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,8)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,9)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_U_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,10)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_V_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,11)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_DUDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,12)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_DUDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,13)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_DVDX_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
vec1Dtmp=VD2(:,14)
STATUS = NF_PUT_VAR_REAL (NCID, vec2_patch0_DVDY_ID, vec1Dtmp)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
deallocate(vec1Dtmp)
endif
endif
!*** CLOSE DATASET ***
STATUS = NF_CLOSE(NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
print*,'netcdf done'
!deallocate(field)
return
end subroutine wr_netcdf