SURFEX v8.1
General documentation of Surfex
prep_seaflux_netcdf.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 prep_seaflux_netcdf(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
7 ! #################################################################################
8 !
9 !!**** *PREP_SEAFLUX_NETCDF* - prepares SEAFLUX fields from oceanic analyses in NETCDF
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!** METHOD
15 !! ------
16 !!
17 !! REFERENCE
18 !! ---------
19 !!
20 !!
21 !! AUTHOR
22 !! ------
23 !! C. Lebeaupin Brossier
24 !!
25 !! MODIFICATIONS
26 !! -------------
27 !! Original 01/2008
28 !! Modified 09/2013 : S. Senesi : extends to SSS and SIC fields
29 !!------------------------------------------------------------------
30 !
32 !
33 !USE MODD_TYPE_DATE_SURF
34 !
35 USE modd_surfex_mpi, ONLY : nrank, npio, ncomm, nproc
38 !
39 !
40 USE yomhook ,ONLY : lhook, dr_hook
41 USE parkind1 ,ONLY : jprb
42 !
43 IMPLICIT NONE
44 !
45 #ifdef SFX_MPI
46 include "mpif.h"
47 #endif
48 !
49 !* 0.1 declarations of arguments
50 !
51  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
52  CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field
53  CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of file
54 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing
55 REAL,DIMENSION(:,:), POINTER :: PFIELD ! field to interpolate horizontally
56 !
57 !* 0.2 declarations of local variables
58 !
59 !TYPE (DATE_TIME) :: TZTIME_GRIB ! current date and time
60 !CHARACTER(LEN=6) :: YINMODEL ! model from which GRIB file originates
61 REAL, DIMENSION(:), POINTER :: ZFIELD ! field read
62  CHARACTER(LEN=28) :: YNCVAR
63 INTEGER :: INFOMPI
64 REAL(KIND=JPRB) :: ZHOOK_HANDLE
65 !
66 !-------------------------------------------------------------------------------------
67 !
68 !* 1. Grid type
69 ! ---------
70 IF (lhook) CALL dr_hook('PREP_SEAFLUX_NETCDF',0,zhook_handle)
71 cingrid_type='LATLON '
72 !
73 !* 2. Reading of field
74 ! ----------------
75 !-----------------
76 SELECT CASE(hsurf)
77 !-----------------
78 !
79 !* 2.1 Orography
80 ! ---------
81 !
82  CASE('ZS ')
83  yncvar='topo'
84  CALL prep_netcdf_grid(hfile,yncvar)
85  IF (nrank==npio) THEN
86  CALL read_netcdf_zs_sea(hfile,yncvar,zfield)
87  ALLOCATE(pfield(max(1,nilength),1))
88  pfield(:,1) = zfield(:)
89  DEALLOCATE(zfield)
90  ELSE
91  ALLOCATE(pfield(0,0))
92  ENDIF
93 !
94 !
95 !* 2.2 Temperature profiles
96 ! --------------------
97 !
98  CASE('SST ','SSS ','SIC ')
99  IF ( hsurf == 'SST ') THEN
100  yncvar='temperature'
101  ELSE IF ( hsurf == 'SSS ') THEN
102  yncvar='sss'
103  ELSE IF ( hsurf == 'SIC ') THEN
104  yncvar='sic'
105  END IF
106  CALL prep_netcdf_grid(hfile,yncvar)
107  IF (nrank==npio) THEN
108  CALL read_netcdf_sst(hfile,yncvar,zfield)
109  ALLOCATE(pfield(max(1,nilength),1))
110  pfield(:,1) = zfield(:)
111  DEALLOCATE(zfield)
112  ENDIF
113 !
114 END SELECT
115 !
116 IF (nproc>1) THEN
117 #ifdef SFX_MPI
118  CALL mpi_bcast(cinterp_type,len(cinterp_type),mpi_character,npio,ncomm,infompi)
119 #endif
120  IF (trim(cinterp_type)=="UNIF") THEN
121  IF (nrank/=npio) ALLOCATE(pfield(1,1))
122 #ifdef SFX_MPI
123  CALL mpi_bcast(pfield(1:1,1:1),kind(pfield)/4,mpi_real,npio,ncomm,infompi)
124 #endif
125  ELSEIF (nrank/=npio) THEN
126  ALLOCATE(pfield(0,0))
127  ENDIF
128 ENDIF
129 !
130 IF (lhook) CALL dr_hook('PREP_SEAFLUX_NETCDF',1,zhook_handle)
131 !-------------------------------------------------------------------------------------
132 END SUBROUTINE prep_seaflux_netcdf
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
character(len=10) cingrid_type
Definition: modd_prep.F90:39
subroutine prep_netcdf_grid(HFILENAME, HNCVARNAME)
character(len=6) cinterp_type
Definition: modd_prep.F90:40
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_netcdf_zs_sea(HFILENAME, HNCVARNAME, PFIELD)
logical lhook
Definition: yomhook.F90:15
subroutine prep_seaflux_netcdf(HPROGRAM, HSURF, HFILE, KLUOUT, PFIELD)
subroutine read_netcdf_sst(HFILENAME, HNCVARNAME, PFIELD)