diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 deleted file mode 100644 index 0735f4cca3354c4b6c72ba157ebfa6fe77bcab9e..0000000000000000000000000000000000000000 --- a/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 +++ /dev/null @@ -1,929 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 soil 2006/10/27 16:02:47 -!----------------------------------------------------------------- -! ########## -MODULE MODI_GROUND_PARAM_n -! ########## -! -INTERFACE -! - SUBROUTINE GROUND_PARAM_n( PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, & - PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD ) -! -!* surface fluxes -! -------------- -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor (m/s*kg/kg) -REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar (m/s*kg/kg) - ! flux of chemical var. (ppp.m/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2 (m/s*kg/kg) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU ! surface fluxes of horizontal -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV ! momentum in x and y directions (m2/s2) -! -!* Radiative parameters -! -------------------- -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! direct albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each spectral band (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PEMIS ! surface emissivity (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PTSRAD ! surface radiative temperature (K) -! -END SUBROUTINE GROUND_PARAM_n -! -END INTERFACE -! -END MODULE MODI_GROUND_PARAM_n -! -! ###################################################################### - SUBROUTINE GROUND_PARAM_n( PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, & - PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD ) -! ####################################################################### -! -! -!!**** *GROUND_PARAM* -!! -!! PURPOSE -!! ------- -! Monitor to call the externalized surface -! -!!** METHOD -!! ------ -! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! Noilhan and Planton (1989) -!! -!! AUTHOR -!! ------ -!! S. Belair * Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/03/95 -!! (J.Stein) 25/10/95 add the rain flux computation at the ground -!! and the lbc -!! (J.Stein) 15/11/95 include the strong slopes cases -!! (J.Stein) 06/02/96 bug correction for the precipitation flux writing -!! (J.Stein) 20/05/96 set the right IGRID value for the rain rate -!! (J.Viviand) 04/02/97 add cold and convective precipitation rate -!! (J.Stein) 22/06/97 use the absolute pressure -!! (V.Masson) 09/07/97 add directional z0 computations and RESA correction -!! (V.Masson) 13/02/98 merge the ISBA and TSZ0 routines, -!! rename the routine as a monitor, called by PHYS_PARAMn -!! add the town parameterization -!! recomputes z0 where snow is. -!! pack and unpack of 2D fields into 1D fields -!! (V.Masson) 04/01/00 removes the TSZ0 case -! (F.Solmon/V.Masson) adapatation for patch approach -! modification of internal subroutine pack/ allocation in function -! of patch indices -! calling of isba for each defined patch -! averaging of patch fluxes to get nat fluxes -! (P. Tulet/G.Guenais) 04/02/01 separation of vegetatives class -! for friction velocity and -! aerodynamical resistance -! (S Donnier) 09/12/02 add specific humidity at 2m for diagnostic -! (V.Masson) 01/03/03 externalisation of the surface schemes! -! (P.Tulet ) 01/11/03 externalisation of the surface chemistry! -!! (D.Gazen) 01/12/03 change emissions handling for surf. externalization -!! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n -! (J.escobar) 02/2014 add Forefire coupling -!! (G.Delautier) 06/2016 phasage surfex 8 -!! (B.Vie) 2016 LIMA -!! (J.Pianezze) 08/2016 add send/recv oasis functions -!! (M.Leriche) 24/03/16 remove flag for chemical surface fluxes -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -#ifdef CPLOASIS -USE MODD_IO_SURF_MNH, ONLY : NLUOUT -USE MODI_GET_HALO -USE MODI_MNH_OASIS_RECV -USE MODI_MNH_OASIS_SEND -USE MODD_SFX_OASIS, ONLY : LOASIS -USE MODD_DYN, ONLY : XSEGLEN -#endif -! -USE MODD_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO -USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF -USE MODD_DYN_n, ONLY : XTSTEP -USE MODD_CH_MNHC_n, ONLY : LUSECHEM -USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET -USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ -USE MODD_DIM_n, ONLY : NKMAX -USE MODD_GRID_n, ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE, XSINSLOPE, XZS -USE MODD_REF_n, ONLY : XRHODREF -USE MODD_CONF_n, ONLY : NRR -USE MODD_PARAM_n, ONLY : CDCONV,CCLOUD, CRAD -USE MODD_PRECIP_n, ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH -USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV -USE MODD_CONF, ONLY : LCARTESIAN, CPROGRAM -USE MODD_TIME_n, ONLY : TDTCUR -USE MODD_RADIATIONS_n, ONLY : XFLALWD, XCCO2, XTSIDER, & - XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, & - XZENITH, XAZIM, XAER -USE MODD_NSV -USE MODD_GRID, ONLY : XLON0, XRPK, XBETA -USE MODD_PARAM_ICE, ONLY : LSEDIC -USE MODD_PARAM_C2R2, ONLY : LSEDC -USE MODD_DIAG_IN_RUN -USE MODD_DUST, ONLY : LDUST -USE MODD_SALT, ONLY : LSALT -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_CSTS_DUST, ONLY : XMOLARWEIGHT_DUST -USE MODD_CSTS_SALT, ONLY : XMOLARWEIGHT_SALT -! -USE MODI_NORMAL_INTERPOL -USE MODI_ROTATE_WIND -USE MODI_SHUMAN -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_COUPLING_SURF_ATM_n -USE MODI_DIAG_SURF_ATM_n -USE MODD_MNH_SURFEX_n -! -USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -#ifdef MNH_FOREFIRE -!** MODULES FOR FOREFIRE **! -USE MODD_FOREFIRE -USE MODD_FOREFIRE_n -USE MODI_COUPLING_FOREFIRE_n -#endif -! -USE MODD_TIME_n -USE MODD_TIME -USE MODI_TEMPORAL_DIST -! -USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC -! -IMPLICIT NONE -! -! -! -!* 0.1 declarations of arguments -! -!* surface fluxes -! -------------- -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor (m/s*kg/kg) -REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar (m/s*kg/kg) - ! flux of chemical var. (ppp.m/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2 (m/s*kg/kg) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU ! surface fluxes of horizontal -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV ! momentum in x and y directions (m2/s2) -! -!* Radiative parameters -! -------------------- -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! direct albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each spectral band (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PEMIS ! surface emissivity (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PTSRAD ! surface radiative temperature (K) -! -! -!------------------------------------------------------------------------------- -! -! -! -!* 0.2 declarations of local variables -! ------------------------------- -! -! -!* Atmospheric variables -! --------------------- -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV ! vapor mixing ratio -! -! suffix 'A' stands for atmospheric variable at first model level -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZZREF ! Forcing height -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTA ! Temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRVA ! vapor mixing ratio -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZQA ! humidity (kg/m3) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPA ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPS ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNA ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNS ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTHA ! potential temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRAIN ! liquid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSNOW ! solid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTSUN ! solar time (s since midnight) -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZUA ! u component of the wind -! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZVA ! v component of the wind -! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZU ! zonal wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZV ! meridian wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZWIND ! wind parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRHOA ! air density -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZDIR ! wind direction (rad from N clockwise) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFU ! zonal momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFV ! meridian momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZCO2 ! CO2 concentration (kg/kg) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZALFA ! angle between the wind -! ! and the x axis -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZU2D ! u and v component of the -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZV2D ! wind at mass point -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTH ! Turbulent flux of heat -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTQ ! Turbulent flux of water -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFCO2 ! Turbulent flux of CO2 -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NSV):: ZSFTS! Turbulent flux of scalar - -! -!* Dimensions -! ---------- -! -INTEGER :: IIB ! physical boundary -INTEGER :: IIE ! physical boundary -INTEGER :: IJB ! physical boundary -INTEGER :: IJE ! physical boundary -INTEGER :: IKB ! physical boundary -INTEGER :: IKE ! physical boundary -INTEGER :: IKU ! vertical array sizes -! -INTEGER :: JLAYER ! loop counter -INTEGER :: JSV ! loop counter -INTEGER :: JI,JJ,JK ! loop index -! -INTEGER :: IDIM1 ! X physical dimension -INTEGER :: IDIM2 ! Y physical dimension -INTEGER :: IDIM1D! total physical dimension -INTEGER :: IKRAD -! -!* Arrays put in 1D vectors -! ------------------------ -! -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSUN ! solar time -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZENITH ! zenithal angle -REAL, DIMENSION(:), ALLOCATABLE :: ZP_AZIM ! azimuthal angle -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZREF ! forcing height -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZS ! orography -REAL, DIMENSION(:), ALLOCATABLE :: ZP_U ! zonal wind -REAL, DIMENSION(:), ALLOCATABLE :: ZP_V ! meridian wind -REAL, DIMENSION(:), ALLOCATABLE :: ZP_QA ! air humidity (kg/m3) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TA ! air temperature -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RHOA ! air density -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SV ! scalar at first atmospheric level -REAL, DIMENSION(:), ALLOCATABLE :: ZP_CO2 ! air CO2 concentration -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RAIN ! liquid precipitation -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SNOW ! solid precipitation -REAL, DIMENSION(:), ALLOCATABLE :: ZP_LW ! incoming longwave -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_SW ! direct incoming shortwave -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_SW ! diffuse incoming shortwave -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PS ! surface pressure -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PA ! pressure at first atmospheric level - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFTQ ! water vapor flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFTH ! potential temperature flux -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SFTS ! scalar flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFCO2 ! CO2 flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFU ! zonal momentum flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFV ! meridian momentum flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSRAD ! radiative surface temperature -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB ! direct albedo -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB ! diffuse albedo -REAL, DIMENSION(:), ALLOCATABLE :: ZP_EMIS ! emissivity - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSURF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0 -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0H -REAL, DIMENSION(:), ALLOCATABLE :: ZP_QSURF - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PET_A_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEQ_A_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PET_B_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEQ_B_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RN ! net radiation (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_H ! sensible heat flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_LE ! latent heat flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_GFLUX ! ground flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_T2M ! Air temperature at 2 meters (K) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Q2M ! Air humidity at 2 meters (kg/kg) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_HU2M ! Air relative humidity at 2 meters (-) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZON10M ! zonal Wind at 10 meters (m/s) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_MER10M ! meridian Wind at 10 meters (m/s) -TYPE(LIST_ll), POINTER :: TZFIELDSURF_ll ! list of fields to exchange -INTEGER :: IINFO_ll ! return code of parallel routine -! -REAL :: ZTIMEC -! -!------------------------------------------------------------------------------- -! -! -IKB= 1+JPVEXT -IKU=NKMAX + 2* JPVEXT -IKE=IKU-JPVEXT -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -! -PSFTH = XUNDEF -PSFRV = XUNDEF -PSFSV = XUNDEF -PSFCO2 = XUNDEF -PSFU = XUNDEF -PSFV = XUNDEF -PDIR_ALB = XUNDEF -PSCA_ALB = XUNDEF -PEMIS = XUNDEF -PTSRAD = XUNDEF -! -! -!------------------------------------------------------------------------------- -! -!* 1. CONVERSION OF THE ATMOSPHERIC VARIABLES -! --------------------------------------- -! -! 1.1 water vapor -! ----------- - -! -ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU)) -! -IF(NRR>0) THEN - ZRV(:,:,:)=XRT(:,:,:,1) -ELSE - ZRV(:,:,:)=0. -END IF -! -! 1.2 Horizontal wind direction (rad from N clockwise) -! ------------------------- -! -ZU2D(:,:,:)=MXF(XUT(:,:,IKB:IKB)) -ZV2D(:,:,:)=MYF(XVT(:,:,IKB:IKB)) -! -!* angle between Y axis and wind (rad., clockwise) -! -ZALFA = 0. -WHERE(ZU2D(:,:,1)/=0. .OR. ZV2D(:,:,1)/=0.) - ZALFA(:,:)=ATAN2(ZU2D(:,:,1),ZV2D(:,:,1)) -END WHERE -WHERE(ZALFA(:,:)<0.) ZALFA(:,:) = ZALFA(:,:) + 2. * XPI -! -!* angle between North and wind (rad., clockwise) -! -IF (.NOT. LCARTESIAN) THEN - ZDIR = ( (XRPK*(XLON(:,:)-XLON0)) - XBETA ) * XPI/180. + ZALFA -ELSE - ZDIR = - XBETA * XPI/180. + ZALFA -END IF -! -! -! 1.3 Rotate the wind -! --------------- -! -CALL ROTATE_WIND(XUT,XVT,XWT, & - XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE,XSINSLOPE, & - XDXX,XDYY,XDZZ, & - ZUA,ZVA ) - -! -! 1.4 zonal and meridian components of the wind parallel to the slope -! --------------------------------------------------------------- -! -ZWIND(:,:) = SQRT( ZUA**2 + ZVA**2 ) -! -ZU(:,:) = ZWIND(:,:) * SIN(ZDIR) -ZV(:,:) = ZWIND(:,:) * COS(ZDIR) -! -! 1.5 Horizontal interpolation the thermodynamic fields -! ------------------------------------------------- -! -CALL NORMAL_INTERPOL(XTHT,ZRV,XPABST, & - XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE,XSINSLOPE, & - XDXX,XDYY,XDZZ, & - ZTHA,ZRVA,ZEXNA ) -! -DEALLOCATE(ZRV) -! -! -! 1.6 Pressure and Exner function -! --------------------------- -! -! -ZPA(:,:) = XP00 * ZEXNA(:,:) **(XCPD/XRD) -! -ZEXNS(:,:) = 0.5 * ( (XPABST(:,:,IKB-1)/XP00)**(XRD/XCPD) & - +(XPABST(:,:,IKB )/XP00)**(XRD/XCPD) & - ) -ZPS(:,:) = XP00 * ZEXNS(:,:) **(XCPD/XRD) -! -! 1.7 humidity in kg/m3 from the mixing ratio -! --------------------------------------- -! -! -ZQA(:,:) = ZRVA(:,:) * XRHODREF(:,:,IKB) -! -! -! 1.8 Temperature from the potential temperature -! ------------------------------------------ -! -! -ZTA(:,:) = ZTHA(:,:) * ZEXNA(:,:) -! -! -! 1.9 Air density -! ----------- -! -ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ & - (1. + ZRVA(:,:)))) -! -! -! 1.10 Precipitations -! -------------- -! -ZRAIN=0. -ZSNOW=0. -IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN - IF (( CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC) .OR. & - ( CCLOUD=='LIMA' .AND. MSEDC)) THEN - ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW - ELSE - ZRAIN = ZRAIN + XINPRR * XRHOLW - END IF -END IF -IF (CDCONV == 'KAFR') THEN - ZRAIN = ZRAIN + (XPRCONV - XPRSCONV) * XRHOLW - ZSNOW = ZSNOW + XPRSCONV * XRHOLW -END IF -IF( NRR >= 5 .AND. SIZE(XINPRS)>0 ) ZSNOW = ZSNOW + XINPRS * XRHOLW -IF( NRR >= 6 .AND. SIZE(XINPRG)>0 ) ZSNOW = ZSNOW + XINPRG * XRHOLW -IF( NRR >= 7 .AND. SIZE(XINPRH)>0 ) ZSNOW = ZSNOW + XINPRH * XRHOLW -! -! -! 1.11 Solar time -! ---------- -! -IF (.NOT. LCARTESIAN) THEN - ZTSUN(:,:) = MOD(TDTCUR%TIME -XTSIDER*3600. +XLON(:,:)*240., XDAY) -ELSE - ZTSUN(:,:) = MOD(TDTCUR%TIME -XTSIDER*3600. +XLON0 *240., XDAY) -END IF -! -! 1.12 Forcing level -! ------------- -! -ZZREF(:,:) = 0.5*( XZZ(:,:,IKB+1)-XZZ(:,:,IKB) )*XDIRCOSZW(:,:) -! -! -! 1.13 CO2 concentration (kg/m3) -! ----------------- -! -ZCO2(:,:) = XCCO2 * XRHODREF(:,:,IKB) -! -!------------------------------------------------------------------------------- -! -!* 2. Call to surface monitor with 2D variables -! ----------------------------------------- -! -! -! initial values: -! -IDIM1 = IIE-IIB+1 -IDIM2 = IJE-IJB+1 -IDIM1D = IDIM1*IDIM2 -! -! -! Transform 2D input fields into 1D: -! -CALL RESHAPE_SURF(IDIM1D) -! -! call to have the cumulated time since beginning of simulation -! -CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH, & - TDTSEG%TDATE%DAY, TDTSEG%TIME, & - ZTIMEC) -! -#ifdef CPLOASIS -IF (LOASIS) THEN - IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN - IF ( NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0 ) THEN - WRITE(NLUOUT,*) '----------------------------' - WRITE(NLUOUT,*) ' Reception des champs avec OASIS' - WRITE(NLUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) - CALL MNH_OASIS_RECV(CPROGRAM,IDIM1D,SIZE(XSW_BANDS),ZTIMEC+XTSTEP,XTSTEP, & - ZP_ZENITH,XSW_BANDS , & - ZP_TSRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF) - WRITE(NLUOUT,*) '----------------------------' - END IF - END IF -END IF -#endif -! -! Call to surface schemes -! -CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, & - XTSTEP, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, & - IDIM1D,NSV,SIZE(XSW_BANDS), & - ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM, & - ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, CSV,& - ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA, & - ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV, & - ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF, & - ZP_PEW_A_COEF, ZP_PEW_B_COEF, & - ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF, & - 'OK' ) -! -#ifdef CPLOASIS -IF (LOASIS) THEN - IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN - IF (NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0) THEN - WRITE(NLUOUT,*) '----------------------------' - WRITE(NLUOUT,*) ' Envoi des champs avec OASIS' - WRITE(NLUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) - CALL MNH_OASIS_SEND(CPROGRAM,IDIM1D,ZTIMEC+XTSTEP,XTSTEP) - WRITE(NLUOUT,*) '----------------------------' - END IF - END IF -END IF -#endif -! -IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN - CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH') - CALL MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, & - PT2M=ZP_T2M,PQ2M=ZP_Q2M,PHU2M=ZP_HU2M, & - PZON10M=ZP_ZON10M,PMER10M=ZP_MER10M ) -END IF -! -! Transform 1D output fields into 2D: -! -CALL UNSHAPE_SURF(IDIM1,IDIM2) -#ifdef MNH_FOREFIRE -!------------------------! -! COUPLING WITH FOREFIRE ! -!------------------------! - -IF ( LFOREFIRE ) THEN - CALL FOREFIRE_DUMP_FIELDS_n(XUT, XVT, XWT, XSVT& - , XTHT, XRT(:,:,:,1), XPABST, XTKET& - , IDIM1+2, IDIM2+2, NKMAX+2) -END IF - -IF ( FFCOUPLING ) THEN - - CALL SEND_GROUND_WIND_n(XUT, XVT, IKB, IINFO_ll) - - CALL FOREFIRE_RECEIVE_PARAL_n() - - CALL COUPLING_FOREFIRE_n(XTSTEP, ZSFTH, ZSFTQ, ZSFTS) - - CALL FOREFIRE_SEND_PARAL_n(IINFO_ll) - -END IF - -FF_TIME = FF_TIME + XTSTEP -#endif -! -! Friction of components along slope axes (U: largest local slope axis, V: zero slope axis) -! -! -PSFU(:,:) = 0. -PSFV(:,:) = 0. -! -WHERE (ZSFU(:,:)/=XUNDEF .AND. ZWIND(:,:)>0.) - PSFU(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZUA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB) - PSFV(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZVA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB) -END WHERE -! -!* conversion from H (W/m2) to w'Theta' -! -PSFTH(:,:) = ZSFTH(:,:) / XCPD / XRHODREF(:,:,IKB) -! -! -!* conversion from water flux (kg/m2/s) to w'rv' -! -PSFRV(:,:) = ZSFTQ(:,:) / XRHODREF(:,:,IKB) -! -! -!* conversion from scalar flux (kg/m2/s) to w'rsv' -! -IF(NSV .GT. 0) THEN - DO JSV=1,NSV - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) / XRHODREF(:,:,IKB) - END DO -END IF -! -!* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1) -! -IF (LUSECHEM) THEN - DO JSV=NSV_CHEMBEG,NSV_CHEMEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0. -END IF -! -!* conversion from dust flux (kg/m2/s) to (ppp.m.s-1) -! -IF (LDUST) THEN - DO JSV=NSV_DSTBEG,NSV_DSTEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_DUST * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_DSTBEG:NSV_DSTEND) = 0. -END IF -! -!* conversion from sea salt flux (kg/m2/s) to (ppp.m.s-1) -! -IF (LSALT) THEN - DO JSV=NSV_SLTBEG,NSV_SLTEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_SALT * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_SLTBEG:NSV_SLTEND) = 0. -END IF -! -!* conversion from aerosol flux (molec/m2/s) to (ppp.m.s-1) -! -IF (LORILAM) THEN - DO JSV=NSV_AERBEG,NSV_AEREND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_AERBEG:NSV_AEREND) = 0. -END IF -! -!* conversion from CO2 flux (kg/m2/s) to w'CO2' -! -PSFCO2(:,:) = ZSFCO2(:,:) / XRHODREF(:,:,IKB) -! -! -!* Diagnostics -! ----------- -! -! -IF (LDIAG_IN_RUN) THEN - ! - XCURRENT_LW (:,:) = XFLALWD(:,:) - XCURRENT_SW (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3) - XCURRENT_SFCO2(:,:) = ZSFCO2(:,:) - XCURRENT_DSTAOD(:,:)=0.0 - IF (CRAD=='ECMW') THEN - DO JK=IKB,IKE - IKRAD = JK - 1 - DO JJ=IJB,IJE - DO JI=IIB,IIE - XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3) - ENDDO - ENDDO - ENDDO - END IF -! - NULLIFY(TZFIELDSURF_ll) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_RN ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_H ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_LE ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_GFLUX ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SW ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_LW ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_T2M ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_Q2M ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_HU2M ) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_ZON10M) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_MER10M) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_DSTAOD) - CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SFCO2 ) - - CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDSURF_ll) -END IF -! -!================================================================================== -! -CONTAINS -! -!================================================================================== -! -SUBROUTINE RESHAPE_SURF(KDIM1D) -! -INTEGER, INTENT(IN) :: KDIM1D -INTEGER, DIMENSION(1) :: ISHAPE_1 -! -ISHAPE_1 = (/KDIM1D/) -! -ALLOCATE(ZP_TSUN (KDIM1D)) -ALLOCATE(ZP_ZENITH (KDIM1D)) -ALLOCATE(ZP_AZIM (KDIM1D)) -ALLOCATE(ZP_ZREF (KDIM1D)) -ALLOCATE(ZP_ZS (KDIM1D)) -ALLOCATE(ZP_U (KDIM1D)) -ALLOCATE(ZP_V (KDIM1D)) -ALLOCATE(ZP_QA (KDIM1D)) -ALLOCATE(ZP_TA (KDIM1D)) -ALLOCATE(ZP_RHOA (KDIM1D)) -ALLOCATE(ZP_SV (KDIM1D,NSV)) -ALLOCATE(ZP_CO2 (KDIM1D)) -ALLOCATE(ZP_RAIN (KDIM1D)) -ALLOCATE(ZP_SNOW (KDIM1D)) -ALLOCATE(ZP_LW (KDIM1D)) -ALLOCATE(ZP_DIR_SW (KDIM1D,SIZE(XDIRSRFSWD,3))) -ALLOCATE(ZP_SCA_SW (KDIM1D,SIZE(XSCAFLASWD,3))) -ALLOCATE(ZP_PS (KDIM1D)) -ALLOCATE(ZP_PA (KDIM1D)) - -ALLOCATE(ZP_SFTQ (KDIM1D)) -ALLOCATE(ZP_SFTH (KDIM1D)) -ALLOCATE(ZP_SFU (KDIM1D)) -ALLOCATE(ZP_SFV (KDIM1D)) -ALLOCATE(ZP_SFTS (KDIM1D,NSV)) -ALLOCATE(ZP_SFCO2 (KDIM1D)) -ALLOCATE(ZP_TSRAD (KDIM1D)) -ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3))) -ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3))) -ALLOCATE(ZP_EMIS (KDIM1D)) -ALLOCATE(ZP_TSURF (KDIM1D)) -ALLOCATE(ZP_Z0 (KDIM1D)) -ALLOCATE(ZP_Z0H (KDIM1D)) -ALLOCATE(ZP_QSURF (KDIM1D)) -ALLOCATE(ZP_RN (KDIM1D)) -ALLOCATE(ZP_H (KDIM1D)) -ALLOCATE(ZP_LE (KDIM1D)) -ALLOCATE(ZP_GFLUX (KDIM1D)) -ALLOCATE(ZP_T2M (KDIM1D)) -ALLOCATE(ZP_Q2M (KDIM1D)) -ALLOCATE(ZP_HU2M (KDIM1D)) -ALLOCATE(ZP_ZON10M (KDIM1D)) -ALLOCATE(ZP_MER10M (KDIM1D)) - -!* explicit coupling only -ALLOCATE(ZP_PEW_A_COEF (KDIM1D)) -ALLOCATE(ZP_PEW_B_COEF (KDIM1D)) -ALLOCATE(ZP_PET_A_COEF (KDIM1D)) -ALLOCATE(ZP_PEQ_A_COEF (KDIM1D)) -ALLOCATE(ZP_PET_B_COEF (KDIM1D)) -ALLOCATE(ZP_PEQ_B_COEF (KDIM1D)) - -ZP_TSUN(:) = RESHAPE(ZTSUN(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_TA(:) = RESHAPE(ZTA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_QA(:) = RESHAPE(ZQA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_RHOA(:) = RESHAPE(ZRHOA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_U(:) = RESHAPE(ZU(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_V(:) = RESHAPE(ZV(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_PS(:) = RESHAPE(ZPS(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_PA(:) = RESHAPE(ZPA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_ZS(:) = RESHAPE(XZS(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_CO2(:) = RESHAPE(ZCO2(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_SNOW(:) = RESHAPE(ZSNOW(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_RAIN(:) = RESHAPE(ZRAIN(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_ZREF(:) = RESHAPE(ZZREF(IIB:IIE,IJB:IJE), ISHAPE_1) - -DO JLAYER=1,NSV - ZP_SV(:,JLAYER) = RESHAPE(XSVT(IIB:IIE,IJB:IJE,IKB,JLAYER), ISHAPE_1) -END DO -! -!chemical conversion : from part/part to molec./m3 -DO JLAYER=NSV_CHEMBEG,NSV_CHEMEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD -END DO -DO JLAYER=NSV_AERBEG,NSV_AEREND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD -END DO -!dust conversion : from part/part to kg/m3 -DO JLAYER=NSV_DSTBEG,NSV_DSTEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XMOLARWEIGHT_DUST* ZP_RHOA(:) / XMD -END DO -!sea salt conversion : from part/part to kg/m3 -DO JLAYER=NSV_SLTBEG,NSV_SLTEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XMOLARWEIGHT_SALT* ZP_RHOA(:) / XMD -END DO -! -ZP_ZENITH(:) = RESHAPE(XZENITH(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_AZIM (:) = RESHAPE(XAZIM (IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_LW(:) = RESHAPE(XFLALWD(IIB:IIE,IJB:IJE), ISHAPE_1) -DO JLAYER=1,SIZE(XDIRSRFSWD,3) - ZP_DIR_SW(:,JLAYER) = RESHAPE(XDIRSRFSWD(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1) - ZP_SCA_SW(:,JLAYER) = RESHAPE(XSCAFLASWD(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1) -END DO -! -ZP_PEW_A_COEF = 0. -ZP_PEW_B_COEF = 0. -ZP_PET_A_COEF = 0. -ZP_PEQ_A_COEF = 0. -ZP_PET_B_COEF = 0. -ZP_PEQ_B_COEF = 0. -! -END SUBROUTINE RESHAPE_SURF -!================================================i================================= -SUBROUTINE UNSHAPE_SURF(KDIM1,KDIM2) -! -INTEGER, INTENT(IN) :: KDIM1, KDIM2 -INTEGER, DIMENSION(2) :: ISHAPE_2 -! -ISHAPE_2 = (/KDIM1,KDIM2/) -! -! Arguments in call to surface: -! -ZSFTH = XUNDEF -ZSFTQ = XUNDEF -IF (NSV>0) ZSFTS = XUNDEF -ZSFCO2 = XUNDEF -ZSFU = XUNDEF -ZSFV = XUNDEF -! -ZSFTH (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFTH(:), ISHAPE_2) -ZSFTQ (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFTQ(:), ISHAPE_2) -DO JLAYER=1,SIZE(PSFSV,3) - ZSFTS (IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SFTS(:,JLAYER), ISHAPE_2) -END DO -ZSFCO2 (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFCO2(:), ISHAPE_2) -ZSFU (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFU(:), ISHAPE_2) -ZSFV (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFV(:), ISHAPE_2) -PEMIS (IIB:IIE,IJB:IJE) = RESHAPE(ZP_EMIS(:), ISHAPE_2) -PTSRAD (IIB:IIE,IJB:IJE) = RESHAPE(ZP_TSRAD(:), ISHAPE_2) -! -IF (LDIAG_IN_RUN) THEN - XCURRENT_RN (IIB:IIE,IJB:IJE) = RESHAPE(ZP_RN(:), ISHAPE_2) - XCURRENT_H (IIB:IIE,IJB:IJE) = RESHAPE(ZP_H (:), ISHAPE_2) - XCURRENT_LE (IIB:IIE,IJB:IJE) = RESHAPE(ZP_LE(:), ISHAPE_2) - XCURRENT_GFLUX (IIB:IIE,IJB:IJE) = RESHAPE(ZP_GFLUX(:), ISHAPE_2) - XCURRENT_T2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_T2M(:), ISHAPE_2) - XCURRENT_Q2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_Q2M(:), ISHAPE_2) - XCURRENT_HU2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_HU2M(:), ISHAPE_2) - XCURRENT_ZON10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_ZON10M(:), ISHAPE_2) - XCURRENT_MER10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_MER10M(:), ISHAPE_2) -ENDIF -! -DO JLAYER=1,SIZE(PDIR_ALB,3) - PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2) - PSCA_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SCA_ALB(:,JLAYER), ISHAPE_2) -END DO -! -DEALLOCATE(ZP_TSUN ) -DEALLOCATE(ZP_ZENITH ) -DEALLOCATE(ZP_AZIM ) -DEALLOCATE(ZP_ZREF ) -DEALLOCATE(ZP_ZS ) -DEALLOCATE(ZP_U ) -DEALLOCATE(ZP_V ) -DEALLOCATE(ZP_QA ) -DEALLOCATE(ZP_TA ) -DEALLOCATE(ZP_RHOA ) -DEALLOCATE(ZP_SV ) -DEALLOCATE(ZP_CO2 ) -DEALLOCATE(ZP_RAIN ) -DEALLOCATE(ZP_SNOW ) -DEALLOCATE(ZP_LW ) -DEALLOCATE(ZP_DIR_SW ) -DEALLOCATE(ZP_SCA_SW ) -DEALLOCATE(ZP_PS ) -DEALLOCATE(ZP_PA ) - -DEALLOCATE(ZP_SFTQ ) -DEALLOCATE(ZP_SFTH ) -DEALLOCATE(ZP_SFTS ) -DEALLOCATE(ZP_SFCO2 ) -DEALLOCATE(ZP_SFU ) -DEALLOCATE(ZP_SFV ) -DEALLOCATE(ZP_TSRAD ) -DEALLOCATE(ZP_DIR_ALB ) -DEALLOCATE(ZP_SCA_ALB ) -DEALLOCATE(ZP_EMIS ) -DEALLOCATE(ZP_RN ) -DEALLOCATE(ZP_H ) -DEALLOCATE(ZP_LE ) -DEALLOCATE(ZP_GFLUX ) -DEALLOCATE(ZP_T2M ) -DEALLOCATE(ZP_Q2M ) -DEALLOCATE(ZP_HU2M ) -DEALLOCATE(ZP_ZON10M ) -DEALLOCATE(ZP_MER10M ) - -DEALLOCATE(ZP_PEW_A_COEF ) -DEALLOCATE(ZP_PEW_B_COEF ) -DEALLOCATE(ZP_PET_A_COEF ) -DEALLOCATE(ZP_PEQ_A_COEF ) -DEALLOCATE(ZP_PET_B_COEF ) -DEALLOCATE(ZP_PEQ_B_COEF ) -! -END SUBROUTINE UNSHAPE_SURF -!================================================================================== -! -END SUBROUTINE GROUND_PARAM_n diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 deleted file mode 100644 index 50ae95c4cdbbf9356011f7bcd444cbf62ccc2ee3..0000000000000000000000000000000000000000 --- a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 +++ /dev/null @@ -1,2314 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- -! ####################### - MODULE MODI_INI_MODEL_n -! ####################### -! -INTERFACE -! - SUBROUTINE INI_MODEL_n(KMI,HLUOUT,HINIFILE,HINIFILEPGD) -! - INTEGER, INTENT(IN) :: KMI ! Model index - CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models - CHARACTER (LEN=28), INTENT(IN) :: HINIFILE ! name of - CHARACTER (LEN=28), INTENT(IN) :: HINIFILEPGD -! -END SUBROUTINE INI_MODEL_n -! -END INTERFACE -! -END MODULE MODI_INI_MODEL_n -! ###################################################### - SUBROUTINE INI_MODEL_n(KMI,HLUOUT,HINIFILE,HINIFILEPGD) -! ###################################################### -! -!!**** *INI_MODEL_n* - routine to initialize the nested model _n -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to initialize the variables -! of the nested model _n. -! -!!** METHOD -!! ------ -!! The initialization of the model _n is performed as follows : -!! - Memory for arrays are then allocated : -!! * If turbulence kinetic energy variable is not needed -!! (CTURB='NONE'), XTKET, XTKEM and XTKES are zero-size arrays. -!! * If dissipation of TKE variable is not needed -!! (CTURBLEN /='KEPS'), XEPST, XEPSM and XREPSS are zero-size arrays. -!! * Memory for mixing ratio arrays is allocated according to the -!! value of logicals LUSERn (the number NRR of moist variables is deduced). -!! * The latitude (XLAT), longitude (XLON) and map factor (XMAP) -!! arrays are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.) -!! * Memory for reference state without orography ( XRHODREFZ and -!! XTHVREFZ) is only allocated in INI_MODEL1 -!! * The horizontal Coriolis parameters (XCORIOX and XCORIOY) arrays -!! are zero-size arrays if thinshell approximation (LTHINSHELL=.TRUE.) -!! * The Curvature coefficients (XCURVX and XCURVY) arrays -!! are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.) -!! * Memory for the Jacobian (ZJ) local array is allocated -!! (This variable is computed in SET_GRID and used in SET_REF). -!! - The spatial and temporal grid variables are initialized by SET_GRID. -!! - The metric coefficients are computed by METRICS (they are using in -!! the SET-REF call). -!! - The prognostic variables and are read in initial -!! LFIFM file (in READ_FIELD) -!! - The reference state variables are initialized by SET_REF. -!! - The temporal indexes of the outputs are computed by SET_OUTPUT_TIMES -!! - The large scale sources are computed in case of coupling case by -!! INI_CPL. -!! - The initialization of the parameters needed for the dynamics -!! of the model n is realized in INI_DYNAMICS. -!! - Then the initial file (DESFM+LFIFM files) is closed by FMCLOS. -!! - The initialization of the parameters needed for the ECMWF radiation -!! code is realized in INI_RADIATIONS. -!! - The contents of the scalar variables are overwritten by -!! the chemistry initialization subroutine CH_INIT_FIELDn when -!! the flags LUSECHEM and LCH_INIT_FIELD are set to TRUE. -!! This allows easy initialization of the chemical fields at a -!! restart of the model. -!! -!! EXTERNAL -!! -------- -!! FMLOOK : to retrieve a logical unit number associated with a file -!! FMREAD : to read a LFIFM file -!! FMFREE : to release a logical unit number -!! SET_DIM : to initialize dimensions -!! SET_GRID : to initialize grid -!! METRICS : to compute metric coefficients -!! READ_FIELD : to initialize field -!! FMCLOS : to close a FM-file -!! SET_REF : to initialize reference state for anelastic approximation -!! INI_DYNAMICS: to initialize parameters for the dynamics -!! INI_TKE_EPS : to initialize the TKE -!! SET_DIRCOS : to compute the director cosinus of the orography -!! INI_RADIATIONS : to initialize radiation computations -!! CH_INIT_CCS: to initialize the chemical core system -!! CH_INIT_FIELDn: to (re)initialize the scalar variables -!! INI_DEEP_CONVECTION : to initialize the deep convection scheme -!! CLEANLIST_ll : deaalocate a list -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! Module MODD_PARAMETERS : contains declaration of parameter variables -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! -!! Module MODD_MODD_DYN : contains declaration of parameters -!! for the dynamics -!! Module MODD_CONF : contains declaration of configuration variables -!! for all models -!! NMODEL : Number of nested models -!! NVERB : Level of informations on output-listing -!! 0 for minimum prints -!! 5 for intermediate level of prints -!! 10 for maximum prints -!! -!! Module MODD_REF : contains declaration of reference state -!! variables for all models -!! Module MODD_FIELD_n : contains declaration of prognostic fields -!! Module MODD_LSFIELD_n : contains declaration of Larger Scale fields -!! Module MODD_GRID_n : contains declaration of spatial grid variables -!! Module MODD_TIME_n : contains declaration of temporal grid variables -!! Module MODD_REF_n : contains declaration of reference state -!! variables -!! Module MODD_CURVCOR_n : contains declaration of curvature and Coriolis -!! variables -!! Module MODD_BUDGET : contains declarations of the budget parameters -!! Module MODD_RADIATIONS_n:contains declaration of the variables of the -!! radiation interface scheme -!! Module MODD_STAND_ATM : contains declaration of the 5 standard -!! atmospheres used for the ECMWF-radiation code -!! Module MODD_FRC : contains declaration of the control variables -!! and of the forcing fields -!! Module MODD_CH_MNHC_n : contains the control parameters for chemistry -!! Module MODD_DEEP_CONVECTION_n: contains declaration of the variables of -!! the deep convection scheme -!! -!! -!! -!! -!! Module MODN_CONF_n : contains declaration of namelist NAM_CONFn and -!! uses module MODD_CONF_n (configuration variables) -!! Module MODN_LUNIT_n : contains declaration of namelist NAM_LUNITn and -!! uses module MODD_LUNIT_n (Logical units) -!! Module MODN_DYN_n : contains declaration of namelist NAM_DYNn and -!! uses module MODD_DYN_n (control of dynamics) -!! Module MODN_PARAM_n : contains declaration of namelist NAM_PARAMn and -!! uses module MODD_PARAM_n (control of physical -!! parameterization) -!! Module MODN_LBC_n : contains declaration of namelist NAM_LBCn and -!! uses module MODD_LBC_n (lateral boundaries) -!! Module MODN_TURB_n : contains declaration of namelist NAM_TURBn and -!! uses module MODD_TURB_n (turbulence scheme) -!! Module MODN_PARAM_RAD_n: contains declaration of namelist NAM_PARAM_RADn -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine INI_MODEL_n) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/06/94 -!! Modification 17/10/94 (Stein) For LCORIO -!! Modification 20/10/94 (Stein) For SET_GRID and NAMOUTN -!! Modification 26/10/94 (Stein) Modifications of the namelist names -!! Modification 10/11/94 (Lafore) allocatation of tke fields -!! Modification 22/11/94 (Stein) change the READ_FIELDS call ( add -!! pressure function -!! Modification 06/12/94 (Stein) add the LS fields -!! 12/12/94 (Stein) rename END_INI in INI_DYNAMICS -!! Modification 09/01/95 (Stein) add the turbulence scheme -!! Modification Jan 19, 1995 (J. Cuxart) add the TKE initialization -!! Jan 23, 1995 (J. Stein ) remove the condition -!! LTHINSHELL=T LCARTESIAN=T => stop -!! Modification Feb 16, 1995 (I.Mallet) add the METRICS call and -!! change the SET_REF call (add -!! the lineic mass) -!! Modification Mar 10, 1995 (I. Mallet) add the COUPLING initialization -!! June 29,1995 (Ph. Hereil, J. Stein) add the budget init. -!! Modification Sept. 1, 1995 (S. Belair) Reading of the surface variables -!! and parameters for ISBA (i.e., add a -!! CALL READ_GR_FIELD) -!! Modification 18/08/95 (J.P.Lafore) time step change case -!! 25/09/95 (J. Cuxart and J.Stein) add LES variables -!! and the diachronic file initialization -!! Modification Sept 20,1995 (Lafore) coupling for the dry mass Md -!! Modification Sept. 12, 1995 (J.-P. Pinty) add the initialization of -!! the ECMWF radiation code -!! Modification Sept. 13, 1995 (J.-P. Pinty) control the allocation of the -!! arrays of MODD_GR_FIELD_n -!! Modification Nove. 17, 1995 (J.Stein) control of the control !! -!! March 01, 1996 (J. Stein) add the cloud fraction -!! April 03, 1996 (J. Stein) unify the ISBA and TSZ0 cases -!! Modification 13/12/95 (M. Georgelin) add the forcing variables in -!! the call read_field, and their -!! allocation. -!! Mai 23, 1996 (J. Stein) allocate XSEA in the TSZ0 case -!! June 11, 1996 (V. Masson) add XSILT and XLAKE of -!! MODD_GR_FIELD_n -!! August 7, 1996 (K. Suhre) add (re)initialization of -!! chemistry -!! Octo. 11, 1996 (J. Stein ) add XSRCT and XSRCM -!! October 8, 1996 (J. Cuxart, E. Sanchez) Moist LES diagnostics -!! and control on TKE initialization. -!! Modification 19/12/96 (J.-P. Pinty) add the ice parameterization and -!! the precipitation fields -!! Modification 11/01/97 (J.-P. Pinty) add the deep convection -!! Nov. 1, 1996 (V. Masson) Read the vertical grid kind -!! Nov. 20, 1996 (V. Masson) control of convection calling time -!! July 16, 1996 (J.P.Lafore) update of EXSEG file reading -!! Oct. 08, 1996 (J.P.Lafore, V.Masson) -!! MY_NAME and DAD_NAME reading and check -!! Oct. 30, 1996 (J.P.Lafore) resolution ratio reading for nesting -!! and Bikhardt interpolation coef. initialization -!! Nov. 22, 1996 (J.P.Lafore) allocation of LS sources for nesting -!! Feb. 26, 1997 (J.P.Lafore) allocation of "surfacic" LS fields -!! March 10, 1997 (J.P.Lafore) forcing only for model 1 -!! June 22, 1997 (J. Stein) add the absolute pressure -!! July 09, 1997 (V. Masson) add directional z0 and SSO -!! Aug. 18, 1997 (V. Masson) consistency between storage -!! type and CCONF -!! Dec. 22, 1997 (J. Stein) add the LS field spawning -!! Jan. 24, 1998 (P.Bechtold) change MODD_FRC and MODD_DEEP_CONVECTION -!! Dec. 24, 1997 (V.Masson) directional z0 parameters -!! Aug. 13, 1998 (V. Ducrocq P Jabouille) // -!! Mai. 26, 1998 (J. Stein) remove NXEND,NYEND -!! Feb. 1, 1999 (J. Stein) compute the Bikhardt -!! interpolation coeff. before the call to set_grid -!! April 5, 1999 (V. Ducrocq) change the DXRATIO_ALL init. -!! April 12, 1999 (J. Stein) cleaning + INI_SPAWN_LS -!! Apr. 7, 1999 (P Jabouille) store the metric coefficients -!! in modd_metrics_n -!! Jui. 15,1999 (P Jabouille) split the routines in two parts -!! Jan. 04,2000 (V. Masson) removes the TSZ0 case -!! Apr. 15,2000 (P Jabouille) parallelization of grid nesting -!! Aug. 20,2000 (J Stein ) tranpose XBFY -!! Jui 01,2000 (F.solmon ) adapatation for patch approach -!! Jun. 15,2000 (J.-P. Pinty) add C2R2 initialization -!! Nov. 15,2000 (V.Masson) use of ini_modeln in prep_real_case -!! Nov. 15,2000 (V.Masson) call of LES routines -!! Nov. 15,2000 (V.Masson) aircraft and balloon initialization routines -!! Jan. 22,2001 (D.Gazen) update_nsv set NSV_* var. for current model -!! Mar. 04,2002 (V.Ducrocq) initialization to temporal series -!! Mar. 15,2002 (F.Solmon) modification of ini_radiation interface -!! Nov. 29,2002 (JP Pinty) add C3R5, ICE2, ICE4, ELEC -!! Jan. 2004 (V.Masson) externalization of surface -!! May 2006 Remove KEPS -!! Apr. 2010 (M. Leriche) add pH for aqueous phase chemistry -!! Jul. 2010 (M. Leriche) add Ice phase chemistry -!! Oct. 2010 (J.Escobar) check if local domain not to small for NRIMX NRIMY -!! Nov. 2010 (J.Escobar) PGI BUG , add SIZE(CSV) to init_ground routine -!! Nov. 2009 (C. Barthe) add call to INI_ELEC_n -!! Mar. 2010 (M. Chong) add small ions -!! Apr. 2011 (M. Chong) correction of RESTART (ELEC) -!! June 2011 (B.Aouizerats) Prognostic aerosols -!! June 2011 (P.Aumond) Drag of the vegetation -!! + Mean fields -!! July 2013 (Bosseur & Filippi) Adds Forefire -!! P. Tulet Nov 2014 accumulated moles of aqueous species that fall at the surface -!! JAn. 2015 (F. Brosse) bug in allocate XACPRAQ -!! Dec 2014 (C.Lac) : For reproducibility START/RESTA -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! V. Masson Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions -!! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files -!! J.Escobar : 01/06/2016 : correct check limit of NRIM versus local subdomain size IDIM -!! 06/2016 (G.Delautier) phasage surfex 8 -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Aug. 2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx -!! M.Leriche 2016 Chemistry -!! 10/2016 M.Mazoyer New KHKO output fields -!! 10/2016 (C.Lac) Add max values -!! F. Brosse Oct. 2016 add prod/loss terms computation for chemistry -!! M.Leriche 2016 Chemistry -!! M.Leriche 10/02/17 prevent negative values in LBX(Y)SVS -!! M.Leriche 01/07/2017 Add DIAG chimical surface fluxes -!! 09/2017 Q.Rodier add LTEND_UV_FRC -!--------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -#ifdef CPLOASIS - USE MODI_SFX_OASIS_READ_NAM -#endif -! -USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODE_IO_ll -USE MODE_FM -USE MODE_FMREAD -USE MODE_TYPE_ZDIFFU -! -USE MODD_NSV -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_CONF -USE MODD_DUST -USE MODD_DYN -USE MODD_DYNZD -USE MODD_FRC -USE MODD_REF -USE MODD_SERIES, ONLY: LSERIES -USE MODD_TIME -USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI -USE MODD_NESTING -USE MODD_PASPOL -USE MODD_DRAGTREE -USE MODD_METRICS_n -USE MODD_DYN_n -USE MODD_DYNZD_n -USE MODD_FIELD_n -USE MODD_PAST_FIELD_n -USE MODD_MEAN_FIELD_n -USE MODD_MEAN_FIELD -USE MODD_ADV_n -USE MODD_LSFIELD_n -USE MODD_GRID_n -USE MODD_GRID, ONLY: XLONORI,XLATORI -USE MODD_TIME_n -USE MODD_REF_n -USE MODD_FRC_n -USE MODD_CURVCOR_n -USE MODD_DIM_n -USE MODD_BUDGET -USE MODD_RADIATIONS_n -USE MODD_SHADOWS_n -USE MODD_PARAM_RAD_n, ONLY : CLW, CAER, CAOP -USE MODD_VAR_ll, ONLY : IP -! -USE MODD_STAND_ATM, ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM -USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & - CCHEM_INPUT_FILE, LCH_CONV_LINOX, & - XCH_TUV_DOBNEW, LCH_PH, CSPEC_BUDGET, CSPEC_PRODLOSS -USE MODD_CH_PH_n -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_CH_AERO_n, ONLY : XSOLORG,XMI -USE MODD_CH_FLX_n, ONLY : XCHFLX -USE MODD_PARAM_KAFR_n -USE MODD_PARAM_MFSHALL_n -USE MODD_DEEP_CONVECTION_n -USE MODD_OUT_n -USE MODD_BIKHARDT_n -USE MODD_NUDGING_n, ONLY : LNUDGING -USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_BU_DIAG -USE MODD_CLOUD_MF_n -USE MODD_NSV -! -USE MODD_ELEC_n, ONLY : XCION_POS_FW, XCION_NEG_FW - -USE MODD_LUNIT_n -USE MODD_CONF_n -USE MODD_GET_n -USE MODD_TURB_n -USE MODD_CTURB -USE MODD_LBC_n -USE MODD_PASPOL_n -! -! -USE MODI_GATHER_ll -USE MODI_INI_BUDGET -USE MODI_INI_SW_SETUP -USE MODI_SET_GRID -USE MODI_METRICS -USE MODI_UPDATE_METRICS -USE MODI_READ_FIELD -USE MODI_SET_REF -USE MODI_INI_DYNAMICS -USE MODI_INI_TKE_EPS -USE MODI_SET_DIRCOS -USE MODI_INI_CPL -USE MODI_INI_RADIATIONS -USE MODI_INI_RADIATIONS_ECMWF -USE MODI_CH_INIT_FIELD_n -USE MODI_INI_DEEP_CONVECTION -USE MODI_INI_BIKHARDT_n -USE MODI_INI_ONE_WAY_n -USE MODI_GET_SIZEX_LB -USE MODI_GET_SIZEY_LB -USE MODI_INI_SPAWN_LS_n -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_UPDATE_NSV -USE MODI_INI_ELEC_n -USE MODI_INI_MICRO_n -USE MODI_INI_LG -USE MODI_SURF_SOLAR_GEOM -USE MODI_SUNPOS_n -USE MODI_INI_SURF_RAD -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_MNHREAD_ZS_DUMMY_n -USE MODI_INIT_GROUND_PARAM_n -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_INI_SURFSTATION_n -USE MODI_INI_POSPROFILER_n -USE MODI_CH_INIT_JVALUES -USE MODI_CH_AER_MOD_INIT -! -USE MODD_PARAM_n -USE MODE_MODELN_HANDLER -USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll - -USE MODI_TEMPORAL_DIST - -USE MODI_INI_AEROSET1 -USE MODI_INI_AEROSET2 -USE MODI_INI_AEROSET3 -USE MODI_INI_AEROSET4 -USE MODI_INI_AEROSET5 -USE MODI_INI_AEROSET6 -! -#ifdef MNH_FOREFIRE -USE MODD_FOREFIRE -USE MODD_FOREFIRE_n -USE MODI_INIT_FOREFIRE_n -#endif -USE MODI_INI_LES_N -USE MODD_MNH_SURFEX_n -USE MODI_INI_SERIES_N -! Eddy fluxes ! Ajout PP -USE MODD_DEF_EDDY_FLUX_n ! for VT and WT fluxes -USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV -USE MODD_LATZ_EDFLX -USE MODD_ADVFRC_n -USE MODD_RELFRC_n -USE MODD_2D_FRC -! -USE MODD_CH_PRODLOSSTOT_n -USE MODI_CH_INIT_PRODLOSSTOT_n -! -USE MODD_CH_BUDGET_n -USE MODI_CH_INIT_BUDGET_n -USE MODD_CH_M9_n, ONLY:NNONZEROTERMS -! -USE MODE_MPPDB -USE MODI_INIT_AEROSOL_PROPERTIES -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -INTEGER, INTENT(IN) :: KMI ! Model Index - -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models -CHARACTER (LEN=28), INTENT(IN) :: HINIFILE ! name of - ! the initial file -CHARACTER (LEN=28), INTENT(IN) :: HINIFILEPGD -! -!* 0.2 declarations of local variables -! -INTEGER :: JSV ! Loop index -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ININAR ! File management variable -INTEGER :: IMASDEV ! version of MESOHN in the input file -INTEGER :: ILUOUT ! Logical unit number of output-listing -CHARACTER(LEN=2) :: YDIR ! Type of the data field in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=100) :: YCOMMENT!comment string in LFIFM file -CHARACTER (LEN=LEN_HREC) :: YRECFM ! Name of the desired field in LFIFM file -INTEGER :: IIU ! Upper dimension in x direction (local) -INTEGER :: IJU ! Upper dimension in y direction (local) -INTEGER :: IIU_ll ! Upper dimension in x direction (global) -INTEGER :: IJU_ll ! Upper dimension in y direction (global) -INTEGER :: IKU ! Upper dimension in z direction -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian -LOGICAL :: GINIDCONV ! logical switch for the deep convection - ! initialization -LOGICAL :: GINIRAD ! logical switch for the radiation - ! initialization -! -! -TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields - ! which must be communicated in INIT -TYPE(LIST_ll), POINTER :: TZINITHALO3D_ll ! pointer for the list of 3D fields - ! which must be communicated in INIT -! -INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU ! dimensions of the -INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays -INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the -INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays -INTEGER :: IINFO_ll ! Return code of //routines -INTEGER :: IIY,IJY -INTEGER :: IIU_B,IJU_B -INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZCO2 ! CO2 concentration near the surface -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSEA ! sea fraction -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTOWN ! town fraction -REAL, DIMENSION(:,:), ALLOCATABLE :: ZBARE ! bare soil fraction -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo -REAL, DIMENSION(:,:), ALLOCATABLE :: ZEMIS ! emissivity -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTSRAD ! surface temperature -! -! -INTEGER, DIMENSION(:,:),ALLOCATABLE :: IINDEX ! indices of non-zero terms -INTEGER, DIMENSION(:),ALLOCATABLE :: IIND -INTEGER :: JM -! -!------------------------------------------ -! Dummy pointers needed to correct an ifort Bug -REAL, DIMENSION(:), POINTER :: DPTR_XZHAT -REAL, DIMENSION(:), POINTER :: DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4 -CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_NKLIN_LBXV,DPTR_NKLIN_LBYV -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_NKLIN_LBXM,DPTR_NKLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXU,DPTR_XCOEFLIN_LBYU -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXV,DPTR_XCOEFLIN_LBYV -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXW,DPTR_XCOEFLIN_LBYW -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXM,DPTR_XCOEFLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXWM,DPTR_XLBYWM,DPTR_XLBXTHM,DPTR_XLBYTHM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXTKEM,DPTR_XLBYTKEM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXSVM,DPTR_XLBYSVM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XZZ -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS -! -INTEGER :: IIB,IJB,IIE,IJE,IDIMX,IDIMY -! -!------------------------------------------------------------------------------- -! -!* 0. PROLOGUE -! -------- -! Compute relaxation coefficients without changing INI_DYNAMICS nor RELAXDEF -! -IF (CCLOUD == 'LIMA') THEN - LHORELAX_SVC1R3=LHORELAX_SVLIMA -END IF -! -! -NULLIFY(TZINITHALO2D_ll) -NULLIFY(TZINITHALO3D_ll) -! -!* 1. RETRIEVE LOGICAL UNIT NUMBER -! ---------------------------- -! -CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) -CLUOUT = HLUOUT -CINIFILE=HINIFILE -CINIFILEPGD=HINIFILEPGD -! -CALL FMREAD(HINIFILE,'MASDEV',HLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) -!------------------------------------------------------------------------------- -! -!* 2. END OF READING -! -------------- -!* 2.1 Read number of forcing fields -! -IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings. - YRECFM='FRC' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NFRC,IGRID,ILENCH,YCOMMENT,IRESP) - IF ( (IRESP /= 0) .OR. (NFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODEL_n ERROR: you want to read forcing variables from FMfile", & - " but no fields have been found by FMREAD" -!callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP 1 - END IF -END IF -! -! Modif PP for time evolving adv forcing - IF ( L2D_ADV_FRC ) THEN ! Retrieve the number of time-dependent forcings. - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER ADV_FORCING" - YRECFM='NADVFRC1' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NADVFRC,IGRID,ILENCH,YCOMMENT,IRESP) - IF ( (IRESP /= 0) .OR. (NADVFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODELn ERROR: you want to read forcing ADV variables from FMfile", & - " but no fields have been found by FMREAD" - !callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP 1 - END IF - WRITE(ILUOUT,*) 'NADVFRC = ', NADVFRC -END IF -! -IF ( L2D_REL_FRC ) THEN ! Retrieve the number of time-dependent forcings. - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER REL_FORCING" - YRECFM='NRELFRC1' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NRELFRC,IGRID,ILENCH,YCOMMENT,IRESP) - IF ( (IRESP /= 0) .OR. (NRELFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODELn ERROR: you want to read forcing REL variables from FMfile", & - " but no fields have been found by FMREAD" - !callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP 1 - END IF - WRITE(ILUOUT,*) 'NRELFRC = ', NRELFRC -END IF -!* 2.2 Checks the position of vertical absorbing layer -! -IKU=NKMAX+2*JPVEXT -! -YRECFM = 'ZHAT' -ALLOCATE(XZHAT(IKU)) - YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP) -IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " is upper than model top (",XZHAT(IKU),")" -!callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP -END IF -IF (LVE_RELAX) THEN - IF (XALZBOT>=XZHAT(IKU-4) ) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n WARNING: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but the layer defined by XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " contains less than 5 model levels" - END IF -END IF -DEALLOCATE(XZHAT) -! -!* 2.3 Compute sizes of arrays of the extended sub-domain -! -CALL GET_DIM_EXT_ll('B',IIU,IJU) -IIU_ll=NIMAX_ll + 2 * JPHEXT -IJU_ll=NJMAX_ll + 2 * JPHEXT -! initialize NIMAX and NJMAX for not updated versions regarding the parallelism -! spawning,... -CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) -! -CALL GET_INDICE_ll( IIB,IJB,IIE,IJE) -IDIMX = IIE - IIB + 1 -IDIMY = IJE - IJB + 1 -! -NRR=0 -NRRL=0 -NRRI=0 -IF (CGETRVT /= 'SKIP' ) THEN - NRR = NRR+1 -END IF -IF (CGETRCT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRL = NRRL+1 -END IF -IF (CGETRRT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRL = NRRL+1 -END IF -IF (CGETRIT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 -END IF -IF (CGETRST /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 -END IF -IF (CGETRGT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 -END IF -IF (CGETRHT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 -END IF -IF (NVERB >= 5) THEN - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," WATER VARIABLES")') NRR - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," LIQUID VARIABLES")') NRRL - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," SOLID VARIABLES")') NRRI -END IF -! -!* 2.3 Update NSV and floating indices for the current model -! -! -CALL UPDATE_NSV(KMI) -! -!------------------------------------------------------------------------------- -! -!* 3. ALLOCATE MEMORY -! ----------------- -! -!* 3.1 Module MODD_FIELD_n -! -IF (LMEAN_FIELD) THEN -! - MEAN_COUNT = 0 -! - ALLOCATE(XUM_MEAN(IIU,IJU,IKU)) ; XUM_MEAN = 0.0 - ALLOCATE(XVM_MEAN(IIU,IJU,IKU)) ; XVM_MEAN = 0.0 - ALLOCATE(XWM_MEAN(IIU,IJU,IKU)) ; XWM_MEAN = 0.0 - ALLOCATE(XTHM_MEAN(IIU,IJU,IKU)) ; XTHM_MEAN = 0.0 - ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU)) ; XTEMPM_MEAN = 0.0 - IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU)) - XTKEM_MEAN = 0.0 - END IF - ALLOCATE(XPABSM_MEAN(IIU,IJU,IKU)) ; XPABSM_MEAN = 0.0 -! - ALLOCATE(XU2_MEAN(IIU,IJU,IKU)) ; XU2_MEAN = 0.0 - ALLOCATE(XV2_MEAN(IIU,IJU,IKU)) ; XV2_MEAN = 0.0 - ALLOCATE(XW2_MEAN(IIU,IJU,IKU)) ; XW2_MEAN = 0.0 - ALLOCATE(XTH2_MEAN(IIU,IJU,IKU)) ; XTH2_MEAN = 0.0 - ALLOCATE(XTEMP2_MEAN(IIU,IJU,IKU)) ; XTEMP2_MEAN = 0.0 - ALLOCATE(XPABS2_MEAN(IIU,IJU,IKU)) ; XPABS2_MEAN = 0.0 -! - ALLOCATE(XUM_MAX(IIU,IJU,IKU)) ; XUM_MAX = -1.E20 - ALLOCATE(XVM_MAX(IIU,IJU,IKU)) ; XVM_MAX = -1.E20 - ALLOCATE(XWM_MAX(IIU,IJU,IKU)) ; XWM_MAX = -1.E20 - ALLOCATE(XTHM_MAX(IIU,IJU,IKU)) ; XTHM_MAX = 0.0 - ALLOCATE(XTEMPM_MAX(IIU,IJU,IKU)) ; XTEMPM_MAX = 0.0 - IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MAX(IIU,IJU,IKU)) - XTKEM_MAX = 0.0 - END IF - ALLOCATE(XPABSM_MAX(IIU,IJU,IKU)) ; XPABSM_MAX = 0.0 -END IF -! -IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN - ALLOCATE(XUM(IIU,IJU,IKU)) - ALLOCATE(XVM(IIU,IJU,IKU)) - ALLOCATE(XWM(IIU,IJU,IKU)) - ALLOCATE(XDUM(IIU,IJU,IKU)) - ALLOCATE(XDVM(IIU,IJU,IKU)) - ALLOCATE(XDWM(IIU,IJU,IKU)) - IF (CCONF == 'START') THEN - XUM = 0.0 - XVM = 0.0 - XWM = 0.0 - XDUM = 0.0 - XDVM = 0.0 - XDWM = 0.0 - END IF -END IF -! -ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 -ALLOCATE(XVT(IIU,IJU,IKU)) ; XVT = 0.0 -ALLOCATE(XWT(IIU,IJU,IKU)) ; XWT = 0.0 -ALLOCATE(XTHT(IIU,IJU,IKU)) ; XTHT = 0.0 -ALLOCATE(XRUS(IIU,IJU,IKU)) ; XRUS = 0.0 -ALLOCATE(XRVS(IIU,IJU,IKU)) ; XRVS = 0.0 -ALLOCATE(XRWS(IIU,IJU,IKU)) ; XRWS = 0.0 -ALLOCATE(XRUS_PRES(IIU,IJU,IKU)); XRUS_PRES = 0.0 -ALLOCATE(XRVS_PRES(IIU,IJU,IKU)); XRVS_PRES = 0.0 -ALLOCATE(XRWS_PRES(IIU,IJU,IKU)); XRWS_PRES = 0.0 -ALLOCATE(XRTHS(IIU,IJU,IKU)) ; XRTHS = 0.0 -ALLOCATE(XRTHS_CLD(IIU,IJU,IKU)); XRTHS_CLD = 0.0 -IF (CTURB /= 'NONE') THEN - ALLOCATE(XTKET(IIU,IJU,IKU)) - ALLOCATE(XRTKES(IIU,IJU,IKU)) - ALLOCATE(XRTKEMS(IIU,IJU,IKU)); XRTKEMS = 0.0 - ALLOCATE(XWTHVMF(IIU,IJU,IKU)) - ALLOCATE(XDYP(IIU,IJU,IKU)) - ALLOCATE(XTHP(IIU,IJU,IKU)) - ALLOCATE(XTR(IIU,IJU,IKU)) - ALLOCATE(XDISS(IIU,IJU,IKU)) - ALLOCATE(XLEM(IIU,IJU,IKU)) - XTKEMIN=XKEMIN -ELSE - ALLOCATE(XTKET(0,0,0)) - ALLOCATE(XRTKES(0,0,0)) - ALLOCATE(XWTHVMF(0,0,0)) - ALLOCATE(XDYP(0,0,0)) - ALLOCATE(XTHP(0,0,0)) - ALLOCATE(XTR(0,0,0)) - ALLOCATE(XDISS(0,0,0)) - ALLOCATE(XLEM(0,0,0)) -END IF -IF (CTOM == 'TM06') THEN - ALLOCATE(XBL_DEPTH(IIU,IJU)) -ELSE - ALLOCATE(XBL_DEPTH(0,0)) -END IF -IF (LRMC01) THEN - ALLOCATE(XSBL_DEPTH(IIU,IJU)) -ELSE - ALLOCATE(XSBL_DEPTH(0,0)) -END IF -! -ALLOCATE(XPABSM(IIU,IJU,IKU)) ; XPABSM = 0.0 -ALLOCATE(XPABST(IIU,IJU,IKU)) ; XPABST = 0.0 -! -ALLOCATE(XRT(IIU,IJU,IKU,NRR)) ; XRT = 0.0 -ALLOCATE(XRRS(IIU,IJU,IKU,NRR)) ; XRRS = 0.0 -ALLOCATE(XRRS_CLD(IIU,IJU,IKU,NRR)); XRRS_CLD = 0.0 -! -IF (CTURB /= 'NONE' .AND. NRR>1) THEN - ALLOCATE(XSRCT(IIU,IJU,IKU)) - ALLOCATE(XSIGS(IIU,IJU,IKU)) -ELSE - ALLOCATE(XSRCT(0,0,0)) - ALLOCATE(XSIGS(0,0,0)) -END IF -! -IF (NRR>1) THEN - ALLOCATE(XCLDFR(IIU,IJU,IKU)) -ELSE - ALLOCATE(XCLDFR(0,0,0)) -END IF -! -ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ; XSVT = 0. -ALLOCATE(XRSVS(IIU,IJU,IKU,NSV)); XRSVS = 0. -ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0 -! -IF (LPASPOL) THEN - ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) ) - XATC = 0. - ELSE - ALLOCATE( XATC(0,0,0,0)) - XATC = 0. -END IF -! -!* 3.2 Module MODD_GRID_n and MODD_METRICS_n -! -IF (LCARTESIAN) THEN - ALLOCATE(XLON(0,0)) - ALLOCATE(XLAT(0,0)) - ALLOCATE(XMAP(0,0)) -ELSE - ALLOCATE(XLON(IIU,IJU)) - ALLOCATE(XLAT(IIU,IJU)) - ALLOCATE(XMAP(IIU,IJU)) -END IF -ALLOCATE(XXHAT(IIU)) -ALLOCATE(XDXHAT(IIU)) -ALLOCATE(XYHAT(IJU)) -ALLOCATE(XDYHAT(IJU)) -ALLOCATE(XZS(IIU,IJU)) -ALLOCATE(XZSMT(IIU,IJU)) -ALLOCATE(XZZ(IIU,IJU,IKU)) -ALLOCATE(XZHAT(IKU)) -ALLOCATE(XDIRCOSZW(IIU,IJU)) -ALLOCATE(XDIRCOSXW(IIU,IJU)) -ALLOCATE(XDIRCOSYW(IIU,IJU)) -ALLOCATE(XCOSSLOPE(IIU,IJU)) -ALLOCATE(XSINSLOPE(IIU,IJU)) -! -ALLOCATE(XDXX(IIU,IJU,IKU)) -ALLOCATE(XDYY(IIU,IJU,IKU)) -ALLOCATE(XDZX(IIU,IJU,IKU)) -ALLOCATE(XDZY(IIU,IJU,IKU)) -ALLOCATE(XDZZ(IIU,IJU,IKU)) -! -!* 3.3 Modules MODD_REF and MODD_REF_n -! -IF (KMI == 1) THEN - ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU)) -END IF -ALLOCATE(XRHODREF(IIU,IJU,IKU)) -ALLOCATE(XTHVREF(IIU,IJU,IKU)) -ALLOCATE(XEXNREF(IIU,IJU,IKU)) -ALLOCATE(XRHODJ(IIU,IJU,IKU)) -IF (CEQNSYS=='DUR' .AND. LUSERV) THEN - ALLOCATE(XRVREF(IIU,IJU,IKU)) -ELSE - ALLOCATE(XRVREF(0,0,0)) -END IF -! -!* 3.4 Module MODD_CURVCOR_n -! -IF (LTHINSHELL) THEN - ALLOCATE(XCORIOX(0,0)) - ALLOCATE(XCORIOY(0,0)) -ELSE - ALLOCATE(XCORIOX(IIU,IJU)) - ALLOCATE(XCORIOY(IIU,IJU)) -END IF - ALLOCATE(XCORIOZ(IIU,IJU)) -IF (LCARTESIAN) THEN - ALLOCATE(XCURVX(0,0)) - ALLOCATE(XCURVY(0,0)) -ELSE - ALLOCATE(XCURVX(IIU,IJU)) - ALLOCATE(XCURVY(IIU,IJU)) -END IF -! -!* 3.5 Module MODD_DYN_n -! -CALL GET_DIM_EXT_ll('Y',IIY,IJY) -IF (L2D) THEN - ALLOCATE(XBFY(IIY,IJY,IKU)) -ELSE - ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisition of the - ! FFT solver -END IF -CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) -ALLOCATE(XBFB(IIU_B,IJU_B,IKU)) -CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) -ALLOCATE(XBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) -ALLOCATE(XAF(IKU),XCF(IKU)) -ALLOCATE(XTRIGSX(3*IIU_ll)) -ALLOCATE(XTRIGSY(3*IJU_ll)) -ALLOCATE(XRHOM(IKU)) -ALLOCATE(XALK(IKU)) -ALLOCATE(XALKW(IKU)) -ALLOCATE(XALKBAS(IKU)) -ALLOCATE(XALKWBAS(IKU)) -! -IF ( LHORELAX_UVWTH .OR. LHORELAX_RV .OR. & - LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI .OR. LHORELAX_RS .OR. & - LHORELAX_RG .OR. LHORELAX_RH .OR. LHORELAX_TKE .OR. & - ANY(LHORELAX_SV) ) THEN - ALLOCATE(XKURELAX(IIU,IJU)) - ALLOCATE(XKVRELAX(IIU,IJU)) - ALLOCATE(XKWRELAX(IIU,IJU)) - ALLOCATE(LMASK_RELAX(IIU,IJU)) -ELSE - ALLOCATE(XKURELAX(0,0)) - ALLOCATE(XKVRELAX(0,0)) - ALLOCATE(XKWRELAX(0,0)) - ALLOCATE(LMASK_RELAX(0,0)) -END IF -! -! Additional fields for truly horizontal diffusion (Module MODD_DYNZD$n) -IF (LZDIFFU) THEN - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2) -ELSE - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2,0) -ENDIF -! -!* 3.6 Larger Scale variables (Module MODD_LSFIELD$n) -! -! -! upper relaxation part -! -ALLOCATE(XLSUM(IIU,IJU,IKU)) ; XLSUM = 0.0 -ALLOCATE(XLSVM(IIU,IJU,IKU)) ; XLSVM = 0.0 -ALLOCATE(XLSWM(IIU,IJU,IKU)) ; XLSWM = 0.0 -ALLOCATE(XLSTHM(IIU,IJU,IKU)) ; XLSTHM = 0.0 -IF ( NRR > 0 ) THEN - ALLOCATE(XLSRVM(IIU,IJU,IKU)) ; XLSRVM = 0.0 -ELSE - ALLOCATE(XLSRVM(0,0,0)) -END IF -! -! lbc part -! -IF ( L1D) THEN ! 1D case -! - NSIZELBX_ll=0 - NSIZELBXU_ll=0 - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBXTKE_ll=0 - NSIZELBXR_ll=0 - NSIZELBXSV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXUM(0,0,0)) - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBXVM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBXWM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBXTHM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! -ELSEIF( L2D ) THEN ! 2D case -! - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! - CALL GET_SIZEX_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) -! - IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBX_ll=2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - END IF -! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBXTKE_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - END IF -! -ELSE ! 3D case -! -! - CALL GET_SIZEX_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) - CALL GET_SIZEY_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMY, & - IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV, & - IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) -! -! check if local domain not to small for NRIMX NRIMY -! - IF ( CLBCX(1) /= 'CYCL' ) THEN - IF ( NRIMX .GT. IDIMX ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_MODEL_n ERROR: ( NRIMX > IDIMX ) ", & - " Local domain to small for relaxation NRIMX,IDIMX ", & - NRIMX,IDIMX ,& - " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP - END IF - END IF - IF ( CLBCY(1) /= 'CYCL' ) THEN - IF ( NRIMY .GT. IDIMY ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_MODEL_n ERROR: ( NRIMY > IDIMY ) ", & - " Local domain to small for relaxation NRIMY,IDIMY ", & - NRIMY,IDIMY ,& - " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP - END IF - END IF -IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - NSIZELBY_ll=2*NRIMY+2*JPHEXT - NSIZELBYV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBX_ll=2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - NSIZELBY_ll=2*JPHEXT ! 2 - NSIZELBYV_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2*NRIMX+2*JPHEXT - NSIZELBYTKE_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTKEM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBXTKE_ll=2*JPHEXT ! 2 - NSIZELBYTKE_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTKEM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - NSIZELBYTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2*NRIMX+2*JPHEXT - NSIZELBYR_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - NSIZELBYR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - NSIZELBYR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2*JPHEXT - NSIZELBYSV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - NSIZELBYSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) - END IF -END IF ! END OF THE IF STRUCTURE ON THE MODEL DIMENSION -! -! -IF ( KMI > 1 ) THEN - ! it has been assumed that the THeta field used the largest rim area compared - ! to the others prognostic variables, if it is not the case, you must change - ! these lines - ALLOCATE(XCOEFLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE( NKLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XCOEFLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE( NKLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XCOEFLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE( NKLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XCOEFLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE( NKLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XCOEFLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE( NKLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XCOEFLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE( NKLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XCOEFLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE( NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE( NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) -END IF -! -! allocation of the LS fields for vertical relaxation and numerical diffusion -IF( .NOT. LSTEADYLS ) THEN -! - ALLOCATE(XLSUS(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3))) - ALLOCATE(XLSVS(SIZE(XLSVM,1),SIZE(XLSVM,2),SIZE(XLSVM,3))) - ALLOCATE(XLSWS(SIZE(XLSWM,1),SIZE(XLSWM,2),SIZE(XLSWM,3))) - ALLOCATE(XLSTHS(SIZE(XLSTHM,1),SIZE(XLSTHM,2),SIZE(XLSTHM,3))) - ALLOCATE(XLSRVS(SIZE(XLSRVM,1),SIZE(XLSRVM,2),SIZE(XLSRVM,3))) -! -ELSE -! - ALLOCATE(XLSUS(0,0,0)) - ALLOCATE(XLSVS(0,0,0)) - ALLOCATE(XLSWS(0,0,0)) - ALLOCATE(XLSTHS(0,0,0)) - ALLOCATE(XLSRVS(0,0,0)) -! -END IF -! allocation of the LB fields for horizontal relaxation and Lateral Boundaries -IF( .NOT. ( LSTEADYLS .AND. KMI==1 ) ) THEN -! - ALLOCATE(XLBXTKES(SIZE(XLBXTKEM,1),SIZE(XLBXTKEM,2),SIZE(XLBXTKEM,3))) - ALLOCATE(XLBYTKES(SIZE(XLBYTKEM,1),SIZE(XLBYTKEM,2),SIZE(XLBYTKEM,3))) - ALLOCATE(XLBXUS(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XLBYUS(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XLBXVS(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XLBYVS(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XLBXWS(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XLBYWS(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE(XLBXTHS(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XLBYTHS(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XLBXRS(SIZE(XLBXRM,1),SIZE(XLBXRM,2),SIZE(XLBXRM,3),SIZE(XLBXRM,4))) - ALLOCATE(XLBYRS(SIZE(XLBYRM,1),SIZE(XLBYRM,2),SIZE(XLBYRM,3),SIZE(XLBYRM,4))) - ALLOCATE(XLBXSVS(SIZE(XLBXSVM,1),SIZE(XLBXSVM,2),SIZE(XLBXSVM,3),SIZE(XLBXSVM,4))) - ALLOCATE(XLBYSVS(SIZE(XLBYSVM,1),SIZE(XLBYSVM,2),SIZE(XLBYSVM,3),SIZE(XLBYSVM,4))) -! -ELSE -! - ALLOCATE(XLBXTKES(0,0,0)) - ALLOCATE(XLBYTKES(0,0,0)) - ALLOCATE(XLBXUS(0,0,0)) - ALLOCATE(XLBYUS(0,0,0)) - ALLOCATE(XLBXVS(0,0,0)) - ALLOCATE(XLBYVS(0,0,0)) - ALLOCATE(XLBXWS(0,0,0)) - ALLOCATE(XLBYWS(0,0,0)) - ALLOCATE(XLBXTHS(0,0,0)) - ALLOCATE(XLBYTHS(0,0,0)) - ALLOCATE(XLBXRS(0,0,0,0)) - ALLOCATE(XLBYRS(0,0,0,0)) - ALLOCATE(XLBXSVS(0,0,0,0)) - ALLOCATE(XLBYSVS(0,0,0,0)) -! -END IF -! -! -!* 3.7 Module MODD_RADIATIONS_n (except XOZON and XAER) -! -! -NSWB_MNH = 6 -ALLOCATE(XSW_BANDS (NSWB_MNH)) -ALLOCATE(XZENITH (IIU,IJU)) -ALLOCATE(XAZIM (IIU,IJU)) -ALLOCATE(XALBUV (IIU,IJU)) -ALLOCATE(XDIRSRFSWD(IIU,IJU,NSWB_MNH)) -ALLOCATE(XSCAFLASWD(IIU,IJU,NSWB_MNH)) -ALLOCATE(XFLALWD (IIU,IJU)) -! -IF (CRAD /= 'NONE') THEN - ALLOCATE(XSLOPANG(IIU,IJU)) - ALLOCATE(XSLOPAZI(IIU,IJU)) - ALLOCATE(XDTHRAD(IIU,IJU,IKU)) - ALLOCATE(XDIRFLASWD(IIU,IJU,NSWB_MNH)) - ALLOCATE(XDIR_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(XSCA_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(XEMIS (IIU,IJU)) - ALLOCATE(XTSRAD (IIU,IJU)) ; XTSRAD = 0.0 - ALLOCATE(XSEA (IIU,IJU)) - ALLOCATE(XZS_XY (IIU,IJU)) - ALLOCATE(NCLEARCOL_TM1(IIU,IJU)) - ALLOCATE(XSWU(IIU,IJU,IKU)) - ALLOCATE(XSWD(IIU,IJU,IKU)) - ALLOCATE(XLWU(IIU,IJU,IKU)) - ALLOCATE(XLWD(IIU,IJU,IKU)) - ALLOCATE(XDTHRADSW(IIU,IJU,IKU)) - ALLOCATE(XDTHRADLW(IIU,IJU,IKU)) - ALLOCATE(XRADEFF(IIU,IJU,IKU)) -ELSE - ALLOCATE(XSLOPANG(0,0)) - ALLOCATE(XSLOPAZI(0,0)) - ALLOCATE(XDTHRAD(0,0,0)) - ALLOCATE(XDIRFLASWD(0,0,0)) - ALLOCATE(XDIR_ALB(0,0,0)) - ALLOCATE(XSCA_ALB(0,0,0)) - ALLOCATE(XEMIS (0,0)) - ALLOCATE(XTSRAD (0,0)) - ALLOCATE(XSEA (0,0)) - ALLOCATE(XZS_XY (0,0)) - ALLOCATE(NCLEARCOL_TM1(0,0)) - ALLOCATE(XSWU(0,0,0)) - ALLOCATE(XSWD(0,0,0)) - ALLOCATE(XLWU(0,0,0)) - ALLOCATE(XLWD(0,0,0)) - ALLOCATE(XDTHRADSW(0,0,0)) - ALLOCATE(XDTHRADLW(0,0,0)) - ALLOCATE(XRADEFF(0,0,0)) -END IF - -IF (CRAD == 'ECMW') THEN - ALLOCATE(XSTROATM(31,6)) - ALLOCATE(XSMLSATM(31,6)) - ALLOCATE(XSMLWATM(31,6)) - ALLOCATE(XSPOSATM(31,6)) - ALLOCATE(XSPOWATM(31,6)) - ALLOCATE(XSTATM(31,6)) -ELSE - ALLOCATE(XSTROATM(0,0)) - ALLOCATE(XSMLSATM(0,0)) - ALLOCATE(XSMLWATM(0,0)) - ALLOCATE(XSPOSATM(0,0)) - ALLOCATE(XSPOWATM(0,0)) - ALLOCATE(XSTATM(0,0)) -END IF -! -!* 3.8 Module MODD_DEEP_CONVECTION_n -! -IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - ALLOCATE(NCOUNTCONV(IIU,IJU)) - ALLOCATE(XDTHCONV(IIU,IJU,IKU)) - ALLOCATE(XDRVCONV(IIU,IJU,IKU)) - ALLOCATE(XDRCCONV(IIU,IJU,IKU)) - ALLOCATE(XDRICONV(IIU,IJU,IKU)) - ALLOCATE(XPRCONV(IIU,IJU)) - ALLOCATE(XPACCONV(IIU,IJU)) - ALLOCATE(XPRSCONV(IIU,IJU)) - ! diagnostics - IF (LCH_CONV_LINOX) THEN - ALLOCATE(XIC_RATE(IIU,IJU)) - ALLOCATE(XCG_RATE(IIU,IJU)) - ALLOCATE(XIC_TOTAL_NUMBER(IIU,IJU)) - ALLOCATE(XCG_TOTAL_NUMBER(IIU,IJU)) - ELSE - ALLOCATE(XIC_RATE(0,0)) - ALLOCATE(XCG_RATE(0,0)) - ALLOCATE(XIC_TOTAL_NUMBER(0,0)) - ALLOCATE(XCG_TOTAL_NUMBER(0,0)) - END IF - IF ( LDIAGCONV ) THEN - ALLOCATE(XUMFCONV(IIU,IJU,IKU)) - ALLOCATE(XDMFCONV(IIU,IJU,IKU)) - ALLOCATE(XPRLFLXCONV(IIU,IJU,IKU)) - ALLOCATE(XPRSFLXCONV(IIU,IJU,IKU)) - ALLOCATE(XCAPE(IIU,IJU)) - ALLOCATE(NCLTOPCONV(IIU,IJU)) - ALLOCATE(NCLBASCONV(IIU,IJU)) - ELSE - ALLOCATE(XUMFCONV(0,0,0)) - ALLOCATE(XDMFCONV(0,0,0)) - ALLOCATE(XPRLFLXCONV(0,0,0)) - ALLOCATE(XPRSFLXCONV(0,0,0)) - ALLOCATE(XCAPE(0,0)) - ALLOCATE(NCLTOPCONV(0,0)) - ALLOCATE(NCLBASCONV(0,0)) - END IF -ELSE - ALLOCATE(XPRCONV(0,0)) - ALLOCATE(XPACCONV(0,0)) - ALLOCATE(XPRSCONV(0,0)) -END IF -! -IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') & - .AND. LSUBG_COND .AND. LSIG_CONV) THEN - ALLOCATE(XMFCONV(IIU,IJU,IKU)) -ELSE - ALLOCATE(XMFCONV(0,0,0)) -ENDIF -! -IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') & - .AND. LCHTRANS .AND. NSV > 0 ) THEN - ALLOCATE(XDSVCONV(IIU,IJU,IKU,NSV)) -ELSE - ALLOCATE(XDSVCONV(0,0,0,0)) -END IF -! -ALLOCATE(XCF_MF(IIU,IJU,IKU)) ; XCF_MF=0.0 -ALLOCATE(XRC_MF(IIU,IJU,IKU)) ; XRC_MF=0.0 -ALLOCATE(XRI_MF(IIU,IJU,IKU)) ; XRI_MF=0.0 -! -!* 3.9 Local variables -! -ALLOCATE(ZJ(IIU,IJU,IKU)) -! -!* 3.10 Forcing variables (Module MODD_FRC) -! -IF (KMI == 1) THEN - IF ( LFORCING ) THEN - ALLOCATE(TDTFRC(NFRC)) - ALLOCATE(XUFRC(IKU,NFRC)) - ALLOCATE(XVFRC(IKU,NFRC)) - ALLOCATE(XWFRC(IKU,NFRC)) - ALLOCATE(XTHFRC(IKU,NFRC)) - ALLOCATE(XRVFRC(IKU,NFRC)) - ALLOCATE(XTENDTHFRC(IKU,NFRC)) - ALLOCATE(XTENDRVFRC(IKU,NFRC)) - ALLOCATE(XGXTHFRC(IKU,NFRC)) - ALLOCATE(XGYTHFRC(IKU,NFRC)) - ALLOCATE(XPGROUNDFRC(NFRC)) - ALLOCATE(XTENDUFRC(IKU,NFRC)) - ALLOCATE(XTENDVFRC(IKU,NFRC)) - ELSE - ALLOCATE(TDTFRC(0)) - ALLOCATE(XUFRC(0,0)) - ALLOCATE(XVFRC(0,0)) - ALLOCATE(XWFRC(0,0)) - ALLOCATE(XTHFRC(0,0)) - ALLOCATE(XRVFRC(0,0)) - ALLOCATE(XTENDTHFRC(0,0)) - ALLOCATE(XTENDRVFRC(0,0)) - ALLOCATE(XGXTHFRC(0,0)) - ALLOCATE(XGYTHFRC(0,0)) - ALLOCATE(XPGROUNDFRC(0)) - ALLOCATE(XTENDUFRC(0,0)) - ALLOCATE(XTENDVFRC(0,0)) - END IF - IF ( LFORCING ) THEN - ALLOCATE(XWTFRC(IIU,IJU,IKU)) - ALLOCATE(XUFRC_PAST(IIU,IJU,IKU)) ; XUFRC_PAST = XUNDEF - ALLOCATE(XVFRC_PAST(IIU,IJU,IKU)) ; XVFRC_PAST = XUNDEF - ELSE - ALLOCATE(XWTFRC(0,0,0)) - ALLOCATE(XUFRC_PAST(0,0,0)) - ALLOCATE(XVFRC_PAST(0,0,0)) - END IF -END IF -! ---------------------------------------------------------------------- -! -IF (L2D_ADV_FRC) THEN - WRITE(ILUOUT,*) 'L2D_ADV_FRC IS SET TO', L2D_ADV_FRC - WRITE(ILUOUT,*) 'ADV FRC WILL BE SET' - ALLOCATE(TDTADVFRC(NADVFRC)) - ALLOCATE(XDTHFRC(IIU,IJU,IKU,NADVFRC)) ; XDTHFRC=0. - ALLOCATE(XDRVFRC(IIU,IJU,IKU,NADVFRC)) ; XDRVFRC=0. -ELSE - ALLOCATE(TDTADVFRC(0)) - ALLOCATE(XDTHFRC(0,0,0,0)) - ALLOCATE(XDRVFRC(0,0,0,0)) -ENDIF - -IF (L2D_REL_FRC) THEN - WRITE(ILUOUT,*) 'L2D_REL_FRC IS SET TO', L2D_REL_FRC - WRITE(ILUOUT,*) 'REL FRC WILL BE SET' - ALLOCATE(TDTRELFRC(NRELFRC)) - ALLOCATE(XTHREL(IIU,IJU,IKU,NRELFRC)) ; XTHREL=0. - ALLOCATE(XRVREL(IIU,IJU,IKU,NRELFRC)) ; XRVREL=0. -ELSE - ALLOCATE(TDTRELFRC(0)) - ALLOCATE(XTHREL(0,0,0,0)) - ALLOCATE(XRVREL(0,0,0,0)) -ENDIF -! -!* 4.11 BIS: Eddy fluxes allocation -! -IF ( LTH_FLX ) THEN - ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0. - ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU)) - XRTHS_EDDY_FLUX = 0. - ENDIF -ELSE - ALLOCATE(XVTH_FLUX_M(0,0,0)) ; XVTH_FLUX_M = 0. - ALLOCATE(XWTH_FLUX_M(0,0,0)) ; XWTH_FLUX_M = 0. -END IF -! -IF ( LUV_FLX) THEN - ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU)) - XRVS_EDDY_FLUX = 0. - ENDIF -ELSE - ALLOCATE(XVU_FLUX_M(0,0,0)) ; XVU_FLUX_M = 0. -END IF -! -!* 3.11 Module MODD_ICE_CONC_n -! -IF ( (CCLOUD == 'ICE3'.OR.CCLOUD == 'ICE4') .AND. & - (CPROGRAM == 'DIAG '.OR.CPROGRAM == 'MESONH')) THEN - ALLOCATE(XCIT(IIU,IJU,IKU)) -ELSE - ALLOCATE(XCIT(0,0,0)) -END IF -! -IF ( CCLOUD == 'KHKO' .OR. CCLOUD == 'C2R2') THEN - ALLOCATE(XSUPSAT(IIU,IJU,IKU)) - ALLOCATE(XNACT(IIU,IJU,IKU)) - ALLOCATE(XNPRO(IIU,IJU,IKU)) - ALLOCATE(XSSPRO(IIU,IJU,IKU)) -END IF -! -!* 3.12 Module MODD_TURB_CLOUD -! -IF (.NOT.(ALLOCATED(XCEI))) ALLOCATE(XCEI(0,0,0)) -IF (KMI == NMODEL_CLOUD .AND. CTURBLEN_CLOUD/='NONE' ) THEN - DEALLOCATE(XCEI) - ALLOCATE(XCEI(IIU,IJU,IKU)) -ENDIF -! -!* 3.13 Module MODD_CH_PH_n -! -IF (LUSECHAQ.AND.(CPROGRAM == 'DIAG '.OR.CPROGRAM == 'MESONH')) THEN - IF (LCH_PH) THEN - ALLOCATE(XPHC(IIU,IJU,IKU)) - IF (NRRL==2) THEN - ALLOCATE(XPHR(IIU,IJU,IKU)) - ALLOCATE(XACPHR(IIU,IJU)) - XACPHR(:,:) = 0. - ENDIF - ENDIF - IF (NRRL==2) THEN - ALLOCATE(XACPRAQ(IIU,IJU,NSV_CHAC/2)) - XACPRAQ(:,:,:) = 0. - ENDIF -ENDIF -IF ((LUSECHEM).AND.(CPROGRAM == 'DIAG ')) THEN - ALLOCATE(XCHFLX(IIU,IJU,NSV_CHEM)) - XCHFLX(:,:,:) = 0. -END IF -! -!------------------------------------------------------------------------------- -! -!* 4. INITIALIZE BUDGET VARIABLES -! --------------------------- -! -IF ( CBUTYPE /= "NONE" .AND. NBUMOD == KMI ) THEN - CALL INI_BUDGET(ILUOUT, HLUOUT,XTSTEP,NSV,NRR, & - LNUMDIFU,LNUMDIFTH,LNUMDIFSV, & - LHORELAX_UVWTH,LHORELAX_RV, LHORELAX_RC,LHORELAX_RR, & - LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, LHORELAX_RH,LHORELAX_TKE, & - LHORELAX_SV,LVE_RELAX,LCHTRANS,LNUDGING,LDRAGTREE,LDEPOTREE, & - CRAD,CDCONV,CSCONV,CTURB,CTURBDIM,CCLOUD ) -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 5. INITIALIZE INTERPOLATION COEFFICIENTS -! -CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI) -! -!------------------------------------------------------------------------------- -! -!* 6. INITIALIZE GRIDS AND METRIC COEFFICIENTS -! ---------------------------------------- -! -CALL SET_GRID(KMI,HINIFILE,HLUOUT,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll, & - XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & - XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & - NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - CLBCX,CLBCY, & - XTSTEP,XSEGLEN, & - XLONORI,XLATORI,XLON,XLAT, & - XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & - XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT, & - ZJ, & - TDTMOD,TDTCUR,NSTOP,NOUT_TIMES,NOUT_NUMB) -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!* update halos of metric coefficients -! -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -! -CALL SET_DIRCOS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,TZINITHALO2D_ll, & - XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE ) -! -! grid nesting initializations -IF ( KMI == 1 ) THEN - XTSTEP_MODEL1=XTSTEP -END IF -! -NDT_2_WAY(KMI)=4 -! -!------------------------------------------------------------------------------- -! -!* 7. INITIALIZE DATA FOR JVALUES AND AEROSOLS -! -IF ( LUSECHEM .OR. LCHEMDIAG ) THEN - IF ((KMI==1).AND.(CPROGRAM == "MESONH".OR.CPROGRAM == "DIAG ")) & - CALL CH_INIT_JVALUES(TDTCUR%TDATE%DAY, TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%YEAR, ILUOUT, XCH_TUV_DOBNEW) -! - IF (LORILAM) THEN - CALL CH_AER_MOD_INIT - ELSE - IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) - IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) - ENDIF -ELSE - IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) - IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) -END IF -! -IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES -! -!------------------------------------------------------------------------------- -! -!* 8. INITIALIZE THE PROGNOSTIC FIELDS -! -------------------------------- -! -CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION) -CALL READ_FIELD(HINIFILE,HLUOUT,IMASDEV, IIU,IJU,IKU,XTSTEP, & - CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT, & - CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR, & - CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR,CUVW_ADV_SCHEME, & - CTEMP_SCHEME,NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,& - NSIZELBXTKE_ll,NSIZELBYTKE_ll, & - NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll, & - XUM,XVM,XWM,XDUM,XDVM,XDWM, & - XUT,XVT,XWT,XTHT,XPABST,XPABSM,XTKET,XRTKEMS, & - XRT,XSVT,XCIT,XDRYMASST, & - XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM, & - XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM, & - XLBYRM,XLBYSVM, & - NFRC,TDTFRC,XUFRC,XVFRC,XWFRC,XTHFRC,XRVFRC, & - XTENDTHFRC,XTENDRVFRC,XGXTHFRC,XGYTHFRC, & - XPGROUNDFRC, XATC, & - XTENDUFRC, XTENDVFRC, & - NADVFRC,TDTADVFRC,XDTHFRC,XDRVFRC, & - NRELFRC,TDTRELFRC,XTHREL,XRVREL, & - XVTH_FLUX_M,XWTH_FLUX_M,XVU_FLUX_M, & - XRUS_PRES,XRVS_PRES,XRWS_PRES,XRTHS_CLD,XRRS_CLD,XRSVS_CLD ) -! -!------------------------------------------------------------------------------- -! -! -!* 9. INITIALIZE REFERENCE STATE -! --------------------------- -! -! -CALL SET_REF(KMI,HINIFILE,HLUOUT, & - XZZ,XZHAT,ZJ,XDXX,XDYY,CLBCX,CLBCY, & - XREFMASS,XMASS_O_PHI0,XLINMASS, & - XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ ) -! -!------------------------------------------------------------------------------- -! -!* 10.1 INITIALIZE THE TURBULENCE VARIABLES -! ----------------------------------- -! -IF ((CTURB == 'TKEL').AND.(CCONF=='START')) THEN - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_tke_eps::XUT",PRECISION) - CALL INI_TKE_EPS(CGETTKET,XTHVREF,XZZ, & - XUT,XVT,XTHT, & - XTKET,TZINITHALO3D_ll ) - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_tke_eps::XUT",PRECISION) -END IF -! -! -!* 10.2 INITIALIZE THE LES VARIABLES -! ---------------------------- -! -CALL INI_LES_n -! -!------------------------------------------------------------------------------- -! -!* 11. INITIALIZE THE SOURCE OF TOTAL DRY MASS Md -! ------------------------------------------ -! -IF((KMI==1).AND.LSTEADYLS) THEN - XDRYMASSS = 0. -END IF -! -!------------------------------------------------------------------------------- -! -!* 12. INITIALIZE THE MICROPHYSICS -! ---------------------------- -! -IF (CELEC == 'NONE') THEN - CALL INI_MICRO_n(ILUOUT) -! -!------------------------------------------------------------------------------- -! -!* 13. INITIALIZE THE ATMOSPHERIC ELECTRICITY -! -------------------------------------- -! -ELSE - CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, CINIFILE, & - XTSTEP, XZZ, & - XDXX, XDYY, XDZZ, XDZX, XDZY ) -! - WRITE (UNIT=ILUOUT,& - FMT='(/,"ELECTRIC VARIABLES ARE BETWEEN INDEX",I2," AND ",I2)')& - NSV_ELECBEG, NSV_ELECEND -! - IF( CGETSVT(NSV_ELECBEG)=='INIT' ) THEN - XSVT(:,:,:,NSV_ELECBEG) = XCION_POS_FW(:,:,:) ! Nb/kg - XSVT(:,:,:,NSV_ELECEND) = XCION_NEG_FW(:,:,:) -! - XSVT(:,:,:,NSV_ELECBEG+1:NSV_ELECEND-1) = 0.0 - ELSE ! Convert elec_variables per m3 into elec_variables per kg of air - DO JSV = NSV_ELECBEG, NSV_ELECEND - XSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) / XRHODREF(:,:,:) - ENDDO - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 14. INITIALIZE THE LARGE SCALE SOURCES -! ---------------------------------- -! -IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_cpl::XUT",PRECISION) - CALL INI_CPL(HLUOUT,NSTOP,XTSTEP,LSTEADYLS,CCONF, & - CGETTKET, & - CGETRVT,CGETRCT,CGETRRT,CGETRIT, & - CGETRST,CGETRGT,CGETRHT,CGETSVT,LCH_INIT_FIELD, & - NSV,NIMAX_ll,NJMAX_ll, & - NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll, & - NSIZELBXTKE_ll,NSIZELBYTKE_ll, & - NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XDRYMASST, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & - XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XDRYMASSS, & - XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS, & - XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS ) - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_cpl::XUT",PRECISION) -! - DO JSV=NSV_CHEMBEG,NSV_CHEMEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_LNOXBEG,NSV_LNOXEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_AERBEG,NSV_AEREND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_DSTBEG,NSV_DSTEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_DSTDEPBEG,NSV_DSTDEPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_SLTBEG,NSV_SLTEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_SLTDEPBEG,NSV_SLTDEPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_PPBEG,NSV_PPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! -#ifdef MNH_FOREFIRE - DO JSV=NSV_FFBEG,NSV_FFEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! -#endif - DO JSV=NSV_CSBEG,NSV_CSEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO -! -END IF -! -IF ( KMI > 1) THEN - ! Use dummy pointers to correct an ifort BUG - DPTR_XBMX1=>XBMX1 - DPTR_XBMX2=>XBMX2 - DPTR_XBMX3=>XBMX3 - DPTR_XBMX4=>XBMX4 - DPTR_XBMY1=>XBMY1 - DPTR_XBMY2=>XBMY2 - DPTR_XBMY3=>XBMY3 - DPTR_XBMY4=>XBMY4 - DPTR_XBFX1=>XBFX1 - DPTR_XBFX2=>XBFX2 - DPTR_XBFX3=>XBFX3 - DPTR_XBFX4=>XBFX4 - DPTR_XBFY1=>XBFY1 - DPTR_XBFY2=>XBFY2 - DPTR_XBFY3=>XBFY3 - DPTR_XBFY4=>XBFY4 - DPTR_CLBCX=>CLBCX - DPTR_CLBCY=>CLBCY - ! - DPTR_XZZ=>XZZ - DPTR_XZHAT=>XZHAT - DPTR_XLSUM=>XLSUM - DPTR_XLSVM=>XLSVM - DPTR_XLSWM=>XLSWM - DPTR_XLSTHM=>XLSTHM - DPTR_XLSRVM=>XLSRVM - DPTR_XLSUS=>XLSUS - DPTR_XLSVS=>XLSVS - DPTR_XLSWS=>XLSWS - DPTR_XLSTHS=>XLSTHS - DPTR_XLSRVS=>XLSRVS - ! - DPTR_NKLIN_LBXU=>NKLIN_LBXU - DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU - DPTR_NKLIN_LBYU=>NKLIN_LBYU - DPTR_XCOEFLIN_LBYU=>XCOEFLIN_LBYU - DPTR_NKLIN_LBXV=>NKLIN_LBXV - DPTR_XCOEFLIN_LBXV=>XCOEFLIN_LBXV - DPTR_NKLIN_LBYV=>NKLIN_LBYV - DPTR_XCOEFLIN_LBYV=>XCOEFLIN_LBYV - DPTR_NKLIN_LBXW=>NKLIN_LBXW - DPTR_XCOEFLIN_LBXW=>XCOEFLIN_LBXW - DPTR_NKLIN_LBYW=>NKLIN_LBYW - DPTR_XCOEFLIN_LBYW=>XCOEFLIN_LBYW - DPTR_NKLIN_LBXM=>NKLIN_LBXM - DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM - DPTR_NKLIN_LBYM=>NKLIN_LBYM - DPTR_XCOEFLIN_LBYM=>XCOEFLIN_LBYM - ! - CALL INI_SPAWN_LS_n(NDAD(KMI),XTSTEP,KMI, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT, & - LSLEVE,XLEN1,XLEN2, & - DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM, & - DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM ) - ! - DPTR_XLBXUM=>XLBXUM - DPTR_XLBYUM=>XLBYUM - DPTR_XLBXVM=>XLBXVM - DPTR_XLBYVM=>XLBYVM - DPTR_XLBXWM=>XLBXWM - DPTR_XLBYWM=>XLBYWM - DPTR_XLBXTHM=>XLBXTHM - DPTR_XLBYTHM=>XLBYTHM - DPTR_XLBXTKEM=>XLBXTKEM - DPTR_XLBYTKEM=>XLBYTKEM - DPTR_XLBXRM=>XLBXRM - DPTR_XLBYRM=>XLBYRM - DPTR_XLBXSVM=>XLBXSVM - DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),CLUOUT,XTSTEP,KMI,1, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),NDTRATIO(KMI), & - DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM, & - CCLOUD, LUSECHAQ, LUSECHIC, & - DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM, & - DPTR_XLBXTHM,DPTR_XLBYTHM, & - DPTR_XLBXTKEM,DPTR_XLBYTKEM, & - DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM ) -END IF -! -! -!------------------------------------------------------------------------------- -! -!* 15. INITIALIZE THE SCALAR VARIABLES -! ------------------------------- -! -IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') & - CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM) - -! -!* 16. BUILT THE GENERIC OUTPUT NAME -! ---------------------------- -! -WRITE(COUTFILE,'(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG)) -WRITE(CFMDIAC, '(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))//'.000' -IF (CPROGRAM=='MESONH') THEN - IF ( NDAD(KMI) == 1) CDAD_NAME(KMI) = CEXP//'.1.'//CSEG - IF ( NDAD(KMI) == 2) CDAD_NAME(KMI) = CEXP//'.2.'//CSEG - IF ( NDAD(KMI) == 3) CDAD_NAME(KMI) = CEXP//'.3.'//CSEG - IF ( NDAD(KMI) == 4) CDAD_NAME(KMI) = CEXP//'.4.'//CSEG - IF ( NDAD(KMI) == 5) CDAD_NAME(KMI) = CEXP//'.5.'//CSEG - IF ( NDAD(KMI) == 6) CDAD_NAME(KMI) = CEXP//'.6.'//CSEG - IF ( NDAD(KMI) == 7) CDAD_NAME(KMI) = CEXP//'.7.'//CSEG - IF ( NDAD(KMI) == 8) CDAD_NAME(KMI) = CEXP//'.8.'//CSEG -END IF -! -!------------------------------------------------------------------------------- -! -!* 17. INITIALIZE THE PARAMETERS FOR THE DYNAMICS -! ------------------------------------------ -! -CALL INI_DYNAMICS(HLUOUT,XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,CLBCX,CLBCY,XTSTEP, & - LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & - LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & - LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & - LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG, & - LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT, & - LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC, & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF, & -#endif - XRIMKMAX,NRIMX,NRIMY, & - XALKTOP,XALKGRD,XALZBOT,XALZBAS, & - XT4DIFU,XT4DIFTH,XT4DIFSV, & - XCORIOX,XCORIOY,XCORIOZ,XCURVX,XCURVY, & - XDXHATM,XDYHATM,XRHOM,XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,& - XALK,XALKW,NALBOT,XALKBAS,XALKWBAS,NALBAS, & - LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, & - XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, & - LZDIFFU,XZDIFFU_HALO2, & - XBFB,XBF_SXP2_YP1_Z ) -! -!------------------------------------------------------------------------------- -! -!* 18. SURFACE FIELDS -! -------------- -! -!* 18.1 Radiative setup -! --------------- -! -IF (CRAD /= 'NONE') THEN - IF (CGETRAD =='INIT') THEN - GINIRAD =.TRUE. - ELSE - GINIRAD =.FALSE. - END IF - CALL INI_RADIATIONS(HINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, & - XDXX, XDYY, & - XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & - XSLOPANG,XSLOPAZI, & - XDTHRAD,XDIRFLASWD,XSCAFLASWD, & - XFLALWD,XDIRSRFSWD,NCLEARCOL_TM1, & - XZENITH,XAZIM, & - TDTRAD_FULL,TDTRAD_CLONLY, & - TZINITHALO2D_ll, & - XRADEFF,XSWU,XSWD,XLWU, & - XLWD,XDTHRADSW,XDTHRADLW ) - ! - IF (GINIRAD) CALL SUNPOS_n(XZENITH,PAZIMSOL=XAZIM) - CALL SURF_SOLAR_GEOM (XZS, XZS_XY) - ! - ALLOCATE(XXHAT_ll (IIU_ll)) - ALLOCATE(XYHAT_ll (IJU_ll)) - ALLOCATE(XZS_ll (IIU_ll,IJU_ll)) - ALLOCATE(XZS_XY_ll (IIU_ll,IJU_ll)) - ! - CALL GATHERALL_FIELD_ll('XY',XZS,XZS_ll,IRESP) - CALL GATHERALL_FIELD_ll('XY',XZS_XY,XZS_XY_ll,IRESP) - CALL GATHERALL_FIELD_ll('XX',XXHAT,XXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,XYHAT_ll,IRESP) - XZS_MAX_ll=MAXVAL(XZS_ll) -ELSE - XAZIM = XPI - XZENITH = XPI/2. - XDIRSRFSWD = 0. - XSCAFLASWD = 0. - XFLALWD = 300. ! W/m2 - XTSIDER = 0. -END IF -! -! -CALL INI_SW_SETUP (CRAD,NSWB_MNH,XSW_BANDS) -! -! -! 18.1.1 Special initialisation for CO2 content -! CO2 (molar mass=44) horizontally and vertically homogeneous at 360 ppm -! -XCCO2 = 360.0E-06 * 44.0E-03 / XMD -! -! -!* 18.2 Externalized surface fields -! --------------------------- -! -ALLOCATE(ZCO2(IIU,IJU)) -ZCO2(:,:) = XCCO2 -! - -ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH)) -ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH)) -ALLOCATE(ZEMIS (IIU,IJU)) -ALLOCATE(ZTSRAD (IIU,IJU)) -! -IF (IMASDEV>=46) THEN - CALL FMREAD(HINIFILE,'SURF',HLUOUT,'--',CSURF,IGRID,ILENCH,YCOMMENT,IRESP) -ELSE - CSURF = "EXTE" -END IF -! -! -IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN - ! ouverture du fichier PGD - IF ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN - CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD - WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn" - !callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - ELSE - ! case after a spawning - CINIFILEPGD = HINIFILE - END IF - ! - CALL GOTO_SURFEX(KMI) - !* initialization of surface - ! - ! -#ifdef CPLOASIS - CALL SFX_OASIS_READ_NAM(CPROGRAM,XTSTEP) - WRITE(*,*) 'SFX-OASIS: READ NAM_SFX_SEA_CPL OK' -#endif - ! - CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, & - XZENITH,XAZIM,XSW_BANDS,ZDIR_ALB,ZSCA_ALB, & - ZEMIS,ZTSRAD ) - ! - IF (SIZE(XEMIS)>0) THEN - XDIR_ALB = ZDIR_ALB - XSCA_ALB = ZSCA_ALB - XEMIS = ZEMIS - XTSRAD = ZTSRAD - CALL MNHGET_SURF_PARAM_n (PSEA=XSEA) - END IF -ELSE - !* fields not physically necessary, but must be initialized - IF (SIZE(XEMIS)>0) THEN - XDIR_ALB = 0. - XSCA_ALB = 0. - XEMIS = 1. - XTSRAD = XTT - XSEA = 1. - END IF -END IF -IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN - ! ouverture du fichier PGD - CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD - WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA" - !callabortstop - CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF -ENDIF -! - !* special case after spawning in prep_real_case -IF (CSURF=='EXRM' .AND. CPROGRAM=='REAL ') CSURF = 'EXTE' -! -DEALLOCATE(ZDIR_ALB) -DEALLOCATE(ZSCA_ALB) -DEALLOCATE(ZEMIS ) -DEALLOCATE(ZTSRAD ) -! -DEALLOCATE(ZCO2) -! -! -!* in a RESTART case, reads surface radiative quantities in the MESONH file -! -IF (CRAD == 'ECMW' .AND. CGETRAD=='READ') THEN - CALL INI_SURF_RAD(HINIFILE, CLUOUT, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD) -END IF -! -! -!* 18.3 Mesonh fields -! ------------- -! -IF (CPROGRAM/='REAL ') CALL MNHREAD_ZS_DUMMY_n(CINIFILEPGD) -! -!------------------------------------------------------------------------------- -! -!* 19. INITIALIZE THE PARAMETERS FOR THE PHYSICS -! ----------------------------------------- -! -IF (CRAD == 'ECMW') THEN -! -!* get cover mask for aerosols -! - IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ') THEN - ALLOCATE(ZSEA(IIU,IJU)) - ALLOCATE(ZTOWN(IIU,IJU)) - ALLOCATE(ZBARE(IIU,IJU)) - IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(KMI) - CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE) - ELSE - ZSEA (:,:) = 1. - ZTOWN(:,:) = 0. - ZBARE(:,:) = 0. - END IF -! - CALL INI_RADIATIONS_ECMWF (HINIFILE,HLUOUT, & - XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & - CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB,CAER,NAER,NSTATM, & - XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND ) -! - DEALLOCATE(ZSEA,ZTOWN,ZBARE) - ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4))) - XAER_CLIM(:,:,:,:) =XAER(:,:,:,:) -! - END IF -ELSE - ALLOCATE (XOZON(0,0,0)) - ALLOCATE (XAER(0,0,0,0)) - ALLOCATE (XDST_WL(0,0,0,0)) - ALLOCATE (XAER_CLIM(0,0,0,0)) -END IF -! -! -! -IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - IF (CGETCONV=='INIT') THEN - GINIDCONV=.TRUE. - ELSE - GINIDCONV=.FALSE. - END IF -! -! commensurability between convection calling time and time step -! - XDTCONV=XTSTEP*REAL( INT( (MIN(XDTCONV,1800.)+1.E-10)/XTSTEP ) ) - XDTCONV=MAX( XDTCONV, XTSTEP ) - IF (NVERB>=10) THEN - WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV - END IF - CALL INI_DEEP_CONVECTION (HINIFILE,HLUOUT,GINIDCONV,TDTCUR, & - NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV, & - XDRICONV,XPRCONV,XPRSCONV,XPACCONV, & - XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,& - XCAPE,NCLTOPCONV,NCLBASCONV, & - TDTDCONV, CGETSVCONV, XDSVCONV, & - LCH_CONV_LINOX, XIC_RATE, XCG_RATE, & - XIC_TOTAL_NUMBER, XCG_TOTAL_NUMBER ) - -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 19. ALLOCATION OF THE TEMPORAL SERIES -! --------------------------------- -! -IF (LSERIES .AND. CPROGRAM/='DIAG ') CALL INI_SERIES_n -! -!------------------------------------------------------------------------------- -! -! -!* 20. (re)initialize scalar variables -! ------------------------------- -! -! -IF ( LUSECHEM .OR. LCHEMDIAG ) THEN - IF (CPROGRAM=='MESONH'.AND.CCONF=='RESTA') LCH_INIT_FIELD =.FALSE. - IF (CPROGRAM=='MESONH'.OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='IDEAL ') & - CALL CH_INIT_FIELD_n(KMI, ILUOUT, NVERB) -END IF -! -!------------------------------------------------------------------------------- -! -!* 22. UPDATE HALO -! ----------- -! -! -CALL UPDATE_HALO_ll(TZINITHALO3D_ll,IINFO_ll) -CALL UPDATE_HALO_ll(TZINITHALO2D_ll,IINFO_ll) -CALL CLEANLIST_ll(TZINITHALO3D_ll) -CALL CLEANLIST_ll(TZINITHALO2D_ll) -! -! -!------------------------------------------------------------------------------- -! -!* 23. DEALLOCATION -! ------------- -! -DEALLOCATE(ZJ) -! -DEALLOCATE(XSTROATM) -DEALLOCATE(XSMLSATM) -DEALLOCATE(XSMLWATM) -DEALLOCATE(XSPOSATM) -DEALLOCATE(XSPOWATM) -! -!------------------------------------------------------------------------------- -! -!* 24. BALLOON and AIRCRAFT initializations -! ------------------------------------ -! -CALL INI_AIRCRAFT_BALLOON(HINIFILE,CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - IKU,CTURB=="TKEL" , & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 25. STATION initializations -! ----------------------- -! -CALL INI_SURFSTATION_n(CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - CTURB=="TKEL" , & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 26. PROFILER initializations -! ------------------------ -! -CALL INI_POSPROFILER_n(CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - CTURB=="TKEL", & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 28. Prognostic aerosols -! ------------------------ -! -CALL INI_AEROSET1 -CALL INI_AEROSET2 -CALL INI_AEROSET3 -CALL INI_AEROSET4 -CALL INI_AEROSET5 -CALL INI_AEROSET6 -#ifdef MNH_FOREFIRE -! -!------------------------------------------------------------------------------- -! -!* 29. FOREFIRE initializations -! ------------------------ -! - -! Coupling with ForeFire if resolution is low enough -!--------------------------------------------------- -IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN - FFCOUPLING = .TRUE. -ELSE - FFCOUPLING = .FALSE. -ENDIF - -! Initializing the ForeFire variables -!------------------------------------ -IF ( LFOREFIRE ) THEN - CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP & - , TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP) -END IF -#endif - -!------------------------------------------------------------------------------- -! -!* 30. Total production/Loss for chemical species -! -IF (LCHEMDIAG) THEN - CALL CH_INIT_PRODLOSSTOT_n(ILUOUT) - IF (NEQ_PLT>0) THEN - ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT)) - ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT)) - XPROD=0.0 - XLOSS=0.0 - ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) - END IF -ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) -END IF -! -!------------------------------------------------------------------------------- -! -!* 31. Extended production/loss terms for chemical species -! -IF (LCHEMDIAG) THEN - CALL CH_INIT_BUDGET_n(ILUOUT) - IF (NEQ_BUDGET>0) THEN - ALLOCATE(IINDEX(2,NNONZEROTERMS)) - ALLOCATE(IIND(NEQ_BUDGET)) - CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS) - ALLOCATE(XTCHEM(NEQ_BUDGET)) - DO JM=1,NEQ_BUDGET - IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM)) - ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM))) - ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM))) - END DO - DEALLOCATE(IIND) - DEALLOCATE(IINDEX) - ELSE - ALLOCATE(XTCHEM(0)) - END IF -ELSE - ALLOCATE(XTCHEM(0)) -END IF - -END SUBROUTINE INI_MODEL_n - diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90 deleted file mode 100644 index 153b0755f82d3b10a18407f638a3ef10638ebc70..0000000000000000000000000000000000000000 --- a/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90 +++ /dev/null @@ -1,242 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -!----------------------------------------------------------------- -! ############## - PROGRAM MESONH -! ############## -! -!!**** *MESONH * -general monitor of the model -!! -!! PURPOSE -!! ------- -!! -!! This program is the general monitor of the model. Firstly, it calls the -!! subroutine INIT, which performs the sequential initialization of the -!! nested models. Then, the program calls the temporal loops of all the -!! models, by calling a recursive function which make the temporal nesting -!! of the different nested models. -!! -!!** METHOD -!! ------ -!! -!! The initialization is a sequentially performed together with the -!! temporal loop of all the nested models. The spatial nesting can be -!! performed in an arbitrary way, the only constrainst is for the first model -!! which must contain all the others. For the moment, only 8 models can be -!! runned at the time and the imbriquation level can also go to this upper -!! value. -!! -!! -!! -!! EXTERNAL -!! -------- -!! -!! subroutine INIT : performs the sequential initialization of the nested -!! models -!! subroutine MODEL: choose the right MODELn to be called -!! -!! subroutine KID_MODEL: recursive function which calls the kid models -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! MODD_CONF: NMODEL, NMASDEV, CPROGRAM -!! MODD_CONF_n: CSTORAGE_TYPE -!! -!! -!! REFERENCE -!! --------- -!! -!! NONE -!! -!! AUTHOR -!! ------ -!! -!! J. STEIN * METEO-FRANCE * -!! -!! MODIFICATIONS -!! ------------- -!! -!! Original 20/10/94 -!! J.Stein 08/12/94 clean the code and add the modules -!! J.Stein and P.Jabouille 30/04/96 add the storage_type -!! J.P.Lafore 11/07/96 multi-tasking introduction for nesting -!! J.P.Lafore 01/08/96 events implementation -!! J.P.Lafore 17/11/97 events modification for two-way nesting -!! J.Stein 08/07/98 sequential form for the nesting -!! J.Stein 08/04/99 general case of the sequential form -!! V. Masson 15/03/99 MASDEV number and PROGRAM name -!! J.P. Chaboureau 15/03/04 loop limited to 100000 iterations -!! remplaced by infinite loop -!! J.Escobar 19/03/2008 rename INIT to INIT_MNH --> grib problem -!! J.Escobar 6/11/2014 remove test on LCHECK otherwise never call MPPDB_INIT -!! J.Escobar 15/09/2015 WENO5 & JPHEXT <> 1 -!! G.Delautier 06/2016 phasage surfex 8 -!! J. Pianezze 01/08/2016 add sfxoasis coupling functions -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -#ifdef CPLOASIS - USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD, IP - USE MODD_DYN_n, ONLY : XTSTEP - USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID -#endif -! -USE MODD_CONF -USE MODD_NESTING -USE MODD_CONF_n -! -USE MODI_MODEL_n -USE MODI_KID_MODEL -! -USE MODE_ll -USE MODE_IO_ll -USE MODE_MODELN_HANDLER -! -USE MODI_VERSION -USE MODI_INIT_MNH -USE MODD_MNH_SURFEX_n -! -#ifdef CPLOASIS - USE MODI_SFX_OASIS_INIT - USE MODI_MNH_OASIS_GRID - USE MODI_MNH_OASIS_DEFINE - USE MODI_SFX_OASIS_END -#endif -! -USE MODE_MPPDB -! -IMPLICIT NONE -! -!* 0.1 declarations of local variables -! -INTEGER :: JMODEL ! loop index -INTEGER :: ITEMP_MODEL1 ! loop increment -LOGICAL :: GEXIT ! flag for the end of the - ! temporal loop -INTEGER :: IINFO_ll ! return code of // routines -! -#ifdef CPLOASIS - CHARACTER(LEN=28) :: CNAMELIST - LOGICAL :: L_MASTER -#endif -! -!------------------------------------------------------------------------------- -! -!* 1. INITIALIZATION -! -------------- -! Switch to model 1 variables -#ifndef CPLOASIS -CALL MPPDB_INIT() -#endif -! -CALL GOTO_MODEL(1) -! -#ifdef CPLOASIS - CNAMELIST='EXSEG1.nam' - CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD) -#endif -! -CALL INITIO_ll() -! -CALL VERSION -CPROGRAM='MESONH' -! -CALL INIT_MNH -! -! -GEXIT=.FALSE. -! -! -!* 1.1 INITIALIZATION GRID OASIS -! ------------------------- -! -! -#ifdef CPLOASIS -IF(IP==1) THEN - L_MASTER=.TRUE. -ELSE - L_MASTER=.FALSE. -END IF -! -IF (LOASIS_GRID) THEN - CALL MNH_OASIS_GRID(L_MASTER,NMNH_COMM_WORLD) -ENDIF -#endif -! -! -!* 1.2 INITIALIZATION PARTITION OASIS -! ------------------------------ -! -#ifdef CPLOASIS -IF (LOASIS) THEN - CALL MNH_OASIS_DEFINE(CPROGRAM,IP) -END IF -#endif -! -!------------------------------------------------------------------------------- -! -!* 2. TEMPORAL LOOP -! ------------- -! -DO JMODEL=1,NMODEL - CALL GO_TOMODEL_ll(JMODEL,IINFO_ll) - CALL GOTO_MODEL(JMODEL) - CSTORAGE_TYPE='TT' - CALL MODEL_n(1,GEXIT) -END DO -! -IF(GEXIT) THEN - !callabortstop - CALL ABORT - STOP -ENDIF -! -ITEMP_MODEL1=1 -DO - ITEMP_MODEL1=ITEMP_MODEL1+1 - ! - CALL GO_TOMODEL_ll(1,IINFO_ll) - CALL GOTO_MODEL(1) - CALL MODEL_n(ITEMP_MODEL1,GEXIT) - ! - CALL KID_MODEL(1,ITEMP_MODEL1,GEXIT) - ! - IF(GEXIT) EXIT - ! -END DO -! -!------------------------------------------------------------------------------- -! -!* 3. FINALIZE THE PARALLEL SESSION -! ----------------------------- -! -IF (LCHECK) THEN - CALL MPPDB_BARRIER() -ELSE - CALL END_PARA_ll(IINFO_ll) -#ifdef CPLOASIS -IF (LOASIS) THEN - CALL SFX_OASIS_END -END IF -#endif -END IF -! -! -CALL SURFEX_DEALLO_LIST -! -!------------------------------------------------------------------------------- -! -!callabortstop -!CALL ABORT -STOP -! -END PROGRAM MESONH diff --git a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90 b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90 deleted file mode 100644 index 2b021e7de4aace46ae09133a200bf3584d78534b..0000000000000000000000000000000000000000 --- a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90 +++ /dev/null @@ -1,823 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- - -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MNH_MPI_REAL MPI_DOUBLE_PRECISION -#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION -#else -#define MNH_MPI_REAL MPI_REAL -#define MNH_MPI_2REAL MPI_2REAL -#endif - -! ################### - MODULE MODE_INIT_ll -! ################### -!! -!! Purpose -!! ------- -! -! The purpose of this module is the implementation of the initialisation -! of parallel data structure -! -!! Routines Of The User Interface -!! ------------------------------ -! -! SUBROUTINES : SET_SPLITTING_ll, SET_LBX_ll, SET_LBY_ll -! SET_DIM_ll, SET_JP_ll, SET_XRATIO_ll, SET_YRATIO_ll -! SET_DAD_ll, SET_XOR_ll, SET_XEND_ll, SET_YOR_ll, -! SET_YEND_ll, SET_DAD0_ll, -! -! INI_PARA_ll, END_PARA_ll -! -!! Implicit Arguments -!! ------------------ -! -!! Reference -!! --------- -! -! User Interface for Meso-NH parallel package -! Ph. Kloos, L. Giraud, R. Guivarch, D. Lugato -! -!! Authors -!! ------- -! -! R. Guivarch * CERFACS - ENSEEIHT * -! Ph. Kloos * CERFACS - CNRM * -! N. Gicquel * CERFACS - CNRM * -! -!! Modifications -!! ------------- -! -! Original May 19, 1998 -! Juan 19/08/2005: distinction Halo NORD/SUD & EST/WEST -! M.Moge 05/02/2015: extended HALO (halo size + 1) -! -!------------------------------------------------------------------------------- -! - USE MODD_MPIF -! - IMPLICIT NONE -! -! INCLUDE 'mpif.h' -! - CONTAINS -! -! ####################################### - SUBROUTINE SET_SPLITTING_ll(HSPLITTING) -! ####################################### -! -!!**** *SET_SPLITTING_ll* - -! -!! Purpose -!! ------- -! Set the variable YSPLITTING with HSPLITTING -! -!------------------------------------------------------------------------------- -! - USE MODD_VAR_ll, ONLY : YSPLITTING -! - IMPLICIT NONE -! - CHARACTER(LEN=*) :: HSPLITTING -! -!------------------------------------------------------------------------------- -! - YSPLITTING = HSPLITTING -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_SPLITTING_ll -! -! ################################ - SUBROUTINE SET_LBX_ll(KLBX, KMI) -! ################################ -! -!!**** *SET_LBX_ll *- -! -!! Purpose -!! ------- -! Set the variable CLBCX(KMI,:) with KLBX -! -!------------------------------------------------------------------------------- -! - USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX - USE MODD_DIM_ll, ONLY : CLBCX -! - IMPLICIT NONE -! - CHARACTER(LEN=*) :: KLBX - INTEGER :: KMI -! -!------------------------------------------------------------------------------- -! - IF (KMI.LE.JPMODELMAX) THEN - CLBCX(KMI, :) = KLBX - ENDIF -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_LBX_ll -! -! ################################ - SUBROUTINE SET_LBY_ll(KLBY, KMI) -! ################################ -! -!!**** *SET_LBY_ll *- -! -!! Purpose -!! ------- -! Set the variable CLBCY(KMI,:) with KLBY -! -!------------------------------------------------------------------------------- -! - USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX - USE MODD_DIM_ll, ONLY : CLBCY -! - IMPLICIT NONE -! - CHARACTER(LEN=*) :: KLBY - INTEGER :: KMI -! -!------------------------------------------------------------------------------- -! - IF (KMI.LE.JPMODELMAX) THEN - CLBCY(KMI, :) = KLBY - ENDIF -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_LBY_ll -! -! ################################# - SUBROUTINE SET_DIM_ll(KX, KY, KZ) -! ################################# -! -!!**** *SET_DIM_ll *- -! -!! Purpose -!! ------- -! Set the variable CLBCY(KMI,:) with KLBY -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NIMAX_ll, NJMAX_ll, NKMAX_ll -! - IMPLICIT NONE -! - INTEGER :: KX,KY,KZ -! -!------------------------------------------------------------------------------- -! - NIMAX_ll = KX - NJMAX_ll = KY - NKMAX_ll = KZ -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_DIM_ll -! -! ##################################################### - SUBROUTINE SET_JP_ll(KMODELMAX, KHEXT, KVEXT, KPHALO) -! ##################################################### -! -!!**** *SET_JP_ll *- -! -!! Purpose -!! ------- -! Set the halo variables and alloacte arrays of MODD_DIM_ll -! -!------------------------------------------------------------------------------- -! - USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX, JPHEXT, JPVEXT - USE MODD_DIM_ll, ONLY : NDXRATIO_ALL, NDYRATIO_ALL, & - NXOR_ALL, NYOR_ALL, NXEND_ALL, NYEND_ALL, & - NDAD, CLBCX, CLBCY - USE MODD_VAR_ll, ONLY : JPHALO -! - IMPLICIT NONE -! - INTEGER :: KMODELMAX, KHEXT, KVEXT, KPHALO -! -!------------------------------------------------------------------------------- -! - JPMODELMAX = KMODELMAX - JPHEXT = KHEXT - JPVEXT = KVEXT - JPHALO = KPHALO -! -! Allocate arrays declared in MODD_DIM_ll -! - IF ( ALLOCATED(NDXRATIO_ALL) ) DEALLOCATE(NDXRATIO_ALL) - IF ( ALLOCATED(NDYRATIO_ALL) ) DEALLOCATE(NDYRATIO_ALL) - IF ( ALLOCATED(NXOR_ALL) ) DEALLOCATE(NXOR_ALL) - IF ( ALLOCATED(NYOR_ALL) ) DEALLOCATE(NYOR_ALL) - IF ( ALLOCATED(NXEND_ALL) ) DEALLOCATE(NXEND_ALL) - IF ( ALLOCATED(NYEND_ALL) ) DEALLOCATE(NYEND_ALL) - IF ( ALLOCATED(NDAD) ) DEALLOCATE(NDAD) - IF ( ALLOCATED(CLBCX) ) DEALLOCATE(CLBCX) - IF ( ALLOCATED(CLBCY) ) DEALLOCATE(CLBCY) - ALLOCATE(NDXRATIO_ALL(JPMODELMAX), NDYRATIO_ALL(JPMODELMAX)) - ALLOCATE(NXOR_ALL(JPMODELMAX), NYOR_ALL(JPMODELMAX)) - ALLOCATE(NXEND_ALL(JPMODELMAX), NYEND_ALL(JPMODELMAX)) - ALLOCATE(NDAD(JPMODELMAX)) - ALLOCATE(CLBCX(JPMODELMAX, 2), CLBCY(JPMODELMAX, 2)) -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_JP_ll -! -! ###################################### - SUBROUTINE SET_XRATIO_ll(KXRATIO, KMI) -! ###################################### -! -!!**** *SET_XRATIO_ll *- -! -!! Purpose -!! ------- -! Set the variable NDXRATIO_ALL(KMI) with KXRATIO -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NDXRATIO_ALL -! - IMPLICIT NONE -! - INTEGER :: KXRATIO, KMI -! -!------------------------------------------------------------------------------- -! - NDXRATIO_ALL(KMI) = KXRATIO -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_XRATIO_ll -! -! ###################################### - SUBROUTINE SET_YRATIO_ll(KYRATIO, KMI) -! ###################################### -! -!!**** *SET_YRATIO_ll *- -! -!! Purpose -!! ------- -! Set the variable NDYRATIO_ALL(KMI) with KYRATIO -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NDYRATIO_ALL -! - IMPLICIT NONE -! - INTEGER :: KYRATIO, KMI -! -!------------------------------------------------------------------------------- -! - NDYRATIO_ALL(KMI) = KYRATIO -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_YRATIO_ll -! -! ################################ - SUBROUTINE SET_DAD_ll(KDAD, KMI) -! ################################ -! -!!**** *SET_DAD_ll* - -! -!! Purpose -!! ------- -! Set the variable NDAD(KMI) with KDAD -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NDAD -! - IMPLICIT NONE -! - INTEGER :: KDAD, KMI -! -!------------------------------------------------------------------------------- -! - NDAD(KMI) = KDAD -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_DAD_ll -! -! ################################ - SUBROUTINE SET_XOR_ll(KXOR, KMI) -! ################################ -! -!!**** *SET_XOR_ll* - -! -!! Purpose -!! ------- -! Set the variable NXOR_ALL(KMI) with KXOR -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NXOR_ALL -! - IMPLICIT NONE -! - INTEGER :: KXOR, KMI -! -!------------------------------------------------------------------------------- -! - NXOR_ALL(KMI) = KXOR -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_XOR_ll -! -! ################################## - SUBROUTINE SET_XEND_ll(KXEND, KMI) -! ################################## -! -!!**** *SET_XEND_ll* - -! -!! Purpose -!! ------- -! Set the variable NXEND_ALL(KMI) with KXEND -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NXEND_ALL -! - IMPLICIT NONE -! - INTEGER :: KXEND, KMI -! -!------------------------------------------------------------------------------- -! - NXEND_ALL(KMI) = KXEND -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_XEND_ll -! -! ################################ - SUBROUTINE SET_YOR_ll(KYOR, KMI) -! ################################ -! -!!**** *SET_YOR_ll* - -! -!! Purpose -!! ------- -! Set the variable NYOR_ALL(KMI) with KYOR -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NYOR_ALL -! - IMPLICIT NONE -! - INTEGER :: KYOR, KMI -! -!------------------------------------------------------------------------------- -! - NYOR_ALL(KMI) = KYOR -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_YOR_ll -! -! ################################## - SUBROUTINE SET_YEND_ll(KYEND, KMI) -! ################################## -! -!!**** *SET_YEND_ll* - -! -!! Purpose -!! ------- -! Set the variable NYEND_ALL(KMI) with KYEND -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NYEND_ALL -! - IMPLICIT NONE -! - INTEGER :: KYEND, KMI -! -!------------------------------------------------------------------------------- -! - NYEND_ALL(KMI) = KYEND -! -!------------------------------------------------------------------------------- -! - END SUBROUTINE SET_YEND_ll -! -! ######################## - SUBROUTINE SET_DAD0_ll() -! ######################## -! -!!**** *SET_DAD0_ll* - -! -!! Purpose -!! ------- -! fill the array NDAD with 0 -! -!------------------------------------------------------------------------------- -! - USE MODD_DIM_ll, ONLY : NDAD -! - IMPLICIT NONE -! -!------------------------------------------------------------------------------- -! - NDAD(:) = 0 -! - END SUBROUTINE SET_DAD0_ll -! -! ################################ - SUBROUTINE INI_PARA_ll(KINFO_ll) - ! ################################ - ! - !!**** *INI_PARA_ll* - routine to initialize the parallel variables - !! - !! Purpose - !! ------- - ! the purpose of the routine is to fill the structured type variables - ! TCRRT_PROCONF and TCRRT_COMDATA - ! - !!** Method - !! ------ - !! - !! External - !! -------- - ! Module MODE_SPLITTING_ll - ! SPLIT2 - ! - ! Module MODE_CONSTRUCT_ll - ! INI_PZ, INI_EZ, INI_BOUNDARIES, INI_TRANS, - ! CONSTRUCT_HALO1, CONSTRUCT_HALO2, CONSTRUCT_HALO2_EXTENDED, - ! CONSTRUCT_TRANS, CONSTRUCT_1DX, CONSTRUCT_1DY, - ! COMPUTE_HALO_MAX, COMPUTE_TRANS_MAX - ! - ! Module MODE_NEST_ll - ! INI_CHILD - ! - !! Implicit Arguments - !! ------------------ - ! Module MODD_DIM_ll - ! JPHEXT - Horizontal External points number - ! NDXRATIO_ALL, NDYRATIO_ALL, NXOR_ALL, NYOR_ALL, - ! NXEND_ALL, NYEND_ALL,... - ! - ! Module MODD_PARALLEL - ! TCRRT_PROCONF - Current configuration for current model - ! TCRRT_COMDATA - Current communication data structure for current model - ! and local processor - ! - ! Reference - !! --------- - ! - !! AUTHOR - !! ------ - ! R. Guivarch - ! - !! MODIFICATIONS - !! ------------- - ! Original 01/05/98 - ! R. Guivarch 01/01/98 Grid-Nesting - ! R. Guivarch 29/11/99 x and y splitting -> YSPLITTING - ! - !------------------------------------------------------------------------------- - ! - !* 0. DECLARATIONS - ! - USE MODD_DIM_ll - USE MODD_PARAMETERS_ll - USE MODD_STRUCTURE_ll - USE MODD_VAR_ll - ! - USE MODE_SPLITTING_ll, ONLY : SPLIT2 - ! - USE MODE_CONSTRUCT_ll, ONLY : INI_PZ, INI_EZ, INI_BOUNDARIES, INI_TRANS, & - CONSTRUCT_HALO1, CONSTRUCT_HALO2, CONSTRUCT_HALO_EXTENDED, & - CONSTRUCT_TRANS, CONSTRUCT_1DX, CONSTRUCT_1DY, & - COMPUTE_HALO_MAX, COMPUTE_TRANS_MAX - ! - USE MODE_NEST_ll, ONLY : INI_CHILD - ! - !JUANZ - USE MODE_MNH_WORLD , ONLY : INIT_NMNH_COMM_WORLD - !JUANZ - IMPLICIT NONE - ! - !* 0.1 declarations of arguments - ! - INTEGER, INTENT(OUT) :: KINFO_ll - ! - !* 0.2 declarations of local variables - ! - - INTEGER ,PARAMETER :: MPI_BUFFER_SIZE = 140000000 - CHARACTER,SAVE,ALLOCATABLE,DIMENSION(:) :: MPI_BUFFER - !JUAN - LOGICAL,SAVE :: GFIRSTCALL = .TRUE. - !JUAN - - - TYPE(ZONE_ll), ALLOCATABLE, DIMENSION(:) :: TZDZP ! intermediate zone - ! - TYPE(MODELSPLITTING_ll), POINTER :: TZSPLIT - TYPE(PROCONF_ll), POINTER :: TZPROCONF - INTEGER :: JMODEL - - LOGICAL :: GISINIT - !JUANZ - INTEGER :: myrank_key,new_rank,new_size - INTEGER :: COLOR = 1 - !JUANZ - ! - !------------------------------------------------------------------------------- - ! - !* 1. INITIALIZE MPI : - ! -------------- - ! - KINFO_ll = 0 - CALL MPI_INITIALIZED(GISINIT, KINFO_ll) - IF (.NOT. GISINIT) THEN - !CALL MPI_INIT(KINFO_ll) - !JUANZ create new/remapped communicator if need - CALL INIT_NMNH_COMM_WORLD(KINFO_ll) - END IF - ! - CALL MPI_COMM_RANK(NMNH_COMM_WORLD, IP, KINFO_ll) - ! - CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, NPROC, KINFO_ll) - ! - CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NHALO_COM, KINFO_ll) - ! - CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NHALO2_COM, KINFO_ll) - ! - CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NTRANS_COM, KINFO_ll) - ! - CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NGRID_COM, KINFO_ll) - ! - IP = IP + 1 - ! - MPI_PRECISION = MNH_MPI_REAL - MPI_2PRECISION = MNH_MPI_2REAL - ! - !------------------------------------------------------------------------------- - ! - !* 2. SET OUTPUT FILE : - ! --------------- - - ! CALL OPEN_ll(UNIT=NIOUNIT,FILE=YOUTPUTFILE,ACTION='write',form& - ! &='FORMATTED',MODE=SPECIFIC,IOSTAT=IRESP) - ! - !------------------------------------------------------------------------------- - ! - !* 3. ALLOCATION : - ! ---------- - ! - - IF (GFIRSTCALL) THEN - ALLOCATE(MPI_BUFFER(MPI_BUFFER_SIZE)) - CALL MPI_BUFFER_ATTACH(MPI_BUFFER,MPI_BUFFER_SIZE,KINFO_ll) - GFIRSTCALL = .FALSE. - ENDIF - - - ALLOCATE(TZDZP(NPROC)) - ! - ALLOCATE(TCRRT_PROCONF) - CALL ALLOC(TCRRT_COMDATA) - ALLOCATE(TCRRT_PROCONF%TSPLITS_B(NPROC)) - ALLOCATE(TCRRT_PROCONF%TSPLITS_X(NPROC)) - ALLOCATE(TCRRT_PROCONF%TSPLITS_Y(NPROC)) - ALLOCATE(TCRRT_PROCONF%TBOUND(NPROC)) - NULLIFY(TCRRT_PROCONF%TPARENT) - NULLIFY(TCRRT_COMDATA%TPARENT) - NULLIFY(TCRRT_PROCONF%TCHILDREN) - NULLIFY(TCRRT_COMDATA%TCHILDREN) - ! - !------------------------------------------------------------------------------- - ! - !* 4. SPLITTING OF THE DOMAIN : - ! ----------------------- - ! - DIMX = NIMAX_ll + 2*JPHEXT - DIMY = NJMAX_ll + 2*JPHEXT - DIMZ = NKMAX_ll + 2*JPVEXT - ! - TCRRT_PROCONF%NUMBER = 1 - ! - CALL SPLIT2(NIMAX_ll,NJMAX_ll,NKMAX_ll,NPROC,TZDZP,YSPLITTING) - ! - !------------------------------------------------------------------------------- - ! - !* 5. INITIALIZATION OF TCRRT_PROCONF : - ! ------------------------------- - ! - CALL INI_PZ(TCRRT_PROCONF,TZDZP) - ! - CALL INI_BOUNDARIES(TCRRT_PROCONF) - ! - CALL INI_EZ(TCRRT_PROCONF) - ! - CALL INI_TRANS(TCRRT_PROCONF) - ! - !------------------------------------------------------------------------------- - ! - !* 6. INITIALIZATION OF TCRRT_COMDATA : - ! ------------------------------- - ! - !* 6.1 Model Number - ! - TCRRT_COMDATA%NUMBER = 1 - ! - !* 6.2 Pointer from TCRRT_COMDATA to TCRRT_PROCONF for 2Way splitting - ! - TCRRT_COMDATA%TSPLIT_B => TCRRT_PROCONF%TSPLITS_B(IP) - - TZSPLIT => TCRRT_COMDATA%TSPLIT_B - ! - ! - !* 6.3 Pointer from TCRRT_COMDATA to TCRRT_PROCONF - ! for x-slices splitting - TCRRT_COMDATA%TSPLIT_X => TCRRT_PROCONF%TSPLITS_X(IP) - ! - TZSPLIT => TCRRT_COMDATA%TSPLIT_X - ! - ! - !* 6.4 Pointer from TCRRT_COMDATA to TCRRT_PROCONF - ! for y-slices splitting - ! - TCRRT_COMDATA%TSPLIT_Y => TCRRT_PROCONF%TSPLITS_Y(IP) - ! - TZSPLIT => TCRRT_COMDATA%TSPLIT_Y - ! - ! - !* 6.5 Construction of HALO1 communication data - ! - CALL CONSTRUCT_HALO1(TCRRT_COMDATA, TCRRT_PROCONF) - CALL CONSTRUCT_HALO2(TCRRT_COMDATA, TCRRT_PROCONF) - CALL CONSTRUCT_HALO_EXTENDED(TCRRT_COMDATA, TCRRT_PROCONF, JPHEXT+1) - ! - ! - !* 6.6 Construction of 1D communication data - ! - ALLOCATE(TCRRT_COMDATA%HALO1DX) - ALLOCATE(TCRRT_COMDATA%HALO1DX%NSEND_WEST(NPROC)) - ALLOCATE(TCRRT_COMDATA%HALO1DX%NSEND_EAST(NPROC)) - CALL CONSTRUCT_1DX(TCRRT_COMDATA, TCRRT_PROCONF) - ! - ALLOCATE(TCRRT_COMDATA%HALO1DY) - ALLOCATE(TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(NPROC)) - ALLOCATE(TCRRT_COMDATA%HALO1DY%NSEND_NORTH(NPROC)) - CALL CONSTRUCT_1DY(TCRRT_COMDATA, TCRRT_PROCONF) - ! - ! - !* 6.7 Construction of Transposition communication data - ! - CALL CONSTRUCT_TRANS(TCRRT_COMDATA, TCRRT_PROCONF) - ! - ! - !------------------------------------------------------------------------------- - ! - ! 7. GRID NESTING : - ! ------------ - ! - NULLIFY(TCRRT_PROCONF%TCHILDREN) - NULLIFY(TCRRT_COMDATA%TCHILDREN) - NULLIFY(TCRRT_COMDATA%TP2C_DATA) - ! - DO JMODEL = 1, JPMODELMAX - ! - IF( NDAD(JMODEL) .EQ. TCRRT_PROCONF%NUMBER ) THEN - CALL INI_CHILD(TCRRT_PROCONF, TCRRT_COMDATA, JMODEL) - ENDIF - ! - ENDDO - ! - !------------------------------------------------------------------------------- - ! - TZPROCONF => TCRRT_PROCONF - ! - CALL COMPUTE_TRANS_MAX(NBUFFERSIZE_3D, TCRRT_COMDATA) - NCOMBUFFSIZE1 = NBUFFERSIZE_3D - !JUAN NCOMBUFFSIZE1 = 10000000 - - ! - CALL COMPUTE_HALO_MAX(NMAXSIZEHALO, TCRRT_COMDATA) - ! - !NAG4.0 boom avec le 50 lorsqu'on active les scalaires - ! NBUFFERSIZE_2D = 50*NMAXSIZEHALO - NBUFFERSIZE_2D = 150*NMAXSIZEHALO - !NAG4.0 - NCOMBUFFSIZE2 = NBUFFERSIZE_2D - ! - DEALLOCATE(TZDZP) - ! - !------------------------------------------------------------------------------- - ! - END SUBROUTINE INI_PARA_ll -! -! ################################## - SUBROUTINE END_PARA_ll( KINFO_ll ) -! ################################## -! -!!**** *END_PARA_ll* - routine to finalize the parallel session -! -!! Purpose -!! ------- -! the purpose of the routine is to end the parallel session -! -!!** Method -!! ------ -! -!! External -!! -------- -! -!! Implicit Arguments -!! ------------------ -! Module MODD_DIM_ll -! -!! Reference -!! --------- -! -!! Author -!! ------ -! R. Guivarch -! -!! Modifications -!! ------------- -! Original 01/06/98 -! R. Guivarch 15/09/99 deallocation of grid-nesting arrays -! J. Pianezze 11/2016 - add LOASIS flag -! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! - USE MODD_DIM_ll -! USE MODD_STRUCTURE_ll -! USE MODD_VAR_ll, ONLY : NIOUNIT, YOUTPUTFILE - USE MODD_IO_ll, ONLY : ISP - USE MODD_SFX_OASIS, ONLY : LOASIS -! -#ifdef MNH_GA -USE MODE_GA -#endif -! - IMPLICIT NONE -! -!* 0.1 declarations of arguments -! - INTEGER, INTENT(OUT) :: KINFO_ll - -! -!* 0.2 declarations of local variables -! -!------------------------------------------------------------------------------- -! -!* 1. CALL TO MPI_FINALIZE -! -! CALL CLOSE_ll(YOUTPUTFILE) - -#ifdef MNH_GA - if (.not. GFIRST_GA ) then - call ga_sync() - IF (ISP .EQ. 1) THEN - call ga_print_stats() - call ga_summarize(0) - END IF - call ga_sync() - gstatus_ga = ga_destroy(g_a) - CALL ga_terminate() - endif -#endif -! -IF (.NOT. LOASIS) THEN - CALL MPI_FINALIZE(KINFO_ll) -END IF -! -!------------------------------------------------------------------------------- -! -!* 2. DEALLOCATION -! - DEALLOCATE(NDXRATIO_ALL, NDYRATIO_ALL) - DEALLOCATE(NXOR_ALL, NYOR_ALL) - DEALLOCATE(NXEND_ALL, NYEND_ALL) - DEALLOCATE(NDAD) - DEALLOCATE(CLBCX, CLBCY) -! -END SUBROUTINE END_PARA_ll -! -END MODULE MODE_INIT_ll diff --git a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90 b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90 deleted file mode 100644 index bc23ed7fd282a0b461543123883770c96e790147..0000000000000000000000000000000000000000 --- a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90 +++ /dev/null @@ -1,955 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- -!! Authors -!! ------- -! -! D. Gazen -! Juan 19/08/2005: bug argument optinonel ACCESS --> YACCESS -! Juan 22/05/2008: bug mode SPECIFIC in OPEN_ll -! Juan 05/11/2009: allow JPMAX_UNIT=48 open files -! J.Escobar 18/10/10 bug with PGI compiler on ADJUSTL -! Philippe 04/02/2016: bug with DELIM='NONE' and GCC 5.2/5.3 -! D.Gazen : avril 2016 change error message -! J. Pianezze 01/08/2016 add LOASIS flag -! -MODULE MODE_IO_ll - - USE MODD_ERRCODES - USE MODE_FD_ll - USE MODD_MPIF - !JUANZ - USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD - !JUANZ - - IMPLICIT NONE - - PRIVATE - - !INCLUDE 'mpif.h' - - INTEGER, PARAMETER :: JPFNULL = 9 !! /dev/null fortran unit - INTEGER, PARAMETER :: JPRESERVED_UNIT = 11 - INTEGER, PARAMETER :: JPMAX_UNIT_NUMBER = JPRESERVED_UNIT+300 - ! - LOGICAL,SAVE :: GALLOC(JPRESERVED_UNIT:JPMAX_UNIT_NUMBER) = .FALSE. - ! - CHARACTER(LEN=*),PARAMETER :: CFILENULL="/dev/null" - ! - !! Provisoire - CHARACTER(LEN=*),PARAMETER :: GLOBAL='GLOBAL' - CHARACTER(LEN=*),PARAMETER :: SPECIFIC='SPECIFIC' - !! - LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when SET_CONFIO_ll is called. - - !! Provisoire - PUBLIC IONEWFLU,UPCASE,INITIO_ll,OPEN_ll,CLOSE_ll,FLUSH_ll,GLOBAL,SPECIFIC - PUBLIC SET_CONFIO_ll,GCONFIO - !JUANZ - PUBLIC io_file,io_rank - !JUANZ - -CONTAINS - - FUNCTION IONEWFLU() - - INTEGER :: IONEWFLU - - INTEGER :: JI - INTEGER :: IOS - LOGICAL :: GEXISTS, GOPENED, GFOUND - - GFOUND = .FALSE. - - DO JI=JPRESERVED_UNIT, JPMAX_UNIT_NUMBER - IF (GALLOC(JI)) CYCLE - INQUIRE(UNIT=JI, EXIST=GEXISTS, OPENED=GOPENED, IOSTAT=IOS) - IF (GEXISTS .AND. .NOT. GOPENED .AND. IOS == 0) THEN - IONEWFLU = JI - GFOUND = .TRUE. - GALLOC(JI) = .TRUE. - EXIT - END IF - END DO - - IF (.NOT. GFOUND) IONEWFLU = NOSLOTLEFT - - END FUNCTION IONEWFLU - - SUBROUTINE IOFREEFLU(KOFLU) - - INTEGER :: KOFLU - - IF ((KOFLU .GE. JPRESERVED_UNIT) .AND. (KOFLU .LE. JPMAX_UNIT_NUMBER )) THEN - GALLOC(KOFLU) = .FALSE. - ELSE - print*,"mode_io.f90: IOFREEFLU BAD IUNIT=",KOFLU - STOP "mode_io.f90: IOFREEFLU BAD IUNIT" - END IF - - END SUBROUTINE IOFREEFLU - - FUNCTION UPCASE(HSTRING) - CHARACTER(LEN=*) :: HSTRING - CHARACTER(LEN=LEN(HSTRING)) :: UPCASE - - INTEGER :: JC - INTEGER, PARAMETER :: IAMIN = IACHAR("a") - INTEGER, PARAMETER :: IAMAJ = IACHAR("A") - - DO JC=1,LEN(HSTRING) - IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN - UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ) - ELSE - UPCASE(JC:JC) = HSTRING(JC:JC) - END IF - END DO - - END FUNCTION UPCASE - - SUBROUTINE SET_CONFIO_ll(OIOCDF4, OFORCELFIOUT, OFORCELFIREAD) - USE MODD_IO_ll, ONLY : LIOCDF4, LLFIOUT, LLFIREAD - LOGICAL, INTENT(IN) :: OIOCDF4 - LOGICAL, INTENT(IN), OPTIONAL :: OFORCELFIOUT, OFORCELFIREAD - - LOGICAL :: GFORCELFIOUT, GFORCELFIREAD - - IF (GCONFIO) THEN - PRINT *, 'SET_CONFIO_ll already called (ignoring this call).' - ELSE - IF (PRESENT(OFORCELFIOUT)) THEN - GFORCELFIOUT = OFORCELFIOUT - ELSE - GFORCELFIOUT = .FALSE. - END IF - IF (PRESENT(OFORCELFIREAD)) THEN - GFORCELFIREAD = OFORCELFIREAD - ELSE - GFORCELFIREAD = .FALSE. - END IF - -#if defined(MNH_IOCDF4) - !PRINT *, 'SET_CONFIO_ll : sources compiled WITH IOCDF4 support.' - LIOCDF4 = OIOCDF4 - LLFIOUT = (.NOT. OIOCDF4 .OR. GFORCELFIOUT) - LLFIREAD = GFORCELFIREAD -#else - !PRINT *, 'SET_CONFIO_ll : sources compiled WITHOUT IOCDF4 support.' - LIOCDF4 = .FALSE. - LLFIOUT = .TRUE. - LLFIREAD = .TRUE. -#endif - GCONFIO = .TRUE. - END IF - - END SUBROUTINE SET_CONFIO_ll - - SUBROUTINE INITIO_ll() - USE MODE_MNH_WORLD , ONLY : INIT_NMNH_COMM_WORLD - USE MODD_SFX_OASIS, ONLY : LOASIS - USE MODD_IO_ll - IMPLICIT NONE - - INTEGER :: IERR, IOS - LOGICAL :: GISINIT - - ISTDERR = 0 - - IF (.NOT. LOASIS) THEN - CALL MPI_INITIALIZED(GISINIT, IERR) - IF (.NOT. GISINIT) THEN - !CALL MPI_INIT(IERR) - CALL INIT_NMNH_COMM_WORLD(IERR) - if (IERR .NE.0) STOP "mode_io.f90::INITIO_ll() MPI_INIT ---> PROBLEME WITH REMAPPING NMNH_COMM_WORLD " - END IF - !! Now MPI is initialized for sure - END IF - - CALL INITFD() - - !! Default number for Processor I/O - ISIOP = 1 - - !! Get number of allocated processors - CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, ISNPROC,IERR) - IF (ISNPROC==1) GSMONOPROC = .TRUE. - - !! Store proc number - CALL MPI_COMM_RANK(NMNH_COMM_WORLD, ISP, IERR) - ISP = ISP + 1 - - !! Open /dev/null for GLOBAL mode -#if defined(DEV_NULL) - OPEN(UNIT=JPFNULL,FILE=CFILENULL ,ACTION='WRITE',IOSTAT=IOS) -#else - OPEN(UNIT=JPFNULL,STATUS='SCRATCH',ACTION='WRITE',IOSTAT=IOS) -#endif - IF (IOS > 0) THEN - WRITE(ISTDERR,*) 'Error OPENING /dev/null...' - CALL MPI_ABORT(NMNH_COMM_WORLD, IOS, IERR) - END IF - - !! Init STDOUT and PIPE - IF (ISP == ISIOP) THEN - ISTDOUT = 6 - ELSE - ISTDOUT = JPFNULL - END IF - - END SUBROUTINE INITIO_ll - - SUBROUTINE OPEN_ll(UNIT, & - FILE, & - MODE, & - LFIPAR, & - COMM, & - STATUS, & - ACCESS, & - IOSTAT, & - FORM, & - RECL, & - BLANK, & - POSITION,& - ACTION, & - DELIM, & - PAD, & - KNB_PROCIO,& - KMELEV,& - OPARALLELIO) -#if defined(MNH_IOCDF4) - USE MODD_NETCDF - USE MODE_NETCDF -#endif - USE MODD_IO_ll - INTEGER, INTENT(OUT) :: UNIT !! Different from fortran OPEN - CHARACTER(len=*),INTENT(IN), OPTIONAL :: FILE - CHARACTER(len=*),INTENT(IN), OPTIONAL :: MODE - TYPE(LFIPARAM), POINTER, OPTIONAL :: LFIPAR - CHARACTER(len=*),INTENT(IN), OPTIONAL :: STATUS - CHARACTER(len=*),INTENT(IN), OPTIONAL :: ACCESS - INTEGER, INTENT(OUT) :: IOSTAT - CHARACTER(len=*),INTENT(IN), OPTIONAL :: FORM - INTEGER, INTENT(IN), OPTIONAL :: RECL - CHARACTER(len=*),INTENT(IN), OPTIONAL :: BLANK - CHARACTER(len=*),INTENT(IN), OPTIONAL :: POSITION - CHARACTER(len=*),INTENT(IN) :: ACTION - CHARACTER(len=*),INTENT(IN), OPTIONAL :: DELIM - CHARACTER(len=*),INTENT(IN), OPTIONAL :: PAD - INTEGER, INTENT(IN), OPTIONAL :: COMM - !JUANZ - INTEGER, INTENT(IN), OPTIONAL :: KNB_PROCIO - INTEGER(KIND=LFI_INT), INTENT(IN), OPTIONAL :: KMELEV - LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO - !JUANZ - ! - ! local var - ! - !JUANZ - CHARACTER(len=5) :: cfile - INTEGER :: ifile, irank_procio - TYPE(FD_ll), POINTER :: TZFD_IOZ - CHARACTER(len=128) :: YFILE_IOZ - INTEGER(KIND=LFI_INT) :: IRESOU,IMELEV,INPRAR - INTEGER(KIND=LFI_INT) :: INUMBR8,ININAR8 - LOGICAL(KIND=LFI_INT) :: GNAMFI8,GFATER8,GSTATS8 - !JUANZ - -#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX) - CHARACTER(len=20) :: YSTATUS - CHARACTER(len=20) :: YACCESS - CHARACTER(len=20) :: YFORM - INTEGER :: YRECL - INTEGER ,PARAMETER :: RECL_DEF = 10000 - CHARACTER(len=20) :: YBLANK - CHARACTER(len=20) :: YPOSITION - CHARACTER(len=20) :: YDELIM - CHARACTER(len=20) :: YPAD - !JUAN -#endif - CHARACTER(len=20) :: YACTION - CHARACTER(len=20) :: YMODE - INTEGER :: IOS,IERR - INTEGER(KIND=IDCDF_KIND) :: IOSCDF - INTEGER :: ICOMM - INTEGER :: ICMPRES - TYPE(FD_ll), POINTER :: TZFD, TZFDTEMP - ! didier - LOGICAL :: GEXISTS,GOPENED - INTEGER :: IUNIT - ! didier - !JUAN SX5 : probleme function retournant un pointer - TYPE(FD_ll), POINTER :: TZJUAN - LOGICAL :: GPARALLELIO - - IF ( PRESENT(OPARALLELIO) ) THEN - GPARALLELIO = OPARALLELIO - ELSE !par defaut on active les IO paralleles en Z si possible - GPARALLELIO = .TRUE. - ENDIF - -#ifdef MNH_VPP - !! BUG Fuji avec RECL non fourni en argument de MYOPEN - INTEGER :: IRECSIZE - IF (PRESENT(RECL)) THEN - IRECSIZE = RECL - ELSE - IRECSIZE = 2147483647 ! Default value for FUJI RECL - END IF -#endif - - IOS = 0 - IF (PRESENT(COMM)) THEN - ICOMM = COMM - ELSE - ICOMM = NMNH_COMM_WORLD ! Default communicator - END IF - - IF (PRESENT(MODE)) THEN - YMODE = MODE - YMODE = UPCASE(TRIM(ADJUSTL(YMODE))) - ELSE - YMODE = 'GLOBAL' ! Default Mode - END IF - - YACTION = ACTION - YACTION = UPCASE(TRIM(ADJUSTL(YACTION))) - IF (YACTION /= "READ" .AND. YACTION /= "WRITE") THEN - IOSTAT = 99 - UNIT = -1 - WRITE(ISTDERR,*) 'Erreur OPEN_ll : ACTION=',YACTION,' non supportee' - RETURN - END IF - - IF (.NOT. ANY(YMODE == (/'GLOBAL ','SPECIFIC ','DISTRIBUTED' , 'IO_ZSPLIT '/))) THEN - IOSTAT = 99 - UNIT = -1 - WRITE(ISTDERR,*) 'OPEN_ll error : MODE UNKNOWN' - RETURN - END IF - - !JUAN SX5 : probleme function retournant un pointer - !IF (.NOT. ASSOCIATED(GETFD(FILE))) THEN - TZJUAN=>GETFD(FILE) - IF (.NOT. ASSOCIATED(TZJUAN)) THEN - !JUAN SX5 : probleme function retournant un pointer - !! File is not already opened : GOOD - !! Add a new FD element - TZFD=>NEWFD() - ELSE - !! Error : File already opened - IOSTAT = 99 - UNIT = -1 - WRITE(ISTDERR,*) 'OPEN_ll error : File', FILE, 'already opened' - RETURN - END IF - -!!$ CALL MPI_ALLREDUCE(ILOCALERR, IGLOBALERR, 1, MPI_INTEGER, MPI_BOR,& -!!$ & ICOMM, IERR) -!!$ IF (IGLOBALERR /= NOERROR) THEN -!!$ IOSTAT = GLOBALERR -!!$ UNIT = -1 -!!$ RETURN -!!$ END IF - - - - TZFD%NAME = FILE - TZFD%MODE = YMODE - NULLIFY(TZFD%PARAM) - -#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX) - !JUAN - IF (PRESENT(STATUS)) THEN - YSTATUS=STATUS - ELSE - YSTATUS='UNKNOWN' - ENDIF - IF (PRESENT(ACCESS)) THEN - YACCESS=ACCESS - ELSE - YACCESS='SEQUENTIAL' - ENDIF - IF (PRESENT(FORM)) THEN - YFORM=FORM - ELSE - YFORM='FORMATTED' - ENDIF - IF (PRESENT(RECL)) THEN - YRECL=RECL - ELSE - YRECL=RECL_DEF - ENDIF - IF (PRESENT(BLANK)) THEN - YBLANK=BLANK - ELSE - YBLANK='NULL' - ENDIF - IF (PRESENT(POSITION)) THEN - YPOSITION=POSITION - ELSE - YPOSITION='ASIS' - ENDIF - IF (PRESENT(DELIM)) THEN - YDELIM=DELIM - ELSE - YDELIM='NONE' - ENDIF - IF (PRESENT(PAD)) THEN - YPAD=PAD - ELSE - YPAD='YES' - ENDIF -#endif - - SELECT CASE(YMODE) - - CASE('GLOBAL') - IF (YACTION == 'READ') THEN - TZFD%OWNER = ISP - ELSE - TZFD%OWNER = ISIOP - END IF - - IF (ISP == TZFD%OWNER) THEN - !! I/O processor case - - TZFD%FLU = IONEWFLU() -#ifdef MNH_VPP - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=STATUS, & - ACCESS=ACCESS, & - IOSTAT=IOS, & - FORM=FORM, & - RECL=IRECSIZE, & - BLANK=BLANK, & - POSITION=POSITION, & - ACTION=YACTION, & - DELIM=DELIM, & - PAD=PAD) - -#else -#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX) - !JUAN : 31/03/2000 modif pour acces direct - IF (YACCESS=='DIRECT') THEN - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - ACTION=YACTION) - ELSE - IF (YFORM=="FORMATTED") THEN - IF (ACTION=='READ') THEN - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - BLANK=YBLANK, & - POSITION=YPOSITION, & - ACTION=YACTION, & - !DELIM=YDELIM, & !Philippe: commented because bug with GCC 5.X - PAD=YPAD) - ELSE - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - BLANK=YBLANK, & - POSITION=YPOSITION, & - ACTION=YACTION, & - DELIM=YDELIM, & - PAD=YPAD) - ENDIF - ELSE - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - POSITION=YPOSITION, & - ACTION=YACTION) - ENDIF - ENDIF - - - !print*,' OPEN_ll' - !print*,' OPEN(UNIT=',TZFD%FLU - !print*,' FILE=',TRIM(TZFD%NAME) - !print*,' STATUS=',YSTATUS - !print*,' ACCESS=',YACCESS - !print*,' IOSTAT=',IOS - !print*,' FORM=',YFORM - !print*,' RECL=',YRECL - !print*,' BLANK=',YBLANK - !print*,' POSITION=',YPOSITION - !print*,' ACTION=',YACTION - !print*,' DELIM=',YDELIM - !print*,' PAD=',YPAD -#else - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME),& - STATUS=STATUS, & - ACCESS=ACCESS, & - IOSTAT=IOS, & - FORM=FORM, & - RECL=RECL, & - BLANK=BLANK, & - POSITION=POSITION, & - ACTION=YACTION, & - DELIM=DELIM, & - PAD=PAD) -#endif - -#endif - - ELSE - !! NON I/O processors case - IOS = 0 - TZFD%FLU = JPFNULL - END IF - - CASE('SPECIFIC') - TZFD%OWNER = ISP - TZFD%FLU = IONEWFLU() - -#ifdef MNH_VPP - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & - STATUS=STATUS, & - ACCESS=ACCESS, & - IOSTAT=IOS, & - FORM=FORM, & - RECL=IRECSIZE, & - BLANK=BLANK, & - POSITION=POSITION, & - ACTION=YACTION, & - DELIM=DELIM, & - PAD=PAD) - -#else -#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX) - IF (ACCESS=='DIRECT') THEN - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - ACTION=YACTION) - ELSE - IF (ACTION=='READ') THEN - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - BLANK=YBLANK, & - POSITION=YPOSITION, & - ACTION=YACTION, & - !DELIM=YDELIM, & !Philippe: commented because bug with GCC 5.X - PAD=YPAD) - ELSE - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & - STATUS=YSTATUS, & - ACCESS=YACCESS, & - IOSTAT=IOS, & - FORM=YFORM, & - RECL=YRECL, & - BLANK=YBLANK, & - POSITION=YPOSITION, & - ACTION=YACTION, & - DELIM=YDELIM, & - PAD=YPAD) - ENDIF - ENDIF -#else - OPEN(UNIT=TZFD%FLU, & - FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & - STATUS=STATUS, & - ACCESS=ACCESS, & - IOSTAT=IOS, & - FORM=FORM, & - RECL=RECL, & - BLANK=BLANK, & - POSITION=POSITION, & - ACTION=YACTION, & - DELIM=DELIM, & - PAD=PAD) -#endif - -#endif - - CASE('DISTRIBUTED') - TZFD%OWNER = ISIOP - IF (.NOT. PRESENT(LFIPAR)) THEN - PRINT *,"ERROR OPEN_ll : LFI non present" - RETURN - END IF - TZFD%PARAM=>LFIPAR - - IF (ISP == TZFD%OWNER) THEN - TZFD%FLU = IONEWFLU() - ELSE - !! NON I/O processors case - IOS = 0 - TZFD%FLU = -1 - END IF - - CASE('IO_ZSPLIT') - - TZFD%OWNER = ISIOP - TZFD%NAME = TRIM(FILE)//".lfi" - IF (PRESENT(KNB_PROCIO)) THEN - TZFD%NB_PROCIO = KNB_PROCIO - ELSE - TZFD%NB_PROCIO = 1 - ENDIF - IF( .NOT. GPARALLELIO ) THEN - TZFD%NB_PROCIO = 1 - ENDIF - TZFD%COMM = NMNH_COMM_WORLD - TZFD%PARAM =>LFIPAR -#if defined(MNH_IOCDF4) - IF (ISP == TZFD%OWNER .AND. (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT) & - & .OR. (YACTION=='READ' .AND. LLFIREAD))) THEN -#else - IF (ISP == TZFD%OWNER) THEN -#endif - TZFD%FLU = IONEWFLU() - ELSE - !! NON I/O processors OR NetCDF read case - IOS = 0 - TZFD%FLU = -1 - END IF - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - DO ifile=0,TZFD%NB_PROCIO-1 - irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO) - write(cfile ,'(".Z",i3.3)') ifile+1 - YFILE_IOZ = TRIM(FILE)//cfile//".lfi" - TZFD_IOZ =>NEWFD() - TZFD_IOZ%NAME = YFILE_IOZ - TZFD_IOZ%MODE = 'IO_ZSPLIT' - TZFD_IOZ%OWNER = irank_procio - TZFD_IOZ%COMM = NMNH_COMM_WORLD - TZFD_IOZ%NB_PROCIO = TZFD%NB_PROCIO - TZFD_IOZ%FLU = -1 - TZFD_IOZ%PARAM =>LFIPAR - - IF ( irank_procio .EQ. ISP ) THEN -#if defined(MNH_IOCDF4) - IF (LIOCDF4) THEN - IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN - ! Open NetCDF File for reading - TZFD_IOZ%CDF => NEWIOCDF() - IOSCDF = NF_OPEN(TRIM(FILE)//cfile//".nc4", NF_NOWRITE, TZFD_IOZ%CDF%NCID) - IF (IOSCDF /= NF_NOERR) THEN - PRINT *, 'Error in opening (NF_OPEN) ', TRIM(FILE)//cfile//'.nc4', ' : ', NF_STRERROR(IOS) - STOP - ELSE - IOS = 0 - END IF - PRINT *, 'NF_OPEN(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc4' - END IF - - IF (YACTION == 'WRITE') THEN - ! YACTION == 'WRITE' - ! Create NetCDF File for writing - TZFD_IOZ%CDF => NEWIOCDF() - IOSCDF = NF_CREATE(TRIM(FILE)//cfile//".nc4", & - &IOR(NF_CLOBBER,NF_NETCDF4), TZFD_IOZ%CDF%NCID) - IF (IOSCDF /= NF_NOERR) THEN - PRINT *, 'Error in opening (NF_CREATE) ', TRIM(FILE)//cfile//'.nc4', ' : ', NF_STRERROR(IOS) - STOP - ELSE - IOS = 0 - END IF - PRINT *, 'NF_CREATE(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc4' - END IF - END IF -#endif - IF (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT)& - & .OR. (YACTION=='READ' .AND. LLFIREAD)) THEN - ! LFI case - ! Open LFI File for reading - !this proc must write on this file open it ... - TZFD_IOZ%FLU = IONEWFLU() - !! LFI-File case - IRESOU = 0 - GNAMFI8 = .TRUE. - GFATER8 = .TRUE. - GSTATS8 = .FALSE. - IF (PRESENT(KMELEV)) THEN - IMELEV = KMELEV - ELSE - IMELEV = 0 - ENDIF - INPRAR = 49 - ! - ! JUAN open lfi file temporary modif - ! - INUMBR8 = TZFD_IOZ%FLU - CALL LFIOUV(IRESOU, & - INUMBR8, & - GNAMFI8, & - TZFD_IOZ%NAME, & - "UNKNOWN", & - GFATER8, & - GSTATS8, & - IMELEV, & - INPRAR, & - ININAR8) - !KNINAR = ININAR8 - END IF - ENDIF - ENDDO - END IF - - - END SELECT - - ! Recherche d'un communicateur a reutiliser - ! TZFD is the first element - - TZFD%COMM = ICOMM -!!$ TZFD%COMM = MPI_COMM_NULL - -!!$ TZFDTEMP=>TZFD%NEXT -!!$ DO WHILE(ASSOCIATED(TZFDTEMP)) -!!$ CALL MPI_COMM_COMPARE(ICOMM,TZFDTEMP%COMM,ICMPRES,IERR) -!!$ IF (ICMPRES == MPI_CONGRUENT) THEN -!!$ TZFD%COMM = TZFDTEMP%COMM -!!$ EXIT -!!$ END IF -!!$ TZFDTEMP=>TZFDTEMP%NEXT -!!$ END DO -!!$ -!!$ IF (TZFD%COMM == MPI_COMM_NULL) THEN -!!$ ! Pas de communicateur equivalent -> on duplique -!!$ ! -!!$ CALL MPI_COMM_DUP(ICOMM, TZFD%COMM, IERR) -!!$ ! WRITE(ISTDOUT,*) 'FILE = ',TZFD%NAME,', comm ',TZFD%COMM& -!!$ ! & , ' cree par duplication de comm ', ICOMM -!!$ END IF - - IOSTAT = IOS - UNIT = TZFD%FLU - - CONTAINS - FUNCTION SUFFIX(HEXT) - - CHARACTER(len=*) :: HEXT - CHARACTER(len=LEN(HEXT)+3) :: SUFFIX - - WRITE(SUFFIX,'(A,i3.3)') TRIM(HEXT), ISP - - END FUNCTION SUFFIX - - END SUBROUTINE OPEN_ll - - SUBROUTINE CLOSE_ll(HFILE,IOSTAT,STATUS,OPARALLELIO) - USE MODD_IO_ll -#if defined(MNH_IOCDF4) - USE MODE_NETCDF -#endif - CHARACTER(LEN=*), INTENT(IN) :: HFILE - INTEGER, INTENT(OUT), OPTIONAL :: IOSTAT - CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: STATUS - LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO - - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: OLDCOMM - - INTEGER :: IERR, IGLOBALERR, IRESP - - CHARACTER(LEN=100) :: STATUSL - !JUANZ - CHARACTER(len=5) :: yfile - INTEGER :: ifile, irank_procio,ilen - TYPE(FD_ll), POINTER :: TZFD_IOZ - CHARACTER(len=128) :: YFILE_IOZ - INTEGER(KIND=LFI_INT) :: IRESP8,INUM8 - CHARACTER(LEN=7) :: YSTATU - LOGICAL :: GPARALLELIO - - IF ( PRESENT(OPARALLELIO) ) THEN - GPARALLELIO = OPARALLELIO - ELSE !par defaut on active les IO paralleles en Z si possible - GPARALLELIO = .TRUE. - ENDIF - !JUANZ - - TZFD=>GETFD(HFILE) - - IF (.NOT. ASSOCIATED(TZFD)) THEN - WRITE(ISTDOUT,*) 'Erreur CLOSE_ll : Fichier : ', HFILE, ' non& - & present...' - IF (PRESENT(IOSTAT)) IOSTAT = BADVALUE - RETURN - END IF - - IRESP = 0 - IGLOBALERR = 0 - IF (PRESENT(STATUS)) THEN - STATUSL = STATUS - ELSE - STATUSL = "KEEP" - ENDIF - - SELECT CASE(TZFD%MODE) - CASE('GLOBAL','SPECIFIC') - IF (TZFD%OWNER == ISP) THEN - CLOSE(UNIT=TZFD%FLU, IOSTAT=IRESP,STATUS=STATUSL) - CALL IOFREEFLU(TZFD%FLU) - END IF - CALL MPI_ALLREDUCE(IRESP,IGLOBALERR,1,MPI_INTEGER,MPI_BOR,TZFD& - & %COMM,IERR) - CASE('DISTRIBUTED') - ! nothing to close with FM-Files - - CASE('IO_ZSPLIT') - ! - ! close LFI file in the different PROC - ! - IF( .NOT. GPARALLELIO ) THEN - TZFD%NB_PROCIO = 1 - ENDIF - IF (TZFD%NB_PROCIO .GT. 1 ) THEN - DO ifile=0,TZFD%NB_PROCIO-1 - irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO) - write(yfile ,'(".Z",i3.3)') ifile+1 - ilen = len_trim(TZFD%NAME) - YFILE_IOZ = TRIM(TZFD%NAME(1:ilen-4))//yfile//".lfi" - TZFD_IOZ => GETFD(YFILE_IOZ) - IF (ISP == TZFD_IOZ%OWNER) THEN - IF (TZFD_IOZ%FLU > 0) THEN - INUM8=TZFD_IOZ%FLU - CALL LFIFER(IRESP8,INUM8,YSTATU) - CALL IOFREEFLU(TZFD_IOZ%FLU) - IRESP = IRESP8 - END IF - IF (ASSOCIATED(TZFD_IOZ%CDF)) CALL CLEANIOCDF(TZFD_IOZ%CDF) - END IF - END DO - END IF - END SELECT - - OLDCOMM = TZFD%COMM !! Recopie dans var. temporaire - - CALL DELFD(TZFD) - -!!$ IF (IRESP == IGLOBALERR) THEN -!!$ -!!$ ! liberation du communicateur -!!$ ! -!!$ TZFD=>GETFD(OLDCOMM) -!!$ -!!$ IF (.NOT. ASSOCIATED(TZFD)) THEN -!!$ CALL MPI_COMM_FREE(OLDCOMM, IERR) -!!$ END IF -!!$ END IF - - IF (PRESENT(IOSTAT)) IOSTAT = IGLOBALERR - - END SUBROUTINE CLOSE_ll - - SUBROUTINE FLUSH_ll(HFILE,IRESP) -#if defined(NAGf95) - USE F90_UNIX -#endif - USE MODD_IO_ll - CHARACTER(LEN=*), INTENT(IN) :: HFILE - INTEGER, INTENT(OUT), OPTIONAL :: IRESP - - TYPE(FD_ll), POINTER :: TZFD - INTEGER :: IUNIT - - IRESP=0 - TZFD=>GETFD(HFILE) - IF (.NOT. ASSOCIATED(TZFD)) THEN - WRITE(ISTDOUT,*) 'Error in FLUSH_ll : file ',TRIM(HFILE),& - &' not present !' - IF (PRESENT(IRESP)) IRESP = BADVALUE - RETURN - END IF - - IUNIT=TZFD%FLU - IF (TZFD%OWNER == ISP .AND. TZFD%MODE /= 'DISTRIBUTED') THEN -#if defined(MNH_SP4) - CALL FLUSH(IUNIT) -#else - CALL FLUSH(IUNIT) -#endif - END IF - - END SUBROUTINE FLUSH_ll - - FUNCTION io_file(k,nb_proc_io) - ! - ! return the file number where to write the K level of data - ! - IMPLICIT NONE - INTEGER(kind=MNH_MPI_RANK_KIND) :: k,nb_proc_io - INTEGER(kind=MNH_MPI_RANK_KIND) :: io_file - - io_file = MOD ((k-1) , nb_proc_io ) - - END FUNCTION io_file - - FUNCTION io_rank(ifile,nb_proc,nb_proc_io,offset_rank) - ! - ! return the proc number which must write the 'ifile' file - ! - IMPLICIT NONE - INTEGER(kind=MNH_MPI_RANK_KIND) :: ifile,nb_proc,nb_proc_io - INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL :: offset_rank - - INTEGER(kind=MNH_MPI_RANK_KIND) :: io_rank - - INTEGER(kind=MNH_MPI_RANK_KIND) :: ipas,irest - - ipas = nb_proc / nb_proc_io - irest = MOD ( nb_proc , nb_proc_io ) - - IF (ipas /= 0 ) THEN - io_rank=ipas * ifile + MIN(ifile , irest ) - ELSE - io_rank=MOD(ifile , nb_proc ) - ENDIF - - ! - ! optional rank to shift for read test - ! - IF (PRESENT(offset_rank)) THEN - IF ( offset_rank .GT.0 ) io_rank=MOD(io_rank+offset_rank,nb_proc) - IF ( offset_rank .LT.0 ) io_rank=MOD(nb_proc-io_rank+offset_rank,nb_proc) - ENDIF - - END FUNCTION io_rank - - -END MODULE MODE_IO_ll diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_define.F90 b/src/OASIS/MNH/mnh_oasis_define.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_define.F90 rename to src/OASIS/MNH/mnh_oasis_define.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90 b/src/OASIS/MNH/mnh_oasis_grid.F90 similarity index 99% rename from src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90 rename to src/OASIS/MNH/mnh_oasis_grid.F90 index 1695eddadce4275e1f5e1113e8a247b837678290..22d99b6c07f95a21386defbbc993cbef4ad21c67 100644 --- a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90 +++ b/src/OASIS/MNH/mnh_oasis_grid.F90 @@ -64,7 +64,7 @@ USE MOD_OASIS #endif ! USE MODD_PARAMETERS, ONLY : XUNDEF -USE MODD_IO_SURF_MNH, ONLY : NHALO, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : NHALO USE MODD_CST, ONLY : XPI, XRADIUS USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll, NIMAX, NJMAX USE MODD_PARAMETERS, ONLY : JPHEXT diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_recv.F90 b/src/OASIS/MNH/mnh_oasis_recv.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_recv.F90 rename to src/OASIS/MNH/mnh_oasis_recv.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_send.F90 b/src/OASIS/MNH/mnh_oasis_send.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_send.F90 rename to src/OASIS/MNH/mnh_oasis_send.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_flux.F90 b/src/OASIS/SURFEX/coare30_flux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_flux.F90 rename to src/OASIS/SURFEX/coare30_flux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_seaflux.F90 b/src/OASIS/SURFEX/coare30_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_seaflux.F90 rename to src/OASIS/SURFEX/coare30_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coupling_seafluxn.F90 b/src/OASIS/SURFEX/coupling_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/coupling_seafluxn.F90 rename to src/OASIS/SURFEX/coupling_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/dealloc_seafluxn.F90 b/src/OASIS/SURFEX/dealloc_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/dealloc_seafluxn.F90 rename to src/OASIS/SURFEX/dealloc_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/default_prep_seaflux.F90 b/src/OASIS/SURFEX/default_prep_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/default_prep_seaflux.F90 rename to src/OASIS/SURFEX/default_prep_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/default_seaflux.F90 b/src/OASIS/SURFEX/default_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/default_seaflux.F90 rename to src/OASIS/SURFEX/default_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_cpl_esm_sea.F90 b/src/OASIS/SURFEX/diag_cpl_esm_sea.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/diag_cpl_esm_sea.F90 rename to src/OASIS/SURFEX/diag_cpl_esm_sea.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_inline_seafluxn.F90 b/src/OASIS/SURFEX/diag_inline_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/diag_inline_seafluxn.F90 rename to src/OASIS/SURFEX/diag_inline_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_seaflux_initn.F90 b/src/OASIS/SURFEX/diag_seaflux_initn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/diag_seaflux_initn.F90 rename to src/OASIS/SURFEX/diag_seaflux_initn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_sea.F90 b/src/OASIS/SURFEX/get_sfx_sea.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_sea.F90 rename to src/OASIS/SURFEX/get_sfx_sea.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_wave.F90 b/src/OASIS/SURFEX/get_sfx_wave.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_wave.F90 rename to src/OASIS/SURFEX/get_sfx_wave.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfxcpln.F90 b/src/OASIS/SURFEX/get_sfxcpln.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfxcpln.F90 rename to src/OASIS/SURFEX/get_sfxcpln.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90 b/src/OASIS/SURFEX/init_seafluxn.F90 similarity index 99% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90 rename to src/OASIS/SURFEX/init_seafluxn.F90 index e22e2a731ef36b420a7d203fd326d5a8b1bf8fb2..e718fd1bb427005982e90dbe0ee87809549620d1 100644 --- a/src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90 +++ b/src/OASIS/SURFEX/init_seafluxn.F90 @@ -415,7 +415,8 @@ ENDIF ! 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 ) + HDSTNAMES=SM%CHS%CDSTNAMES, HSLTNAMES=SM%CHS%CSLTNAMES, & + HSNWNAMES=SM%CHS%CSNWNAMES ) ! !* deposition scheme ! diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_prep_seaflux.F90 b/src/OASIS/SURFEX/modd_prep_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modd_prep_seaflux.F90 rename to src/OASIS/SURFEX/modd_prep_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_seafluxn.F90 b/src/OASIS/SURFEX/modd_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modd_seafluxn.F90 rename to src/OASIS/SURFEX/modd_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_sfx_oasis.F90 b/src/OASIS/SURFEX/modd_sfx_oasis.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modd_sfx_oasis.F90 rename to src/OASIS/SURFEX/modd_sfx_oasis.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/mode_read_netcdf_mercator.F90 b/src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/mode_read_netcdf_mercator.F90 rename to src/OASIS/SURFEX/mode_read_netcdf_mercator.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_prep_seaflux.F90 b/src/OASIS/SURFEX/modn_prep_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modn_prep_seaflux.F90 rename to src/OASIS/SURFEX/modn_prep_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_seafluxn.F90 b/src/OASIS/SURFEX/modn_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modn_seafluxn.F90 rename to src/OASIS/SURFEX/modn_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_sfx_oasis.F90 b/src/OASIS/SURFEX/modn_sfx_oasis.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/modn_sfx_oasis.F90 rename to src/OASIS/SURFEX/modn_sfx_oasis.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_hor_seaflux_field.F90 b/src/OASIS/SURFEX/prep_hor_seaflux_field.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/prep_hor_seaflux_field.F90 rename to src/OASIS/SURFEX/prep_hor_seaflux_field.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux.F90 b/src/OASIS/SURFEX/prep_seaflux.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux.F90 rename to src/OASIS/SURFEX/prep_seaflux.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_netcdf.F90 b/src/OASIS/SURFEX/prep_seaflux_netcdf.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_netcdf.F90 rename to src/OASIS/SURFEX/prep_seaflux_netcdf.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_unif.F90 b/src/OASIS/SURFEX/prep_seaflux_unif.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_unif.F90 rename to src/OASIS/SURFEX/prep_seaflux_unif.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_sea.F90 b/src/OASIS/SURFEX/put_sfx_sea.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_sea.F90 rename to src/OASIS/SURFEX/put_sfx_sea.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_wave.F90 b/src/OASIS/SURFEX/put_sfx_wave.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_wave.F90 rename to src/OASIS/SURFEX/put_sfx_wave.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfxcpln.F90 b/src/OASIS/SURFEX/put_sfxcpln.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfxcpln.F90 rename to src/OASIS/SURFEX/put_sfxcpln.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_lcover.F90 b/src/OASIS/SURFEX/read_lcover.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/read_lcover.F90 rename to src/OASIS/SURFEX/read_lcover.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_nam_prep_seafluxn.F90 b/src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/read_nam_prep_seafluxn.F90 rename to src/OASIS/SURFEX/read_nam_prep_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_namelists_seafluxn.F90 b/src/OASIS/SURFEX/read_namelists_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/read_namelists_seafluxn.F90 rename to src/OASIS/SURFEX/read_namelists_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_prep_seaflux_conf.F90 b/src/OASIS/SURFEX/read_prep_seaflux_conf.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/read_prep_seaflux_conf.F90 rename to src/OASIS/SURFEX/read_prep_seaflux_conf.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_seafluxn.F90 b/src/OASIS/SURFEX/read_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/read_seafluxn.F90 rename to src/OASIS/SURFEX/read_seafluxn.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_define.F90 b/src/OASIS/SURFEX/sfx_oasis_define.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_define.F90 rename to src/OASIS/SURFEX/sfx_oasis_define.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_init.F90 b/src/OASIS/SURFEX/sfx_oasis_init.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_init.F90 rename to src/OASIS/SURFEX/sfx_oasis_init.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_read_nam.F90 b/src/OASIS/SURFEX/sfx_oasis_read_nam.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_read_nam.F90 rename to src/OASIS/SURFEX/sfx_oasis_read_nam.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_recv.F90 b/src/OASIS/SURFEX/sfx_oasis_recv.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_recv.F90 rename to src/OASIS/SURFEX/sfx_oasis_recv.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_send.F90 b/src/OASIS/SURFEX/sfx_oasis_send.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_send.F90 rename to src/OASIS/SURFEX/sfx_oasis_send.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/write_lcover.F90 b/src/OASIS/SURFEX/write_lcover.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/write_lcover.F90 rename to src/OASIS/SURFEX/write_lcover.F90 diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/writesurf_seafluxn.F90 b/src/OASIS/SURFEX/writesurf_seafluxn.F90 similarity index 100% rename from src/ARCH_SRC/CPL_WAVE/SURFEX/writesurf_seafluxn.F90 rename to src/OASIS/SURFEX/writesurf_seafluxn.F90