From 1df2f2466230ef50b15ac1c27b00d06002cd3cbb Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 25 Sep 2017 15:33:17 +0200 Subject: [PATCH] Philippe 25/09/2017: IO: remove FMREAD and FMWRIT subroutines and all their dependencies --- src/LIB/SURCOUCHE/src/extern_userio.f90 | 687 ---- src/LIB/SURCOUCHE/src/fmread_ll.f90 | 2166 +----------- src/LIB/SURCOUCHE/src/fmreadwrit.f90 | 260 +- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 4210 +++++------------------ src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 1361 +------- src/LIB/SURCOUCHE/src/modi_fmread.f90 | 224 -- src/LIB/SURCOUCHE/src/modi_fmwrit.f90 | 301 -- src/MNH/mnh2lpdm_ech.f90 | 1 - src/MNH/mnh2lpdm_ini.f90 | 1 - 9 files changed, 1014 insertions(+), 8197 deletions(-) delete mode 100644 src/LIB/SURCOUCHE/src/modi_fmread.f90 delete mode 100644 src/LIB/SURCOUCHE/src/modi_fmwrit.f90 diff --git a/src/LIB/SURCOUCHE/src/extern_userio.f90 b/src/LIB/SURCOUCHE/src/extern_userio.f90 index 85746e3d2..20cfadc62 100644 --- a/src/LIB/SURCOUCHE/src/extern_userio.f90 +++ b/src/LIB/SURCOUCHE/src/extern_userio.f90 @@ -165,693 +165,6 @@ ELSE ENDIF END SUBROUTINE FMCLOS_ll - -! -! Routines found in the MODE_FMREAD module : FMREADxxx -! -SUBROUTINE FMREADX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX0_ll=>FMREADX0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL, INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX0_ll - -SUBROUTINE FMREADX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP, KIMAX_ll, KJMAX_ll) -USE MODE_FMREAD, ONLY : E_FMREADX1_ll=>FMREADX1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -REAL,DIMENSION(:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code -INTEGER, OPTIONAL, INTENT(IN) ::KIMAX_ll -INTEGER, OPTIONAL, INTENT(IN) ::KJMAX_ll - -IF( PRESENT(KIMAX_ll) .AND. PRESENT(KJMAX_ll) ) THEN - CALL E_FMREADX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP,KIMAX_ll,KJMAX_ll) -ELSE - CALL E_FMREADX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) -ENDIF - -END SUBROUTINE FMREADX1_ll - -SUBROUTINE FMREADX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX2_ll=>FMREADX2_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:),TARGET, INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX2_ll - -SUBROUTINE FMREADX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX3_ll=>FMREADX3_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL, DIMENSION(:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX3_ll - -SUBROUTINE FMREADX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX4_ll=>FMREADX4_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code if - -CALL E_FMREADX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX4_ll - -SUBROUTINE FMREADX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX5_ll=>FMREADX5_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX5_ll - -SUBROUTINE FMREADX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADX6_ll=>FMREADX6_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADX6_ll - -SUBROUTINE FMREADN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADN0_ll=>FMREADN0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -INTEGER, INTENT(OUT)::KFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADN0_ll - -SUBROUTINE FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADN1_ll=>FMREADN1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -INTEGER,DIMENSION(:),TARGET,INTENT(OUT)::KFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADN1_ll - -SUBROUTINE FMREADN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADN2_ll=>FMREADN2_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -INTEGER, DIMENSION(:,:),TARGET,INTENT(OUT)::KFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADN2_ll - -SUBROUTINE FMREADL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADL0_ll=>FMREADL0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -LOGICAL, INTENT(OUT)::OFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADL0_ll - -SUBROUTINE FMREADL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADL1_ll=>FMREADL1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -LOGICAL, DIMENSION(:), INTENT(OUT)::OFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADL1_ll - -SUBROUTINE FMREADC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADC0_ll=>FMREADC0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -CHARACTER(LEN=*), INTENT(OUT)::HFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADC0_ll - -SUBROUTINE FMREADT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREADT0_ll=>FMREADT0_ll -USE MODD_TYPE_DATE -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -TYPE (DATE_TIME), INTENT(OUT)::TFIELD ! array containing the data field -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREADT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREADT0_ll - -SUBROUTINE FMREAD_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) -USE MODE_FMREAD, ONLY : E_FMREAD_LB=>FMREAD_LB -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints -CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' -REAL, DIMENSION(:,:,:),TARGET, INTENT(OUT)::PLB ! array containing the LB field -INTEGER, INTENT(IN) :: KRIM ! size of the LB area -INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM -INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(OUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMREAD_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMREAD_LB - -! -! Routines found in the MODE_FMWRIT module : FMWRITxxx -! -SUBROUTINE FMWRITX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX0_ll=>FMWRITX0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL, INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX0_ll - -SUBROUTINE FMWRITX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX1_ll=>FMWRITX1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX1_ll - -SUBROUTINE FMWRITX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX2_ll=>FMWRITX2_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX2_ll - -SUBROUTINE FMWRITX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX3_ll=>FMWRITX3_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX3_ll - -SUBROUTINE FMWRITX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX4_ll=>FMWRITX4_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX4_ll - -SUBROUTINE FMWRITX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX5_ll=>FMWRITX5_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX5_ll - -SUBROUTINE FMWRITX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITX6_ll=>FMWRITX6_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITX6_ll - -SUBROUTINE FMWRITN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITN0_ll=>FMWRITN0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -INTEGER, INTENT(IN) ::KFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITN0_ll - -SUBROUTINE FMWRITN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITN1_ll=>FMWRITN1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -INTEGER,DIMENSION(:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITN1_ll - -SUBROUTINE FMWRITN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITN2_ll=>FMWRITN2_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITN2_ll - -SUBROUTINE FMWRITL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITL0_ll=>FMWRITL0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -LOGICAL, INTENT(IN) ::OFIELD ! array containing the data field -INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITL0_ll - -SUBROUTINE FMWRITL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITL1_ll=>FMWRITL1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -LOGICAL,DIMENSION(:),INTENT(IN) ::OFIELD ! array containing the data field -INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITL1_ll - -SUBROUTINE FMWRITC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITC0_ll=>FMWRITC0_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -CHARACTER(LEN=*), INTENT(IN) ::HFIELD ! array containing the data field -INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITC0_ll - -SUBROUTINE FMWRITC1_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITC1_ll=>FMWRITC1_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -CHARACTER(LEN=*),DIMENSION(:), INTENT(IN) ::HFIELD ! array containing the data field -INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITC1_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITC1_ll - -SUBROUTINE FMWRITT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITT0_ll=>FMWRITT0_ll -USE MODD_TYPE_DATE -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -TYPE (DATE_TIME), INTENT(IN) ::TFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRITT0_ll - -SUBROUTINE FMWRIT_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRIT_LB=>FMWRIT_LB -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints in FM -CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE! 'LBX','LBXU','LBY' or 'LBYV' -REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PLB ! array containing the LB field -INTEGER, INTENT(IN) ::KRIM ! size of the LB area -INTEGER, INTENT(IN) ::KL3D ! size of the LB array in FM -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(IN) ::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRIT_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,KGRID,KLENCH,HCOMMENT,KRESP) - -END SUBROUTINE FMWRIT_LB - -SUBROUTINE FMWRITBOXX2_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITBOXX2_ll=>FMWRITBOXX2_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) -REAL,DIMENSION(:,:),TARGET, INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(IN) ::KXOBOX ! -INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box -INTEGER, INTENT(IN) ::KYOBOX ! -INTEGER, INTENT(IN) ::KYEBOX ! -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITBOXX2_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - -END SUBROUTINE FMWRITBOXX2_ll - -SUBROUTINE FMWRITBOXX3_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITBOXX3_ll=>FMWRITBOXX3_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) -REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(IN) ::KXOBOX ! -INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box -INTEGER, INTENT(IN) ::KYOBOX ! -INTEGER, INTENT(IN) ::KYEBOX ! -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITBOXX3_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - -END SUBROUTINE FMWRITBOXX3_ll - -SUBROUTINE FMWRITBOXX4_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITBOXX4_ll=>FMWRITBOXX4_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) -REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(IN) ::KXOBOX ! -INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box -INTEGER, INTENT(IN) ::KYOBOX ! -INTEGER, INTENT(IN) ::KYEBOX ! -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITBOXX4_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - -END SUBROUTINE FMWRITBOXX4_ll - -SUBROUTINE FMWRITBOXX5_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITBOXX5_ll=>FMWRITBOXX5_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) -REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(IN) ::KXOBOX ! -INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box -INTEGER, INTENT(IN) ::KYOBOX ! -INTEGER, INTENT(IN) ::KYEBOX ! -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITBOXX5_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - -END SUBROUTINE FMWRITBOXX5_ll - -SUBROUTINE FMWRITBOXX6_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) -USE MODE_FMWRIT, ONLY : E_FMWRITBOXX6_ll=>FMWRITBOXX6_ll -IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) -REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field -INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) -CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string -INTEGER, INTENT(IN) ::KXOBOX ! -INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box -INTEGER, INTENT(IN) ::KYOBOX ! -INTEGER, INTENT(IN) ::KYEBOX ! -INTEGER, INTENT(OUT)::KRESP ! return-code - -CALL E_FMWRITBOXX6_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - -END SUBROUTINE FMWRITBOXX6_ll ! ! Routines found in the MODE_GATHER_ll module : GATHERALL_xx ! diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 81b46b2aa..135602716 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -65,58 +65,9 @@ INTERFACE IO_READ_FIELD_LB MODULE PROCEDURE IO_READ_FIELD_BYNAME_LB, IO_READ_FIELD_BYFIELD_LB END INTERFACE -INTERFACE FMREAD - MODULE PROCEDURE FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,& - & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,& - & FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,& - & FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll -END INTERFACE -! - -PUBLIC FMREAD_LB,FMREAD,FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,& - & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,& - & FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,& - & FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB CONTAINS -SUBROUTINE FM_READ_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KRESP) -USE MODE_FM, ONLY : FMLOOK_ll - -CHARACTER(LEN=*) :: HFUNC -CHARACTER(LEN=*) :: HFILEM -CHARACTER(LEN=*) :: HFIPRI -CHARACTER(LEN=*) :: HRECFM -CHARACTER(LEN=*) :: HDIR -INTEGER :: KRESP - -INTEGER :: ILUPRI -INTEGER :: IRESP - -CALL FMLOOK_ll(HFIPRI,HFIPRI,ILUPRI,IRESP) -WRITE (ILUPRI,*) ' exit from ',HFUNC, ' with RESP:',KRESP -!STOP "fmread_ll.f90:: FM_READ_ERR" - -WRITE (ILUPRI,*) ' | HFILEM = ',HFILEM -WRITE (ILUPRI,*) ' | HRECFM = ',HRECFM -WRITE (ILUPRI,*) ' | HDIR = ',HDIR - -END SUBROUTINE FM_READ_ERR - - -SUBROUTINE BCAST_HEADER(TPFD,TPFMH) -USE MODE_FD_ll, ONLY : FD_ll -USE MODD_FM -TYPE(FD_ll), POINTER :: TPFD -TYPE(FMHEADER), INTENT(INOUT) :: TPFMH - -INTEGER :: ierr - -CALL MPI_BCAST(TPFMH%GRID,1,MPI_INTEGER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFMH%COMLEN,1,MPI_INTEGER,TPFD%OWNER-1,TPFD%COMM,IERR) -CALL MPI_BCAST(TPFMH%COMMENT,TPFMH%COMLEN,MPI_CHARACTER,TPFD%OWNER-1,TPFD%COMM,IERR) - -END SUBROUTINE BCAST_HEADER SUBROUTINE IO_BCAST_FIELD_METADATA(TPFD,TPFIELD) USE MODE_FD_ll, ONLY : FD_ll @@ -140,85 +91,6 @@ CALL MPI_BCAST(TPFIELD%NDIMS, 1, MPI_INTEGER, TPFD%OWNER ! END SUBROUTINE IO_BCAST_FIELD_METADATA -SUBROUTINE FMREADX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -! -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL, INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -!---------------------------------------------------------------- -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX0_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,1,PFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,1,PFIELD,TZFMH,IRESP) - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX0_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADX0_ll SUBROUTINE IO_READ_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP) ! @@ -315,118 +187,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_X0 -SUBROUTINE FMREADX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP, KIMAX_ll, KJMAX_ll, TPSPLITTING) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC, ISNPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll -USE MODD_STRUCTURE_ll, ONLY : ZONE_ll -! -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -REAL,DIMENSION(:),TARGET,INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -INTEGER, OPTIONAL, INTENT(IN) ::KIMAX_ll -INTEGER, OPTIONAL, INTENT(IN) ::KJMAX_ll -TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING ! splitting of the domain -! -!* 0.2 Declarations of local variables -! -!---------------------------------------------------------------- -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:),POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX1_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - IF( PRESENT(KIMAX_ll) .AND. PRESENT(KJMAX_ll) ) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC, KIMAX_ll, KJMAX_ll) - ELSE - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ENDIF - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0)) - GALLOC = .TRUE. - END IF - - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR /= 'XX' .AND. HDIR /='YY') THEN - ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - ELSE - !Scatter Field - IF( PRESENT(TPSPLITTING) ) THEN - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM,TPSPLITTING) - ELSE - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ENDIF - END IF - END IF !(GSMONOPROC) - - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX1_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF - -IF (GALLOC) DEALLOCATE (ZFIELDP) -KRESP = IRESP -RETURN -!------------------------------------------------------------------ -END SUBROUTINE FMREADX1_ll - SUBROUTINE IO_READ_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING) ! USE MODD_IO_ll, ONLY : ISNPROC @@ -545,197 +305,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_X1 -SUBROUTINE FMREADX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP, KIMAX_ll, KJMAX_ll, TPSPLITTING) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LPACK,L1D,L2D , ISNPROC -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll -!JUANZ -USE MODD_TIMEZ, ONLY : TIMEZ -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 -!JUANZ -USE MODD_STRUCTURE_ll, ONLY : ZONE_ll -#ifdef MNH_GA - USE MODE_GA -#endif - -IMPLICIT NONE - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:),TARGET, INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -INTEGER, OPTIONAL, INTENT(IN) ::KIMAX_ll -INTEGER, OPTIONAL, INTENT(IN) ::KJMAX_ll -TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING ! splitting of the domain -! -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI - -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:), POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -!JUANZ -REAL*8,DIMENSION(2) :: T0,T1,T2 -REAL*8,DIMENSION(2) :: T11,T22 -!JUANZ -#ifdef MNH_GA -REAL,DIMENSION(:,:),POINTER :: ZFIELD_GA -#endif -INTEGER :: IHEXTOT -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX2_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -CALL SECOND_MNH2(T11) -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution -! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) -! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSE IF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:)=SPREAD(PFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - CALL SECOND_MNH2(T0) - IF (ISP == TZFD%OWNER) THEN - ! I/O processor case - IF( PRESENT(KIMAX_ll) .AND. PRESENT(KJMAX_ll) ) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC, KIMAX_ll, KJMAX_ll) - ELSE - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ENDIF - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0,0)) - GALLOC = .TRUE. - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_READ2D_READ=TIMEZ%T_READ2D_READ + T1 - T0 - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - IF( PRESENT(TPSPLITTING) ) THEN - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM,TPSPLITTING) - ELSE - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ENDIF - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - IF( PRESENT(TPSPLITTING) ) THEN - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1),PFIELD(:,JPHEXT+1),TZFD%OWNER,TZFD%COMM,TPSPLITTING) - ELSE - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1),PFIELD(:,JPHEXT+1),TZFD%OWNER,TZFD%COMM) - ENDIF - PFIELD(:,:) = SPREAD(PFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) - ELSE -#ifdef MNH_GA - ! - ! init/create the ga , dim3 = 1 - ! - CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),1,HRECFM,"READ") - IF (ISP == TZFD%OWNER) THEN - ! - ! put the data in the g_a , this proc get this 1 slide - ! - lo_zplan(JPIZ) = 1 - hi_zplan(JPIZ) = 1 - call nga_put(g_a, lo_zplan, hi_zplan,ZFIELDP, ld_zplan) - END IF - call ga_sync - ! - ! get the columun data in this proc - ! - ! temp buf to avoid problem with none stride PFIELDS buffer with HALO - ALLOCATE (ZFIELD_GA (SIZE(PFIELD,1),SIZE(PFIELD,2))) - call nga_get(g_a, lo_col, hi_col,ZFIELD_GA(1,1) , ld_col) - PFIELD = ZFIELD_GA - DEALLOCATE(ZFIELD_GA) -#else - ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) -#endif - END IF - ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - CALL SECOND_MNH2(T2) - TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1 - END IF !(GSMONOPROC) - - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX2_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -IF (GALLOC) DEALLOCATE (ZFIELDP) -KRESP = IRESP -!------------------------------------------------------------------ - -CALL SECOND_MNH2(T22) -TIMEZ%T_READ2D_ALL=TIMEZ%T_READ2D_ALL + T22 - T11 - -END SUBROUTINE FMREADX2_ll - SUBROUTINE IO_READ_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING) ! USE MODD_IO_ll, ONLY : ISNPROC @@ -915,430 +484,75 @@ TIMEZ%T_READ2D_ALL=TIMEZ%T_READ2D_ALL + T22 - T11 END SUBROUTINE IO_READ_FIELD_BYFIELD_X2 -SUBROUTINE FMREADX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LPACK,L1D,L2D -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll -!JUANZ -USE MODD_IO_ll, ONLY : ISNPROC -USE MODE_IO_ll, ONLY : io_file,io_rank -USE MODD_TIMEZ, ONLY : TIMEZ -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 -!JUANZ -#ifdef MNH_GA - USE MODE_GA -#endif -USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE - -IMPLICIT NONE - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL, DIMENSION(:,:,:),TARGET,INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code +SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP) ! -#ifdef MNH_GA -REAL,DIMENSION(:,:,:),POINTER :: ZFIELD_GA -#endif +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write +REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field +INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! +INTEGER :: ID ! Index of the field +INTEGER :: IRESP ! return_code ! -!* 0.2 Declarations of local variables +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) ! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -!JUAN -INTEGER :: JK,JKK -CHARACTER(LEN=LEN(HRECFM)) :: YK,YRECZSLIDE -REAL,DIMENSION(:,:),POINTER :: ZSLIDE_ll,ZSLIDE -INTEGER :: IK_FILE,IK_rank,inb_proc_real,JK_MAX -CHARACTER(len=5) :: YK_FILE -CHARACTER(len=128) :: YFILE_IOZ -TYPE(FD_ll), POINTER :: TZFD_IOZ -INTEGER :: JI,IXO,IXE,IYO,IYE -REAL,DIMENSION(:,:),POINTER :: TX2DP -INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS -LOGICAL :: GALLOC_ll +CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) +! +IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP) +! +IF (PRESENT(KRESP)) KRESP = IRESP +! +END SUBROUTINE IO_READ_FIELD_BYNAME_X3 -INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB -INTEGER :: NB_REQ +SUBROUTINE IO_READ_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP) +! +USE MODD_IO_ll, ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D +USE MODD_TIMEZ, ONLY : TIMEZ +USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE +! +USE MODE_ALLOCBUFFER_ll +USE MODE_FD_ll, ONLY : GETFD,FD_LL +USE MODE_IO_ll, ONLY : IO_FILE +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME +USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 +USE MODE_SCATTER_ll +! +TYPE(TFILEDATA),TARGET, INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD +REAL,DIMENSION(:,:,:),TARGET,INTENT(INOUT) :: PFIELD ! array containing the data field +INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code +! TYPE TX_2DP - REAL,DIMENSION(:,:), POINTER :: X + REAL,DIMENSION(:,:), POINTER :: X END TYPE TX_2DP +! +INTEGER :: IERR,IRESP +INTEGER :: IHEXTOT +INTEGER :: IK_FILE,IK_RANK,INB_PROC_REAL,JK_MAX +INTEGER :: JI,IXO,IXE,IYO,IYE +INTEGER :: JK,JKK +INTEGER :: NB_REQ +INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB +INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS +LOGICAL :: GALLOC, GALLOC_ll +REAL,DIMENSION(:,:),POINTER :: TX2DP +REAL,DIMENSION(:,:),POINTER :: ZSLICE_ll,ZSLICE +REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP +REAL(KIND=8),DIMENSION(2) :: T0,T1,T2 +REAL(KIND=8),DIMENSION(2) :: T11,T22 +CHARACTER(LEN=2) :: YDIR +CHARACTER(LEN=128) :: YFILE_IOZ +CHARACTER(LEN=4) :: YK +CHARACTER(LEN=5) :: YK_FILE +CHARACTER(LEN=NMNHNAMELGTMAX+4) :: YRECZSLICE +CHARACTER(LEN=4) :: YSUFFIX +TYPE(FD_ll), POINTER :: TZFD +TYPE(FD_ll), POINTER :: TZFD_IOZ +TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFIELDDATA) :: TZFIELD TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP -REAL*8,DIMENSION(2) :: T0,T1,T2 -REAL*8,DIMENSION(2) :: T11,T22 -INTEGER :: IHEXTOT -!JUAN ! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX3_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -CALL SECOND_MNH2(T11) -GALLOC = .FALSE. -GALLOC_ll = .FALSE. -IRESP = 0 -YFNLFI = TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC .AND. (TZFD%nb_procio.eq.1) ) THEN ! sequential execution -! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) -! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSE IF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ALLOCATE (ZFIELDP(SIZE(PFIELD,1),1,SIZE(PFIELD,3))) - GALLOC = .TRUE. - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:)=SPREAD(ZFIELDP(:,1,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - END IF - IF (IRESP /= 0) GOTO 1000 - ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( HDIR == '--' ) ) THEN ! multiprocessor execution & 1 IO proc - ! read 3D field for graphique - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TZFD%OWNER,TZFD%COMM) - PFIELD(:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - END IF - ELSE - ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE ! multiprocessor execution & // IO -! -!JUAN BG Z SLIDE -! -#ifdef MNH_GA - ! - ! init/create the ga - ! - CALL SECOND_MNH2(T0) - CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3),HRECFM,"READ") - ! - ! read the data - ! - ALLOCATE(ZSLIDE_ll(0,0)) ! to avoid bug on test of size - GALLOC_ll = .TRUE. - DO JKK=1,IKU_ll - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ! - IK_RANK = TZFD_IOZ%OWNER - ! - IF (ISP == IK_RANK ) THEN - IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN - DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,HDIR,GALLOC_ll) - END IF - ! - CALL SECOND_MNH2(T0) - WRITE(YK,'(I4.4)') JKK - YRECZSLIDE = TRIM(HRECFM)//YK - IF (ASSOCIATED(TZFD_IOZ%CDF)) THEN - CALL NCREAD(TZFD_IOZ%CDF%NCID,YRECZSLIDE,ZSLIDE_ll,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD_IOZ%FLU,YRECZSLIDE,.TRUE.,SIZE(ZSLIDE_ll),ZSLIDE_ll,TZFMH& - & ,IRESP) - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0 - ! - ! put the data in the g_a , this proc get this JKK slide - ! - lo_zplan(JPIZ) = JKK - hi_zplan(JPIZ) = JKK - call nga_put(g_a, lo_zplan, hi_zplan,ZSLIDE_ll, ld_zplan) - END IF - END DO - call ga_sync - ! - ! get the columun data in this proc - ! - ! temp buf to avoid problem with none stride PFIELDS buffer with HALO - ALLOCATE (ZFIELD_GA (SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3))) - call nga_get(g_a, lo_col, hi_col,ZFIELD_GA(1,1,1) , ld_col) - PFIELD = ZFIELD_GA - DEALLOCATE(ZFIELD_GA) -#else - ALLOCATE(ZSLIDE_ll(0,0)) - GALLOC_ll = .TRUE. - inb_proc_real = min(TZFD%nb_procio,ISNPROC) - Z_SLIDE: DO JK=1,SIZE(PFIELD,3),inb_proc_real - ! - ! read the data - ! - JK_MAX=min(SIZE(PFIELD,3),JK+inb_proc_real-1) - ! - NB_REQ=0 - ALLOCATE(REQ_TAB(ISNPROC-1)) - ALLOCATE(T_TX2DP(ISNPROC-1)) - DO JKK=JK,JK_MAX - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ELSE - TZFD_IOZ => TZFD - ENDIF - IK_RANK = TZFD_IOZ%OWNER - IF (ISP == IK_RANK ) THEN - IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN - DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,HDIR,GALLOC_ll) - END IF - !JUAN - CALL SECOND_MNH2(T0) - WRITE(YK,'(I4.4)') JKK - YRECZSLIDE = TRIM(HRECFM)//YK - IF (ASSOCIATED(TZFD_IOZ%CDF)) THEN - CALL NCREAD(TZFD_IOZ%CDF%NCID,YRECZSLIDE,ZSLIDE_ll,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD_IOZ%FLU,YRECZSLIDE,.TRUE.,SIZE(ZSLIDE_ll),ZSLIDE_ll,TZFMH& - & ,IRESP) - END IF - !JUANIOZ - CALL SECOND_MNH2(T1) - TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0 - DO JI = 1,ISNPROC - CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE) - TX2DP=>ZSLIDE_ll(IXO:IXE,IYO:IYE) - IF (ISP /= JI) THEN - NB_REQ = NB_REQ + 1 - ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE)) - T_TX2DP(NB_REQ)%X=TX2DP - CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK & - & ,TZFD_IOZ%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK,TZFD_IOZ%COMM,IERR) - ELSE - PFIELD(:,:,JKK) = TX2DP(:,:) - END IF - END DO - CALL SECOND_MNH2(T2) - TIMEZ%T_READ3D_SEND=TIMEZ%T_READ3D_SEND + T2 - T1 - !JUANIOZ - END IF - END DO - ! - ! brodcast the data - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - STOP " XX ou YY NON PREVU SUR BG POUR LE MOMENT " - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - STOP " L2D NON PREVU SUR BG POUR LE MOMENT " - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TZFD%OWNER,TZFD%COMM) - PFIELD(:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - ! - ! XY Scatter Field - ! - CALL SECOND_MNH2(T0) - DO JKK=JK,JK_MAX - ! - ! get the file & rank - ! - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ELSE - TZFD_IOZ => TZFD - END IF - ! - !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) - IK_RANK = TZFD_IOZ%OWNER - ! - ZSLIDE => PFIELD(:,:,JKK) -!JUANIOZ - !CALL SCATTER_XYFIELD(ZSLIDE_ll,ZSLIDE,TZFD_IOZ%OWNER,TZFD_IOZ%COMM) - IF (ISP .NE. IK_RANK) THEN - CALL MPI_RECV(ZSLIDE,SIZE(ZSLIDE),MPI_FLOAT,IK_RANK-1,199+IK_RANK,TZFD_IOZ%COMM& - & ,STATUS,IERR) - END IF -!JUAN IOZ - END DO - CALL SECOND_MNH2(T1) - TIMEZ%T_READ3D_RECV=TIMEZ%T_READ3D_RECV + T1 - T0 - END IF - ELSE - ! Broadcast Field - STOP " Broadcast Field NON PREVU SUR BG POUR LE MOMENT " - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - CALL SECOND_MNH2(T0) - IF (NB_REQ .GT.0 ) THEN - CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - DO JI=1,NB_REQ ; DEALLOCATE(T_TX2DP(JI)%X) ; ENDDO - END IF - DEALLOCATE(T_TX2DP) - DEALLOCATE(REQ_TAB) - CALL SECOND_MNH2(T1) - TIMEZ%T_READ3D_WAIT=TIMEZ%T_READ3D_WAIT + T1 - T0 - END DO Z_SLIDE - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! -#endif -!JUAN BG Z SLIDE - END IF !(GSMONOPROC) - - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX3_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -IF (GALLOC) DEALLOCATE (ZFIELDP) -IF (GALLOC_ll) DEALLOCATE (ZSLIDE_ll) -!IF (ASSOCIATED(ZSLIDE_ll)) DEALLOCATE (ZSLIDE_ll) -KRESP = IRESP -CALL MPI_BARRIER(TZFD%COMM,IERR) -CALL SECOND_MNH2(T22) -TIMEZ%T_READ3D_ALL=TIMEZ%T_READ3D_ALL + T22 - T11 - -!------------------------------------------------------------------ -END SUBROUTINE FMREADX3_ll - - -SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP) -! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write -REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field -INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code -! -INTEGER :: ID ! Index of the field -INTEGER :: IRESP ! return_code -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) -! -CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) -! -IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP) -! -IF (PRESENT(KRESP)) KRESP = IRESP -! -END SUBROUTINE IO_READ_FIELD_BYNAME_X3 - -SUBROUTINE IO_READ_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP) -! -USE MODD_IO_ll, ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D -USE MODD_TIMEZ, ONLY : TIMEZ -USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE -! -USE MODE_ALLOCBUFFER_ll -USE MODE_FD_ll, ONLY : GETFD,FD_LL -USE MODE_IO_ll, ONLY : IO_FILE -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 -USE MODE_SCATTER_ll -! -TYPE(TFILEDATA),TARGET, INTENT(IN) :: TPFILE -TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:),TARGET,INTENT(INOUT) :: PFIELD ! array containing the data field -INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code -! -TYPE TX_2DP - REAL,DIMENSION(:,:), POINTER :: X -END TYPE TX_2DP -! -INTEGER :: IERR,IRESP -INTEGER :: IHEXTOT -INTEGER :: IK_FILE,IK_RANK,INB_PROC_REAL,JK_MAX -INTEGER :: JI,IXO,IXE,IYO,IYE -INTEGER :: JK,JKK -INTEGER :: NB_REQ -INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB -INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS -LOGICAL :: GALLOC, GALLOC_ll -REAL,DIMENSION(:,:),POINTER :: TX2DP -REAL,DIMENSION(:,:),POINTER :: ZSLICE_ll,ZSLICE -REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP -REAL(KIND=8),DIMENSION(2) :: T0,T1,T2 -REAL(KIND=8),DIMENSION(2) :: T11,T22 -CHARACTER(LEN=2) :: YDIR -CHARACTER(LEN=128) :: YFILE_IOZ -CHARACTER(LEN=4) :: YK -CHARACTER(LEN=5) :: YK_FILE -CHARACTER(LEN=NMNHNAMELGTMAX+4) :: YRECZSLICE -CHARACTER(LEN=4) :: YSUFFIX -TYPE(FD_ll), POINTER :: TZFD -TYPE(FD_ll), POINTER :: TZFD_IOZ -TYPE(TFILEDATA),POINTER :: TZFILE -TYPE(TFIELDDATA) :: TZFIELD -TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) ! CALL SECOND_MNH2(T11) GALLOC = .FALSE. @@ -1637,130 +851,6 @@ TIMEZ%T_READ3D_ALL=TIMEZ%T_READ3D_ALL + T22 - T11 END SUBROUTINE IO_READ_FIELD_BYFIELD_X3 -SUBROUTINE FMREADX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LPACK,L1D,L2D -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:),TARGET,INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code if -! -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -INTEGER :: IHEXTOT -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX4_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution -! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) -! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSE IF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:,:)=SPREAD(PFIELD(:,JPHEXT+1,:,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:),PFIELD(:,JPHEXT+1,:,:),TZFD%OWNER,TZFD%COMM) - PFIELD(:,:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - END IF - ELSE - ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX4_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF - -IF (GALLOC) DEALLOCATE (ZFIELDP) -KRESP = IRESP -RETURN -!------------------------------------------------------------------ -END SUBROUTINE FMREADX4_ll - SUBROUTINE IO_READ_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP) ! USE MODD_IO_ll, ONLY : ISNPROC @@ -1899,145 +989,21 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_X4 -SUBROUTINE FMREADX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LPACK,L1D,L2D -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code +SUBROUTINE IO_READ_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP) ! +USE MODD_IO_ll, ONLY : ISNPROC +USE MODD_STRUCTURE_ll, ONLY : ZONE_ll ! -!* 0.2 Declarations of local variables ! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -INTEGER :: IHEXTOT +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write +REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field +INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code ! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX5_ll','reading '//TRIM(HRECFM)) +INTEGER :: ID ! Index of the field +INTEGER :: IRESP ! return_code ! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution -! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) -! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSE IF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - END IF - PFIELD(:,:,:,:,:)=SPREAD(PFIELD(:,JPHEXT+1,:,:,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:,:,:),PFIELD(:,JPHEXT+1,:,:,:),& - & TZFD%OWNER,TZFD%COMM) - PFIELD(:,:,:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:,:,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - END IF - ELSE - ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX5_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -IF (GALLOC) DEALLOCATE (ZFIELDP) -KRESP = IRESP -RETURN -!------------------------------------------------------------------ -END SUBROUTINE FMREADX5_ll - -SUBROUTINE IO_READ_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP) -! -USE MODD_IO_ll, ONLY : ISNPROC -USE MODD_STRUCTURE_ll, ONLY : ZONE_ll -! -! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write -REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field -INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code -! -INTEGER :: ID ! Index of the field -INTEGER :: IRESP ! return_code -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! @@ -2161,100 +1127,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_X5 -SUBROUTINE FMREADX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(INOUT)::PFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADX6_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,PFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,ZFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(HDIR,ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE IF (HDIR == 'XY') THEN - ! XY Scatter Field - CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TZFD%OWNER,TZFD%COMM) - ELSE - ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADX6_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -IF (GALLOC) DEALLOCATE (ZFIELDP) -KRESP = IRESP -RETURN -!------------------------------------------------------------------ -END SUBROUTINE FMREADX6_ll - SUBROUTINE IO_READ_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP) ! USE MODD_IO_ll, ONLY : ISNPROC @@ -2375,86 +1247,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_X6 -SUBROUTINE FMREADN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - -! -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -INTEGER, INTENT(INOUT)::KFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADN0_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -! -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,KFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,1,KFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,KFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,1,KFIELD,TZFMH,IRESP) - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADN0_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADN0_ll - SUBROUTINE IO_READ_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2548,102 +1340,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_N0 -SUBROUTINE FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll - -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -INTEGER,DIMENSION(:),TARGET,INTENT(INOUT)::KFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER,DIMENSION(:),POINTER :: IFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADN1_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,KFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(KFIELD),KFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH& - & ,IRESP) - END IF - ELSE - ALLOCATE(IFIELDP(0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR /= 'XX' .AND. HDIR /='YY') THEN - ! Broadcast Field - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - ELSE - !Scatter Field - CALL SCATTER_XXFIELD(HDIR,IFIELDP,KFIELD,TZFD%OWNER,TZFD%COMM) - END IF - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADN1_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -IF (GALLOC) DEALLOCATE (IFIELDP) -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADN1_ll - SUBROUTINE IO_READ_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2752,134 +1448,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_N1 -SUBROUTINE FMREADN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LPACK,L1D,L2D -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -USE MODE_SCATTER_ll -USE MODE_ALLOCBUFFER_ll - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -INTEGER, DIMENSION(:,:),TARGET,INTENT(INOUT)::KFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER,DIMENSION(:,:),POINTER :: IFIELDP -LOGICAL :: GALLOC -TYPE(FMHEADER) :: TZFMH -INTEGER :: IHEXTOT -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADN2_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -GALLOC = .FALSE. -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution -! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH,IRESP) - END IF - KFIELD(:,:)=SPREAD(SPREAD(KFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT) -! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSE IF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH,IRESP) - END IF - KFIELD(:,:)=SPREAD(KFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,KFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(KFIELD),KFIELD,TZFMH,IRESP) - END IF - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,HDIR,GALLOC) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELDP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP& - & ,TZFMH,IRESP) - END IF - ELSE - ALLOCATE(IFIELDP(0,0)) - GALLOC = .TRUE. - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - ! XX or YY Scatter Field - CALL SCATTER_XXFIELD(HDIR,IFIELDP,KFIELD,TZFD%OWNER,TZFD& - & %COMM) - ELSE IF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - ! 2D compact case - CALL SCATTER_XXFIELD('XX',IFIELDP(:,1),KFIELD(:,JPHEXT+1),TZFD%OWNER,TZFD%COMM) - KFIELD(:,:) = SPREAD(KFIELD(:,JPHEXT+1),DIM=2,NCOPIES=IHEXTOT) - ELSE - ! XY Scatter Field - CALL SCATTER_XYFIELD(IFIELDP,KFIELD,TZFD%OWNER,TZFD%COMM) - END IF - ELSE - ! Broadcast Field - IF (ISP == TZFD%OWNER) KFIELD = IFIELDP - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_INTEGER,TZFD%OWNER-1& - & ,TZFD%COMM,IERR) - END IF - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADN2_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -! -IF (GALLOC) DEALLOCATE (IFIELDP) -KRESP = IRESP -RETURN -!------------------------------------------------------------------ -END SUBROUTINE FMREADN2_ll - - SUBROUTINE IO_READ_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP) ! USE MODD_IO_ll, ONLY : ISNPROC @@ -3020,92 +1588,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_N2 -SUBROUTINE FMREADL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form -LOGICAL, INTENT(INOUT)::OFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER :: IFIELD -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADL0_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,1,IFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,1,IFIELD,TZFMH,IRESP) - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - CALL MPI_BCAST(IFIELD,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,& - & IERR) - END IF - IF (IFIELD==1) THEN - OFIELD=.TRUE. - ELSE - OFIELD=.FALSE. - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADL0_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADL0_ll - SUBROUTINE IO_READ_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3199,96 +1681,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_L0 -SUBROUTINE FMREADL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -LOGICAL, DIMENSION(:), INTENT(INOUT)::OFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! - -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADL1_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -! -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELD),IFIELD,TZFMH& - & ,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,IFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELD),IFIELD,TZFMH& - & ,IRESP) - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - CALL MPI_BCAST(IFIELD,SIZE(IFIELD),MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF - WHERE (IFIELD==1) - OFIELD=.TRUE. - ELSEWHERE - OFIELD=.FALSE. - END WHERE - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADL1_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADL1_ll - SUBROUTINE IO_READ_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3382,108 +1774,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_L1 -SUBROUTINE FMREADC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIREAD -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -! -!* 0. DECLARATIONS -! ------------ -! -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -CHARACTER(LEN=*), INTENT(INOUT)::HFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER :: JLOOP -INTEGER, DIMENSION(LEN(HFIELD)) :: IFIELD -CHARACTER(LEN(HFIELD)) :: YFIELD -INTEGER :: ILENG -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADC0_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -ILENG=LEN(HFIELD) -! -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,YFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! parallel execution - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,YFIELD,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - IF (LIOCDF4 .AND. .NOT. LLFIREAD) THEN - ! NetCDF - CALL MPI_BCAST(YFIELD,ILENG,MPI_CHARACTER,TZFD%OWNER-1,TZFD%COMM,& - &IERR) - ELSE - ! LFI - CALL MPI_BCAST(IFIELD,ILENG,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,& - & IERR) - END IF - END IF ! parallel execution - ! - IF (LIOCDF4 .AND. .NOT. LLFIREAD) THEN - ! NetCDF - HFIELD = YFIELD - ELSE - ! LFI Case - DO JLOOP=1,ILENG - HFIELD(JLOOP:JLOOP)=ACHAR(IFIELD(JLOOP)) - END DO - END IF - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADC0_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADC0_ll - SUBROUTINE IO_READ_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3577,104 +1867,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_C0 -SUBROUTINE FMREADT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -!* 0. DECLARATIONS -! ------------ -! -USE MODD_IO_ll, ONLY : ISP,GSMONOPROC -USE MODD_TYPE_DATE -USE MODD_FM -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -! -!* 0.1 Declarations of arguments -! -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages -CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form -TYPE (DATE_TIME), INTENT(INOUT)::TFIELD ! array containing the data field -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -! -!* 0.2 Declarations of local variables -! -!------------------------------------------------------------------------------- - - -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -INTEGER,DIMENSION(3) :: ITDATE -REAL :: ZTIME -TYPE(FMHEADER) :: TZFMH -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREADT0_ll','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -IRESP = 0 - -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,TRIM(HRECFM)//'%TDATE',ITDATE,TZFMH,IRESP) - CALL NCREAD(TZFD%CDF%NCID,TRIM(HRECFM)//'%TIME',ZTIME,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,TRIM(HRECFM)//'%TDATE',.FALSE.,3,ITDATE& - & ,TZFMH,IRESP) - CALL FM_READ_ll(TZFD%FLU,TRIM(HRECFM)//'%TIME',.TRUE.,1,ZTIME& - & ,TZFMH,IRESP) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,TRIM(HRECFM)//'%TDATE',ITDATE,TZFMH,IRESP) - CALL NCREAD(TZFD%CDF%NCID,TRIM(HRECFM)//'%TIME',ZTIME,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,TRIM(HRECFM)//'%TDATE',.FALSE.,3,ITDATE& - & ,TZFMH,IRESP) - CALL FM_READ_ll(TZFD%FLU,TRIM(HRECFM)//'%TIME',.TRUE.,1,ZTIME& - & ,TZFMH,IRESP) - - END IF - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! Last header is significant - CALL BCAST_HEADER(TZFD,TZFMH) - ! - CALL MPI_BCAST(ITDATE,3,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - CALL MPI_BCAST(ZTIME,1,MPI_FLOAT,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - TFIELD%TDATE = DATE(ITDATE(1),ITDATE(2),ITDATE(3)) - TFIELD%TIME = ZTIME - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREADT0_ll",HFILEM,HFIPRI,HRECFM,HDIR,IRESP) -ENDIF -KRESP = IRESP -RETURN - -END SUBROUTINE FMREADT0_ll - SUBROUTINE IO_READ_FIELD_BYNAME_T0(TPFILE,HNAME,TPDATA,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3776,223 +1968,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_READ_FIELD_BYFIELD_T0 -SUBROUTINE FMREAD_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) -USE MODD_FM -USE MODD_IO_ll, ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D -USE MODD_PARAMETERS_ll,ONLY : JPHEXT -USE MODE_DISTRIB_LB -USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll -USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL -!JUANZ -USE MODD_TIMEZ, ONLY : TIMEZ -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 -!JUANZ -USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE - -CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name -CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written -CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints -CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' -REAL, DIMENSION(:,:,:),TARGET, INTENT(INOUT)::PLB ! array containing the LB field -INTEGER, INTENT(IN) :: KRIM ! size of the LB area -INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM -INTEGER, INTENT(INOUT)::KGRID ! C-grid indicator (u,v,w,T) -INTEGER, INTENT(INOUT)::KLENCH ! length of comment string -CHARACTER(LEN=*), INTENT(INOUT)::HCOMMENT ! comment string -INTEGER, INTENT(INOUT)::KRESP ! return-code -! -!* 0.2 Declarations of local variables -! -CHARACTER(LEN=JPFINL) :: YFNLFI -INTEGER :: IERR -TYPE(FD_ll), POINTER :: TZFD -INTEGER :: IRESP -REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D -REAL,DIMENSION(:,:,:), POINTER :: TX3DP -TYPE(FMHEADER) :: TZFMH -INTEGER :: IIMAX_ll,IJMAX_ll -INTEGER :: IIB,IIE,IJB,IJE -INTEGER :: JI -INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS -INTEGER, ALLOCATABLE,DIMENSION(:,:) :: STATUSES -!JUANZIO -!JUAN INTEGER,SAVE,DIMENSION(100000) :: REQ_TAB -INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB -INTEGER :: NB_REQ,IKU -TYPE TX_3DP -REAL,DIMENSION(:,:,:), POINTER :: X -END TYPE -TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP -REAL*8,DIMENSION(2) :: T0,T1,T2,T3 -REAL*8,DIMENSION(2) :: T11,T22 -!JUANZIO -INTEGER :: IHEXTOT -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMREAD_LB','reading '//TRIM(HRECFM)) -! -!* 1.1 THE NAME OF LFIFM -! -CALL SECOND_MNH2(T11) -IRESP = 0 -YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' -!------------------------------------------------------------------ -IHEXTOT = 2*JPHEXT+1 -TZFD=>GETFD(YFNLFI) -IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN - ALLOCATE(Z3D(KL3D,SIZE(PLB,2),SIZE(PLB,3))) - Z3D = 0.0 - IF (LPACK .AND. L2D) THEN - TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,TX3DP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(TX3DP),TX3DP,TZFMH,IRESP) - END IF - Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,Z3D,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) - END IF - END IF - PLB(1:KRIM+JPHEXT,:,:) = Z3D(1:KRIM+JPHEXT,:,:) - PLB(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) - ELSE !(HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV') - ALLOCATE(Z3D(SIZE(PLB,1),KL3D,SIZE(PLB,3))) - Z3D = 0.0 - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,Z3D,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) - END IF - PLB(:,1:KRIM+JPHEXT,:) = Z3D(:,1:KRIM+JPHEXT,:) - PLB(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) - END IF - IF (IRESP /= 0) GOTO 1000 - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - CALL SECOND_MNH2(T0) - CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) - IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN - ALLOCATE(Z3D(KL3D,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) - Z3D = 0.0 - IF (LPACK .AND. L2D) THEN - TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,TX3DP,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(TX3DP),TX3DP,TZFMH,IRESP) - END IF - Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) - ELSE - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,Z3D,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) - END IF - END IF - ! erase gap in LB field - Z3D(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) - ELSE !(HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV') - ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,KL3D,SIZE(PLB,3))) - Z3D = 0.0 - IF (ASSOCIATED(TZFD%CDF)) THEN - CALL NCREAD(TZFD%CDF%NCID,HRECFM,Z3D,TZFMH,IRESP) - ELSE - CALL FM_READ_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(Z3D),Z3D,TZFMH,IRESP) - END IF - ! erase gap in LB field - Z3D(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_READLB_READ=TIMEZ%T_READLB_READ + T1 - T0 - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - IF (IRESP /= 0) GOTO 1000 - ! - CALL BCAST_HEADER(TZFD,TZFMH) - ! - NB_REQ=0 - ALLOCATE(REQ_TAB(ISNPROC-1)) - !REQ_TAB=MPI_REQUEST_NULL - IF (ISP == TZFD%OWNER) THEN - CALL SECOND_MNH2(T1) - !ALLOCATE(REQ_TAB(ISNPROC-1)) - !REQ_TAB=MPI_REQUEST_NULL - ALLOCATE(T_TX3DP(ISNPROC-1)) - IKU = SIZE(Z3D,3) - DO JI = 1,ISNPROC - CALL GET_DISTRIB_LB(HLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) - IF (ISP /= JI) THEN - NB_REQ = NB_REQ + 1 - ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) - T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,IERR) - ELSE - CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) - PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:) - END IF - END IF - END DO - CALL SECOND_MNH2(T2) - TIMEZ%T_READLB_SEND=TIMEZ%T_READLB_SEND + T2 - T1 - IF (NB_REQ .GT.0 ) THEN - !ALLOCATE(STATUSES(MPI_STATUS_SIZE,NB_REQ)) - !CALL MPI_WAITALL(NB_REQ,REQ_TAB,STATUSES,IERR) - CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - !DEALLOCATE(STATUSES) - DO JI=1,NB_REQ ; DEALLOCATE(T_TX3DP(JI)%X) ; ENDDO - END IF - DEALLOCATE(T_TX3DP) - !DEALLOCATE(REQ_TAB) - CALL SECOND_MNH2(T3) - TIMEZ%T_READLB_WAIT=TIMEZ%T_READLB_WAIT + T3 - T2 - ELSE - CALL SECOND_MNH2(T0) - !ALLOCATE(REQ_TAB(1)) - !REQ_TAB=MPI_REQUEST_NULL - CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,STATUS,IERR) - !NB_REQ = NB_REQ + 1 - !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_READLB_RECV=TIMEZ%T_READLB_RECV + T1 - T0 - END IF - DEALLOCATE(REQ_TAB) - END IF !(GSMONOPROC) - KGRID = TZFMH%GRID - KLENCH = TZFMH%COMLEN - HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN) -ELSE - IRESP = -61 -END IF -!---------------------------------------------------------------- -1000 CONTINUE -!! Error handler -IF (IRESP.NE.0) THEN - CALL FM_READ_ERR("FMREAD_LB",HFILEM,HFIPRI,HRECFM,HLBTYPE,IRESP) -ENDIF -! -IF (ALLOCATED(Z3D)) DEALLOCATE (Z3D) -KRESP = IRESP -! -!CALL MPI_BARRIER(TZFD%COMM,IERR) -CALL SECOND_MNH2(T22) -TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11 -END SUBROUTINE FMREAD_LB - SUBROUTINE IO_READ_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -4017,7 +1992,6 @@ END SUBROUTINE IO_READ_FIELD_BYNAME_LB SUBROUTINE IO_READ_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP) ! -USE MODD_FM USE MODD_IO_ll, ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODD_TIMEZ, ONLY : TIMEZ diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 index e66b259cd..3d4808a06 100644 --- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 +++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 @@ -11,234 +11,6 @@ ! $Date$ !----------------------------------------------------------------- !----------------------------------------------------------------- - -MODULE MODD_FM -USE MODE_FIELD, ONLY : TFIELDDATA -IMPLICIT NONE - -INTEGER, PARAMETER :: JPXKRK = 100 -INTEGER, PARAMETER :: JPXFIE = 1.5E8 - -TYPE FMHEADER - INTEGER :: GRID - INTEGER :: COMLEN - CHARACTER(LEN=JPXKRK) :: COMMENT -END TYPE FMHEADER - -END MODULE MODD_FM - -SUBROUTINE FM_READ_ll(KFLU,HRECFM,OREAL,KLENG,KFIELD,TPFMH,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB -USE MODE_MSG -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! -INTEGER, INTENT(IN) :: KFLU ! Fortran Logical Unit -CHARACTER(LEN=*), INTENT(IN) :: HRECFM ! name of the desired article -LOGICAL, INTENT(IN) :: OREAL ! TRUE IF TRANSMITTED KFIELD IS REAL -INTEGER, INTENT(IN) :: KLENG ! length of the data field -INTEGER,DIMENSION(KLENG),INTENT(OUT):: KFIELD ! array containing the data field -TYPE(FMHEADER), INTENT(OUT):: TPFMH ! FM-File Header -INTEGER, INTENT(OUT):: KRESP ! return-code if problems occured -! -!* 0.2 Declarations of local variables -! -!JUAN -INTEGER(KIND=LFI_INT) :: IRESP,ILENGA,IPOSEX,ITOTAL,INUMBR -INTEGER :: J,IROW -!JUAN -INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE::IWORK -INTEGER,DIMENSION(1:JPXKRK) ::ICOMMENT -! -!* 0.3 Taskcommon for logical units -! -! -!------------------------------------------------------------------ - -CALL PRINT_MSG(NVERB_DEBUG,'IO','FM_READ_ll','reading '//TRIM(HRECFM)) - -! -!* 1.2 WE LOOK FOR THE FILE'S LOGICAL UNIT -! - -INUMBR = KFLU - -! -!* 2.a LET'S GET SOME INFORMATION ON THE DESIRED ARTICLE -! -CALL LFINFO(IRESP,INUMBR,HRECFM,ILENGA,IPOSEX) -IF (IRESP.NE.0) THEN - GOTO 1000 -ELSEIF (ILENGA.EQ.0) THEN - IRESP=-47 - GOTO 1000 -ELSEIF (ILENGA.GT.JPXFIE) THEN - IRESP=-48 - GOTO 1000 -ENDIF - -! -!* 2.b UNFORMATTED DIRECT ACCESS READ OPERATION -! -ITOTAL=ILENGA -IF ( NZ_VERB .GE. 5 ) print *," fmreadwrit.f90:: FM_READ_ll ILENGA=",ILENGA," HRECFM=",HRECFM -ALLOCATE(IWORK(ITOTAL)) - -CALL LFILEC(IRESP,INUMBR,HRECFM,IWORK,ITOTAL) -IF (IRESP.NE.0) GOTO 1000 -! -!* 2.c THE GRID INDICATOR AND THE COMMENT STRING -!* ARE SEPARATED FROM THE DATA -! -TPFMH%GRID = IWORK(1) -TPFMH%COMLEN = IWORK(2) - -IROW=KLENG+TPFMH%COMLEN+2 -IF (ITOTAL.NE.IROW) THEN - PRINT *,'KLENG =',KLENG - PRINT *,'diff = ',ITOTAL-(TPFMH%COMLEN+2) - IRESP=-63 - GOTO 1000 -ENDIF - -SELECT CASE (TPFMH%COMLEN) -CASE(:-1) - IRESP=-58 - GOTO 1000 -CASE(0) - IRESP = 0 -CASE(1:JPXKRK) - ICOMMENT(1:TPFMH%COMLEN)=IWORK(3:TPFMH%COMLEN+2) - DO J=1,TPFMH%COMLEN - TPFMH%COMMENT(J:J)=CHAR(ICOMMENT(J)) - ENDDO -CASE(JPXKRK+1:) - IRESP=-56 - GOTO 1000 -END SELECT - -IF (OREAL) THEN - CALL TRANSFR(KFIELD,IWORK(TPFMH%COMLEN+3),KLENG) -ELSE - KFIELD(1:KLENG) = IWORK(TPFMH%COMLEN+3:ITOTAL) -END IF -! -! this is a pure binary field: no uncompressing of any kind -! -!* 3. MESSAGE PRINTING WHATEVER THE ISSUE WAS -! -1000 CONTINUE - -KRESP=IRESP - -IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK) - -RETURN -END SUBROUTINE FM_READ_ll - -SUBROUTINE FM_WRIT_ll(KFLU,HRECFM,OREAL,KLENG,KFIELD,TPFMH,KRESP) - -USE MODD_FM -USE MODE_MSG - -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! -INTEGER, INTENT(IN) :: KFLU ! Fortran Logical Unit -CHARACTER(LEN=*), INTENT(IN) :: HRECFM ! name of the article to be written -LOGICAL, INTENT(IN) :: OREAL ! TRUE IF TRANSMITTED KFIELD IS REAL -INTEGER, INTENT(IN) :: KLENG ! length of the data field -INTEGER,DIMENSION(KLENG),INTENT(IN) :: KFIELD ! array containing the data field -TYPE(FMHEADER), INTENT(IN) :: TPFMH ! FM-File Header -INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised -! -!* 0.2 Declarations of local variables -! -!JUAN -INTEGER(kind=LFI_INT) :: IRESP,ITOTAL,INUMBR -INTEGER :: J -!JUAN -INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE::IWORK -INTEGER,DIMENSION(1:JPXKRK) ::ICOMMENT - -CALL PRINT_MSG(NVERB_DEBUG,'IO','FM_WRIT_ll','writing '//TRIM(HRECFM)) - -! -!* 1.2 WE LOOK FOR THE FILE'S LOGICAL UNIT -! - -INUMBR = KFLU - -! -!* 2. GRID INDICATOR, COMMENT AND DATA ARE PUT TOGETHER -! - -IF (KLENG.LE.0) THEN - IRESP=-40 - GOTO 1000 -ELSEIF (KLENG.GT.JPXFIE) THEN - IRESP=-43 - GOTO 1000 -ELSEIF ((TPFMH%GRID.LT.0).OR.(TPFMH%GRID.GT.8)) THEN - IRESP=-46 - GOTO 1000 -ENDIF - -ITOTAL=KLENG+1+TPFMH%COMLEN+1 -ALLOCATE(IWORK(ITOTAL)) - -IWORK(1)=TPFMH%GRID - -SELECT CASE (TPFMH%COMLEN) -CASE(:-1) - IRESP=-55 - GOTO 1000 -CASE(0) - IWORK(2)=TPFMH%COMLEN -CASE(1:JPXKRK) - DO J=1,TPFMH%COMLEN - ICOMMENT(J)=ICHAR(TPFMH%COMMENT(J:J)) - ENDDO - IWORK(2)=TPFMH%COMLEN - IWORK(3:TPFMH%COMLEN+2)=ICOMMENT(1:TPFMH%COMLEN) -CASE(JPXKRK+1:) - IRESP=-57 - GOTO 1000 -END SELECT - -IF (OREAL) THEN - CALL TRANSFW(IWORK(TPFMH%COMLEN+3),KFIELD,KLENG) -ELSE - IWORK(TPFMH%COMLEN+3:ITOTAL)=KFIELD(1:KLENG) -END IF - -! -! no compressing of any kind: the data is pure binary -! -!* 3. UNFORMATTED, DIRECT ACCESS WRITE OPERATION -! -CALL LFIECR(IRESP,INUMBR,HRECFM,IWORK,ITOTAL) - - -! -!* 4. MESSAGE PRINTING WHATEVER THE ISSUE WAS -! -1000 CONTINUE - -KRESP=IRESP - -IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK) - -RETURN -END SUBROUTINE FM_WRIT_ll - SUBROUTINE TRANSFR(KDEST,KSOURCE,KSIZE) IMPLICIT NONE INTEGER :: KSIZE @@ -262,7 +34,6 @@ END SUBROUTINE TRANSFW MODULE MODE_READWRITE_LFI ! -USE MODD_FM USE MODD_IO_ll USE MODE_FIELD, ONLY : TFIELDDATA USE MODE_MSG @@ -271,6 +42,9 @@ IMPLICIT NONE ! PRIVATE ! +INTEGER, PARAMETER :: JPXKRK = 100 +INTEGER, PARAMETER :: JPXFIE = 1.5E8 +! INTERFACE IO_READ_FIELD_LFI MODULE PROCEDURE IO_READ_FIELD_LFI_X0, IO_READ_FIELD_LFI_X1, & IO_READ_FIELD_LFI_X2, IO_READ_FIELD_LFI_X3, & @@ -300,8 +74,6 @@ PUBLIC IO_READ_FIELD_LFI,IO_WRITE_FIELD_LFI CONTAINS ! SUBROUTINE IO_READ_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -336,8 +108,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X0 ! ! SUBROUTINE IO_READ_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -372,8 +142,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X1 ! ! SUBROUTINE IO_READ_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -408,8 +176,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X2 ! ! SUBROUTINE IO_READ_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -444,8 +210,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X3 ! ! SUBROUTINE IO_READ_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -480,8 +244,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X4 ! ! SUBROUTINE IO_READ_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -516,8 +278,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X5 ! ! SUBROUTINE IO_READ_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -552,8 +312,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_X6 ! ! SUBROUTINE IO_READ_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -588,8 +346,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_N0 ! ! SUBROUTINE IO_READ_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -624,8 +380,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_N1 ! ! SUBROUTINE IO_READ_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -660,8 +414,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_N2 ! ! SUBROUTINE IO_READ_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -709,8 +461,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_L0 ! ! SUBROUTINE IO_READ_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -763,8 +513,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_L1 ! ! SUBROUTINE IO_READ_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP) -USE MODD_FM -USE MODD_CONFZ, ONLY : NZ_VERB USE MODE_MSG ! IMPLICIT NONE @@ -804,8 +552,6 @@ END SUBROUTINE IO_READ_FIELD_LFI_C0 ! SUBROUTINE IO_READ_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP) ! -USE MODD_CONFZ, ONLY : NZ_VERB -USE MODD_FM USE MODE_MSG USE MODD_TYPE_DATE ! diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 32e9ede12..be0a98099 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -207,57 +207,11 @@ MODULE MODE_FMWRIT MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_LB, IO_WRITE_FIELD_BYFIELD_LB END INTERFACE - INTERFACE FMWRIT - MODULE PROCEDURE FMWRITX0_ll,FMWRITX1_ll,FMWRITX2_ll,FMWRITX3_ll,& - & FMWRITX4_ll,FMWRITX5_ll,FMWRITX6_ll,& - & FMWRITN0_ll,FMWRITN1_ll,FMWRITN2_ll,& - & FMWRITL0_ll,FMWRITL1_ll,FMWRITC0_ll,& - & FMWRITC1_ll,FMWRITT0_ll - END INTERFACE - - INTERFACE FMWRITBOX - MODULE PROCEDURE FMWRITBOXX2_ll,FMWRITBOXX3_ll,FMWRITBOXX4_ll,& - & FMWRITBOXX5_ll,FMWRITBOXX6_ll - END INTERFACE - - PUBLIC FMWRIT_LB,FMWRITBOX,FMWRIT,FMWRITX0_ll,FMWRITX1_ll,FMWRITX2_ll,FMWRITX3_ll,& - & FMWRITX4_ll,FMWRITX5_ll,FMWRITX6_ll,FMWRITN0_ll,FMWRITN1_ll,FMWRITN2_ll,& - & FMWRITL0_ll,FMWRITL1_ll,FMWRITC0_ll,FMWRITC1_ll,FMWRITT0_ll,FMWRITBOXX2_ll,& - & FMWRITBOXX3_ll,FMWRITBOXX4_ll,FMWRITBOXX5_ll,FMWRITBOXX6_ll PUBLIC IO_WRITE_FIELD, IO_WRITE_FIELD_BOX, IO_WRITE_FIELD_LB PUBLIC IO_WRITE_HEADER - !INCLUDE 'mpif.h' - CONTAINS - SUBROUTINE FM_WRIT_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,KRESP) - USE MODE_FM, ONLY : FMLOOK_ll - - CHARACTER(LEN=*) :: HFUNC - CHARACTER(LEN=*) :: HFILEM - CHARACTER(LEN=*) :: HFIPRI - CHARACTER(LEN=*) :: HRECFM - CHARACTER(LEN=*) :: HDIR - INTEGER :: KGRID - INTEGER :: KLENCH - INTEGER :: KRESP - - INTEGER :: ILUPRI - INTEGER :: IRESP - - CALL FMLOOK_ll(HFIPRI,HFIPRI,ILUPRI,IRESP) - WRITE (ILUPRI,*) ' exit from ',HFUNC,' with RESP:',KRESP - WRITE (ILUPRI,*) ' | HFILEM = ',HFILEM - WRITE (ILUPRI,*) ' | HRECFM = ',HRECFM - WRITE (ILUPRI,*) ' | HDIR = ',HDIR - WRITE (ILUPRI,*) ' | KGRID = ',KGRID - WRITE (ILUPRI,*) ' | KLENCH = ',KLENCH - - END SUBROUTINE FM_WRIT_ERR - - SUBROUTINE FIELD_METADATA_CHECK(TPFIELD,KTYPE,KDIMS,HCALLER) TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD ! Field to check INTEGER, INTENT(IN) :: KTYPE ! Expected datatype @@ -346,99 +300,6 @@ CONTAINS ! END SUBROUTINE IO_WRITE_HEADER - SUBROUTINE FMWRITX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) -! -! Modification -! J.Escobar 15/04/2014 : add write to all Z files for all FMWRITX0_ll variables -! J.Escobar 23/06/2014 : bug , replace .FALSE. to .TRUE. = OREAL type transmetted to FM_WRIT_ll -! - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - ! - !* 0. DECLARATIONS - ! ------------ - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL, INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - !---------------------------------------------------------------- - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - !JUANZIO - INTEGER :: IK_FILE,IK_rank - CHARACTER(len=5) :: YK_FILE - CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ - !JUANZIO - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX0_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article 0 ' , HRECFM - ! - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,1,PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,1,PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution - IF (TZFD%nb_procio.gt.1) THEN - ! write the data in all Z files - DO IK_FILE=1,TZFD%nb_procio - write(YK_FILE ,'(".Z",i3.3)') IK_FILE - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - IK_RANK = TZFD_IOZ%OWNER - IF ( ISP == IK_RANK ) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD_IOZ%FLU,HRECFM,.TRUE.,1,PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD_IOZ%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - END IF - END DO - ENDIF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX0_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) - END IF - KRESP = IRESP - END SUBROUTINE FMWRITX0_ll SUBROUTINE IO_WRITE_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP) ! @@ -466,6 +327,7 @@ CONTAINS ! END SUBROUTINE IO_WRITE_FIELD_BYNAME_X0 + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -557,89 +419,6 @@ CONTAINS IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0 - SUBROUTINE FMWRITX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - ! - !* 0. DECLARATIONS - ! ------------ - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - !---------------------------------------------------------------- - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - REAL,DIMENSION(:),POINTER :: ZFIELDP - LOGICAL :: GALLOC - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX1_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(ZFIELDP(0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX1_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITX1_ll SUBROUTINE IO_WRITE_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP) ! @@ -667,6 +446,7 @@ CONTAINS ! END SUBROUTINE IO_WRITE_FIELD_BYNAME_X1 + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -768,182 +548,6 @@ CONTAINS IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1 - SUBROUTINE FMWRITX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L1D,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - !JUANZ - USE MODD_TIMEZ, ONLY : TIMEZ - USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 - !JUANZ -#ifdef MNH_GA - !JUAN_IOGA - USE MODE_GA -#endif - ! - IMPLICIT NONE - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - ! - !JUANZ - REAL*8,DIMENSION(2) :: T0,T1,T2 - REAL*8,DIMENSION(2) :: T11,T22 - !JUANZ -#ifdef MNH_GA - REAL,DIMENSION(:,:),POINTER :: ZFIELDP_GA , ZFIELD_GA - REAL :: ERROR - INTEGER :: JI -#endif - INTEGER :: IHEXTOT - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX2_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - CALL SECOND_MNH2(T11) - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - ! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - END IF - ELSE ! multiprocessor execution - CALL SECOND_MNH2(T0) - IF (ISP == TZFD%OWNER) THEN - ! I/O processor case - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(ZFIELDP(0,0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1),ZFIELDP(:,1),TZFD%OWNER,TZFD%COMM) - ELSE -#ifdef MNH_GA - ! - ! init/create the ga , dim3 = 1 - ! - CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),1,HRECFM,"WRITE") - ! - ! copy columun data to global arrays g_a - ! - ALLOCATE (ZFIELD_GA (SIZE(PFIELD,1),SIZE(PFIELD,2))) - ZFIELD_GA = PFIELD - call nga_put(g_a, lo_col, hi_col,ZFIELD_GA(NIXO_L,NIYO_L) , ld_col) -!!$ print*," nga_put =",HRECFM,g_a," lo_col=",lo_col," hi_col=",hi_col,ZFIELD_GA(NIXO_L,NIYO_L), & -!!$ " NIXO_L=",NIXO_L,"NIYO_L=",NIYO_L," ld_col=",ld_col," ISP=",ISP - call ga_sync - DEALLOCATE (ZFIELD_GA) - IF (ISP == TZFD%OWNER) THEN - ! - ! this proc get the Z slide to write - ! - lo_zplan(JPIZ) = 1 - hi_zplan(JPIZ) = 1 -!!$ ALLOCATE (ZFIELDP_GA(IIU_ll,IJU_ll)) - call nga_get(g_a, lo_zplan, hi_zplan,ZFIELDP, ld_zplan) -!!$ print*,"nga_get=",HRECFM,g_a," lo_zplan=",lo_zplan," hi_zplan=",hi_zplan & -!!$ ,ZFIELDP(1,1)," ld_zplan=",ld_zplan - END IF -!!$ call ga_sync -#else - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) -!!$ IF (ISP == TZFD%OWNER) THEN -!!$ print*,HRECFM, "ERR=", MAXVAL (ZFIELDP_GA - ZFIELDP) -!!$ DO JI=1,IJU_ll -!!$ !print*,HRECFM, "ERR=", ZFIELDP_GA(:,JI) - ZFIELDP(:,JI) -!!$ print*,HRECFM, "WX2::GA =", ZFIELDP_GA(:,JI) -!!$ print*,HRECFM, "WX2::MNH=", ZFIELDP(:,JI) -!!$ END DO -!!$ END IF -#endif - END IF - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0 - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - END IF -#ifdef MNH_GA -!!$ IF (ISP .EQ. 1 ) THEN -!!$ call ga_print_stats() -!!$ call ga_summarize(1) -!!$ ENDIF - call ga_sync -!!$ gstatus_ga = ga_destroy(g_a) -#endif - CALL SECOND_MNH2(T2) - TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX2_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) - CALL SECOND_MNH2(T22) - TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 - END SUBROUTINE FMWRITX2_ll SUBROUTINE IO_WRITE_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP) ! @@ -971,6 +575,7 @@ CONTAINS ! END SUBROUTINE IO_WRITE_FIELD_BYNAME_X2 + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODD_PARAMETERS_ll,ONLY : JPHEXT @@ -1158,50 +763,72 @@ CONTAINS TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2 - SUBROUTINE FMWRITX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L1D,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - !JUANZ - USE MODD_IO_ll, ONLY : ISNPROC - USE MODE_IO_ll, ONLY : io_file,io_rank - USE MODD_TIMEZ, ONLY : TIMEZ - USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 - !JUANZ -#ifdef MNH_GA - USE MODE_GA -#endif - USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE + + SUBROUTINE IO_WRITE_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP) ! + USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + REAL,DIMENSION(:,:,:), INTENT(IN) :: PFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_X3 + + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP) + USE MODD_IO_ll + USE MODD_PARAMETERS_ll,ONLY : JPHEXT + USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL + USE MODE_ALLOCBUFFER_ll + USE MODE_GATHER_ll + !JUANZ + USE MODE_IO_ll, ONLY : io_file,io_rank + USE MODD_TIMEZ, ONLY : TIMEZ + USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 + !JUANZ +#ifdef MNH_GA + USE MODE_GA +#endif + USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE + ! + ! + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + CHARACTER(LEN=28) :: YFILEM ! FM-file name + CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write + CHARACTER(LEN=2) :: YDIR ! field form + CHARACTER(LEN=JPFINL) :: YFNLFI + INTEGER :: IERR + INTEGER :: ISIZEMAX + TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH LOGICAL :: GALLOC !JUAN INTEGER :: JK,JKK - CHARACTER(LEN=LEN(HRECFM)) :: YK,YRECZSLIDE REAL,DIMENSION(:,:),POINTER :: ZSLIDE_ll,ZSLIDE INTEGER :: IK_FILE,IK_rank,inb_proc_real,JK_MAX CHARACTER(len=5) :: YK_FILE @@ -1228,8 +855,16 @@ CONTAINS REAL,DIMENSION(:,:,:),POINTER :: ZFIELD_GA #endif INTEGER :: IHEXTOT + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP + ! + YFILEM = TPFILE%CNAME + YRECFM = TPFIELD%CMNHNAME + YDIR = TPFIELD%CDIR + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX3_ll','writing '//TRIM(HRECFM)) + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,3,'IO_WRITE_FIELD_BYFIELD_X3') ! !* 1.1 THE NAME OF LFIFM ! @@ -1237,43 +872,50 @@ CONTAINS IRESP = 0 GALLOC = .FALSE. GALLOC_ll = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article 3 ' , HRECFM + YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' ! !------------------------------------------------------------------ IHEXTOT = 2*JPHEXT+1 TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC .AND. (TZFD%nb_procio.eq.1) ) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - ! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN + ! IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) + END IF + ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( YDIR == '--' ) ) THEN ! multiprocessor execution & 1 proc IO +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) +#endif + IF (ISIZEMAX==0) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN END IF - ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( HDIR == '--' ) ) THEN ! multiprocessor execution & 1 proc IO + ! write 3D field in 1 time = output for graphique IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) + CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE ALLOCATE(ZFIELDP(0,0,0)) GALLOC = .TRUE. END IF ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN + IF (YDIR == 'XX' .OR. YDIR =='YY') THEN + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) ELSE @@ -1282,18 +924,24 @@ CONTAINS END IF ! IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - END IF + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& & %COMM,IERR) ! ELSE ! multiprocessor execution & // IO +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) +#endif + IF (ISIZEMAX==0) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF ! !JUAN BG Z SLIDE ! @@ -1303,7 +951,7 @@ CONTAINS ! init/create the ga ! CALL SECOND_MNH2(T0) - CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3),HRECFM,"WRITE") + CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3),YRECFM,"WRITE") ! ! copy columun data to global arrays g_a ! @@ -1311,7 +959,7 @@ CONTAINS ZFIELD_GA = PFIELD call nga_put(g_a, lo_col, hi_col,ZFIELD_GA(NIXO_L,NIYO_L,1) , ld_col) DEALLOCATE(ZFIELD_GA) -!!$ print*," nga_put =",HRECFM,g_a," lo_col=",lo_col," hi_col=",hi_col,PFIELD(NIXO_L,NIYO_L,1) & +!!$ print*," nga_put =",YRECFM,g_a," lo_col=",lo_col," hi_col=",hi_col,PFIELD(NIXO_L,NIYO_L,1) & !!$ ," ld_col=",ld_col call ga_sync CALL SECOND_MNH2(T1) @@ -1326,7 +974,7 @@ CONTAINS ! IK_FILE = io_file(JKK,TZFD%nb_procio) write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" + YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) ! IK_RANK = TZFD_IOZ%OWNER @@ -1334,15 +982,10 @@ CONTAINS ! IF (ISP == IK_RANK ) THEN CALL SECOND_MNH2(T0) - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - WRITE(YK,'(I4.4)') JKK - YRECZSLIDE = TRIM(HRECFM)//YK ! IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,HDIR,GALLOC_ll) + CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,YDIR,GALLOC_ll) END IF ! ! this proc get this JKK slide @@ -1353,9 +996,8 @@ CONTAINS CALL SECOND_MNH2(T1) TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 ! - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD_IOZ%FLU,YRECZSLIDE,.TRUE.,SIZE(ZSLIDE_ll),& - &ZSLIDE_ll,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD_IOZ%CDF,YRECZSLIDE,HDIR,ZSLIDE_ll,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 END IF @@ -1394,7 +1036,7 @@ CONTAINS IF (TZFD%NB_PROCIO .GT. 1 ) THEN IK_FILE = io_file(JKK,TZFD%nb_procio) write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" + YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) ELSE TZFD_IOZ => TZFD @@ -1403,10 +1045,10 @@ CONTAINS !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) IK_RANK = TZFD_IOZ%OWNER ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN + IF (YDIR == 'XX' .OR. YDIR =='YY') THEN STOP " XX NON PREVU SUR BG POUR LE MOMENT " - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN + CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN STOP " L2D NON PREVU SUR BG POUR LE MOMENT " CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) @@ -1441,7 +1083,7 @@ CONTAINS IF (TZFD%NB_PROCIO .GT. 1 ) THEN IK_FILE = io_file(JKK,TZFD%nb_procio) write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" + YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" TZFD_IOZ => GETFD(YFILE_IOZ) ELSE TZFD_IOZ => TZFD @@ -1455,7 +1097,7 @@ CONTAINS ! I/O proc case IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,HDIR,GALLOC_ll) + CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,YDIR,GALLOC_ll) END IF DO JI=1,ISNPROC CALL GET_DOMWRITE_ll(JI,'global',IXO,IXE,IYO,IYE) @@ -1473,14 +1115,8 @@ CONTAINS CALL SECOND_MNH2(T1) TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 !JUANIOZ - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - WRITE(YK,'(I4.4)') JKK - YRECZSLIDE = TRIM(HRECFM)//YK - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD_IOZ%FLU,YRECZSLIDE,.TRUE.,SIZE(ZSLIDE_ll),ZSLIDE_ll,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD_IOZ%CDF,YRECZSLIDE,HDIR,ZSLIDE_ll,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 END IF @@ -1508,21 +1144,25 @@ CONTAINS END IF ! multiprocessor execution ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX3_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3',YMSG) END IF IF (GALLOC) DEALLOCATE(ZFIELDP) IF (GALLOC_ll) DEALLOCATE(ZSLIDE_ll) !IF (Associated(ZSLIDE_ll)) DEALLOCATE(ZSLIDE_ll) - KRESP = IRESP + IF (PRESENT(KRESP)) KRESP = IRESP IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) CALL SECOND_MNH2(T22) TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 - END SUBROUTINE FMWRITX3_ll + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3 - SUBROUTINE IO_WRITE_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP) + + SUBROUTINE IO_WRITE_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -1530,7 +1170,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - REAL,DIMENSION(:,:,:), INTENT(IN) :: PFIELD ! array containing the data field + REAL,DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -1538,7 +1178,7 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! @@ -1546,9 +1186,10 @@ CONTAINS ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_X3 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_X4 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP) + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -1559,18 +1200,15 @@ CONTAINS USE MODD_TIMEZ, ONLY : TIMEZ USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 !JUANZ -#ifdef MNH_GA - USE MODE_GA -#endif USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE ! ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + REAL,DIMENSION(:,:,:,:),TARGET, INTENT(IN) :: PFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! @@ -1582,35 +1220,8 @@ CONTAINS INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP + REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC - !JUAN - INTEGER :: JK,JKK - REAL,DIMENSION(:,:),POINTER :: ZSLIDE_ll,ZSLIDE - INTEGER :: IK_FILE,IK_rank,inb_proc_real,JK_MAX - CHARACTER(len=5) :: YK_FILE - CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ - INTEGER :: JI,IXO,IXE,IYO,IYE - REAL,DIMENSION(:,:),POINTER :: TX2DP - INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS - INTEGER, ALLOCATABLE,DIMENSION(:,:) :: STATUSES - LOGICAL :: GALLOC_ll - !JUANZIO - !INTEGER,SAVE,DIMENSION(100000) :: REQ_TAB - INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB - INTEGER :: NB_REQ - TYPE TX_2DP - REAL,DIMENSION(:,:), POINTER :: X - END TYPE TX_2DP - TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP - REAL*8,DIMENSION(2) :: T0,T1,T2 - REAL*8,DIMENSION(2) :: T11,T22 - !JUANZIO - !JUAN -#ifdef MNH_GA - REAL,DIMENSION(:,:,:),POINTER :: ZFIELD_GA -#endif INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP @@ -1619,54 +1230,47 @@ CONTAINS YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) - ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,3,'IO_WRITE_FIELD_BYFIELD_X3') + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - !* 1.1 THE NAME OF LFIFM + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,4,'IO_WRITE_FIELD_BYFIELD_X4') ! - CALL SECOND_MNH2(T11) IRESP = 0 GALLOC = .FALSE. - GALLOC_ll = .FALSE. YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' ! !------------------------------------------------------------------ IHEXTOT = 2*JPHEXT+1 TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC .AND. (TZFD%nb_procio.eq.1) ) THEN ! sequential execution + IF (GSMONOPROC) THEN ! sequential execution ! IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:) + ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) END IF - ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( YDIR == '--' ) ) THEN ! multiprocessor execution & 1 proc IO + ELSE #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) #else CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) #endif IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 RETURN END IF - ! write 3D field in 1 time = output for graphique IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE - ALLOCATE(ZFIELDP(0,0,0)) + ALLOCATE(ZFIELDP(0,0,0,0)) GALLOC = .TRUE. END IF ! @@ -1674,7 +1278,7 @@ CONTAINS CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:),ZFIELDP(:,1,:,:),TZFD%OWNER,TZFD%COMM) ELSE CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) END IF @@ -1685,342 +1289,24 @@ CONTAINS IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - ! - ELSE ! multiprocessor execution & // IO -#ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) -#endif - IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') - IF (PRESENT(KRESP)) KRESP=0 - RETURN - END IF - ! - !JUAN BG Z SLIDE - ! - ! -#ifdef MNH_GA - ! - ! init/create the ga - ! - CALL SECOND_MNH2(T0) - CALL MNH_INIT_GA(SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3),YRECFM,"WRITE") - ! - ! copy columun data to global arrays g_a - ! - ALLOCATE (ZFIELD_GA (SIZE(PFIELD,1),SIZE(PFIELD,2),SIZE(PFIELD,3))) - ZFIELD_GA = PFIELD - call nga_put(g_a, lo_col, hi_col,ZFIELD_GA(NIXO_L,NIYO_L,1) , ld_col) - DEALLOCATE(ZFIELD_GA) -!!$ print*," nga_put =",YRECFM,g_a," lo_col=",lo_col," hi_col=",hi_col,PFIELD(NIXO_L,NIYO_L,1) & -!!$ ," ld_col=",ld_col - call ga_sync - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_SEND=TIMEZ%T_WRIT3D_SEND + T1 - T0 - ! - ! write the data - ! - ALLOCATE(ZSLIDE_ll(0,0)) ! to avoid bug on test of size - GALLOC_ll = .TRUE. - ! - DO JKK=1,IKU_ll - ! - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ! - IK_RANK = TZFD_IOZ%OWNER - !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) - ! - IF (ISP == IK_RANK ) THEN - CALL SECOND_MNH2(T0) - ! - IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN - DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,YDIR,GALLOC_ll) - END IF - ! - ! this proc get this JKK slide - ! - lo_zplan(JPIZ) = JKK - hi_zplan(JPIZ) = JKK - call nga_get(g_a, lo_zplan, hi_zplan,ZSLIDE_ll, ld_zplan) - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 - ! - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) - CALL SECOND_MNH2(T2) - TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 - END IF - END DO - !call ga_sync - ! - ! destroy the global array - ! -!!$ IF (ISP .EQ. 1 ) THEN -!!$ call ga_print_stats() -!!$ call ga_summarize(1) -!!$ ENDIF - CALL SECOND_MNH2(T0) - call ga_sync -!!$ gstatus_ga = ga_destroy(g_a) - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_WAIT=TIMEZ%T_WRIT3D_WAIT + T1 - T0 -#else - ! - ALLOCATE(ZSLIDE_ll(0,0)) - GALLOC_ll = .TRUE. - inb_proc_real = min(TZFD%nb_procio,ISNPROC) - Z_SLIDE: DO JK=1,SIZE(PFIELD,3),inb_proc_real - ! - ! collecte the data - ! - JK_MAX=min(SIZE(PFIELD,3),JK+inb_proc_real-1) - ! - NB_REQ=0 - ALLOCATE(REQ_TAB(inb_proc_real)) - ALLOCATE(T_TX2DP(inb_proc_real)) - DO JKK=JK,JK_MAX - ! - ! get the file & rank to write this level - ! - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ELSE - TZFD_IOZ => TZFD - END IF - ! - !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) - IK_RANK = TZFD_IOZ%OWNER - ! - IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - STOP " XX NON PREVU SUR BG POUR LE MOMENT " - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (YDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - STOP " L2D NON PREVU SUR BG POUR LE MOMENT " - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) - ELSE - !CALL GATHER_XYFIELD(ZSLIDE,ZSLIDE_ll,TZFD_IOZ%OWNER,TZFD_IOZ%COMM) - !JUANIOZ - CALL SECOND_MNH2(T0) - IF ( ISP /= IK_RANK ) THEN - ! Other processors - CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE) - IF (IXO /= 0) THEN ! intersection is not empty - NB_REQ = NB_REQ + 1 - ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE)) - ZSLIDE => PFIELD(:,:,JKK) - TX2DP=>ZSLIDE(IXO:IXE,IYO:IYE) - T_TX2DP(NB_REQ)%X=ZSLIDE(IXO:IXE,IYO:IYE) - CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK & - & ,TZFD_IOZ%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK,TZFD_IOZ%COMM,IERR) - END IF - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_SEND=TIMEZ%T_WRIT3D_SEND + T1 - T0 - !JUANIOZ - END IF - END IF - END DO - ! - ! write the data - ! - DO JKK=JK,JK_MAX - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IK_FILE = io_file(JKK,TZFD%nb_procio) - write(YK_FILE ,'(".Z",i3.3)') IK_FILE+1 - YFILE_IOZ = TRIM(YFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - ELSE - TZFD_IOZ => TZFD - ENDIF - IK_RANK = TZFD_IOZ%OWNER - !IK_RANK = 1 + io_rank(IK_FILE,ISNPROC,TZFD%nb_procio) - ! - IF (ISP == IK_RANK ) THEN - !JUANIOZ - CALL SECOND_MNH2(T0) - ! I/O proc case - IF ( SIZE(ZSLIDE_ll) .EQ. 0 ) THEN - DEALLOCATE(ZSLIDE_ll) - CALL ALLOCBUFFER_ll(ZSLIDE_ll,ZSLIDE,YDIR,GALLOC_ll) - END IF - DO JI=1,ISNPROC - CALL GET_DOMWRITE_ll(JI,'global',IXO,IXE,IYO,IYE) - IF (IXO /= 0) THEN ! intersection is not empty - TX2DP=>ZSLIDE_ll(IXO:IXE,IYO:IYE) - IF (ISP == JI) THEN - CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE) - ZSLIDE => PFIELD(:,:,JKK) - TX2DP = ZSLIDE(IXO:IXE,IYO:IYE) - ELSE - CALL MPI_RECV(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,99+IK_RANK,TZFD_IOZ%COMM,STATUS,IERR) - END IF - END IF - END DO - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 - !JUANIOZ - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) - CALL SECOND_MNH2(T2) - TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 - END IF -!!$ CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD_IOZ%OWNER-1,TZFD_IOZ%COMM,IERR) - END DO - !CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD_IOZ%OWNER-1,TZFD_IOZ%COMM,IERR) - !CALL MPI_BARRIER(TZFD_IOZ%COMM,IERR) - ! - CALL SECOND_MNH2(T0) - IF (NB_REQ .GT.0 ) THEN - !ALLOCATE(STATUSES(MPI_STATUS_SIZE,NB_REQ)) - CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - !CALL MPI_WAITALL(NB_REQ,REQ_TAB,STATUSES,IERR) - !DEALLOCATE(STATUSES) - DO JI=1,NB_REQ ; DEALLOCATE(T_TX2DP(JI)%X) ; ENDDO - END IF - DEALLOCATE(T_TX2DP) - DEALLOCATE(REQ_TAB) - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT3D_WAIT=TIMEZ%T_WRIT3D_WAIT + T1 - T0 - END DO Z_SLIDE - !JUAN BG Z SLIDE -! end of MNH_GA -#endif + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) END IF ! multiprocessor execution ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3',YMSG) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4',YMSG) END IF IF (GALLOC) DEALLOCATE(ZFIELDP) - IF (GALLOC_ll) DEALLOCATE(ZSLIDE_ll) - !IF (Associated(ZSLIDE_ll)) DEALLOCATE(ZSLIDE_ll) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) - CALL SECOND_MNH2(T22) - TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3 + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4 - SUBROUTINE FMWRITX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L1D,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - INTEGER :: IHEXTOT - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX4_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article 4 ' , HRECFM - !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - ! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - END IF - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(ZFIELDP(0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:),ZFIELDP(:,1,:,:),TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - END IF - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX4_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITX4_ll - SUBROUTINE IO_WRITE_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -2028,7 +1314,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - REAL,DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field + REAL,DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2036,7 +1322,7 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! @@ -2044,9 +1330,10 @@ CONTAINS ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_X4 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_X5 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP) + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -2064,7 +1351,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - REAL,DIMENSION(:,:,:,:),TARGET, INTENT(IN) :: PFIELD ! array containing the data field + REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2077,7 +1364,7 @@ CONTAINS INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP + REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG @@ -2087,9 +1374,9 @@ CONTAINS YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,4,'IO_WRITE_FIELD_BYFIELD_X4') + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,5,'IO_WRITE_FIELD_BYFIELD_X5') ! IRESP = 0 GALLOC = .FALSE. @@ -2102,10 +1389,10 @@ CONTAINS IF (GSMONOPROC) THEN ! sequential execution ! IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:) + ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:,:) ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:) + ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:) IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) ELSE @@ -2119,7 +1406,7 @@ CONTAINS CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) #endif IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 RETURN END IF @@ -2127,7 +1414,7 @@ CONTAINS IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE - ALLOCATE(ZFIELDP(0,0,0,0)) + ALLOCATE(ZFIELDP(0,0,0,0,0)) GALLOC = .TRUE. END IF ! @@ -2135,7 +1422,8 @@ CONTAINS CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) ELSEIF (YDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:),ZFIELDP(:,1,:,:),TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:,:),ZFIELDP(:,1,:,:,:),& + & TZFD%OWNER,TZFD%COMM) ELSE CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) END IF @@ -2150,122 +1438,20 @@ CONTAINS END IF ! multiprocessor execution ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4',YMSG) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5',YMSG) END IF IF (GALLOC) DEALLOCATE(ZFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4 + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5 - SUBROUTINE FMWRITX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L1D,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - INTEGER :: IHEXTOT - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX5_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - ! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - END IF - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:,:),ZFIELDP(:,1,:,:,:),& - & TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - END IF - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX5_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITX5_ll - SUBROUTINE IO_WRITE_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -2273,7 +1459,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - REAL,DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field + REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2281,7 +1467,7 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! @@ -2289,9 +1475,9 @@ CONTAINS ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_X5 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_X6 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP) USE MODD_IO_ll USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -2307,10 +1493,10 @@ CONTAINS ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! @@ -2322,7 +1508,7 @@ CONTAINS INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP + REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP LOGICAL :: GALLOC INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG @@ -2332,9 +1518,9 @@ CONTAINS YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,5,'IO_WRITE_FIELD_BYFIELD_X5') + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,6,'IO_WRITE_FIELD_BYFIELD_X6') ! IRESP = 0 GALLOC = .FALSE. @@ -2345,18 +1531,8 @@ CONTAINS TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - ! IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:,:,:) - ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN - ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) - ELSE - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) - END IF + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) ELSE #ifndef MNH_INT8 CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) @@ -2364,7 +1540,7 @@ CONTAINS CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) #endif IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 RETURN END IF @@ -2372,19 +1548,14 @@ CONTAINS IF (ISP == TZFD%OWNER) THEN CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0)) + ALLOCATE(ZFIELDP(0,0,0,0,0,0)) GALLOC = .TRUE. END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) ELSEIF (YDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:,:,:),ZFIELDP(:,1,:,:,:),& - & TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - END IF + CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) END IF ! IF (ISP == TZFD%OWNER) THEN @@ -2396,103 +1567,129 @@ CONTAINS END IF ! multiprocessor execution ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5',YMSG) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6',YMSG) END IF IF (GALLOC) DEALLOCATE(ZFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5 + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6 + + + SUBROUTINE IO_WRITE_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP) + ! + USE MODD_IO_ll, ONLY : TFILEDATA + ! + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + INTEGER, INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_N0 - SUBROUTINE FMWRITX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP) + USE MODD_IO_ll USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll + USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME + !* 0. DECLARATIONS + ! ------------ ! ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + INTEGER, INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC + INTEGER :: IERR + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + !JUANZIO + INTEGER :: IK_FILE,IK_RANK + CHARACTER(len=5) :: YK_FILE + CHARACTER(len=128) :: YFILE_IOZ + TYPE(FD_ll), POINTER :: TZFD_IOZ + TYPE(TFILEDATA),POINTER :: TZFILE + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITX6_ll','writing '//TRIM(HRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! - !* 1.1 THE NAME OF LFIFM + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,0,'IO_WRITE_FIELD_BYFIELD_N0') ! IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article 6 ' , HRECFM !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) + TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PFIELD),PFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,PFIELD,TZFMH,IRESP) - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - ! + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + ELSE IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,ZFIELDP,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) END IF ! multiprocessor execution + IF (TZFD%nb_procio.gt.1) THEN + ! write the data in all Z files + DO IK_FILE=1,TZFD%nb_procio + write(YK_FILE ,'(".Z",i3.3)') IK_FILE + YFILE_IOZ = TRIM(TPFILE%CNAME)//YK_FILE//".lfi" + TZFD_IOZ => GETFD(YFILE_IOZ) + IK_RANK = TZFD_IOZ%OWNER + IF ( ISP == IK_RANK ) THEN + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,KFIELD,IRESP) + IF (LIOCDF4) THEN + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//& + ' not found in list') + END IF + CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,KFIELD,IRESP) + END IF + END IF + END DO + ENDIF ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITX6_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0',YMSG) END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITX6_ll + IF (PRESENT(KRESP)) KRESP = IRESP + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0 - SUBROUTINE IO_WRITE_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP) + + SUBROUTINE IO_WRITE_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -2500,7 +1697,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field + INTEGER,DIMENSION(:), INTENT(IN) :: KFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2508,36 +1705,32 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP) + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_X6 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_N1 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP) - USE MODD_IO_ll - USE MODD_PARAMETERS_ll,ONLY : JPHEXT + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP) + ! + USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,TFILEDATA USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL USE MODE_ALLOCBUFFER_ll USE MODE_GATHER_ll - !JUANZ - USE MODE_IO_ll, ONLY : io_file,io_rank - USE MODD_TIMEZ, ONLY : TIMEZ - USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 - !JUANZ - USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE ! + IMPLICIT NONE ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + INTEGER,DIMENSION(:),TARGET, INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! @@ -2549,9 +1742,8 @@ CONTAINS INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP + INTEGER,DIMENSION(:),POINTER :: IFIELDP LOGICAL :: GALLOC - INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP ! @@ -2559,161 +1751,228 @@ CONTAINS YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,6,'IO_WRITE_FIELD_BYFIELD_X6') + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,1,'IO_WRITE_FIELD_BYFIELD_N1') + ! + !* 1.1 THE NAME OF LFIFM ! IRESP = 0 - GALLOC = .FALSE. + GALLOC = .FALSE. YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' -! !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP) - ELSE + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) #endif IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 RETURN END IF IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC) + CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0,0)) + ALLOCATE(IFIELDP(0)) GALLOC = .TRUE. END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (YDIR == 'XY') THEN - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) END IF ! IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution + END IF ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6',YMSG) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1',YMSG) END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) + IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6 + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + ! + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1 - SUBROUTINE FMWRITN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - !* 0. DECLARATIONS - ! ------------ + + SUBROUTINE IO_WRITE_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP) ! + USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER, INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + INTEGER,DIMENSION(:,:), INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_N2 - !JUANZIO - INTEGER :: IK_FILE,IK_rank - CHARACTER(len=5) :: YK_FILE - CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP) + USE MODD_IO_ll + USE MODD_PARAMETERS_ll,ONLY : JPHEXT + USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL + USE MODE_ALLOCBUFFER_ll + USE MODE_GATHER_ll + USE MODD_TIMEZ, ONLY : TIMEZ + USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITN0_ll','writing '//TRIM(HRECFM)) + IMPLICIT NONE ! - !JUANZIO - !---------------------------------------------------------------- + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + CHARACTER(LEN=28) :: YFILEM ! FM-file name + CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write + CHARACTER(LEN=2) :: YDIR ! field form + CHARACTER(LEN=JPFINL) :: YFNLFI + INTEGER :: IERR + INTEGER :: ISIZEMAX + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + INTEGER,DIMENSION(:,:),POINTER :: IFIELDP + LOGICAL :: GALLOC + ! + !JUANZ + REAL*8,DIMENSION(2) :: T0,T1,T2 + REAL*8,DIMENSION(2) :: T11,T22 + !JUANZ + INTEGER :: IHEXTOT + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP + ! + YFILEM = TPFILE%CNAME + YRECFM = TPFIELD%CMNHNAME + YDIR = TPFIELD%CDIR + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,2,'IO_WRITE_FIELD_BYFIELD_N2') ! !* 1.1 THE NAME OF LFIFM ! + CALL SECOND_MNH2(T11) IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article N0 ' , HRECFM + GALLOC = .FALSE. + YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' !------------------------------------------------------------------ + IHEXTOT = 2*JPHEXT+1 TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,1,KFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,KFIELD,TZFMH,IRESP) - ELSE + IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN + IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN + ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN + IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + ELSE + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + END IF + ELSE ! multiprocessor execution +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) +#endif + IF (ISIZEMAX==0) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + + CALL SECOND_MNH2(T0) IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,1,KFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,KFIELD,TZFMH,IRESP) + ! I/O processor case + CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) + ELSE + ALLOCATE(IFIELDP(0,0)) + GALLOC = .TRUE. + END IF + ! + IF (YDIR == 'XX' .OR. YDIR =='YY') THEN + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + ELSEIF (YDIR == 'XY') THEN + IF (LPACK .AND. L2D) THEN + CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1),IFIELDP(:,1),TZFD%OWNER,TZFD%COMM) + ELSE + CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + END IF END IF + CALL SECOND_MNH2(T1) + TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0 + ! + IF (ISP == TZFD%OWNER) THEN + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + END IF + CALL SECOND_MNH2(T2) + TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - - END IF ! multiprocessor execution - IF (TZFD%nb_procio.gt.1) THEN - ! write the data in all Z files - DO IK_FILE=1,TZFD%nb_procio - write(YK_FILE ,'(".Z",i3.3)') IK_FILE - YFILE_IOZ = TRIM(HFILEM)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - IK_RANK = TZFD_IOZ%OWNER - IF ( ISP == IK_RANK ) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD_IOZ%FLU,HRECFM,.FALSE.,1,KFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD_IOZ%CDF,HRECFM,HDIR,KFIELD,TZFMH,IRESP) - END IF - END DO - ENDIF - ELSE + END IF + ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITN0_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2',YMSG) END IF - KRESP = IRESP - END SUBROUTINE FMWRITN0_ll + IF (GALLOC) DEALLOCATE(IFIELDP) + IF (PRESENT(KRESP)) KRESP = IRESP + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + CALL SECOND_MNH2(T22) + TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 + ! + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2 - SUBROUTINE IO_WRITE_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP) + + SUBROUTINE IO_WRITE_FIELD_BYNAME_N3(TPFILE,HNAME,KFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -2721,7 +1980,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - INTEGER, INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,DIMENSION(:,:,:), INTENT(IN) :: KFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2729,7 +1988,7 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! @@ -2737,179 +1996,241 @@ CONTAINS ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_N0 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_N3 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3(TPFILE,TPFIELD,KFIELD,KRESP) USE MODD_IO_ll - USE MODD_FM + USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME - !* 0. DECLARATIONS - ! ------------ + USE MODE_ALLOCBUFFER_ll + USE MODE_GATHER_ll + USE MODD_TIMEZ, ONLY : TIMEZ + USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 ! + IMPLICIT NONE ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - INTEGER, INTENT(IN) :: KFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - !JUANZIO - INTEGER :: IK_FILE,IK_RANK - CHARACTER(len=5) :: YK_FILE - CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ - TYPE(TFILEDATA),POINTER :: TZFILE + CHARACTER(LEN=28) :: YFILEM ! FM-file name + CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write + CHARACTER(LEN=2) :: YDIR ! field form + CHARACTER(LEN=JPFINL) :: YFNLFI + INTEGER :: IERR + INTEGER :: ISIZEMAX + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + INTEGER,DIMENSION(:,:,:),POINTER :: IFIELDP + LOGICAL :: GALLOC + ! + !JUANZ + REAL*8,DIMENSION(2) :: T11,T22 + !JUANZ + INTEGER :: IHEXTOT CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) + YFILEM = TPFILE%CNAME + YRECFM = TPFIELD%CMNHNAME + YDIR = TPFIELD%CDIR ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,0,'IO_WRITE_FIELD_BYFIELD_N0') + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + ! + !* 1.1 THE NAME OF LFIFM ! + CALL SECOND_MNH2(T11) IRESP = 0 + GALLOC = .FALSE. + YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' !------------------------------------------------------------------ - TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') + IHEXTOT = 2*JPHEXT+1 + TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN + IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN + IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN + ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN + IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + ELSE IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) END IF + ELSE ! multiprocessor execution +#ifndef MNH_INT8 + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) +#else + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) +#endif + IF (ISIZEMAX==0) THEN + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + IF (PRESENT(KRESP)) KRESP=0 + RETURN + END IF + + IF (ISP == TZFD%OWNER) THEN + ! I/O processor case + CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) + ELSE + ALLOCATE(IFIELDP(0,0,0)) + GALLOC = .TRUE. + END IF + ! + IF (YDIR == 'XX' .OR. YDIR =='YY') THEN + CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + ELSEIF (YDIR == 'XY') THEN + IF (LPACK .AND. L2D) THEN + CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1,:),IFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) + ELSE + CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + END IF + END IF + ! + IF (ISP == TZFD%OWNER) THEN + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution - IF (TZFD%nb_procio.gt.1) THEN - ! write the data in all Z files - DO IK_FILE=1,TZFD%nb_procio - write(YK_FILE ,'(".Z",i3.3)') IK_FILE - YFILE_IOZ = TRIM(TPFILE%CNAME)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - IK_RANK = TZFD_IOZ%OWNER - IF ( ISP == IK_RANK ) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,KFIELD,IRESP) - IF (LIOCDF4) THEN - CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP) - IF (IRESP/=0) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//& - ' not found in list') - END IF - CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,KFIELD,IRESP) - END IF - END IF - END DO - ENDIF - ELSE + END IF + ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0',YMSG) + YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3',YMSG) END IF + IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0 + IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) + CALL SECOND_MNH2(T22) + TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 + ! + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3 + + + SUBROUTINE IO_WRITE_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP) + ! + USE MODD_IO_ll, ONLY : TFILEDATA + ! + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_L0 - SUBROUTINE FMWRITN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM + SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP) + USE MODD_IO_ll USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll + USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME !* 0. DECLARATIONS ! ------------ ! ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER,DIMENSION(:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI INTEGER :: IERR TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - INTEGER,DIMENSION(:),POINTER :: IFIELDP - LOGICAL :: GALLOC - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITN1_ll','writing '//TRIM(HRECFM)) + !JUANZIO + INTEGER :: IK_FILE,IK_RANK + CHARACTER(len=5) :: YK_FILE + CHARACTER(len=128) :: YFILE_IOZ + TYPE(FD_ll), POINTER :: TZFD_IOZ + TYPE(TFILEDATA),POINTER :: TZFILE + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP ! - !---------------------------------------------------------------- + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! - !* 1.1 THE NAME OF LFIFM + CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,0,'IO_WRITE_FIELD_BYFIELD_L0') ! IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article N1 ' , HRECFM !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) + TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(KFIELD),KFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,KFIELD,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) ELSE IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(IFIELDP(0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELDP,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE + END IF ! multiprocessor execution + IF (TZFD%nb_procio.gt.1) THEN + ! write the data in all Z files + DO IK_FILE=1,TZFD%nb_procio + write(YK_FILE ,'(".Z",i3.3)') IK_FILE + YFILE_IOZ = TRIM(TPFILE%CNAME)//YK_FILE//".lfi" + TZFD_IOZ => GETFD(YFILE_IOZ) + IK_RANK = TZFD_IOZ%OWNER + IF ( ISP == IK_RANK ) THEN + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,OFIELD,IRESP) + IF (LIOCDF4) THEN + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//& + ' not found in list') + END IF + CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,OFIELD,IRESP) + END IF + END IF + END DO + ENDIF + ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITN1_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0',YMSG) END IF - IF (GALLOC) DEALLOCATE(IFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITN1_ll + IF (PRESENT(KRESP)) KRESP = IRESP + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0 - SUBROUTINE IO_WRITE_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -2917,7 +2238,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - INTEGER,DIMENSION(:), INTENT(IN) :: KFIELD ! array containing the data field + LOGICAL,DIMENSION(:), INTENT(IN) :: OFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2925,18 +2246,18 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP) ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_N1 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_L1 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP) ! USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,TFILEDATA USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL @@ -2949,7 +2270,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - INTEGER,DIMENSION(:),TARGET, INTENT(IN) :: KFIELD ! array containing the data field + LOGICAL,DIMENSION(:),TARGET, INTENT(IN) :: OFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -2962,7 +2283,7 @@ CONTAINS INTEGER :: ISIZEMAX TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - INTEGER,DIMENSION(:),POINTER :: IFIELDP + LOGICAL,DIMENSION(:),POINTER :: GFIELDP LOGICAL :: GALLOC CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP @@ -2971,9 +2292,9 @@ CONTAINS YRECFM = TPFIELD%CMNHNAME YDIR = TPFIELD%CDIR ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,1,'IO_WRITE_FIELD_BYFIELD_N1') + CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,1,'IO_WRITE_FIELD_BYFIELD_L1') ! !* 1.1 THE NAME OF LFIFM ! @@ -2984,320 +2305,251 @@ CONTAINS TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) ELSE ! multiprocessor execution #ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) #else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) #endif IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') + CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 RETURN END IF IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) + CALL ALLOCBUFFER_ll(GFIELDP,OFIELD,YDIR,GALLOC) ELSE - ALLOCATE(IFIELDP(0)) + ALLOCATE(GFIELDP(0)) GALLOC = .TRUE. END IF ! IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) + CALL GATHER_XXFIELD(YDIR,OFIELD,GFIELDP,TZFD%OWNER,TZFD%COMM) END IF ! IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,GFIELDP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,GFIELDP,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) END IF ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1',YMSG) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1',YMSG) END IF - IF (GALLOC) DEALLOCATE(IFIELDP) + IF (GALLOC) DEALLOCATE(GFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) ! - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1 + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1 - - SUBROUTINE FMWRITN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L1D,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll + + SUBROUTINE IO_WRITE_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP) ! + USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + CHARACTER(LEN=*), INTENT(IN) :: HFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - INTEGER,DIMENSION(:,:),POINTER :: IFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - INTEGER :: IHEXTOT + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITN2_ll','writing '//TRIM(HRECFM)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! - !* 1.1 THE NAME OF LFIFM + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_C0 + + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP) + USE MODD_IO_ll + USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL + !* 0. DECLARATIONS + ! ------------ + ! + ! + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD + CHARACTER(LEN=*), INTENT(IN) :: HFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + INTEGER :: IERR + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) + ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,0,'IO_WRITE_FIELD_BYFIELD_C0') ! IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article N2 ' , HRECFM ! - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) + IF (LEN(HFIELD)==0 .AND. LLFIOUT) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',& + 'zero-size string not allowed if LFI output for '//TRIM(TPFIELD%CMNHNAME)) + END IF + !------------------------------------------------------------------ + TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - ! IF (LPACK .AND. L1D .AND. HDIR=='XY') THEN - IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELDP,TZFMH,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. HDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELDP,TZFMH,IRESP) - ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(KFIELD),KFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,KFIELD,TZFMH,IRESP) - END IF - ELSE - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,HDIR,GALLOC) - ELSE - ALLOCATE(IFIELDP(0,0)) - GALLOC = .TRUE. - END IF - ! - IF (HDIR == 'XX' .OR. HDIR =='YY') THEN - CALL GATHER_XXFIELD(HDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (HDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1),IFIELDP(:,1),TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - END IF - ! + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) + ELSE IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELDP),IFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELDP,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) END IF - - ELSE + ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITN2_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH,IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',YMSG) END IF - IF (GALLOC) DEALLOCATE(IFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITN2_ll + IF (PRESENT(KRESP)) KRESP = IRESP + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0 - SUBROUTINE IO_WRITE_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYNAME_C1(TPFILE,HNAME,HFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - INTEGER,DIMENSION(:,:), INTENT(IN) :: KFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD ! array containing the data field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP) ! IF (PRESENT(KRESP)) KRESP = IRESP ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_N2 + END SUBROUTINE IO_WRITE_FIELD_BYNAME_C1 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1(TPFILE,TPFIELD,HFIELD,KRESP) USE MODD_IO_ll - USE MODD_PARAMETERS_ll,ONLY : JPHEXT USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - USE MODD_TIMEZ, ONLY : TIMEZ - USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 + !* 0. DECLARATIONS + ! ------------ ! - IMPLICIT NONE ! !* 0.1 Declarations of arguments ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KFIELD ! array containing the data field + CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=28) :: YFILEM ! FM-file name - CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write - CHARACTER(LEN=2) :: YDIR ! field form - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - INTEGER :: ISIZEMAX - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - INTEGER,DIMENSION(:,:),POINTER :: IFIELDP - LOGICAL :: GALLOC - ! - !JUANZ - REAL*8,DIMENSION(2) :: T0,T1,T2 - REAL*8,DIMENSION(2) :: T11,T22 - !JUANZ - INTEGER :: IHEXTOT - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - YFILEM = TPFILE%CNAME - YRECFM = TPFIELD%CMNHNAME - YDIR = TPFIELD%CDIR - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + INTEGER :: IERR + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + INTEGER :: J,JJ + INTEGER :: ILE, IP + INTEGER,DIMENSION(:),ALLOCATABLE :: IFIELD + INTEGER :: ILENG + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,2,'IO_WRITE_FIELD_BYFIELD_N2') + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! - !* 1.1 THE NAME OF LFIFM + CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,1,'IO_WRITE_FIELD_BYFIELD_C1') ! - CALL SECOND_MNH2(T11) IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' + ! + IF(LLFIOUT) THEN + ILE=LEN(HFIELD) + IP=SIZE(HFIELD) + ILENG=ILE*IP + ! + IF (ILENG==0) THEN + IP=1 + ILE=1 + ILENG=1 + ALLOCATE(IFIELD(1)) + IFIELD(1)=IACHAR(' ') + ELSE + ALLOCATE(IFIELD(ILENG)) + DO JJ=1,IP + DO J=1,ILE + IFIELD(ILE*(JJ-1)+J)=IACHAR(HFIELD(JJ)(J:J)) + END DO + END DO + END IF + END IF !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) + TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) - ELSE - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) - END IF - ELSE ! multiprocessor execution -#ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) -#endif - IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') - IF (PRESENT(KRESP)) KRESP=0 - RETURN - END IF - - CALL SECOND_MNH2(T0) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) + ELSE IF (ISP == TZFD%OWNER) THEN - ! I/O processor case - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) - ELSE - ALLOCATE(IFIELDP(0,0)) - GALLOC = .TRUE. - END IF - ! - IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (YDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1),IFIELDP(:,1),TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - END IF - CALL SECOND_MNH2(T1) - TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0 - ! - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) END IF - CALL SECOND_MNH2(T2) - TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) END IF - ELSE + ELSE IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2','file '//TRIM(TPFILE%CNAME)//' not found') + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2',YMSG) + YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1',YMSG) END IF - IF (GALLOC) DEALLOCATE(IFIELDP) + IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) - CALL SECOND_MNH2(T22) - TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11 - ! - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2 + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1 - SUBROUTINE IO_WRITE_FIELD_BYNAME_N3(TPFILE,HNAME,KFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYNAME_T0(TPFILE,HNAME,TFIELD,KRESP) ! USE MODD_IO_ll, ONLY : TFILEDATA ! @@ -3305,7 +2557,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - INTEGER,DIMENSION(:,:,:), INTENT(IN) :: KFIELD ! array containing the data field + TYPE (DATE_TIME), INTENT(IN) :: TFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -3313,247 +2565,21 @@ CONTAINS INTEGER :: ID ! Index of the field INTEGER :: IRESP ! return_code ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) ! CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_N3 - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3(TPFILE,TPFIELD,KFIELD,KRESP) - USE MODD_IO_ll - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - USE MODD_TIMEZ, ONLY : TIMEZ - USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 - ! - IMPLICIT NONE - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=28) :: YFILEM ! FM-file name - CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write - CHARACTER(LEN=2) :: YDIR ! field form - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - INTEGER :: ISIZEMAX - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - INTEGER,DIMENSION(:,:,:),POINTER :: IFIELDP - LOGICAL :: GALLOC - ! - !JUANZ - REAL*8,DIMENSION(2) :: T11,T22 - !JUANZ - INTEGER :: IHEXTOT - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - YFILEM = TPFILE%CNAME - YRECFM = TPFIELD%CMNHNAME - YDIR = TPFIELD%CDIR - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) - ! - !* 1.1 THE NAME OF LFIFM + IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),TFIELD,IRESP) ! - CALL SECOND_MNH2(T11) - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' - !------------------------------------------------------------------ - IHEXTOT = 2*JPHEXT+1 - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) - ! ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN - ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN - IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) - ELSE - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP) - END IF - ELSE ! multiprocessor execution -#ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) -#endif - IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') - IF (PRESENT(KRESP)) KRESP=0 - RETURN - END IF - - IF (ISP == TZFD%OWNER) THEN - ! I/O processor case - CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,YDIR,GALLOC) - ELSE - ALLOCATE(IFIELDP(0,0,0)) - GALLOC = .TRUE. - END IF - ! - IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - ELSEIF (YDIR == 'XY') THEN - IF (LPACK .AND. L2D) THEN - CALL GATHER_XXFIELD('XX',KFIELD(:,JPHEXT+1,:),IFIELDP(:,1,:),TZFD%OWNER,TZFD%COMM) - ELSE - CALL GATHER_XYFIELD(KFIELD,IFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - END IF - ! - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3',YMSG) - END IF - IF (GALLOC) DEALLOCATE(IFIELDP) IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) - CALL SECOND_MNH2(T22) - TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11 - ! - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3 - - - SUBROUTINE FMWRITL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - - ! - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - LOGICAL, INTENT(IN) ::OFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: IFIELD - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITL0_ll','writing '//TRIM(HRECFM)) ! - !---------------------------------------------------------------- - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article L0 ' , HRECFM - IF (OFIELD) THEN - IFIELD=1 - ELSE - IFIELD=0 - END IF - !---------------------------------------------------------------- - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,1,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,1,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELD,TZFMH,IRESP) - END IF - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITL0_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) - END IF - KRESP = IRESP - END SUBROUTINE FMWRITL0_ll + END SUBROUTINE IO_WRITE_FIELD_BYNAME_T0 - SUBROUTINE IO_WRITE_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_L0 - SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP) + SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TFIELD,KRESP) USE MODD_IO_ll - USE MODD_FM + USE MODD_TYPE_DATE USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME !* 0. DECLARATIONS ! ------------ ! @@ -3562,7 +2588,7 @@ CONTAINS ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field + TYPE (DATE_TIME), INTENT(IN) :: TFIELD ! array containing the data field INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables @@ -3570,1500 +2596,225 @@ CONTAINS INTEGER :: IERR TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - !JUANZIO - INTEGER :: IK_FILE,IK_RANK - CHARACTER(len=5) :: YK_FILE - CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ - TYPE(TFILEDATA),POINTER :: TZFILE - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,0,'IO_WRITE_FIELD_BYFIELD_L0') + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEDATE,0,'IO_WRITE_FIELD_BYFIELD_T0') ! IRESP = 0 + ! !------------------------------------------------------------------ TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF ! multiprocessor execution - IF (TZFD%nb_procio.gt.1) THEN - ! write the data in all Z files - DO IK_FILE=1,TZFD%nb_procio - write(YK_FILE ,'(".Z",i3.3)') IK_FILE - YFILE_IOZ = TRIM(TPFILE%CNAME)//YK_FILE//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - IK_RANK = TZFD_IOZ%OWNER - IF ( ISP == IK_RANK ) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,OFIELD,IRESP) - IF (LIOCDF4) THEN - CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP) - IF (IRESP/=0) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//& - ' not found in list') - END IF - CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,OFIELD,IRESP) - END IF - END IF - END DO - ENDIF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0',YMSG) - END IF - IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0 - - - - SUBROUTINE FMWRITL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - - !* 0. DECLARATIONS - ! ------------ - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - LOGICAL,DIMENSION(:),INTENT(IN) ::OFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITL1_ll','writing '//TRIM(HRECFM)) - ! - !---------------------------------------------------------------- - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article L1 ' , HRECFM - WHERE (OFIELD) - IFIELD=1 - ELSEWHERE - IFIELD=0 - END WHERE - !---------------------------------------------------------------- - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELD),IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,SIZE(IFIELD),IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,IFIELD,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITL1_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) - END IF - KRESP = IRESP - END SUBROUTINE FMWRITL1_ll - - SUBROUTINE IO_WRITE_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - LOGICAL,DIMENSION(:), INTENT(IN) :: OFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_L1 - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT,TFILEDATA - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_ALLOCBUFFER_ll - USE MODE_GATHER_ll - ! - IMPLICIT NONE - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - LOGICAL,DIMENSION(:),TARGET, INTENT(IN) :: OFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=28) :: YFILEM ! FM-file name - CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write - CHARACTER(LEN=2) :: YDIR ! field form - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - INTEGER :: ISIZEMAX - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - LOGICAL,DIMENSION(:),POINTER :: GFIELDP - LOGICAL :: GALLOC - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - YFILEM = TPFILE%CNAME - YRECFM = TPFIELD%CMNHNAME - YDIR = TPFIELD%CDIR - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) - ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,1,'IO_WRITE_FIELD_BYFIELD_L1') - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP) - ELSE ! multiprocessor execution -#ifndef MNH_INT8 - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TZFD%COMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TZFD%COMM,IRESP) -#endif - IF (ISIZEMAX==0) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') - IF (PRESENT(KRESP)) KRESP=0 - RETURN - END IF - - IF (ISP == TZFD%OWNER) THEN - CALL ALLOCBUFFER_ll(GFIELDP,OFIELD,YDIR,GALLOC) - ELSE - ALLOCATE(GFIELDP(0)) - GALLOC = .TRUE. - END IF - ! - IF (YDIR == 'XX' .OR. YDIR =='YY') THEN - CALL GATHER_XXFIELD(YDIR,OFIELD,GFIELDP,TZFD%OWNER,TZFD%COMM) - END IF - ! - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,GFIELDP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,GFIELDP,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1',YMSG) - END IF - IF (GALLOC) DEALLOCATE(GFIELDP) - IF (PRESENT(KRESP)) KRESP = IRESP - IF (ASSOCIATED(TZFD)) CALL MPI_BARRIER(TZFD%COMM,IERR) - ! - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1 - - - SUBROUTINE FMWRITC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - ! - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - CHARACTER(LEN=*), INTENT(IN) ::HFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: JLOOP - INTEGER,DIMENSION(:),ALLOCATABLE :: IFIELD - INTEGER :: ILENG - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITC0_ll','writing '//TRIM(HRECFM)) - ! - !---------------------------------------------------------------- - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article C0 ' , HRECFM - ILENG=LEN(HFIELD) - ! - IF (ILENG==0) THEN - ILENG=1 - ALLOCATE(IFIELD(1)) - IFIELD(1)=IACHAR(' ') - ELSE - ALLOCATE(IFIELD(ILENG)) - DO JLOOP=1,ILENG - IFIELD(JLOOP)=IACHAR(HFIELD(JLOOP:JLOOP)) - END DO - END IF - !---------------------------------------------------------------- - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,HFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,HFIELD,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITC0_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) - END IF - IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD) - KRESP = IRESP - END SUBROUTINE FMWRITC0_ll - - SUBROUTINE IO_WRITE_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - CHARACTER(LEN=*), INTENT(IN) :: HFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_C0 - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP) - USE MODD_IO_ll - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - CHARACTER(LEN=*), INTENT(IN) :: HFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) - ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,0,'IO_WRITE_FIELD_BYFIELD_C0') - ! - IRESP = 0 - ! - IF (LEN(HFIELD)==0 .AND. LLFIOUT) THEN - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',& - 'zero-size string not allowed if LFI output for '//TRIM(TPFIELD%CMNHNAME)) - END IF - !------------------------------------------------------------------ - TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',YMSG) - END IF - IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0 - - SUBROUTINE FMWRITC1_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - ! - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) ::HFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: J,JJ - INTEGER :: ILE, IP - INTEGER,DIMENSION(:),ALLOCATABLE :: IFIELD - INTEGER :: ILENG - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITC1_ll','writing '//TRIM(HRECFM)) - ! - !---------------------------------------------------------------- - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article C1 ' , HRECFM - ILE=LEN(HFIELD) - IP=SIZE(HFIELD) - ILENG=ILE*IP - ! - IF (ILENG==0) THEN - IP=1 - ILE=1 - ILENG=1 - ALLOCATE(IFIELD(1)) - IFIELD(1)=IACHAR(' ') - ELSE - ALLOCATE(IFIELD(ILENG)) - DO JJ=1,IP - DO J=1,ILE - IFIELD(ILE*(JJ-1)+J)=IACHAR(HFIELD(JJ)(J:J)) - END DO - END DO - END IF - !---------------------------------------------------------------- - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,HFIELD,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.FALSE.,ILENG,IFIELD,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,HDIR,HFIELD,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITC1_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) - END IF - IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD) - KRESP = IRESP - END SUBROUTINE FMWRITC1_ll - - SUBROUTINE IO_WRITE_FIELD_BYNAME_C1(TPFILE,HNAME,HFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_C1 - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1(TPFILE,TPFIELD,HFIELD,KRESP) - USE MODD_IO_ll - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - INTEGER :: J,JJ - INTEGER :: ILE, IP - INTEGER,DIMENSION(:),ALLOCATABLE :: IFIELD - INTEGER :: ILENG - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) - ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,1,'IO_WRITE_FIELD_BYFIELD_C1') - ! - IRESP = 0 - ! - IF(LLFIOUT) THEN - ILE=LEN(HFIELD) - IP=SIZE(HFIELD) - ILENG=ILE*IP - ! - IF (ILENG==0) THEN - IP=1 - ILE=1 - ILENG=1 - ALLOCATE(IFIELD(1)) - IFIELD(1)=IACHAR(' ') - ELSE - ALLOCATE(IFIELD(ILENG)) - DO JJ=1,IP - DO J=1,ILE - IFIELD(ILE*(JJ-1)+J)=IACHAR(HFIELD(JJ)(J:J)) - END DO - END DO - END IF - END IF - !------------------------------------------------------------------ - TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1',YMSG) - END IF - IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD) - IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1 - - SUBROUTINE FMWRITT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_TYPE_DATE - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - TYPE (DATE_TIME), INTENT(IN) ::TFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - !-------------------------------------------------------------------- - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - TYPE(FMHEADER) :: TZFMH - INTEGER, DIMENSION(3) :: ITDATE ! date array - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITT0_ll','writing '//TRIM(HRECFM)) - ! - !------------------------------------------------------------------------------- - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article T0 ' , HRECFM - ITDATE(1)=TFIELD%TDATE%YEAR - ITDATE(2)=TFIELD%TDATE%MONTH - ITDATE(3)=TFIELD%TDATE%DAY - !------------------------------------------------------------------------------- - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMMENT='YYYYMMDD' - TZFMH%COMLEN=LEN_TRIM(TZFMH%COMMENT) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,TRIM(HRECFM)//'%TDATE',.FALSE.,3,ITDATE& - & ,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,TRIM(HRECFM)//'%TDATE',HDIR,ITDATE,TZFMH,IRESP) - TZFMH%COMMENT='SECONDS' - TZFMH%COMLEN=LEN_TRIM(TZFMH%COMMENT) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,TRIM(HRECFM)//'%TIME',.TRUE.,1,TFIELD%TIME& - & ,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,TRIM(HRECFM)//'%TIME',HDIR,TFIELD%TIME,TZFMH,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID=KGRID - TZFMH%COMMENT='YYYYMMDD' - TZFMH%COMLEN=LEN_TRIM(TZFMH%COMMENT) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,TRIM(HRECFM)//'%TDATE',.FALSE.,3,ITDATE& - & ,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,TRIM(HRECFM)//'%TDATE',HDIR,ITDATE,TZFMH,IRESP) - TZFMH%COMMENT='SECONDS' - TZFMH%COMLEN=LEN_TRIM(TZFMH%COMMENT) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,TRIM(HRECFM)//'%TIME',.TRUE.,1,TFIELD%TIME& - & ,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,TRIM(HRECFM)//'%TIME',HDIR,TFIELD%TIME,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITT0_ll",HFILEM,HFIPRI,HRECFM,HDIR,KGRID,KLENCH& - & ,IRESP) - END IF - KRESP = IRESP - END SUBROUTINE FMWRITT0_ll - - SUBROUTINE IO_WRITE_FIELD_BYNAME_T0(TPFILE,HNAME,TFIELD,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - TYPE (DATE_TIME), INTENT(IN) :: TFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),TFIELD,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_T0 - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TFIELD,KRESP) - USE MODD_IO_ll - USE MODD_FM - USE MODD_TYPE_DATE - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - !* 0. DECLARATIONS - ! ------------ - ! - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD - TYPE (DATE_TIME), INTENT(IN) :: TFIELD ! array containing the data field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) - ! - CALL FIELD_METADATA_CHECK(TPFIELD,TYPEDATE,0,'IO_WRITE_FIELD_BYFIELD_T0') - ! - IRESP = 0 - ! - !------------------------------------------------------------------ - TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) - ELSE - IF (ISP == TZFD%OWNER) THEN - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) - END IF - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0',YMSG) - END IF - IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0 - - SUBROUTINE FMWRIT_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) - USE MODD_IO_ll, ONLY : ISP,ISNPROC,GSMONOPROC,LIOCDF4,LLFIOUT,LPACK,L2D - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_DISTRIB_LB - USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - ! - USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints in FM - CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE! 'LBX','LBXU','LBY' or 'LBYV' - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PLB ! array containing the LB field - INTEGER, INTENT(IN) ::KRIM ! size of the LB area - INTEGER, INTENT(IN) ::KL3D ! size of the LB array in FM - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D - REAL,DIMENSION(:,:,:), POINTER :: TX3DP - TYPE(FMHEADER) :: TZFMH - INTEGER :: IIMAX_ll,IJMAX_ll - INTEGER :: JI - INTEGER :: IIB,IIE,IJB,IJE - INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS - INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB - INTEGER :: NB_REQ,IKU - TYPE TX_3DP - REAL,DIMENSION(:,:,:), POINTER :: X - END TYPE TX_3DP - TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRIT_LB','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article LB ' , HRECFM - IF (KL3D /= 2*(KRIM+JPHEXT)) THEN - IRESP = -30 - GOTO 1000 - END IF - ! - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LPACK .AND. L2D) THEN - TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(TX3DP),TX3DP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',TX3DP,TZFMH,IRESP) - ELSE - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(PLB),PLB,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',PLB,TZFMH,IRESP) - END IF - ELSE - IF (ISP == TZFD%OWNER) THEN - ! I/O proc case - CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) - IF (HLBTYPE == 'LBX' .OR. HLBTYPE == 'LBXU') THEN - ALLOCATE(Z3D((KRIM+JPHEXT)*2,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) - ELSE ! HLBTYPE == 'LBY' .OR. HLBTYPE == 'LBYV' - ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(KRIM+JPHEXT)*2,SIZE(PLB,3))) - END IF - DO JI = 1,ISNPROC - CALL GET_DISTRIB_LB(HLBTYPE,JI,'FM','WRITE',KRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) - IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,STATUS,IERR) - ELSE - CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE) - TX3DP = PLB(IIB:IIE,IJB:IJE,:) - END IF - END IF - END DO - TZFMH%GRID=KGRID - TZFMH%COMLEN=KLENCH - TZFMH%COMMENT=HCOMMENT - IF (LPACK .AND. L2D) THEN - TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) - ELSE - TX3DP=>Z3D - END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(TX3DP),TX3DP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',TX3DP,TZFMH,IRESP) - ELSE - NB_REQ=0 - ALLOCATE(REQ_TAB(1)) - ALLOCATE(T_TX3DP(1)) - IKU = SIZE(PLB,3) - ! Other processors - CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - NB_REQ = NB_REQ + 1 - ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) - T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,IERR) - END IF - IF (NB_REQ .GT.0 ) THEN - CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - DEALLOCATE(T_TX3DP(1)%X) - END IF - DEALLOCATE(T_TX3DP,REQ_TAB) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF !(GSMONOPROC) - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- -1000 CONTINUE - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRIT_LB",HFILEM,HFIPRI,HRECFM,HLBTYPE,KGRID,KLENCH,IRESP) - END IF - ! - IF (ALLOCATED(Z3D)) DEALLOCATE(Z3D) - KRESP = IRESP - END SUBROUTINE FMWRIT_LB - - SUBROUTINE IO_WRITE_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,PLB,KRESP) - ! - USE MODD_IO_ll, ONLY : TFILEDATA - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write - INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM - REAL,DIMENSION(:,:,:), INTENT(IN) :: PLB ! array containing the LB field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - INTEGER :: ID ! Index of the field - INTEGER :: IRESP ! return_code - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) - ! - CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) - ! - IF(IRESP==0) CALL IO_WRITE_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP) - ! - IF (PRESENT(KRESP)) KRESP = IRESP - ! - END SUBROUTINE IO_WRITE_FIELD_BYNAME_LB - - SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,PLB,KRESP) - ! - USE MODD_IO_ll - USE MODD_PARAMETERS_ll,ONLY : JPHEXT - USE MODD_FM - USE MODE_DISTRIB_LB - USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_ll - ! - USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE - ! - !* 0.1 Declarations of arguments - ! - TYPE(TFILEDATA), INTENT(IN) :: TPFILE - TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD - INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PLB ! array containing the LB field - INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=28) :: YFILEM ! FM-file name - CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write - CHARACTER(LEN=4) :: YLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IRIM ! size of the LB area - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D - REAL,DIMENSION(:,:,:), POINTER :: TX3DP - INTEGER :: IIMAX_ll,IJMAX_ll - INTEGER :: JI - INTEGER :: IIB,IIE,IJB,IJE - INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS - INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB - INTEGER :: NB_REQ,IKU - TYPE TX_3DP - REAL,DIMENSION(:,:,:), POINTER :: X - END TYPE TX_3DP - TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP - CHARACTER(LEN=:),ALLOCATABLE :: YMSG - CHARACTER(LEN=6) :: YRESP - ! - YFILEM = TPFILE%CNAME - YRECFM = TPFIELD%CMNHNAME - YLBTYPE = TPFIELD%CLBTYPE - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_LB',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) - ! - IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','unknown LBTYPE ('//YLBTYPE//')') - RETURN - END IF - ! - IF (TPFIELD%CDIR/='XY') THEN - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_BYFIELD_LB','CDIR was not set to "XY" for '//TRIM(YRECFM)) - TPFIELD%CDIR='XY' - END IF - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' - ! - IRIM = (KL3D-2*JPHEXT)/2 - IF (KL3D /= 2*(IRIM+JPHEXT)) THEN - IRESP = -30 - GOTO 1000 - END IF - ! - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - IF (LPACK .AND. L2D) THEN - TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:) - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) - ELSE - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PLB,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PLB,IRESP) - END IF - ELSE - IF (ISP == TZFD%OWNER) THEN - ! I/O proc case - CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) - IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN - ALLOCATE(Z3D((IRIM+JPHEXT)*2,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) - ELSE ! YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV' - ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(IRIM+JPHEXT)*2,SIZE(PLB,3))) - END IF - DO JI = 1,ISNPROC - CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) - IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,STATUS,IERR) - ELSE - CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) - TX3DP = PLB(IIB:IIE,IJB:IJE,:) - END IF - END IF - END DO - IF (LPACK .AND. L2D) THEN - TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) - ELSE - TX3DP=>Z3D - END IF - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP) - IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) - ELSE - NB_REQ=0 - ALLOCATE(REQ_TAB(1)) - ALLOCATE(T_TX3DP(1)) - IKU = SIZE(PLB,3) - ! Other processors - CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) - IF (IIB /= 0) THEN - TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - NB_REQ = NB_REQ + 1 - ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) - T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,IERR) - END IF - IF (NB_REQ .GT.0 ) THEN - CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) - DEALLOCATE(T_TX3DP(1)%X) - END IF - DEALLOCATE(T_TX3DP,REQ_TAB) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF !(GSMONOPROC) - ELSE - IRESP = -61 - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','file '//TRIM(TPFILE%CNAME)//' not found') - END IF - !---------------------------------------------------------------- -1000 CONTINUE - IF (IRESP.NE.0) THEN - WRITE(YRESP, '( I6 )') IRESP - YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB',YMSG) - END IF - ! - IF (ALLOCATED(Z3D)) DEALLOCATE(Z3D) - IF (PRESENT(KRESP)) KRESP = IRESP - END SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB - - SUBROUTINE FMWRITBOXX2_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:),TARGET, INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITBOXX2_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article BOXX2 ' , HRECFM - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (HBUDGET /= 'BUDGET') THEN - ! take the sub-section of PFIELD defined by the box - ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX) - ELSE - ! take the field as a budget - ZFIELDP=>PFIELD - END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - ! Allocate the box - ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1)) - GALLOC = .TRUE. - ELSE - ALLOCATE(ZFIELDP(0,0)) - GALLOC = .TRUE. - END IF - ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& - & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF ! multiprocessor execution - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITBOXX2_ll",HFILEM,HFIPRI,HRECFM,'XY',KGRID,LEN(HCOMMENT),IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITBOXX2_ll - - SUBROUTINE FMWRITBOXX3_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITBOXX3_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article BOXX3 ' , HRECFM - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (HBUDGET /= 'BUDGET') THEN - ! take the sub-section of PFIELD defined by the box - ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,:) - ELSE - ! take the field as a budget - ZFIELDP=>PFIELD - END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - ! Allocate the box - ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3))) - GALLOC = .TRUE. - ELSE - ALLOCATE(ZFIELDP(0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& - & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF ! multiprocessor execution - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITBOXX3_ll",HFILEM,HFIPRI,HRECFM,'XY',KGRID,LEN(HCOMMENT),IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITBOXX3_ll - - SUBROUTINE FMWRITBOXX4_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITBOXX4_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article BOXX4 ' , HRECFM - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (HBUDGET /= 'BUDGET') THEN - ! take the sub-section of PFIELD defined by the box - ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,:,:) - ELSE - ! take the field as a budget - ZFIELDP=>PFIELD - END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - ! Allocate the box - ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3),SIZE(PFIELD,4))) - GALLOC = .TRUE. - ELSE - ALLOCATE(ZFIELDP(0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& - & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) - ! + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) + ELSE IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF ! multiprocessor execution - ELSE + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + END IF + ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITBOXX4_ll",HFILEM,HFIPRI,HRECFM,'XY',KGRID,LEN(HCOMMENT),IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0',YMSG) END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITBOXX4_ll + IF (PRESENT(KRESP)) KRESP = IRESP + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0 - SUBROUTINE FMWRITBOXX5_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_GATHER_ll + + SUBROUTINE IO_WRITE_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,PLB,KRESP) ! + USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 Declarations of arguments ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM + REAL,DIMENSION(:,:,:), INTENT(IN) :: PLB ! array containing the LB field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code ! !* 0.2 Declarations of local variables ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC + INTEGER :: ID ! Index of the field + INTEGER :: IRESP ! return_code + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_WRITE_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_WRITE_FIELD_BYNAME_LB + + SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,PLB,KRESP) + ! + USE MODD_IO_ll + USE MODD_PARAMETERS_ll,ONLY : JPHEXT + USE MODE_DISTRIB_LB + USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll + USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_ll + ! + USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE + ! + !* 0.1 Declarations of arguments + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD + INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM + REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PLB ! array containing the LB field + INTEGER,OPTIONAL, INTENT(OUT):: KRESP ! return-code + ! + !* 0.2 Declarations of local variables + ! + CHARACTER(LEN=28) :: YFILEM ! FM-file name + CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! name of the article to write + CHARACTER(LEN=4) :: YLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' + CHARACTER(LEN=JPFINL) :: YFNLFI + INTEGER :: IRIM ! size of the LB area + INTEGER :: IERR + TYPE(FD_ll), POINTER :: TZFD + INTEGER :: IRESP + REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D + REAL,DIMENSION(:,:,:), POINTER :: TX3DP + INTEGER :: IIMAX_ll,IJMAX_ll + INTEGER :: JI + INTEGER :: IIB,IIE,IJB,IJE + INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS + INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB + INTEGER :: NB_REQ,IKU + TYPE TX_3DP + REAL,DIMENSION(:,:,:), POINTER :: X + END TYPE TX_3DP + TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP + CHARACTER(LEN=:),ALLOCATABLE :: YMSG + CHARACTER(LEN=6) :: YRESP + ! + YFILEM = TPFILE%CNAME + YRECFM = TPFIELD%CMNHNAME + YLBTYPE = TPFIELD%CLBTYPE + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_LB',TRIM(YFILEM)//': writing '//TRIM(YRECFM)) + ! + IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','unknown LBTYPE ('//YLBTYPE//')') + RETURN + END IF ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITBOXX5_ll','writing '//TRIM(HRECFM)) + IF (TPFIELD%CDIR/='XY') THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_BYFIELD_LB','CDIR was not set to "XY" for '//TRIM(YRECFM)) + TPFIELD%CDIR='XY' + END IF ! !* 1.1 THE NAME OF LFIFM ! IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article BOXX5 ' , HRECFM - !------------------------------------------------------------------ + YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' + ! + IRIM = (KL3D-2*JPHEXT)/2 + IF (KL3D /= 2*(IRIM+JPHEXT)) THEN + IRESP = -30 + GOTO 1000 + END IF + ! TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (HBUDGET /= 'BUDGET') THEN - ! take the sub-section of PFIELD defined by the box - ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,:,:,:) + IF (GSMONOPROC) THEN ! sequential execution + IF (LPACK .AND. L2D) THEN + TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) ELSE - ! take the field as a budget - ZFIELDP=>PFIELD + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PLB,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PLB,IRESP) END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - ELSE ! multiprocessor execution + ELSE IF (ISP == TZFD%OWNER) THEN - ! Allocate the box - ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3),& - & SIZE(PFIELD,4),SIZE(PFIELD,5))) - GALLOC = .TRUE. + ! I/O proc case + CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) + IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN + ALLOCATE(Z3D((IRIM+JPHEXT)*2,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) + ELSE ! YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV' + ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(IRIM+JPHEXT)*2,SIZE(PLB,3))) + END IF + DO JI = 1,ISNPROC + CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE) + IF (IIB /= 0) THEN + TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) + IF (ISP /= JI) THEN + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,STATUS,IERR) + ELSE + CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) + TX3DP = PLB(IIB:IIE,IJB:IJE,:) + END IF + END IF + END DO + IF (LPACK .AND. L2D) THEN + TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) + ELSE + TX3DP=>Z3D + END IF + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP) + IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP) ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& - & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) + NB_REQ=0 + ALLOCATE(REQ_TAB(1)) + ALLOCATE(T_TX3DP(1)) + IKU = SIZE(PLB,3) + ! Other processors + CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) + IF (IIB /= 0) THEN + TX3DP=>PLB(IIB:IIE,IJB:IJE,:) + NB_REQ = NB_REQ + 1 + ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) + T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:) + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,IERR) + END IF + IF (NB_REQ .GT.0 ) THEN + CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) + DEALLOCATE(T_TX3DP(1)%X) + END IF + DEALLOCATE(T_TX3DP,REQ_TAB) END IF ! CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& & %COMM,IERR) - END IF ! multiprocessor execution + END IF !(GSMONOPROC) ELSE IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','file '//TRIM(TPFILE%CNAME)//' not found') END IF !---------------------------------------------------------------- +1000 CONTINUE IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITBOXX5_ll",HFILEM,HFIPRI,HRECFM,'XY',KGRID,LEN(HCOMMENT),IRESP) + WRITE(YRESP, '( I6 )') IRESP + YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME) + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB',YMSG) END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITBOXX5_ll + ! + IF (ALLOCATED(Z3D)) DEALLOCATE(Z3D) + IF (PRESENT(KRESP)) KRESP = IRESP + END SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB + SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5(TPFILE,TPFIELD,HBUDGET,PFIELD,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) ! USE MODD_IO_ll - USE MODD_FM USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL USE MODE_GATHER_ll ! @@ -5146,99 +2897,4 @@ CONTAINS IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5 - SUBROUTINE FMWRITBOXX6_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - USE MODD_IO_ll, ONLY : ISP,GSMONOPROC,LIOCDF4,LLFIOUT - USE MODD_FM - USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL - USE MODE_GATHER_ll - ! - ! - !* 0.1 Declarations of arguments - ! - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - ! - !* 0.2 Declarations of local variables - ! - CHARACTER(LEN=JPFINL) :: YFNLFI - INTEGER :: IERR - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IRESP - REAL,DIMENSION(:,:,:,:,:,:),POINTER :: ZFIELDP - TYPE(FMHEADER) :: TZFMH - LOGICAL :: GALLOC - - ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITBOXX6_ll','writing '//TRIM(HRECFM)) - ! - !* 1.1 THE NAME OF LFIFM - ! - IRESP = 0 - GALLOC = .FALSE. - YFNLFI=TRIM(ADJUSTL(HFILEM))//'.lfi' - !print * , ' Writing Article BOXX6 ' , HRECFM - !------------------------------------------------------------------ - TZFD=>GETFD(YFNLFI) - IF (ASSOCIATED(TZFD)) THEN - IF (GSMONOPROC) THEN ! sequential execution - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (HBUDGET /= 'BUDGET') THEN - ! take the sub-section of PFIELD defined by the box - ZFIELDP=>PFIELD(KXOBOX:KXEBOX,KYOBOX:KYEBOX,:,:,:,:) - ELSE - ! take the field as a budget - ZFIELDP=>PFIELD - END IF - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - ELSE ! multiprocessor execution - IF (ISP == TZFD%OWNER) THEN - ! Allocate the box - ALLOCATE(ZFIELDP(KXEBOX-KXOBOX+1,KYEBOX-KYOBOX+1,SIZE(PFIELD,3),& - & SIZE(PFIELD,4),SIZE(PFIELD,5),SIZE(PFIELD,6))) - GALLOC = .TRUE. - ELSE - ALLOCATE(ZFIELDP(0,0,0,0,0,0)) - GALLOC = .TRUE. - END IF - ! - CALL GATHER_XYFIELD(PFIELD,ZFIELDP,TZFD%OWNER,TZFD%COMM,& - & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET) - ! - IF (ISP == TZFD%OWNER) THEN - TZFMH%GRID = KGRID - TZFMH%COMLEN = LEN_TRIM(HCOMMENT) - TZFMH%COMMENT = HCOMMENT - IF (LLFIOUT) CALL FM_WRIT_ll(TZFD%FLU,HRECFM,.TRUE.,SIZE(ZFIELDP),ZFIELDP,TZFMH& - & ,IRESP) - IF (LIOCDF4) CALL NCWRIT(TZFD%CDF,HRECFM,'XY',ZFIELDP,TZFMH,IRESP) - END IF - ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD& - & %COMM,IERR) - END IF ! multiprocessor execution - ELSE - IRESP = -61 - END IF - !---------------------------------------------------------------- - IF (IRESP.NE.0) THEN - CALL FM_WRIT_ERR("FMWRITBOXX6_ll",HFILEM,HFIPRI,HRECFM,'XY',KGRID,LEN(HCOMMENT),IRESP) - END IF - IF (GALLOC) DEALLOCATE(ZFIELDP) - KRESP = IRESP - END SUBROUTINE FMWRITBOXX6_ll - END MODULE MODE_FMWRIT diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 9064e152b..4806eedfd 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -46,24 +46,10 @@ INTERFACE IO_READ_FIELD_NC4 IO_READ_FIELD_NC4_T0 END INTERFACE IO_READ_FIELD_NC4 -INTERFACE NCWRIT - MODULE PROCEDURE NCWRITX0, NCWRITX1, NCWRITX2, NCWRITX3, & - & NCWRITX4, NCWRITX5, NCWRITX6, & - & NCWRITN0, NCWRITN1, NCWRITN2, & - & NCWRITC0, NCWRITC1 -END INTERFACE NCWRIT - -INTERFACE NCREAD - MODULE PROCEDURE NCREADX0, NCREADX1, NCREADX2, NCREADX3, & - & NCREADX4, NCREADX5, NCREADX6, & - & NCREADN0, NCREADN1, NCREADN2, & - & NCREADC0 -END INTERFACE NCREAD - ! Public from module netcdf PUBLIC NF90_OPEN,NF90_CREATE,NF90_NOWRITE,NF90_CLOBBER,NF90_NETCDF4,NF90_NOERR,NF90_STRERROR ! Public from this module : -PUBLIC NEWIOCDF,CLEANIOCDF,NCWRIT,NCREAD,IO_WRITE_FIELD_NC4,IO_READ_FIELD_NC4,IO_WRITE_HEADER_NC4 +PUBLIC NEWIOCDF,CLEANIOCDF,IO_WRITE_FIELD_NC4,IO_READ_FIELD_NC4,IO_WRITE_HEADER_NC4 CONTAINS @@ -209,23 +195,6 @@ END IF ! END SUBROUTINE IO_WRITE_HEADER_NC4 -SUBROUTINE WRITATTR(KNCID, KVARID, TPFMH) -USE MODD_FM, ONLY : FMHEADER -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KVARID -TYPE(FMHEADER), INTENT(IN) :: TPFMH - -INTEGER(KIND=IDCDF_KIND) :: STATUS - -! GRID attribute definition -STATUS = NF90_PUT_ATT(KNCID, KVARID, 'GRID', TPFMH%GRID) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITATTR [NF90_PUT_ATT]') - -! COMMENT attribute definition -STATUS = NF90_PUT_ATT(KNCID, KVARID,'COMMENT', TRIM(TPFMH%COMMENT)) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITATTR [NF90_PUT_ATT]') - -END SUBROUTINE WRITATTR SUBROUTINE IO_WRITE_FIELD_ATTR_NC4(TPFIELD,KNCID,KVARID,HCALENDAR) ! @@ -450,47 +419,6 @@ END DO END SUBROUTINE FILLVDIMS -SUBROUTINE NCWRITX0(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX0','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Define the scalar variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX0[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX0 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX0[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX0 - SUBROUTINE IO_WRITE_FIELD_NC4_X0(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -532,50 +460,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X0 -SUBROUTINE NCWRITX1(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:), INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX1','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX1[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX1 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX1[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX1 SUBROUTINE IO_WRITE_FIELD_NC4_X1(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! @@ -637,50 +521,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X1 -SUBROUTINE NCWRITX2(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX2','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX2[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX2 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX2[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX2 SUBROUTINE IO_WRITE_FIELD_NC4_X2(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP,KVERTLEVEL,KZFILE) ! @@ -769,50 +609,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X2 -SUBROUTINE NCWRITX3(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:,:,:),INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX3','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX3 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF90_PUT_VAR] '//TRIM(HVARNAME),IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX3 SUBROUTINE IO_WRITE_FIELD_NC4_X3(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! @@ -875,50 +671,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X3 -SUBROUTINE NCWRITX4(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX4','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX4[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX4 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX4[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX4 SUBROUTINE IO_WRITE_FIELD_NC4_X4(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! @@ -981,50 +733,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X4 -SUBROUTINE NCWRITX5(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX5','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX5[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX5 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX5[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX5 SUBROUTINE IO_WRITE_FIELD_NC4_X5(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! @@ -1087,50 +795,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X5 -SUBROUTINE NCWRITX6(PZCDF, HVARNAME, HDIR, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -REAL, DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITX6','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX6[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITX6 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX6[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITX6 SUBROUTINE IO_WRITE_FIELD_NC4_X6(TPFILE,TPFIELD,PZCDF,PFIELD,KRESP) ! @@ -1193,67 +857,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X6 -SUBROUTINE NCWRITN0(PZCDF, HVARNAME, HDIR, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT -USE MODD_IO_ll, ONLY : LPACK,L1D,L2D -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -INTEGER, INTENT(IN) :: KFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITN0','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Define the scalar variable -#ifndef MNH_INT8 - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVARID) -#endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITN0 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF90_PUT_VAR]',IRESP) -! -! Use IMAX, JMAX, KMAX to define DIMX, DIMY, DIMZ -! /!\ Can only work if IMAX, JMAX or KMAX are written before any array -! -#if 0 -IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMX)) PZCDF%DIMX=>GETDIMCDF(PZCDF,KFIELD+2*JPHEXT,'X') -IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMY)) THEN - IF (LPACK .AND. L2D) THEN - PZCDF%DIMY=>GETDIMCDF(PZCDF, 1,'Y') - ELSE - PZCDF%DIMY=>GETDIMCDF(PZCDF, KFIELD+2*JPHEXT, 'Y') - END IF -END IF -#endif -IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMZ)) PZCDF%DIMZ=>GETDIMCDF(PZCDF,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z') - -KRESP = IRESP -END SUBROUTINE NCWRITN0 SUBROUTINE IO_WRITE_FIELD_NC4_N0(TPFILE,TPFIELD,PZCDF,KFIELD,KRESP) ! @@ -1322,53 +925,6 @@ IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMZ)) PZCDF%DIMZ=>GETDIMCDF KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_N0 -SUBROUTINE NCWRITN1(PZCDF, HVARNAME, HDIR, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -INTEGER, DIMENSION(:), INTENT(IN) :: KFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITN1','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - ! Define the variable -#ifndef MNH_INT8 - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF90_DEF_VAR] '//TRIM(YVARNAME)) - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITN1 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITN1 SUBROUTINE IO_WRITE_FIELD_NC4_N1(TPFILE,TPFIELD,PZCDF,KFIELD,KRESP) ! @@ -1431,54 +987,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N1 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_N1 -SUBROUTINE NCWRITN2(PZCDF, HVARNAME, HDIR, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -INTEGER, DIMENSION(:,:),INTENT(IN) :: KFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITN2','writing '//TRIM(HVARNAME)) - -IRESP = 0 -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions - CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) - - ! Define the variable -#ifndef MNH_INT8 - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITN2 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITN2 SUBROUTINE IO_WRITE_FIELD_NC4_N2(TPFILE,TPFIELD,PZCDF,KFIELD,KRESP) ! @@ -1716,56 +1224,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L1 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_L1 -SUBROUTINE NCWRITC0(PZCDF, HVARNAME, HDIR, HFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -CHARACTER(LEN=*), INTENT(IN) :: HFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS -CHARACTER(LEN=32) :: YSTR -!CHARACTER(LEN=LEN(HFIELD)) :: YSTR -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITC0','writing '//TRIM(HVARNAME)) - -IRESP = 0 -YSTR = HFIELD -IF (LEN_TRIM(HFIELD) > LEN(YSTR)) THEN - PRINT *,'NCWRITC0 : ',TRIM(YVARNAME), ' string variable TRUNCATED.' -END IF - -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf string dimensions id - IVDIMS(1) = GETSTRDIMID(PZCDF, INT(LEN(YSTR),KIND=IDCDF_KIND)) - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC0[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITC0 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, YSTR) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC0[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITC0 SUBROUTINE IO_WRITE_FIELD_NC4_C0(TPFILE,TPFIELD,PZCDF,HFIELD,KRESP) ! @@ -1877,57 +1335,6 @@ IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1 KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_C1 -SUBROUTINE NCWRITC1(PZCDF, HVARNAME, HDIR, HFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER -TYPE(IOCDF), POINTER :: PZCDF -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(IN) :: HDIR -CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD -TYPE(FMHEADER), INTENT(IN) :: TPFMH -INTEGER, INTENT(OUT):: KRESP - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(2) :: IVDIMS -INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: ITMP -INTEGER :: IRESP -INTEGER(KIND=IDCDF_KIND) :: ILEN -INTEGER(KIND=IDCDF_KIND) :: ISIZE - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCWRITC1','writing '//TRIM(HVARNAME)) - -IRESP = 0 -ILEN = LEN(HFIELD) -ISIZE = SIZE(HFIELD) - -! Get the Netcdf file ID -INCID = PZCDF%NCID - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! The variable should not already exist but who knows ? -STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - ! Get the netcdf dimensions ID - IVDIMS(1) = GETSTRDIMID(PZCDF,ILEN) - CALL FILLVDIMS(PZCDF, (/ISIZE/), HDIR, ITMP) - IVDIMS(2) = ITMP(1) - ! Define the variable - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC1[NF90_DEF_VAR]') - CALL WRITATTR(INCID, IVARID, TPFMH) -ELSE - PRINT *,'NCWRITC1 : ', TRIM(YVARNAME), ' already defined !' -END IF - -! Write the data -STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC1[NF90_PUT_VAR]',IRESP) - -KRESP = IRESP -END SUBROUTINE NCWRITC1 SUBROUTINE IO_WRITE_FIELD_NC4_T0(TPFILE,TPFIELD,PZCDF,TPDATA,KRESP) ! @@ -2053,35 +1460,6 @@ END SUBROUTINE IO_WRITE_FIELD_NC4_T0 ! Here come the NetCDF READ routines ! ! -SUBROUTINE READATTR(KNCID, KVARID, HVAR, TPFMH) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KVARID -CHARACTER(LEN=*),INTENT(IN) :: HVAR -TYPE(FMHEADER), INTENT(OUT):: TPFMH - -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN - -! Read variables attributes (GRID and COMMENT) -STATUS = NF90_GET_ATT(KNCID, KVARID, 'GRID', TPFMH%GRID) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'READATTR[NF90_GET_ATT_INT] '//TRIM(HVAR)) -STATUS = NF90_INQUIRE_ATTRIBUTE(KNCID, KVARID, 'COMMENT', LEN=ICOMLEN) -!IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'READATTR[NF90_INQUIRE_ATTRIBUTE] '//TRIM(HVAR)) -IF (STATUS == NF90_NOERR) THEN - IF (ICOMLEN <= JPXKRK) THEN - TPFMH%COMLEN = ICOMLEN - STATUS = NF90_GET_ATT(KNCID, KVARID, 'COMMENT', TPFMH%COMMENT) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'READATTR[NF90_GET_ATT] '//TRIM(HVAR)) - ELSE - PRINT *, 'READATTR : '//TRIM(HVAR)//' COMMENT attribute ignored because too long.' - TPFMH%COMLEN = 0 - END IF -ELSE - TPFMH%COMLEN = 0 -END IF -END SUBROUTINE READATTR - SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4(TPFIELD,KNCID,KVARID,KRESP,HCALENDAR) ! TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD @@ -2264,56 +1642,6 @@ ENDIF END SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4 -SUBROUTINE NCREADX0(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX0','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == 0 .AND. ITYPE == NF90_DOUBLE) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) -ELSE - PRINT *, 'NCREADNCREADX0 : '//TRIM(YVARNAME)//' not READ (wrong size or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX0 - SUBROUTINE IO_READ_FIELD_NC4_X0(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD @@ -2365,72 +1693,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X0 -SUBROUTINE NCREADX1(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX1','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX1[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX1[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX1[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX1 : '//TRIM(YVARNAME)//' not READ wrong size (file, mem) : ', IVARSIZE, SIZE(PFIELD) - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX1 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX1 SUBROUTINE IO_READ_FIELD_NC4_X1(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2495,86 +1757,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X1 -SUBROUTINE NCREADX2(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:,:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -!INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND), DIMENSION(3) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX2','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF - -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX2[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -!Treat special case of a degenerated 3D array (3rd dimension size is 1) -IF (IDIMS==3) THEN - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(3), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IF (IDIMLEN==1) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','NCREADX2','reading 3D array with degenerated third dimension in 2D array for '//TRIM(HVARNAME)) - IDIMS = 2 - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','NCREADX2','wrong number of dimensions for '//TRIM(HVARNAME)) - END IF -END IF - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX2[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX2 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX2 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX2 SUBROUTINE IO_READ_FIELD_NC4_X2(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2654,72 +1836,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X2 -SUBROUTINE NCREADX3(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:,:,:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX3','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX3[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX3[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX3[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX3[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX3 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX3 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX3 SUBROUTINE IO_READ_FIELD_NC4_X3(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2788,72 +1904,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X3 -SUBROUTINE NCREADX4(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:,:,:,:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX4','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX4[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX4[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX4[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX4 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX4 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX4 SUBROUTINE IO_READ_FIELD_NC4_X4(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -2925,72 +1975,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X4 -SUBROUTINE NCREADX5(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:,:,:,:,:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX5','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX5[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX5[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX5[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX5 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX5 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX5 SUBROUTINE IO_READ_FIELD_NC4_X5(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3065,72 +2049,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X5 -SUBROUTINE NCREADX6(KNCID, HVARNAME, PFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -REAL, DIMENSION(:,:,:,:,:,:), INTENT(OUT):: PFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADX6','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX6[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADX6[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == SIZE(SHAPE(PFIELD)) .AND. ITYPE == NF90_DOUBLE) THEN - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADX6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(PFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, PFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADX6[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADX6 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADX6 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADX6 SUBROUTINE IO_READ_FIELD_NC4_X6(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3207,60 +2125,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_X6 -SUBROUTINE NCREADN0(KNCID, HVARNAME, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -INTEGER, INTENT(OUT):: KFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADN0','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -!NF90_INT1 is for the case a boolean was written -#ifndef MNH_INT8 -IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN -#else -IF (IDIMS == 0 .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN -#endif - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, KFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) -ELSE - PRINT *, 'NCREADN0 : '//TRIM(YVARNAME)//' not READ (wrong size or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADN0 SUBROUTINE IO_READ_FIELD_NC4_N0(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3318,77 +2182,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_N0 -SUBROUTINE NCREADN1(KNCID, HVARNAME, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -INTEGER, DIMENSION(:), INTENT(OUT):: KFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADN1','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN1[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN1[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -!NF90_INT1 is for the case a boolean was written -#ifndef MNH_INT8 -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN -#else -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN -#endif - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADN1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(KFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, KFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN1[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADN1 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADN1 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADN1 SUBROUTINE IO_READ_FIELD_NC4_N1(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3458,77 +2251,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_N1 -SUBROUTINE NCREADN2(KNCID, HVARNAME, KFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -INTEGER, DIMENSION(:,:), INTENT(OUT):: KFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER :: IVARSIZE -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADN2','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN2[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN2[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -!NF90_INT1 is for the case a boolean was written -#ifndef MNH_INT8 -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT1) ) THEN -#else -IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN -#endif - ! Check size of variable before reading - IVARSIZE = 1 - DO II=1,IDIMS - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(II), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADN2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - IVARSIZE = IVARSIZE*IDIMLEN - END DO - - IF (IVARSIZE == SIZE(KFIELD)) THEN - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, KFIELD) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADN2[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) - ELSE - PRINT *, 'NCREADN2 : '//TRIM(YVARNAME)//' not READ (wrong size).' - IRESP = -3 - END IF -ELSE - PRINT *, 'NCREADN2 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADN2 SUBROUTINE IO_READ_FIELD_NC4_N2(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE @@ -3764,68 +2486,6 @@ KRESP = IRESP END SUBROUTINE IO_READ_FIELD_NC4_L1 -SUBROUTINE NCREADC0(KNCID, HVARNAME, HFIELD, TPFMH, KRESP) -USE MODD_FM, ONLY : FMHEADER, JPXKRK -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID -CHARACTER(LEN=*), INTENT(IN) :: HVARNAME -CHARACTER(LEN=*), INTENT(OUT):: HFIELD -TYPE(FMHEADER), INTENT(OUT):: TPFMH -INTEGER, INTENT(OUT):: KRESP ! return-code - -INTEGER(KIND=IDCDF_KIND) :: STATUS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(1) :: IVDIMS -CHARACTER(LEN=:),ALLOCATABLE :: YSTR -INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: II -INTEGER :: IRESP - -CALL PRINT_MSG(NVERB_DEBUG,'IO','NCREADC0','reading '//TRIM(HVARNAME)) - -IRESP = 0 - -CALL CLEANMNHNAME(HVARNAME,YVARNAME) - -! Get variable ID, NDIMS and TYPE -STATUS = NF90_INQ_VARID(KNCID, YVARNAME, IVARID) -IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADC0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 -END IF -STATUS = NF90_INQUIRE_VARIABLE(KNCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADC0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) - -IF (IDIMS == 1 .AND. ITYPE == NF90_CHAR) THEN - ! Check size of variable before reading - STATUS = NF90_INQUIRE_DIMENSION(KNCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADC0[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) - ! - ALLOCATE(CHARACTER(LEN=IDIMLEN)::YSTR) - ! Read variable - STATUS = NF90_GET_VAR(KNCID, IVARID, YSTR) - IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADC0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) - GOTO 1000 - END IF - IF (LEN_TRIM(YSTR) > LEN(HFIELD)) PRINT *, 'NCDREADC0 : '//TRIM(YVARNAME)//' truncated !!' - HFIELD = TRIM(YSTR) - DEALLOCATE(YSTR) - ! Read variables attributes (GRID and COMMENT) - CALL READATTR(KNCID, IVARID, YVARNAME, TPFMH) -ELSE - PRINT *, 'NCREADC0 : '//TRIM(YVARNAME)//' not READ (wrong shape or type).' - IRESP = -3 -END IF - -1000 CONTINUE -KRESP = IRESP - -END SUBROUTINE NCREADC0 - SUBROUTINE IO_READ_FIELD_NC4_C0(TPFILE, TPFIELD, HFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD @@ -3863,13 +2523,13 @@ IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_C0[ IF (IDIMS == 1 .AND. (ITYPE == NF90_CHAR) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADC0[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) ! ALLOCATE(CHARACTER(LEN=IDIMLEN)::YSTR) ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, YSTR) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'NCREADC0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) GOTO 1000 END IF IF (LEN_TRIM(YSTR) > LEN(HFIELD)) & @@ -3968,21 +2628,16 @@ INTEGER :: A,B,C,D PRINT *, 'IO_WRITE_FIELD_NC4 empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' END SUBROUTINE IO_WRITE_FIELD_NC4 +SUBROUTINE IO_READ_FIELD_NC4(A,B,C,D) +INTEGER :: A,B,C,D +PRINT *, 'IO_READ_FIELD_NC4 empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' +END SUBROUTINE IO_READ_FIELD_NC4 + SUBROUTINE IO_WRITE_HEADER_NC4(A,B) INTEGER :: A,B PRINT *, 'IO_WRITE_HEADER_NC4 empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' END SUBROUTINE IO_WRITE_HEADER_NC4 -SUBROUTINE NCWRIT(A,B,C,D,E,F) -INTEGER :: A,B,C,D,E,F -PRINT *, 'NCWRIT empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' -END SUBROUTINE NCWRIT - -SUBROUTINE NCREAD(A,B,C,D,E) -INTEGER :: A,B,C,D,E -PRINT *, 'NCREAD empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' -END SUBROUTINE NCREAD - SUBROUTINE CLEANIOCDF(A) INTEGER :: A PRINT *, 'CLEANIOCDF empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF4 I/Os.' diff --git a/src/LIB/SURCOUCHE/src/modi_fmread.f90 b/src/LIB/SURCOUCHE/src/modi_fmread.f90 deleted file mode 100644 index c1d6968ec..000000000 --- a/src/LIB/SURCOUCHE/src/modi_fmread.f90 +++ /dev/null @@ -1,224 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- - -MODULE MODI_FMREAD_ll -! -INTERFACE FMREAD - SUBROUTINE FMREADX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL, INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADX0_ll - - SUBROUTINE FMREADX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP, KIMAX_ll, KJMAX_ll) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - REAL,DIMENSION(:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - INTEGER, OPTIONAL, INTENT(IN) ::KIMAX_ll - INTEGER, OPTIONAL, INTENT(IN) ::KJMAX_ll - END SUBROUTINE FMREADX1_ll - - SUBROUTINE FMREADX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP, KIMAX_ll, KJMAX_ll) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:),TARGET, INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - INTEGER, OPTIONAL, INTENT(IN) ::KIMAX_ll - INTEGER, OPTIONAL, INTENT(IN) ::KJMAX_ll - END SUBROUTINE FMREADX2_ll - - SUBROUTINE FMREADX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL, DIMENSION(:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADX3_ll - - SUBROUTINE FMREADX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code if - END SUBROUTINE FMREADX4_ll - - SUBROUTINE FMREADX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADX5_ll - - SUBROUTINE FMREADX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(OUT)::PFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADX6_ll - - SUBROUTINE FMREADN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - INTEGER, INTENT(OUT)::KFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADN0_ll - - SUBROUTINE FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - INTEGER,DIMENSION(:),TARGET,INTENT(OUT)::KFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADN1_ll - - SUBROUTINE FMREADN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER, DIMENSION(:,:),TARGET,INTENT(OUT)::KFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADN2_ll - - SUBROUTINE FMREADL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - LOGICAL, INTENT(OUT)::OFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADL0_ll - - SUBROUTINE FMREADL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - LOGICAL, DIMENSION(:), INTENT(OUT)::OFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADL1_ll - - SUBROUTINE FMREADC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - CHARACTER(LEN=*), INTENT(OUT)::HFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADC0_ll - - SUBROUTINE FMREADT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_TYPE_DATE - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! Field form - TYPE (DATE_TIME), INTENT(OUT)::TFIELD ! array containing the data field - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREADT0_ll - -END INTERFACE - -INTERFACE - SUBROUTINE FMREAD_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints - CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' - REAL, DIMENSION(:,:,:),TARGET, INTENT(OUT)::PLB ! array containing the LB field - INTEGER, INTENT(IN) :: KRIM ! size of the LB area - INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM - INTEGER, INTENT(OUT)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(OUT)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(OUT)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMREAD_LB -END INTERFACE -! -END MODULE MODI_FMREAD_ll diff --git a/src/LIB/SURCOUCHE/src/modi_fmwrit.f90 b/src/LIB/SURCOUCHE/src/modi_fmwrit.f90 deleted file mode 100644 index 3f2661be2..000000000 --- a/src/LIB/SURCOUCHE/src/modi_fmwrit.f90 +++ /dev/null @@ -1,301 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- - -MODULE MODI_FMWRIT_ll -! -INTERFACE FMWRIT - SUBROUTINE FMWRITX0_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL, INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX0_ll - - SUBROUTINE FMWRITX1_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX1_ll - - SUBROUTINE FMWRITX2_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX2_ll - - SUBROUTINE FMWRITX3_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX3_ll - - SUBROUTINE FMWRITX4_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX4_ll - - SUBROUTINE FMWRITX5_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX5_ll - - SUBROUTINE FMWRITX6_ll(HFILEM,HRECFM,HFIPRI,HDIR,PFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITX6_ll - - SUBROUTINE FMWRITN0_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER, INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITN0_ll - - SUBROUTINE FMWRITN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER,DIMENSION(:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITN1_ll - - SUBROUTINE FMWRITN2_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) ::KFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITN2_ll - - SUBROUTINE FMWRITL0_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - LOGICAL, INTENT(IN) ::OFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITL0_ll - - SUBROUTINE FMWRITL1_ll(HFILEM,HRECFM,HFIPRI,HDIR,OFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - LOGICAL,DIMENSION(:),INTENT(IN) ::OFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITL1_ll - - SUBROUTINE FMWRITC0_ll(HFILEM,HRECFM,HFIPRI,HDIR,HFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - CHARACTER(LEN=*), INTENT(IN) ::HFIELD ! array containing the data field - INTEGER, INTENT(IN)::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN)::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN)::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITC0_ll - - SUBROUTINE FMWRITT0_ll(HFILEM,HRECFM,HFIPRI,HDIR,TFIELD,KGRID,& - KLENCH,HCOMMENT,KRESP) - USE MODD_TYPE_DATE - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to read - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HDIR ! field form - TYPE (DATE_TIME), INTENT(IN) ::TFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITT0_ll -END INTERFACE - -INTERFACE - SUBROUTINE FMWRIT_LB(HFILEM,HRECFM,HFIPRI,HLBTYPE,PLB,KRIM,KL3D,& - & KGRID,KLENCH,HCOMMENT,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to be written - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! file for prints in FM - CHARACTER(LEN=*), INTENT(IN) ::HLBTYPE! 'LBX','LBXU','LBY' or 'LBYV' - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PLB ! array containing the LB field - INTEGER, INTENT(IN) ::KRIM ! size of the LB area - INTEGER, INTENT(IN) ::KL3D ! size of the LB array in FM - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - INTEGER, INTENT(IN) ::KLENCH ! length of comment string - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRIT_LB -END INTERFACE - -INTERFACE FMWRITBOX - SUBROUTINE FMWRITBOXX2_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:),TARGET, INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITBOXX2_ll - - SUBROUTINE FMWRITBOXX3_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITBOXX3_ll - - SUBROUTINE FMWRITBOXX4_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITBOXX4_ll - - SUBROUTINE FMWRITBOXX5_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITBOXX5_ll - - SUBROUTINE FMWRITBOXX6_ll(HFILEM,HRECFM,HFIPRI,HBUDGET,PFIELD,KGRID,& - HCOMMENT,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP) - CHARACTER(LEN=*), INTENT(IN) ::HFILEM ! FM-file name - CHARACTER(LEN=*), INTENT(IN) ::HRECFM ! name of the article to write - CHARACTER(LEN=*), INTENT(IN) ::HFIPRI ! output file for error messages - CHARACTER(LEN=*), INTENT(IN) ::HBUDGET ! 'BUDGET' (budget) or 'OTHER' (MesoNH field) - REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) ::PFIELD ! array containing the data field - INTEGER, INTENT(IN) ::KGRID ! C-grid indicator (u,v,w,T) - CHARACTER(LEN=*), INTENT(IN) ::HCOMMENT ! comment string - INTEGER, INTENT(IN) ::KXOBOX ! - INTEGER, INTENT(IN) ::KXEBOX ! Global coordinates of the box - INTEGER, INTENT(IN) ::KYOBOX ! - INTEGER, INTENT(IN) ::KYEBOX ! - INTEGER, INTENT(OUT)::KRESP ! return-code - END SUBROUTINE FMWRITBOXX6_ll -END INTERFACE -! -END MODULE MODI_FMWRIT_ll diff --git a/src/MNH/mnh2lpdm_ech.f90 b/src/MNH/mnh2lpdm_ech.f90 index fb4effaa6..b81644ab4 100644 --- a/src/MNH/mnh2lpdm_ech.f90 +++ b/src/MNH/mnh2lpdm_ech.f90 @@ -35,7 +35,6 @@ USE MODE_FMREAD ! USE MODI_IO_LL USE MODI_FM_LL -USE MODI_FMREAD_LL USE MODI_INI_CST ! IMPLICIT NONE diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index a55957ed6..6f518eb00 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -46,7 +46,6 @@ USE MODE_IO_ll USE MODE_MODELN_HANDLER USE MODI_XYTOLATLON ! -USE MODI_FMREAD_LL USE MODI_INI_CST USE MODI_READ_HGRID USE MODI_TEMPORAL_DIST -- GitLab