From d60b35e844e04d222cc1f3d8de68c47f19a5e280 Mon Sep 17 00:00:00 2001 From: Gaelle DELAUTIER <gaelle.delautier@meteo.fr> Date: Tue, 5 Jun 2018 09:59:48 +0200 Subject: [PATCH] Gaelle 5/6/18 : mv directory OASIS in MNH and SURFEX --- src/{OASIS => }/MNH/mnh_oasis_define.F90 | 0 src/{OASIS => }/MNH/mnh_oasis_grid.F90 | 0 src/{OASIS => }/MNH/mnh_oasis_recv.F90 | 0 src/{OASIS => }/MNH/mnh_oasis_send.F90 | 0 src/OASIS/SURFEX/coare30_flux.F90 | 543 ------ src/OASIS/SURFEX/coare30_seaflux.F90 | 266 --- src/OASIS/SURFEX/coupling_seafluxn.F90 | 789 --------- src/OASIS/SURFEX/dealloc_seafluxn.F90 | 95 - src/OASIS/SURFEX/default_prep_seaflux.F90 | 106 -- src/OASIS/SURFEX/default_seaflux.F90 | 112 -- src/OASIS/SURFEX/diag_cpl_esm_sea.F90 | 164 -- src/OASIS/SURFEX/diag_inline_seafluxn.F90 | 309 ---- src/OASIS/SURFEX/diag_seaflux_initn.F90 | 239 --- src/OASIS/SURFEX/get_sfx_sea.F90 | 250 --- src/OASIS/SURFEX/get_sfxcpln.F90 | 226 --- src/OASIS/SURFEX/init_seafluxn.F90 | 453 ----- src/OASIS/SURFEX/modd_prep_seaflux.F90 | 57 - src/OASIS/SURFEX/modd_seafluxn.F90 | 249 --- src/OASIS/SURFEX/modd_sfx_oasis.F90 | 158 -- .../SURFEX/mode_read_netcdf_mercator.F90 | 1528 ----------------- src/OASIS/SURFEX/modn_prep_seaflux.F90 | 71 - src/OASIS/SURFEX/modn_seafluxn.F90 | 321 ---- src/OASIS/SURFEX/modn_sfx_oasis.F90 | 176 -- src/OASIS/SURFEX/prep_hor_seaflux_field.F90 | 231 --- src/OASIS/SURFEX/prep_seaflux.F90 | 251 --- src/OASIS/SURFEX/prep_seaflux_netcdf.F90 | 154 -- src/OASIS/SURFEX/prep_seaflux_unif.F90 | 103 -- src/OASIS/SURFEX/put_sfx_sea.F90 | 290 ---- src/OASIS/SURFEX/put_sfxcpln.F90 | 186 -- src/OASIS/SURFEX/read_lcover.F90 | 119 -- src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 | 64 - src/OASIS/SURFEX/read_namelists_seafluxn.F90 | 71 - src/OASIS/SURFEX/read_prep_seaflux_conf.F90 | 203 --- src/OASIS/SURFEX/read_seafluxn.F90 | 275 --- src/OASIS/SURFEX/sfx_oasis_define.F90 | 472 ----- src/OASIS/SURFEX/sfx_oasis_init.F90 | 355 ---- src/OASIS/SURFEX/sfx_oasis_read_nam.F90 | 568 ------ src/OASIS/SURFEX/sfx_oasis_recv.F90 | 324 ---- src/OASIS/SURFEX/sfx_oasis_send.F90 | 416 ----- src/OASIS/SURFEX/write_lcover.F90 | 99 -- src/OASIS/SURFEX/writesurf_seafluxn.F90 | 226 --- src/{OASIS => }/SURFEX/get_sfx_wave.F90 | 0 src/{OASIS => }/SURFEX/put_sfx_wave.F90 | 0 43 files changed, 10519 deletions(-) rename src/{OASIS => }/MNH/mnh_oasis_define.F90 (100%) rename src/{OASIS => }/MNH/mnh_oasis_grid.F90 (100%) rename src/{OASIS => }/MNH/mnh_oasis_recv.F90 (100%) rename src/{OASIS => }/MNH/mnh_oasis_send.F90 (100%) delete mode 100644 src/OASIS/SURFEX/coare30_flux.F90 delete mode 100644 src/OASIS/SURFEX/coare30_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/coupling_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/dealloc_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/default_prep_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/default_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/diag_cpl_esm_sea.F90 delete mode 100644 src/OASIS/SURFEX/diag_inline_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/diag_seaflux_initn.F90 delete mode 100644 src/OASIS/SURFEX/get_sfx_sea.F90 delete mode 100644 src/OASIS/SURFEX/get_sfxcpln.F90 delete mode 100644 src/OASIS/SURFEX/init_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/modd_prep_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/modd_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/modd_sfx_oasis.F90 delete mode 100644 src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 delete mode 100644 src/OASIS/SURFEX/modn_prep_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/modn_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/modn_sfx_oasis.F90 delete mode 100644 src/OASIS/SURFEX/prep_hor_seaflux_field.F90 delete mode 100644 src/OASIS/SURFEX/prep_seaflux.F90 delete mode 100644 src/OASIS/SURFEX/prep_seaflux_netcdf.F90 delete mode 100644 src/OASIS/SURFEX/prep_seaflux_unif.F90 delete mode 100644 src/OASIS/SURFEX/put_sfx_sea.F90 delete mode 100644 src/OASIS/SURFEX/put_sfxcpln.F90 delete mode 100644 src/OASIS/SURFEX/read_lcover.F90 delete mode 100644 src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/read_namelists_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/read_prep_seaflux_conf.F90 delete mode 100644 src/OASIS/SURFEX/read_seafluxn.F90 delete mode 100644 src/OASIS/SURFEX/sfx_oasis_define.F90 delete mode 100644 src/OASIS/SURFEX/sfx_oasis_init.F90 delete mode 100644 src/OASIS/SURFEX/sfx_oasis_read_nam.F90 delete mode 100644 src/OASIS/SURFEX/sfx_oasis_recv.F90 delete mode 100644 src/OASIS/SURFEX/sfx_oasis_send.F90 delete mode 100644 src/OASIS/SURFEX/write_lcover.F90 delete mode 100644 src/OASIS/SURFEX/writesurf_seafluxn.F90 rename src/{OASIS => }/SURFEX/get_sfx_wave.F90 (100%) rename src/{OASIS => }/SURFEX/put_sfx_wave.F90 (100%) diff --git a/src/OASIS/MNH/mnh_oasis_define.F90 b/src/MNH/mnh_oasis_define.F90 similarity index 100% rename from src/OASIS/MNH/mnh_oasis_define.F90 rename to src/MNH/mnh_oasis_define.F90 diff --git a/src/OASIS/MNH/mnh_oasis_grid.F90 b/src/MNH/mnh_oasis_grid.F90 similarity index 100% rename from src/OASIS/MNH/mnh_oasis_grid.F90 rename to src/MNH/mnh_oasis_grid.F90 diff --git a/src/OASIS/MNH/mnh_oasis_recv.F90 b/src/MNH/mnh_oasis_recv.F90 similarity index 100% rename from src/OASIS/MNH/mnh_oasis_recv.F90 rename to src/MNH/mnh_oasis_recv.F90 diff --git a/src/OASIS/MNH/mnh_oasis_send.F90 b/src/MNH/mnh_oasis_send.F90 similarity index 100% rename from src/OASIS/MNH/mnh_oasis_send.F90 rename to src/MNH/mnh_oasis_send.F90 diff --git a/src/OASIS/SURFEX/coare30_flux.F90 b/src/OASIS/SURFEX/coare30_flux.F90 deleted file mode 100644 index ac88af8c3..000000000 --- a/src/OASIS/SURFEX/coare30_flux.F90 +++ /dev/null @@ -1,543 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE COARE30_FLUX (S,PZ0SEA,PTA,PEXNA,PRHOA,PSST,PEXNS,PQA, & - PVMOD,PZREF,PUREF,PPS,PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI,& - PRESA,PRAIN,PZ0HSEA,PHS,PTP) -! ####################################################################### -! -! -!!**** *COARE25_FLUX* -!! -!! PURPOSE -!! ------- -! Calculate the surface fluxes of heat, moisture, and momentum over -! sea surface with bulk algorithm COARE3.0. -! -!!** METHOD -!! ------ -! transfer coefficients were obtained using a dataset which combined COARE -! data with those from three other ETL field experiments, and reanalysis of -! the HEXMAX data (DeCosmos et al. 1996). -! ITERMAX=3 -! Take account of the surface gravity waves on the velocity roughness and -! hence the momentum transfer coefficient -! NGRVWAVES=0 no gravity waves action (Charnock) !default value -! NGRVWAVES=1 wave age parameterization of Oost et al. 2002 -! NGRVWAVES=2 model of Taylor and Yelland 2001 -! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! Fairall et al (2003), J. of Climate, vol. 16, 571-591 -!! Fairall et al (1996), JGR, 3747-3764 -!! Gosnell et al (1995), JGR, 437-442 -!! Fairall et al (1996), JGR, 1295-1308 -!! -!! AUTHOR -!! ------ -!! C. Lebeaupin *Météo-France* (adapted from C. Fairall's code) -!! -!! MODIFICATIONS -!! ------------- -!! Original 1/06/2006 -!! B. Decharme 06/2009 limitation of Ri -!! B. Decharme 09/2012 Bug in Ri calculation and limitation of Ri in surface_ri.F90 -!! B. Decharme 06/2013 bug in z0 (output) computation -!! M.N. Bouin 03/2014 possibility of wave parameters from external source -!! C. Lebeaupin 03/2014 bug if PTA=PSST and PEXNA=PEXNS: set a minimum value -!! add abort if no convergence -!! C. Lebeaupin 06/2014 itermax=10 for low wind conditions (ZVMOD<=1) -!! J. Pianezze 11/2014 add coupling wave parameters -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_CSTS, ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, & - XLVTT, XCL, XCPD, XCPV, XRHOLW, XTT, & - XP00 -USE MODD_SURF_ATM, ONLY : XVZ0CM -! -USE MODD_SFX_OASIS, ONLY : LCPL_WAVE -! -USE MODD_SURF_PAR, ONLY : XUNDEF, XSURF_EPSILON -USE MODD_WATER_PAR -! -USE MODI_SURFACE_RI -USE MODI_WIND_THRESHOLD -USE MODE_COARE30_PSI -! -USE MODE_THERMOS -! -! -USE MODI_ABOR1_SFX -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -! -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -! -REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature at atm. level (K) -REAL, DIMENSION(:), INTENT(IN) :: PQA ! air humidity at atm. level (kg/kg) -REAL, DIMENSION(:), INTENT(IN) :: PEXNA ! Exner function at atm. level -REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density at atm. level -REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of wind at atm. wind level (m/s) -REAL, DIMENSION(:), INTENT(IN) :: PZREF ! atm. level for temp. and humidity (m) -REAL, DIMENSION(:), INTENT(IN) :: PUREF ! atm. level for wind (m) -REAL, DIMENSION(:), INTENT(IN) :: PSST ! Sea Surface Temperature (K) -REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! Exner function at sea surface -REAL, DIMENSION(:), INTENT(IN) :: PPS ! air pressure at sea surface (Pa) -REAL, DIMENSION(:), INTENT(IN) :: PRAIN !precipitation rate (kg/s/m2) -REAL, DIMENSION(:), INTENT(IN) :: PHS ! wave significant height -REAL, DIMENSION(:), INTENT(IN) :: PTP ! wave peak period -! -REAL, DIMENSION(:), INTENT(INOUT) :: PZ0SEA! roughness length over the ocean -! -! surface fluxes : latent heat, sensible heat, friction fluxes -REAL, DIMENSION(:), INTENT(OUT) :: PSFTH ! heat flux (W/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSFTQ ! water flux (kg/m2/s) -REAL, DIMENSION(:), INTENT(OUT) :: PUSTAR! friction velocity (m/s) -! -! diagnostics -REAL, DIMENSION(:), INTENT(OUT) :: PQSAT ! humidity at saturation -REAL, DIMENSION(:), INTENT(OUT) :: PCD ! heat drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCDN ! momentum drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCH ! neutral momentum drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCE !transfer coef. for latent heat flux -REAL, DIMENSION(:), INTENT(OUT) :: PRI ! Richardson number -REAL, DIMENSION(:), INTENT(OUT) :: PRESA ! aerodynamical resistance -REAL, DIMENSION(:), INTENT(OUT) :: PZ0HSEA ! heat roughness length -! -! -!* 0.2 declarations of local variables -! -REAL, DIMENSION(SIZE(PTA)) :: ZVMOD ! wind intensity -REAL, DIMENSION(SIZE(PTA)) :: ZPA ! Pressure at atm. level -REAL, DIMENSION(SIZE(PTA)) :: ZTA ! Temperature at atm. level -REAL, DIMENSION(SIZE(PTA)) :: ZQASAT ! specific humidity at saturation at atm. level (kg/kg) -! -REAL, DIMENSION(SIZE(PTA)) :: ZO ! rougness length ref -REAL, DIMENSION(SIZE(PTA)) :: ZWG ! gustiness factor (m/s) -! -REAL, DIMENSION(SIZE(PTA)) :: ZDU,ZDT,ZDQ,ZDUWG !differences -! -REAL, DIMENSION(SIZE(PTA)) :: ZUSR !velocity scaling parameter "ustar" (m/s) = friction velocity -REAL, DIMENSION(SIZE(PTA)) :: ZTSR !temperature sacling parameter "tstar" (degC) -REAL, DIMENSION(SIZE(PTA)) :: ZQSR !humidity scaling parameter "qstar" (kg/kg) -! -REAL, DIMENSION(SIZE(PTA)) :: ZU10,ZT10 !vertical profils (10-m height) -REAL, DIMENSION(SIZE(PTA)) :: ZVISA !kinematic viscosity of dry air -REAL, DIMENSION(SIZE(PTA)) :: ZO10,ZOT10 !roughness length at 10m -REAL, DIMENSION(SIZE(PTA)) :: ZCD,ZCT,ZCC -REAL, DIMENSION(SIZE(PTA)) :: ZCD10,ZCT10 !transfer coef. at 10m -REAL, DIMENSION(SIZE(PTA)) :: ZRIBU,ZRIBCU -REAL, DIMENSION(SIZE(PTA)) :: ZETU,ZL10 -! -REAL, DIMENSION(SIZE(PTA)) :: ZCHARN !Charnock number depends on wind module -REAL, DIMENSION(SIZE(PTA)) :: ZTWAVE,ZHWAVE,ZCWAVE,ZLWAVE !to compute gravity waves' impact -! -REAL, DIMENSION(SIZE(PTA)) :: ZZL,ZZTL!,ZZQL !Obukhovs stability - !param. z/l for u,T,q -REAL, DIMENSION(SIZE(PTA)) :: ZRR -REAL, DIMENSION(SIZE(PTA)) :: ZOT,ZOQ !rougness length ref -REAL, DIMENSION(SIZE(PTA)) :: ZPUZ,ZPTZ,ZPQZ !PHI funct. for u,T,q -! -REAL, DIMENSION(SIZE(PTA)) :: ZBF !constants to compute gustiness factor -! -REAL, DIMENSION(SIZE(PTA)) :: ZTAU !momentum flux (W/m2) -REAL, DIMENSION(SIZE(PTA)) :: ZHF !sensible heat flux (W/m2) -REAL, DIMENSION(SIZE(PTA)) :: ZEF !latent heat flux (W/m2) -REAL, DIMENSION(SIZE(PTA)) :: ZWBAR !diag for webb correction but not used here after -REAL, DIMENSION(SIZE(PTA)) :: ZTAUR !momentum flux due to rain (W/m2) -REAL, DIMENSION(SIZE(PTA)) :: ZRF !sensible heat flux due to rain (W/m2) -REAL, DIMENSION(SIZE(PTA)) :: ZCHN,ZCEN !neutral coef. for heat and vapor -! -REAL, DIMENSION(SIZE(PTA)) :: ZLV !latent heat constant -! -REAL, DIMENSION(SIZE(PTA)) :: ZTAC,ZDQSDT,ZDTMP,ZDWAT,ZALFAC ! for precipitation impact -REAL, DIMENSION(SIZE(PTA)) :: ZXLR ! vaporisation heat at a given temperature -REAL, DIMENSION(SIZE(PTA)) :: ZCPLW ! specific heat for water at a given temperature -! -REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR2 ! square of friction velocity -! -REAL, DIMENSION(SIZE(PTA)) :: ZDIRCOSZW! orography slope cosine (=1 on water!) -REAL, DIMENSION(SIZE(PTA)) :: ZAC ! Aerodynamical conductance -! -! -INTEGER, DIMENSION(SIZE(PTA)) :: ITERMAX ! maximum number of iterations -! -REAL :: ZRVSRDM1,ZRDSRV,ZR2 ! thermodynamic constants -REAL :: ZBETAGUST !gustiness factor -REAL :: ZZBL !atm. boundary layer depth (m) -REAL :: ZVISW !m2/s kinematic viscosity of water -REAL :: ZS !height of rougness length ref -REAL :: ZCH10 !transfer coef. at 10m -! -INTEGER :: J, JLOOP !loop indice -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -! 1. Initializations -! --------------- -! -! 1.1 Constants and parameters -! -IF (LHOOK) CALL DR_HOOK('COARE30_FLUX',0,ZHOOK_HANDLE) -! -ZRVSRDM1 = XRV/XRD-1. ! 0.607766 -ZRDSRV = XRD/XRV ! 0.62198 -ZR2 = 1.-ZRDSRV ! pas utilisé dans cette routine -ZBETAGUST = 1.2 ! value based on TOGA-COARE experiment -ZZBL = 600. ! Set a default value for boundary layer depth -ZS = 10. ! Standard heigth =10m -ZCH10 = 0.00115 -! -ZVISW = 1.E-6 -! -! 1.2 Array initialization by undefined values -! -PSFTH (:)=XUNDEF -PSFTQ (:)=XUNDEF -PUSTAR(:)=XUNDEF -! -PCD(:) = XUNDEF -PCDN(:) = XUNDEF -PCH(:) = XUNDEF -PCE(:) =XUNDEF -PRI(:) = XUNDEF -! -PRESA(:)=XUNDEF -! -!------------------------------------------------------------------------------- -! 2. INITIAL GUESS FOR THE ITERATIVE METHOD -! ------------------------------------- -! -! 2.0 Temperature -! -! Set a non-zero value for the temperature gradient -! -WHERE((PTA(:)*PEXNS(:)/PEXNA(:)-PSST(:))==0.) - ZTA(:)=PTA(:)-1E-3 -ELSEWHERE - ZTA(:)=PTA(:) -ENDWHERE - -! 2.1 Wind and humidity -! -! Sea surface specific humidity -! -PQSAT(:)=QSAT_SEAWATER(PSST(:),PPS(:)) -! -! Set a minimum value to wind -! -ZVMOD(:) = WIND_THRESHOLD(PVMOD(:),PUREF(:)) -! -! Specific humidity at saturation at the atm. level -! -ZPA(:) = XP00* (PEXNA(:)**(XCPD/XRD)) -ZQASAT(:) = QSAT(ZTA(:),ZPA(:)) -! -! -ZO(:) = 0.0001 -ZWG(:) = 0. -IF (S%LPWG) ZWG(:) = 0.5 -! -ZCHARN(:) = 0.011 -! -DO J=1,SIZE(PTA) - ! - ! 2.2 initial guess - ! - ZDU(J) = ZVMOD(J) !wind speed difference with surface current(=0) (m/s) - !initial guess for gustiness factor - ZDT(J) = -(ZTA(J)/PEXNA(J)) + (PSST(J)/PEXNS(J)) !potential temperature difference - ZDQ(J) = PQSAT(J)-PQA(J) !specific humidity difference - ! - ZDUWG(J) = SQRT(ZDU(J)**2+ZWG(J)**2) !wind speed difference including gustiness ZWG - ! - ! 2.3 initialization of neutral coefficients - ! - ZU10(J) = ZDUWG(J)*LOG(ZS/ZO(J))/LOG(PUREF(J)/ZO(J)) - ZUSR(J) = 0.035*ZU10(J) - ZVISA(J) = 1.326E-5*(1.+6.542E-3*(ZTA(J)-XTT)+& - 8.301E-6*(ZTA(J)-XTT)**2-4.84E-9*(ZTA(J)-XTT)**3) !Andrea (1989) CRREL Rep. 89-11 - ! - ZO10(J) = ZCHARN(J)*ZUSR(J)*ZUSR(J)/XG+0.11*ZVISA(J)/ZUSR(J) - ZCD(J) = (XKARMAN/LOG(PUREF(J)/ZO10(J)))**2 !drag coefficient - ZCD10(J)= (XKARMAN/LOG(ZS/ZO10(J)))**2 - ZCT10(J)= ZCH10/SQRT(ZCD10(J)) - ZOT10(J)= ZS/EXP(XKARMAN/ZCT10(J)) - ! - !------------------------------------------------------------------------------- - ! Grachev and Fairall (JAM, 1997) - ZCT(J) = XKARMAN/LOG(PZREF(J)/ZOT10(J)) !temperature transfer coefficient - ZCC(J) = XKARMAN*ZCT(J)/ZCD(J) !z/L vs Rib linear coef. - ! - ZRIBCU(J) = -PUREF(J)/(ZZBL*0.004*ZBETAGUST**3) !saturation or plateau Rib - !ZRIBU(J) =-XG*PUREF(J)*(ZDT(J)+ZRVSRDM1*(ZTA(J)-XTT)*ZDQ)/& - ! &((ZTA(J)-XTT)*ZDUWG(J)**2) - ZRIBU(J) = -XG*PUREF(J)*(ZDT(J)+ZRVSRDM1*ZTA(J)*ZDQ(J))/& - (ZTA(J)*ZDUWG(J)**2) - ! - IF (ZRIBU(J)<0.) THEN - ZETU(J) = ZCC(J)*ZRIBU(J)/(1.+ZRIBU(J)/ZRIBCU(J)) !Unstable G and F - ELSE - ZETU(J) = ZCC(J)*ZRIBU(J)/(1.+27./9.*ZRIBU(J)/ZCC(J))!Stable - ENDIF - ! - ZL10(J) = PUREF(J)/ZETU(J) !MO length - ! -ENDDO -! -! First guess M-O stability dependent scaling params. (u*,T*,q*) to estimate ZO and z/L (ZZL) -ZUSR(:) = ZDUWG(:)*XKARMAN/(LOG(PUREF(:)/ZO10(:))-PSIFCTU(PUREF(:)/ZL10(:))) -ZTSR(:) = -ZDT(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:))) -ZQSR(:) = -ZDQ(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:))) -! -IF (LCPL_WAVE .AND. .NOT. (ANY(S%XCHARN==0.0)) ) THEN - ZCHARN(:) = S%XCHARN(:) -ELSE - ZCHARN(:) = 0.011 -END IF -! -ZZL(:) = 0.0 -! -DO J=1,SIZE(PTA) - ! - IF (ZETU(J)>50.) THEN - ITERMAX(J) = 1 - ELSE - ITERMAX(J) = 3 !number of iterations - ENDIF - IF (ZVMOD(J)<=1.) THEN - ITERMAX(J) = 10 - ENDIF - ! - IF (.NOT.LCPL_WAVE) THEN - !then modify Charnork for high wind speeds Chris Fairall's data - IF (ZDUWG(J)>10.) ZCHARN(J) = 0.011 + (0.018-0.011)*(ZDUWG(J)-10.)/(18-10) - IF (ZDUWG(J)>18.) ZCHARN(J) = 0.018 - END IF - ! - ! 3. ITERATIVE LOOP TO COMPUTE USR, TSR, QSR - ! ------------------------------------------- - ! - IF (S%LWAVEWIND .AND. .NOT. LCPL_WAVE) THEN - ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J)) - ZTWAVE(J) = 0.729*PVMOD(J) - ELSE - ZHWAVE(J) = PHS(J) - ZTWAVE(J) = PTP(J) - ! to avoid the nullity of HS and TP - IF (ZHWAVE(J) .EQ. 0.0) ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J)) - IF (ZTWAVE(J) .EQ. 0.0) ZTWAVE(J) = 0.729*PVMOD(J) - ENDIF -! - ZCWAVE(J) = XG*ZTWAVE(J)/(2.*XPI) - ZLWAVE(J) = ZTWAVE(J)*ZCWAVE(J) - ! -ENDDO -! - -! -DO JLOOP=1,MAXVAL(ITERMAX) ! begin of iterative loop - ! - DO J=1,SIZE(PTA) - ! - IF (JLOOP.GT.ITERMAX(J)) CYCLE - ! - IF (S%NGRVWAVES==0) THEN - ZO(J) = ZCHARN(J)*ZUSR(J)*ZUSR(J)/XG + 0.11*ZVISA(J)/ZUSR(J) !Smith 1988 - ELSE IF (S%NGRVWAVES==1) THEN - ZO(J) = (50./(2.*XPI))*ZLWAVE(J)*(ZUSR(J)/ZCWAVE(J))**4.5 & - + 0.11*ZVISA(J)/ZUSR(J) !Oost et al. 2002 - ELSE IF (S%NGRVWAVES==2) THEN - ZO(J) = 1200.*ZHWAVE(J)*(ZHWAVE(J)/ZLWAVE(J))**4.5 & - + 0.11*ZVISA(J)/ZUSR(J) !Taulor and Yelland 2001 - ENDIF - ! - ZRR(J) = ZO(J)*ZUSR(J)/ZVISA(J) - ZOQ(J) = MIN(1.15E-4 , 5.5E-5/ZRR(J)**0.6) - ZOT(J) = ZOQ(J) - ! - ZZL(J) = XKARMAN * XG * PUREF(J) * & - ( ZTSR(J)*(1.+ZRVSRDM1*PQA(J)) + ZRVSRDM1*ZTA(J)*ZQSR(J) ) / & - ( ZTA(J)*ZUSR(J)*ZUSR(J)*(1.+ZRVSRDM1*PQA(J)) ) - ZZTL(J)= ZZL(J)*PZREF(J)/PUREF(J) ! for T -! ZZQL(J)=ZZL(J)*PZREF(J)/PUREF(J) ! for Q - ENDDO - ! - ZPUZ(:) = PSIFCTU(ZZL(:)) - ZPTZ(:) = PSIFCTT(ZZTL(:)) - ! - DO J=1,SIZE(PTA) - ! - ! ZPQZ(J)=PSIFCTT(ZZQL(J)) - ZPQZ(J) = ZPTZ(J) - ! - ! 3.1 scale parameters - ! - ZUSR(J) = ZDUWG(J)*XKARMAN/(LOG(PUREF(J)/ZO(J)) -ZPUZ(J)) - ZTSR(J) = -ZDT(J) *XKARMAN/(LOG(PZREF(J)/ZOT(J))-ZPTZ(J)) - ZQSR(J) = -ZDQ(J) *XKARMAN/(LOG(PZREF(J)/ZOQ(J))-ZPQZ(J)) - ! - ! 3.2 Gustiness factor (ZWG) - ! - IF(S%LPWG) THEN - ZBF(J) = -XG/ZTA(J)*ZUSR(J)*(ZTSR(J)+ZRVSRDM1*ZTA(J)*ZQSR(J)) - IF (ZBF(J)>0.) THEN - ZWG(J) = ZBETAGUST*(ZBF(J)*ZZBL)**(1./3.) - ELSE - ZWG(J) = 0.2 - ENDIF - ENDIF - ZDUWG(J) = SQRT(ZVMOD(J)**2 + ZWG(J)**2) - ! - ENDDO - ! -ENDDO -!------------------------------------------------------------------------------- -! -! 4. COMPUTE transfer coefficients PCD, PCH, ZCE and SURFACE FLUXES -! -------------------------------------------------------------- -! -ZTAU(:) = XUNDEF -ZHF(:) = XUNDEF -ZEF(:) = XUNDEF -! -ZWBAR(:) = 0. -ZTAUR(:) = 0. -ZRF(:) = 0. -! -DO J=1,SIZE(PTA) - ! - ! - ! 4. transfert coefficients PCD, PCH and PCE - ! and neutral PCDN, ZCHN, ZCEN - ! - PCD(J) = (ZUSR(J)/ZDUWG(J))**2. - PCH(J) = ZUSR(J)*ZTSR(J)/(ZDUWG(J)*(ZTA(J)*PEXNS(J)/PEXNA(J)-PSST(J))) - PCE(J) = ZUSR(J)*ZQSR(J)/(ZDUWG(J)*(PQA(J)-PQSAT(J))) - ! - PCDN(J) = (XKARMAN/LOG(ZS/ZO(J)))**2. - ZCHN(J) = (XKARMAN/LOG(ZS/ZO(J)))*(XKARMAN/LOG(ZS/ZOT(J))) - ZCEN(J) = (XKARMAN/LOG(ZS/ZO(J)))*(XKARMAN/LOG(ZS/ZOQ(J))) - ! - ZLV(J) = XLVTT + (XCPV-XCL)*(PSST(J)-XTT) - ! - ! 4. 2 surface fluxes - ! - IF (ABS(PCDN(J))>1.E-2) THEN !!!! secure COARE3.0 CODE - write(*,*) 'pb PCDN in COARE30: ',PCDN(J) - write(*,*) 'point: ',J,"/",SIZE(PTA) - write(*,*) 'roughness: ', ZO(J) - write(*,*) 'ustar: ',ZUSR(J) - write(*,*) 'wind: ',ZDUWG(J) - CALL ABOR1_SFX('COARE30: PCDN too large -> no convergence') - ELSE - ZTSR(J) = -ZTSR(J) - ZQSR(J) = -ZQSR(J) - ZTAU(J) = -PRHOA(J)*ZUSR(J)*ZUSR(J)*ZVMOD(J)/ZDUWG(J) - ZHF(J) = PRHOA(J)*XCPD*ZUSR(J)*ZTSR(J) - ZEF(J) = PRHOA(J)*ZLV(J)*ZUSR(J)*ZQSR(J) - ! - ! 4.3 Contributions to surface fluxes due to rainfall - ! - ! SB: a priori, le facteur ZRDSRV=XRD/XRV est introduit pour - ! adapter la formule de Clausius-Clapeyron (pour l'air - ! sec) au cas humide. - IF (S%LPRECIP) THEN - ! - ! heat surface fluxes - ! - ZTAC(J) = ZTA(J)-XTT - ! - ZXLR(J) = XLVTT + (XCPV-XCL)* ZTAC(J) ! latent heat of rain vaporization - ZDQSDT(J)= ZQASAT(J) * ZXLR(J) / (XRD*ZTA(J)**2) ! Clausius-Clapeyron relation - ZDTMP(J) = (1.0 + 3.309e-3*ZTAC(J) -1.44e-6*ZTAC(J)*ZTAC(J)) * & !heat diffusivity - 0.02411 / (PRHOA(J)*XCPD) - ! - ZDWAT(J) = 2.11e-5 * (XP00/ZPA(J)) * (ZTA(J)/XTT)**1.94 ! water vapour diffusivity from eq (13.3) - ! ! of Pruppacher and Klett (1978) - ZALFAC(J)= 1.0 / (1.0 + & ! Eq.11 in GoF95 - ZRDSRV*ZDQSDT(J)*ZXLR(J)*ZDWAT(J)/(ZDTMP(J)*XCPD)) ! ZALFAC=wet-bulb factor (sans dim) - ZCPLW(J) = 4224.8482 + ZTAC(J) * & - ( -4.707 + ZTAC(J) * & - (0.08499 + ZTAC(J) * & - (1.2826e-3 + ZTAC(J) * & - (4.7884e-5 - 2.0027e-6* ZTAC(J))))) ! specific heat - ! - ZRF(J) = PRAIN(J) * ZCPLW(J) * ZALFAC(J) * & !Eq.12 in GoF95 !SIGNE? - (PSST(J) - ZTA(J) + (PQSAT(J)-PQA(J))*ZXLR(J)/XCPD ) - ! - ! Momentum flux due to rainfall - ! - ZTAUR(J)=-0.85*(PRAIN(J) *ZVMOD(J)) !pp3752 in FBR96 - ! - ENDIF - ! - ! 4.4 Webb correction to latent heat flux - ! - ZWBAR(J)=- (1./ZRDSRV)*ZUSR(J)*ZQSR(J) / (1.0+(1./ZRDSRV)*PQA(J)) & - - ZUSR(J)*ZTSR(J)/ZTA(J) ! Eq.21*rhoa in FBR96 - ! - ! 4.5 friction velocity which contains correction du to rain - ! - ZUSTAR2(J)= - (ZTAU(J) + ZTAUR(J)) / PRHOA(J) - PUSTAR(J) = SQRT(ZUSTAR2(J)) - ! - ! 4.6 Total surface fluxes - ! - PSFTH (J) = ZHF(J) + ZRF(J) - PSFTQ (J) = ZEF(J) / ZLV(J) - ! - ENDIF -ENDDO -!------------------------------------------------------------------------------- -! -! 5. FINAL STEP : TOTAL SURFACE FLUXES AND DERIVED DIAGNOSTICS -! ----------- -! 5.1 Richardson number -! -! -ZDIRCOSZW(:) = 1. - CALL SURFACE_RI(PSST,PQSAT,PEXNS,PEXNA,ZTA,ZQASAT,& - PZREF,PUREF,ZDIRCOSZW,PVMOD,PRI ) -! -! 5.2 Aerodynamical conductance and resistance -! -ZAC(:) = PCH(:)*ZVMOD(:) -PRESA(:) = 1. / MAX(ZAC(:),XSURF_EPSILON) -! -! 5.3 Z0 and Z0H over sea -! -PZ0SEA(:) = ZCHARN(:) * ZUSTAR2(:) / XG + XVZ0CM * PCD(:) / PCDN(:) -! -PZ0SEA(:) = MAX(MIN(ZO(:),0.05),10E-6) -! -PZ0HSEA(:) = PZ0SEA(:) -! -IF (LHOOK) CALL DR_HOOK('COARE30_FLUX',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE COARE30_FLUX diff --git a/src/OASIS/SURFEX/coare30_seaflux.F90 b/src/OASIS/SURFEX/coare30_seaflux.F90 deleted file mode 100644 index 4dd0ea977..000000000 --- a/src/OASIS/SURFEX/coare30_seaflux.F90 +++ /dev/null @@ -1,266 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE COARE30_SEAFLUX (S, PMASK,KSIZE_WATER,KSIZE_ICE, & - PTA,PEXNA,PRHOA,PSST,PEXNS,PQA, & - PRAIN,PSNOW,PVMOD,PZREF,PUREF,PPS, & - PQSAT,PSFTH,PSFTQ,PUSTAR, & - PCD,PCDN,PCH,PCE,PRI,PRESA,PZ0HSEA ) -! ################################################################## -! -! -!!**** *COARE30_SEAFLUX* -!! -!! PURPOSE -!! ------- -! -! Calculate the sea surface fluxes with modified bulk algorithm COARE: -! -! Calculates the surface fluxes of heat, moisture, and momentum over -! sea surface with the simplified COARE 3.0 bulk algorithm from Fairall et al -! 2003 -! -! based on water_flux computation for sea ice -! -!!** METHOD -!! ------ -! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! C. Lebeaupin *Météo-France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 18/03/2005 -!! B. Decharme 04/2013 : Pack only input variables -!! S. Senesi 01/2014 : When handling sea ice cover, compute open sea flux, -!! and only where ice cover < 1. -!! M.N. Bouin 03/2014 possibility of wave parameters from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -! -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODI_ICE_SEA_FLUX -USE MODI_COARE30_FLUX -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -! -REAL, DIMENSION(:), INTENT(IN) :: PMASK ! Either a mask positive for open sea, or a seaice fraction -INTEGER , INTENT(IN) :: KSIZE_WATER ! number of points with some sea water -INTEGER , INTENT(IN) :: KSIZE_ICE ! number of points with some sea ice -! -REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature at atm. level (K) -REAL, DIMENSION(:), INTENT(IN) :: PQA ! air humidity at atm. level (kg/kg) -REAL, DIMENSION(:), INTENT(IN) :: PEXNA ! Exner function at atm. level -REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density at atm. level -REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of wind at atm. wind level (m/s) -REAL, DIMENSION(:), INTENT(IN) :: PZREF ! atm. level for temp. and humidity (m) -REAL, DIMENSION(:), INTENT(IN) :: PUREF ! atm. level for wind (m) -REAL, DIMENSION(:), INTENT(IN) :: PSST ! Sea Surface Temperature (K) -REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! Exner function at sea surface -REAL, DIMENSION(:), INTENT(IN) :: PPS ! air pressure at sea surface (Pa) -REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! precipitation rate (kg/s/m2) -REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! snow rate (kg/s/m2) -! -! surface fluxes : latent heat, sensible heat, friction fluxes -REAL, DIMENSION(:), INTENT(OUT) :: PSFTH ! heat flux (W/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSFTQ ! water flux (kg/m2/s) -REAL, DIMENSION(:), INTENT(OUT) :: PUSTAR! friction velocity (m/s) -! -! diagnostics -REAL, DIMENSION(:), INTENT(OUT) :: PQSAT ! humidity at saturation -REAL, DIMENSION(:), INTENT(OUT) :: PCD ! heat drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCDN ! momentum drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCH ! neutral momentum drag coefficient -REAL, DIMENSION(:), INTENT(OUT) :: PCE !transfer coef. for latent heat flux -REAL, DIMENSION(:), INTENT(OUT) :: PRI ! Richardson number -REAL, DIMENSION(:), INTENT(OUT) :: PRESA ! aerodynamical resistance -REAL, DIMENSION(:), INTENT(OUT) :: PZ0HSEA ! heat roughness length -! -!* 0.2 declarations of local variables -! -INTEGER, DIMENSION(KSIZE_WATER) :: IR_WATER -INTEGER, DIMENSION(KSIZE_ICE) :: IR_ICE -INTEGER :: J1,J2,JJ -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -! 1. Create Masks for ice and water sea -! ------------------------------------ -IF (LHOOK) CALL DR_HOOK('MODI_COARE30_SEAFLUX:COARE30_SEAFLUX',0,ZHOOK_HANDLE) -! -IR_WATER(:)=0 -IR_ICE(:)=0 -J1=0 -J2=0 -! -IF (S%LHANDLE_SIC) THEN - ! Must compute open sea fluxes even over fully ice-covered sea, which may melt partly - DO JJ=1,SIZE(PSST(:)) - IR_WATER(JJ)= JJ - END DO - ! Do not compute on sea-ice (done in coupling_iceflux) -ELSE - ! PMASK = XSST -XTTS - DO JJ=1,SIZE(PSST(:)) - IF (PMASK(JJ) >=0.0 ) THEN - J1 = J1 + 1 - IR_WATER(J1)= JJ - ELSE - J2 = J2 + 1 - IR_ICE(J2)= JJ - ENDIF - END DO -ENDIF -! -!------------------------------------------------------------------------------- -! -! 2. water sea : call to COARE30_FLUX -! ------------------------------------------------ -! -IF (KSIZE_WATER > 0 ) CALL TREAT_SURF(IR_WATER,'W') -! -!------------------------------------------------------------------------------- -! -! 3. sea ice : call to ICE_SEA_FLUX -! ------------------------------------ -! -IF ( (KSIZE_ICE > 0 ) .AND. (.NOT. S%LHANDLE_SIC) ) CALL TREAT_SURF(IR_ICE,'I') -! -! -IF (LHOOK) CALL DR_HOOK('MODI_COARE30_SEAFLUX:COARE30_SEAFLUX',1,ZHOOK_HANDLE) -!------------------------------------------------------------------------------- -! -CONTAINS -! -SUBROUTINE TREAT_SURF(KMASK,YTYPE) -! -INTEGER, INTENT(IN), DIMENSION(:) :: KMASK - CHARACTER(LEN=1), INTENT(IN) :: YTYPE -! -REAL, DIMENSION(SIZE(KMASK)) :: ZW_TA ! air temperature at atm. level (K) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_QA ! air humidity at atm. level (kg/kg) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_EXNA ! Exner function at atm. level -REAL, DIMENSION(SIZE(KMASK)) :: ZW_RHOA ! air density at atm. level -REAL, DIMENSION(SIZE(KMASK)) :: ZW_VMOD ! module of wind at atm. wind level (m/s) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_ZREF ! atm. level for temp. and humidity (m) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_UREF ! atm. level for wind (m) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_SST ! Sea Surface Temperature (K) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_HS ! wave significant height -REAL, DIMENSION(SIZE(KMASK)) :: ZW_TP ! wave peak period -REAL, DIMENSION(SIZE(KMASK)) :: ZW_EXNS ! Exner function at sea surface -REAL, DIMENSION(SIZE(KMASK)) :: ZW_PS ! air pressure at sea surface (Pa) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_RAIN !precipitation rate (kg/s/m2) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_SNOW !snow rate (kg/s/m2) -! -REAL, DIMENSION(SIZE(KMASK)) :: ZW_Z0SEA! roughness length over the ocean -! -! surface fluxes : latent heat, sensible heat, friction fluxes -REAL, DIMENSION(SIZE(KMASK)) :: ZW_SFTH ! heat flux (W/m2) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_SFTQ ! water flux (kg/m2/s) -REAL, DIMENSION(SIZE(KMASK)) :: ZW_USTAR! friction velocity (m/s) -! -! diagnostics -REAL, DIMENSION(SIZE(KMASK)) :: ZW_QSAT ! humidity at saturation -REAL, DIMENSION(SIZE(KMASK)) :: ZW_CD ! heat drag coefficient -REAL, DIMENSION(SIZE(KMASK)) :: ZW_CDN ! momentum drag coefficient -REAL, DIMENSION(SIZE(KMASK)) :: ZW_CH ! neutral momentum drag coefficient -REAL, DIMENSION(SIZE(KMASK)) :: ZW_CE !transfer coef. for latent heat flux -REAL, DIMENSION(SIZE(KMASK)) :: ZW_RI ! Richardson number -REAL, DIMENSION(SIZE(KMASK)) :: ZW_RESA ! aerodynamical resistance -REAL, DIMENSION(SIZE(KMASK)) :: ZW_Z0HSEA ! heat roughness length -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('COARE30_SEAFLUX:TREAT_SURF',0,ZHOOK_HANDLE) -! -DO JJ=1, SIZE(KMASK) - ZW_TA(JJ) = PTA(KMASK(JJ)) - ZW_QA(JJ) = PQA(KMASK(JJ)) - ZW_EXNA(JJ) = PEXNA(KMASK(JJ)) - ZW_RHOA(JJ) = PRHOA(KMASK(JJ)) - ZW_VMOD(JJ) = PVMOD(KMASK(JJ)) - ZW_ZREF(JJ) = PZREF(KMASK(JJ)) - ZW_UREF(JJ) = PUREF(KMASK(JJ)) - ZW_SST(JJ) = PSST(KMASK(JJ)) - ZW_TP(JJ) = S%XTP(KMASK(JJ)) - ZW_HS(JJ) = S%XHS(KMASK(JJ)) - ZW_EXNS(JJ) = PEXNS(KMASK(JJ)) - ZW_PS(JJ) = PPS(KMASK(JJ)) - ZW_RAIN(JJ) = PRAIN(KMASK(JJ)) - ZW_SNOW(JJ) = PSNOW(KMASK(JJ)) - ZW_Z0SEA(JJ)= S%XZ0(KMASK(JJ)) -ENDDO -! -ZW_SFTH(:) = XUNDEF -ZW_SFTQ(:) = XUNDEF -ZW_USTAR(:) = XUNDEF -ZW_QSAT(:) = XUNDEF -ZW_CD(:) = XUNDEF -ZW_CDN(:) = XUNDEF -ZW_CH(:) = XUNDEF -ZW_CE(:) = XUNDEF -ZW_RI(:) = XUNDEF -ZW_RESA(:) = XUNDEF -ZW_Z0HSEA(:) = XUNDEF -! -IF (YTYPE=='W') THEN - ! - CALL COARE30_FLUX(S, ZW_Z0SEA,ZW_TA,ZW_EXNA,ZW_RHOA,ZW_SST,ZW_EXNS,& - ZW_QA,ZW_VMOD,ZW_ZREF,ZW_UREF,ZW_PS,ZW_QSAT,ZW_SFTH,ZW_SFTQ,ZW_USTAR,& - ZW_CD,ZW_CDN,ZW_CH,ZW_CE,ZW_RI,ZW_RESA,ZW_RAIN,ZW_Z0HSEA,ZW_HS,ZW_TP) - ! -ELSEIF ( (YTYPE=='I') .AND. (.NOT. S%LHANDLE_SIC)) THEN - ! - CALL ICE_SEA_FLUX(ZW_Z0SEA,ZW_TA,ZW_EXNA,ZW_RHOA,ZW_SST,ZW_EXNS,ZW_QA,ZW_RAIN,ZW_SNOW, & - ZW_VMOD,ZW_ZREF,ZW_UREF,ZW_PS,ZW_QSAT,ZW_SFTH,ZW_SFTQ,ZW_USTAR,ZW_CD, & - ZW_CDN,ZW_CH,ZW_RI,ZW_RESA,ZW_Z0HSEA) - ! -ENDIF -! -DO JJ=1, SIZE(KMASK) - S%XZ0(KMASK(JJ)) = ZW_Z0SEA(JJ) - PSFTH(KMASK(JJ)) = ZW_SFTH(JJ) - PSFTQ(KMASK(JJ)) = ZW_SFTQ(JJ) - PUSTAR(KMASK(JJ)) = ZW_USTAR(JJ) - PQSAT(KMASK(JJ)) = ZW_QSAT(JJ) - PCD(KMASK(JJ)) = ZW_CD(JJ) - PCDN(KMASK(JJ)) = ZW_CDN(JJ) - PCH(KMASK(JJ)) = ZW_CH(JJ) - PCE(KMASK(JJ)) = ZW_CE(JJ) - PRI(KMASK(JJ)) = ZW_RI(JJ) - PRESA(KMASK(JJ)) = ZW_RESA(JJ) - PZ0HSEA(KMASK(JJ)) = ZW_Z0HSEA(JJ) -END DO -IF (LHOOK) CALL DR_HOOK('COARE30_SEAFLUX:TREAT_SURF',1,ZHOOK_HANDLE) -! -END SUBROUTINE TREAT_SURF -! -END SUBROUTINE COARE30_SEAFLUX diff --git a/src/OASIS/SURFEX/coupling_seafluxn.F90 b/src/OASIS/SURFEX/coupling_seafluxn.F90 deleted file mode 100644 index 5ea7b516c..000000000 --- a/src/OASIS/SURFEX/coupling_seafluxn.F90 +++ /dev/null @@ -1,789 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ############################################################################### -SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, & - HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, & - KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, & - PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, & - PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, & - PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, & - PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, & - PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST ) -! ############################################################################### -! -!!**** *COUPLING_SEAFLUX_n * - Driver of the WATER_FLUX scheme for sea -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 01/2006 : sea flux parameterization. -!! Modified 09/2006 : P. Tulet Introduce Sea salt aerosol Emission/Deposition -!! Modified 03/2009 : B. Decharme SST could change during a run => ALB and EMIS -!! Modified 05/2009 : V. Masson : implicitation of momentum fluxes -!! Modified 09/2009 : B. Decharme Radiative properties at time t+1 -!! Modified 01/2010 : B. Decharme Add XTTS -!! Modified 09/2012 : B. Decharme New wind implicitation -!! Modified 10/2012 : P. Le Moigne CMO1D update -!! Modified 04/2013 : P. Le Moigne Wind implicitation and SST update displaced -!! Modified 04/2013 : B. Decharme new coupling variables -!! Modified 01/2014 : S. Senesi : handle sea-ice cover, sea-ice model interface, -!! and apply to Gelato -!! Modified 01/2014 : S. Belamari Remove MODE_THERMOS and XLVTT -!! Modified 05/2014 : S. Belamari New ECUME : Include salinity & atm. pressure impact -!! Modified 01/2015 : R. Séférian interactive ocaen surface albedo -!! Modified 03/2014 : M.N. Bouin possibility of wave parameters from external source -!! Modified 11/2014 : J. Pianezze : add currents for wave coupling -!! -!!--------------------------------------------------------------------- -! -! -USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t -USE MODD_DATA_SEAFLUX_n, ONLY : DATA_SEAFLUX_t -USE MODD_SURFEX_n, ONLY : SEAFLUX_DIAG_t -USE MODD_OCEAN_n, ONLY : OCEAN_t -USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t -USE MODD_SFX_GRID_n, ONLY : GRID_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_DST_n, ONLY : DST_t -USE MODD_SLT_n, ONLY : SLT_t -! -USE MODD_REPROD_OPER, ONLY : CIMPLICIT_WIND -! -USE MODD_CSTS, ONLY : XRD, XCPD, XP00, XTT, XTTS, XTTSI, XDAY -USE MODD_SURF_PAR, ONLY : XUNDEF -USE MODD_SFX_OASIS, ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE -USE MODD_WATER_PAR, ONLY : XEMISWAT, XEMISWATICE -! -USE MODD_WATER_PAR, ONLY : XALBSEAICE -! -! -USE MODI_WATER_FLUX -USE MODI_MR98 -USE MODI_ECUME_SEAFLUX -USE MODI_COARE30_SEAFLUX -USE MODI_ADD_FORECAST_TO_DATE_SURF -USE MODI_MOD1D_n -USE MODI_DIAG_INLINE_SEAFLUX_n -USE MODI_CH_AER_DEP -USE MODI_CH_DEP_WATER -USE MODI_DSLT_DEP -USE MODI_SST_UPDATE -USE MODI_INTERPOL_SST_MTH -USE MODI_UPDATE_RAD_SEA -! -USE MODE_DSLT_SURF -USE MODD_DST_SURF -USE MODD_SLT_SURF -! -USE MODD_OCEAN_GRID, ONLY : NOCKMIN -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -USE MODI_ABOR1_SFX -! -USE MODI_COUPLING_ICEFLUX_n -USE MODI_SEAICE_GELATO1D_n -! -USE MODI_COUPLING_SLT_n -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS -TYPE(DATA_SEAFLUX_t), INTENT(INOUT) :: DTS -TYPE(SEAFLUX_DIAG_t), INTENT(INOUT) :: DGS -TYPE(OCEAN_t), INTENT(INOUT) :: O -TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR -TYPE(GRID_t), INTENT(INOUT) :: G -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(DST_t), INTENT(INOUT) :: DST -TYPE(SLT_t), INTENT(INOUT) :: SLT -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling - ! 'E' : explicit - ! 'I' : implicit -REAL, INTENT(IN) :: PTIMEC ! current duration since start of the run (s) -INTEGER, INTENT(IN) :: KYEAR ! current year (UTC) -INTEGER, INTENT(IN) :: KMONTH ! current month (UTC) -INTEGER, INTENT(IN) :: KDAY ! current day (UTC) -REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s) -INTEGER, INTENT(IN) :: KI ! number of points -INTEGER, INTENT(IN) :: KSV ! number of scalars -INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands -REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight) -REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s) -REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m) -REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m) -! -REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K) -REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3) -REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3) -REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables -! ! chemistry: first char. in HSV: '#' (molecule/m3) -! ! -CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables -REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s) -REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s) -REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.) -! ! (W/m2) -REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.) -! ! (W/m2) -REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m) -REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle at t (radian from the vertical) -REAL, DIMENSION(KI), INTENT(IN) :: PZENITH2 ! zenithal angle at t+1(radian from the vertical) -REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! azimuthal angle (radian from North, clockwise) -REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) -! ! (W/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa) -REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa) -REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg/m3) -REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s) -REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 (m/s*kg_CO2/kg_air) -REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K) -REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-) -REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-) -REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K) -REAL, DIMENSION(KI), INTENT(OUT) :: PZ0 ! roughness length for momentum (m) -REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H ! roughness length for heat (m) -REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF ! specific humidity at surface (kg/kg) -! -REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients (m2s/kg) -REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I' (m/s) -REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF -REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF -REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF -REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF -CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK' -! -!* 0.2 declarations of local variables -! -REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! Direct albedo at time t -REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! Diffuse albedo at time t -! -REAL, DIMENSION(KI) :: ZEXNA ! Exner function at forcing level -REAL, DIMENSION(KI) :: ZEXNS ! Exner function at surface level -REAL, DIMENSION(KI) :: ZU ! zonal wind -REAL, DIMENSION(KI) :: ZV ! meridian wind -REAL, DIMENSION(KI) :: ZWIND ! Wind -REAL, DIMENSION(KI) :: ZCD ! Drag coefficient on open sea -REAL, DIMENSION(KI) :: ZCD_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZCDN ! Neutral Drag coefficient on open sea -REAL, DIMENSION(KI) :: ZCDN_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZCH ! Heat transfer coefficient on open sea -REAL, DIMENSION(KI) :: ZCH_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZCE ! Vaporization heat transfer coefficient on open sea -REAL, DIMENSION(KI) :: ZCE_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZRI ! Richardson number on open sea -REAL, DIMENSION(KI) :: ZRI_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZRESA_SEA ! aerodynamical resistance on open sea -REAL, DIMENSION(KI) :: ZRESA_SEA_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZUSTAR ! friction velocity (m/s) on open sea -REAL, DIMENSION(KI) :: ZUSTAR_ICE ! " " on seaice -REAL, DIMENSION(KI) :: ZZ0 ! roughness length over open sea -REAL, DIMENSION(KI) :: ZZ0_ICE ! roughness length over seaice -REAL, DIMENSION(KI) :: ZZ0H ! heat roughness length over open sea -REAL, DIMENSION(KI) :: ZZ0H_ICE ! heat roughness length over seaice -REAL, DIMENSION(KI) :: ZZ0W ! Work array for Z0 and Z0H computation -REAL, DIMENSION(KI) :: ZQSAT ! humidity at saturation on open sea -REAL, DIMENSION(KI) :: ZQSAT_ICE ! " " on seaice -! -REAL, DIMENSION(KI) :: ZSFTH ! Heat flux for open sea (and for sea-ice points if merged) -REAL, DIMENSION(KI) :: ZSFTQ ! Water vapor flux on open sea (and for sea-ice points if merged) -REAL, DIMENSION(KI) :: ZSFU ! zonal momentum flux on open sea (and for sea-ice points if merged)(Pa) -REAL, DIMENSION(KI) :: ZSFV ! meridional momentum flux on open sea (and for sea-ice points if merged)(Pa) -! -REAL, DIMENSION(KI) :: ZSFTH_ICE ! Heat flux on sea ice -REAL, DIMENSION(KI) :: ZSFTQ_ICE ! Sea-ice sublimation flux -REAL, DIMENSION(KI) :: ZSFU_ICE ! zonal momentum flux on seaice (Pa) -REAL, DIMENSION(KI) :: ZSFV_ICE ! meridional momentum flux on seaice (Pa) - -REAL, DIMENSION(KI) :: ZHU ! Near surface relative humidity -REAL, DIMENSION(KI) :: ZQA ! specific humidity (kg/kg) -REAL, DIMENSION(KI) :: ZEMIS ! Emissivity at time t -REAL, DIMENSION(KI) :: ZTRAD ! Radiative temperature at time t -! -REAL, DIMENSION(KI) :: ZSST ! XSST corrected for anomalously low values (which actually are sea-ice temp) -REAL, DIMENSION(KI) :: ZMASK ! A mask for diagnosing where seaice exists (or, for coupling_iceflux, may appear) -! -REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST -REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST -REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST -! -INTEGER :: ISIZE_WATER ! number of points with some sea water -INTEGER :: ISIZE_ICE ! number of points with some sea ice -! -INTEGER :: ISWB ! number of shortwave spectral bands -INTEGER :: JSWB ! loop counter on shortwave spectral bands -INTEGER :: ISLT ! number of sea salt variable -! -INTEGER :: IBEG, IEND -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------------- -! Preliminaries: -!------------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',0,ZHOOK_HANDLE) -IF (HTEST/='OK') THEN - CALL ABOR1_SFX('COUPLING_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER') -END IF -!------------------------------------------------------------------------------------- -! -ZEXNA (:) = XUNDEF -ZEXNS (:) = XUNDEF -ZU (:) = XUNDEF -ZV (:) = XUNDEF -ZWIND (:) = XUNDEF -ZSFTQ (:) = XUNDEF -ZSFTH (:) = XUNDEF -ZCD (:) = XUNDEF -ZCDN (:) = XUNDEF -ZCH (:) = XUNDEF -ZCE (:) = XUNDEF -ZRI (:) = XUNDEF -ZHU (:) = XUNDEF -ZRESA_SEA(:) = XUNDEF -ZUSTAR (:) = XUNDEF -ZZ0 (:) = XUNDEF -ZZ0H (:) = XUNDEF -ZQSAT (:) = XUNDEF -! -ZSFTQ_ICE(:) = XUNDEF -ZSFTH_ICE(:) = XUNDEF -ZCD_ICE (:) = XUNDEF -ZCDN_ICE (:) = XUNDEF -ZCH_ICE (:) = XUNDEF -ZCE_ICE (:) = XUNDEF -ZRI_ICE (:) = XUNDEF -ZRESA_SEA_ICE= XUNDEF -ZUSTAR_ICE(:) = XUNDEF -ZZ0_ICE (:) = XUNDEF -ZZ0H_ICE (:) = XUNDEF -ZQSAT_ICE(:) = XUNDEF -! -ZEMIS (:) = XUNDEF -ZTRAD (:) = XUNDEF -ZDIR_ALB (:,:) = XUNDEF -ZSCA_ALB (:,:) = XUNDEF -! -!------------------------------------------------------------------------------------- -! -ZEXNS(:) = (PPS(:)/XP00)**(XRD/XCPD) -ZEXNA(:) = (PPA(:)/XP00)**(XRD/XCPD) -! -IF(LCPL_SEA .OR. LCPL_WAVE)THEN - !Sea currents are taken into account - ZU(:)=PU(:)-S%XUMER(:) - ZV(:)=PV(:)-S%XVMER(:) -ELSE - ZU(:)=PU(:) - ZV(:)=PV(:) -ENDIF -! -ZWIND(:) = SQRT(ZU(:)**2+ZV(:)**2) -! -PSFTS(:,:) = 0. -! -ZHU = 1. -! -ZQA(:) = PQA(:) / PRHOA(:) -! -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Time evolution -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! -S%TTIME%TIME = S%TTIME%TIME + PTSTEP - CALL ADD_FORECAST_TO_DATE_SURF(S%TTIME%TDATE%YEAR,S%TTIME%TDATE%MONTH,S%TTIME%TDATE%DAY,S%TTIME%TIME) -! -!-------------------------------------------------------------------------------------- -! Fluxes over water according to Charnock formulae -!-------------------------------------------------------------------------------------- -! -IF (S%LHANDLE_SIC) THEN - ! Flux for sea are computed everywhere - ISIZE_WATER = SIZE(ZMASK) - ! Ensure freezing SST values where XSST actually has very low (sea-ice) values (old habits) - ZSST(:)=MAX(S%XSST(:), XTTSI) - ! Flux over sea-ice will not be computed by next calls, but by coupling_iceflux. Hence : - ISIZE_ICE = 0 - ! Flux over sea-ice will be computed by coupling_iceflux anywhere sea-ice could form in one - ! time-step (incl. under forcing). ZMASK value is set to 1. on these points - ZMASK(:)=0. - WHERE ( S%XSIC(:) > 0. ) ZMASK(:)=1. - ! To be large, assume that seaice may form where SST is < 10C - WHERE ( S%XSST(:) - XTTS <= 10. ) ZMASK(:)=1. - IF (S%LINTERPOL_SIC) WHERE (S%XFSIC(:) > 0. ) ZMASK(:)=1. - IF (S%LINTERPOL_SIT) WHERE (S%XFSIT(:) > 0. ) ZMASK(:)=1. -ELSE - ZSST (:) = S%XSST(:) - ZMASK(:) = S%XSST(:) - XTTS - ISIZE_WATER = COUNT(ZMASK(:)>=0.) - ISIZE_ICE = SIZE(S%XSST) - ISIZE_WATER -ENDIF -! -SELECT CASE (S%CSEA_FLUX) -CASE ('DIRECT') -CALL WATER_FLUX(S%XZ0, PTA, ZEXNA, PRHOA, ZSST, ZEXNS, ZQA, & - PRAIN, PSNOW, XTTS, ZWIND, PZREF, PUREF, & - PPS, S%LHANDLE_SIC, ZQSAT, ZSFTH, ZSFTQ, & - ZUSTAR, ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H ) -CASE ('ITERAT') -CALL MR98 (S%XZ0, PTA, ZEXNA, PRHOA, S%XSST, ZEXNS, ZQA, & - XTTS, ZWIND, PZREF, PUREF, PPS, ZQSAT, & - ZSFTH, ZSFTQ, ZUSTAR, & - ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H ) - -CASE ('ECUME ','ECUME6') -CALL ECUME_SEAFLUX(S, ZMASK, ISIZE_WATER, ISIZE_ICE, & - PTA, ZEXNA ,PRHOA, ZSST, ZEXNS, ZQA, & - PRAIN, PSNOW, ZWIND, PZREF, PUREF, PPS, PPA, & - ZQSAT, ZSFTH, ZSFTQ, ZUSTAR, & - ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H ) -CASE ('COARE3') -CALL COARE30_SEAFLUX(S, ZMASK, ISIZE_WATER, ISIZE_ICE, & - PTA, ZEXNA ,PRHOA, ZSST, ZEXNS, ZQA, PRAIN, & - PSNOW, ZWIND, PZREF, PUREF, PPS, ZQSAT, & - ZSFTH, ZSFTQ, ZUSTAR, & - ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H ) -END SELECT -! -!------------------------------------------------------------------------------------- -!radiative properties at time t -!------------------------------------------------------------------------------------- -! -ISWB = SIZE(PSW_BANDS) -! -DO JSWB=1,ISWB -ZDIR_ALB(:,JSWB) = S%XDIR_ALB(:) -ZSCA_ALB(:,JSWB) = S%XSCA_ALB(:) -END DO -! -IF (S%LHANDLE_SIC) THEN -ZEMIS(:) = (1 - S%XSIC(:)) * XEMISWAT + S%XSIC(:) * XEMISWATICE -ZTRAD(:) = (((1 - S%XSIC(:)) * XEMISWAT * S%XSST (:)**4 + & - S%XSIC(:) * XEMISWATICE * S%XTICE(:)**4)/ ZEMIS(:)) ** 0.25 -ELSE -ZTRAD(:) = S%XSST (:) -ZEMIS(:) = S%XEMIS(:) -END IF -! -!------------------------------------------------------------------------------------- -!Specific fields for seaice model (when using earth system model or embedded -!seaice scheme) -!------------------------------------------------------------------------------------- -! -IF(LCPL_SEAICE.OR.S%LHANDLE_SIC)THEN -CALL COUPLING_ICEFLUX_n(KI, PTA, ZEXNA, PRHOA, S%XTICE, ZEXNS, & - ZQA, PRAIN, PSNOW, ZWIND, PZREF, PUREF, & - PPS, S%XSST, XTTS, ZSFTH_ICE, ZSFTQ_ICE, & - S%LHANDLE_SIC, ZMASK, ZQSAT_ICE, ZZ0_ICE, & - ZUSTAR_ICE, ZCD_ICE, ZCDN_ICE, ZCH_ICE, & - ZRI_ICE, ZRESA_SEA_ICE, ZZ0H_ICE ) -ENDIF -! -IF (S%LHANDLE_SIC) CALL COMPLEMENT_EACH_OTHER_FLUX -! -!------------------------------------------------------------------------------------- -! Momentum fluxes over sea or se-ice -!------------------------------------------------------------------------------------- -! -CALL SEA_MOMENTUM_FLUXES(ZCD, ZSFU, ZSFV) -! -! Momentum fluxes over sea-ice if embedded seaice scheme is used -! -IF (S%LHANDLE_SIC) CALL SEA_MOMENTUM_FLUXES(ZCD_ICE, ZSFU_ICE, ZSFV_ICE) -! -! CO2 flux -! -PSFCO2(:) = 0.0 -! -!IF(LCPL_SEA.AND.CSEACO2=='NONE')THEN -! PSFCO2(:) = XSEACO2(:) -!ELSEIF(CSEACO2=='CST ')THEN -! PSFCO2 = E * deltapCO2 -! According to Wanninkhof (medium hypothesis) : -! E = 1.13.10^-3 * WIND^2 CO2mol.m-2.yr-1.uatm-1 -! = 1.13.10^-3 * WIND^2 * Mco2.10^-3 * (1/365*24*3600) -! deltapCO2 = -8.7 uatm (Table 1 half hypothesis) -PSFCO2(:) = - ZWIND(:)**2 * 1.13E-3 * 8.7 * 44.E-3 / ( 365*24*3600 ) -!ENDIF -! -!------------------------------------------------------------------------------------- -! Scalar fluxes: -!------------------------------------------------------------------------------------- -! -IF (CHS%SVS%NBEQ>0) THEN - ! - IF (CHS%CCH_DRY_DEP == "WES89") THEN - ! - IBEG = CHS%SVS%NSV_CHSBEG - IEND = CHS%SVS%NSV_CHSEND - ! - CALL CH_DEP_WATER (ZRESA_SEA, ZUSTAR, PTA, ZTRAD,PSV(:,IBEG:IEND), & - CHS%SVS%CSV(IBEG:IEND), CHS%XDEP(:,1:CHS%SVS%NBEQ) ) - ! - PSFTS(:,IBEG:IEND) = - PSV(:,IBEG:IEND) * CHS%XDEP(:,1:CHS%SVS%NBEQ) - ! - IF (CHS%SVS%NAEREQ > 0 ) THEN - ! - IBEG = CHS%SVS%NSV_AERBEG - IEND = CHS%SVS%NSV_AEREND - ! - CALL CH_AER_DEP(PSV(:,IBEG:IEND),PSFTS(:,IBEG:IEND),ZUSTAR,ZRESA_SEA,PTA,PRHOA) - ! - END IF - ! - ELSE - ! - IBEG = CHS%SVS%NSV_AERBEG - IEND = CHS%SVS%NSV_AEREND - ! - PSFTS(:,IBEG:IEND) =0. - IF (IEND.GT.IBEG) PSFTS(:,IBEG:IEND) =0. - ! - ENDIF - ! -ENDIF -! -IF (CHS%SVS%NDSTEQ>0) THEN - ! - IBEG = CHS%SVS%NSV_DSTBEG - IEND = CHS%SVS%NSV_DSTEND - ! - CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA_SEA, PTA, & - PRHOA, DST%XEMISSIG_DST, DST%XEMISRADIUS_DST, JPMODE_DST, & - XDENSITY_DST, XMOLARWEIGHT_DST, ZCONVERTFACM0_DST, ZCONVERTFACM6_DST, & - ZCONVERTFACM3_DST, LVARSIG_DST, LRGFIX_DST, CVERMOD ) - ! - CALL MASSFLUX2MOMENTFLUX( & - PSFTS(:,IBEG:IEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments - PRHOA, & !I [kg/m3] air density - DST%XEMISRADIUS_DST, &!I [um] emitted radius for the modes (max 3) - DST%XEMISSIG_DST, &!I [-] emitted sigma for the different modes (max 3) - NDSTMDE, & - ZCONVERTFACM0_DST, & - ZCONVERTFACM6_DST, & - ZCONVERTFACM3_DST, & - LVARSIG_DST, LRGFIX_DST ) - ! -ENDIF - -! -IF (CHS%SVS%NSLTEQ>0) THEN - ! - IBEG = CHS%SVS%NSV_SLTBEG - IEND = CHS%SVS%NSV_SLTEND - ! - ISLT = IEND - IBEG + 1 - ! - CALL COUPLING_SLT_n(SLT, & - SIZE(ZUSTAR,1), & !I [nbr] number of sea point - ISLT, & !I [nbr] number of sea salt variables - ZWIND, & !I [m/s] wind velocity - PSFTS(:,IBEG:IEND) ) - ! - CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA_SEA, PTA, & - PRHOA, SLT%XEMISSIG_SLT, SLT%XEMISRADIUS_SLT, JPMODE_SLT, & - XDENSITY_SLT, XMOLARWEIGHT_SLT, ZCONVERTFACM0_SLT, ZCONVERTFACM6_SLT, & - ZCONVERTFACM3_SLT, LVARSIG_SLT, LRGFIX_SLT, CVERMOD ) - ! - CALL MASSFLUX2MOMENTFLUX( & - PSFTS(:,IBEG:IEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments - PRHOA, & !I [kg/m3] air density - SLT%XEMISRADIUS_SLT, &!I [um] emitted radius for the modes (max 3) - SLT%XEMISSIG_SLT, &!I [-] emitted sigma for the different modes (max 3) - NSLTMDE, & - ZCONVERTFACM0_SLT, & - ZCONVERTFACM6_SLT, & - ZCONVERTFACM3_SLT, & - LVARSIG_SLT, LRGFIX_SLT ) - ! -ENDIF -! -!------------------------------------------------------------------------------- -! Inline diagnostics at time t for SST and TRAD -!------------------------------------------------------------------------------- -! -CALL DIAG_INLINE_SEAFLUX_n(DGS%O, DGS%D, DGS%DC, DGS%DI, DGS%DIC, DGS%DMI, & - S, PTSTEP, PTA, ZQA, PPA, PPS, PRHOA, PU, & - PV, PZREF, PUREF, ZCD, ZCDN, ZCH, ZCE, ZRI, ZHU,& - ZZ0H, ZQSAT, ZSFTH, ZSFTQ, ZSFU, ZSFV, & - PDIR_SW, PSCA_SW, PLW, ZDIR_ALB, ZSCA_ALB, & - ZEMIS, ZTRAD, PRAIN, PSNOW, & - ZCD_ICE, ZCDN_ICE, ZCH_ICE, ZCE_ICE, ZRI_ICE, & - ZZ0_ICE, ZZ0H_ICE, ZQSAT_ICE, ZSFTH_ICE, & - ZSFTQ_ICE, ZSFU_ICE, ZSFV_ICE) -! -!------------------------------------------------------------------------------- -! A kind of "average_flux" -!------------------------------------------------------------------------------- -! -IF (S%LHANDLE_SIC) THEN - PSFTH (:) = ZSFTH (:) * ( 1 - S%XSIC (:)) + ZSFTH_ICE(:) * S%XSIC(:) - PSFTQ (:) = ZSFTQ (:) * ( 1 - S%XSIC (:)) + ZSFTQ_ICE(:) * S%XSIC(:) - PSFU (:) = ZSFU (:) * ( 1 - S%XSIC (:)) + ZSFU_ICE(:) * S%XSIC(:) - PSFV (:) = ZSFV (:) * ( 1 - S%XSIC (:)) + ZSFV_ICE(:) * S%XSIC(:) -ELSE - PSFTH (:) = ZSFTH (:) - PSFTQ (:) = ZSFTQ (:) - PSFU (:) = ZSFU (:) - PSFV (:) = ZSFV (:) -ENDIF -! -!------------------------------------------------------------------------------- -! IMPOSED SSS OR INTERPOLATED SSS AT TIME t+1 -!------------------------------------------------------------------------------- -! -! Daily update Sea surface salinity from monthly data -! -IF (S%LINTERPOL_SSS .AND. MOD(S%TTIME%TIME,XDAY) == 0.) THEN - CALL INTERPOL_SST_MTH(S,'S') - IF (ANY(S%XSSS(:)<0.0)) THEN - CALL ABOR1_SFX('COUPLING_SEAFLUX_N: XSSS should be >=0') - ENDIF -ENDIF -! -!------------------------------------------------------------------------------- -! SEA-ICE coupling at time t+1 -!------------------------------------------------------------------------------- -! -IF (S%LHANDLE_SIC) THEN - ! - IF (S%LINTERPOL_SIC) THEN - IF ((MOD(S%TTIME%TIME,XDAY) == 0.) .OR. (PTIMEC <= PTSTEP )) THEN - ! Daily update Sea Ice Cover constraint from monthly data - CALL INTERPOL_SST_MTH(S,'C') - IF (ANY(S%XFSIC(:)>1.0).OR.ANY(S%XFSIC(:)<0.0)) THEN - CALL ABOR1_SFX('COUPLING_SEAFLUX_N: FSIC should be >=0 and <=1') - ENDIF - ENDIF - ENDIF - ! - IF (S%LINTERPOL_SIT) THEN - IF ((MOD(S%TTIME%TIME,XDAY) == 0.) .OR. (PTIMEC <= PTSTEP )) THEN - ! Daily update Sea Ice Thickness constraint from monthly data - CALL INTERPOL_SST_MTH(S,'H') - IF (ANY(S%XFSIT(:)<0.0)) THEN - CALL ABOR1_SFX('COUPLING_SEAFLUX_N: XFSIT should be >=0') - ENDIF - ENDIF - ENDIF - ! - IF (S%CSEAICE_SCHEME=='GELATO') THEN - CALL SEAICE_GELATO1D_n(S, HPROGRAM,PTIMEC, PTSTEP) - ENDIF - ! Update of cell-averaged albedo, emissivity and radiative - ! temperature is done later -ENDIF -! -!------------------------------------------------------------------------------- -! OCEANIC COUPLING, IMPOSED SST OR INTERPOLATED SST AT TIME t+1 -!------------------------------------------------------------------------------- -! -IF (O%LMERCATOR) THEN - ! - ! Update SST reference profile for relaxation purpose - IF (DTS%LSST_DATA) THEN - CALL SST_UPDATE(DTS, S, OR%XSEAT_REL(:,NOCKMIN+1)) - ! - ! Convert to degree C for ocean model - OR%XSEAT_REL(:,NOCKMIN+1) = OR%XSEAT_REL(:,NOCKMIN+1) - XTT - ENDIF - ! - CALL MOD1D_n(DGS%GO, O, OR, G%XLAT, S, & - HPROGRAM,PTIME,ZEMIS(:),ZDIR_ALB(:,1:KSW),ZSCA_ALB(:,1:KSW),& - PLW(:),PSCA_SW(:,1:KSW),PDIR_SW(:,1:KSW),PSFTH(:), & - PSFTQ(:),PSFU(:),PSFV(:),PRAIN(:)) - ! -ELSEIF(DTS%LSST_DATA) THEN - ! - ! Imposed SST - ! - CALL SST_UPDATE(DTS, S, S%XSST) - ! -ELSEIF (S%LINTERPOL_SST.AND.MOD(S%TTIME%TIME,XDAY) == 0.) THEN - ! - ! Imposed monthly SST - ! - CALL INTERPOL_SST_MTH(S,'T') - ! -ENDIF -! -!------------------------------------------------------------------------------- -!Physical properties see by the atmosphere in order to close the energy budget -!between surfex and the atmosphere. All variables should be at t+1 but very -!difficult to do. Maybe it will be done later. However, Ts is at time t+1 -!------------------------------------------------------------------------------- -! -IF (S%LHANDLE_SIC) THEN - IF (S%CSEAICE_SCHEME/='GELATO') THEN - S%XTICE = S%XSST - S%XSIC = S%XFSIC - S%XICE_ALB = XALBSEAICE - ENDIF - PTSURF (:) = S%XSST(:) * ( 1 - S%XSIC (:)) + S%XTICE(:) * S%XSIC(:) - PQSURF (:) = ZQSAT (:) * ( 1 - S%XSIC (:)) + ZQSAT_ICE(:) * S%XSIC(:) - ZZ0W (:) = ( 1 - S%XSIC(:) ) * 1.0/(LOG(PUREF(:)/ZZ0(:)) **2) + & - S%XSIC(:) * 1.0/(LOG(PUREF(:)/ZZ0_ICE(:))**2) - PZ0 (:) = PUREF (:) * EXP ( - SQRT ( 1./ ZZ0W(:) )) - ZZ0W (:) = ( 1 - S%XSIC(:) ) * 1.0/(LOG(PZREF(:)/ZZ0H(:)) **2) + & - S%XSIC(:) * 1.0/(LOG(PZREF(:)/ZZ0H_ICE(:))**2) - PZ0H (:) = PZREF (:) * EXP ( - SQRT ( 1./ ZZ0W(:) )) -ELSE - PTSURF (:) = S%XSST(:) - PQSURF (:) = ZQSAT (:) - PZ0 (:) = S%XZ0 (:) - PZ0H (:) = ZZ0H (:) -ENDIF -! -!------------------------------------------------------------------------------- -!Radiative properties at time t+1 (see by the atmosphere) in order to close -!the energy budget between surfex and the atmosphere -!------------------------------------------------------------------------------- -! - CALL UPDATE_RAD_SEA(S,PZENITH2,XTTS,PDIR_ALB,PSCA_ALB,PEMIS,PTRAD,PU,PV) -! -!======================================================================================= -! -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',1,ZHOOK_HANDLE) -! -!======================================================================================= -! -CONTAINS -! -SUBROUTINE SEA_MOMENTUM_FLUXES(PCD, PSFU, PSFV) -! -IMPLICIT NONE -! -REAL, DIMENSION(KI), INTENT(IN) :: PCD ! Drag coefficient (on open sea or seaice) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa) -REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa) -! -REAL, DIMENSION(KI) :: ZUSTAR2 ! square of friction velocity (m2/s2) -REAL, DIMENSION(KI) :: ZWORK ! Work array -! -REAL, DIMENSION(KI) :: ZPEW_A_COEF -REAL, DIMENSION(KI) :: ZPEW_B_COEF -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',0,ZHOOK_HANDLE) -! -IF( (LCPL_SEA .OR. LCPL_WAVE) .AND. HCOUPLING .EQ. 'E')THEN - ZPEW_A_COEF(:)=0.0 - ZPEW_B_COEF(:)=ZWIND(:) -ELSE - ZPEW_A_COEF(:)=PPEW_A_COEF(:) - ZPEW_B_COEF(:)=PPEW_B_COEF(:) -ENDIF -! -ZWORK (:) = XUNDEF -ZUSTAR2(:) = XUNDEF -! -IF(CIMPLICIT_WIND=='OLD')THEN -! old implicitation (m2/s2) - ZUSTAR2(:) = (PCD(:)*ZWIND(:)*ZPEW_B_COEF(:)) / & - (1.0-PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:)) -ELSE -! new implicitation (m2/s2) - ZUSTAR2(:) = (PCD(:)*ZWIND(:)*(2.*ZPEW_B_COEF(:)-ZWIND(:))) /& - (1.0-2.0*PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:)) -! - ZWORK(:) = PRHOA(:)*PPEW_A_COEF(:)*ZUSTAR2(:) + ZPEW_B_COEF(:) - ZWORK(:) = MAX(ZWORK(:),0.) -! - WHERE(ZPEW_A_COEF(:)/= 0.) - ZUSTAR2(:) = MAX( ( ZWORK(:) - PPEW_B_COEF(:) ) / (PRHOA(:)*ZPEW_A_COEF(:)), 0.) - ENDWHERE -! -ENDIF -! -PSFU = 0. -PSFV = 0. -WHERE (ZWIND(:)>0.) - PSFU(:) = - PRHOA(:) * ZUSTAR2(:) * ZU(:) / ZWIND(:) - PSFV(:) = - PRHOA(:) * ZUSTAR2(:) * ZV(:) / ZWIND(:) -END WHERE -! -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',1,ZHOOK_HANDLE) -! -END SUBROUTINE SEA_MOMENTUM_FLUXES -! -!======================================================================================= -! -SUBROUTINE COMPLEMENT_EACH_OTHER_FLUX -! -! Provide dummy fluxes on places with no open-sea or no sea-ice -! Allows a smooth computing of CLS parameters in all cases while avoiding -! having to pack arrays (in routines PARAM_CLS and CLS_TQ) -! -IMPLICIT NONE -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',0,ZHOOK_HANDLE) -! - WHERE (S%XSIC(:) == 1.) - ZSFTH=ZSFTH_ICE - ZSFTQ=ZSFTQ_ICE - ZSFU=ZSFU_ICE - ZSFV=ZSFV_ICE - ZQSAT=ZQSAT_ICE - ZCD=ZCD_ICE - ZCDN=ZCDN_ICE - ZCH=ZCH_ICE - ZCE=ZCE_ICE - ZRI=ZRI_ICE - ZZ0H=ZZ0H_ICE - END WHERE - WHERE (S%XSIC(:) == 0.) - ZSFTH_ICE=ZSFTH - ZSFTQ_ICE=ZSFTQ - ZSFU_ICE=ZSFU - ZSFV_ICE=ZSFV - ZQSAT_ICE=ZQSAT - ZCD_ICE=ZCD - ZCDN_ICE=ZCDN - ZCH_ICE=ZCH - ZCE_ICE=ZCE - ZRI_ICE=ZRI - ZZ0H_ICE=ZZ0H - END WHERE -! -IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',1,ZHOOK_HANDLE) -! -END SUBROUTINE COMPLEMENT_EACH_OTHER_FLUX -! -!======================================================================================= -! -END SUBROUTINE COUPLING_SEAFLUX_n diff --git a/src/OASIS/SURFEX/dealloc_seafluxn.F90 b/src/OASIS/SURFEX/dealloc_seafluxn.F90 deleted file mode 100644 index 568fc710d..000000000 --- a/src/OASIS/SURFEX/dealloc_seafluxn.F90 +++ /dev/null @@ -1,95 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ################################################################################# -SUBROUTINE DEALLOC_SEAFLUX_n (SM) -! ################################################################################# -! -!!**** *DEALLOC_SEAFLUX_n * - Deallocate all arrays -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! S. Belamari 03/2014 other _SEA_ variables -!! S. Senesi 09/2013 introduce sea-ice-cover ans sea-surface salinity -!!------------------------------------------------------------------ -! -USE MODD_DIAG_n, ONLY : DIAG_INIT, DIAG_OPTIONS_INIT -USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_INIT -USE MODD_DIAG_MISC_SEAICE_n, ONLY : DIAG_MISC_SEAICE_INIT -! -USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_INIT -USE MODD_DATA_SEAFLUX_n, ONLY : DATA_SEAFLUX_INIT -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_INIT -USE MODD_OCEAN_n, ONLY : OCEAN_INIT -USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_INIT -! -USE MODD_SFX_GRID_n, ONLY : GRID_INIT -USE MODD_CANOPY_n, ONLY : CANOPY_INIT -! -USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t -! -USE MODI_GLTOOLS_DEALLOC -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -!* 0.2 declarations of local variables -! -! -TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('DEALLOC_SEAFLUX_N',0,ZHOOK_HANDLE) -! -CALL DIAG_OPTIONS_INIT(SM%SD%O) -CALL DIAG_INIT(SM%SD%D) -CALL DIAG_INIT(SM%SD%DC) -CALL DIAG_INIT(SM%SD%DI) -CALL DIAG_INIT(SM%SD%DIC) -CALL DIAG_OCEAN_INIT(SM%SD%GO) -CALL DIAG_MISC_SEAICE_INIT(SM%SD%DMI) - ! -CALL DATA_SEAFLUX_INIT(SM%DTS) -CALL GRID_INIT(SM%G) -CALL CANOPY_INIT(SM%SB) -CALL CH_SEAFLUX_INIT(SM%CHS) -CALL SEAFLUX_INIT(SM%S) -CALL SEAFLUX_INIT(SM%S) -CALL OCEAN_INIT(SM%O) -CALL OCEAN_REL_INIT(SM%OR) -! -!------------------------------------------------------------------------------------- -! -IF (ASSOCIATED(SM%S%TGLT%bat) .AND. SM%S%CSEAICE_SCHEME=='GELATO' ) CALL GLTOOLS_DEALLOC(SM%S%TGLT) -! -IF (LHOOK) CALL DR_HOOK('DEALLOC_SEAFLUX_N',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! -END SUBROUTINE DEALLOC_SEAFLUX_n - - diff --git a/src/OASIS/SURFEX/default_prep_seaflux.F90 b/src/OASIS/SURFEX/default_prep_seaflux.F90 deleted file mode 100644 index 8d8986031..000000000 --- a/src/OASIS/SURFEX/default_prep_seaflux.F90 +++ /dev/null @@ -1,106 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE DEFAULT_PREP_SEAFLUX -! ########################### -! -!!**** *DEFAULT_PREP_SEAFLUX* - routine to set default values for the configuration for SEAFLUX field preparation -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2003 -!! 01/2008 C. Lebeaupin Brossier ! initialization of oceanic var. -!! ! from MERCATOR analyses types -!! 07/2012 P. Le Moigne ! CMO1D phasing -!! 01/2014 S. Senesi ! introduce fractional seaice and sea-ice model -!! 03/2014 S. Belamari ! initialize sea surface salinity -!! 03/2014 M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF,& - XSSS_UNIF, XSIC_UNIF, CFILEWAVE_SEAFLX, CTYPEWAVE -! -USE MODN_PREP_SEAFLUX, ONLY : LSEA_SBL, CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT, & - XTIME_REL, LCUR_REL, LTS_REL, & - LZERO_FLUX, LCORR_FLUX, XCORFLX, LDIAPYC - -USE MODD_SURF_PAR, ONLY : XUNDEF -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -!------------------------------------------------------------------------------- -! - -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -IF (LHOOK) CALL DR_HOOK('DEFAULT_PREP_SEAFLUX',0,ZHOOK_HANDLE) -CFILE_SEAFLX = ' ' -CTYPE_SEAFLX = 'GRIB ' -! -CFILEWAVE_SEAFLX = ' ' -CTYPEWAVE = ' ' -! -CFILEPGD_SEAFLX = ' ' -CTYPEPGD = ' ' -! -XSST_UNIF = XUNDEF -XSSS_UNIF = XUNDEF -XSIC_UNIF = XUNDEF -! -LSEA_SBL = .FALSE. -CSEAICE_SCHEME='NONE ' -LOCEAN_MERCATOR = .FALSE. -LOCEAN_CURRENT = .FALSE. -! -XTIME_REL = 25920000. -XCORFLX = 0. -LCUR_REL = .FALSE. -LTS_REL = .FALSE. -LZERO_FLUX = .FALSE. -LCORR_FLUX = .FALSE. -LDIAPYC = .FALSE. -! -IF (LHOOK) CALL DR_HOOK('DEFAULT_PREP_SEAFLUX',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE DEFAULT_PREP_SEAFLUX diff --git a/src/OASIS/SURFEX/default_seaflux.F90 b/src/OASIS/SURFEX/default_seaflux.F90 deleted file mode 100644 index 1141c6aa7..000000000 --- a/src/OASIS/SURFEX/default_seaflux.F90 +++ /dev/null @@ -1,112 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE DEFAULT_SEAFLUX(PTSTEP,POUT_TSTEP,HSEA_ALB,HSEA_FLUX, & - OPWG, OPRECIP, OPWEBB, KZ0, KGRVWAVES,& - OPROGSST, KTIME_COUPLING,POCEAN_TSTEP,& - PICHCE, HINTERPOL_SST, HINTERPOL_SSS, & - OWAVEWIND ) -! ######################################################################## -! -!!**** *DEFAULT_SEAFLUX* - routine to set default values for the configuration for SEAFLUX scheme -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 01/2006 : sea flux parameterization. -!! S. Belamari 03/2014 : add KZ0 (to choose PZ0SEA formulation) -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -REAL, INTENT(OUT) :: PTSTEP ! time step for run -REAL, INTENT(OUT) :: POUT_TSTEP ! time step for writing -CHARACTER(LEN=6), INTENT(OUT) :: HSEA_FLUX ! type of sea scheme -CHARACTER(LEN=4), INTENT(OUT) :: HSEA_ALB ! type of sea albedo -LOGICAL, INTENT(OUT) :: OPWG ! gustiness impact -LOGICAL, INTENT(OUT) :: OPRECIP ! precipitation correction -LOGICAL, INTENT(OUT) :: OPWEBB ! Webb correction -INTEGER, INTENT(OUT) :: KZ0 ! PZ0SEA formulation -INTEGER, INTENT(OUT) :: KGRVWAVES ! Wave gravity in roughness length -LOGICAL, INTENT(OUT) :: OPROGSST !two-way coupling -INTEGER, INTENT(OUT) :: KTIME_COUPLING!coupling frequency -REAL, INTENT(OUT) :: PICHCE !CE coef calculation for ECUME -REAL, INTENT(OUT) :: POCEAN_TSTEP !ocean 1D model time-step -CHARACTER(LEN=6), INTENT(OUT) :: HINTERPOL_SST ! Quadratic interpolation of monthly SST -CHARACTER(LEN=6), INTENT(OUT) :: HINTERPOL_SSS ! Quadratic interpolation of monthly SSS -LOGICAL, INTENT(OUT) :: OWAVEWIND ! wave parameters from wind only -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('DEFAULT_SEAFLUX',0,ZHOOK_HANDLE) -! -PTSTEP = XUNDEF -POUT_TSTEP = XUNDEF -! -HSEA_FLUX = "ECUME " -HSEA_ALB = "TA96" -! -OPWG = .FALSE. -OPRECIP = .FALSE. -OPWEBB = .FALSE. -OWAVEWIND = .TRUE. -! -KZ0 = 0 -KGRVWAVES = 0 -! -OPROGSST = .FALSE. -KTIME_COUPLING = 300 -POCEAN_TSTEP = 300. -! -PICHCE = 0.0 -! -HINTERPOL_SST = "NONE" -HINTERPOL_SSS = "NONE" -! -IF (LHOOK) CALL DR_HOOK('DEFAULT_SEAFLUX',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE DEFAULT_SEAFLUX diff --git a/src/OASIS/SURFEX/diag_cpl_esm_sea.F90 b/src/OASIS/SURFEX/diag_cpl_esm_sea.F90 deleted file mode 100644 index 835d46a87..000000000 --- a/src/OASIS/SURFEX/diag_cpl_esm_sea.F90 +++ /dev/null @@ -1,164 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE DIAG_CPL_ESM_SEA (S, D, DI, PTSTEP, PSFTQ, PRAIN, PSNOW, & - PLW, PPS, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, OSIC) -! ################################################################### -! -!!**** *DIAG_CPL_ESM_SEA * - Computes diagnostics over sea for -!! Earth system model coupling or embedded seaice scheme -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme -!! -!! MODIFICATIONS -!! ------------- -!! Original 08/2009 -!! S.Senesi 01/2014 Adapt to embedded seaice scheme (SWU and LWU -!! for seaice are provided as inputs) -!! A.Voldoire 04/2015 Add LCPL_SEAICE test -!! Modified 11/2014 : J. Pianezze : Add surface pressure coupling parameter -!!------------------------------------------------------------------ -! -USE MODD_DIAG_n, ONLY : DIAG_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_CSTS, ONLY : XSTEFAN, XLSTT -USE MODD_WATER_PAR, ONLY : XEMISWATICE -! -USE MODD_SFX_OASIS, ONLY : LCPL_SEAICE -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(DIAG_t), INTENT(INOUT) :: D -TYPE(DIAG_t), INTENT(INOUT) :: DI -! -REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step -REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux -REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! Rainfall -REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall -REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) -REAL, DIMENSION(:), INTENT(IN) :: PPS ! Surface pressure -REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux (W/m2) -REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s) -REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.) -REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.) -LOGICAL, INTENT(IN) :: OSIC -! -!* 0.2 declarations of local variables -! -REAL, DIMENSION(SIZE(S%XICE_ALB)) :: ZSWU, ZTICE4 -! -INTEGER :: ISWB ! number of SW bands -INTEGER :: JSWB ! loop counter on number of SW bands -INTEGER :: INI ! number of points -INTEGER :: JI ! loop counter on number of points -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_SEA',0,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! Total or free-ice sea flux -!------------------------------------------------------------------------------------- -! -!* 10m wind speed (m) -! -S%XCPL_SEA_WIND(:) = S%XCPL_SEA_WIND(:) + PTSTEP * SQRT(D%XZON10M(:)**2+D%XMER10M(:)**2) -! -!* wind stress (Pa.s) -! -S%XCPL_SEA_FWSU(:) = S%XCPL_SEA_FWSU(:) + PTSTEP * D%XFMU(:) -S%XCPL_SEA_FWSV(:) = S%XCPL_SEA_FWSV(:) + PTSTEP * D%XFMV(:) -S%XCPL_SEA_FWSM(:) = S%XCPL_SEA_FWSM(:) + PTSTEP * SQRT(D%XFMU(:)**2+D%XFMV(:)**2) -! -!* Solar net heat flux (J/m2) -! -S%XCPL_SEA_SNET(:) = S%XCPL_SEA_SNET(:) + PTSTEP * (D%XSWD(:) - D%XSWU(:)) -! -!* Non solar heat flux (J/m2) -! -S%XCPL_SEA_HEAT(:) = S%XCPL_SEA_HEAT(:) + PTSTEP * (D%XGFLUX(:) + D%XSWU(:) - D%XSWD(:)) -! -!* Evaporation (kg/m2) -! -S%XCPL_SEA_EVAP(:) = S%XCPL_SEA_EVAP(:) + PTSTEP * PSFTQ(:) -! -!* Precip (kg/m2) -! -S%XCPL_SEA_RAIN(:) = S%XCPL_SEA_RAIN(:) + PTSTEP * PRAIN(:) -S%XCPL_SEA_SNOW(:) = S%XCPL_SEA_SNOW(:) + PTSTEP * PSNOW(:) -! -!* Evaporation - Precip (kg/m2) -! -S%XCPL_SEA_EVPR(:) = S%XCPL_SEA_EVPR(:) + S%XCPL_SEA_EVAP(:) - S%XCPL_SEA_RAIN(:) - S%XCPL_SEA_SNOW(:) -! -!* Cumulated surface pressure (Pa.s) -! -S%XCPL_SEA_PRES(:) = S%XCPL_SEA_PRES(:) + PTSTEP * PPS(:) -! -!------------------------------------------------------------------------------------- -! Ice flux -!------------------------------------------------------------------------------------- -IF (LCPL_SEAICE.OR.OSIC) THEN -! - INI = SIZE(PDIR_SW,1) - ISWB = SIZE(PDIR_SW,2) -! -!* Solar net heat flux (J/m2) -! - IF (OSIC) THEN - ZSWU(:)=DI%XSWU(:) - ELSE - ZSWU(:)=0.0 - DO JSWB=1,ISWB - DO JI=1,INI - ZSWU(JI) = ZSWU(JI) + (PDIR_SW(JI,JSWB)+PSCA_SW(JI,JSWB)) * S%XICE_ALB(JI) - ENDDO - ENDDO - ENDIF -! - S%XCPL_SEAICE_SNET(:) = S%XCPL_SEAICE_SNET(:) + PTSTEP * (D%XSWD(:) - ZSWU(:)) -! -!* Non solar heat flux (J/m2) -! - IF (OSIC) THEN - S%XCPL_SEAICE_HEAT(:) = S%XCPL_SEAICE_HEAT(:) + PTSTEP * & - ( PLW(:) - DI%XLWU(:) - PSFTH_ICE(:) - XLSTT*PSFTQ_ICE(:) ) - ELSE - ZTICE4(:)=S%XTICE(:)**4 - S%XCPL_SEAICE_HEAT(:) = S%XCPL_SEAICE_HEAT(:) + PTSTEP * ( XEMISWATICE*(PLW(:)-XSTEFAN*ZTICE4(:)) & - - PSFTH_ICE(:) - XLSTT*PSFTQ_ICE(:) ) - ENDIF -! -!* Sublimation (kg/m2) -! - S%XCPL_SEAICE_EVAP(:) = S%XCPL_SEAICE_EVAP(:) + PTSTEP * PSFTQ_ICE(:) -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_SEA',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! -END SUBROUTINE DIAG_CPL_ESM_SEA diff --git a/src/OASIS/SURFEX/diag_inline_seafluxn.F90 b/src/OASIS/SURFEX/diag_inline_seafluxn.F90 deleted file mode 100644 index 30b0c96dc..000000000 --- a/src/OASIS/SURFEX/diag_inline_seafluxn.F90 +++ /dev/null @@ -1,309 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE DIAG_INLINE_SEAFLUX_n (DGO, D, DC, DI, DIC, DGMSI, S, & - PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, & - PMERA, PHT, PHW, PCD, PCDN, PCH, PCE, PRI, PHU, & - PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, & - PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, & - PEMIS, PTRAD, PRAIN, PSNOW, & - PCD_ICE, PCDN_ICE, PCH_ICE, PCE_ICE, PRI_ICE, & - PZ0_ICE, PZ0H_ICE, PQSAT_ICE, PSFTH_ICE, PSFTQ_ICE, & - PSFZON_ICE, PSFMER_ICE ) - -! ##################################################################################### -! -!!**** *DIAG_INLINE_SEAFLUX_n * - computes diagnostics during SEAFLUX time-step -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 01/2006 : sea flux parameterization. -!! B. Decharme 08/2009 : Diag for Earth System Model Coupling -!! S. Riette 06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one -!! more argument (height of diagnostic) -!! B. Decharme 04/2013 : Add EVAP and SUBL diag -!! S. Senesi 01/2014 ! introduce fractional seaice and sea-ice model -!! J. Pianezze 08/2016 : Add surface pressure coupling parameter -!!------------------------------------------------------------------ -! -USE MODD_DIAG_n, ONLY : DIAG_t, DIAG_OPTIONS_t -USE MODD_DIAG_MISC_SEAICE_n, ONLY : DIAG_MISC_SEAICE_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_CSTS, ONLY : XTTS -USE MODD_SURF_PAR, ONLY : XUNDEF -USE MODD_SFX_OASIS, ONLY : LCPL_SEA -! -USE MODD_TYPES_GLT, ONLY : T_GLT -USE MODD_GLT_PARAM , ONLY : GELATO_DIM=>NX -USE MODE_GLT_STATS , ONLY : GLT_AVHICEM, GLT_AVHSNWM -USE MODI_CLS_TQ -USE MODI_CLS_WIND -USE MODI_DIAG_SURF_BUDGET_SEA -USE MODI_DIAG_SURF_BUDGETC -USE MODI_DIAG_CPL_ESM_SEA -! -USE MODI_SEAFLUX_ALBEDO -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO -TYPE(DIAG_t), INTENT(INOUT) :: D -TYPE(DIAG_t), INTENT(INOUT) :: DC -TYPE(DIAG_t), INTENT(INOUT) :: DI -TYPE(DIAG_t), INTENT(INOUT) :: DIC -TYPE(DIAG_MISC_SEAICE_t), INTENT(INOUT) :: DGMSI -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -! -REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s) -REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature -REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity -REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure -REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure -REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density -REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind -REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind -REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height -REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind -REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum -REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient -REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat -REAL, DIMENSION(:), INTENT(IN) :: PCE ! drag coefficient for vapor -REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number -REAL, DIMENSION(:), INTENT(IN) :: PHU ! near-surface humidity -REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat -REAL, DIMENSION(:), INTENT(IN) :: PQSAT ! humidity at saturation -REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction -REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction -REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2) -REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s) -REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.) -! ! (W/m2) -REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.) -! ! (W/m2) -REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) -REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K) -REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-) -REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-) -REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-) -! -REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! Rainfall (kg/m2/s) -REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall (kg/m2/s) -! -REAL, DIMENSION(:), INTENT(IN) :: PCD_ICE ! drag coefficient for momentum -REAL, DIMENSION(:), INTENT(IN) :: PCDN_ICE ! neutral drag coefficient -REAL, DIMENSION(:), INTENT(IN) :: PCH_ICE ! drag coefficient for heat -REAL, DIMENSION(:), INTENT(IN) :: PCE_ICE ! drag coefficient for vapor -REAL, DIMENSION(:), INTENT(IN) :: PRI_ICE ! Richardson number -REAL, DIMENSION(:), INTENT(IN) :: PZ0_ICE ! roughness length for momentum -REAL, DIMENSION(:), INTENT(IN) :: PZ0H_ICE ! roughness length for heat -REAL, DIMENSION(:), INTENT(IN) :: PQSAT_ICE ! humidity at saturation -REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux (W/m2) -REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s) -REAL, DIMENSION(:), INTENT(IN) :: PSFZON_ICE ! zonal friction -REAL, DIMENSION(:), INTENT(IN) :: PSFMER_ICE ! meridian friction -! -!* 0.2 declarations of local variables -! -LOGICAL :: GSIC -REAL, DIMENSION(SIZE(PTA)) :: ZZ0W -REAL, DIMENSION(SIZE(PTA)) :: ZH -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',0,ZHOOK_HANDLE) -! -! * Mean surface temperature need to couple with AGCM -! -IF (S%LHANDLE_SIC) THEN - D%XTS (:) = (1 - S%XSIC(:)) * S%XSST(:) + S%XSIC(:) * S%XTICE(:) - D%XTSRAD(:) = PTRAD(:) -ELSE - D%XTS (:) = S%XSST (:) - D%XTSRAD(:) = PTRAD(:) -ENDIF -! -IF (.NOT. S%LSBL) THEN -! - IF (DGO%N2M==2) THEN - ZH(:)=2. - CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, & - S%XSST, PHU, PZ0H, ZH,D%XT2M, D%XQ2M, D%XHU2M) - ZH(:)=10. - CALL CLS_WIND(PZONA, PMERA, PHW,PCD, PCDN, PRI, ZH, & - D%XZON10M, D%XMER10M) - IF (S%LHANDLE_SIC) THEN - ZH(:)=2. - CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT, PCD_ICE, PCH_ICE, PRI_ICE, & - S%XTICE, PHU, PZ0H_ICE, ZH, DI%XT2M, DI%XQ2M, DI%XHU2M) - ZH(:)=10. - CALL CLS_WIND(PZONA, PMERA, PHW, PCD_ICE, PCDN_ICE, PRI_ICE, ZH, & - DI%XZON10M, DI%XMER10M ) - ENDIF - END IF -! - IF (DGO%N2M>=1) THEN - IF (S%LHANDLE_SIC) THEN - ! - D%XT2M = D%XT2M * (1 - S%XSIC) + DI%XT2M * S%XSIC - D%XQ2M = D%XQ2M * (1 - S%XSIC) + DI%XQ2M * S%XSIC - D%XHU2M = D%XHU2M * (1 - S%XSIC) + DI%XHU2M * S%XSIC - ! - D%XZON10M(:) = D%XZON10M(:) * (1 - S%XSIC(:)) + DI%XZON10M(:) * S%XSIC(:) - D%XMER10M(:) = D%XMER10M(:) * (1 - S%XSIC(:)) + DI%XMER10M(:) * S%XSIC(:) - DI%XWIND10M(:) = SQRT(DI%XZON10M(:)**2+DI%XMER10M(:)**2) - ! - D%XRI = PRI * (1 - S%XSIC) + PRI_ICE * S%XSIC - DI%XRI =PRI_ICE - ELSE - D%XRI =PRI - ENDIF - ! - D%XT2M_MIN(:) = MIN(D%XT2M_MIN(:),D%XT2M(:)) - D%XT2M_MAX(:) = MAX(D%XT2M_MAX(:),D%XT2M(:)) - ! - D%XHU2M_MIN(:) = MIN(D%XHU2M_MIN(:),D%XHU2M(:)) - D%XHU2M_MAX(:) = MAX(D%XHU2M_MAX(:),D%XHU2M(:)) - ! - D%XWIND10M(:) = SQRT(D%XZON10M(:)**2+D%XMER10M(:)**2) - D%XWIND10M_MAX(:) = MAX(D%XWIND10M_MAX(:),D%XWIND10M(:)) - ! - ENDIF -! -ELSE - IF (DGO%N2M>=1) THEN - D%XT2M = XUNDEF - D%XQ2M = XUNDEF - D%XHU2M = XUNDEF - D%XZON10M = XUNDEF - D%XMER10M = XUNDEF - D%XRI = PRI - ENDIF -ENDIF -! -IF (DGO%LSURF_BUDGET.OR.DGO%LSURF_BUDGETC) THEN -! - CALL SEAFLUX_ALBEDO(PDIR_SW,PSCA_SW,PDIR_ALB,PSCA_ALB,D%XALBT) -! - CALL DIAG_SURF_BUDGET_SEA (D, DI, S, XTTS, PRHOA, PSFTH, PSFTH_ICE, & - PSFTQ, PSFTQ_ICE, PDIR_SW, PSCA_SW, PLW, & - PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, & - PSFZON, PSFZON_ICE, PSFMER, PSFMER_ICE ) - IF (S%LHANDLE_SIC) DI%XLE = D%XLEI -! -END IF -! -IF(DGO%LSURF_BUDGETC)THEN - ! - CALL DIAG_SURF_BUDGETC(D, DC, PTSTEP, .TRUE.) - ! - IF (S%LHANDLE_SIC) THEN - CALL DIAG_SURF_BUDGETC(DI, DIC, PTSTEP, .FALSE.) - DIC%XLE = DC%XLEI - ENDIF - ! -ENDIF -! -IF (DGO%LCOEF) THEN - IF (S%LHANDLE_SIC) THEN - ! - !* Transfer coefficients - ! - D%XCD = (1 - S%XSIC) * PCD + S%XSIC * PCD_ICE - D%XCH = (1 - S%XSIC) * PCH + S%XSIC * PCH_ICE - D%XCE = (1 - S%XSIC) * PCE + S%XSIC * PCE_ICE - ! - !* Roughness lengths - ! - ZZ0W = ( 1 - S%XSIC ) * 1.0/(LOG(PHW/S%XZ0) **2) + S%XSIC * 1.0/(LOG(PHW/PZ0_ICE)**2) - D%XZ0 = PHW * EXP ( - SQRT ( 1./ ZZ0W )) - ZZ0W = ( 1 - S%XSIC ) * 1.0/(LOG(PHW/PZ0H) **2) + S%XSIC * 1.0/(LOG(PHW/PZ0H_ICE)**2) - D%XZ0H = PHW * EXP ( - SQRT ( 1./ ZZ0W )) - - DI%XCD = PCD_ICE - DI%XCH = PCH_ICE - DI%XZ0 = PZ0_ICE - DI%XZ0H = PZ0H_ICE - ! - ELSE - ! - !* Transfer coefficients - ! - D%XCD = PCD - D%XCH = PCH - D%XCE = PCE - ! - !* Roughness lengths - ! - D%XZ0 = S%XZ0 - D%XZ0H = PZ0H - ENDIF - ! -ENDIF -! -IF (DGO%LSURF_VARS) THEN - ! - !* Humidity at saturation - ! - IF (S%LHANDLE_SIC) THEN - D%XQS = (1 - S%XSIC) * PQSAT + S%XSIC * PQSAT_ICE - DI%XQS = PQSAT_ICE - ELSE - D%XQS = PQSAT - ENDIF -ENDIF -! -! Diags from embedded Seaice model -! CALL DIAG_INLINE_SEAICE() : simply : -! -IF (DGMSI%LDIAG_MISC_SEAICE) THEN - IF (TRIM(S%CSEAICE_SCHEME) == 'GELATO') THEN - GELATO_DIM=SIZE(PTA) - DGMSI%XSIT = RESHAPE(glt_avhicem(S%TGLT%dom,S%TGLT%sit),(/GELATO_DIM/)) - DGMSI%XSND = RESHAPE(glt_avhsnwm(S%TGLT%dom,S%TGLT%sit),(/GELATO_DIM/)) - DGMSI%XMLT = S%TGLT%oce_all(:,1)%tml - ELSE - ! Placeholder for an alternate seaice scheme - ENDIF -ENDIF -! -! Diags for Earth System Model coupling or for embedded Seaice model -! (we are actually using XCPL_.. variables for feeding the seaice model) -! -GSIC=(S%LHANDLE_SIC.AND.(S%CSEAICE_SCHEME /= 'NONE ')) -! -IF (LCPL_SEA.OR.GSIC) THEN -! - CALL DIAG_CPL_ESM_SEA(S, D, DI, PTSTEP, PSFTQ, PRAIN, PSNOW, & - PLW, PPS, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, GSIC ) -! -ENDIF -IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! -END SUBROUTINE DIAG_INLINE_SEAFLUX_n diff --git a/src/OASIS/SURFEX/diag_seaflux_initn.F90 b/src/OASIS/SURFEX/diag_seaflux_initn.F90 deleted file mode 100644 index daa9db0c1..000000000 --- a/src/OASIS/SURFEX/diag_seaflux_initn.F90 +++ /dev/null @@ -1,239 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE DIAG_SEAFLUX_INIT_n (DOC, DGO, D, DC, OREAD_BUDGETC, S, & - HPROGRAM,KLU,KSW) -! ##################### -! -!!**** *DIAG_SEAFLUX_INIT_n* - routine to initialize SEAFLUX diagnostic variables -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 01/2006 : sea flux parameterization. -!! Modified 08/2009 : cumulative sea flux -!! B. decharme 04/2013 : Add EVAP and SUBL diag -!! S.Senesi 01/2014 : introduce fractional seaice -!! Modified 11/2014 : J. Pianezze : Add surface pressure coupling parameter -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODE_DIAG -! -USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t -USE MODD_DIAG_n, ONLY : DIAG_t, DIAG_OPTIONS_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -#ifdef SFX_OL -USE MODN_IO_OFFLINE, ONLY : LRESTART -#endif -USE MODD_SURF_PAR, ONLY : XUNDEF -USE MODD_SFX_OASIS, ONLY : LCPL_SEA,LCPL_SEAICE -! -USE MODI_READ_SURF -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DOC -TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO -TYPE(DIAG_t), INTENT(INOUT) :: D -TYPE(DIAG_t), INTENT(INOUT) :: DC -LOGICAL, INTENT(IN) :: OREAD_BUDGETC -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -! -INTEGER, INTENT(IN) :: KLU ! size of arrays -INTEGER, INTENT(IN) :: KSW ! number of SW spectral bands - CHARACTER(LEN=6), INTENT(IN):: HPROGRAM ! program calling -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: IVERSION -INTEGER :: IRESP ! IRESP : return-code if a problem appears -CHARACTER(LEN=LEN_HREC) :: YREC ! Name of the article to be read -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',0,ZHOOK_HANDLE) -! -!* surface energy budget -! - CALL ALLOC_BUD(DGO,D,KLU,KSW) -! -IF (DGO%LSURF_BUDGET.OR.DGO%LSURF_BUDGETC) THEN - ! - ALLOCATE(D%XEVAP (KLU)) - ALLOCATE(D%XSUBL (KLU)) - ALLOCATE(D%XALBT (KLU)) - ! - D%XEVAP = XUNDEF - D%XSUBL = XUNDEF - D%XALBT = XUNDEF - ! -ELSE - ! - ALLOCATE(D%XEVAP (0)) - ALLOCATE(D%XSUBL (0)) - ALLOCATE(D%XALBT (0)) - ! -ENDIF -! -ALLOCATE(D%XTSRAD(KLU)) -D%XTSRAD = XUNDEF -! -!* cumulative surface energy budget -! -#ifdef SFX_OL -IF (DGO%LSURF_BUDGETC .OR. (LRESTART .AND. .NOT.DGO%LRESET_BUDGETC)) THEN -#else -IF (DGO%LSURF_BUDGETC .OR. .NOT.DGO%LRESET_BUDGETC) THEN -#endif - ! - CALL ALLOC_SURF_BUD(DC,KLU,KLU,KSW) - ALLOCATE(DC%XEVAP (KLU)) - ALLOCATE(DC%XSUBL (KLU)) - ! - IF (.NOT.OREAD_BUDGETC .OR. OREAD_BUDGETC.AND.DGO%LRESET_BUDGETC) THEN - CALL INIT_SURF_BUD(DC,0.) - DC%XEVAP = 0.0 - DC%XSUBL = 0.0 - ELSE - CALL READ_SURF(HPROGRAM,'VERSION',IVERSION,IRESP) - YREC='RNC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XRN,IRESP) - YREC='HC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XH,IRESP) - YREC='LEC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XLE,IRESP) - YREC='LEIC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XLEI,IRESP) - YREC='GFLUXC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XGFLUX,IRESP) - YREC='SWDC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XSWD,IRESP) - YREC='SWUC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XSWU,IRESP) - YREC='LWDC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XLWD,IRESP) - YREC='LWUC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XLWU,IRESP) - YREC='FMUC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XFMU,IRESP) - YREC='FMVC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XFMV,IRESP) - IF (IVERSION<8)THEN - DC%XEVAP = 0.0 - DC%XSUBL = 0.0 - ELSE - ! - YREC='EVAPC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XEVAP,IRESP) - YREC='SUBLC_SEA' - CALL READ_SURF(HPROGRAM,YREC,DC%XSUBL,IRESP) - ENDIF - ENDIF -ELSE - CALL ALLOC_SURF_BUD(DC,0,0,0) -ENDIF -! -!* ocean diag -! -IF (DOC%LDIAG_OCEAN) THEN - ALLOCATE(DOC%XTOCMOY (KLU)) - ALLOCATE(DOC%XSOCMOY (KLU)) - ALLOCATE(DOC%XUOCMOY (KLU)) - ALLOCATE(DOC%XVOCMOY (KLU)) - ALLOCATE(DOC%XDOCMOY (KLU)) - ! - DOC%XTOCMOY(:)=XUNDEF - DOC%XSOCMOY(:)=XUNDEF - DOC%XUOCMOY(:)=XUNDEF - DOC%XVOCMOY(:)=XUNDEF - DOC%XDOCMOY(:)=XUNDEF -ELSE - ALLOCATE(DOC%XTOCMOY (0)) - ALLOCATE(DOC%XSOCMOY (0)) - ALLOCATE(DOC%XUOCMOY (0)) - ALLOCATE(DOC%XVOCMOY (0)) - ALLOCATE(DOC%XDOCMOY (0)) -ENDIF -! -! -!* Earth system model coupling variables -! -IF(LCPL_SEA.OR.S%LHANDLE_SIC)THEN -! - ALLOCATE(S%XCPL_SEA_WIND(KLU)) - ALLOCATE(S%XCPL_SEA_FWSU(KLU)) - ALLOCATE(S%XCPL_SEA_FWSV(KLU)) - ALLOCATE(S%XCPL_SEA_SNET(KLU)) - ALLOCATE(S%XCPL_SEA_HEAT(KLU)) - ALLOCATE(S%XCPL_SEA_EVAP(KLU)) - ALLOCATE(S%XCPL_SEA_RAIN(KLU)) - ALLOCATE(S%XCPL_SEA_SNOW(KLU)) - ALLOCATE(S%XCPL_SEA_EVPR(KLU)) - ALLOCATE(S%XCPL_SEA_FWSM(KLU)) - ALLOCATE(S%XCPL_SEA_PRES(KLU)) - S%XCPL_SEA_WIND(:) = 0.0 - S%XCPL_SEA_FWSU(:) = 0.0 - S%XCPL_SEA_FWSV(:) = 0.0 - S%XCPL_SEA_SNET(:) = 0.0 - S%XCPL_SEA_HEAT(:) = 0.0 - S%XCPL_SEA_EVAP(:) = 0.0 - S%XCPL_SEA_RAIN(:) = 0.0 - S%XCPL_SEA_EVPR(:) = 0.0 - S%XCPL_SEA_SNOW(:) = 0.0 - S%XCPL_SEA_FWSM(:) = 0.0 - S%XCPL_SEA_PRES(:) = 0.0 -! -ELSE - ALLOCATE(S%XCPL_SEA_WIND(0)) - ALLOCATE(S%XCPL_SEA_FWSU(0)) - ALLOCATE(S%XCPL_SEA_FWSV(0)) - ALLOCATE(S%XCPL_SEA_SNET(0)) - ALLOCATE(S%XCPL_SEA_HEAT(0)) - ALLOCATE(S%XCPL_SEA_EVAP(0)) - ALLOCATE(S%XCPL_SEA_RAIN(0)) - ALLOCATE(S%XCPL_SEA_SNOW(0)) - ALLOCATE(S%XCPL_SEA_EVPR(0)) - ALLOCATE(S%XCPL_SEA_FWSM(0)) - ALLOCATE(S%XCPL_SEA_PRES(0)) -ENDIF -! -IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE DIAG_SEAFLUX_INIT_n diff --git a/src/OASIS/SURFEX/get_sfx_sea.F90 b/src/OASIS/SURFEX/get_sfx_sea.F90 deleted file mode 100644 index 4778ff731..000000000 --- a/src/OASIS/SURFEX/get_sfx_sea.F90 +++ /dev/null @@ -1,250 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE GET_SFX_SEA (S, U, W, & - OCPL_SEAICE,OWATER, & - PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET, & - PSEA_WIND,PSEA_FWSM,PSEA_EVAP,PSEA_RAIN, & - PSEA_SNOW,PSEA_EVPR,PSEA_WATF,PSEA_PRES, & - PSEAICE_HEAT,PSEAICE_SNET,PSEAICE_EVAP ) -! ############################################################################ -! -!!**** *GET_SFX_SEA* - routine to get some variables from surfex to -! a oceanic general circulation model -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2013 -!! Modified 11/2014 : J. Pianezze - Add surface pressure coupling parameter -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_WATFLUX_n, ONLY : WATFLUX_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -! -! -! -USE MODI_UNPACK_SAME_RANK -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(WATFLUX_t), INTENT(INOUT) :: W -! -LOGICAL, INTENT(IN) :: OCPL_SEAICE ! sea-ice / ocean key -LOGICAL, INTENT(IN) :: OWATER ! water included in sea smask -! -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSU ! Cumulated zonal wind stress (Pa.s) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSV ! Cumulated meridian wind stress (Pa.s) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_HEAT ! Cumulated Non solar net heat flux (J/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_SNET ! Cumulated Solar net heat flux (J/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_WIND ! Cumulated 10m wind speed (m) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSM ! Cumulated wind stress (Pa.s) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVAP ! Cumulated Evaporation (kg/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_RAIN ! Cumulated Rainfall rate (kg/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_SNOW ! Cumulated Snowfall rate (kg/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVPR ! Cumulated Evap-Precip (kg/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_WATF ! Cumulated Net water flux (kg/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEA_PRES ! Cumulated Surface pressure (Pa.s) -! -REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux (J/m2) -REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_EVAP ! Cumulated Sea-ice sublimation (kg/m2) -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZWIND -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZFWSU -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZFWSV -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZSNET -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZHEAT -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZEVAP -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZRAIN -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZSNOW -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZFWSM -! -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZSNET_ICE -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZHEAT_ICE -REAL, DIMENSION(SIZE(PSEA_HEAT)) :: ZEVAP_ICE -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('GET_SFX_SEA',0,ZHOOK_HANDLE) -!------------------------------------------------------------------------------- -! -!* 1.0 Initialization -! -------------- -! -PSEA_FWSU (:) = XUNDEF -PSEA_FWSV (:) = XUNDEF -PSEA_HEAT (:) = XUNDEF -PSEA_SNET (:) = XUNDEF -PSEA_WIND (:) = XUNDEF -PSEA_FWSM (:) = XUNDEF -PSEA_EVAP (:) = XUNDEF -PSEA_RAIN (:) = XUNDEF -PSEA_SNOW (:) = XUNDEF -PSEA_WATF (:) = XUNDEF -! -PSEAICE_HEAT (:) = XUNDEF -PSEAICE_SNET (:) = XUNDEF -PSEAICE_EVAP (:) = XUNDEF -! -ZFWSU (:) = XUNDEF -ZFWSV (:) = XUNDEF -ZHEAT (:) = XUNDEF -ZSNET (:) = XUNDEF -ZWIND (:) = XUNDEF -ZFWSM (:) = XUNDEF -ZEVAP (:) = XUNDEF -ZRAIN (:) = XUNDEF -ZSNOW (:) = XUNDEF -! -ZHEAT_ICE (:) = XUNDEF -ZSNET_ICE (:) = XUNDEF -ZEVAP_ICE (:) = XUNDEF -! -!* 2.0 Get variable over sea -! --------------------- -! -IF(U%NSIZE_SEA>0)THEN -! - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_WIND(:),PSEA_WIND(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSU(:),PSEA_FWSU(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSV(:),PSEA_FWSV(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_SNET(:),PSEA_SNET(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_HEAT(:),PSEA_HEAT(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVAP(:),PSEA_EVAP(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_RAIN(:),PSEA_RAIN(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_SNOW(:),PSEA_SNOW(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVPR(:),PSEA_EVPR(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSM(:),PSEA_FWSM(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_PRES(:),PSEA_PRES(:),XUNDEF) - S%XCPL_SEA_WIND(:) = 0.0 - S%XCPL_SEA_EVAP(:) = 0.0 - S%XCPL_SEA_HEAT(:) = 0.0 - S%XCPL_SEA_SNET(:) = 0.0 - S%XCPL_SEA_FWSU(:) = 0.0 - S%XCPL_SEA_FWSV(:) = 0.0 - S%XCPL_SEA_RAIN(:) = 0.0 - S%XCPL_SEA_SNOW(:) = 0.0 - S%XCPL_SEA_EVPR(:) = 0.0 - S%XCPL_SEA_FWSM(:) = 0.0 - S%XCPL_SEA_PRES(:) = 0.0 -! - IF (OCPL_SEAICE) THEN - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_SNET(:),PSEAICE_SNET(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_HEAT(:),PSEAICE_HEAT(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_EVAP(:),PSEAICE_EVAP(:),XUNDEF) - S%XCPL_SEAICE_SNET(:) = 0.0 - S%XCPL_SEAICE_EVAP(:) = 0.0 - S%XCPL_SEAICE_HEAT(:) = 0.0 - ENDIF -! -ENDIF -! -!* 3.0 Get variable over water without Flake -! ------------------------------------- -! -IF (OWATER.AND.U%NSIZE_WATER>0) THEN -! - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_WIND(:),ZWIND(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSU(:),ZFWSU(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSV(:),ZFWSV(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_SNET(:),ZSNET(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_HEAT(:),ZHEAT(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_EVAP(:),ZEVAP(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_RAIN(:),ZRAIN(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_SNOW(:),ZSNOW(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSM(:),ZFWSM(:),XUNDEF) -! - WHERE(U%XWATER(:)>0.0) - PSEA_WIND(:) = (U%XSEA(:)*PSEA_WIND(:)+U%XWATER(:)*ZWIND(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_FWSU(:) = (U%XSEA(:)*PSEA_FWSU(:)+U%XWATER(:)*ZFWSU(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_FWSV(:) = (U%XSEA(:)*PSEA_FWSV(:)+U%XWATER(:)*ZFWSV(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_SNET(:) = (U%XSEA(:)*PSEA_SNET(:)+U%XWATER(:)*ZSNET(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_HEAT(:) = (U%XSEA(:)*PSEA_HEAT(:)+U%XWATER(:)*ZHEAT(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_EVAP(:) = (U%XSEA(:)*PSEA_EVAP(:)+U%XWATER(:)*ZEVAP(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_RAIN(:) = (U%XSEA(:)*PSEA_RAIN(:)+U%XWATER(:)*ZRAIN(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_SNOW(:) = (U%XSEA(:)*PSEA_SNOW(:)+U%XWATER(:)*ZSNOW(:))/(U%XSEA(:)+U%XWATER(:)) - PSEA_FWSM(:) = (U%XSEA(:)*PSEA_FWSM(:)+U%XWATER(:)*ZFWSM(:))/(U%XSEA(:)+U%XWATER(:)) - ENDWHERE -! - W%XCPL_WATER_WIND(:) = 0.0 - W%XCPL_WATER_EVAP(:) = 0.0 - W%XCPL_WATER_HEAT(:) = 0.0 - W%XCPL_WATER_SNET(:) = 0.0 - W%XCPL_WATER_FWSU(:) = 0.0 - W%XCPL_WATER_FWSV(:) = 0.0 - W%XCPL_WATER_RAIN(:) = 0.0 - W%XCPL_WATER_SNOW(:) = 0.0 - W%XCPL_WATER_FWSM(:) = 0.0 -! - IF (OCPL_SEAICE) THEN - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_SNET(:),ZSNET_ICE(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_HEAT(:),ZHEAT_ICE(:),XUNDEF) - CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_EVAP(:),ZEVAP_ICE(:),XUNDEF) - WHERE(U%XWATER(:)>0.0) - PSEAICE_SNET(:) = (U%XSEA(:)*PSEAICE_SNET(:)+U%XWATER(:)*ZSNET_ICE(:))/(U%XSEA(:)+U%XWATER(:)) - PSEAICE_HEAT(:) = (U%XSEA(:)*PSEAICE_HEAT(:)+U%XWATER(:)*ZHEAT_ICE(:))/(U%XSEA(:)+U%XWATER(:)) - PSEAICE_EVAP(:) = (U%XSEA(:)*PSEAICE_EVAP(:)+U%XWATER(:)*ZEVAP_ICE(:))/(U%XSEA(:)+U%XWATER(:)) - ENDWHERE - W%XCPL_WATERICE_SNET(:) = 0.0 - W%XCPL_WATERICE_EVAP(:) = 0.0 - W%XCPL_WATERICE_HEAT(:) = 0.0 - ENDIF -! -ENDIF -! -!* 4.0 Net water flux -! ----------------------- -! -IF(U%NSIZE_SEA>0)THEN -! - PSEA_WATF(:) = PSEA_RAIN(:) + PSEA_SNOW(:) - PSEA_EVAP(:) -! -ENDIF -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('GET_SFX_SEA',1,ZHOOK_HANDLE) -!------------------------------------------------------------------------------- -! -END SUBROUTINE GET_SFX_SEA diff --git a/src/OASIS/SURFEX/get_sfxcpln.F90 b/src/OASIS/SURFEX/get_sfxcpln.F90 deleted file mode 100644 index 32a566dda..000000000 --- a/src/OASIS/SURFEX/get_sfxcpln.F90 +++ /dev/null @@ -1,226 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE GET_SFXCPL_n (IM, S, U, W, & - HPROGRAM,KI,PRUI,PWIND,PFWSU,PFWSV,PSNET, & - PHEAT,PEVAP,PRAIN,PSNOW,PEVPR,PICEFLUX, & - PFWSM,PPS,PHEAT_ICE,PEVAP_ICE,PSNET_ICE) -! ################################################################### -! -!!**** *GETSFXCPL_n* - routine to get some variables from surfex into -! ocean and/or a river routing model when the coupler -! is not in SURFEX but in ARPEGE. -! -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! This routine will be suppress soon. -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 08/2009 -!! 10/2016 B. Decharme : bug surface/groundwater coupling -!! Modified 11/2014 : J. Pianezze - Add surface pressure coupling parameter -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -! -! -USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_WATFLUX_n, ONLY : WATFLUX_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODN_SFX_OASIS, ONLY : LWATER -USE MODD_SFX_OASIS, ONLY : LCPL_LAND, LCPL_CALVING, LCPL_GW, & - LCPL_FLOOD, LCPL_SEA, LCPL_SEAICE -! -USE MODI_GET_SFX_SEA -USE MODI_GET_SFX_LAND -USE MODI_ABOR1_SFX -USE MODI_GET_LUOUT -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -USE MODI_GET_1D_MASK -! -USE MODI_GET_FRAC_n -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(ISBA_MODEL_t), INTENT(INOUT) :: IM -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(WATFLUX_t), INTENT(INOUT) :: W -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM -INTEGER, INTENT(IN) :: KI ! number of points -! -REAL, DIMENSION(KI), INTENT(OUT) :: PRUI -REAL, DIMENSION(KI), INTENT(OUT) :: PWIND -REAL, DIMENSION(KI), INTENT(OUT) :: PFWSU -REAL, DIMENSION(KI), INTENT(OUT) :: PFWSV -REAL, DIMENSION(KI), INTENT(OUT) :: PSNET -REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT -REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP -REAL, DIMENSION(KI), INTENT(OUT) :: PRAIN -REAL, DIMENSION(KI), INTENT(OUT) :: PSNOW -REAL, DIMENSION(KI), INTENT(OUT) :: PEVPR -REAL, DIMENSION(KI), INTENT(OUT) :: PICEFLUX -REAL, DIMENSION(KI), INTENT(OUT) :: PFWSM -REAL, DIMENSION(KI), INTENT(OUT) :: PPS -REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT_ICE -REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP_ICE -REAL, DIMENSION(KI), INTENT(OUT) :: PSNET_ICE -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -REAL, DIMENSION(KI) :: ZRUNOFF ! Cumulated Surface runoff (kg/m2) -REAL, DIMENSION(KI) :: ZDRAIN ! Cumulated Deep drainage (kg/m2) -REAL, DIMENSION(KI) :: ZCALVING ! Cumulated Calving flux (kg/m2) -REAL, DIMENSION(KI) :: ZSRCFLOOD ! Cumulated flood freshwater flux (kg/m2) -! -REAL, DIMENSION(KI) :: ZSEA_FWSU ! Cumulated zonal wind stress (Pa.s) -REAL, DIMENSION(KI) :: ZSEA_FWSV ! Cumulated meridian wind stress (Pa.s) -REAL, DIMENSION(KI) :: ZSEA_HEAT ! Cumulated Non solar net heat flux (J/m2) -REAL, DIMENSION(KI) :: ZSEA_SNET ! Cumulated Solar net heat flux (J/m2) -REAL, DIMENSION(KI) :: ZSEA_WIND ! Cumulated 10m wind speed (m) -REAL, DIMENSION(KI) :: ZSEA_FWSM ! Cumulated wind stress (Pa.s) -REAL, DIMENSION(KI) :: ZSEA_EVAP ! Cumulated Evaporation (kg/m2) -REAL, DIMENSION(KI) :: ZSEA_RAIN ! Cumulated Rainfall rate (kg/m2) -REAL, DIMENSION(KI) :: ZSEA_SNOW ! Cumulated Snowfall rate (kg/m2) -REAL, DIMENSION(KI) :: ZSEA_EVPR ! Cumulated Evap-Precp. rate (kg/m2) -REAL, DIMENSION(KI) :: ZSEA_WATF ! Cumulated freshwater flux (kg/m2) -REAL, DIMENSION(KI) :: ZSEA_PRES ! Cumulated Surface pressure (Pa.s) -! -REAL, DIMENSION(KI) :: ZSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2) -REAL, DIMENSION(KI) :: ZSEAICE_SNET ! Cumulated Sea-ice solar net heat flux (J/m2) -REAL, DIMENSION(KI) :: ZSEAICE_EVAP ! Cumulated Sea-ice sublimation (kg/m2) -! -INTEGER :: ILU, ILUOUT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('GET_SFXCPL_N',0,ZHOOK_HANDLE) -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -!------------------------------------------------------------------------------- -! Global argument -! -IF(KI/=U%NSIZE_FULL)THEN - WRITE(ILUOUT,*) 'size of field expected by the coupling :', KI - WRITE(ILUOUT,*) 'size of field in SURFEX :', U%NSIZE_FULL - CALL ABOR1_SFX('GET_SFXCPL_N: VECTOR SIZE NOT CORRECT FOR COUPLING') -ENDIF -! -!------------------------------------------------------------------------------- -! Get variable over nature tile -! -IF(LCPL_LAND)THEN -! -! * Init land output fields -! - ZRUNOFF (:) = XUNDEF - ZDRAIN (:) = XUNDEF - ZCALVING (:) = XUNDEF - ZSRCFLOOD(:) = XUNDEF -! -! * Get land output fields -! - CALL GET_SFX_LAND(IM%O, IM%S, U, & - LCPL_GW,LCPL_FLOOD,LCPL_CALVING, & - ZRUNOFF,ZDRAIN,ZCALVING,ZSRCFLOOD ) -! -! * Assign land output fields -! - PRUI (:) = ZRUNOFF (:)+ZDRAIN(:) - PICEFLUX(:) = ZCALVING(:) -! -ENDIF -! -!------------------------------------------------------------------------------- -! Get variable over sea and water tiles and for ice -! -IF(LCPL_SEA)THEN -! -! * Init sea output fields -! - ZSEA_FWSU (:) = XUNDEF - ZSEA_FWSV (:) = XUNDEF - ZSEA_HEAT (:) = XUNDEF - ZSEA_SNET (:) = XUNDEF - ZSEA_WIND (:) = XUNDEF - ZSEA_FWSM (:) = XUNDEF - ZSEA_EVAP (:) = XUNDEF - ZSEA_RAIN (:) = XUNDEF - ZSEA_SNOW (:) = XUNDEF - ZSEA_WATF (:) = XUNDEF - ZSEA_PRES (:) = XUNDEF -! - ZSEAICE_HEAT (:) = XUNDEF - ZSEAICE_SNET (:) = XUNDEF - ZSEAICE_EVAP (:) = XUNDEF -! -! * Get sea output fields -! - CALL GET_SFX_SEA(S, U, W, & - LCPL_SEAICE,LWATER, & - ZSEA_FWSU,ZSEA_FWSV,ZSEA_HEAT,ZSEA_SNET, & - ZSEA_WIND,ZSEA_FWSM,ZSEA_EVAP,ZSEA_RAIN, & - ZSEA_SNOW,ZSEA_EVPR,ZSEA_WATF,ZSEA_PRES, & - ZSEAICE_HEAT,ZSEAICE_SNET,ZSEAICE_EVAP ) -! -! * Assign sea output fields -! - PFWSU (:) = ZSEA_FWSU (:) - PFWSV (:) = ZSEA_FWSV (:) - PSNET (:) = ZSEA_SNET (:) - PHEAT (:) = ZSEA_HEAT (:) - PEVAP (:) = ZSEA_EVAP (:) - PRAIN (:) = ZSEA_RAIN (:) - PSNOW (:) = ZSEA_SNOW (:) - PFWSM (:) = ZSEA_FWSM (:) - PHEAT_ICE (:) = ZSEAICE_HEAT (:) - PEVAP_ICE (:) = ZSEAICE_EVAP (:) - PSNET_ICE (:) = ZSEAICE_SNET (:) -! -ENDIF -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('GET_SFXCPL_N',1,ZHOOK_HANDLE) -! -END SUBROUTINE GET_SFXCPL_n diff --git a/src/OASIS/SURFEX/init_seafluxn.F90 b/src/OASIS/SURFEX/init_seafluxn.F90 deleted file mode 100644 index e718fd1bb..000000000 --- a/src/OASIS/SURFEX/init_seafluxn.F90 +++ /dev/null @@ -1,453 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ############################################################# - SUBROUTINE INIT_SEAFLUX_n (DTCO, OREAD_BUDGETC, UG, U, GCP, SM, & - HPROGRAM,HINIT,KI,KSV,KSW, & - HSV,PCO2,PRHOA,PZENITH,PAZIM,PSW_BANDS, & - PDIR_ALB,PSCA_ALB, PEMIS,PTSRAD,PTSURF, & - KYEAR, KMONTH,KDAY,PTIME, & - HATMFILE,HATMFILETYPE,HTEST ) -! ############################################################# -! -!!**** *INIT_SEAFLUX_n* - routine to initialize SEAFLUX -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2003 -!! Modified 01/2006 : sea flux parameterization. -!! 01/2008 : coupling with 1D ocean -!! B. Decharme 08/2009 : specific treatment for sea/ice in the Earth System Model -!! B. Decharme 07/2011 : read pgd+prep -!! B. Decharme 04/2013 : new coupling variables -!! S. Senesi 01/2014 : introduce sea-ice model -!! S. Belamari 03/2014 : add NZ0 (to choose PZ0SEA formulation) -!! R. Séférian 01/2015 : introduce interactive ocean surface albedo -!! M.N. Bouin 03/2014 : possibility of wave parameters -!! ! from external source -!! J. Pianezze 11/2014 : add wave coupling flag for wave parameters -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t -! -USE MODD_SFX_OASIS, ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE -! -USE MODD_READ_NAMELIST, ONLY : LNAM_READ -USE MODD_CSTS, ONLY : XTTS -USE MODD_SNOW_PAR, ONLY : XZ0HSN -USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF -USE MODD_CHS_AEROSOL, ONLY: LVARSIGI, LVARSIGJ -USE MODD_DST_SURF, ONLY: LVARSIG_DST, NDSTMDE, NDST_MDEBEG, LRGFIX_DST -USE MODD_SLT_SURF, ONLY: LVARSIG_SLT, NSLTMDE, NSLT_MDEBEG, LRGFIX_SLT -! -USE MODI_INIT_IO_SURF_n -USE MODI_DEFAULT_CH_DEP -! -USE MODI_DEFAULT_SEAFLUX -USE MODI_DEFAULT_DIAG_SEAFLUX -USE MODI_READ_DEFAULT_SEAFLUX_n -USE MODI_READ_SEAFLUX_CONF_n -USE MODI_READ_SEAFLUX_n -! -USE MODI_READ_OCEAN_n -! -USE MODI_DEFAULT_SEAICE -USE MODI_READ_SEAICE_n -! -USE MODI_READ_PGD_SEAFLUX_n -USE MODI_DIAG_SEAFLUX_INIT_n -USE MODI_DIAG_SEAICE_INIT_n -USE MODI_END_IO_SURF_n -USE MODI_GET_LUOUT -USE MODI_READ_SURF -USE MODI_READ_SEAFLUX_DATE -USE MODI_READ_NAM_PREP_SEAFLUX_n -USE MODI_INIT_CHEMICAL_n -USE MODI_PREP_CTRL_SEAFLUX -USE MODI_UPDATE_RAD_SEA -USE MODI_READ_SBL_n -USE MODI_ABOR1_SFX -! -USE MODI_SET_SURFEX_FILEIN -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP -TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM -! -LOGICAL, INTENT(IN) :: OREAD_BUDGETC -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize -INTEGER, INTENT(IN) :: KI ! number of points -INTEGER, INTENT(IN) :: KSV ! number of scalars -INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands -CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables -REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3) -REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density -REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle -REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! solar azimuthal angle (rad from N, clock) -REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band -REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band -REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band -REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity -REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature -REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K) -INTEGER, INTENT(IN) :: KYEAR ! current year (UTC) -INTEGER, INTENT(IN) :: KMONTH ! current month (UTC) -INTEGER, INTENT(IN) :: KDAY ! current day (UTC) -REAL, INTENT(IN) :: PTIME ! current time since - ! midnight (UTC, s) -! -CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name -CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type -CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK' -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: ILU ! sizes of SEAFLUX arrays -INTEGER :: ILUOUT ! unit of output listing file -INTEGER :: IRESP ! return code -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -! Initialisation for IO -! -IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',0,ZHOOK_HANDLE) -! - CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -IF (HTEST/='OK') THEN - CALL ABOR1_SFX('INIT_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER') -END IF -! -! -! Others litlle things -! -PDIR_ALB = XUNDEF -PSCA_ALB = XUNDEF -PEMIS = XUNDEF -PTSRAD = XUNDEF -PTSURF = XUNDEF -! -SM%O%LMERCATOR = .FALSE. -SM%O%LCURRENT = .FALSE. -! -IF (LNAM_READ) THEN - ! - !* 0. Defaults - ! -------- - ! - ! 0.1. Hard defaults - ! - - CALL DEFAULT_SEAFLUX(SM%S%XTSTEP,SM%S%XOUT_TSTEP,SM%S%CSEA_ALB,SM%S%CSEA_FLUX,SM%S%LPWG, & - SM%S%LPRECIP,SM%S%LPWEBB,SM%S%NZ0,SM%S%NGRVWAVES,SM%O%LPROGSST, & - SM%O%NTIME_COUPLING,SM%O%XOCEAN_TSTEP,SM%S%XICHCE,SM%S%CINTERPOL_SST,& - SM%S%CINTERPOL_SSS,SM%S%LWAVEWIND ) - CALL DEFAULT_SEAICE(HPROGRAM, & - SM%S%CINTERPOL_SIC,SM%S%CINTERPOL_SIT, SM%S%XFREEZING_SST, & - SM%S%XSEAICE_TSTEP, SM%S%XSIC_EFOLDING_TIME, & - SM%S%XSIT_EFOLDING_TIME, SM%S%XCD_ICE_CST, SM%S%XSI_FLX_DRV) - ! - CALL DEFAULT_CH_DEP(SM%CHS%CCH_DRY_DEP) - ! - CALL DEFAULT_DIAG_SEAFLUX(SM%SD%O%N2M,SM%SD%O%LSURF_BUDGET,SM%SD%O%L2M_MIN_ZS,& - SM%SD%O%LRAD_BUDGET,SM%SD%O%LCOEF,SM%SD%O%LSURF_VARS,& - SM%SD%GO%LDIAG_OCEAN,SM%SD%DMI%LDIAG_MISC_SEAICE,& - SM%SD%O%LSURF_BUDGETC,SM%SD%O%LRESET_BUDGETC,SM%SD%O%XDIAG_TSTEP ) - -ENDIF -! -! -! 0.2. Defaults from file header -! - CALL READ_DEFAULT_SEAFLUX_n(SM%CHS, SM%SD%GO, SM%SD%O, SM%SD%DMI, SM%O, SM%S, HPROGRAM) -! -!* 1.1 Reading of configuration: -! ------------------------- -! - CALL READ_SEAFLUX_CONF_n(SM%CHS, SM%SD%GO, SM%SD%O, SM%SD%DMI, SM%O, SM%S, HPROGRAM) -! -SM%S%LINTERPOL_SST=.FALSE. -SM%S%LINTERPOL_SSS=.FALSE. -SM%S%LINTERPOL_SIC=.FALSE. -SM%S%LINTERPOL_SIT=.FALSE. -! -IF(LCPL_SEA)THEN - IF(SM%SD%O%N2M<1)THEN - CALL ABOR1_SFX('INIT_SEAFLUX_n: N2M must be set >0 in case of LCPL_SEA') - ENDIF -! No STT / SSS interpolation in Earth System Model - SM%S%CINTERPOL_SST='NONE ' - SM%S%CINTERPOL_SSS='NONE ' - SM%S%CINTERPOL_SIC='NONE ' - SM%S%CINTERPOL_SIT='NONE ' -ELSE - IF(TRIM(SM%S%CINTERPOL_SST)/='NONE')THEN - SM%S%LINTERPOL_SST=.TRUE. - ENDIF - IF(TRIM(SM%S%CINTERPOL_SSS)/='NONE')THEN - SM%S%LINTERPOL_SSS=.TRUE. - ENDIF - IF(TRIM(SM%S%CINTERPOL_SIC)/='NONE')THEN - SM%S%LINTERPOL_SIC=.TRUE. - ENDIF - IF(TRIM(SM%S%CINTERPOL_SIT)/='NONE')THEN - SM%S%LINTERPOL_SIT=.TRUE. - ENDIF -ENDIF -! -!* 1. Cover fields and grid: -! --------------------- -!* date -! -SELECT CASE (HINIT) -! - CASE ('PGD') -! - SM%S%TTIME%TDATE%YEAR = NUNDEF - SM%S%TTIME%TDATE%MONTH= NUNDEF - SM%S%TTIME%TDATE%DAY = NUNDEF - SM%S%TTIME%TIME = XUNDEF -! - CASE ('PRE') -! - CALL PREP_CTRL_SEAFLUX(SM%SD%O,SM%SD%GO%LDIAG_OCEAN,SM%SD%DMI%LDIAG_MISC_SEAICE,ILUOUT ) - IF (LNAM_READ) CALL READ_NAM_PREP_SEAFLUX_n(HPROGRAM) - CALL READ_SEAFLUX_DATE(SM%O%LMERCATOR,HPROGRAM,HINIT,ILUOUT,HATMFILE,HATMFILETYPE,& - KYEAR,KMONTH,KDAY,PTIME,SM%S%TTIME) -! - CASE DEFAULT -! -CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'FULL ','SURF ','READ ') - CALL READ_SURF(HPROGRAM,'DTCUR',SM%S%TTIME,IRESP) - CALL END_IO_SURF_n(HPROGRAM) -! -END SELECT -! -!----------------------------------------------------------------------------------------------------- -! READ PGD FILE -!----------------------------------------------------------------------------------------------------- -! -! Initialisation for IO -! - CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name -! -CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'SEA ','SEAFLX','READ ') -! -! Reading of the fields -! - CALL READ_PGD_SEAFLUX_n(DTCO, SM%DTS, SM%G, SM%S, U, UG, GCP, HPROGRAM) -! - CALL END_IO_SURF_n(HPROGRAM) -! - CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name -!------------------------------------------------------------------------------- -! -!* if only physiographic fields are to be initialized, stop here. -! -IF (HINIT/='ALL' .AND. HINIT/='SOD') THEN - IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE) - RETURN -END IF -! -!------------------------------------------------------------------------------- -! -! Initialisation for IO -! -CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'SEA ','SEAFLX','READ ') -! -!* 2. Prognostic fields: -! ---------------- -! -IF(SM%S%LINTERPOL_SST.OR.SM%S%LINTERPOL_SSS.OR.SM%S%LINTERPOL_SIC.OR.SM%S%LINTERPOL_SIT)THEN -! Initialize current Month for SST interpolation - SM%S%TZTIME%TDATE%YEAR = SM%S%TTIME%TDATE%YEAR - SM%S%TZTIME%TDATE%MONTH = SM%S%TTIME%TDATE%MONTH - SM%S%TZTIME%TDATE%DAY = SM%S%TTIME%TDATE%DAY - SM%S%TZTIME%TIME = SM%S%TTIME%TIME -ENDIF -! - CALL READ_SEAFLUX_n(DTCO, SM%G, SM%S, U, HPROGRAM,ILUOUT) -! -IF (HINIT/='ALL') THEN - CALL END_IO_SURF_n(HPROGRAM) - IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE) - RETURN -END IF -!------------------------------------------------------------------------------- -! -!* 2.1 Ocean fields: -! ------------- -! - CALL READ_OCEAN_n(DTCO, SM%O, SM%OR, U, HPROGRAM) -! -!------------------------------------------------------------------------------- -! -ILU = SIZE(SM%S%XCOVER,1) -! -ALLOCATE(SM%S%XSST_INI (ILU)) -SM%S%XSST_INI(:) = SM%S%XSST(:) -! -ALLOCATE(SM%S%XZ0H(ILU)) -WHERE (SM%S%XSST(:)>=XTTS) - SM%S%XZ0H(:) = SM%S%XZ0(:) -ELSEWHERE - SM%S%XZ0H(:) = XZ0HSN -ENDWHERE -! -!------------------------------------------------------------------------------- -! -!* 3. Specific fields when using earth system model or sea-ice scheme -! (Sea current and Sea-ice temperature) -! ----------------------------------------------------------------- -! -IF(LCPL_SEA.OR.SM%S%LHANDLE_SIC.OR.LCPL_WAVE)THEN -! - ALLOCATE(SM%S%XUMER (ILU)) - ALLOCATE(SM%S%XVMER (ILU)) -! - SM%S%XUMER (:)=0. - SM%S%XVMER (:)=0. -! -ELSE -! - ALLOCATE(SM%S%XUMER (0)) - ALLOCATE(SM%S%XVMER (0)) -! -ENDIF -! -IF(LCPL_WAVE) THEN - ALLOCATE(SM%S%XCHARN (ILU)) - SM%S%XCHARN (:)=0.011 -ELSE - ALLOCATE(SM%S%XCHARN (0)) -ENDIF -! -IF(LCPL_SEAICE.OR.SM%S%LHANDLE_SIC)THEN - ALLOCATE(SM%S%XTICE (ILU)) - ALLOCATE(SM%S%XICE_ALB(ILU)) - SM%S%XTICE (:)=XUNDEF - SM%S%XICE_ALB(:)=XUNDEF -ELSE - ALLOCATE(SM%S%XTICE (0)) - ALLOCATE(SM%S%XICE_ALB(0)) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 4. Seaice prognostic variables and forcings : -! -CALL READ_SEAICE_n(SM%G, SM%S, HPROGRAM,ILU,ILUOUT) -! -!------------------------------------------------------------------------------- -! -!* 5. Albedo, emissivity and temperature fields on the mix (open sea + sea ice) -! ----------------------------------------------------------------- -! -ALLOCATE(SM%S%XEMIS (ILU)) -SM%S%XEMIS = 0.0 -! -CALL UPDATE_RAD_SEA(SM%S,PZENITH,XTTS,PDIR_ALB,PSCA_ALB,PEMIS,PTSRAD ) -! -IF (SM%S%LHANDLE_SIC) THEN - PTSURF(:) = SM%S%XSST(:) * ( 1 - SM%S%XSIC(:)) + SM%S%XTICE(:) * SM%S%XSIC(:) -ELSE - PTSURF(:) = SM%S%XSST(:) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 6. SBL air fields: -! -------------- -! - CALL READ_SBL_n(DTCO, U, SM%SB, SM%S%LSBL, HPROGRAM, "SEA ") -! -!------------------------------------------------------------------------------- -! -!* 7. Chemistry /dust -! --------- -! - CALL INIT_CHEMICAL_n(ILUOUT, KSV, HSV, SM%CHS%SVS, & - SM%CHS%CCH_NAMES, SM%CHS%CAER_NAMES, & - HDSTNAMES=SM%CHS%CDSTNAMES, HSLTNAMES=SM%CHS%CSLTNAMES, & - HSNWNAMES=SM%CHS%CSNWNAMES ) -! -!* deposition scheme -! -IF (SM%CHS%SVS%NBEQ>0 .AND. SM%CHS%CCH_DRY_DEP=='WES89') THEN - ALLOCATE(SM%CHS%XDEP(ILU,SM%CHS%SVS%NBEQ)) -ELSE - ALLOCATE(SM%CHS%XDEP(0,0)) -END IF -! -!------------------------------------------------------------------------------- -! -!* 8. diagnostics initialization -! -------------------------- -! -IF(.NOT.(SM%S%LHANDLE_SIC.OR.LCPL_SEAICE))THEN - SM%SD%DMI%LDIAG_MISC_SEAICE=.FALSE. -ENDIF -! - CALL DIAG_SEAFLUX_INIT_n(SM%SD%GO, SM%SD%O, SM%SD%D, SM%SD%DC, OREAD_BUDGETC, SM%S, & - HPROGRAM,ILU,KSW) -IF (SM%S%LHANDLE_SIC.OR.LCPL_SEAICE) & - CALL DIAG_SEAICE_INIT_n(SM%SD%O, SM%SD%DI, SM%SD%DIC, SM%SD%DMI, & - OREAD_BUDGETC, SM%S, HPROGRAM,ILU,KSW) - -! -!------------------------------------------------------------------------------- -! -! End of IO -! - CALL END_IO_SURF_n(HPROGRAM) -IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE) -! -! -END SUBROUTINE INIT_SEAFLUX_n diff --git a/src/OASIS/SURFEX/modd_prep_seaflux.F90 b/src/OASIS/SURFEX/modd_prep_seaflux.F90 deleted file mode 100644 index 9b034aea4..000000000 --- a/src/OASIS/SURFEX/modd_prep_seaflux.F90 +++ /dev/null @@ -1,57 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ################ - MODULE MODD_PREP_SEAFLUX -! ################ -! -!!**** *MODD_PREP_SEAFLUX - declaration for field interpolations -!! -!! PURPOSE -!! ------- -! Declaration of surface parameters -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! S.Malardel *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/03 -!! Modified 09/2013 : S. Senesi : introduce variables for sea-ice model -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -SAVE -!-------------------------------------------------------------------------- -! -CHARACTER(LEN=28) :: CFILE_SEAFLX ! input file name -CHARACTER(LEN=6) :: CTYPE_SEAFLX ! input file type -CHARACTER(LEN=28) :: CFILEWAVE_SEAFLX ! input file name wave parameters -CHARACTER(LEN=6) :: CTYPEWAVE ! file type for wave parameters -CHARACTER(LEN=28) :: CFILEPGD_SEAFLX ! input file name -CHARACTER(LEN=6) :: CTYPEPGD ! input file type -! -REAL :: XSST_UNIF ! uniform prescribed SST -REAL :: XSSS_UNIF ! uniform prescribed SSS -REAL :: XSIC_UNIF ! uniform prescribed Seaice cover -! -!-------------------------------------------------------------------------- -! -END MODULE MODD_PREP_SEAFLUX - - diff --git a/src/OASIS/SURFEX/modd_seafluxn.F90 b/src/OASIS/SURFEX/modd_seafluxn.F90 deleted file mode 100644 index 360b12c62..000000000 --- a/src/OASIS/SURFEX/modd_seafluxn.F90 +++ /dev/null @@ -1,249 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ################# - MODULE MODD_SEAFLUX_n -! ################# -! -!!**** *MODD_SEAFLUX_n - declaration of surface parameters for an inland water surface -!! -!! PURPOSE -!! ------- -! Declaration of surface parameters -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! S. Senesi 01/2014 adapt to fractional seaice, and to seaice scheme -!! S. Belamari 03/2014 Include NZ0 -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!! Modified 11/2014 : J. Pianezze ! add surface pressure, evap-rain and charnock coefficient -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_SURF_PAR, ONLY : XUNDEF -USE MODD_TYPE_DATE_SURF -! -USE MODD_TYPES_GLT, ONLY : T_GLT -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE - -TYPE SEAFLUX_t -! -! General surface: -! - REAL, POINTER, DIMENSION(:) :: XZS ! orography - REAL, POINTER, DIMENSION(:,:) :: XCOVER ! fraction of each ecosystem (-) - LOGICAL, POINTER, DIMENSION(:):: LCOVER ! GCOVER(i)=T --> ith cover field is not 0. - LOGICAL :: LSBL ! T: SBL scheme between sea and atm. forcing level -! ! F: no atmospheric layers below forcing level - LOGICAL :: LHANDLE_SIC ! T: we do weight seaice and open sea fluxes - CHARACTER(LEN=6) :: CSEAICE_SCHEME! Name of the seaice scheme - REAL, POINTER, DIMENSION(:) :: XSEABATHY ! bathymetry -! - LOGICAL :: LINTERPOL_SST ! Interpolation of monthly SST - CHARACTER(LEN=6) :: CINTERPOL_SST ! Interpolation method of monthly SST - LOGICAL :: LINTERPOL_SSS ! Interpolation of monthly SSS - CHARACTER(LEN=6) :: CINTERPOL_SSS ! Interpolation method of monthly SSS - LOGICAL :: LINTERPOL_SIC ! Interpolation of monthly SIC - CHARACTER(LEN=6) :: CINTERPOL_SIC ! Interpolation method of monthly SIC - LOGICAL :: LINTERPOL_SIT ! Interpolation of monthly SIT - CHARACTER(LEN=6) :: CINTERPOL_SIT ! Interpolation method of monthly SIT - REAL :: XFREEZING_SST ! Value marking frozen sea in SST data - REAL :: XSIC_EFOLDING_TIME ! For damping of SIC (days) - REAL :: XSIT_EFOLDING_TIME ! For damping of SIT (days) - REAL :: XSEAICE_TSTEP ! Sea ice model time step - REAL :: XCD_ICE_CST ! Turbulent exchange coefficient for seaice - REAL :: XSI_FLX_DRV ! Derivative of fluxes on seaice w.r.t to the temperature (W m-2 K-1) - -! -! Type of formulation for the fluxes -! - CHARACTER(LEN=6) :: CSEA_FLUX ! type of flux computation - CHARACTER(LEN=4) :: CSEA_ALB ! type of albedo - LOGICAL :: LPWG ! flag for gust - LOGICAL :: LPRECIP ! flag for precip correction - LOGICAL :: LPWEBB ! flag for Webb correction - INTEGER :: NZ0 ! set to 0,1 or 2 according to Z0 formulation - ! 0= ARPEGE / 1= Smith (1988) / 2= Direct - INTEGER :: NGRVWAVES ! set to 0,1 or 2 according to the - ! gravity waves model used in coare30_flux - LOGICAL :: LWAVEWIND ! wave parameters computed from wind only - REAL :: XICHCE ! CE coef calculation for ECUME - LOGICAL :: LPERTFLUX ! flag for stochastic flux perturbation -! -! Sea/Ocean: -! - REAL, POINTER, DIMENSION(:) :: XSST ! sea surface temperature - REAL, POINTER, DIMENSION(:) :: XSSS ! sea surface salinity - REAL, POINTER, DIMENSION(:) :: XHS ! significant wave height - REAL, POINTER, DIMENSION(:) :: XTP ! wave peak period - REAL, POINTER, DIMENSION(:) :: XTICE ! sea ice temperature - REAL, POINTER, DIMENSION(:) :: XSIC ! sea ice concentration ( constraint for seaice scheme ) - REAL, POINTER, DIMENSION(:) :: XSST_INI! initial sea surface temperature - REAL, POINTER, DIMENSION(:) :: XZ0 ! roughness length - REAL, POINTER, DIMENSION(:) :: XZ0H ! roughness length for heat - REAL, POINTER, DIMENSION(:) :: XEMIS ! emissivity - REAL, POINTER, DIMENSION(:) :: XDIR_ALB! direct albedo - REAL, POINTER, DIMENSION(:) :: XSCA_ALB! diffuse albedo - REAL, POINTER, DIMENSION(:) :: XICE_ALB! sea-ice albedo from seaice model (ESM or embedded) - REAL, POINTER, DIMENSION(:) :: XUMER ! U component of sea current (for ESM coupling) - REAL, POINTER, DIMENSION(:) :: XVMER ! V component of sea current (for ESM coupling) -! - REAL, POINTER, DIMENSION(:,:) :: XSST_MTH! monthly sea surface temperature (precedent, current and next) - REAL, POINTER, DIMENSION(:,:) :: XSSS_MTH! monthly sea surface salinity (precedent, current and next) - REAL, POINTER, DIMENSION(:,:) :: XSIC_MTH! monthly sea ice cover (precedent, current and next) - REAL, POINTER, DIMENSION(:,:) :: XSIT_MTH! monthly sea ice thickness (precedent, current and next) - REAL, POINTER, DIMENSION(:) :: XFSIC ! nudging (or forcing) sea ice cover - REAL, POINTER, DIMENSION(:) :: XFSIT ! nudging sea ice thickness -! - REAL, POINTER, DIMENSION(:) :: XCHARN ! Charnock coefficient (for ESM coupling) -! - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_WIND ! 10m wind speed for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSU ! zonal wind stress for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSV ! meridian wind stress for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNET ! Solar net heat flux - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_HEAT ! Non solar net heat flux - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVAP ! Evaporation for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_RAIN ! Rainfall for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVPR ! Evaporatrion - Rainfall for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNOW ! Snowfall for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSM ! wind stress for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEA_PRES ! Surface pressure for ESM coupling -! - REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_SNET ! Solar net heat flux for ESM coupling - REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_HEAT ! Non solar net heat flux - REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_EVAP ! Ice sublimation for ESM coupling -! - REAL, POINTER, DIMENSION(:) :: XPERTFLUX ! Stochastic flux perturbation pattern -! -! Sea-ice : -! - TYPE(T_GLT) :: TGLT ! Sea-ice state , diagnostics and auxilliaries - ! for the case of embedded Gelato Seaice model -! -! Date: -! - TYPE (DATE_TIME) :: TTIME ! current date and time - TYPE (DATE_TIME) :: TZTIME - LOGICAL :: LTZTIME_DONE - INTEGER :: JSX -! -! Time-step: -! - REAL :: XTSTEP ! time step -! - REAL :: XOUT_TSTEP ! output writing time step -! -! -! -END TYPE SEAFLUX_t - - - -CONTAINS - -! - - - - -SUBROUTINE SEAFLUX_INIT(YSEAFLUX) -TYPE(SEAFLUX_t), INTENT(INOUT) :: YSEAFLUX -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",0,ZHOOK_HANDLE) - NULLIFY(YSEAFLUX%XZS) - NULLIFY(YSEAFLUX%XCOVER) - NULLIFY(YSEAFLUX%LCOVER) - NULLIFY(YSEAFLUX%XSEABATHY) - NULLIFY(YSEAFLUX%XSST) - NULLIFY(YSEAFLUX%XSSS) - NULLIFY(YSEAFLUX%XSIC) - NULLIFY(YSEAFLUX%XHS) - NULLIFY(YSEAFLUX%XTP) - NULLIFY(YSEAFLUX%XTICE) - NULLIFY(YSEAFLUX%XSST_INI) - NULLIFY(YSEAFLUX%XZ0) - NULLIFY(YSEAFLUX%XZ0H) - NULLIFY(YSEAFLUX%XEMIS) - NULLIFY(YSEAFLUX%XDIR_ALB) - NULLIFY(YSEAFLUX%XSCA_ALB) - NULLIFY(YSEAFLUX%XICE_ALB) - NULLIFY(YSEAFLUX%XUMER) - NULLIFY(YSEAFLUX%XVMER) - NULLIFY(YSEAFLUX%XSST_MTH) - NULLIFY(YSEAFLUX%XSSS_MTH) - NULLIFY(YSEAFLUX%XSIC_MTH) - NULLIFY(YSEAFLUX%XSIT_MTH) - NULLIFY(YSEAFLUX%XFSIC) - NULLIFY(YSEAFLUX%XFSIT) - NULLIFY(YSEAFLUX%XCPL_SEA_WIND) - NULLIFY(YSEAFLUX%XCPL_SEA_FWSU) - NULLIFY(YSEAFLUX%XCPL_SEA_FWSV) - NULLIFY(YSEAFLUX%XCPL_SEA_SNET) - NULLIFY(YSEAFLUX%XCPL_SEA_HEAT) - NULLIFY(YSEAFLUX%XCPL_SEA_EVAP) - NULLIFY(YSEAFLUX%XCPL_SEA_RAIN) - NULLIFY(YSEAFLUX%XCPL_SEA_EVPR) - NULLIFY(YSEAFLUX%XCPL_SEA_SNOW) - NULLIFY(YSEAFLUX%XCPL_SEA_FWSM) - NULLIFY(YSEAFLUX%XCPL_SEA_PRES) - NULLIFY(YSEAFLUX%XCPL_SEAICE_SNET) - NULLIFY(YSEAFLUX%XCPL_SEAICE_HEAT) - NULLIFY(YSEAFLUX%XCPL_SEAICE_EVAP) - NULLIFY(YSEAFLUX%XPERTFLUX) -YSEAFLUX%LSBL=.FALSE. -YSEAFLUX%LHANDLE_SIC=.FALSE. -YSEAFLUX%CSEAICE_SCHEME='NONE ' -YSEAFLUX%LINTERPOL_SST=.FALSE. -YSEAFLUX%CINTERPOL_SST=' ' -YSEAFLUX%LINTERPOL_SSS=.FALSE. -YSEAFLUX%CINTERPOL_SSS=' ' -YSEAFLUX%LINTERPOL_SIC=.FALSE. -YSEAFLUX%CINTERPOL_SIC=' ' -YSEAFLUX%LINTERPOL_SIT=.FALSE. -YSEAFLUX%CINTERPOL_SIT=' ' -YSEAFLUX%XFREEZING_SST=-1.8 -YSEAFLUX%XSIC_EFOLDING_TIME=0. ! means : no damping -YSEAFLUX%XSIT_EFOLDING_TIME=0. ! means : no damping -YSEAFLUX%XSEAICE_TSTEP=XUNDEF -YSEAFLUX%XCD_ICE_CST=0. -YSEAFLUX%XSI_FLX_DRV=-20. -YSEAFLUX%CSEA_FLUX=' ' -YSEAFLUX%CSEA_ALB=' ' -YSEAFLUX%LPWG=.FALSE. -YSEAFLUX%LPRECIP=.FALSE. -YSEAFLUX%LPWEBB=.FALSE. -YSEAFLUX%NZ0=0 -YSEAFLUX%NGRVWAVES=0 -YSEAFLUX%LWAVEWIND=.TRUE. -YSEAFLUX%XICHCE=0. -YSEAFLUX%LPERTFLUX=.FALSE. -YSEAFLUX%JSX=0 -YSEAFLUX%LTZTIME_DONE = .FALSE. -YSEAFLUX%XTSTEP=0. -YSEAFLUX%XOUT_TSTEP=0. -IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",1,ZHOOK_HANDLE) -END SUBROUTINE SEAFLUX_INIT - - -END MODULE MODD_SEAFLUX_n diff --git a/src/OASIS/SURFEX/modd_sfx_oasis.F90 b/src/OASIS/SURFEX/modd_sfx_oasis.F90 deleted file mode 100644 index 3d8bc24bd..000000000 --- a/src/OASIS/SURFEX/modd_sfx_oasis.F90 +++ /dev/null @@ -1,158 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!############### -MODULE MODD_SFX_OASIS -!############### -! -!!**** *MODD_SFX_OASIS - declaration of variable for SFX-OASIS coupling -!! -!! PURPOSE -!! ------- -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/13 -!! Modified 11/2014 : J. Pianezze - add wave coupling and creation of OASIS grids -!! S.Senesi 08/2015 : add CMODEL_NAME -!! 10/2016 B. Decharme : bug surface/groundwater coupling -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!------------------------------------------------------------------------------- -! -! * Surfex - Oasis coupling general key : -! -!------------------------------------------------------------------------------- -! -LOGICAL :: LOASIS = .FALSE. ! To use oasis coupler or not -! -LOGICAL :: LOASIS_GRID = .FALSE. ! To define oasis grids, areas and masks during simulation -! -CHARACTER(LEN=6) :: CMODEL_NAME ! component model name (i.e. name under which -! ! Surfex is declared to Oasis) -! -REAL :: XRUNTIME = 0.0 ! Total simulated time in oasis namcouple (s) -! -!------------------------------------------------------------------------------- -! -! * Land surface variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -LOGICAL :: LCPL_LAND = .FALSE. ! Fields to/from surfex land area -LOGICAL :: LCPL_CALVING = .FALSE. ! Calving flux from surfex land area -LOGICAL :: LCPL_GW = .FALSE. ! Fields to/from surfex land area to/from groundwater scheme -LOGICAL :: LCPL_FLOOD = .FALSE. ! Fields to/from surfex land area to/from floodplains scheme -! -! Output variables -! -INTEGER :: NRUNOFF_ID ! Surface runoff id -INTEGER :: NDRAIN_ID ! Drainage id -INTEGER :: NCALVING_ID ! Calving flux id -INTEGER :: NSRCFLOOD_ID ! Floodplains freshwater flux id -! -! Input variables -! -INTEGER :: NWTD_ID ! water table depth id -INTEGER :: NFWTD_ID ! grid-cell fraction of water table rise id -INTEGER :: NFFLOOD_ID ! Floodplains fraction id -INTEGER :: NPIFLOOD_ID ! Potential flood infiltration id -! -!------------------------------------------------------------------------------- -! -! * Lake variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -LOGICAL :: LCPL_LAKE = .FALSE. ! Fields to/from surfex lake area -! -! Output variables -! -INTEGER :: NLAKE_EVAP_ID ! Evaporation id -INTEGER :: NLAKE_RAIN_ID ! Rainfall id -INTEGER :: NLAKE_SNOW_ID ! Snowfall id -INTEGER :: NLAKE_WATF_ID ! Freshwater id -! -!------------------------------------------------------------------------------- -! -! * Sea variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -LOGICAL :: LCPL_SEA = .FALSE. ! Fields to/from surfex sea/water area -LOGICAL :: LCPL_SEAICE = .FALSE. ! Fields to/from surfex sea-ice area (e.g. GELATO 3D, ...) -! -! Sea Output variables -! -INTEGER :: NSEA_FWSU_ID ! zonal wind stress id -INTEGER :: NSEA_FWSV_ID ! meridian wind stress id -INTEGER :: NSEA_HEAT_ID ! Non solar net heat flux id -INTEGER :: NSEA_SNET_ID ! Solar net heat flux id -INTEGER :: NSEA_WIND_ID ! 10m wind speed id -INTEGER :: NSEA_FWSM_ID ! wind stress id -INTEGER :: NSEA_EVAP_ID ! Evaporation id -INTEGER :: NSEA_RAIN_ID ! Rainfall id -INTEGER :: NSEA_SNOW_ID ! Snowfall id -INTEGER :: NSEA_EVPR_ID ! Evap.-Precip. id -INTEGER :: NSEA_WATF_ID ! Freshwater id -INTEGER :: NSEA_PRES_ID ! Surface pressure id -! -! Sea-ice Output variables -! -INTEGER :: NSEAICE_HEAT_ID ! Sea-ice non solar net heat flux id -INTEGER :: NSEAICE_SNET_ID ! Sea-ice solar net heat flux id -INTEGER :: NSEAICE_EVAP_ID ! Sea-ice sublimation id -! -! Sea Input variables -! -INTEGER :: NSEA_SST_ID ! Sea surface temperature id -INTEGER :: NSEA_UCU_ID ! Sea u-current stress id -INTEGER :: NSEA_VCU_ID ! Sea v-current stress id -! -! Sea-ice Input variables -! -INTEGER :: NSEAICE_SIT_ID ! Sea-ice Temperature id -INTEGER :: NSEAICE_CVR_ID ! Sea-ice cover id -INTEGER :: NSEAICE_ALB_ID ! Sea-ice albedo id -! -!------------------------------------------------------------------------------- -! -! * Wave variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -LOGICAL :: LCPL_WAVE = .FALSE. ! Fields to/from surfex wave area -! -! Wave Output variables -! -INTEGER :: NWAVE_U10_ID ! 10m u-wind speed id -INTEGER :: NWAVE_V10_ID ! 10m v-wind speed id -! -! Wave Input variables -! -INTEGER :: NWAVE_CHA_ID ! Charnock coefficient id -INTEGER :: NWAVE_UCU_ID ! Wave u-current velocity id -INTEGER :: NWAVE_VCU_ID ! Wave v-current velocity id -INTEGER :: NWAVE_HS_ID ! Significant wave height id -INTEGER :: NWAVE_TP_ID ! Peak period id -! -!------------------------------------------------------------------------------- -! -END MODULE MODD_SFX_OASIS diff --git a/src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 b/src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 deleted file mode 100644 index ad51a19ab..000000000 --- a/src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 +++ /dev/null @@ -1,1528 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!! -!! Modified 09/2013 : S. Senesi : adapt READ_NETCDF_SST to read 2D fields other than SST -!! -MODULE MODE_READ_NETCDF_MERCATOR -!!!============================================================================= -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!! ! + correction of 2 bugs -!------------------------------------------------------------------------------- -! -! -USE MODI_ABOR1_SFX -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -CONTAINS -!------------------------------------------------------------------- -!------------------------------------------------------------------- -! #################### - SUBROUTINE HANDLE_ERR_MER(status,line) -! #################### -USE NETCDF -! -IMPLICIT NONE -INTEGER, INTENT(IN) :: status - CHARACTER(LEN=80), INTENT(IN) :: line -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:HANDLE_ERR_MER',0,ZHOOK_HANDLE) -IF (status /= NF90_NOERR) THEN - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: HANDLE_ERR_MER') -END IF -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:HANDLE_ERR_MER',1,ZHOOK_HANDLE) -END SUBROUTINE HANDLE_ERR_MER -!------------------------------------------------------------------- -!------------------------------------------------------------------- -! #################### - SUBROUTINE GET1DCDF(KCDF_ID,IDVAR,PMISSVALUE,PVALU1D) -! #################### -! -USE NETCDF -! -IMPLICIT NONE -! -INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant -INTEGER,INTENT(IN) :: IDVAR !variable to read identifiant -REAL, INTENT(OUT) :: PMISSVALUE !undefined value -REAL,DIMENSION(:),INTENT(OUT) :: PVALU1D !value array -! -integer :: status -character(len=80) :: HACTION -integer,save :: NDIMS=1 -integer :: KVARTYPE -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN -character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM -integer :: JLOOP -integer :: NGATTS -integer, dimension(1) :: NDIMID -character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME -REAL,DIMENSION(:),ALLOCATABLE :: ZVALU1D !value array -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET1DCDF',0,ZHOOK_HANDLE) -PMISSVALUE=-9999.9 -ALLOCATE(NVARDIMID (NDIMS)) -ALLOCATE(NVARDIMLEN(NDIMS)) -ALLOCATE(NVARDIMNAM(NDIMS)) -NVARDIMID (:)=0 -NVARDIMLEN(:)=0 -NVARDIMNAM(:)=' ' -! -HACTION='get variable type' -status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NDIMID) -HACTION='get variable dimensions name' -status=nf90_inquire_dimension(KCDF_ID,NDIMID(NDIMS),NAME=NVARDIMNAM(NDIMS)) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -HACTION='get variable dimensions length' -status=nf90_inquire_dimension(KCDF_ID,NDIMID(NDIMS),LEN=NVARDIMLEN(NDIMS)) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! &'has a length of',NVARDIMLEN(NDIMS) -!! -HACTION='get attributs' -status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -allocate(hname(1:NGATTS)) -! -ALLOCATE(ZVALU1D(1:NVARDIMLEN(NDIMS))) -ZVALU1D=0. -! -IF (KVARTYPE>=5) then - HACTION='get variable values (1D)' - status=nf90_get_var(KCDF_ID,IDVAR,ZVALU1D(:)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ENDIF -! -PVALU1D(:)=ZVALU1D(:) -! -IF (ALLOCATED(ZVALU1D )) DEALLOCATE(ZVALU1D) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET1DCDF',1,ZHOOK_HANDLE) -! -END SUBROUTINE GET1DCDF -!------------------------------------------------------------------- -!------------------------------------------------------------------- -! #################### - SUBROUTINE GET2DCDF(KCDF_ID,IDVAR,PDIM1,HDIM1NAME,PDIM2,HDIM2NAME,& - PMISSVALUE,PVALU2D) -! #################### -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE NETCDF -! -IMPLICIT NONE -! -INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant -INTEGER,INTENT(IN) :: IDVAR !variable to read identifiant -REAL,DIMENSION(:),INTENT(OUT) :: PDIM1,PDIM2 !dimensions for PVALU2D array - CHARACTER(len=80),INTENT(OUT) :: HDIM1NAME,HDIM2NAME !dimensions names -REAL, INTENT(OUT) :: PMISSVALUE -REAL,DIMENSION(:,:),INTENT(OUT) :: PVALU2D !value array -! -integer :: status -character(len=80) :: HACTION -integer,save :: NDIMS=2 -integer :: KVARTYPE -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN -character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM -integer :: JLOOP2, JLOOP, J1, J2 -integer :: NGATTS -character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME -real :: ZMISS1,ZMISS2 -real :: ZSCFA, ZOFFS -REAL,DIMENSION(:,:),ALLOCATABLE :: ZVALU2D !value array -INTEGER,DIMENSION(:,:),ALLOCATABLE :: IVALU2D -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET2DCDF',0,ZHOOK_HANDLE) -PMISSVALUE=-9999.9 -ALLOCATE(NVARDIMID (NDIMS)) -ALLOCATE(NVARDIMLEN(NDIMS)) -ALLOCATE(NVARDIMNAM(NDIMS)) -NVARDIMID (:)=0 -NVARDIMLEN(:)=0 -NVARDIMNAM(:)=' ' -! -HACTION='get variable type' -status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -HACTION='get variable dimensions identifiant' -status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NVARDIMID) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -HACTION='get attributs' -status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -allocate(hname(1:NGATTS)) -! -ZSCFA=1. -ZOFFS=0. -DO JLOOP=1,NGATTS - status=nf90_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - if (TRIM(hname(JLOOP))=='missing_value') then - HACTION='get missing value' - status=nf90_get_att(KCDF_ID,IDVAR,"missing_value",PMISSVALUE) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - else - if (TRIM(hname(JLOOP))=='_FillValue') then - HACTION='get _FillValue' - status=nf90_get_att(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif - endif - if (TRIM(hname(JLOOP))=='scale_factor') then - HACTION='get scale factor' - status=nf90_get_att(KCDF_ID,IDVAR,"scale_factor",ZSCFA) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif - if (TRIM(hname(JLOOP))=='add_offset') then - HACTION='get offset' - status=nf90_get_att(KCDF_ID,IDVAR,"add_offset",ZOFFS) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif -ENDDO -! -! -DO JLOOP2=1,NDIMS - HACTION='get variable dimensions name' - status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),NAME=NVARDIMNAM(JLOOP2)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),LEN=NVARDIMLEN(JLOOP2)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ENDDO -! -IF (KVARTYPE>=5) then - ALLOCATE(ZVALU2D(1:NVARDIMLEN(1),1:NVARDIMLEN(2))) - ZVALU2D=0. - HACTION='get variable values (2D)' - status=nf90_get_var(KCDF_ID,IDVAR,ZVALU2D(:,:)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ELSE - ALLOCATE(IVALU2D(1:NVARDIMLEN(1),1:NVARDIMLEN(2))) - IVALU2D=0. - HACTION='get variable values (2D)' - status=nf90_get_var(KCDF_ID,IDVAR,IVALU2D(:,:)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ENDIF -PVALU2D(:,:)=XUNDEF -DO J1=1,NVARDIMLEN(1) - DO J2=1,NVARDIMLEN(2) - IF (KVARTYPE>=5) THEN - IF (ZVALU2D(J1,J2)/=PMISSVALUE) PVALU2D(J1,J2)=ZVALU2D(J1,J2)*ZSCFA+ZOFFS - ELSE - IF (ZVALU2D(J1,J2)/=PMISSVALUE) PVALU2D(J1,J2)=IVALU2D(J1,J2)*ZSCFA+ZOFFS - ENDIF - ENDDO -ENDDO -! - CALL GET1DCDF(KCDF_ID,NVARDIMID(1),ZMISS1,PDIM1) - CALL GET1DCDF(KCDF_ID,NVARDIMID(2),ZMISS2,PDIM2) -HDIM1NAME=NVARDIMNAM(1) -HDIM2NAME=NVARDIMNAM(2) -IF (ALLOCATED(ZVALU2D )) DEALLOCATE(ZVALU2D) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET2DCDF',1,ZHOOK_HANDLE) -! -END SUBROUTINE GET2DCDF -!------------------------------------------------------------------- -!------------------------------------------------------------------- -! #################### - SUBROUTINE GET3DCDF(KCDF_ID,IDVAR,PDIM1,HDIM1NAME,PDIM2,HDIM2NAME,& - PDIM3,HDIM3NAME,PMISSVALUE,PVALU3D) -! #################### -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE NETCDF -! -IMPLICIT NONE -! -INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant -INTEGER,INTENT(IN) :: IDVAR !variable to read identifiant -REAL,DIMENSION(:),INTENT(OUT) :: PDIM1,PDIM2,PDIM3 !dimensions for PVALU2D array - CHARACTER(len=80),INTENT(OUT) :: HDIM1NAME,HDIM2NAME,HDIM3NAME !dimensions names -REAL, INTENT(OUT) :: PMISSVALUE -REAL,DIMENSION(:,:,:),INTENT(OUT) :: PVALU3D !value array -! -integer :: status -character(len=80) :: HACTION -integer,save :: NDIMS=3 -integer :: KVARTYPE -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN -character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM -integer :: JLOOP2, JLOOP -integer :: J1,J2,J3 -integer :: NGATTS -character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME -real :: ZMISS1,ZMISS2,ZMISS3 -real :: ZSCFA, ZOFFS -REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZVALU3D !value array -INTEGER,DIMENSION(:,:,:),ALLOCATABLE :: IVALU3D -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET3DCDF',0,ZHOOK_HANDLE) -PMISSVALUE=-9999.9 -ALLOCATE(NVARDIMID (NDIMS)) -ALLOCATE(NVARDIMLEN(NDIMS)) -ALLOCATE(NVARDIMNAM(NDIMS)) -NVARDIMID (:)=0 -NVARDIMLEN(:)=0 -NVARDIMNAM(:)=' ' -! -HACTION='get variable type' -status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -HACTION='get variable dimensions identifiant' -status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NVARDIMID) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -HACTION='get attributs' -status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -allocate(hname(1:NGATTS)) -! -ZSCFA=1. -ZOFFS=0. -DO JLOOP=1,NGATTS - status=nf90_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - if (TRIM(hname(JLOOP))=='missing_value') then - HACTION='get missing value' - status=nf90_get_att(KCDF_ID,IDVAR,"missing_value",PMISSVALUE) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - else - if (TRIM(hname(JLOOP))=='_FillValue') then - HACTION='get _FillValue' - status=nf90_get_att(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif - endif - if (TRIM(hname(JLOOP))=='scale_factor') then - HACTION='get scale factor' - status=nf90_get_att(KCDF_ID,IDVAR,"scale_factor",ZSCFA) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif - if (TRIM(hname(JLOOP))=='add_offset') then - HACTION='get offset' - status=nf90_get_att(KCDF_ID,IDVAR,"add_offset",ZOFFS) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif -ENDDO -! -! -DO JLOOP2=1,NDIMS - HACTION='get variable dimensions name' - status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),NAME=NVARDIMNAM(JLOOP2)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),LEN=NVARDIMLEN(JLOOP2)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ENDDO -! -IF (KVARTYPE>=5) then - ALLOCATE(ZVALU3D(1:NVARDIMLEN(1),1:NVARDIMLEN(2),1:NVARDIMLEN(3))) - ZVALU3D=0. - HACTION='get variable values (3D)' - status=nf90_get_var(KCDF_ID,IDVAR,ZVALU3D(:,:,:)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ELSE - ALLOCATE(IVALU3D(1:NVARDIMLEN(1),1:NVARDIMLEN(2),1:NVARDIMLEN(3))) - IVALU3D=0. - HACTION='get variable values (3D)' - status=nf90_get_var(KCDF_ID,IDVAR,IVALU3D(:,:,:)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ENDIF -! -PVALU3D(:,:,:)=XUNDEF -DO J1=1,NVARDIMLEN(1) - DO J2=1,NVARDIMLEN(2) - DO J3=1,NVARDIMLEN(3) - IF (KVARTYPE>=5) THEN - IF (ZVALU3D(J1,J2,J3)/=PMISSVALUE) PVALU3D(J1,J2,J3)=ZVALU3D(J1,J2,J3)*ZSCFA+ZOFFS - ELSE - IF (IVALU3D(J1,J2,J3)/=PMISSVALUE) PVALU3D(J1,j2,J3)=IVALU3D(J1,J2,J3)*ZSCFA+ZOFFS - ENDIF - ENDDO - ENDDO -ENDDO -! - CALL GET1DCDF(KCDF_ID,NVARDIMID(1),ZMISS1,PDIM1) - CALL GET1DCDF(KCDF_ID,NVARDIMID(2),ZMISS2,PDIM2) - CALL GET1DCDF(KCDF_ID,NVARDIMID(3),ZMISS3,PDIM3) -HDIM1NAME=NVARDIMNAM(1) -HDIM2NAME=NVARDIMNAM(2) -HDIM3NAME=NVARDIMNAM(3) -IF (ALLOCATED(ZVALU3D )) DEALLOCATE(ZVALU3D) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET3DCDF',1,ZHOOK_HANDLE) -! -END SUBROUTINE GET3DCDF -!-------------------------------------------------------------------- -!------------------------------------------------------------------- -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_DIM_CDF(HFILENAME,HNCVARNAME,KDIM) -! #################### -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -INTEGER, INTENT(OUT):: KDIM ! value of dimension to get -! -integer :: status -integer :: kcdf_id -integer :: NBVARS -character(len=80) :: HACTION -character(len=80),DIMENSION(:),ALLOCATABLE :: YVARNAME -integer ::JLOOP1,JLOOP -integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2 -integer ::NVARDIMS -INTEGER, DIMENSION(1) :: NDIMID -integer,DIMENSION(2) ::NLEN2D, NDIMID2D -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -!* 1. Open the netcdf file -! -------------------- -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_DIM_CDF',0,ZHOOK_HANDLE) -HACTION='open netcdf' -status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id) -if (status/=NF90_NOERR) then - CALL HANDLE_ERR_MER(status,HACTION) -endif -! -!----------- -! -!* 2. get the number of variables in netcdf file -! ------------------------------------------ -HACTION='get number of variables' -status=NF90_INQUIRE(kcdf_id,NVARIABLES=NBVARS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -ALLOCATE(YVARNAME(NBVARS)) -! -!----------- -! -!* 3. get the variables names in netcdf file -! -------------------------------------- -ID_VARTOGET1=0 -ID_VARTOGET2=0 -DO JLOOP1=1,NBVARS - HACTION='get variables names' - status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=YVARNAME(JLOOP1)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - if (YVARNAME(JLOOP1)==HNCVARNAME) then - ID_VARTOGET1=JLOOP1 - endif - if (YVARNAME(JLOOP1)/=HNCVARNAME) then - if((LGT(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.& - (SCAN(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then - ID_VARTOGET2=JLOOP1 - endif - endif -ENDDO -if (ID_VARTOGET1/=0) then - ID_VARTOGET=ID_VARTOGET1 -else - ID_VARTOGET=ID_VARTOGET2 -endif -if (ID_VARTOGET==0) then - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_DIM_CDF') -endif -!----------- -! -!* 4. get the total dimension of HNCVARNAME -! ------------------------------------- -! -! 4.1 get the variable dimensions number -! ----------------------------------- -! -HACTION='get variable dimensions number' -status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=NVARDIMS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -! 4.2 get the variable dimensions length -! ---------------------------------- -SELECT CASE (NVARDIMS) -!CAS 1D - CASE (1) - HACTION='get variable dimensions length' - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NDIMID) - status=nf90_inquire_dimension(kcdf_id,NDIMID(1),LEN=KDIM) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -!CAS 2D - CASE (2) - KDIM=1 - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NDIMID2D) - DO JLOOP=1,NVARDIMS - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(kcdf_id,NDIMID2D(JLOOP),LEN=NLEN2D(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - KDIM=KDIM*NLEN2D(JLOOP) - ENDDO -END SELECT -!----------- -!* 10. Close the netcdf file -! --------------------- -HACTION='close netcdf' -status=nf90_close(kcdf_id) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -!----------- -!* 11. Deallocate -! ---------- -IF (ALLOCATED(YVARNAME )) DEALLOCATE(YVARNAME) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_DIM_CDF',1,ZHOOK_HANDLE) -! -END SUBROUTINE READ_DIM_CDF -!------------------------------------------------------------------- -!------------------------------------------------------------------- -! #################### - SUBROUTINE PREP_NETCDF_GRID(HFILENAME,HNCVARNAME) -! #################### -! -USE MODD_SURFEX_MPI, ONLY : WLOG_MPI, NRANK, NPIO, NPROC, NCOMM -USE MODD_HORIBL, ONLY : LGLOBLON, LGLOBS, LGLOBN, XILO1H, XILO2H, NINLOH, & - XLA, XOLA, XOLO, NP, XLOPH, NO -USE MODD_PREP, ONLY : XLAT_OUT, XLON_OUT, LINTERP, XX_OUT, XY_OUT -! -USE MODD_GRID_LATLONREGUL -USE MODD_SURF_PAR -! -USE MODI_HORIBL_SURF_INIT -USE MODI_HORIBL_SURF_COEF -! -USE NETCDF -! -IMPLICIT NONE -! -#ifdef SFX_MPI -INCLUDE "mpif.h" -#endif -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -! -integer :: status -integer :: kcdf_id -integer :: INBVARS -character(len=80) :: HACTION -character(len=80),DIMENSION(:),ALLOCATABLE :: YVARNAME -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID -integer ::JLOOP1,JLOOP -integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2 -integer ::INVARDIMS -integer,DIMENSION(3) ::INDIMLEN -character(LEN=80),DIMENSION(3) :: NDIMNAM -integer :: IDIM -integer :: INLON -INTEGER :: IINLA, INO -real :: ZZLAMISS,ZZLOMISS -INTEGER :: INFOMPI -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',0,ZHOOK_HANDLE) -NINLAT =-NUNDEF -NINDEPTH=-NUNDEF -NILENGTH=-NUNDEF -! -XILAT1=XUNDEF -XILON1=XUNDEF -XILAT2=XUNDEF -XILON2=XUNDEF -!* 1. Open the netcdf file -! -------------------- -IF (NRANK==NPIO) THEN - - HACTION='open netcdf' - status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id) - !write(0,*) 'identifiant de ',HFILENAME,'=',kcdf_id - if (status/=NF90_NOERR) then - CALL HANDLE_ERR_MER(status,HACTION) - !else - ! write(0,*) 'netcdf file opened: ',HFILENAME - endif - ! - !----------- - ! - !* 2. get the number of variables in netcdf file - ! ------------------------------------------ - HACTION='get number of variables' - status=NF90_INQUIRE(kcdf_id,NVARIABLES=INBVARS) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'nb vars', INBVARS - ALLOCATE(YVARNAME(INBVARS)) - ! - !----------- - ! - !* 3. get the variables names in netcdf file - ! -------------------------------------- - ID_VARTOGET1=0 - ID_VARTOGET2=0 - DO JLOOP1=1,INBVARS - HACTION='get variables names' - status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=YVARNAME(JLOOP1)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'var',JLOOP1,' name: ',YVARNAME(JLOOP1) - if (YVARNAME(JLOOP1)==HNCVARNAME) then - !write(0,*) 'var',JLOOP1,' corresponding to variable required' - ID_VARTOGET1=JLOOP1 - endif - if (YVARNAME(JLOOP1)/=HNCVARNAME) then - if((LGT(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.& - (SCAN(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then - !write(0,*) 'var',JLOOP1,YVARNAME(JLOOP1),' could correspond to variable required ?' - !write(0,*) HNCVARNAME,' is variable required; only ',YVARNAME(JLOOP1),' found' - ID_VARTOGET2=JLOOP1 - endif - endif - ENDDO - DEALLOCATE(YVARNAME) - if (ID_VARTOGET1/=0) then - ID_VARTOGET=ID_VARTOGET1 - else - ID_VARTOGET=ID_VARTOGET2 - endif - ! - if (ID_VARTOGET==0) then - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - endif - ! -ENDIF -! -IF (NPROC>1) THEN -#ifdef SFX_MPI - CALL MPI_BCAST(ID_VARTOGET,KIND(ID_VARTOGET)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) -#endif -ENDIF -! -if (ID_VARTOGET==0) then - IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',1,ZHOOK_HANDLE) - RETURN -endif -! -NILENGTH=0 -! -IF (NRANK==NPIO) THEN - ! - !----------- - ! - !* 4. get the total dimension of HNCVARNAME - ! ------------------------------------- - ! - ! 4.1 get the variable dimensions number - ! ----------------------------------- - ! - HACTION='get variable dimensions number' - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=INVARDIMS) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'variable dimensions number = ',INVARDIMS - ALLOCATE(NVARDIMID(INVARDIMS)) - HACTION='get variable dimensions identifiant' - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NVARDIMID) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ! - ! 4.2 get the variable dimensions length - ! ---------------------------------- - SELECT CASE (INVARDIMS) - !CAS 1D - CASE (1) - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(kcdf_id,NVARDIMID(1),LEN=IDIM) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ! - !CAS 2D,3D - CASE (2,3) - DO JLOOP=1,INVARDIMS - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(kcdf_id,NVARDIMID(JLOOP),LEN=INDIMLEN(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - HACTION='get variable dimensions names' - status=nf90_inquire_dimension(kcdf_id,NVARDIMID(JLOOP),NAME=NDIMNAM(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - if ((NDIMNAM(JLOOP)=='lat').OR.(NDIMNAM(JLOOP)=='latitude')) then - NINLAT=INDIMLEN(JLOOP) - if (.not.allocated(XILATARRAY)) allocate(XILATARRAY(INDIMLEN(JLOOP))) - if (.not.allocated(NINLON)) allocate(NINLON(NINLAT)) - CALL GET1DCDF(kcdf_id,NVARDIMID(JLOOP),ZZLAMISS,XILATARRAY(:)) - endif - if ((NDIMNAM(JLOOP)=='lon').OR.(NDIMNAM(JLOOP)=='longitude')) then - INLON=INDIMLEN(JLOOP) - if (.not.allocated(XILONARRAY)) allocate(XILONARRAY(INDIMLEN(JLOOP))) - CALL GET1DCDF(kcdf_id,NVARDIMID(JLOOP),ZZLOMISS,XILONARRAY(:)) - endif - if (NDIMNAM(JLOOP)=='depth') NINDEPTH=INDIMLEN(JLOOP) - ENDDO - NINLON(:)=INLON - END SELECT - !----------- - !* 10. Close the netcdf file - ! --------------------- - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'OK: netcdf file closed: ',HFILENAME - ! -ENDIF -! -IF (NPROC>1) THEN -#ifdef SFX_MPI - CALL MPI_BCAST(NINLAT,KIND(NINLAT)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(INLON,KIND(INLON)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) - IF (NRANK/=NPIO) THEN - ALLOCATE(NINLON(NINLAT)) - ALLOCATE(XILATARRAY(NINLAT)) - ALLOCATE(XILONARRAY(INLON)) - ENDIF - CALL MPI_BCAST(NINLON,SIZE(NINLON)*KIND(NINLON)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(XILATARRAY,SIZE(XILATARRAY)*KIND(XILATARRAY)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(XILONARRAY,SIZE(XILONARRAY)*KIND(XILONARRAY)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) -#endif -ENDIF -! -!----------- -!GRID PARAM FOR HORIBL_SURF -NILENGTH=0 -DO JLOOP1=1,NINLAT - NILENGTH = NILENGTH + NINLON(JLOOP1) -ENDDO -XILAT1=XILATARRAY(1) -XILON1=XILONARRAY(1) -XILAT2=XILATARRAY(SIZE(XILATARRAY)) -XILON2=XILONARRAY(SIZE(XILONARRAY)) -! -!* 11. Deallocate -! ---------- -! -IF (ALLOCATED(XLAT_OUT)) THEN - ! - INO = SIZE(XLAT_OUT) - ! - IF (ALLOCATED(NO)) DEALLOCATE(NO) - IF (ALLOCATED(XLA)) DEALLOCATE(XLA) - IF (ALLOCATED(XOLA)) DEALLOCATE(XOLA) - IF (ALLOCATED(XOLO)) DEALLOCATE(XOLO) - IF (ALLOCATED(NINLOH)) DEALLOCATE(NINLOH) - - ALLOCATE(NO(INO,4)) - ALLOCATE(XOLA(INO),XOLO(INO)) - ALLOCATE(XLA(INO,4)) - ! - IINLA = NINLAT - ALLOCATE(NINLOH(IINLA+4)) - CALL HORIBL_SURF_INIT(XILAT1,XILON1,XILAT2,XILON2,NINLAT,NINLON, & - INO,XLON_OUT,XLAT_OUT,LINTERP,.FALSE.,LGLOBLON,& - LGLOBN,LGLOBS,NO,NINLOH,XOLA,XOLO,XILO1H,& - XILO2H,XLA,XILATARRAY) - ! - IF (ALLOCATED(NP)) DEALLOCATE(NP) - IF (ALLOCATED(XLOPH)) DEALLOCATE(XLOPH) - ALLOCATE(NP(INO,12)) - ALLOCATE(XLOPH(INO,12)) - - IF (LGLOBS) IINLA = IINLA + 2 - IF (LGLOBN) IINLA = IINLA + 2 - CALL HORIBL_SURF_COEF(INO,LINTERP,LGLOBLON,XILO1H,XILO2H,XOLO,& - NO,NINLOH(1:IINLA),NP,XLOPH) - ! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',1,ZHOOK_HANDLE) -! -END SUBROUTINE PREP_NETCDF_GRID -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_Z1D_CDF(HFILENAME,HNCVARNAME,PVAL) -! #################### -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, DIMENSION(:), INTENT(OUT) :: PVAL ! value to get -! -integer :: status -integer :: kcdf_id -integer :: NBVARS -character(len=80) :: HACTION -character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME -integer ::JLOOP1 -integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2 -integer ::NVARDIMS -INTEGER, DIMENSION(1) :: NDIMID -integer ::NLEN -real,DIMENSION(:),ALLOCATABLE :: ZVALU -real :: ZMISS -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -!* 1. Open the netcdf file -! -------------------- -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_Z1D_CDF',0,ZHOOK_HANDLE) -status=-9999 -kcdf_id=-9999 -HACTION='open netcdf' -status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id) -if (status/=NF90_NOERR) then - CALL HANDLE_ERR_MER(status,HACTION) -endif -!----------- -!* 2. get the number of variables in netcdf file -! ------------------------------------------ -HACTION='get number of variables' -status=NF90_INQUIRE(kcdf_id,NVARIABLES=NBVARS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'nb vars', NBVARS -ALLOCATE(VARNAME(NBVARS)) -!----------- -!* 3. get the variables names in netcdf file -! -------------------------------------- -ID_VARTOGET1=0 -ID_VARTOGET2=0 -DO JLOOP1=1,NBVARS - HACTION='get variables names' - status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=VARNAME(JLOOP1)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - if (VARNAME(JLOOP1)==HNCVARNAME) then - ID_VARTOGET1=JLOOP1 - endif - if (VARNAME(JLOOP1)/=HNCVARNAME) then - if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.& - (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then - ID_VARTOGET2=JLOOP1 - endif - endif -ENDDO -if (ID_VARTOGET1/=0) then - ID_VARTOGET=ID_VARTOGET1 -else - ID_VARTOGET=ID_VARTOGET2 -endif -if (ID_VARTOGET==0) then - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_Z1D_CDF') -endif -!----------- -!* 4. get the variable in netcdf file -! ------------------------------- -! 4.1 get the variable dimensions number -! ----------------------------------- -HACTION='get variable dimensions number' -status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=NVARDIMS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -! 4.2 get the variable dimensions length and values -! ---------------------------------------------- -SELECT CASE (NVARDIMS) -!CAS 1D - CASE (1) - HACTION='get variable dimensions length' - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NDIMID) - status=nf90_inquire_dimension(kcdf_id,NDIMID(1),LEN=NLEN) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ALLOCATE(ZVALU(NLEN)) - !write(0,*) 'call GET1DCDF' - CALL GET1DCDF(kcdf_id,ID_VARTOGET,ZMISS,ZVALU) - PVAL(:)=ZVALU(:) -!CAS 2D - CASE (2) - write(0,*) 'YOU ARE TRYING TO READ A 2D FIELD FOR :', TRIM(HNCVARNAME) - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_Z1D_CDF') -END SELECT -!----------- -!* 5. Close the netcdf file -! --------------------- -HACTION='close netcdf' -status=nf90_close(kcdf_id) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!----------- -!* 6. Deallocate -! ---------- -IF (ALLOCATED(VARNAME )) DEALLOCATE(VARNAME) -IF (ALLOCATED(ZVALU )) DEALLOCATE(ZVALU ) -!! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_Z1D_CDF',1,ZHOOK_HANDLE) -END SUBROUTINE READ_Z1D_CDF -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,PLON,PLAT,PVAL) -! #################### -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, DIMENSION(:), INTENT(OUT) :: PLON,PLAT ! Longitudes/latitudes in netcdf file -REAL, DIMENSION(:), INTENT(OUT) :: PVAL ! value to get -! -integer :: status -integer :: kcdf_id -integer :: NBVARS -character(len=80) :: HACTION -character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME -integer ::JLOOP1,JDIM1,JDIM2,JLOOP -integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2 -integer ::NVARDIMS -integer ::NLEN -integer, dimension(1) :: NDIMID -integer,DIMENSION(2) ::NLEN2D, NDIMID2D -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN -character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM -real,DIMENSION(:),ALLOCATABLE :: ZVALU -real,DIMENSION(:,:),ALLOCATABLE :: ZVALU2D -real :: ZMISS -real,DIMENSION(:),ALLOCATABLE :: ZDIM1 -real,DIMENSION(:),ALLOCATABLE :: ZDIM2 -character(len=80) :: YDIM1NAME,YDIM2NAME -integer :: ILONFOUND,ILATFOUND, IARG -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -! -! -!* 1. Open the netcdf file -! -------------------- -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONVAL_CDF',0,ZHOOK_HANDLE) -status=-9999 -kcdf_id=-9999 -HACTION='open netcdf' -status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id) -!write(0,*) 'status=',status -!write(0,*) 'identifiant de ',HFILENAME,'=',kcdf_id -if (status/=NF90_NOERR) then - CALL HANDLE_ERR_MER(status,HACTION) -!else -! write(0,*) 'netcdf file opened: ',HFILENAME -endif -! -!----------- -! -!* 2. get the number of variables in netcdf file -! ------------------------------------------ -HACTION='get number of variables' -status=NF90_INQUIRE(kcdf_id,NVARIABLES=NBVARS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'nb vars', NBVARS -ALLOCATE(VARNAME(NBVARS)) -! -!----------- -! -!* 3. get the variables names in netcdf file -! -------------------------------------- -ID_VARTOGET1=0 -ID_VARTOGET2=0 -DO JLOOP1=1,NBVARS - HACTION='get variables names' - status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=VARNAME(JLOOP1)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'var',JLOOP1,' name: ',VARNAME(JLOOP1) - if (VARNAME(JLOOP1)==HNCVARNAME) then - !write(0,*) 'var',JLOOP1,' corresponding to variable required' - ID_VARTOGET1=JLOOP1 - endif - if (VARNAME(JLOOP1)/=HNCVARNAME) then - if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.& - (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then - !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?' - !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found' - ID_VARTOGET2=JLOOP1 - endif - endif -ENDDO -if (ID_VARTOGET1/=0) then - ID_VARTOGET=ID_VARTOGET1 -else - ID_VARTOGET=ID_VARTOGET2 -endif -if (ID_VARTOGET==0) then - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_LATLONVAL_CDF') -endif -!----------- -! -!* 4. get the variable in netcdf file -! ------------------------------- -! -! 4.1 get the variable dimensions number -! ----------------------------------- -! -HACTION='get variable dimensions number' -status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=NVARDIMS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'variable dimensions number = ',NVARDIMS -! -! 4.2 get the variable dimensions length and values -! ---------------------------------------------- -SELECT CASE (NVARDIMS) -!CAS 1D - CASE (1) - HACTION='get variable dimensions length' - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NDIMID) - status=nf90_inquire_dimension(kcdf_id,NDIMID(1),LEN=NLEN) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ALLOCATE(ZVALU(NLEN)) - !write(0,*) 'call GET1DCDF' - CALL GET1DCDF(kcdf_id,ID_VARTOGET,ZMISS,ZVALU) - PVAL(:)=ZVALU(:) -!CAS 2D - CASE (2) - status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NDIMID2D) - DO JLOOP=1,NVARDIMS - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(kcdf_id,NDIMID2D(JLOOP),LEN=NLEN2D(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ENDDO - ALLOCATE(ZVALU2D(NLEN2D(1),NLEN2D(2))) - ALLOCATE(ZDIM1(NLEN2D(1))) - ALLOCATE(ZDIM2(NLEN2D(2))) - !write(0,*) 'call GET2DCDF' - CALL GET2DCDF(kcdf_id,ID_VARTOGET,ZDIM1,YDIM1NAME,ZDIM2,YDIM2NAME,& - ZMISS,ZVALU2D) - !write(0,*) 'YDIM1NAME: ',YDIM1NAME - !write(0,*) 'YDIM2NAME: ',YDIM2NAME - if ((YDIM1NAME=='lon').OR.(YDIM1NAME=='longitude')) ILONFOUND=1 - if ((YDIM2NAME=='lon').OR.(YDIM2NAME=='longitude')) ILONFOUND=2 - if ((YDIM1NAME=='lat').OR.(YDIM1NAME=='latitude')) ILATFOUND=1 - if ((YDIM2NAME=='lat').OR.(YDIM2NAME=='latitude')) ILATFOUND=2 - IARG=0 -! -! 4.3 complete arrays -! --------------- - IF ((ILONFOUND==1).AND.(ILATFOUND==2)) then - !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND - DO JDIM1=1,SIZE(ZDIM1) - DO JDIM2=1,SIZE(ZDIM2) - IARG=IARG+1 - PVAL(IARG)=ZVALU2D(JDIM1,JDIM2) - PLON(IARG)=ZDIM1(JDIM1) - PLAT(IARG)=ZDIM2(JDIM2) - ENDDO - ENDDO - ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==1)) then - !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND - DO JDIM1=1,SIZE(ZDIM1) - DO JDIM2=1,SIZE(ZDIM2) - IARG=IARG+1 - PVAL(IARG)=ZVALU2D(JDIM1,JDIM2) - PLAT(IARG)=ZDIM1(JDIM1) - PLON(IARG)=ZDIM2(JDIM2) - ENDDO - ENDDO - ELSE - write(0,*) '*****WARNING*****: incompatible dimensions to lat/lon/value arrays' - ENDIF -! -END SELECT -! -! -!----------- -!* 10. Close the netcdf file -! --------------------- -HACTION='close netcdf' -status=nf90_close(kcdf_id) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'OK: netcdf file closed: ',HFILENAME -! -!----------- -!* 11. Deallocate -! ---------- -IF (ALLOCATED(VARNAME )) DEALLOCATE(VARNAME) -IF (ALLOCATED(ZVALU )) DEALLOCATE(ZVALU ) -IF (ALLOCATED(ZVALU2D )) DEALLOCATE(ZVALU2D) -IF (ALLOCATED(ZDIM1 )) DEALLOCATE(ZDIM1 ) -IF (ALLOCATED(ZDIM2 )) DEALLOCATE(ZDIM2 ) -! -! -IF (ALLOCATED(NVARDIMID )) DEALLOCATE(NVARDIMID ) -IF (ALLOCATED(NVARDIMNAM )) DEALLOCATE(NVARDIMNAM) -IF (ALLOCATED(NVARDIMLEN )) DEALLOCATE(NVARDIMLEN) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONVAL_CDF',1,ZHOOK_HANDLE) -END SUBROUTINE READ_LATLONVAL_CDF -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_LATLONDEPVAL_CDF(HFILENAME,HNCVARNAME,PLON,PLAT,PDEP,PVAL) -! #################### -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, DIMENSION(:), INTENT(OUT) :: PLON,PLAT ! Longitudes/latitudes in netcdf file -REAL, DIMENSION(:), INTENT(OUT) :: PDEP ! depth in netcdf file -REAL, DIMENSION(:,:), INTENT(OUT) :: PVAL ! value to get -! -integer :: status -integer :: kcdf_id -integer :: NBVARS -character(len=80) :: HACTION -character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME -integer ::JLOOP1,JDIM1,JDIM2,JDIM3,JLOOP -!integer ::JLOOP2,JLOOP -integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2 -integer ::NVARDIMS -integer,DIMENSION(3) ::NLEN3D -integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN -character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM -real,DIMENSION(:,:,:),ALLOCATABLE :: ZVALU3D -real :: ZMISS -real,DIMENSION(:),ALLOCATABLE :: ZDIM1 -real,DIMENSION(:),ALLOCATABLE :: ZDIM2 -real,DIMENSION(:),ALLOCATABLE :: ZDIM3 -character(len=80) :: YDIM1NAME,YDIM2NAME,YDIM3NAME -integer :: ILONFOUND,ILATFOUND,IDEPFOUND -integer :: IARG -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -! -! -!* 1. Open the netcdf file -! -------------------- -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONDEPVAL_CDF',0,ZHOOK_HANDLE) -HACTION='open netcdf' -status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'netcdf file opened: ',HFILENAME -! -!----------- -! -!* 2. get the number of variables in netcdf file -! ------------------------------------------ -HACTION='get number of variables' -status=NF90_INQUIRE(kcdf_id,NVARIABLES=NBVARS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'nb vars', NBVARS -ALLOCATE(VARNAME(NBVARS)) -! -!----------- -! -!* 3. get the variables names in netcdf file -! -------------------------------------- -ID_VARTOGET1=0 -ID_VARTOGET2=0 -DO JLOOP1=1,NBVARS - HACTION='get variables names' - status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=VARNAME(JLOOP1)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - !write(0,*) 'var',JLOOP1,' name: ',VARNAME(JLOOP1) - if (VARNAME(JLOOP1)==HNCVARNAME) then - !write(0,*) 'var',JLOOP1,' corresponding to variable required' - ID_VARTOGET1=JLOOP1 - endif - if (VARNAME(JLOOP1)/=HNCVARNAME) then - if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.& - (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then - !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?' - !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found' - ID_VARTOGET2=JLOOP1 - endif - endif -ENDDO -if (ID_VARTOGET1/=0) then - ID_VARTOGET=ID_VARTOGET1 -else - ID_VARTOGET=ID_VARTOGET2 -endif -if (ID_VARTOGET==0) then - HACTION='close netcdf' - status=nf90_close(kcdf_id) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_LATLONDEPVAL_CDF') -endif -!----------- -! -!* 4. get the variable in netcdf file -! ------------------------------- -! -! 4.1 get the variable dimensions number -! ----------------------------------- -! -HACTION='get variable dimensions number' -status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=NVARDIMS) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'variable dimensions number = ',NVARDIMS -ALLOCATE(NVARDIMID(NVARDIMS)) -HACTION='get variable dimensions identifiant' -status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,DIMIDS=NVARDIMID) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -! -! -! 4.2 get the variable dimensions length and values -! ---------------------------------------------- -SELECT CASE (NVARDIMS) -!CAS 1D, 2D - CASE (1,2) - write(0,*) '********************************************' - write(0,*) '* number of dimension to low: ',NVARDIMS,' *' - write(0,*) '* you need a 3-dimension variable *' - write(0,*) '********************************************' -!CAS 3D - CASE (3) - DO JLOOP=1,NVARDIMS - HACTION='get variable dimensions length' - status=nf90_inquire_dimension(kcdf_id,NVARDIMID(JLOOP),LEN=NLEN3D(JLOOP)) - if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) - ENDDO - ALLOCATE(ZVALU3D(NLEN3D(1),NLEN3D(2),NLEN3D(3))) - ALLOCATE(ZDIM1(NLEN3D(1))) - ALLOCATE(ZDIM2(NLEN3D(2))) - ALLOCATE(ZDIM3(NLEN3D(3))) - !write(0,*) 'call GET3DCDF' - CALL GET3DCDF(kcdf_id,ID_VARTOGET,ZDIM1,YDIM1NAME,ZDIM2,YDIM2NAME,& - ZDIM3,YDIM3NAME,ZMISS,ZVALU3D) - !write(0,*) 'YDIM1NAME: ',YDIM1NAME - !write(0,*) 'YDIM2NAME: ',YDIM2NAME - !write(0,*) 'YDIM3NAME: ',YDIM3NAME - if ((YDIM1NAME=='lon').OR.(YDIM1NAME=='longitude')) ILONFOUND=1 - if ((YDIM2NAME=='lon').OR.(YDIM2NAME=='longitude')) ILONFOUND=2 - if ((YDIM3NAME=='lon').OR.(YDIM3NAME=='longitude')) ILONFOUND=3 - if ((YDIM1NAME=='lat').OR.(YDIM1NAME=='latitude')) ILATFOUND=1 - if ((YDIM2NAME=='lat').OR.(YDIM2NAME=='latitude')) ILATFOUND=2 - if ((YDIM3NAME=='lat').OR.(YDIM3NAME=='latitude')) ILATFOUND=3 - if (YDIM1NAME=='depth') IDEPFOUND=1 - if (YDIM2NAME=='depth') IDEPFOUND=2 - if (YDIM3NAME=='depth') IDEPFOUND=3 - IARG=0 - !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND,'IDEPFOUND',IDEPFOUND -!! -!! 4.3 complete arrays -!! --------------- - IF ((ILONFOUND==1).AND.(ILATFOUND==2).AND.(IDEPFOUND==3)) then - !write(0,*) 'SIZE LON=',SIZE(ZDIM1),'SIZE LAT',SIZE(ZDIM2),'SIZE DEP',SIZE(ZDIM3) - !write(0,*) 'SIZE PLON=',SIZE(PLON),'SIZE PLAT',SIZE(PLAT),'SIZE PDEP',SIZE(PDEP) - PDEP(:)=ZDIM3(:) - DO JDIM2=1,SIZE(ZDIM2) - DO JDIM1=1,SIZE(ZDIM1) - IARG=IARG+1 - PLON(IARG)=ZDIM1(JDIM1) - PLAT(IARG)=ZDIM2(JDIM2) - DO JDIM3=1,SIZE(ZDIM3) - PVAL(IARG,JDIM3)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO - !write(0,*) 'END complete arrays' -! - ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==1).AND.(IDEPFOUND==3)) then - PDEP(:)=ZDIM3(:) - DO JDIM1=1,SIZE(ZDIM1) - DO JDIM2=1,SIZE(ZDIM2) - IARG=IARG+1 - PLON(IARG)=ZDIM2(JDIM2) - PLAT(IARG)=ZDIM1(JDIM1) - DO JDIM3=1,SIZE(ZDIM3) - PVAL(IARG,JDIM3)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO -! - ELSEIF ((ILONFOUND==1).AND.(ILATFOUND==3).AND.(IDEPFOUND==2)) then - PDEP(:)=ZDIM2(:) - DO JDIM3=1,SIZE(ZDIM3) - DO JDIM1=1,SIZE(ZDIM1) - IARG=IARG+1 - PLON(IARG)=ZDIM1(JDIM1) - PLAT(IARG)=ZDIM3(JDIM3) - DO JDIM2=1,SIZE(ZDIM2) - PVAL(IARG,JDIM2)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO -! - ELSEIF ((ILATFOUND==1).AND.(ILONFOUND==3).AND.(IDEPFOUND==2)) then - PDEP(:)=ZDIM2(:) - DO JDIM1=1,SIZE(ZDIM1) - DO JDIM3=1,SIZE(ZDIM3) - IARG=IARG+1 - PLON(IARG)=ZDIM3(JDIM3) - PLAT(IARG)=ZDIM1(JDIM1) - DO JDIM2=1,SIZE(ZDIM2) - PVAL(IARG,JDIM2)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO -! - ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==3).AND.(IDEPFOUND==1)) then - PDEP(:)=ZDIM1(:) - DO JDIM3=1,SIZE(ZDIM3) - DO JDIM2=1,SIZE(ZDIM2) - IARG=IARG+1 - PLON(IARG)=ZDIM2(JDIM2) - PLAT(IARG)=ZDIM3(JDIM3) - DO JDIM1=1,SIZE(ZDIM1) - PVAL(IARG,JDIM1)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO -! - ELSEIF ((ILATFOUND==2).AND.(ILONFOUND==3).AND.(IDEPFOUND==1)) then - PDEP(:)=ZDIM1(:) - DO JDIM2=1,SIZE(ZDIM2) - DO JDIM3=1,SIZE(ZDIM3) - IARG=IARG+1 - PLON(IARG)=ZDIM3(JDIM3) - PLAT(IARG)=ZDIM2(JDIM2) - DO JDIM1=1,SIZE(ZDIM1) - PVAL(IARG,JDIM1)=ZVALU3D(JDIM1,JDIM2,JDIM3) - ENDDO - ENDDO - ENDDO -! - ELSE - write(0,*) '*****WARNING*****: incompatible dimensions to lat/lon/value arrays' - ENDIF -! -END SELECT -! -!----------- -!* 10. Close the netcdf file -! --------------------- -HACTION='close netcdf' -!write(0,*) HACTION -status=nf90_close(kcdf_id) -if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION) -!write(0,*) 'OK: netcdf file closed: ',HFILENAME -! -!----------- -!* 11. Deallocate -! ---------- -IF (ALLOCATED(VARNAME )) DEALLOCATE(VARNAME) -IF (ALLOCATED(ZVALU3D )) DEALLOCATE(ZVALU3D) -IF (ALLOCATED(ZDIM1 )) DEALLOCATE(ZDIM1 ) -IF (ALLOCATED(ZDIM2 )) DEALLOCATE(ZDIM2 ) -IF (ALLOCATED(ZDIM3 )) DEALLOCATE(ZDIM3 ) -! -! -IF (ALLOCATED(NVARDIMID )) DEALLOCATE(NVARDIMID ) -IF (ALLOCATED(NVARDIMNAM )) DEALLOCATE(NVARDIMNAM) -IF (ALLOCATED(NVARDIMLEN )) DEALLOCATE(NVARDIMLEN) -201 FORMAT(4(3X,F10.4)) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONDEPVAL_CDF',1,ZHOOK_HANDLE) -END SUBROUTINE READ_LATLONDEPVAL_CDF -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_NETCDF_SST(HFILENAME,HNCVARNAME,PFIELD) -! #################### -! -USE MODD_GRID_LATLONREGUL, ONLY : NINDEPTH,NILENGTH -USE MODD_SURF_PAR, ONLY : XUNDEF -USE MODD_CSTS, ONLY : XTT -USE MODD_PREP, ONLY : CINTERP_TYPE -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, POINTER,DIMENSION(:) :: PFIELD ! value to get -! -REAL,DIMENSION(:), ALLOCATABLE :: ZLATI -REAL,DIMENSION(:), ALLOCATABLE :: ZLONG -REAL,TARGET,DIMENSION(:,:), ALLOCATABLE :: ZVALUE -REAL,DIMENSION(:), ALLOCATABLE :: ZDEPTH -REAL,TARGET,DIMENSION(:), ALLOCATABLE :: ZVAL -integer :: jloop -!PLM -REAL :: ZUNDEF=999. -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_SST',0,ZHOOK_HANDLE) -IF (NILENGTH<0) then - ALLOCATE(PFIELD(1)) - PFIELD(:)=XUNDEF - CINTERP_TYPE='UNIF ' !!prescribed uniform field -ELSEIF (NINDEPTH<0) THEN - ALLOCATE(ZLATI(NILENGTH) ) - ALLOCATE(ZLONG(NILENGTH) ) - ALLOCATE(ZVAL (NILENGTH) ) - CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVAL) - ALLOCATE(PFIELD(NILENGTH)) - PFIELD(:)=XUNDEF - PFIELD(:) = ZVAL(:) - IF (TRIM(HNCVARNAME) == 'temperature') THEN - WHERE (ZVAL(:)/=ZUNDEF .AND. ZVAL(:)<100.) PFIELD(:)=PFIELD(:)+XTT - ENDIF - CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid -! !!CINGRID_TYPE='GAUSS ' ou ='AROME ' -! !!CINGRID_TYPE='LATLON ' -ELSE - ALLOCATE(ZVALUE(NILENGTH,NINDEPTH)) - ALLOCATE(ZLATI(NILENGTH) ) - ALLOCATE(ZLONG(NILENGTH) ) - ALLOCATE(ZDEPTH(NINDEPTH)) -! - CALL READ_LATLONDEPVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZDEPTH,ZVALUE) -! - ALLOCATE(PFIELD(NILENGTH)) - PFIELD(:)=XUNDEF - PFIELD(:)=ZVALUE(:,1) - IF (TRIM(HNCVARNAME) == 'temperature') THEN - WHERE (ZVALUE(:,1)/=ZUNDEF .AND. ZVALUE(:,1)<100.) PFIELD(:)=PFIELD(:)+XTT - ENDIF - CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid -! !!CINGRID_TYPE='GAUSS ' ou ='AROME ' -! !!CINGRID_TYPE='LATLON ' -ENDIF -! -IF (ALLOCATED(ZVALUE )) DEALLOCATE(ZVALUE ) -IF (ALLOCATED(ZLONG )) DEALLOCATE(ZLONG ) -IF (ALLOCATED(ZLATI )) DEALLOCATE(ZLATI ) -IF (ALLOCATED(ZDEPTH )) DEALLOCATE(ZDEPTH ) -IF (ALLOCATED(ZVAL )) DEALLOCATE(ZVAL ) -! -202 FORMAT(3(3X,F10.4)) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_SST',1,ZHOOK_HANDLE) -! -END SUBROUTINE READ_NETCDF_SST -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_NETCDF_ZS_SEA(HFILENAME,HNCVARNAME,PFIELD) -! #################### -! -USE MODD_GRID_LATLONREGUL, ONLY : NINLAT,NINLON,NINDEPTH,NILENGTH -USE MODD_PREP, ONLY : CINTERP_TYPE -! -USE NETCDF -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, POINTER, DIMENSION(:) :: PFIELD ! value to get -! -REAL,DIMENSION(:), ALLOCATABLE :: ZLATI -REAL,DIMENSION(:), ALLOCATABLE :: ZLONG -REAL,TARGET, DIMENSION(:), ALLOCATABLE:: ZVALUE -integer :: jloop -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_ZS_SEA',0,ZHOOK_HANDLE) -if(NINDEPTH>0) then - !write(0,*) '*****warning*****',HNCVARNAME,' is a 3D field' - ALLOCATE(PFIELD(1)) - PFIELD(:)=0. - CINTERP_TYPE='UNIF ' !!prescribed uniform field -elseif(NILENGTH>0) then - ALLOCATE(ZVALUE(NILENGTH)) - ALLOCATE(ZLATI(NILENGTH) ) - ALLOCATE(ZLONG(NILENGTH) ) -! - CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVALUE) - ALLOCATE(PFIELD(NILENGTH)) - PFIELD(:)=ZVALUE(:) - CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid -! !!CINGRID_TYPE='GAUSS ' ou ='AROME ' -! !!CINGRID_TYPE='LATLON ' -else - ALLOCATE(PFIELD(1)) - PFIELD(:)=0. - CINTERP_TYPE='UNIF ' !!prescribed uniform field -endif -! -IF (ALLOCATED(ZVALUE )) DEALLOCATE(ZVALUE ) -IF (ALLOCATED(ZLONG )) DEALLOCATE(ZLONG ) -IF (ALLOCATED(ZLATI )) DEALLOCATE(ZLATI ) -! -202 FORMAT(3(3X,F10.4)) -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_ZS_SEA',1,ZHOOK_HANDLE) -! -END SUBROUTINE READ_NETCDF_ZS_SEA -!------------------------------------------------------------------------------ -!============================================================================== -! #################### - SUBROUTINE READ_NETCDF_WAVE(HFILENAME,HNCVARNAME,PFIELD) -! #################### -! -USE MODD_GRID_LATLONREGUL, ONLY : NINLAT,NINLON,NINDEPTH,NILENGTH -USE MODD_PREP, ONLY : CINTERP_TYPE -! -IMPLICIT NONE -! - CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. - CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of variable to read in netcdf file -REAL, POINTER, DIMENSION(:) :: PFIELD ! value to get -! -REAL,DIMENSION(:), ALLOCATABLE :: ZLATI -REAL,DIMENSION(:), ALLOCATABLE :: ZLONG -REAL,TARGET, DIMENSION(:), ALLOCATABLE:: ZVALUE -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -include 'netcdf.inc' -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',0,ZHOOK_HANDLE) -if(NINDEPTH>0) then - !write(0,*) '*****warning*****',HNCVARNAME,' is a 3D field' - ALLOCATE(PFIELD(1)) - PFIELD(:)=0. - CINTERP_TYPE='UNIF ' !!prescribed uniform field -elseif(NILENGTH>0) then - ALLOCATE(ZVALUE(NILENGTH)) - ALLOCATE(ZLATI(NILENGTH) ) - ALLOCATE(ZLONG(NILENGTH) ) -! - CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVALUE) - ALLOCATE(PFIELD(NILENGTH)) - PFIELD(:)=ZVALUE(:) - CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid -! !!CINGRID_TYPE='GAUSS ' ou ='AROME ' -! !!CINGRID_TYPE='LATLON ' -else - ALLOCATE(PFIELD(1)) - PFIELD(:)=0. - CINTERP_TYPE='UNIF ' !!prescribed uniform field -endif -! -IF (ALLOCATED(ZVALUE )) DEALLOCATE(ZVALUE ) -IF (ALLOCATED(ZLONG )) DEALLOCATE(ZLONG ) -IF (ALLOCATED(ZLATI )) DEALLOCATE(ZLATI ) -! -IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',1,ZHOOK_HANDLE) -! -END SUBROUTINE READ_NETCDF_WAVE -!------------------------------------------------------------------------------ -!============================================================================== -END MODULE MODE_READ_NETCDF_MERCATOR diff --git a/src/OASIS/SURFEX/modn_prep_seaflux.F90 b/src/OASIS/SURFEX/modn_prep_seaflux.F90 deleted file mode 100644 index 7aaec327c..000000000 --- a/src/OASIS/SURFEX/modn_prep_seaflux.F90 +++ /dev/null @@ -1,71 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. - -! ################## - MODULE MODN_PREP_SEAFLUX -! ################## -! -!!**** *MODN_PREP_SEAFLUX* - declaration of namelist NAM_PREP_SEAFLUX -!! -!! PURPOSE -!! ------- -! The purpose of this module is to specify the namelist NAM_PREP_SEAFLUX -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S.Malardel *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2003 -!! Modified 07/2012, P. Le Moigne : CMO1D phasing -!! 07/2013, S. Senesi : handle seaice scheme -!! and uniform sea surface salinity and ice cover -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, & - XSST_UNIF, XSSS_UNIF, XSIC_UNIF, CFILEWAVE_SEAFLX, CTYPEWAVE -! -IMPLICIT NONE -! -INTEGER :: NYEAR ! YEAR for surface -INTEGER :: NMONTH ! MONTH for surface -INTEGER :: NDAY ! DAY for surface -REAL :: XTIME ! TIME for surface -LOGICAL :: LSEA_SBL ! flag to use air layers inside the SBL -CHARACTER(LEN=6) :: CSEAICE_SCHEME ! name of the seaice scheme -LOGICAL :: LOCEAN_MERCATOR ! oceanic variables initialized from - ! MERCATOR if true -LOGICAL :: LOCEAN_CURRENT ! initial ocean state with current - ! (if false ucur=0, vcur=0) -REAL :: XTIME_REL ! relaxation time (s) -LOGICAL :: LCUR_REL ! If T, relax on current -LOGICAL :: LTS_REL ! If T, relax on T, S -LOGICAL :: LZERO_FLUX ! If T, relax on T, S -LOGICAL :: LCORR_FLUX ! If T, fluxes correction is made -REAL :: XCORFLX ! correction coefficient ( W.m-2.K-1) -LOGICAL :: LDIAPYC ! If T, fluxes correction is made -! -NAMELIST/NAM_PREP_SEAFLUX/CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF, & - CFILEWAVE_SEAFLX, CTYPEWAVE, & - XSSS_UNIF, XSIC_UNIF, NYEAR, NMONTH, NDAY, XTIME, LSEA_SBL, & - CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT, & - XTIME_REL,LCUR_REL,LTS_REL, & - LZERO_FLUX,XCORFLX,LCORR_FLUX, LDIAPYC -! -END MODULE MODN_PREP_SEAFLUX diff --git a/src/OASIS/SURFEX/modn_seafluxn.F90 b/src/OASIS/SURFEX/modn_seafluxn.F90 deleted file mode 100644 index cd647ff24..000000000 --- a/src/OASIS/SURFEX/modn_seafluxn.F90 +++ /dev/null @@ -1,321 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ################## - MODULE MODN_SEAFLUX_n -! ################## -! -!!**** *MODN_SEAFLUX_n* - declaration of namelist NAM_SEAFLUXn -!! -!! PURPOSE -!! ------- -! The purpose of this module is to specify the namelist NAM_SEAFLUX_n -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 01/2006 : sea flux parameterization. -!! Modified 08/2009 : LSURF_BUDGETC -!! Modified 01/2014 : S. Senesi : introduce sea-ice model -!! Modified 03/2014 : S. Belamari - add NZ0 (to choose PZ0SEA formulation) -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! - -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! - CHARACTER(LEN=6) :: CSEA_FLUX - CHARACTER(LEN=4) :: CSEA_ALB -REAL :: XTSTEP -REAL :: XOUT_TSTEP -REAL :: XDIAG_TSTEP -INTEGER :: N2M -LOGICAL :: L2M_MIN_ZS -LOGICAL :: LSURF_BUDGET -LOGICAL :: LRAD_BUDGET -LOGICAL :: LSURF_BUDGETC -LOGICAL :: LRESET_BUDGETC -LOGICAL :: LCOEF -LOGICAL :: LSURF_VARS -LOGICAL :: LPWG -LOGICAL :: LPRECIP -LOGICAL :: LPWEBB -LOGICAL :: LDIAG_OCEAN -LOGICAL :: LWAVEWIND -LOGICAL :: LDIAG_MISC_SEAICE -INTEGER :: NZ0 -INTEGER :: NGRVWAVES -REAL :: XICHCE -CHARACTER(LEN=6) :: CCH_DRY_DEP -LOGICAL :: LPROGSST -LOGICAL :: LPERTFLUX ! True = stochastic flux perturbation (default:False) -INTEGER :: NTIME_COUPLING -REAL :: XOCEAN_TSTEP -CHARACTER(LEN=6) :: CINTERPOL_SST -CHARACTER(LEN=6) :: CINTERPOL_SSS -CHARACTER(LEN=6) :: CINTERPOL_SIC -CHARACTER(LEN=6) :: CINTERPOL_SIT -REAL :: XFREEZING_SST -REAL :: XSIC_EFOLDING_TIME -REAL :: XSIT_EFOLDING_TIME -REAL :: XSEAICE_TSTEP -REAL :: XCD_ICE_CST -REAL :: XSI_FLX_DRV -! -NAMELIST/NAM_SEAFLUXn/CSEA_FLUX,CSEA_ALB, LPWG, LPRECIP, LPWEBB, NGRVWAVES, & - NZ0, LPROGSST, NTIME_COUPLING, XOCEAN_TSTEP, XICHCE, & - CINTERPOL_SST, CINTERPOL_SSS, LPERTFLUX, LWAVEWIND -NAMELIST/NAM_DIAG_SURFn/N2M,L2M_MIN_ZS,LSURF_BUDGET,LRAD_BUDGET, & - LSURF_BUDGETC,LRESET_BUDGETC,LCOEF,LSURF_VARS -NAMELIST/NAM_CH_SEAFLUXn/CCH_DRY_DEP -NAMELIST/NAM_DIAG_OCEANn/LDIAG_OCEAN -NAMELIST/NAM_SEAICEn/LDIAG_MISC_SEAICE, CINTERPOL_SIC, CINTERPOL_SIT, & - XFREEZING_SST, XSIC_EFOLDING_TIME, XSIT_EFOLDING_TIME,& - XSEAICE_TSTEP, XCD_ICE_CST, XSI_FLX_DRV -! -CONTAINS -! -SUBROUTINE INIT_NAM_SEAFLUXn (O, S) -! - USE MODD_OCEAN_n, ONLY : OCEAN_t - USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! - IMPLICIT NONE - -! - TYPE(OCEAN_t), INTENT(INOUT) :: O - TYPE(SEAFLUX_t), INTENT(INOUT) :: S - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',0,ZHOOK_HANDLE) - XTSTEP = S%XTSTEP - XOUT_TSTEP = S%XOUT_TSTEP - CSEA_FLUX = S%CSEA_FLUX - CSEA_ALB = S%CSEA_ALB - LPWG = S%LPWG - LPRECIP = S%LPRECIP - CINTERPOL_SST = S%CINTERPOL_SST - CINTERPOL_SSS = S%CINTERPOL_SSS - LPWEBB = S%LPWEBB - NZ0 = S%NZ0 - NGRVWAVES = S%NGRVWAVES - LWAVEWIND = S%LWAVEWIND - LPROGSST = O%LPROGSST - NTIME_COUPLING = O%NTIME_COUPLING - XOCEAN_TSTEP = O%XOCEAN_TSTEP - XICHCE = S%XICHCE - LPERTFLUX = S%LPERTFLUX -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',1,ZHOOK_HANDLE) -END SUBROUTINE INIT_NAM_SEAFLUXn - -SUBROUTINE UPDATE_NAM_SEAFLUXn (O, S) -! - USE MODD_OCEAN_n, ONLY : OCEAN_t - USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! - IMPLICIT NONE - -! - TYPE(OCEAN_t), INTENT(INOUT) :: O - TYPE(SEAFLUX_t), INTENT(INOUT) :: S - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',0,ZHOOK_HANDLE) - S%XTSTEP = XTSTEP - S%XOUT_TSTEP = XOUT_TSTEP - S%CSEA_FLUX = CSEA_FLUX - S%CSEA_ALB = CSEA_ALB - S%LPWG = LPWG - S%LPRECIP = LPRECIP - S%CINTERPOL_SST = CINTERPOL_SST - S%CINTERPOL_SSS = CINTERPOL_SSS - S%LPWEBB = LPWEBB - S%NZ0 = NZ0 - S%NGRVWAVES = NGRVWAVES - S%LWAVEWIND = LWAVEWIND - O%LPROGSST = LPROGSST - O%NTIME_COUPLING = NTIME_COUPLING - O%XOCEAN_TSTEP = XOCEAN_TSTEP - S%XICHCE = XICHCE - S%LPERTFLUX = LPERTFLUX -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',1,ZHOOK_HANDLE) -END SUBROUTINE UPDATE_NAM_SEAFLUXn -! -SUBROUTINE INIT_NAM_DIAG_SURFn (DGO) -! - USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t -! - IMPLICIT NONE - -! - TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',0,ZHOOK_HANDLE) - XDIAG_TSTEP = DGO%XDIAG_TSTEP - N2M = DGO%N2M - L2M_MIN_ZS = DGO%L2M_MIN_ZS - LSURF_BUDGET = DGO%LSURF_BUDGET - LRAD_BUDGET = DGO%LRAD_BUDGET - LSURF_BUDGETC = DGO%LSURF_BUDGETC - LRESET_BUDGETC = DGO%LRESET_BUDGETC - LCOEF = DGO%LCOEF - LSURF_VARS = DGO%LSURF_VARS -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',1,ZHOOK_HANDLE) -END SUBROUTINE INIT_NAM_DIAG_SURFn - -SUBROUTINE UPDATE_NAM_DIAG_SURFn (DGO) -! - USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t -! - IMPLICIT NONE - -! - TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',0,ZHOOK_HANDLE) - DGO%XDIAG_TSTEP = XDIAG_TSTEP - DGO%N2M = N2M - DGO%L2M_MIN_ZS = L2M_MIN_ZS - DGO%LSURF_BUDGET = LSURF_BUDGET - DGO%LRAD_BUDGET = LRAD_BUDGET - DGO%LSURF_BUDGETC = LSURF_BUDGETC - DGO%LRESET_BUDGETC = LRESET_BUDGETC - DGO%LCOEF = LCOEF - DGO%LSURF_VARS = LSURF_VARS -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',1,ZHOOK_HANDLE) -END SUBROUTINE UPDATE_NAM_DIAG_SURFn -! -SUBROUTINE INIT_NAM_CH_SEAFLUXn (CHS) -! - USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t -! - IMPLICIT NONE - -! - TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',0,ZHOOK_HANDLE) - CCH_DRY_DEP = CHS%CCH_DRY_DEP -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',1,ZHOOK_HANDLE) -END SUBROUTINE INIT_NAM_CH_SEAFLUXn - -SUBROUTINE UPDATE_NAM_CH_SEAFLUXn (CHS) -! - USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t -! - IMPLICIT NONE - -! - TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',0,ZHOOK_HANDLE) - CHS%CCH_DRY_DEP = CCH_DRY_DEP -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',1,ZHOOK_HANDLE) -END SUBROUTINE UPDATE_NAM_CH_SEAFLUXn - -SUBROUTINE INIT_NAM_DIAG_OCEANn (DGO) -! - USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t -! - IMPLICIT NONE - -! - TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DGO - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',0,ZHOOK_HANDLE) - LDIAG_OCEAN = DGO%LDIAG_OCEAN -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',1,ZHOOK_HANDLE) -END SUBROUTINE INIT_NAM_DIAG_OCEANn - -SUBROUTINE UPDATE_NAM_DIAG_OCEANn (DGO) -! - USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t -! - IMPLICIT NONE - -! - TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DGO - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',0,ZHOOK_HANDLE) - DGO%LDIAG_OCEAN = LDIAG_OCEAN -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',1,ZHOOK_HANDLE) -END SUBROUTINE UPDATE_NAM_DIAG_OCEANn - -SUBROUTINE INIT_NAM_SEAICEn (DGMSI, S) -! - USE MODD_DIAG_MISC_SEAICE_n, ONLY : DIAG_MISC_SEAICE_t - USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! - IMPLICIT NONE - -! - TYPE(DIAG_MISC_SEAICE_t), INTENT(INOUT) :: DGMSI - TYPE(SEAFLUX_t), INTENT(INOUT) :: S - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',0,ZHOOK_HANDLE) - LDIAG_MISC_SEAICE = DGMSI%LDIAG_MISC_SEAICE - CINTERPOL_SIC = S%CINTERPOL_SIC - CINTERPOL_SIT = S%CINTERPOL_SIT - XSIC_EFOLDING_TIME=S%XSIC_EFOLDING_TIME - XSIT_EFOLDING_TIME=S%XSIT_EFOLDING_TIME - XSEAICE_TSTEP=S%XSEAICE_TSTEP - XFREEZING_SST = S%XFREEZING_SST - XCD_ICE_CST = S%XCD_ICE_CST - XSI_FLX_DRV = S%XSI_FLX_DRV -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',1,ZHOOK_HANDLE) -END SUBROUTINE INIT_NAM_SEAICEn - -SUBROUTINE UPDATE_NAM_SEAICEn (DGMSI, S) -! - USE MODD_DIAG_MISC_SEAICE_n, ONLY : DIAG_MISC_SEAICE_t - USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! - IMPLICIT NONE -! - TYPE(DIAG_MISC_SEAICE_t), INTENT(INOUT) :: DGMSI - TYPE(SEAFLUX_t), INTENT(INOUT) :: S - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',0,ZHOOK_HANDLE) - DGMSI%LDIAG_MISC_SEAICE = LDIAG_MISC_SEAICE - S%CINTERPOL_SIC = CINTERPOL_SIC - S%CINTERPOL_SIT = CINTERPOL_SIT - S%XSIC_EFOLDING_TIME = XSIC_EFOLDING_TIME - S%XSIT_EFOLDING_TIME = XSIT_EFOLDING_TIME - S%XSEAICE_TSTEP = XSEAICE_TSTEP - S%XFREEZING_SST = XFREEZING_SST - S%XCD_ICE_CST = XCD_ICE_CST - S%XSI_FLX_DRV = XSI_FLX_DRV -IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',1,ZHOOK_HANDLE) -END SUBROUTINE UPDATE_NAM_SEAICEn - -END MODULE MODN_SEAFLUX_n diff --git a/src/OASIS/SURFEX/modn_sfx_oasis.F90 b/src/OASIS/SURFEX/modn_sfx_oasis.F90 deleted file mode 100644 index 5572ee6ce..000000000 --- a/src/OASIS/SURFEX/modn_sfx_oasis.F90 +++ /dev/null @@ -1,176 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!############### -MODULE MODN_SFX_OASIS -!############### -! -!!**** *MODN_SFX_OASIS - declaration of namelist for SFX-OASIS coupling -!! -!! PURPOSE -!! ------- -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/13 -!! 10/2016 B. Decharme : bug surface/groundwater coupling -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -!! and surface pressure parameter for ocean coupling -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -! -REAL :: XTSTEP_CPL_LAND = -1.0 ! Coupling time step for land -REAL :: XTSTEP_CPL_SEA = -1.0 ! Coupling time step for sea -REAL :: XTSTEP_CPL_LAKE = -1.0 ! Coupling time step for lake -REAL :: XTSTEP_CPL_WAVE = -1.0 ! Coupling time step for wave -! -!------------------------------------------------------------------------------- -! -! * Land surface variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -! Output variables -! -CHARACTER(LEN=8) :: CRUNOFF = ' ' ! Surface runoff -CHARACTER(LEN=8) :: CDRAIN = ' ' ! Deep drainage -CHARACTER(LEN=8) :: CCALVING = ' ' ! Calving flux -CHARACTER(LEN=8) :: CSRCFLOOD = ' ' ! Floodplains freshwater flux -! -! Input variables -! -CHARACTER(LEN=8) :: CWTD = ' ' ! water table depth -CHARACTER(LEN=8) :: CFWTD = ' ' ! grid-cell fraction of water table rise -CHARACTER(LEN=8) :: CFFLOOD = ' ' ! Floodplains fraction -CHARACTER(LEN=8) :: CPIFLOOD = ' ' ! Flood potential infiltartion -! -REAL :: XFLOOD_LIM = 0.01 -! -!------------------------------------------------------------------------------- -! -! * Lake variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -! Input variables -! -CHARACTER(LEN=8) :: CLAKE_EVAP = ' ' ! Evaporation over lake area -CHARACTER(LEN=8) :: CLAKE_RAIN = ' ' ! Rainfall over lake area -CHARACTER(LEN=8) :: CLAKE_SNOW = ' ' ! Snowfall over lake area -CHARACTER(LEN=8) :: CLAKE_WATF = ' ' ! Net freshwater flux -! -!------------------------------------------------------------------------------- -! -! * Sea variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -! Sea Output variables -! -CHARACTER(LEN=8) :: CSEA_FWSU = ' ' ! zonal wind stress -CHARACTER(LEN=8) :: CSEA_FWSV = ' ' ! meridian wind stress -CHARACTER(LEN=8) :: CSEA_HEAT = ' ' ! Non solar net heat flux -CHARACTER(LEN=8) :: CSEA_SNET = ' ' ! Solar net heat flux -CHARACTER(LEN=8) :: CSEA_WIND = ' ' ! module of 10m wind speed -CHARACTER(LEN=8) :: CSEA_FWSM = ' ' ! module of wind stress -CHARACTER(LEN=8) :: CSEA_EVAP = ' ' ! Evaporation -CHARACTER(LEN=8) :: CSEA_RAIN = ' ' ! Rainfall -CHARACTER(LEN=8) :: CSEA_SNOW = ' ' ! Snowfall -CHARACTER(LEN=8) :: CSEA_EVPR = ' ' ! Evaporation - Preci. -CHARACTER(LEN=8) :: CSEA_WATF = ' ' ! Net freshwater flux -CHARACTER(LEN=8) :: CSEA_PRES = ' ' ! Surface pressure -! -! Sea-ice Output variables -! -CHARACTER(LEN=8) :: CSEAICE_HEAT = ' ' ! Sea-ice non solar net heat flux -CHARACTER(LEN=8) :: CSEAICE_SNET = ' ' ! Sea-ice solar net heat flux -CHARACTER(LEN=8) :: CSEAICE_EVAP = ' ' ! Sea-ice sublimation -! -! Sea Input variables -! -CHARACTER(LEN=8) :: CSEA_SST = ' ' ! Sea surface temperature -CHARACTER(LEN=8) :: CSEA_UCU = ' ' ! Sea u-current stress -CHARACTER(LEN=8) :: CSEA_VCU = ' ' ! Sea v-current stress -! -! Sea-ice Input variables -! -CHARACTER(LEN=8) :: CSEAICE_SIT = ' ' ! Sea-ice temperature -CHARACTER(LEN=8) :: CSEAICE_CVR = ' ' ! Sea-ice cover -CHARACTER(LEN=8) :: CSEAICE_ALB = ' ' ! Sea-ice albedo -! -!------------------------------------------------------------------------------- -! -! * Wave variables for Surfex - Oasis coupling -! -!------------------------------------------------------------------------------- -! -! Wave Output variables -! -CHARACTER(LEN=8) :: CWAVE_U10 = ' ' ! 10m u-wind speed -CHARACTER(LEN=8) :: CWAVE_V10 = ' ' ! 10m u-wind speed -! -! Wave Input variables -! -CHARACTER(LEN=8) :: CWAVE_CHA = ' ' ! Charnock coefficient -CHARACTER(LEN=8) :: CWAVE_UCU = ' ' ! Wave u-current velocity -CHARACTER(LEN=8) :: CWAVE_VCU = ' ' ! Wave v-current velocity -CHARACTER(LEN=8) :: CWAVE_HS = ' ' ! Significant wave height -CHARACTER(LEN=8) :: CWAVE_TP = ' ' ! Peak period -! -! Switch to add water into sea oasis mask -! -LOGICAL :: LWATER = .FALSE. -!------------------------------------------------------------------------------- -! -!* 1. NAMELISTS FOR LAND SURFACE FIELD -! ------------------------------------------------ -! -NAMELIST/NAM_SFX_LAND_CPL/XTSTEP_CPL_LAND, XFLOOD_LIM, & - CRUNOFF,CDRAIN,CCALVING,CWTD,CFWTD, & - CFFLOOD,CPIFLOOD,CSRCFLOOD -! -! -!* 2. NAMELISTS FOR LAKE FIELD -! --------------------------------------------------------------- -! -NAMELIST/NAM_SFX_LAKE_CPL/XTSTEP_CPL_LAKE, & - CLAKE_EVAP,CLAKE_RAIN,CLAKE_SNOW,CLAKE_WATF -! -! -!* 3. NAMELISTS FOR OCEANIC FIELD -! --------------------------------------------------------------- -! -NAMELIST/NAM_SFX_SEA_CPL/XTSTEP_CPL_SEA, LWATER, & - CSEA_FWSU,CSEA_FWSV,CSEA_HEAT,CSEA_SNET,CSEA_WIND, & - CSEA_FWSM,CSEA_EVAP,CSEA_RAIN,CSEA_SNOW,CSEA_EVPR, & - CSEA_WATF,CSEA_PRES,CSEAICE_HEAT,CSEAICE_SNET, & - CSEAICE_EVAP,CSEA_SST,CSEA_UCU,CSEA_VCU, & - CSEAICE_SIT,CSEAICE_CVR,CSEAICE_ALB -! -!* 4. NAMELISTS FOR WAVE FIELD -! --------------------------------------------------------------- -! -NAMELIST/NAM_SFX_WAVE_CPL/XTSTEP_CPL_WAVE, & - CWAVE_U10, CWAVE_V10, & - CWAVE_CHA, CWAVE_UCU, CWAVE_VCU, CWAVE_HS, CWAVE_TP -! -!------------------------------------------------------------------------------- -! -END MODULE MODN_SFX_OASIS diff --git a/src/OASIS/SURFEX/prep_hor_seaflux_field.F90 b/src/OASIS/SURFEX/prep_hor_seaflux_field.F90 deleted file mode 100644 index 9864abbd4..000000000 --- a/src/OASIS/SURFEX/prep_hor_seaflux_field.F90 +++ /dev/null @@ -1,231 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE PREP_HOR_SEAFLUX_FIELD (DTCO, UG, U, GCP, DTS, O, OR, KLAT, S, & - HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! ################################################################################# -! -!!**** *PREP_HOR_SEAFLUX_FIELD* - reads, interpolates and prepares a sea field -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! P. Le Moigne 10/2005, Phasage Arome -!! P. Le Moigne 09/2007, sst from clim -!! S. Senesi 09/2013, extends to fields of SSS and SIC -!! P. Marguinaud10/2014, Support for a 2-part PREP -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!!------------------------------------------------------------------ -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t -! -USE MODD_DATA_SEAFLUX_n, ONLY : DATA_SEAFLUX_t -USE MODD_OCEAN_n, ONLY : OCEAN_t -USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_TYPE_DATE_SURF, ONLY : DATE_TIME -USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC -USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, XLAT_OUT, XLON_OUT, & - XX_OUT, XY_OUT, CMASK -! -USE MODD_GRID_GRIB, ONLY : CINMODEL -! -USE MODE_PREP_CTL, ONLY : PREP_CTL, PREP_CTL_INT_PART2, PREP_CTL_INT_PART4 -! -USE MODI_PREP_GRIB_GRID -USE MODI_READ_PREP_SEAFLUX_CONF -USE MODI_PREP_SEAFLUX_GRIB -USE MODI_PREP_SEAFLUX_UNIF -USE MODI_PREP_SEAFLUX_BUFFER -USE MODI_PREP_SEAFLUX_NETCDF -USE MODI_HOR_INTERPOL -USE MODI_GET_LUOUT -USE MODI_PREP_SEAFLUX_EXTERN -USE MODI_PREP_SST_INIT -! -USE MODI_PREP_HOR_OCEAN_FIELDS -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -USE MODI_ABOR1_SFX -! -IMPLICIT NONE -! -#ifdef SFX_MPI -INCLUDE "mpif.h" -#endif -! -!* 0.1 declarations of arguments -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP -! -TYPE(DATA_SEAFLUX_t), INTENT(INOUT) :: DTS -TYPE(OCEAN_t), INTENT(INOUT) :: O -TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR -INTEGER, INTENT(IN) :: KLAT -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE (PREP_CTL), INTENT(INOUT) :: YDCTL -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes - CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field - CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! name of the Atmospheric file - CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! type of the Atmospheric file - CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the Atmospheric file - CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! type of the Atmospheric file -! -!* 0.2 declarations of local variables -! - CHARACTER(LEN=6) :: YFILETYPE ! type of input file - CHARACTER(LEN=28) :: YFILE ! name of file - CHARACTER(LEN=6) :: YFILEPGDTYPE ! type of input file - CHARACTER(LEN=28) :: YFILEPGD ! name of file -REAL, POINTER, DIMENSION(:,:) :: ZFIELDIN ! field to interpolate horizontally -REAL, POINTER, DIMENSION(:,:) :: ZFIELDOUT ! field interpolated horizontally -TYPE (DATE_TIME) :: TZTIME_GRIB ! current date and time -INTEGER :: ILUOUT ! output listing logical unit -INTEGER :: INFOMPI, INL -! -LOGICAL :: GUNIF ! flag for prescribed uniform field - CHARACTER (LEN=28) :: CLFILE -INTEGER :: IRESP - CHARACTER (LEN=100) :: CLCOMMENT - CHARACTER (LEN=6) :: CLSCHEME -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------------- -! -! -!* 1. Reading of input file name and type -! -IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',0,ZHOOK_HANDLE) - CALL GET_LUOUT(HPROGRAM,ILUOUT) -! - CALL READ_PREP_SEAFLUX_CONF(O%LMERCATOR, & - HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,& - HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,ILUOUT,GUNIF) -! - CMASK = 'SEA' -! -NULLIFY (ZFIELDIN, ZFIELDOUT) -! -IF (YDCTL%LPART1) THEN -! -!--------------------------------------------------------------------- ---------------- -! -!* 2. Reading of input configuration (Grid and interpolation type) -! - IF (GUNIF) THEN - CALL PREP_SEAFLUX_UNIF(ILUOUT,HSURF,ZFIELDIN) - ELSE IF (YFILETYPE=='GRIB ') THEN - CALL PREP_GRIB_GRID(YFILE,ILUOUT,CINMODEL,CINGRID_TYPE,CINTERP_TYPE,TZTIME_GRIB) - IF (NRANK==NPIO) CALL PREP_SEAFLUX_GRIB(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN) - ELSE IF (YFILETYPE=='MESONH' .OR. YFILETYPE=='ASCII ' .OR. YFILETYPE=='LFI '& - .OR. YFILETYPE=='FA '.OR. YFILETYPE=='AROME '.OR.YFILETYPE=='NC ') THEN - CALL PREP_SEAFLUX_EXTERN(GCP,HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,ILUOUT,ZFIELDIN) - ELSE IF (YFILETYPE=='BUFFER') THEN - CALL PREP_SEAFLUX_BUFFER(HPROGRAM,HSURF,ILUOUT,ZFIELDIN) - ELSE IF (YFILETYPE=='NETCDF') THEN - CALL PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN) - ELSE - CALL ABOR1_SFX('PREP_HOR_SEAFLUX_FIELD: data file type not supported : '//YFILETYPE) - END IF -! -ENDIF -! -! -!* 4. Horizontal interpolation -! - CALL PREP_CTL_INT_PART2 (YDCTL, HSURF, 'SEA', CMASK, ZFIELDIN) -! -IF (YDCTL%LPART3) THEN -! - IF (NRANK==NPIO) THEN - INL = SIZE(ZFIELDIN,2) - ELSEIF (.NOT.ASSOCIATED(ZFIELDIN)) THEN - ALLOCATE(ZFIELDIN(0,0)) - ENDIF -! - IF (NPROC>1) THEN -#ifdef SFX_MPI - CALL MPI_BCAST(INL,KIND(INL)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) -#endif - ENDIF - ALLOCATE(ZFIELDOUT(KLAT,INL)) -! - CALL HOR_INTERPOL(DTCO, U, GCP, ILUOUT,ZFIELDIN,ZFIELDOUT) -! -ENDIF -! - CALL PREP_CTL_INT_PART4 (YDCTL, HSURF, 'SEA', CMASK, ZFIELDIN, ZFIELDOUT) -! -IF (YDCTL%LPART5) THEN -! -!* 5. Return to historical variable -! - SELECT CASE (HSURF) - CASE('ZS ') - ALLOCATE(XZS_LS(SIZE(ZFIELDOUT,1))) - XZS_LS(:) = ZFIELDOUT(:,1) - CASE('SST ') - ALLOCATE(S%XSST(SIZE(ZFIELDOUT,1))) - S%XSST(:) = ZFIELDOUT(:,1) - IF (DTS%LSST_DATA) THEN - ! XSST is derived from array XDATA_SST from MODD_DATA_SEAFLUX, with time interpolation - CALL PREP_SST_INIT(DTS, S%TTIME, S%JSX, S%XSST) - END IF - IF (O%LMERCATOR) THEN - ! Preparing input for ocean 1D model - CALL PREP_HOR_OCEAN_FIELDS(DTCO, UG, U, GCP, O, OR, KLAT, S%XSEABATHY, & - HPROGRAM,HSURF,YFILE,YFILETYPE,ILUOUT,GUNIF) - ENDIF - CASE('SSS ') - ALLOCATE(S%XSSS(SIZE(ZFIELDOUT,1))) - S%XSSS(:) = ZFIELDOUT(:,1) - CASE('SIC ') - ALLOCATE(S%XSIC(SIZE(ZFIELDOUT,1))) - S%XSIC(:) = ZFIELDOUT(:,1) - CASE('HS ') - ALLOCATE(S%XHS(SIZE(ZFIELDOUT,1))) - S%XHS(:) = ZFIELDOUT(:,1) - CASE('TP ') - ALLOCATE(S%XTP(SIZE(ZFIELDOUT,1))) - S%XTP(:) = ZFIELDOUT(:,1) - END SELECT -! -ENDIF -! -!------------------------------------------------------------------------------------- -! -!* 6. Deallocations -! -IF (ASSOCIATED (ZFIELDIN)) DEALLOCATE(ZFIELDIN ) -IF (ASSOCIATED (ZFIELDOUT)) DEALLOCATE(ZFIELDOUT) -IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! -END SUBROUTINE PREP_HOR_SEAFLUX_FIELD diff --git a/src/OASIS/SURFEX/prep_seaflux.F90 b/src/OASIS/SURFEX/prep_seaflux.F90 deleted file mode 100644 index b136269e8..000000000 --- a/src/OASIS/SURFEX/prep_seaflux.F90 +++ /dev/null @@ -1,251 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE PREP_SEAFLUX (DTCO, UG, U, GCP, SG, SB, S, DTS, O, OR, & - HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! ################################################################################# -! -!!**** *PREP_SEAFLUX* - prepares variables for SEAFLUX scheme -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! S. Riette 06/2009 PREP_SEAFLUX_SBL has no more argument -!! Modified 07/2012, P. Le Moigne : CMO1D phasing -!! Modified 01/2014, S. Senesi : introduce sea-ice model -!! Modified 01/2015, R. Séférian : introduce ocean surface albedo -!! P. Marguinaud10/2014, Support for a 2-part PREP -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!!------------------------------------------------------------------ -! -USE MODD_SFX_GRID_n, ONLY : GRID_t -USE MODD_CANOPY_n, ONLY : CANOPY_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_DATA_SEAFLUX_n, ONLY : DATA_SEAFLUX_t -USE MODD_OCEAN_n, ONLY : OCEAN_t -USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t -! -USE MODI_PREP_HOR_SEAFLUX_FIELD -USE MODI_PREP_VER_SEAFLUX -USE MODI_PREP_OUTPUT_GRID -USE MODI_PREP_SBL -USE MODI_PREP_SEAICE -USE MODI_GET_LUOUT -! -USE MODN_PREP_SEAFLUX -USE MODD_READ_NAMELIST, ONLY : LNAM_READ -USE MODD_PREP, ONLY : XZS_LS -USE MODD_SURF_ATM, ONLY : LVERTSHIFT -! -USE MODE_PREP_CTL, ONLY : PREP_CTL -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -USE MODI_CLEAN_PREP_OUTPUT_GRID -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP -! -TYPE(GRID_t), INTENT(INOUT) :: SG -TYPE(CANOPY_t), INTENT(INOUT) :: SB -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(DATA_SEAFLUX_t), INTENT(INOUT) :: DTS -TYPE(OCEAN_t), INTENT(INOUT) :: O -TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR -TYPE (PREP_CTL), INTENT(INOUT) :: YDCTL -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes - CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! name of the Atmospheric file - CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! type of the Atmospheric file - CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the Atmospheric file - CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! type of the Atmospheric file -! -!* 0.2 declarations of local variables -! -INTEGER :: JMTH,INMTH -INTEGER :: ILUOUT -LOGICAL :: GFOUND ! Return code when searching namelist -INTEGER :: ILUNAM ! logical unit of namelist file -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -!------------------------------------------------------------------------------------- -! -!* 0. Default of configuration -! -! -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX',0,ZHOOK_HANDLE) - CALL GET_LUOUT(HPROGRAM,ILUOUT) -! - CALL PREP_OUTPUT_GRID(UG%G, SG, U%NSIZE_FULL, ILUOUT) -! -!------------------------------------------------------------------------------------- -! -!* 1. Read namelist -! -S%LSBL = LSEA_SBL -! -O%LMERCATOR = LOCEAN_MERCATOR -O%LCURRENT = LOCEAN_CURRENT -! -! Relaxation-forcing parameters -OR%XTAU_REL = XTIME_REL -OR%XQCORR = XCORFLX -! -OR%LREL_CUR = LCUR_REL -OR%LREL_TS = LTS_REL -OR%LFLUX_NULL = LZERO_FLUX -OR%LFLX_CORR = LCORR_FLUX -OR%LDIAPYCNAL = LDIAPYC -! -!------------------------------------------------------------------------------------- -! -!* 2. Reading and horizontal interpolations -! -! -!* 2.0 Large scale orography -! -CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, & - HPROGRAM,'ZS ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! -!* 2.1.1 Temperature -! -CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, & - HPROGRAM,'SST ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! -!* 2.1.2 Salinity -! - -CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, & - HPROGRAM,'SSS ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! -!* 2.1.3 Sea-ice -! -IF (CSEAICE_SCHEME /= 'NONE ') THEN - CALL PREP_SEAICE(UG, DTCO, DTS, O, OR, SIZE(SG%XLAT), S, U, GCP, & - HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -ENDIF -! -! -!* 2.2 Significant height and peak period -! - CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, & - HPROGRAM,'HS ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! - CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, & - HPROGRAM,'TP ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL) -! -! - CALL CLEAN_PREP_OUTPUT_GRID - -IF (YDCTL%LPART6) THEN -! -!* 2.2 Roughness -! - ALLOCATE(S%XZ0(SIZE(S%XSST))) - S%XZ0 = 0.001 -! - ALLOCATE(S%XZ0H(SIZE(S%XSST))) - S%XZ0H = S%XZ0 -! -!* 2.3 Ocean Surface Albedo -! - IF(S%CSEA_ALB=='RS14')THEN - ALLOCATE(S%XDIR_ALB(SIZE(S%XSST))) - ALLOCATE(S%XSCA_ALB(SIZE(S%XSST))) - S%XDIR_ALB = 0.065 - S%XSCA_ALB = 0.065 - ENDIF -! -!------------------------------------------------------------------------------------- -! -!* 3. Vertical interpolations of all variables -! - IF(LVERTSHIFT)THEN - CALL PREP_VER_SEAFLUX(S) - ENDIF -! - DEALLOCATE(XZS_LS) -! -!------------------------------------------------------------------------------------- -! -!* 4. Preparation of optional interpolation of monthly sst -! - S%LINTERPOL_SST=.FALSE. - IF(TRIM(S%CINTERPOL_SST)/='NONE')THEN -! - S%LINTERPOL_SST=.TRUE. -! -! Precedent, Current, Next, and Second-next Monthly SST - INMTH=4 -! - ALLOCATE(S%XSST_MTH(SIZE(S%XSST),INMTH)) - DO JMTH=1,INMTH - S%XSST_MTH(:,JMTH)=S%XSST(:) - ENDDO -! - ENDIF -! -!------------------------------------------------------------------------------------- -! -! -!* 5. Optional preparation of interpolation of monthly Sea Surface salinity -! - S%LINTERPOL_SSS=.FALSE. - IF(TRIM(S%CINTERPOL_SSS)/='NONE')THEN -! - S%LINTERPOL_SSS=.TRUE. - ! - ! Precedent, Current, Next, and Second-next Monthly SSS - INMTH=4 - ! - ALLOCATE(S%XSSS_MTH(SIZE(S%XSSS),INMTH)) - DO JMTH=1,INMTH - S%XSSS_MTH(:,JMTH)=S%XSSS(:) - ENDDO - ! - ENDIF -! -!------------------------------------------------------------------------------------- -! -!* 6. Preparation of SBL air variables -! -! - IF (S%LSBL) CALL PREP_SBL(SG%NDIM, SB) -! -ENDIF -!------------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------------- -! -END SUBROUTINE PREP_SEAFLUX diff --git a/src/OASIS/SURFEX/prep_seaflux_netcdf.F90 b/src/OASIS/SURFEX/prep_seaflux_netcdf.F90 deleted file mode 100644 index 3fdd63de8..000000000 --- a/src/OASIS/SURFEX/prep_seaflux_netcdf.F90 +++ /dev/null @@ -1,154 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD) -! ################################################################################# -! -!!**** *PREP_SEAFLUX_NETCDF* - prepares SEAFLUX fields from oceanic analyses in NETCDF -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! C. Lebeaupin Brossier -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2008 -!! Modified 09/2013 : S. Senesi : extends to SSS and SIC fields -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!!------------------------------------------------------------------ -! -USE MODE_READ_NETCDF_MERCATOR -! -!USE MODD_TYPE_DATE_SURF -! -USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC -USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE -USE MODD_GRID_LATLONREGUL, ONLY : NILENGTH,NINDEPTH -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -#ifdef SFX_MPI -INCLUDE "mpif.h" -#endif -! -!* 0.1 declarations of arguments -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes - CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field - CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of file -INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing -REAL,DIMENSION(:,:), POINTER :: PFIELD ! field to interpolate horizontally -! -!* 0.2 declarations of local variables -! -!TYPE (DATE_TIME) :: TZTIME_GRIB ! current date and time -!CHARACTER(LEN=6) :: YINMODEL ! model from which GRIB file originates -REAL, DIMENSION(:), POINTER :: ZFIELD ! field read - CHARACTER(LEN=28) :: YNCVAR -INTEGER :: INFOMPI -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------------- -! -!* 1. Grid type -! --------- -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_NETCDF',0,ZHOOK_HANDLE) -CINGRID_TYPE='LATLON ' -! -!* 2. Reading of field -! ---------------- -!----------------- -SELECT CASE(HSURF) -!----------------- -! -!* 2.1 Orography -! --------- -! - CASE('ZS ') - YNCVAR='topo' - CALL PREP_NETCDF_GRID(HFILE,YNCVAR) - IF (NRANK==NPIO) THEN - CALL READ_NETCDF_ZS_SEA(HFILE,YNCVAR,ZFIELD) - ALLOCATE(PFIELD(MAX(1,NILENGTH),1)) - PFIELD(:,1) = ZFIELD(:) - DEALLOCATE(ZFIELD) - ELSE - ALLOCATE(PFIELD(0,0)) - ENDIF -! -! -!* 2.2 Temperature profiles -! -------------------- -! - CASE('SST ','SSS ','SIC ') - IF ( HSURF == 'SST ') THEN - YNCVAR='temperature' - ELSE IF ( HSURF == 'SSS ') THEN - YNCVAR='sss' - ELSE IF ( HSURF == 'SIC ') THEN - YNCVAR='sic' - END IF - CALL PREP_NETCDF_GRID(HFILE,YNCVAR) - IF (NRANK==NPIO) THEN - CALL READ_NETCDF_SST(HFILE,YNCVAR,ZFIELD) - ALLOCATE(PFIELD(MAX(1,NILENGTH),1)) - PFIELD(:,1) = ZFIELD(:) - DEALLOCATE(ZFIELD) - ENDIF -! -! -!* 2.3 Wave parameters -! -------------------- -! - CASE('HS ') - YNCVAR='significant_h' - CALL PREP_NETCDF_GRID(HFILE,YNCVAR) - CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD) - ALLOCATE(PFIELD(MAX(1,NILENGTH),1)) - PFIELD(:,1) = ZFIELD(:) - DEALLOCATE(ZFIELD) -! - CASE('TP ') - YNCVAR='peak_period' - CALL PREP_NETCDF_GRID(HFILE,YNCVAR) - CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD) - ALLOCATE(PFIELD(MAX(1,NILENGTH),1)) - PFIELD(:,1) = ZFIELD(:) - DEALLOCATE(ZFIELD) -! -END SELECT -! -IF (NPROC>1) THEN -#ifdef SFX_MPI - CALL MPI_BCAST(CINTERP_TYPE,LEN(CINTERP_TYPE),MPI_CHARACTER,NPIO,NCOMM,INFOMPI) -#endif - IF (TRIM(CINTERP_TYPE)=="UNIF") THEN - IF (NRANK/=NPIO) ALLOCATE(PFIELD(1,1)) -#ifdef SFX_MPI - CALL MPI_BCAST(PFIELD(1:1,1:1),KIND(PFIELD)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) -#endif - ELSEIF (NRANK/=NPIO) THEN - ALLOCATE(PFIELD(0,0)) - ENDIF -ENDIF -! -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_NETCDF',1,ZHOOK_HANDLE) -!------------------------------------------------------------------------------------- -END SUBROUTINE PREP_SEAFLUX_NETCDF diff --git a/src/OASIS/SURFEX/prep_seaflux_unif.F90 b/src/OASIS/SURFEX/prep_seaflux_unif.F90 deleted file mode 100644 index 7af8afcc8..000000000 --- a/src/OASIS/SURFEX/prep_seaflux_unif.F90 +++ /dev/null @@ -1,103 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE PREP_SEAFLUX_UNIF(KLUOUT,HSURF,PFIELD) -! ################################################################################# -! -!!**** *PREP_SEAFLUX_UNIF* - prepares SEAFLUX field from prescribed values -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! Modified 09/2013 : S. Senesi : extends to SSS and SIC variables -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!!------------------------------------------------------------------ -! - -! -USE MODD_PREP, ONLY : CINTERP_TYPE -USE MODD_PREP_SEAFLUX, ONLY : XSST_UNIF, XSSS_UNIF, XSIC_UNIF -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -INTEGER, INTENT(IN) :: KLUOUT ! output listing logical unit - CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field -REAL, POINTER, DIMENSION(:,:) :: PFIELD ! field to interpolate horizontally -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!* 0.2 declarations of local variables -! -! -!------------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_UNIF',0,ZHOOK_HANDLE) -SELECT CASE(HSURF) -! -!* 3.0 Orography -! - CASE('ZS ') - ALLOCATE(PFIELD(1,1)) - PFIELD = 0. -! -!* 3.1 Sea surface temperature -! - CASE('SST ') - ALLOCATE(PFIELD(1,1)) - PFIELD = XSST_UNIF -! -!* 3.2 Sea surface salinity -! - CASE('SSS ') - ALLOCATE(PFIELD(1,1)) - PFIELD = XSSS_UNIF -! -! -!* 3.3 Sea Ice Cover -! - CASE('SIC ') - ALLOCATE(PFIELD(1,1)) - PFIELD = XSIC_UNIF -! -!* 3.4 Wave parameters -! - CASE('HS ') - ALLOCATE(PFIELD(1,1)) - PFIELD = 1. -! - CASE('TP ') - ALLOCATE(PFIELD(1,1)) - PFIELD = 8. -END SELECT -! -!* 4. Interpolation method -! -------------------- -! -CINTERP_TYPE='UNIF ' -IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_UNIF',1,ZHOOK_HANDLE) -! -! -!------------------------------------------------------------------------------------- -END SUBROUTINE PREP_SEAFLUX_UNIF diff --git a/src/OASIS/SURFEX/put_sfx_sea.F90 b/src/OASIS/SURFEX/put_sfx_sea.F90 deleted file mode 100644 index 36d61886a..000000000 --- a/src/OASIS/SURFEX/put_sfx_sea.F90 +++ /dev/null @@ -1,290 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE PUT_SFX_SEA (S, U, W, KLUOUT,OCPL_SEAICE,OWATER,PSEA_SST,PSEA_UCU, & - PSEA_VCU,PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB ) -! #################################################### -! -!!**** *PUT_SFX_SEA* - routine to put some variables from -!! an oceanic general circulation model -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 08/2009 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_WATFLUX_n, ONLY : WATFLUX_t -! -USE MODD_SFX_OASIS -USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF -USE MODD_CSTS, ONLY : XTT, XTTS, XICEC -! -! -USE MODI_PACK_SAME_RANK -USE MODI_ABOR1_SFX -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(WATFLUX_t), INTENT(INOUT) :: W -! -INTEGER, INTENT(IN) :: KLUOUT -LOGICAL, INTENT(IN) :: OCPL_SEAICE -LOGICAL, INTENT(IN) :: OWATER -! -REAL, DIMENSION(:), INTENT(IN) :: PSEA_SST -REAL, DIMENSION(:), INTENT(IN) :: PSEA_UCU -REAL, DIMENSION(:), INTENT(IN) :: PSEA_VCU -REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_SIT -REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_CVR -REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_ALB -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -! -CHARACTER(LEN=50) :: YCOMMENT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA',0,ZHOOK_HANDLE) -! -!* 1.0 Initialization -! -------------- -! -! -!* 2.0 Get variable over sea -! --------------------- -! -IF(U%NSIZE_SEA>0)THEN -! - CALL TREAT_SEA(U%NSIZE_SEA) -! -ENDIF -! -!* 3.0 Get variable over water without flake -! ------------------------------------- -! -IF(OWATER.AND.U%NSIZE_WATER>0)THEN -! - CALL TREAT_WATER(U%NSIZE_WATER) -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE TREAT_SEA(KLU) -! -USE MODI_PACK_SAME_RANK -! -IMPLICIT NONE -! -INTEGER, INTENT(IN) :: KLU -! -REAL, DIMENSION(KLU) :: ZSST ! sea surface temperature -REAL, DIMENSION(KLU) :: ZICE_FRAC! ice fraction -REAL :: ZTMIN ! Minimum temperature over this proc -REAL :: ZTMAX ! Maximum temperature over this proc -CHARACTER(LEN=50) :: YCOMMENT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_SEA',0,ZHOOK_HANDLE) -! -IF(NSEA_SST_ID/=NUNDEF)THEN - YCOMMENT='Sea surface temperature' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_SST(:),ZSST(:)) - WHERE (ZSST(:)/=0.0) S%XSST(:)=ZSST(:) - CALL CHECK_SEA(YCOMMENT,S%XSST(:)) - ! - ZTMIN=MINVAL(S%XSST(:)) - ZTMAX=MAXVAL(S%XSST(:)) - ! - IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN - WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(KLUOUT,*)'SST from ocean model not define or not physic' - WRITE(KLUOUT,*)'SST MIN =',ZTMIN,'SST MAX =',ZTMAX - WRITE(KLUOUT,*)'There is certainly a problem between ' - WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask ' - WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic') - ENDIF -ENDIF -! -IF(NSEA_UCU_ID/=NUNDEF)THEN - YCOMMENT='Sea u-current stress' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_UCU(:),S%XUMER(:)) - CALL CHECK_SEA(YCOMMENT,S%XUMER(:)) -ENDIF -! -IF(NSEA_VCU_ID/=NUNDEF)THEN - YCOMMENT='Sea v-current stress' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_VCU(:),S%XVMER(:)) - CALL CHECK_SEA(YCOMMENT,S%XVMER(:)) -ENDIF -! -IF(OCPL_SEAICE)THEN -! - YCOMMENT='Sea-ice Temperature' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_SIT(:),S%XTICE(:)) - CALL CHECK_SEA(YCOMMENT,S%XTICE(:)) -! - YCOMMENT='Sea-ice cover' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_CVR(:),ZICE_FRAC(:)) - CALL CHECK_SEA(YCOMMENT,ZICE_FRAC(:)) -! - WHERE(ZICE_FRAC(:)>=XICEC) - S%XSST(:) = MIN(S%XSST(:),XTTS-0.01) - ELSEWHERE - S%XSST(:) = MAX(S%XSST(:),XTTS) - ENDWHERE -! - YCOMMENT='Sea-ice albedo' - CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_ALB(:),S%XICE_ALB(:)) - CALL CHECK_SEA(YCOMMENT,S%XICE_ALB(:)) -! -! Fill the table with sea ice albedo where temperature is lower than the -! freezing point - WHERE(S%XSST(:) < XTTS) - S%XDIR_ALB(:)=S%XICE_ALB(:) - S%XSCA_ALB(:)=S%XICE_ALB(:) - ENDWHERE -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_SEA',1,ZHOOK_HANDLE) -! -END SUBROUTINE TREAT_SEA -! -!------------------------------------------------------------------------------- -! -SUBROUTINE TREAT_WATER(KLU) -! -! -IMPLICIT NONE -! -INTEGER, INTENT(IN) :: KLU -! -REAL, DIMENSION(KLU) :: ZICE_FRAC! ice fraction -REAL :: ZTMIN ! Minimum temperature over this proc -REAL :: ZTMAX ! Maximum temperature over this proc -CHARACTER(LEN=50) :: YCOMMENT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_WATER',0,ZHOOK_HANDLE) -! -YCOMMENT='Water surface temperature' -CALL PACK_SAME_RANK(U%NR_WATER(:),PSEA_SST(:),W%XTS(:)) -CALL CHECK_SEA(YCOMMENT,W%XTS(:)) -! -ZTMIN=MINVAL(W%XTS(:)) -ZTMAX=MAXVAL(W%XTS(:)) -! -IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN - WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(KLUOUT,*)'TS_WATER from ocean model not define or not physic' - WRITE(KLUOUT,*)'TS_WATER MIN =',ZTMIN,'TS_WATER MAX =',ZTMAX - WRITE(KLUOUT,*)'There is certainly a problem between ' - WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask ' - WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic') -ENDIF -! -YCOMMENT='Water-ice Temperature' -CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_SIT(:),W%XTICE(:)) -CALL CHECK_SEA(YCOMMENT,W%XTICE(:)) -! -YCOMMENT='Water-ice cover' -CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_CVR(:),ZICE_FRAC(:)) -CALL CHECK_SEA(YCOMMENT,ZICE_FRAC(:)) -! -WHERE(ZICE_FRAC(:)>=XICEC) - W%XTS(:) = MIN(W%XTS(:),XTT-0.01) -ELSEWHERE - W%XTS(:) = MAX(W%XTS(:),XTT) -ENDWHERE -! -YCOMMENT='Water-ice albedo' -CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_ALB(:),W%XICE_ALB(:)) -CALL CHECK_SEA(YCOMMENT,W%XICE_ALB(:)) -! -! Fill the table with sea ice albedo where temperature is lower than the freezing -! point -WHERE(W%XTS(:) < XTT) - W%XDIR_ALB(:)=W%XICE_ALB(:) - W%XSCA_ALB(:)=W%XICE_ALB(:) -ENDWHERE -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_WATER',1,ZHOOK_HANDLE) -! -END SUBROUTINE TREAT_WATER -! -!------------------------------------------------------------------------------- -! -SUBROUTINE CHECK_SEA(HCOMMENT,PFIELD) -! -IMPLICIT NONE -! -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT -REAL, DIMENSION(:), INTENT(IN) :: PFIELD -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:CHECK_SEA',0,ZHOOK_HANDLE) -! -IF(ANY(PFIELD(:)>=XUNDEF))THEN - WRITE(KLUOUT,*)'PUT_SFX_SEA: problem after get '//TRIM(HCOMMENT)//' from OASIS' - WRITE(KLUOUT,*)'PUT_SFX_SEA: some points not defined = ',COUNT(PFIELD(:)>=XUNDEF) - CALL ABOR1_SFX('PUT_SFX_SEA: problem after get '//TRIM(HCOMMENT)//' from OASIS') -ENDIF -! -IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:CHECK_SEA',1,ZHOOK_HANDLE) -! -END SUBROUTINE CHECK_SEA -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE PUT_SFX_SEA diff --git a/src/OASIS/SURFEX/put_sfxcpln.F90 b/src/OASIS/SURFEX/put_sfxcpln.F90 deleted file mode 100644 index 99066282d..000000000 --- a/src/OASIS/SURFEX/put_sfxcpln.F90 +++ /dev/null @@ -1,186 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, & - HPROGRAM,KI,KSW,PSW_BANDS,PZENITH, & - PLAND_WTD,PLAND_FWTD,PLAND_FFLOOD, & - PLAND_PIFLOOD,PSEA_SST,PSEA_UCU, & - PSEA_VCU,PSEAICE_SIT,PSEAICE_CVR, & - PSEAICE_ALB,PTSRAD, & - PDIR_ALB,PSCA_ALB,PEMIS,PTSURF, & - PWAVE_CHA,PWAVE_UCU,PWAVE_VCU, & - PWAVE_HS,PWAVE_TP ) -! ################################################################################################# -! -!!**** *PUT_SFXCPL_n* - routine to modify some variables in surfex from information coming -! from an ocean and/or a river routing model (but already on Surfex grid) -! -! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 08/2009 -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_FLAKE_n, ONLY : FLAKE_t -USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_WATFLUX_n, ONLY : WATFLUX_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODN_SFX_OASIS, ONLY : LWATER -USE MODD_SFX_OASIS, ONLY : LCPL_SEA, LCPL_SEAICE, & - LCPL_LAND, LCPL_GW, & - LCPL_FLOOD, LCPL_WAVE -! -USE MODI_GET_LUOUT -! -USE MODI_ABOR1_SFX -USE MODI_PUT_SFX_LAND -USE MODI_PUT_SFX_SEA -USE MODI_PUT_SFX_WAVE -USE MODI_UPDATE_ESM_SURF_ATM_n -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(FLAKE_t), INTENT(INOUT) :: F -TYPE(ISBA_MODEL_t), INTENT(INOUT) :: IM -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(WATFLUX_t), INTENT(INOUT) :: W -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM -INTEGER, INTENT(IN) :: KI ! number of points -INTEGER, INTENT(IN) :: KSW ! number of bands -! -REAL, DIMENSION(KI), INTENT(IN) :: PZENITH -REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m) -! -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_WTD ! Land water table depth (m) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_FWTD ! Land grid-cell fraction of water table rise (-) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_FFLOOD ! Land Floodplains fraction (-) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_PIFLOOD ! Land Potential flood infiltration (kg/m2) -! -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SST ! Sea surface temperature (K) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_UCU ! Sea u-current stress (Pa) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_VCU ! Sea v-current stress (Pa) -! -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_SIT ! Sea-ice Temperature (K) -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_CVR ! Sea-ice cover (-) -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_ALB ! Sea-ice albedo (-) -! -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_CHA ! Charnock coefficient (-) -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_UCU ! u-current velocity (m/s) -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_VCU ! v-current velocity (m/s) -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_HS ! Significant wave height (m) -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_TP ! Peak period (s) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! Total radiative temperature see by the atmosphere -REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! Total surface temperature see by the atmosphere -REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! Total emissivity see by the atmosphere -REAL, DIMENSION(KI,KSW), INTENT(OUT) :: PDIR_ALB ! Total direct albedo see by the atmosphere -REAL, DIMENSION(KI,KSW), INTENT(OUT) :: PSCA_ALB ! Total diffus albedo see by the atmosphere -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -! -INTEGER :: ILU, ILUOUT -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('PUT_SFXCL_N',0,ZHOOK_HANDLE) -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -!------------------------------------------------------------------------------- -! -! Global argument -! -IF(KI/=U%NSIZE_FULL)THEN - WRITE(ILUOUT,*) 'size of field from the coupler :', KI - WRITE(ILUOUT,*) 'size of field in SURFEX :', U%NSIZE_FULL - CALL ABOR1_SFX('PUT_SFXCPL_N: VECTOR SIZE NOT CORRECT FOR COUPLING') -ENDIF -! -!------------------------------------------------------------------------------- -! Put variable over land tile -!------------------------------------------------------------------------------- -! -IF(LCPL_LAND)THEN - CALL PUT_SFX_LAND(IM%O, IM%S, IM%K, IM%NK, IM%NP, U, ILUOUT, LCPL_GW, LCPL_FLOOD, & - PLAND_WTD(:), PLAND_FWTD(:),PLAND_FFLOOD(:),PLAND_PIFLOOD(:)) -ENDIF -! -!------------------------------------------------------------------------------- -! Put variable over sea and/or water tile -!------------------------------------------------------------------------------- -! -IF(LCPL_SEA)THEN -! - CALL PUT_SFX_SEA(S, U, W, ILUOUT,LCPL_SEAICE,LWATER,PSEA_SST(:),PSEA_UCU(:), & - PSEA_VCU(:),PSEAICE_SIT(:),PSEAICE_CVR(:),PSEAICE_ALB(:) ) -! -ENDIF -! -!------------------------------------------------------------------------------- -! Put variable over sea and/or water tile for waves -!------------------------------------------------------------------------------- -! -IF(LCPL_WAVE)THEN -! - CALL PUT_SFX_WAVE(S, U, & - ILUOUT,PWAVE_CHA(:),PWAVE_UCU(:),PWAVE_VCU(:),PWAVE_HS(:),PWAVE_TP(:) ) -! -ENDIF -! -!------------------------------------------------------------------------------- -! Update radiative properties at time t+1 for radiative scheme -!------------------------------------------------------------------------------- -! -IF(LCPL_SEA.OR.LCPL_FLOOD)THEN - CALL UPDATE_ESM_SURF_ATM_n(F, IM, S, U, W, HPROGRAM, KI, KSW, PZENITH, PSW_BANDS, & - PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF ) -ENDIF -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('PUT_SFXCL_N',1,ZHOOK_HANDLE) -! -! -END SUBROUTINE PUT_SFXCPL_n diff --git a/src/OASIS/SURFEX/read_lcover.F90 b/src/OASIS/SURFEX/read_lcover.F90 deleted file mode 100644 index 0d60f0e61..000000000 --- a/src/OASIS/SURFEX/read_lcover.F90 +++ /dev/null @@ -1,119 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE READ_LCOVER (HPROGRAM,OCOVER) -! ################################ -! -!!**** *READ_LCOVER* - routine to read a file for -!! physiographic data file of model _n -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to initialise the list of covers -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2008 -!! M. Moge 02/2015 parallelization for mésonh -!! J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -#ifdef MNH_PARALLEL -USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD -#endif -! -USE MODD_DATA_COVER_PAR, ONLY : JPCOVER -! -USE MODI_READ_SURF -USE MODI_OLD_NAME -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -#ifdef MNH_PARALLEL -#ifndef NOMPI -INCLUDE "mpif.h" -#endif -#endif -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program -LOGICAL, DIMENSION(JPCOVER) :: OCOVER ! list of covers -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -LOGICAL, DIMENSION(:), ALLOCATABLE :: GCOVER ! cover list in the file - CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read - CHARACTER(LEN=LEN_HREC) :: YRECFMOLD ! Name of the article to be read -INTEGER :: IVERSION ! version of surfex file being read -INTEGER :: IRESP ! Error code after redding -#ifdef MNH_PARALLEL -INTEGER :: IINFO -#endif -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -! -!* ascendant compatibility -IF (LHOOK) CALL DR_HOOK('READ_LCOVER',0,ZHOOK_HANDLE) -YRECFM='VERSION' - CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP) -IF (IVERSION<=3) THEN - ALLOCATE(GCOVER(255)) -ELSE - ALLOCATE(GCOVER(JPCOVER)) -END IF - YRECFMOLD='COVER_LIST' - CALL OLD_NAME(HPROGRAM,YRECFMOLD,YRECFM) - CALL READ_SURF(HPROGRAM,YRECFM,GCOVER(:),IRESP,HDIR='-') -! -OCOVER=.FALSE. -OCOVER(:SIZE(GCOVER))=GCOVER(:) -! -#ifdef MNH_PARALLEL -#ifndef NOMPI -CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO) -#else -CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO) -#endif -#endif -! -DEALLOCATE(GCOVER) -IF (LHOOK) CALL DR_HOOK('READ_LCOVER',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE READ_LCOVER diff --git a/src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 b/src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 deleted file mode 100644 index 0f294e65a..000000000 --- a/src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 +++ /dev/null @@ -1,64 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE READ_NAM_PREP_SEAFLUX_n(HPROGRAM) -! ####################################################### -! -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!--------------------------------------- -! -USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF -USE MODN_PREP_SEAFLUX - -USE MODI_DEFAULT_PREP_SEAFLUX -! -USE MODI_TEST_NAM_VAR_SURF -USE MODI_GET_LUOUT -USE MODI_OPEN_NAMELIST -USE MODI_CLOSE_NAMELIST -USE MODE_POS_SURF -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -! -INTEGER :: ILUNAM ! logical unit of namelist file -INTEGER :: ILUOUT -LOGICAL :: GFOUND ! Return code when searching namelist -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!--------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('READ_NAM_PREP_SEAFLUX_N',0,ZHOOK_HANDLE) -NYEAR=NUNDEF -NMONTH=NUNDEF -NDAY=NUNDEF -XTIME=XUNDEF -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -CALL DEFAULT_PREP_SEAFLUX -! -CALL OPEN_NAMELIST(HPROGRAM,ILUNAM) -CALL POSNAM(ILUNAM,'NAM_PREP_SEAFLUX',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PREP_SEAFLUX) -CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) -! -CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPE_SEAFLX', CTYPE_SEAFLX, ' ','GRIB ','MESONH',& - 'ASCII ','NETCDF','LFI ','FA ') -CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEPGD', CTYPEPGD, ' ','GRIB ','MESONH','ASCII ','LFI ','FA ') -CALL TEST_NAM_VAR_SURF(ILUOUT,'CSEAICE_SCHEME',CSEAICE_SCHEME,'GELATO','NONE ') - CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEWAVE', CTYPEWAVE, ' ','GRIB ','MESONH','ASCII ',& - 'NETCDF','LFI ') -! -IF (LHOOK) CALL DR_HOOK('READ_NAM_PREP_SEAFLUX_N',1,ZHOOK_HANDLE) -!------------------------------------ -! -END SUBROUTINE READ_NAM_PREP_SEAFLUX_n diff --git a/src/OASIS/SURFEX/read_namelists_seafluxn.F90 b/src/OASIS/SURFEX/read_namelists_seafluxn.F90 deleted file mode 100644 index 0630335e0..000000000 --- a/src/OASIS/SURFEX/read_namelists_seafluxn.F90 +++ /dev/null @@ -1,71 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### -SUBROUTINE READ_NAMELISTS_SEAFLUX_n (SM, & - HPROGRAM,HINIT) -! ####################################################### -! -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!--------------------------------------------------------------------------- -! -! -! -USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t -! -USE MODN_SEAFLUX_n -! -USE MODI_DEFAULT_SEAFLUX -USE MODI_DEFAULT_CH_DEP -USE MODI_DEFAULT_DIAG_SEAFLUX -USE MODI_READ_DEFAULT_SEAFLUX_n -USE MODI_DEFAULT_SEAICE -USE MODI_READ_SEAFLUX_CONF_n -! -USE MODI_READ_NAM_PREP_SEAFLUX_n -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -! -TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes - CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!--------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('READ_NAMELISTS_SEAFLUX_N',0,ZHOOK_HANDLE) -! -CALL DEFAULT_SEAFLUX(XTSTEP,XOUT_TSTEP,CSEA_ALB,CSEA_FLUX,LPWG, & - LPRECIP,LPWEBB,NZ0,NGRVWAVES,LPROGSST, & - NTIME_COUPLING,XOCEAN_TSTEP,XICHCE,CINTERPOL_SST,& - CINTERPOL_SSS,LWAVEWIND) -CALL DEFAULT_SEAICE(HPROGRAM, CINTERPOL_SIC, CINTERPOL_SIT, & - XFREEZING_SST,XSEAICE_TSTEP, XSIC_EFOLDING_TIME, & - XSIT_EFOLDING_TIME, XCD_ICE_CST, XSI_FLX_DRV ) -! -CALL DEFAULT_CH_DEP(CCH_DRY_DEP) -! -CALL DEFAULT_DIAG_SEAFLUX(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,& - LDIAG_OCEAN,LDIAG_MISC_SEAICE,LSURF_BUDGETC,LRESET_BUDGETC,XDIAG_TSTEP) -! -CALL READ_DEFAULT_SEAFLUX_n(SM%CHS, SM%SD%GO, SM%SD%O, SM%SD%DMI, SM%O, SM%S, & - HPROGRAM) -! -CALL READ_SEAFLUX_CONF_n(SM%CHS, SM%SD%GO, SM%SD%O, SM%SD%DMI, SM%O, SM%S, & - HPROGRAM) -! -IF (HINIT=='PRE') CALL READ_NAM_PREP_SEAFLUX_n(HPROGRAM) -! -IF (LHOOK) CALL DR_HOOK('READ_NAMELISTS_SEAFLUX_N',1,ZHOOK_HANDLE) -! -!--------------------------------------------------------------------------- -! -END SUBROUTINE READ_NAMELISTS_SEAFLUX_n diff --git a/src/OASIS/SURFEX/read_prep_seaflux_conf.F90 b/src/OASIS/SURFEX/read_prep_seaflux_conf.F90 deleted file mode 100644 index d0d819072..000000000 --- a/src/OASIS/SURFEX/read_prep_seaflux_conf.F90 +++ /dev/null @@ -1,203 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE READ_PREP_SEAFLUX_CONF (OMERCATOR, HPROGRAM,HVAR,HFILE,HFILETYPE,& - HFILEPGD,HFILEPGDTYPE, HATMFILE,HATMFILETYPE,& - HPGDFILE,HPGDFILETYPE,KLUOUT,OUNIF) -! ####################################################### -! -!!**** *READ_PREP_SEAFLUX_CONF* - routine to read the configuration for -!! SEAFLUX fields preparation -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2004 -!! P. Le Moigne 10/2005, Phasage Arome -!! C. Lebeaupin 01/2008 Add oceanic variables initialization -!! Modified 09/2013 S. Senesi : introduce variables for sea-ice scheme -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODD_OCEAN_n, ONLY : OCEAN_t -! -USE MODN_PREP_SEAFLUX -! -USE MODI_READ_PREP_SURF_ATM_CONF -USE MODI_PREP_OCEAN_MERCATORVERGRID -! -USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, & - CFILEWAVE_SEAFLX, CTYPEWAVE, XSST_UNIF, XSSS_UNIF, XSIC_UNIF -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -USE MODI_ABOR1_SFX -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -LOGICAL, INTENT(IN) :: OMERCATOR -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling ISBA -CHARACTER(LEN=7), INTENT(IN) :: HVAR ! variable treated -CHARACTER(LEN=28), INTENT(OUT) :: HFILE ! file name -CHARACTER(LEN=6), INTENT(OUT) :: HFILETYPE! file type -CHARACTER(LEN=28), INTENT(OUT) :: HFILEPGD ! file name -CHARACTER(LEN=6), INTENT(OUT) :: HFILEPGDTYPE! file type -CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name -CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type -CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! atmospheric file name -CHARACTER(LEN=6), INTENT(IN) :: HPGDFILETYPE! atmospheric file type -INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing -LOGICAL, INTENT(OUT) :: OUNIF ! flag for prescribed uniform field - -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: IRESP ! IRESP : return-code if a problem appears - ! at the open of the file in LFI routines -INTEGER :: ILUNAM ! Logical unit of namelist file -! - CHARACTER(LEN=28) :: YNAMELIST ! namelist file -! -LOGICAL :: GFOUND ! Return code when searching namelist -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -! -IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',0,ZHOOK_HANDLE) -HFILE = ' ' -HFILETYPE = ' ' -! -HFILEPGD = ' ' -HFILEPGDTYPE = ' ' -! -OUNIF = .FALSE. -! -!------------------------------------------------------------------------------- -! -!* Select seaflux files if they are defined -! ----------------------------------------- -! -IF (HVAR .EQ. 'HS ' .OR. HVAR .EQ. 'TP ') THEN - IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILEWAVE_SEAFLX)>0 .AND. LEN_TRIM(CTYPEWAVE)>0) THEN - HFILE = CFILEWAVE_SEAFLX - HFILETYPE = CTYPEWAVE - END IF -ELSE - IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILE_SEAFLX)>0 .AND. LEN_TRIM(CTYPE_SEAFLX)>0) THEN - HFILE = CFILE_SEAFLX - HFILETYPE = CTYPE_SEAFLX - END IF -END IF -! -IF (LEN_TRIM(HFILEPGD)==0 .AND. LEN_TRIM(CFILEPGD_SEAFLX)>0 .AND. LEN_TRIM(CTYPEPGD)>0) THEN - HFILEPGD = CFILEPGD_SEAFLX - HFILEPGDTYPE = CTYPEPGD -END IF -! -!! If no file name in the scheme namelist, -!! try to find a name in NAM_SURF_ATM -! -IF (LEN_TRIM(HFILE)==0) THEN -! - CALL READ_PREP_SURF_ATM_CONF(HPROGRAM,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,& - HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KLUOUT) -! -END IF -!------------------------------------------------------------------------------- -! -!* Is an uniform field prescribed? -! ------------------------------ -! -SELECT CASE (HVAR) - CASE ('SST ') - OUNIF = (XSST_UNIF/=XUNDEF) - CASE ('SSS ') - IF (CSEAICE_SCHEME == 'NONE '.AND. & - LEN_TRIM(HFILETYPE)==0.0 .AND. & - XSSS_UNIF==XUNDEF )THEN - XSSS_UNIF=0.0 - ENDIF - OUNIF = (XSSS_UNIF/=XUNDEF) - CASE ('SIC ') - OUNIF = (XSIC_UNIF/=XUNDEF) -END SELECT - -! -!------------------------------------------------------------------------------- -! -!* If no file and no uniform field is prescribed: error -! --------------------------------------------- -! -IF (HVAR=='DATE ' .OR. HVAR=='ZS ') THEN - OUNIF = (HFILETYPE==' ') - IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE) - RETURN -END IF -! -!------------------------------------------------------------------------------- -! -!* If no file and var == wave: uniform field -! --------------------------------------------- -! -IF (HVAR=='HS ' .OR. HVAR=='TP ') THEN - OUNIF = (HFILETYPE/='NETCDF') - IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE) - RETURN -END IF -! -!------------------------------------------------------------------------------- -! -IF (LEN_TRIM(HFILETYPE)==0 .AND. .NOT. OUNIF) THEN - CALL ABOR1_SFX('READ_PREP_SEAFLUX_CONF: AN INPUT VALUE IS REQUIRED FOR '//HVAR) -END IF -! -!------------------------------------------------------------------------------- -! -!* If 1D coupling: ocean variables initializing -! -------------------------------------------- -! -IF (OMERCATOR) THEN - WRITE(KLUOUT,*) 'LMERCATOR=T : initializing oceanic vertical grid' - CALL PREP_OCEAN_MERCATORVERGRID(HPROGRAM,OUNIF) -END IF -IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE READ_PREP_SEAFLUX_CONF diff --git a/src/OASIS/SURFEX/read_seafluxn.F90 b/src/OASIS/SURFEX/read_seafluxn.F90 deleted file mode 100644 index bf2ea39c6..000000000 --- a/src/OASIS/SURFEX/read_seafluxn.F90 +++ /dev/null @@ -1,275 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE READ_SEAFLUX_n (DTCO, G, S, U, HPROGRAM,KLUOUT) -! ######################################### -! -!!**** *READ_SEAFLUX_n* - read SEAFLUX varaibles -!! -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2003 -!! Modified 02/2008 Add oceanic variables initialisation -!! S. Belamari 04/2014 Suppress LMERCATOR -!! R. Séférian 01/2015 introduce new ocean surface albedo -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -! -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SFX_GRID_n, ONLY : GRID_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODI_READ_SURF -USE MODI_INTERPOL_SST_MTH -! -USE MODI_GET_TYPE_DIM_n -USE MODI_ABOR1_SFX -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(GRID_t), INTENT(INOUT) :: G -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program -INTEGER, INTENT(IN) :: KLUOUT -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: JMTH, INMTH -CHARACTER(LEN=2 ) :: YMTH -! -INTEGER :: ILU ! 1D physical dimension -! -INTEGER :: IRESP ! Error code after redding -! -CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read -! -INTEGER :: IVERSION ! surface version -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -!* 1D physical dimension -! -IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N',0,ZHOOK_HANDLE) -! -YRECFM='SIZE_SEA' -CALL GET_TYPE_DIM_n(DTCO, U, 'SEA ',ILU) -! -!* 2. Prognostic fields: -! ----------------- -! -!* water temperature -! -ALLOCATE(S%XSST(ILU)) -! -IF(S%LINTERPOL_SST)THEN -! -! Precedent, Current, Next, and Second-next Monthly SST - INMTH=4 -! - ALLOCATE(S%XSST_MTH(SIZE(S%XSST),INMTH)) - DO JMTH=1,INMTH - WRITE(YMTH,'(I2)') (JMTH-1) - YRECFM='SST_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH))) - CALL READ_SURF(HPROGRAM,YRECFM,S%XSST_MTH(:,JMTH),IRESP) - ENDDO -! - CALL INTERPOL_SST_MTH(S,'T') -! -ELSE -! - ALLOCATE(S%XSST_MTH(0,0)) -! - YRECFM='SST' - CALL READ_SURF(HPROGRAM,YRECFM,S%XSST(:),IRESP) -! -ENDIF -! -!* stochastic flux perturbation pattern -! -ALLOCATE(S%XPERTFLUX(ILU)) -IF( S%LPERTFLUX ) THEN - CALL READ_SURF(HPROGRAM,'PERTSEAFLUX',S%XPERTFLUX(:),IRESP) -ELSE - S%XPERTFLUX(:) = 0. -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Semi-prognostic fields: -! ---------------------- -! -!* roughness length -! -ALLOCATE(S%XZ0(ILU)) -YRECFM='Z0SEA' -S%XZ0(:) = 0.001 -CALL READ_SURF(HPROGRAM,YRECFM,S%XZ0(:),IRESP) -! -!* flag to use or not the SeaIce model -! -CALL READ_SURF(HPROGRAM,'VERSION',IVERSION,IRESP) -IF (IVERSION <8) THEN - S%LHANDLE_SIC=.FALSE. -ELSE - CALL READ_SURF(HPROGRAM,'HANDLE_SIC',S%LHANDLE_SIC,IRESP) -ENDIF -! -! -! * sea surface salinity -! -ALLOCATE(S%XSSS(ILU)) -S%XSSS(:)=0.0 -! -!* Sea surface salinity nudging data -! -IF(S%LINTERPOL_SSS)THEN - ! - ! Precedent, Current, Next, and Second-next Monthly SSS - INMTH=4 - ! - ALLOCATE(S%XSSS_MTH(ILU,INMTH)) - DO JMTH=1,INMTH - WRITE(YMTH,'(I2)') (JMTH-1) - YRECFM='SSS_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH))) - CALL READ_SURF(HPROGRAM,YRECFM,S%XSSS_MTH(:,JMTH),IRESP) - CALL CHECK_SEA(YRECFM,S%XSSS_MTH(:,JMTH)) - ENDDO - ! - CALL INTERPOL_SST_MTH(S,'S') - ! -ELSEIF (IVERSION>=8) THEN - ! - ALLOCATE(S%XSSS_MTH(0,0)) - ! - YRECFM='SSS' - CALL READ_SURF(HPROGRAM,YRECFM,S%XSSS,IRESP) - IF(S%LHANDLE_SIC)THEN - CALL CHECK_SEA(YRECFM,S%XSSS(:)) - ENDIF - ! -ENDIF -! -!* ocean surface albedo (direct and diffuse fraction) -! -ALLOCATE(S%XDIR_ALB (ILU)) -ALLOCATE(S%XSCA_ALB (ILU)) -! -IF(S%CSEA_ALB=='RS14')THEN -! - YRECFM='OSA_DIR' - CALL READ_SURF(HPROGRAM,YRECFM,S%XDIR_ALB(:),IRESP) -! - YRECFM='OSA_SCA' - CALL READ_SURF(HPROGRAM,YRECFM,S%XSCA_ALB(:),IRESP) -! -ELSE -! - S%XDIR_ALB(:)=0.065 - S%XSCA_ALB(:)=0.065 -! -ENDIF -! -!* Peak frequency and significant wave height -! -ALLOCATE(S%XHS(ILU)) -ALLOCATE(S%XTP(ILU)) -! -IF (.NOT.S%LWAVEWIND) THEN - YRECFM='HS' - CALL READ_SURF(HPROGRAM,YRECFM,S%XHS(:),IRESP) - YRECFM='TP' - CALL READ_SURF(HPROGRAM,YRECFM,S%XTP(:),IRESP) -ELSE - S%XHS(:)=XUNDEF - S%XTP(:)=XUNDEF -END IF -! -IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE CHECK_SEA(HFIELD,PFIELD) -! -! -IMPLICIT NONE -! -CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HFIELD -REAL, DIMENSION(:), INTENT(IN) :: PFIELD -! -REAL :: ZMAX,ZMIN -INTEGER :: JI, IERRC -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N:CHECK_SEA',0,ZHOOK_HANDLE) -! -ZMIN=-1.0E10 -ZMAX=1.0E10 -! -IERRC=0 -! -DO JI=1,ILU - IF(PFIELD(JI)>ZMAX.OR.PFIELD(JI)<ZMIN)THEN - IERRC=IERRC+1 - WRITE(KLUOUT,*)'PROBLEM FIELD '//TRIM(HFIELD)//' =',PFIELD(JI),& - 'NOT REALISTIC AT LOCATION (LAT/LON)',G%XLAT(JI),G%XLON(JI) - ENDIF -ENDDO -! -IF(IERRC>0) CALL ABOR1_SFX('READ_SEAFLUX_N: FIELD '//TRIM(HFIELD)//' NOT REALISTIC') -! -IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N:CHECK_SEA',1,ZHOOK_HANDLE) - -END SUBROUTINE CHECK_SEA -! -!------------------------------------------------------------------------------ -END SUBROUTINE READ_SEAFLUX_n diff --git a/src/OASIS/SURFEX/sfx_oasis_define.F90 b/src/OASIS/SURFEX/sfx_oasis_define.F90 deleted file mode 100644 index d7de437d2..000000000 --- a/src/OASIS/SURFEX/sfx_oasis_define.F90 +++ /dev/null @@ -1,472 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!######### -SUBROUTINE SFX_OASIS_DEFINE (IO, U, HPROGRAM,KNPTS,KPARAL) -!################################################### -! -!!**** *SFX_OASIS_DEFINE* - Definitions for exchange of coupling fields -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2013 -!! 10/2016 B. Decharme : bug surface/groundwater coupling -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -!! and surface pressure for ocean coupling -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -! -USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -! -USE MODD_SURF_PAR, ONLY : NUNDEF -! -USE MODN_SFX_OASIS -USE MODD_SFX_OASIS -! -USE MODI_GET_LUOUT -USE MODI_ABOR1_SFX -USE MODI_SFX_OASIS_CHECK -! -#ifdef CPLOASIS -USE MOD_OASIS -#endif -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -! -TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -INTEGER, INTENT(IN) :: KNPTS ! Number of grid point on this proc -INTEGER, DIMENSION(:), INTENT(IN) :: KPARAL -! -! -!* 0.2 Declarations of local parameter -! ------------------------------- -! -INTEGER, DIMENSION(2), PARAMETER :: IVAR_NODIMS = (/1,1/) ! rank and number of bundles in coupling field -! -! -!* 0.3 Declarations of local variables -! ------------------------------- -! -INTEGER, DIMENSION(2) :: IVAR_SHAPE ! indexes for the coupling field local dimension -! -INTEGER :: IPART_ID ! Local partition ID -INTEGER :: IERR ! Error info -! -INTEGER :: ILUOUT, IFLAG -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_DEFINE',0,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -#ifdef CPLOASIS -!------------------------------------------------------------------------------- -! -! -!* 0. Initialize : -! ------------ -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -CALL SFX_OASIS_CHECK(IO, U, ILUOUT) -! -!------------------------------------------------------------------------------- -! -!* 1. Define parallel partitions: -! --------------------------- -! -CALL OASIS_DEF_PARTITION(IPART_ID,KPARAL(:),IERR) -! -IF(IERR/=OASIS_OK)THEN - WRITE(ILUOUT,*)'SFX_OASIS_DEFINE: OASIS def partition problem, err = ',IERR - CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def partition problem') -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 2. Coupling fields shape : -! ----------------------- -! -IVAR_SHAPE(1)= 1 -IVAR_SHAPE(2)= KNPTS -! -!------------------------------------------------------------------------------- -! -!* 3. Sea variables for Surfex - Oasis coupling : -! ------------------------------------------- -! -IF(LCPL_SEA)THEN -! -! Sea output fields -! - IF(LEN_TRIM(CSEA_FWSU)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_FWSU_ID,CSEA_FWSU,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea zonal wind stress') - ELSE - NSEA_FWSU_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_FWSV)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_FWSV_ID,CSEA_FWSV,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea meridian wind stress') - ELSE - NSEA_FWSV_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_HEAT)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_HEAT_ID,CSEA_HEAT,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Non solar net heat flux') - ELSE - NSEA_HEAT_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_SNET)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_SNET_ID,CSEA_SNET,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Solar net heat') - ELSE - NSEA_SNET_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_WIND)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_WIND_ID,CSEA_WIND,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea 10m wind speed') - ELSE - NSEA_WIND_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_FWSM)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_FWSM_ID,CSEA_FWSM,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea wind stress') - ELSE - NSEA_FWSM_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_EVAP)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_EVAP_ID,CSEA_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Evaporation') - ELSE - NSEA_EVAP_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_RAIN)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_RAIN_ID,CSEA_RAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Rainfall rate') - ELSE - NSEA_RAIN_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_SNOW)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_SNOW_ID,CSEA_SNOW,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Snowfall rate') - ELSE - NSEA_SNOW_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_EVPR)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_EVPR_ID,CSEA_EVPR,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Evap.-Precip. rate') - ELSE - NSEA_EVPR_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_WATF)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_WATF_ID,CSEA_WATF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea freshwater rate') - ELSE - NSEA_WATF_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_PRES)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_PRES_ID,CSEA_PRES,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for surface pressure') - ELSE - NSEA_PRES_ID=NUNDEF - ENDIF -! -! Sea intput fields -! - IF(LEN_TRIM(CSEA_SST)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_SST_ID,CSEA_SST,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea surface temperature') - ELSE - NSEA_SST_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_UCU)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_UCU_ID,CSEA_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea u-current stress') - ELSE - NSEA_UCU_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEA_VCU)/=0)THEN - CALL OASIS_DEF_VAR(NSEA_VCU_ID,CSEA_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea v-current stress') - ELSE - NSEA_VCU_ID=NUNDEF - ENDIF -! -! Particular case due to Sea-ice -! - IF(LCPL_SEAICE)THEN -! -! Output fields -! - IF(LEN_TRIM(CSEAICE_HEAT)/=0)THEN - CALL OASIS_DEF_VAR(NSEAICE_HEAT_ID,CSEAICE_HEAT,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat') - ELSE - NSEAICE_HEAT_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEAICE_SNET)/=0)THEN - CALL OASIS_DEF_VAR(NSEAICE_SNET_ID,CSEAICE_SNET,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice solar net heat flux') - ELSE - NSEAICE_SNET_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CSEAICE_EVAP)/=0)THEN - CALL OASIS_DEF_VAR(NSEAICE_EVAP_ID,CSEAICE_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice sublimation') - ELSE - NSEAICE_EVAP_ID=NUNDEF - ENDIF -! -! Intput fields -! - CALL OASIS_DEF_VAR(NSEAICE_SIT_ID,CSEAICE_SIT,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat') -! - CALL OASIS_DEF_VAR(NSEAICE_CVR_ID,CSEAICE_CVR,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat') -! - CALL OASIS_DEF_VAR(NSEAICE_ALB_ID,CSEAICE_ALB,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat') -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 4. Lake variables for Surfex - Oasis coupling : -! ------------------------------------------- -! -IF(LCPL_LAKE)THEN -! -! Output fields -! - IF(LEN_TRIM(CLAKE_EVAP)/=0)THEN - CALL OASIS_DEF_VAR(NLAKE_EVAP_ID,CLAKE_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Evaporation') - ELSE - NLAKE_EVAP_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CLAKE_RAIN)/=0)THEN - CALL OASIS_DEF_VAR(NLAKE_RAIN_ID,CLAKE_RAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Rainfall rate') - ELSE - NLAKE_RAIN_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CLAKE_SNOW)/=0)THEN - CALL OASIS_DEF_VAR(NLAKE_SNOW_ID,CLAKE_SNOW,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Snowfall rate') - ELSE - NLAKE_SNOW_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CLAKE_WATF)/=0)THEN - CALL OASIS_DEF_VAR(NLAKE_WATF_ID,CLAKE_WATF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea freshwater rate') - ELSE - NLAKE_WATF_ID=NUNDEF - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 5. Land surface variables for Surfex - Oasis coupling : -! ---------------------------------------------------- -! -IF(LCPL_LAND)THEN -! -! Output Surface runoff -! - CALL OASIS_DEF_VAR(NRUNOFF_ID,CRUNOFF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Surface runoff') -! -! Output Calving flux -! - IF(LCPL_CALVING)THEN -! -! Output Calving flux - CALL OASIS_DEF_VAR(NCALVING_ID,CCALVING,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Calving flux') -! - ENDIF -! -! Output Deep drainage -! - CALL OASIS_DEF_VAR(NDRAIN_ID,CDRAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Deep drainage') -! -! Particular case due to water table depth / surface coupling -! - IF(LCPL_GW)THEN -! -! Input Water table depth - CALL OASIS_DEF_VAR(NWTD_ID,CWTD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Water table depth') -! -! Input grid-cell fraction of WTD to rise - CALL OASIS_DEF_VAR(NFWTD_ID,CFWTD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land fraction of WTD to rise') -! - ENDIF -! -! Particular case due to floodplains coupling -! - IF(LCPL_FLOOD)THEN -! -! Output Flood precip interception - CALL OASIS_DEF_VAR(NSRCFLOOD_ID,CSRCFLOOD,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains freshwater flux') -! -! Input floodplains fraction - CALL OASIS_DEF_VAR(NFFLOOD_ID,CFFLOOD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains fraction') -! -! Input floodplains potential infiltration - CALL OASIS_DEF_VAR(NPIFLOOD_ID,CPIFLOOD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains potential infiltration') -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 6. Wave variables for Surfex - Oasis coupling : -! ------------------------------------------- -! -IF(LCPL_WAVE) THEN -! -! Wave output fields -! - IF(LEN_TRIM(CWAVE_U10)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_U10_ID,CWAVE_U10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for U10') - ELSE - NWAVE_U10_ID=NUNDEF - ENDIF -! - IF(LEN_TRIM(CWAVE_V10)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_V10_ID,CWAVE_V10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for V10') - ELSE - NWAVE_V10_ID=NUNDEF - ENDIF -! -! Wave input fields -! - IF (LEN_TRIM(CWAVE_CHA)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_CHA_ID,CWAVE_CHA,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for CHA') - ELSE - NWAVE_CHA_ID=NUNDEF - ENDIF -! - IF (LEN_TRIM(CWAVE_UCU)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_UCU_ID,CWAVE_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for UCU') - ELSE - NWAVE_UCU_ID=NUNDEF - ENDIF -! - IF (LEN_TRIM(CWAVE_VCU)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_VCU_ID,CWAVE_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for VCU') - ELSE - NWAVE_VCU_ID=NUNDEF - ENDIF -! - IF (LEN_TRIM(CWAVE_HS)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_HS_ID,CWAVE_HS,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for HS') - ELSE - NWAVE_HS_ID=NUNDEF - ENDIF -! - IF (LEN_TRIM(CWAVE_TP)/=0)THEN - CALL OASIS_DEF_VAR(NWAVE_TP_ID,CWAVE_TP,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR) - IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for TP') - ELSE - NWAVE_TP_ID=NUNDEF - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 6. End of declaration phase: -! -------------- -! -CALL OASIS_ENDDEF(IERR) -! -IF(IERR/=OASIS_OK)THEN - WRITE(ILUOUT,*)'SFX_OASIS_DEFINE: OASIS enddef problem, err = ',IERR - CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS enddef problem') -ENDIF -! -!------------------------------------------------------------------------------- -#endif -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_DEFINE',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE SFX_OASIS_DEFINE diff --git a/src/OASIS/SURFEX/sfx_oasis_init.F90 b/src/OASIS/SURFEX/sfx_oasis_init.F90 deleted file mode 100644 index 2a0e34860..000000000 --- a/src/OASIS/SURFEX/sfx_oasis_init.F90 +++ /dev/null @@ -1,355 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -SUBROUTINE SFX_OASIS_INIT(HNAMELIST,KLOCAL_COMM,HINIT) -!! -!! -!! PURPOSE -!! -------- -!! -!! Initialize coupled mode communication and XIOS I/O scheme -!! -!! -!! METHOD -!! ------ -!! -!! Depending on namelist flags for Oasis and XIOS, either call : -!! - XIOS_INITIALIZE alone (when LXIOS and not LOASIS) , or -!! - OASIS_INIT_COMP (when LOASIS) and then, depending on LXIOS, -!! * either XIOS_INITALIZE -!! * or OASIS_GET_LOCAL_COMM -!! -!! Note : OASIS-MCT interface must be initialized before any DR_HOOK call -!! -!! EXTERNAL -!! -------- -!! -!! -!! REFERENCE -!! --------- -!! -!! S. Valcke et al., 2013: OASIS-MCT User Guide -!! CERFACS, Toulouse, France, 50 pp. -!! https://verc.enes.org/oasis/oasis-dedicated-user-support-1/documentation/oasis3-mct-user-guide -!! -!! XIOS Reference guide - Yann Meurdesoif - 10/10/2014 - -!! svn co -r 515 http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/branchs/xios-1.0 <dir> ; cd <dir>/doc ; .... -!! -!! -!! AUTHOR -!! ------ -!! -!! B. Decharme, CNRM -!! -!! MODIFICATION -!! -------------- -!! -!! Original 10/2013 -!! S.Sénési 08/2015 - handle XIOS -!! B.Decharme 09/2016 - no CALL ABORT if no namelist in Arpege -!! Modified 11/2014 : J. Pianezze - add LOASIS_GRID flag -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID, CMODEL_NAME, XRUNTIME -USE MODI_ABOR1_SFX -! -USE MODD_XIOS , ONLY : LXIOS ! Should we call XIOS_INITIALIZE instead of OASIS_GET_LOCAL_COMM -! -#ifdef WXIOS -USE XIOS, ONLY : XIOS_INITIALIZE -#endif -! -#ifdef CPLOASIS -USE MOD_OASIS -#endif -! -IMPLICIT NONE -! -#ifdef CPLOASIS -INCLUDE 'mpif.h' -#endif -! -!* 0.1 Declarations of arguments -! ------------------------- -! - CHARACTER(LEN=28), INTENT(IN ) :: HNAMELIST -INTEGER, INTENT(OUT) :: KLOCAL_COMM ! value of local communicator - CHARACTER(LEN=3), INTENT(IN ), OPTIONAL :: HINIT ! choice of fields to initialize -! -!* 0.2 Declarations of local variables -! ------------------------------- -! - CHARACTER(LEN=9) :: YWORD, YTIMERUN - CHARACTER(LEN=1000):: YLINE, YFOUND -INTEGER :: IERR, IWORK, IRANK -INTEGER :: ICOMP_ID -INTEGER :: ITIMERUN -LOGICAL :: GFOUND - CHARACTER(LEN=3) :: YINIT -! -! -!* 0.3 Declarations of namelist variables -! ---------------------------------- -! -NAMELIST/NAM_OASIS/LOASIS,LOASIS_GRID,CMODEL_NAME -! -!------------------------------------------------------------------------------- -! -! ATTENTION : Do not introduce DR_HOOK in this routine -! -!* 0. Initialization: -! --------------- -! -LOASIS = .FALSE. -LOASIS_GRID = .FALSE. - CMODEL_NAME = 'surfex' -XRUNTIME = 0.0 -! -YINIT = 'ALL' -IF(PRESENT(HINIT))YINIT=HINIT -! -!------------------------------------------------------------------------------- -! -!* 1. Read namelist: -! -------------- -! -IF(LEN_TRIM(HNAMELIST)/=0)THEN -! - OPEN(UNIT=11,FILE=HNAMELIST,ACTION='READ',FORM="FORMATTED",POSITION="REWIND",STATUS='OLD',IOSTAT=IERR) -! - IF (IERR /= 0) THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )' WARNING WARNING WARNING WARNING WARNING ' - WRITE(*,'(A)' )' --------------------------------------- ' - WRITE(*,'(2A)')'SFX_OASIS_INIT: SFX NAMELIST FILE NOT FOUND: ',TRIM(HNAMELIST) - WRITE(*,'(A)' )'------------------------------------------- ' - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -#ifndef SFX_ARO - CALL ABORT - STOP -#endif - ELSE - READ (UNIT=11,NML=NAM_OASIS,IOSTAT=IERR) - CLOSE(UNIT=11) - ENDIF - ! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 2. Setup OASIS (possibly via XIOS) and XIOS -! ---------------------------------------- -! -IF (LXIOS) THEN -! -! -#ifdef WXIOS - ! NOTE : XIOS_INITIALIZE will call OASIS_INIT_COMP and - ! OASIS_GET_LOCALCOMM if its own config file calls for Oasis -!$OMP SINGLE - CALL XIOS_INITIALIZE(CMODEL_NAME, return_comm=KLOCAL_COMM) -!$OMP END SINGLE -! -#else -! - WRITE(*,*) 'SFX_OASIS_INIT : BINARY WAS NOT COMPILED WITH XIOS SUPPORT ' - CALL ABOR1_SFX('SFX_OASIS_INIT : BINARY WAS NOT COMPILED WITH XIOS SUPPORT') -! -#endif -! -! -ELSE ! (i.e. .NOT. LXIOS) -! -#ifdef CPLOASIS - - IF (LOASIS ) THEN - IRANK=0 - CALL OASIS_INIT_COMP(ICOMP_ID,CMODEL_NAME,IERR) - IF (IERR/=OASIS_OK) THEN - WRITE(*,'(A)' )'SFX : Error initializing OASIS' - WRITE(*,'(A,I4)')'SFX : Return code from oasis_init_comp : ',IERR - CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'SFX_OASIS_INIT: Error initializing OASIS') - CALL ABORT - STOP - ENDIF - CALL OASIS_GET_LOCALCOMM(KLOCAL_COMM,IERR) - IF (IERR/=OASIS_OK) THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'SFX : Error getting local communicator from OASIS' - WRITE(*,'(A,I4)')'SFX : Return code from oasis_get_local_comm : ',IERR - ENDIF - CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'SFX_OASIS_INIT: Error getting local communicator') - CALL ABORT - STOP - ENDIF -! - ELSE - KLOCAL_COMM=0 - RETURN - ENDIF - -#else - - KLOCAL_COMM=0 - RETURN - -#endif -! -ENDIF -! -#ifdef SFX_MPI -CALL MPI_COMM_RANK(KLOCAL_COMM,IRANK,IWORK) -#endif -IF(IRANK==0)THEN - WRITE(*,'(A)')'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - IF (LOASIS) WRITE(*,'(A)')'OASIS used for model : '//TRIM(CMODEL_NAME) - IF (LXIOS) WRITE(*,'(A)')'XIOS used for model : '//TRIM(CMODEL_NAME) - WRITE(*,'(A)')'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -ENDIF -! -IF(YINIT=='PRE')THEN - RETURN -ENDIF - -#ifdef CPLOASIS -IF (LOASIS) THEN -! -!------------------------------------------------------------------------------- -! -!* 5. Read total simulated time in namcouple -! -------------------------------------- -! - OPEN (UNIT=11,FILE ='namcouple',STATUS='OLD',FORM ='FORMATTED',POSITION="REWIND",IOSTAT=IERR) - IF (IERR /= 0) THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )'SFX : OASIS namcouple not found' - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - ENDIF - CALL ABORT - STOP - ENDIF -! - YTIMERUN=' $RUNTIME' - ITIMERUN=-1 -! - DO WHILE (ITIMERUN==-1) - READ (UNIT = 11,FMT = '(A9)',IOSTAT=IERR) YWORD - IF(IERR/=0)THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )'SFX : Problem $RUNTIME empty in namcouple' - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - ENDIF - CALL ABORT - STOP - ENDIF - IF (YWORD==YTIMERUN)THEN - READ (UNIT = 11,FMT = '(A1000)',IOSTAT=IERR) YLINE - IF(IERR/=0)THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )'SFX : Problem looking for $RUNTIME in namcouple' - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - ENDIF - CALL ABORT - STOP - ENDIF - CALL FOUND_TIMERUN (YLINE, YFOUND, 1000, GFOUND) - IF (GFOUND) THEN - READ (YFOUND,FMT = '(I100)',IOSTAT=IERR) ITIMERUN - IF(IERR/=0)THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )'SFX : Problem reading $RUNTIME in namcouple' - WRITE(*,'(2A)' )'$RUNTIME = ', TRIM(YFOUND) - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - ENDIF - CALL ABORT - STOP - ENDIF - ENDIF - ENDIF - ENDDO - CLOSE(11) -! - XRUNTIME = REAL(ITIMERUN) -! -ENDIF -#endif -! -!------------------------------------------------------------------------------- - CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE FOUND_TIMERUN(HIN, HOUT, KLEN, OFOUND) -! -IMPLICIT NONE -! -INTEGER , INTENT (IN ) :: KLEN - CHARACTER (LEN=*), INTENT (INOUT) :: HIN - CHARACTER (LEN=*), INTENT (INOUT) :: HOUT -LOGICAL, INTENT (OUT ) :: OFOUND -! -!* ---------------------------- Local declarations ------------------- -! - CHARACTER(LEN=1), PARAMETER :: YBLANK = ' ' - CHARACTER(LEN=1), PARAMETER :: YNADA = '#' - - CHARACTER(LEN=KLEN) :: YLINE - CHARACTER(LEN=KLEN) :: YWORK -! -INTEGER :: ILEN -INTEGER :: IERR -! -! -!* 1. Skip line if it is a comment -! ---------------------------- -! -DO WHILE (HIN(1:1)==YNADA) - READ (UNIT = 11, FMT = '(A9)',IOSTAT=IERR) YLINE - IF(IERR/=0)THEN - IF(IRANK==0)THEN - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(*,'(A)' )'SFX : Problem looking for $RUNTINE line in namcouple' - WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - ENDIF - CALL ABORT - STOP - ENDIF - HIN(1:KLEN) = YLINE(1:KLEN) -ENDDO -! -!* Fill HOUT with blanks -! -HOUT = YBLANK -! -!* Fill temporary string and remove leading blanks -! -YWORK = ADJUSTL(HIN) -! -IF(LEN_TRIM(YWORK)<=0)THEN - OFOUND = .FALSE. - RETURN -ENDIF -! -!* Find the length of this set of characters -! -ILEN = INDEX(YWORK,YBLANK) - 1 -! -!* Copy to HOUT -! -HOUT(1:ILEN) = YWORK(1:ILEN) -! -OFOUND = .TRUE. -! -END SUBROUTINE FOUND_TIMERUN -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE SFX_OASIS_INIT diff --git a/src/OASIS/SURFEX/sfx_oasis_read_nam.F90 b/src/OASIS/SURFEX/sfx_oasis_read_nam.F90 deleted file mode 100644 index c1b5b596d..000000000 --- a/src/OASIS/SURFEX/sfx_oasis_read_nam.F90 +++ /dev/null @@ -1,568 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!######### -SUBROUTINE SFX_OASIS_READ_NAM(HPROGRAM,PTSTEP_SURF,HINIT) -!################################################################## -! -!!**** *SFX_OASIS_READ_NAM* - routine to read the configuration for SFX-OASIS coupling -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 05/2008 -!! 10/2016 B. Decharme : bug surface/groundwater coupling -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -!! and surface pressure for ocean coupling -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODN_SFX_OASIS -! -USE MODD_SFX_OASIS, ONLY : LOASIS, XRUNTIME, & - LCPL_LAND, LCPL_GW, LCPL_FLOOD, & - LCPL_CALVING, LCPL_LAKE, & - LCPL_SEA, LCPL_SEAICE, LCPL_WAVE -! -USE MODE_POS_SURF -! -USE MODI_GET_LUOUT -USE MODI_OPEN_NAMELIST -USE MODI_CLOSE_NAMELIST -! -USE MODI_ABOR1_SFX -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -REAL, INTENT(IN) :: PTSTEP_SURF ! Surfex time step -CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HINIT ! choice of fields to initialize -! -!* 0.2 Declarations of local parameter -! ------------------------------- -! -INTEGER, PARAMETER :: KIN = 1 -INTEGER, PARAMETER :: KOUT = 0 -CHARACTER(LEN=5), PARAMETER :: YLAND = 'land' -CHARACTER(LEN=5), PARAMETER :: YLAKE = 'lake' -CHARACTER(LEN=5), PARAMETER :: YSEA = 'ocean' -CHARACTER(LEN=5), PARAMETER :: YWAVE = 'wave' -! -!* 0.3 Declarations of local variables -! ------------------------------- -! -LOGICAL :: GFOUND ! Return code when searching namelist -INTEGER :: ILUOUT ! Listing id -INTEGER :: ILUNAM ! logical unit of namelist file -CHARACTER(LEN=20) :: YKEY -CHARACTER(LEN=50) :: YCOMMENT -CHARACTER(LEN=3) :: YINIT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',0,ZHOOK_HANDLE) -! -! -!* 0. Initialize : -! ------------ -! -LCPL_LAND = .FALSE. -LCPL_GW = .FALSE. -LCPL_FLOOD = .FALSE. -LCPL_CALVING = .FALSE. -LCPL_LAKE = .FALSE. -LCPL_SEA = .FALSE. -LCPL_SEAICE = .FALSE. -LCPL_WAVE = .FALSE. -! -IF(.NOT.LOASIS)THEN - IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE) - RETURN -ENDIF -! -YINIT = 'ALL' -IF(PRESENT(HINIT))YINIT=HINIT -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -!* 1. Read namelists and check status : -! -------------------------------- -! -CALL OPEN_NAMELIST(HPROGRAM,ILUNAM) -! -CALL POSNAM(ILUNAM,'NAM_SFX_LAND_CPL',GFOUND,ILUOUT) -! -IF (GFOUND) THEN - READ(UNIT=ILUNAM,NML=NAM_SFX_LAND_CPL) -ELSE - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'NAM_SFX_LAND_CPL not found : Surfex land not coupled with river routing' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -ENDIF -! -CALL POSNAM(ILUNAM,'NAM_SFX_SEA_CPL',GFOUND,ILUOUT) -! -IF (GFOUND) THEN - READ(UNIT=ILUNAM,NML=NAM_SFX_SEA_CPL) -ELSE - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'NAM_SFX_SEA_CPL not found : Surfex sea not coupled with ocean model' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -ENDIF -! -CALL POSNAM(ILUNAM,'NAM_SFX_LAKE_CPL',GFOUND,ILUOUT) -! -IF (GFOUND) THEN - READ(UNIT=ILUNAM,NML=NAM_SFX_LAKE_CPL) -ELSE - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'NAM_SFX_LAKE_CPL not found : Surfex lake not coupled with ocean model' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -ENDIF -! -CALL POSNAM(ILUNAM,'NAM_SFX_WAVE_CPL',GFOUND,ILUOUT) -! -IF (GFOUND) THEN - READ(UNIT=ILUNAM,NML=NAM_SFX_WAVE_CPL) -ELSE - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'NAM_SFX_WAVE_CPL not found : Surfex not coupled with wave model' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' - WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' -ENDIF -! -CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) -! -IF(XTSTEP_CPL_LAND>0.0)LCPL_LAND=.TRUE. -IF(XTSTEP_CPL_LAKE>0.0)LCPL_LAKE=.TRUE. -IF(XTSTEP_CPL_SEA >0.0)LCPL_SEA =.TRUE. -IF(XTSTEP_CPL_WAVE>0.0)LCPL_WAVE=.TRUE. -! -IF(.NOT.LCPL_LAND.AND..NOT.LCPL_SEA.AND..NOT.LCPL_WAVE)THEN - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: OASIS USED BUT NAMELIST NOT FOUND') -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 2. Check time step consistency -! --------------------------- -! -IF(YINIT/='PRE')THEN - IF(MOD(XRUNTIME,PTSTEP_SURF)/=0.)THEN - WRITE(ILUOUT,*)'! MOD(XRUNTIME,XTSTEP_SURF)/=0 !!!' - WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) must be a multiple of $RUNTIME in oasis namcouple !!!' - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF must be a multiple of $RUNTIME in oasis namcouple !!!') - ENDIF -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Check status for Land surface fields -! ------------------------------------ -! -IF(LCPL_LAND)THEN -! - IF(YINIT/='PRE')THEN - IF(MOD(XTSTEP_CPL_LAND,PTSTEP_SURF)/=0.)THEN - WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_LAND) /= 0 !' - WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_LAND = ',XTSTEP_CPL_LAND - IF(PTSTEP_SURF>XTSTEP_CPL_LAND) & - WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to XTSTEP_CPL_LAND !' - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_LAND not consistent !!!') - ENDIF - ENDIF -! -! Land Output variable -! - YKEY ='CRUNOFF' - YCOMMENT='Surface runoff' - CALL CHECK_FIELD(CRUNOFF,YKEY,YCOMMENT,YLAND,KOUT) -! - YKEY ='CDRAIN' - YCOMMENT='Deep drainage' - CALL CHECK_FIELD(CDRAIN,YKEY,YCOMMENT,YLAND,KOUT) -! -! Particular case due to calving case -! - IF(LEN_TRIM(CCALVING)>0)THEN - LCPL_CALVING = .TRUE. - ENDIF -! - IF(LCPL_CALVING)THEN - YKEY ='CCALVING' - YCOMMENT='Calving flux' - CALL CHECK_FIELD(CCALVING,YKEY,YCOMMENT,YLAND,KOUT) - ENDIF -! -! Particular case due to water table depth / surface coupling -! - IF(LEN_TRIM(CWTD)>0.OR.LEN_TRIM(CFWTD)>0)THEN - LCPL_GW = .TRUE. - ENDIF -! - IF(LCPL_GW)THEN -! -! Input variable -! - YKEY ='CWTD' - YCOMMENT='Water table depth' - CALL CHECK_FIELD(CWTD,YKEY,YCOMMENT,YLAND,KIN) -! - YKEY ='CFWTD' - YCOMMENT='Fraction of WTD to rise' - CALL CHECK_FIELD(CFWTD,YKEY,YCOMMENT,YLAND,KIN) -! - ENDIF -! -! Particular case due to floodplains coupling -! - IF(LEN_TRIM(CSRCFLOOD)>0.OR.LEN_TRIM(CFFLOOD)>0.OR.LEN_TRIM(CPIFLOOD)>0)THEN - LCPL_FLOOD = .TRUE. - ENDIF -! - IF(LCPL_FLOOD)THEN -! -! Output variable -! - YKEY ='CSRCFLOOD' - YCOMMENT='flood freshwater flux' - CALL CHECK_FIELD(CSRCFLOOD,YKEY,YCOMMENT,YLAND,KOUT) -! -! Input variable -! - YKEY ='CFFLOOD' - YCOMMENT='Flood fraction' - CALL CHECK_FIELD(CFFLOOD,YKEY,YCOMMENT,YLAND,KIN) -! - YKEY ='CPIFLOOD' - YCOMMENT='Flood potential infiltration' - CALL CHECK_FIELD(CPIFLOOD,YKEY,YCOMMENT,YLAND,KIN) -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 4. Check status for Land surface fields -! ------------------------------------ -! -IF(LCPL_LAKE)THEN -! - IF(YINIT/='PRE')THEN - IF(MOD(XTSTEP_CPL_LAKE,PTSTEP_SURF)/=0.)THEN - WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_LAKE) /= 0 !' - WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_LAKE = ',XTSTEP_CPL_LAKE - IF(PTSTEP_SURF>XTSTEP_CPL_LAKE) & - WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to XTSTEP_CPL_LAKE !' - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_LAKE not consistent !!!') - ENDIF - ENDIF -! -! Output variables -! - YKEY ='CLAKE_EVAP' - YCOMMENT='Evaporation rate' - CALL CHECK_FIELD(CLAKE_EVAP,YKEY,YCOMMENT,YLAKE,KOUT) -! - YKEY ='CLAKE_RAIN' - YCOMMENT='Rainfall rate' - CALL CHECK_FIELD(CLAKE_RAIN,YKEY,YCOMMENT,YLAKE,KOUT) -! - YKEY ='CLAKE_SNOW' - YCOMMENT='Snowfall rate' - CALL CHECK_FIELD(CLAKE_SNOW,YKEY,YCOMMENT,YLAKE,KOUT) -! - YKEY ='CLAKE_WATF' - YCOMMENT='Freshwater flux' - CALL CHECK_FIELD(CLAKE_WATF,YKEY,YCOMMENT,YLAKE,KOUT) -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 5. Check status for Sea fields -! --------------------------- -! -IF(LCPL_SEA)THEN -! - IF(YINIT/='PRE')THEN - IF(MOD(XTSTEP_CPL_SEA,PTSTEP_SURF)/=0.)THEN - WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_SEA) /= 0 !' - WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_SEA = ',XTSTEP_CPL_SEA - IF(PTSTEP_SURF>XTSTEP_CPL_SEA) & - WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to XTSTEP_CPL_SEA !' - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_SEA not consistent !!!') - ENDIF - ENDIF -! -! Sea Output variables -! - YKEY ='CSEA_FWSU' - YCOMMENT='zonal wind stress' - CALL CHECK_FIELD(CSEA_FWSU,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_FWSV' - YCOMMENT='meridian wind stress' - CALL CHECK_FIELD(CSEA_FWSV,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_HEAT' - YCOMMENT='Non solar net heat flux' - CALL CHECK_FIELD(CSEA_HEAT,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_SNET' - YCOMMENT='Solar net heat flux' - CALL CHECK_FIELD(CSEA_SNET,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_WIND' - YCOMMENT='module of 10m wind speed' - CALL CHECK_FIELD(CSEA_WIND,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_FWSM' - YCOMMENT='module of wind stress' - CALL CHECK_FIELD(CSEA_FWSM,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_EVAP' - YCOMMENT='Evaporation rate' - CALL CHECK_FIELD(CSEA_EVAP,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_RAIN' - YCOMMENT='Rainfall rate' - CALL CHECK_FIELD(CSEA_RAIN,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_SNOW' - YCOMMENT='Snowfall rate' - CALL CHECK_FIELD(CSEA_SNOW,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_EVPR' - YCOMMENT='Evap. - Precip. rate' - CALL CHECK_FIELD(CSEA_EVPR,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_WATF' - YCOMMENT='Freshwater flux' - CALL CHECK_FIELD(CSEA_WATF,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEA_PRES' - YCOMMENT='Surface pressure' - CALL CHECK_FIELD(CSEA_PRES,YKEY,YCOMMENT,YSEA,KOUT) -! -! Sea Input variables -! - YKEY ='CSEA_SST' - YCOMMENT='Sea surface temperature' - CALL CHECK_FIELD(CSEA_SST,YKEY,YCOMMENT,YSEA,KIN) -! - YKEY ='CSEA_UCU' - YCOMMENT='Sea u-current stress' - CALL CHECK_FIELD(CSEA_UCU,YKEY,YCOMMENT,YSEA,KIN) -! - YKEY ='CSEA_VCU' - YCOMMENT='Sea v-current stress' - CALL CHECK_FIELD(CSEA_VCU,YKEY,YCOMMENT,YSEA,KIN) -! -! Sea-ice fluxes -! - IF(LEN_TRIM(CSEAICE_HEAT)>0.OR.LEN_TRIM(CSEAICE_SNET)>0.OR. & - LEN_TRIM(CSEAICE_EVAP)>0.OR.LEN_TRIM(CSEAICE_SIT )>0.OR. & - LEN_TRIM(CSEAICE_CVR )>0.OR.LEN_TRIM(CSEAICE_ALB )>0 )THEN - LCPL_SEAICE=.TRUE. - ENDIF -! - IF(LCPL_SEAICE)THEN -! -! Sea-ice Output variables -! - YKEY ='CSEAICE_HEAT' - YCOMMENT='Sea-ice non solar net heat flux' - CALL CHECK_FIELD(CSEAICE_HEAT,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEAICE_SNET' - YCOMMENT='Sea-ice solar net heat flux' - CALL CHECK_FIELD(CSEAICE_SNET,YKEY,YCOMMENT,YSEA,KOUT) -! - YKEY ='CSEAICE_EVAP' - YCOMMENT='Sea-ice sublimation' - CALL CHECK_FIELD(CSEAICE_EVAP,YKEY,YCOMMENT,YSEA,KOUT) -! -! Sea-ice Input variables -! - YKEY ='CSEAICE_SIT' - YCOMMENT='Sea-ice temperature' - CALL CHECK_FIELD(CSEAICE_SIT,YKEY,YCOMMENT,YSEA,KIN) -! - YKEY ='CSEAICE_CVR' - YCOMMENT='Sea-ice cover' - CALL CHECK_FIELD(CSEAICE_CVR,YKEY,YCOMMENT,YSEA,KIN) -! - YKEY ='CSEAICE_ALB' - YCOMMENT='Sea-ice albedo' - CALL CHECK_FIELD(CSEAICE_ALB,YKEY,YCOMMENT,YSEA,KIN) -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 6. Check status for Wave fields -! --------------------------- -! -IF(LCPL_WAVE)THEN -! - IF(YINIT/='PRE')THEN - IF(MOD(XTSTEP_CPL_WAVE,PTSTEP_SURF)/=0.)THEN - WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_WAVE) /= 0 !' - WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_WAVE = ',XTSTEP_CPL_WAVE - IF(PTSTEP_SURF>XTSTEP_CPL_WAVE) & - WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to XTSTEP_CPL_WAVE !' - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_WAVE not consistent !!!') - ENDIF - ENDIF -! -! Wave Output variables -! - YKEY ='CWAVE_U10' - YCOMMENT='10m u-wind speed' - CALL CHECK_FIELD(CWAVE_U10,YKEY,YCOMMENT,YWAVE,KOUT) -! - YKEY ='CWAVE_V10' - YCOMMENT='10m v-wind speed' - CALL CHECK_FIELD(CWAVE_V10,YKEY,YCOMMENT,YWAVE,KOUT) -! -! Wave Input variables -! - YKEY ='CWAVE_CHA' - YCOMMENT='Charnock Coefficient' - CALL CHECK_FIELD(CWAVE_CHA,YKEY,YCOMMENT,YWAVE,KIN) -! - YKEY ='CWAVE_UCU' - YCOMMENT='u-current velocity' - CALL CHECK_FIELD(CWAVE_UCU,YKEY,YCOMMENT,YWAVE,KIN) -! - YKEY ='CWAVE_VCU' - YCOMMENT='v-current velocity' - CALL CHECK_FIELD(CWAVE_VCU,YKEY,YCOMMENT,YWAVE,KIN) -! - YKEY ='CWAVE_HS' - YCOMMENT='Significant wave height' - CALL CHECK_FIELD(CWAVE_HS,YKEY,YCOMMENT,YWAVE,KIN) -! - YKEY ='CWAVE_TP' - YCOMMENT='Peak period' - CALL CHECK_FIELD(CWAVE_TP,YKEY,YCOMMENT,YWAVE,KIN) -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE CHECK_FIELD(HFIELD,HKEY,HCOMMENT,HTYP,KID) -! -IMPLICIT NONE -! -CHARACTER(LEN=*), INTENT(IN) :: HFIELD -CHARACTER(LEN=*), INTENT(IN) :: HKEY -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT -CHARACTER(LEN=*), INTENT(IN) :: HTYP -INTEGER, INTENT(IN) :: KID -! -CHARACTER(LEN=20) :: YWORK -CHARACTER(LEN=20) :: YNAMELIST -CHARACTER(LEN=128) :: YCOMMENT1 -CHARACTER(LEN=128) :: YCOMMENT2 -LOGICAL :: LSTOP -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM:CHECK_FIELD',0,ZHOOK_HANDLE) -! -IF(LEN_TRIM(HFIELD)==0)THEN -! - IF(KID==0)THEN - YWORK=TRIM(HTYP)//' - SFX' - ELSE - YWORK='SFX - '//TRIM(HTYP) - ENDIF -! - SELECT CASE (HTYP) - CASE(YLAND) - YNAMELIST='NAM_SFX_LAND_CPL' - CASE(YSEA) - YNAMELIST='NAM_SFX_SEA_CPL' - CASE(YLAKE) - YNAMELIST='NAM_SFX_LAKE_CPL' - CASE(YWAVE) - YNAMELIST='NAM_SFX_WAVE_CPL' - CASE DEFAULT - CALL ABOR1_SFX('SFX_OASIS_READ_NAM: TYPE NOT SUPPORTED OR IMPLEMENTD : '//TRIM(HTYP)) - END SELECT -! - YCOMMENT1= 'SFX_OASIS_READ_NAM: '//TRIM(HCOMMENT)//' is not done for '//TRIM(YWORK)//' coupling' - YCOMMENT2= 'SFX_OASIS_READ_NAM: Namelist key '//TRIM(HKEY)//' is not in '//TRIM(YNAMELIST) -! - WRITE(ILUOUT,*)TRIM(YCOMMENT1) - WRITE(ILUOUT,*)TRIM(YCOMMENT2) -! -! For oceanic coupling do not stop the model if a field from surfex to ocean is -! not done because many particular case can be used -! - IF((KID==0.OR.KID==1).AND.HTYP/=YLAND)THEN - LSTOP=.FALSE. - ELSE - LSTOP=.TRUE. - ENDIF -! - IF(LSTOP)THEN - CALL ABOR1_SFX(YCOMMENT1) - ENDIF -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM:CHECK_FIELD',1,ZHOOK_HANDLE) -! -END SUBROUTINE CHECK_FIELD -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE SFX_OASIS_READ_NAM diff --git a/src/OASIS/SURFEX/sfx_oasis_recv.F90 b/src/OASIS/SURFEX/sfx_oasis_recv.F90 deleted file mode 100644 index 8aa18215e..000000000 --- a/src/OASIS/SURFEX/sfx_oasis_recv.F90 +++ /dev/null @@ -1,324 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!######### -SUBROUTINE SFX_OASIS_RECV(HPROGRAM,KI,KSW,PTIMEC, & - ORECV_LAND, ORECV_SEA, ORECV_WAVE, & - PLAND_WTD,PLAND_FWTD, & - PLAND_FFLOOD,PLAND_PIFLOOD, & - PSEA_SST,PSEA_UCU,PSEA_VCU, & - PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB, & - PWAVE_CHA,PWAVE_UCU,PWAVE_VCU, & - PWAVE_HS,PWAVE_TP ) -!######################################## -! -!!**** *SFX_OASIS_RECV* - Receive coupling fields from oasis -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2013 -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF -! -USE MODD_SFX_OASIS -! -USE MODI_GET_LUOUT -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -#ifdef CPLOASIS -USE MOD_OASIS -#endif -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -CHARACTER(LEN=*), INTENT(IN) :: HPROGRAM ! program calling surf. schemes -INTEGER, INTENT(IN) :: KI ! number of points on this proc -INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands -REAL, INTENT(IN) :: PTIMEC ! Cumulated run time step (s) -! -LOGICAL, INTENT(IN) :: ORECV_LAND -LOGICAL, INTENT(IN) :: ORECV_SEA -LOGICAL, INTENT(IN) :: ORECV_WAVE -! -REAL, DIMENSION(KI), INTENT(OUT) :: PLAND_WTD ! Land water table depth (m) -REAL, DIMENSION(KI), INTENT(OUT) :: PLAND_FWTD ! Land grid-cell fraction of water table rise (-) -REAL, DIMENSION(KI), INTENT(OUT) :: PLAND_FFLOOD ! Land Floodplains fraction (-) -REAL, DIMENSION(KI), INTENT(OUT) :: PLAND_PIFLOOD ! Land Potential flood infiltration (kg/m2/s) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PSEA_SST ! Sea surface temperature (K) -REAL, DIMENSION(KI), INTENT(OUT) :: PSEA_UCU ! Sea u-current stress (Pa) -REAL, DIMENSION(KI), INTENT(OUT) :: PSEA_VCU ! Sea v-current stress (Pa) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PSEAICE_SIT ! Sea-ice Temperature (K) -REAL, DIMENSION(KI), INTENT(OUT) :: PSEAICE_CVR ! Sea-ice cover (-) -REAL, DIMENSION(KI), INTENT(OUT) :: PSEAICE_ALB ! Sea-ice albedo (-) -! -REAL, DIMENSION(KI), INTENT(OUT) :: PWAVE_CHA ! Charnock coefficient (-) -REAL, DIMENSION(KI), INTENT(OUT) :: PWAVE_UCU ! u-current velocity (m/s) -REAL, DIMENSION(KI), INTENT(OUT) :: PWAVE_VCU ! v-current velocity (m/s) -REAL, DIMENSION(KI), INTENT(OUT) :: PWAVE_HS ! Significant wave height (m) -REAL, DIMENSION(KI), INTENT(OUT) :: PWAVE_TP ! Peak period (s) -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -REAL, DIMENSION(KI,1) :: ZREAD -! -INTEGER :: IDATE ! current coupling time step (s) -INTEGER :: IERR ! Error info -INTEGER :: ILUOUT -CHARACTER(LEN=50) :: YCOMMENT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -#ifdef CPLOASIS -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV',0,ZHOOK_HANDLE) -! -!* 1. Initialize : -! ------------ -! -CALL GET_LUOUT(HPROGRAM,ILUOUT) -! -IDATE = INT(PTIMEC) -! -!------------------------------------------------------------------------------- -! -!* 2. Get Land surface variable : -! ------------------------------------ -! -IF(ORECV_LAND)THEN -! -! * Init river input fields -! - ZREAD(:,:) = XUNDEF -! - PLAND_WTD (:) = XUNDEF - PLAND_FWTD (:) = XUNDEF - PLAND_FFLOOD (:) = XUNDEF - PLAND_PIFLOOD(:) = XUNDEF -! -! * Receive river input fields -! - IF(LCPL_GW)THEN -! - YCOMMENT='water table depth' - CALL OASIS_GET(NWTD_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PLAND_WTD(:)=ZREAD(:,1) -! - YCOMMENT='fraction of water table rise' - CALL OASIS_GET(NFWTD_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PLAND_FWTD(:)=ZREAD(:,1) -! - ENDIF -! - IF(LCPL_FLOOD)THEN -! - YCOMMENT='Flood fraction' - CALL OASIS_GET(NFFLOOD_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PLAND_FFLOOD(:)=ZREAD(:,1) -! - YCOMMENT='Potential flood infiltration' - CALL OASIS_GET(NPIFLOOD_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PLAND_PIFLOOD(:)=ZREAD(:,1) -! - WHERE(PLAND_PIFLOOD(:)==0.0)PLAND_FFLOOD(:)=0.0 -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Get Sea variables : -! ----------------------------- -! -! -IF(ORECV_SEA)THEN -! -! * Init ocean input fields -! - ZREAD(:,:) = XUNDEF -! - PSEA_SST (:) = XUNDEF - PSEA_UCU (:) = XUNDEF - PSEA_VCU (:) = XUNDEF -! - PSEAICE_SIT (:) = XUNDEF - PSEAICE_CVR (:) = XUNDEF - PSEAICE_ALB (:) = XUNDEF -! -! * Receive ocean input fields -! - IF(NSEA_SST_ID/=NUNDEF)THEN - YCOMMENT='Sea surface temperature' - CALL OASIS_GET(NSEA_SST_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEA_SST(:)=ZREAD(:,1) - ENDIF -! - IF(NSEA_UCU_ID/=NUNDEF)THEN - YCOMMENT='Sea u-current stress' - CALL OASIS_GET(NSEA_UCU_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEA_UCU(:)=ZREAD(:,1) - ENDIF -! - IF(NSEA_VCU_ID/=NUNDEF)THEN - YCOMMENT='Sea v-current stress' - CALL OASIS_GET(NSEA_VCU_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEA_VCU(:)=ZREAD(:,1) - ENDIF -! - IF(LCPL_SEAICE)THEN -! - YCOMMENT='Sea-ice Temperature' - CALL OASIS_GET(NSEAICE_SIT_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEAICE_SIT(:)=ZREAD(:,1) -! - YCOMMENT='Sea-ice cover' - CALL OASIS_GET(NSEAICE_CVR_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEAICE_CVR(:)=ZREAD(:,1) -! - YCOMMENT='Sea-ice albedo' - CALL OASIS_GET(NSEAICE_ALB_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PSEAICE_ALB(:)=ZREAD(:,1) -! - ENDIF -! -ENDIF -!------------------------------------------------------------------------------- -! -!* 4. Get Wave variables : -! ----------------------------- -! -! -IF(ORECV_WAVE)THEN -! -! * Init ocean input fields -! - ZREAD(:,:) = XUNDEF -! - PWAVE_CHA (:) = XUNDEF - PWAVE_UCU (:) = XUNDEF - PWAVE_VCU (:) = XUNDEF - PWAVE_HS (:) = XUNDEF - PWAVE_TP (:) = XUNDEF -! -! * Receive wave input fields -! - IF(NWAVE_CHA_ID/=NUNDEF)THEN - YCOMMENT='Charnock coefficient' - CALL OASIS_GET(NWAVE_CHA_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PWAVE_CHA(:)=ZREAD(:,1) - ENDIF -! - IF(NWAVE_UCU_ID/=NUNDEF)THEN - YCOMMENT='u-current velocity' - CALL OASIS_GET(NWAVE_UCU_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PWAVE_UCU(:)=ZREAD(:,1) - ENDIF -! - IF(NWAVE_VCU_ID/=NUNDEF)THEN - YCOMMENT='v-current velocity' - CALL OASIS_GET(NWAVE_VCU_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PWAVE_VCU(:)=ZREAD(:,1) - ENDIF -! - IF(NWAVE_HS_ID/=NUNDEF)THEN - YCOMMENT='Significant wave height' - CALL OASIS_GET(NWAVE_HS_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PWAVE_HS(:)=ZREAD(:,1) - ENDIF -! - IF(NWAVE_TP_ID/=NUNDEF)THEN - YCOMMENT='Peak period' - CALL OASIS_GET(NWAVE_TP_ID,IDATE,ZREAD(:,:),IERR) - CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT) - PWAVE_TP(:)=ZREAD(:,1) - ENDIF -! -ENDIF -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE CHECK_RECV(KLUOUT,KERR,HCOMMENT) -! -USE MODI_ABOR1_SFX -! -IMPLICIT NONE -! -INTEGER, INTENT(IN) :: KLUOUT -INTEGER, INTENT(IN) :: KERR -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV:CHECK_RECV',0,ZHOOK_HANDLE) -! -IF (KERR/=OASIS_OK.AND.KERR<OASIS_RECVD) THEN - WRITE(KLUOUT,'(A,I4)')'Return OASIS code receiving '//TRIM(HCOMMENT)//' : ',KERR - CALL ABOR1_SFX('SFX_OASIS_RECV: problem receiving '//TRIM(HCOMMENT)//' from OASIS') -ENDIF -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV:CHECK_RECV',1,ZHOOK_HANDLE) -! -END SUBROUTINE CHECK_RECV -! -!------------------------------------------------------------------------------- -#endif -!------------------------------------------------------------------------------- -! -END SUBROUTINE SFX_OASIS_RECV diff --git a/src/OASIS/SURFEX/sfx_oasis_send.F90 b/src/OASIS/SURFEX/sfx_oasis_send.F90 deleted file mode 100644 index 6d20b477c..000000000 --- a/src/OASIS/SURFEX/sfx_oasis_send.F90 +++ /dev/null @@ -1,416 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!######### -SUBROUTINE SFX_OASIS_SEND(KLUOUT,KI,KDATE,OSEND_LAND,OSEND_LAKE,OSEND_SEA,OSEND_WAVE, & - PLAND_RUNOFF,PLAND_DRAIN,PLAND_CALVING, & - PLAND_SRCFLOOD, & - PLAKE_EVAP,PLAKE_RAIN,PLAKE_SNOW,PLAKE_WATF, & - PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET,PSEA_WIND, & - PSEA_FWSM,PSEA_EVAP,PSEA_RAIN,PSEA_SNOW,PSEA_EVPR, & - PSEA_WATF,PSEA_PRES,PSEAICE_HEAT,PSEAICE_SNET, & - PSEAICE_EVAP,PWAVE_U10,PWAVE_V10 ) -!########################################### -! -!!**** *SFX_OASIS_SEND* - Send coupling fields -!! -!! PURPOSE -!! ------- -!! -!! Attention : all fields are sent in Pa, m/s, W/m2 or kg/m2/s -!! -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! B. Decharme *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/2013 -!! Modified 11/2014 : J. Pianezze - add wave coupling parameters -!! and surface pressure for ocean coupling -!! 10/2016 B. Decharme : bug surface/groundwater coupling -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODN_SFX_OASIS, ONLY : XTSTEP_CPL_SEA, XTSTEP_CPL_WAVE, XTSTEP_CPL_LAKE, & - XTSTEP_CPL_LAND -! -USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF -! -USE MODD_SFX_OASIS -! -USE MODI_GET_LUOUT -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -#ifdef CPLOASIS -USE MOD_OASIS -#endif -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -INTEGER, INTENT(IN) :: KLUOUT -INTEGER, INTENT(IN) :: KI ! number of points -INTEGER, INTENT(IN) :: KDATE ! current coupling time step (s) -LOGICAL, INTENT(IN) :: OSEND_LAND -LOGICAL, INTENT(IN) :: OSEND_LAKE -LOGICAL, INTENT(IN) :: OSEND_SEA -LOGICAL, INTENT(IN) :: OSEND_WAVE -! -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_RUNOFF ! Cumulated Surface runoff (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_DRAIN ! Cumulated Deep drainage (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_CALVING ! Cumulated Calving flux (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAND_SRCFLOOD ! Cumulated flood freshwater flux (kg/m2) -! -REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_EVAP ! Cumulated Evaporation (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_RAIN ! Cumulated Rainfall rate (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_SNOW ! Cumulated Snowfall rate (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_WATF ! Cumulated freshwater flux (kg/m2) -! -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSU ! Cumulated zonal wind stress (Pa.s) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSV ! Cumulated meridian wind stress (Pa.s) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_HEAT ! Cumulated Non solar net heat flux (J/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SNET ! Cumulated Solar net heat flux (J/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_WIND ! Cumulated 10m wind speed (m) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSM ! Cumulated wind stress (Pa.s) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVAP ! Cumulated Evaporation (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_RAIN ! Cumulated Rainfall rate (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SNOW ! Cumulated Snowfall rate (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVPR ! Evap. - Precip. rate (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_WATF ! Cumulated freshwater flux (kg/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEA_PRES ! Cumulated Surface pressure (Pa.s) -! -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux (J/m2) -REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_EVAP ! Cumulated Sea-ice sublimation (kg/m2) -! -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_U10 ! -REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_V10 ! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -REAL, DIMENSION(KI,1) :: ZWRITE ! Mean flux send to OASIS (Pa, m/s, W/m2 or kg/m2/s) -! -CHARACTER(LEN=50) :: YCOMMENT -INTEGER :: IERR ! Error info -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -#ifdef CPLOASIS -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND',0,ZHOOK_HANDLE) -! -!* 1. Initialize : -! ------------ -! -ZWRITE(:,:) = XUNDEF -! -!------------------------------------------------------------------------------- -! -!* 2. Send land fields to OASIS: -! -------------------------- -! -IF(OSEND_LAND)THEN -! -! * Send river output fields -! - YCOMMENT='Surface runoff over land' - CALL OUTVAR(PLAND_RUNOFF,XTSTEP_CPL_LAND,ZWRITE(:,1)) - CALL OASIS_PUT(NRUNOFF_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) -! - YCOMMENT='Deep drainage over land' - CALL OUTVAR(PLAND_DRAIN,XTSTEP_CPL_LAND,ZWRITE(:,1)) - CALL OASIS_PUT(NDRAIN_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) -! - IF(LCPL_CALVING)THEN - YCOMMENT='calving flux over land' - CALL OUTVAR(PLAND_CALVING,XTSTEP_CPL_LAND,ZWRITE(:,1)) - CALL OASIS_PUT(NCALVING_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(LCPL_FLOOD)THEN - YCOMMENT='flood freshwater flux over land (P-E-I)' - CALL OUTVAR(PLAND_SRCFLOOD,XTSTEP_CPL_LAND,ZWRITE(:,1)) - CALL OASIS_PUT(NSRCFLOOD_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Send lake fields to OASIS : -! -------------------------- -IF(OSEND_LAKE)THEN -! -! * Send output fields (in kg/m2/s) -! - IF(NLAKE_EVAP_ID/=NUNDEF)THEN - YCOMMENT='Evaporation over lake' - CALL OUTVAR(PLAKE_EVAP,XTSTEP_CPL_LAKE,ZWRITE(:,1)) - CALL OASIS_PUT(NLAKE_EVAP_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NLAKE_RAIN_ID/=NUNDEF)THEN - YCOMMENT='Rainfall rate over lake' - CALL OUTVAR(PLAKE_RAIN,XTSTEP_CPL_LAKE,ZWRITE(:,1)) - CALL OASIS_PUT(NLAKE_RAIN_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NLAKE_SNOW_ID/=NUNDEF)THEN - YCOMMENT='Snowfall rate over lake' - CALL OUTVAR(PLAKE_SNOW,XTSTEP_CPL_LAKE,ZWRITE(:,1)) - CALL OASIS_PUT(NLAKE_SNOW_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NLAKE_WATF_ID/=NUNDEF)THEN - YCOMMENT='Freshwater flux over lake (P-E)' - CALL OUTVAR(PLAKE_WATF,XTSTEP_CPL_LAKE,ZWRITE(:,1)) - CALL OASIS_PUT(NLAKE_WATF_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF - - -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 4. Send sea fields to OASIS : -! -------------------------- -! -IF(OSEND_SEA)THEN -! -! * Send sea output fields (in Pa, m/s, W/m2 or kg/m2/s) -! - IF(NSEA_FWSU_ID/=NUNDEF)THEN - YCOMMENT='zonal wind stress over sea' - CALL OUTVAR(PSEA_FWSU,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_FWSU_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_FWSV_ID/=NUNDEF)THEN - YCOMMENT='meridian wind stress over sea' - CALL OUTVAR(PSEA_FWSV,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_FWSV_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_HEAT_ID/=NUNDEF)THEN - YCOMMENT='Non solar net heat flux over sea' - CALL OUTVAR(PSEA_HEAT,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_HEAT_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_SNET_ID/=NUNDEF)THEN - YCOMMENT='Solar net heat flux over sea' - CALL OUTVAR(PSEA_SNET,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_SNET_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_WIND_ID/=NUNDEF)THEN - YCOMMENT='10m wind speed over sea' - CALL OUTVAR(PSEA_WIND,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_WIND_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_FWSM_ID/=NUNDEF)THEN - YCOMMENT='wind stress over sea' - CALL OUTVAR(PSEA_FWSM,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_FWSM_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_EVAP_ID/=NUNDEF)THEN - YCOMMENT='Evaporation over sea' - CALL OUTVAR(PSEA_EVAP,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_EVAP_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_RAIN_ID/=NUNDEF)THEN - YCOMMENT='Rainfall rate over sea' - CALL OUTVAR(PSEA_RAIN,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_RAIN_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_SNOW_ID/=NUNDEF)THEN - YCOMMENT='Snowfall rate over sea' - CALL OUTVAR(PSEA_SNOW,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_SNOW_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_EVPR_ID/=NUNDEF)THEN - YCOMMENT='Evap. - Precip. rate over sea' - CALL OUTVAR(PSEA_EVPR,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_EVPR_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_WATF_ID/=NUNDEF)THEN - YCOMMENT='Freshwater flux over sea (P-E)' - CALL OUTVAR(PSEA_WATF,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_WATF_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEA_PRES_ID/=NUNDEF)THEN - YCOMMENT='Surface pressure' - CALL OUTVAR(PSEA_PRES,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEA_PRES_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! -! * Sea-ice output fields (in W/m2 or kg/m2/s) -! - IF(LCPL_SEAICE)THEN -! - IF(NSEAICE_HEAT_ID/=NUNDEF)THEN - YCOMMENT='Sea-ice non solar net heat flux over sea-ice' - CALL OUTVAR(PSEAICE_HEAT,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEAICE_HEAT_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEAICE_SNET_ID/=NUNDEF)THEN - YCOMMENT='Sea-ice solar net heat flux over sea-ice' - CALL OUTVAR(PSEAICE_SNET,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEAICE_SNET_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NSEAICE_EVAP_ID/=NUNDEF)THEN - YCOMMENT='Sea-ice sublimation over sea-ice' - CALL OUTVAR(PSEAICE_EVAP,XTSTEP_CPL_SEA,ZWRITE(:,1)) - CALL OASIS_PUT(NSEAICE_EVAP_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - ENDIF -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 5. Send wave fields to OASIS : -! -------------------------- -IF(OSEND_WAVE)THEN -! -! * Send output fields -! - IF(NWAVE_U10_ID/=NUNDEF)THEN - YCOMMENT='10m u-wind speed' - ZWRITE(:,1) = PWAVE_U10(:) - CALL OASIS_PUT(NWAVE_U10_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! - IF(NWAVE_V10_ID/=NUNDEF)THEN - YCOMMENT='10m v-wind speed' - ZWRITE(:,1) = PWAVE_V10(:) - CALL OASIS_PUT(NWAVE_V10_ID,KDATE,ZWRITE(:,:),IERR) - CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) - ENDIF -! -ENDIF -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -CONTAINS -!------------------------------------------------------------------------------- -! -SUBROUTINE CHECK_SFX_SEND(KLUOUT,KERR,HCOMMENT,PWRITE) -! -USE MODI_ABOR1_SFX -! -IMPLICIT NONE -! -INTEGER, INTENT(IN) :: KLUOUT -INTEGER, INTENT(IN) :: KERR -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT -! -REAL, DIMENSION(:), INTENT(OUT):: PWRITE -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:CHECK_SFX_SEND',0,ZHOOK_HANDLE) -! -PWRITE(:) = XUNDEF -! -IF (KERR/=OASIS_OK.AND.KERR<OASIS_SENT) THEN - WRITE(KLUOUT,'(A,I4)')'Return OASIS code from sending '//TRIM(HCOMMENT)//' : ',KERR - CALL ABOR1_SFX('SFX_OASIS_SEND: problem sending '//TRIM(HCOMMENT)) -ENDIF -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:CHECK_SFX_SEND',1,ZHOOK_HANDLE) -! -END SUBROUTINE CHECK_SFX_SEND -! -!------------------------------------------------------------------------------- -! -SUBROUTINE OUTVAR(PIN,PDIV,PWRITE) -! -IMPLICIT NONE -! -REAL, DIMENSION(:), INTENT(IN) :: PIN -REAL, INTENT(IN) :: PDIV -! -REAL, DIMENSION(:), INTENT(OUT):: PWRITE -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:OUTVAR',0,ZHOOK_HANDLE) -! -WHERE(PIN(:)/=XUNDEF) - PWRITE(:)=PIN(:)/PDIV -ELSEWHERE - PWRITE(:)=XUNDEF -ENDWHERE -! -IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:OUTVAR',1,ZHOOK_HANDLE) -! -END SUBROUTINE OUTVAR -! -!------------------------------------------------------------------------------- -#endif -!------------------------------------------------------------------------------- -! -END SUBROUTINE SFX_OASIS_SEND diff --git a/src/OASIS/SURFEX/write_lcover.F90 b/src/OASIS/SURFEX/write_lcover.F90 deleted file mode 100644 index 32a1be568..000000000 --- a/src/OASIS/SURFEX/write_lcover.F90 +++ /dev/null @@ -1,99 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE WRITE_LCOVER(HSELECT,HPROGRAM,OCOVER) -! ################################ -! -!!**** *READ_LCOVER* - routine to write a file for -!! physiographic data file of model _n -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to write the list of covers to a file in parallel using MPI -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! M. Moge *LA - CNRS* -!! -!! MODIFICATIONS -!! ------------- -!! J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -#ifdef MNH_PARALLEL -USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD -#endif -! -USE MODD_DATA_COVER_PAR, ONLY : JPCOVER -! -USE MODI_WRITE_SURF -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -#ifdef MNH_PARALLEL -#ifndef NOMPI -INCLUDE "mpif.h" -#endif -#endif -! -!* 0.1 Declarations of arguments -! ------------------------- -! - CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program -LOGICAL, DIMENSION(JPCOVER) :: OCOVER ! list of covers -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: IRESP ! Error code after reading -CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read -CHARACTER(LEN=100):: YCOMMENT ! Comment string -LOGICAL, DIMENSION(JPCOVER) :: GCOVER ! tmp list of covers -REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: IINFO -!------------------------------------------------------------------------------- -! -! -!* ascendant compatibility -IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',0,ZHOOK_HANDLE) -#ifdef MNH_PARALLEL -#ifndef NOMPI -CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO) -OCOVER(:)=GCOVER(:) -#endif -#endif -YRECFM='COVER_LIST' -YCOMMENT='(LOGICAL LIST)' -CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,OCOVER(:),IRESP,HCOMMENT=YCOMMENT,HDIR='-') -! -IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE WRITE_LCOVER diff --git a/src/OASIS/SURFEX/writesurf_seafluxn.F90 b/src/OASIS/SURFEX/writesurf_seafluxn.F90 deleted file mode 100644 index 69bb0a844..000000000 --- a/src/OASIS/SURFEX/writesurf_seafluxn.F90 +++ /dev/null @@ -1,226 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -! ######### - SUBROUTINE WRITESURF_SEAFLUX_n (HSELECT, O, OR, S, HPROGRAM) -! ######################################## -! -!!**** *WRITE_SEAFLUX_n* - writes SEAFLUX fields -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/2003 -!! Modified 01/2014 : S. Senesi : handle seaice scheme -!! S. Belamari 03/2014 Include sea surface salinity XSSS -!! R. Séférian 01/2015 : introduce interactive ocean surface albedo -!! S. Senesi 08/2015 : fix units in some HCOMMENTs -!! Modified 03/2014 : M.N. Bouin ! possibility of wave parameters -!! ! from external source -!! Modified 11/2014 : J. Pianezze ! add currents and charnock coefficient -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -! -USE MODD_OCEAN_n, ONLY : OCEAN_t -USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -! -USE MODD_SFX_OASIS, ONLY : LCPL_WAVE, LCPL_SEA -! -USE MODI_WRITE_SURF -USE MODI_WRITESURF_OCEAN_n -USE MODI_WRITESURF_SEAICE_n -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! - CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT -! -TYPE(OCEAN_t), INTENT(INOUT) :: O -TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling - -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: JMTH, INMTH - CHARACTER(LEN=2 ) :: YMTH -! -INTEGER :: IRESP ! IRESP : return-code if a problem appears - CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read - CHARACTER(LEN=100):: YCOMMENT ! Comment string -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -! -IF (LHOOK) CALL DR_HOOK('WRITESURF_SEAFLUX_N',0,ZHOOK_HANDLE) -! - CALL WRITESURF_OCEAN_n(HSELECT, O, OR, HPROGRAM) -! -!* 2. Sea-ice prognostic fields: -! -------------------------- -! -!* flag to tell if Sea Ice model is used -! -YCOMMENT='flag to handle sea ice cover' - CALL WRITE_SURF(HSELECT, HPROGRAM,'HANDLE_SIC',S%LHANDLE_SIC,IRESP,YCOMMENT) -! -IF (S%LHANDLE_SIC) CALL WRITESURF_SEAICE_n(HSELECT, S, HPROGRAM) -! -! -!* 3. Prognostic fields: -! ----------------- -! -!* water temperature -! -IF(S%LINTERPOL_SST)THEN -! - INMTH=SIZE(S%XSST_MTH,2) -! - DO JMTH=1,INMTH - WRITE(YMTH,'(I2)') (JMTH-1) - YRECFM='SST_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH))) - YCOMMENT='SST at month t'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))//' (K)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XSST_MTH(:,JMTH),IRESP,HCOMMENT=YCOMMENT) - ENDDO -! -ENDIF -! -YRECFM='SST' -YCOMMENT='SST (K)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XSST(:),IRESP,HCOMMENT=YCOMMENT) -! -!------------------------------------------------------------------------------- -! -!* 4. Semi-prognostic fields: -! ---------------------- -! -!* roughness length -! -YRECFM='Z0SEA' -YCOMMENT='Z0SEA (m)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XZ0(:),IRESP,HCOMMENT=YCOMMENT) - ! -!* significant height -! -YRECFM='HS' -YCOMMENT='HS (m)' - CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XHS(:),IRESP,HCOMMENT=YCOMMENT) -! -!* peak period -! -YRECFM='TP' -YCOMMENT='TP (s)' - CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XTP(:),IRESP,HCOMMENT=YCOMMENT) -! -! -IF (LCPL_WAVE) THEN - ! - !* Charnock coefficient - ! - YRECFM='CHARN' - YCOMMENT='CHARN (-)' - CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XCHARN(:),IRESP,HCOMMENT=YCOMMENT) - ! -END IF -! -IF (LCPL_WAVE .OR. LCPL_SEA) THEN - ! - !* u-current velocity - ! - YRECFM='UMER' - YCOMMENT='UMER (m/s)' - CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XUMER(:),IRESP,HCOMMENT=YCOMMENT) - ! - !* v-current velocity - ! - YRECFM='VMER' - YCOMMENT='VMER (m/s)' - CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XVMER(:),IRESP,HCOMMENT=YCOMMENT) - ! -ENDIF -! -!* sea surface salinity -! -IF(S%LINTERPOL_SSS)THEN - ! - INMTH=SIZE(S%XSSS_MTH,2) - ! - DO JMTH=1,INMTH - WRITE(YMTH,'(I2)') (JMTH-1) - YRECFM='SSS_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH))) - YCOMMENT='Sea Surface Salinity at month t'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))//' (psu)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XSSS_MTH(:,JMTH),IRESP,HCOMMENT=YCOMMENT) - ENDDO -! -ENDIF -! -YRECFM='SSS' -YCOMMENT='Sea Surface Salinity (psu)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XSSS(:),IRESP,HCOMMENT=YCOMMENT) -! -! -!* ocean surface albedo (direct and diffuse fraction) -! -IF(S%CSEA_ALB=='RS14')THEN -! - YRECFM='OSA_DIR' - YCOMMENT='direct ocean surface albedo (-)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XDIR_ALB(:),IRESP,HCOMMENT=YCOMMENT) -! - YRECFM='OSA_SCA' - YCOMMENT='diffuse ocean surface albedo (-)' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XSCA_ALB(:),IRESP,HCOMMENT=YCOMMENT) -! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 5. Time -! ---- -! -YRECFM='DTCUR' -YCOMMENT='s' - CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%TTIME,IRESP,HCOMMENT=YCOMMENT) -! -IF (LHOOK) CALL DR_HOOK('WRITESURF_SEAFLUX_N',1,ZHOOK_HANDLE) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE WRITESURF_SEAFLUX_n diff --git a/src/OASIS/SURFEX/get_sfx_wave.F90 b/src/SURFEX/get_sfx_wave.F90 similarity index 100% rename from src/OASIS/SURFEX/get_sfx_wave.F90 rename to src/SURFEX/get_sfx_wave.F90 diff --git a/src/OASIS/SURFEX/put_sfx_wave.F90 b/src/SURFEX/put_sfx_wave.F90 similarity index 100% rename from src/OASIS/SURFEX/put_sfx_wave.F90 rename to src/SURFEX/put_sfx_wave.F90 -- GitLab