SURFEX v8.1
General documentation of Surfex
write_surf_field2d.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE write_surf_field2d(HSELECT,HPROGRAM,PFIELD2D,HFIELDNAME,HCOMMENT,HCOMMENTUNIT,HDIR,HNAM_DIM)
7 ! #####################################
8 !
9 !!**** *WRITE_SURF_FIELD2D* - writes surfex field in output file using WRITE_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 !! writes surfex field in output file using WRITE_SURF,
18 !! patch by patch if needed in MESONH
19 !! and NB_PROCIO_W > 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 !!
46 !-------------------------------------------------------------------------------
47 !
48 !* 0. DECLARATIONS
49 ! ------------
50 !
51 USE modd_surf_par, ONLY : nundef
52 !
54 #ifdef SFX_MNH
55 USE modi_get_nb_procio_write_mnh
56 #endif
57 !
58 !
59 USE yomhook ,ONLY : lhook, dr_hook
60 USE parkind1 ,ONLY : jprb
61 !
62 IMPLICIT NONE
63 !
64 !* 0.1 Declarations of arguments
65 ! -------------------------
66 !
67  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
68  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
69 REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD2D ! 2D field to be written
70  CHARACTER(LEN=12), INTENT(IN) :: HFIELDNAME ! name of the field PFIELD2D. Example : 'X_Y_TG'
71  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
72  CHARACTER(LEN=100), INTENT(IN) :: HCOMMENTUNIT ! unit of the datas in PFIELD2D
73  CHARACTER(LEN=1),OPTIONAL, INTENT(IN) :: HDIR ! type of field :
74 ! ! 'H' : field with
75 ! ! horizontal spatial dim.
76 ! ! '-' : no horizontal dim.
77  CHARACTER(LEN=16), OPTIONAL, INTENT(IN) :: HNAM_DIM
78  !
79 !* 0.2 Declarations of local variables
80 ! -------------------------------
81 !
82 INTEGER :: IRESP ! IRESP : return-code if a problem appears
83 INTEGER :: IPATCH ! number of patches in PFIELD2D
84  CHARACTER(LEN=16) :: YRECFM ! Name of the article to be read
85  CHARACTER(LEN=4 ) :: YPATCH ! current patch
86  CHARACTER(LEN=100):: YCOMMENT ! Comment string
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 !
96 IF (lhook) CALL dr_hook('WRITE_SURF_FIELD2D',0,zhook_handle)
97 !
98 ydir = 'H'
99 IF (PRESENT(hdir)) ydir = hdir
100 !
101 ipatch = SIZE( pfield2d, 2 )
102 !
103 inb_procio = 1
104 #ifdef SFX_MNH
105 IF (hprogram=='MESONH') THEN
106  CALL get_nb_procio_write_mnh( inb_procio, iresp )
107 ENDIF
108 #endif
109 !
110 IF ( inb_procio > 1 ) THEN
111 !
112  DO jpatch=1,ipatch
113  WRITE(ypatch,'(I4.4)') jpatch
114  ycomment=adjustl(hcomment(:len_trim(hcomment)))//'patch '//adjustl(ypatch(:len_trim(ypatch)))// &
115  ' ('//adjustl(hcommentunit(:len_trim(hcommentunit)))//')'
116  yrecfm=adjustl(hfieldname(:len_trim(hfieldname)))
117  IF ( ipatch > 1 ) THEN
118  yrecfm=adjustl(yrecfm(:len_trim(yrecfm)))//ypatch
119  ENDIF
120  IF (PRESENT(hnam_dim)) THEN
121  CALL write_surf(hselect,hprogram,yrecfm,pfield2d(:,jpatch),iresp,hcomment=ycomment,hdir=ydir,hnam_dim=hnam_dim)
122  ELSE
123  CALL write_surf(hselect,hprogram,yrecfm,pfield2d(:,jpatch),iresp,hcomment=ycomment,hdir=ydir)
124  ENDIF
125  ENDDO
126 !
127 ELSE
128 !
129  ycomment=adjustl(hcomment(:len_trim(hcomment)))// &
130  ' ('//adjustl(hcommentunit(:len_trim(hcommentunit)))//')'
131  yrecfm=adjustl(hfieldname(:len_trim(hfieldname)))
132  IF (PRESENT(hnam_dim)) THEN
133  CALL write_surf(hselect,hprogram,yrecfm,pfield2d(:,:),iresp,hcomment=ycomment,hdir=ydir,hnam_dim=hnam_dim)
134  ELSE
135  CALL write_surf(hselect,hprogram,yrecfm,pfield2d(:,:),iresp,hcomment=ycomment,hdir=ydir)
136  ENDIF
137 !
138 ENDIF
139 !
140 IF (lhook) CALL dr_hook('WRITE_SURF_FIELD2D',1,zhook_handle)
141 !
142 !-------------------------------------------------------------------------------
143 !
144  END SUBROUTINE write_surf_field2d
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15
subroutine write_surf_field2d(HSELECT, HPROGRAM, PFIELD2D, HFIELDNAME