SURFEX v8.1
General documentation of Surfex
write_field_2d_patch.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 SUBROUTINE write_field_2d_patch(HSELECT,HPROGRAM,HRECFM,HCOMMENT,KP,KMASK,PFIELD_IN,KSIZE,HNAM_DIM,&
6  PWORK_WR)
7 !
9 !
11 !
12 USE modd_surf_par, ONLY : xundef
13 !
16 !
17 USE yomhook ,ONLY : lhook, dr_hook
18 USE parkind1 ,ONLY : jprb
19 !
20 IMPLICIT NONE
21 !
22  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
23  CHARACTER(LEN=*), INTENT(IN) :: HPROGRAM
24  CHARACTER(LEN=*), INTENT(IN) :: HRECFM
25  CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
26 INTEGER, INTENT(IN) :: KP
27 INTEGER, DIMENSION(:), INTENT(IN) :: KMASK
28 REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD_IN
29 INTEGER, INTENT(IN) :: KSIZE
30  CHARACTER(LEN=*), INTENT(IN) :: HNAM_DIM
31 REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PWORK_WR
32 !
33 REAL, DIMENSION(KSIZE,SIZE(PFIELD_IN,2)) :: ZWORK
34  CHARACTER(LEN=12) :: YRECFM
35  CHARACTER(LEN=2) :: YPAT
36 INTEGER :: IRESP
37 REAL(KIND=JPRB) :: ZHOOK_HANDLE
38 !
39 IF (lhook) CALL dr_hook('WRITE_FIELD_2D_PATCH',0,zhook_handle)
40 !
41 yrecfm=adjustl(hrecfm(:len_trim(hrecfm)))
42  CALL unpack_same_rank(kmask,pfield_in,zwork,xundef)
43 !
44 IF (lsplit_patch) THEN
45  !
46  IF (kp/=0) THEN
47  WRITE(ypat,'(I2)') kp
48  yrecfm=adjustl(yrecfm(:len_trim(yrecfm)))//'P'//adjustl(ypat(:len_trim(ypat)))
49  ENDIF
50  CALL write_surf(hselect,hprogram,yrecfm,zwork,iresp,hcomment=hcomment,hnam_dim=hnam_dim)
51  !
52 ELSE
53  !
54  IF (kp/=0) THEN
55  pwork_wr(:,:,kp) = zwork(:,:)
56  IF ( kp==SIZE(pwork_wr,2) ) THEN
57  CALL write_surf(hselect,hprogram,yrecfm,pwork_wr,iresp,hcomment=hcomment)
58  ENDIF
59  ELSE
60  CALL write_surf(hselect,hprogram,yrecfm,zwork,iresp,hcomment=hcomment)
61  ENDIF
62  !
63 ENDIF
64 !
65 IF (lhook) CALL dr_hook('WRITE_FIELD_2D_PATCH',1,zhook_handle)
66 !
67 END SUBROUTINE write_field_2d_patch
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine write_field_2d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, PFIELD_IN, KSIZE, HNAM_DIM, PWORK_WR)
logical lhook
Definition: yomhook.F90:15