MODULE agrif_readwrite ! USE agrif_types !USE tools_brice ! IMPLICIT NONE ! !INTEGER :: nx_fine, ny_fine ! CONTAINS ! !***************************************************** ! function Read_Coordinates(name,Grid) !***************************************************** INTEGER FUNCTION Read_Coordinates(name,Grid,Pacifique) ! USE io_netcdf ! ! file name to open ! CHARACTER(*) name LOGICAL,OPTIONAL :: Pacifique ! TYPE(Coordinates) :: Grid ! CALL Read_Ncdf_var('glamt',name,Grid%glamt) CALL Read_Ncdf_var('glamu',name,Grid%glamu) CALL Read_Ncdf_var('glamv',name,Grid%glamv) CALL Read_Ncdf_var('glamf',name,Grid%glamf) CALL Read_Ncdf_var('gphit',name,Grid%gphit) CALL Read_Ncdf_var('gphiu',name,Grid%gphiu) CALL Read_Ncdf_var('gphiv',name,Grid%gphiv) CALL Read_Ncdf_var('gphif',name,Grid%gphif) CALL Read_Ncdf_var('e1t',name,Grid%e1t) CALL Read_Ncdf_var('e1u',name,Grid%e1u) CALL Read_Ncdf_var('e1v',name,Grid%e1v) CALL Read_Ncdf_var('e1f',name,Grid%e1f) CALL Read_Ncdf_var('e2t',name,Grid%e2t) CALL Read_Ncdf_var('e2u',name,Grid%e2u) CALL Read_Ncdf_var('e2v',name,Grid%e2v) CALL Read_Ncdf_var('e2f',name,Grid%e2f) CALL Read_Ncdf_var('nav_lon',name,Grid%nav_lon) CALL Read_Ncdf_var('nav_lat',name,Grid%nav_lat) ! IF( PRESENT(Pacifique) )THEN IF ( Grid%glamt(1,1) > Grid%glamt(nxfin,nyfin) ) THEN Pacifique = .TRUE. WHERE ( Grid%glamt < 0 ) Grid%glamt = Grid%glamt + 360. END WHERE WHERE ( Grid%glamf < 0 ) Grid%glamf = Grid%glamf + 360. END WHERE WHERE ( Grid%glamu < 0 ) Grid%glamu = Grid%glamu + 360. END WHERE WHERE ( Grid%glamv < 0 ) Grid%glamv = Grid%glamv + 360. END WHERE WHERE ( Grid%nav_lon < 0 ) Grid%nav_lon = Grid%nav_lon + 360. END WHERE ENDIF ENDIF ! WRITE(*,*) ' ' WRITE(*,*) 'Reading coordinates file: ',name WRITE(*,*) ' ' ! Read_Coordinates = 1 ! END FUNCTION Read_Coordinates !***************************************************** ! function Write_Coordinates(name,Grid) !***************************************************** INTEGER FUNCTION Write_Coordinates(name,Grid,nx_fine,ny_fine) ! USE io_netcdf CHARACTER(*) name TYPE(Coordinates) :: Grid INTEGER :: status,ncid,z REAL*8,DIMENSION(:),POINTER :: tabtemp INTEGER,DIMENSION(:),POINTER :: tabint CHARACTER(len=20),DIMENSION(4) :: dimnames INTEGER :: nx_fine, ny_fine ! status = nf90_create(name,NF90_WRITE,ncid) status = nf90_close(ncid) ! !CALL Write_Ncdf_dim('x',name,nxfin) !CALL Write_Ncdf_dim('y',name,nyfin) CALL Write_Ncdf_dim('x',name,nx_fine) CALL Write_Ncdf_dim('y',name,ny_fine) IF(.NOT. iom_activated) CALL Write_Ncdf_dim('z',name,1) CALL Write_Ncdf_dim('time',name,0) ! dimnames(1)='x' dimnames(2)='y' CALL Write_Ncdf_var('nav_lon',dimnames(1:2),name,Grid%nav_lon,'float') CALL Write_Ncdf_var('nav_lat',dimnames(1:2),name,Grid%nav_lat,'float') ! IF(.NOT. iom_activated) THEN ! copy nav_lev variable -> IOIPSL CALL Read_Ncdf_dim('z',parent_coordinate_file,z) ALLOCATE(tabtemp(z)) CALL Read_Ncdf_var('nav_lev',TRIM(parent_coordinate_file),tabtemp) CALL Write_Ncdf_var('nav_lev','z',name,tabtemp,'float') DEALLOCATE(tabtemp) ENDIF ! CALL Read_Ncdf_var('time',TRIM(parent_coordinate_file),tabtemp) CALL Write_Ncdf_var('time','time',name,tabtemp,'float') DEALLOCATE(tabtemp) CALL Read_Ncdf_var('time_steps',TRIM(parent_coordinate_file),tabint) CALL Write_Ncdf_var('time_steps','time',name,tabint) ! dimnames(1)='x' dimnames(2)='y' IF(iom_activated) THEN dimnames(3)='time' ELSE dimnames(3)='z' dimnames(4)='time' ENDIF CALL Write_Ncdf_var('glamt',dimnames,name,Grid%glamt,3,'double') CALL Write_Ncdf_var('glamu',dimnames,name,Grid%glamu,3,'double') CALL Write_Ncdf_var('glamv',dimnames,name,Grid%glamv,3,'double') CALL Write_Ncdf_var('glamf',dimnames,name,Grid%glamf,3,'double') CALL Write_Ncdf_var('gphit',dimnames,name,Grid%gphit,3,'double') CALL Write_Ncdf_var('gphiu',dimnames,name,Grid%gphiu,3,'double') CALL Write_Ncdf_var('gphiv',dimnames,name,Grid%gphiv,3,'double') CALL Write_Ncdf_var('gphif',dimnames,name,Grid%gphif,3,'double') CALL Write_Ncdf_var('e1t',dimnames,name,Grid%e1t,3,'double') CALL Write_Ncdf_var('e1u',dimnames,name,Grid%e1u,3,'double') CALL Write_Ncdf_var('e1v',dimnames,name,Grid%e1v,3,'double') CALL Write_Ncdf_var('e1f',dimnames,name,Grid%e1f,3,'double') CALL Write_Ncdf_var('e2t',dimnames,name,Grid%e2t,3,'double') CALL Write_Ncdf_var('e2u',dimnames,name,Grid%e2u,3,'double') CALL Write_Ncdf_var('e2v',dimnames,name,Grid%e2v,3,'double') CALL Write_Ncdf_var('e2f',dimnames,name,Grid%e2f,3,'double') ! CALL Copy_Ncdf_att('nav_lon',TRIM(parent_coordinate_file),name,& MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) CALL Copy_Ncdf_att('nav_lat',TRIM(parent_coordinate_file),name,& MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) CALL Copy_Ncdf_att('nav_lev',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('time',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('time_steps',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('glamt',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('glamu',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('glamv',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('glamf',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('gphit',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('gphiu',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('gphiv',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('gphif',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e1t',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e1u',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e1v',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e1f',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e2t',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e2u',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e2v',TRIM(parent_coordinate_file),name) CALL Copy_Ncdf_att('e2f',TRIM(parent_coordinate_file),name) ! WRITE(*,*) ' ' WRITE(*,*) 'Writing coordinates file: ',name IF(.NOT. iom_activated) WRITE(*,*) 'IOISPL format' IF(iom_activated) WRITE(*,*) 'IOM format' WRITE(*,*) ' ' ! Write_Coordinates = 1 ! END FUNCTION Write_Coordinates ! ! !***************************************************** ! function set_child_name(Parentname,Childname) !***************************************************** ! SUBROUTINE set_child_name(Parentname,Childname) ! CHARACTER(*),INTENT(in) :: Parentname CHARACTER(*),INTENT(out) :: Childname CHARACTER(2) :: prefix INTEGER :: pos ! pos = INDEX(TRIM(Parentname),'/',back=.TRUE.) ! prefix=Parentname(pos+1:pos+2) IF (prefix == '1_') THEN Childname = '2_'//Parentname(pos+3:LEN(Parentname)) ELSEIF (prefix == '2_') THEN Childname = '3_'//Parentname(pos+3:LEN(Parentname)) ELSEIF (prefix == '3_') THEN Childname = '4_'//Parentname(pos+3:LEN(Parentname)) ELSEIF (prefix == '4_') THEN Childname = '5_'//Parentname(pos+3:LEN(Parentname)) ELSE Childname = '1_'//Parentname(pos+1:LEN(Parentname)) ENDIF ! END SUBROUTINE set_child_name ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! END MODULE agrif_readwrite