7c121aa5973596d4c9b1c4bc4cb12ada5536860c
[MNH-git_open_source-lfs.git] / src / SURFEX / read_surf_field2d.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE READ_SURF_FIELD2D( HPROGRAM,PFIELD2D,HFIELDNAME,HCOMMENT,HDIR,KRESP)
7 !     #####################################
8 !
9 !!****  *READ_SURF_FIELD2D* - reads surfex field in input file using READ_SURF,
10 !!                           patch by patch if needed in MESONH
11 !!                           with Z-parallel IO in MESO-NH, we force surfex to write 2D fields
12 !!                           because Z-parallel IO are not supported for 2D SURFEX fields.
13 !!                        
14 !!
15 !!    PURPOSE
16 !!    -------
17 !!      reads surfex field in output file using WRITE_SURF,
18 !!      patch by patch if needed in MESONH
19 !!      and NB_PROCIO_R > 1
20 !!      examples of HFIELDNAME : 'TG', 'soil depth from ecoclimap'
21 !!      with Z-parallel IO in MESO-NH, we force surfex to write 2D fields
22 !!      because Z-parallel IO are not supported for 2D SURFEX fields.
23 !!
24 !!**  METHOD
25 !!    ------
26 !!
27 !!    EXTERNAL
28 !!    --------
29 !!
30 !!
31 !!    IMPLICIT ARGUMENTS
32 !!    ------------------
33 !!
34 !!    REFERENCE
35 !!    ---------
36 !!
37 !!
38 !!    AUTHOR
39 !!    ------
40 !!      M.Moge   *LA - UPS*     
41 !!
42 !!    MODIFICATIONS
43 !!    -------------
44 !!      Original    08/01/2016
45 !!      J.Escobar : 20/04/2016 : Pb IOZ/NETCDF , add optional KRESP error code
46 !!
47 !-------------------------------------------------------------------------------
48 !
49 !*       0.    DECLARATIONS
50 !              ------------
51 !
52 USE MODD_SURF_PAR, ONLY : NUNDEF
53 !
54 USE MODI_READ_SURF
55 #ifdef MNH
56 USE MODI_GET_NB_PROCIO_READ_MNH
57 #endif
58 !
59 !
60 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
61 USE PARKIND1  ,ONLY : JPRB
62 !
63 IMPLICIT NONE
64 !
65 !*       0.1   Declarations of arguments
66 !              -------------------------
67 !
68 CHARACTER(LEN=6),                 INTENT(IN) :: HPROGRAM     ! calling program
69 REAL, DIMENSION(:,:),          INTENT(INOUT) :: PFIELD2D     ! 2D field to be read
70 CHARACTER(LEN=12),                INTENT(IN) :: HFIELDNAME   ! name of the field PFIELD2D. Example : 'X_Y_TG'
71 CHARACTER(LEN=*), OPTIONAL,      INTENT(OUT) :: HCOMMENT   !comment string
72 CHARACTER(LEN=1),OPTIONAL,        INTENT(IN) :: HDIR ! type of field :
73 !                                             ! 'H' : field with
74 !                                             !       horizontal spatial dim.
75 !                                             ! '-' : no horizontal dim.
76 INTEGER,OPTIONAL,               INTENT(OUT)  :: KRESP         
77 !
78 !*       0.2   Declarations of local variables
79 !              -------------------------------
80 !
81 REAL, DIMENSION(SIZE(PFIELD2D,1)) :: ZWORK
82 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
83 INTEGER           :: IPATCH         ! number of patches in PFIELD2D
84 CHARACTER(LEN=100):: YCOMMENT       ! Comment string
85 CHARACTER(LEN=16) :: YRECFM         ! Name of the article to be read
86 CHARACTER(LEN=4 ) :: YPATCH         ! current patch
87 INTEGER           :: INB_PROCIO     ! number of processes used for Z-parallel IO with MESO-NH
88 !
89 CHARACTER(LEN=1)   :: YDIR
90 INTEGER :: JPATCH  ! loop counter on patches
91 REAL(KIND=JPRB) :: ZHOOK_HANDLE
92 !
93 !------------------------------------------------------------------------------
94 !
95 IF (PRESENT(KRESP)) KRESP = -1
96 !
97 IF (LHOOK) CALL DR_HOOK('READ_SURF_FIELD2D',0,ZHOOK_HANDLE)
98 !
99 YDIR = 'H'
100 IF (PRESENT(HDIR)) YDIR = HDIR
101 !
102 IPATCH = SIZE( PFIELD2D, 2 )
103 !
104 INB_PROCIO = 1
105 #ifdef MNH
106 IF (HPROGRAM=='MESONH') THEN
107   CALL GET_NB_PROCIO_READ_MNH( INB_PROCIO, IRESP )
108 ENDIF
109 #endif
110 !
111 IF ( INB_PROCIO > 1 ) THEN
112 !
113   DO JPATCH=1,IPATCH
114     YRECFM=ADJUSTL(HFIELDNAME(:LEN_TRIM(HFIELDNAME)))
115     WRITE(YPATCH,'(I4.4)') JPATCH
116     IF ( IPATCH > 1 ) THEN
117       YRECFM=ADJUSTL(YRECFM(:LEN_TRIM(YRECFM)))//YPATCH
118     ENDIF
119     CALL READ_SURF(HPROGRAM,YRECFM,PFIELD2D(:,JPATCH),IRESP,HCOMMENT=YCOMMENT,HDIR=YDIR)
120   ENDDO
121 !
122 ELSE
123 !
124   YRECFM=ADJUSTL(HFIELDNAME(:LEN_TRIM(HFIELDNAME)))
125   CALL READ_SURF(HPROGRAM,YRECFM,PFIELD2D(:,:),IRESP,HCOMMENT=YCOMMENT,HDIR=YDIR)
126 !
127 ENDIF
128 !
129 IF (PRESENT(HDIR)) HCOMMENT = YCOMMENT
130 !
131 IF (LHOOK) CALL DR_HOOK('READ_SURF_FIELD2D',1,ZHOOK_HANDLE)
132 !
133 IF (PRESENT(KRESP)) KRESP = IRESP
134 !-------------------------------------------------------------------------------
135 !
136       END SUBROUTINE READ_SURF_FIELD2D