diff --git a/src/MNH/bikhardt.f90 b/src/MNH/bikhardt.f90 index a049ec3150b1b192aa8f41ad7d65bbb7a686c069..1efebdc110d4eb558ebb4e10203fddeaebae9c7f 100644 --- a/src/MNH/bikhardt.f90 +++ b/src/MNH/bikhardt.f90 @@ -1,126 +1,27 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2019 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 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 interpol 2006/05/18 13:07:25 +! Modifications: +! P. Wautelet 03/05/2019: modi_bikhardt -> mode_bikhardt !----------------------------------------------------------------- !################### -MODULE MODI_BIKHARDT +module mode_bikhardt !################### -! -INTERFACE BIKHARDT -! - SUBROUTINE BIKHARDT4D (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,KGRID, & - HLBCX,HLBCY,PFIELD1,PFIELD2) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END -INTEGER, INTENT(IN) :: KYOR,KYEND ! of the model domain, relative to the outer model -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KGRID ! code of grid point -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD1 ! field of outer model -REAL, DIMENSION(:,:,:,:), INTENT(OUT):: PFIELD2 ! field of inner model -! -END SUBROUTINE BIKHARDT4D -! - SUBROUTINE BIKHARDT3D (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,KGRID, & - HLBCX,HLBCY,PFIELD1,PFIELD2) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END -INTEGER, INTENT(IN) :: KYOR,KYEND ! of the inner model domain, relative to outer model -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KGRID ! code of grid point -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -REAL, DIMENSION(:,:,:), INTENT(IN) :: PFIELD1 ! field of outer model -REAL, DIMENSION(:,:,:), INTENT(OUT):: PFIELD2 ! field of inner model -! -END SUBROUTINE BIKHARDT3D -! - SUBROUTINE BIKHARDT2D (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,KGRID, & - HLBCX,HLBCY,PFIELD1,PFIELD2) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END -INTEGER, INTENT(IN) :: KYOR,KYEND ! of the inner model domain, relative to outer model -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KGRID ! code of grid point -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD1 ! field of outer model -REAL, DIMENSION(:,:), INTENT(OUT):: PFIELD2 ! field of inner model -! -END SUBROUTINE BIKHARDT2D -! -END INTERFACE -! -END MODULE MODI_BIKHARDT -! -!##################### -MODULE MODI_BIKHARDT4D -!##################### -! -INTERFACE -! - SUBROUTINE BIKHARDT4D (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,KGRID, & - HLBCX,HLBCY,PFIELD1,PFIELD2) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END -INTEGER, INTENT(IN) :: KYOR,KYEND ! of the inner model domain, relative to outer model -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KGRID ! code of grid point -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD1 ! field of outer model -REAL, DIMENSION(:,:,:,:), INTENT(OUT):: PFIELD2 ! field of inner model -! -END SUBROUTINE BIKHARDT4D -! -END INTERFACE -! -END MODULE MODI_BIKHARDT4D -! -! + +implicit none + +private + +public :: Bikhardt + +interface Bikhardt + module procedure Bikhardt2d, Bikhardt3d, Bikhardt4d +end interface + +contains + ! ######################################################################### SUBROUTINE BIKHARDT4D (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & @@ -183,7 +84,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - ! interpolation coefficients + ! interpolation coefficients REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. @@ -489,13 +390,11 @@ END SUBROUTINE BIKHARDT4D !* 0. DECLARATIONS ! ------------ ! -USE MODI_BIKHARDT4D -! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - ! interpolation coefficients + ! interpolation coefficients REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. @@ -578,13 +477,11 @@ END SUBROUTINE BIKHARDT3D !* 0. DECLARATIONS ! ------------ ! -USE MODI_BIKHARDT4D -! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - ! interpolation coefficients + ! interpolation coefficients REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. @@ -614,3 +511,5 @@ PFIELD2(:,:) =ZFIELD2(:,:,1,1) !------------------------------------------------------------------------------- ! END SUBROUTINE BIKHARDT2D + +end module mode_bikhardt diff --git a/src/MNH/eddyUV_flux_one_wayn.f90 b/src/MNH/eddyUV_flux_one_wayn.f90 index 3ec0effa1cd57de05ad6c49a7d0123c4d2510a3b..99a1fc6783a34ab406dd09980941479396b15c5a 100644 --- a/src/MNH/eddyUV_flux_one_wayn.f90 +++ b/src/MNH/eddyUV_flux_one_wayn.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2011-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ############################### @@ -64,11 +64,10 @@ USE MODD_REF_n, ONLY:XRHODJ USE MODD_METRICS_n USE MODI_GRADIENT_U ! -! For the horizontal interpolation -USE MODI_BIKHARDT USE MODD_BIKHARDT_n USE MODD_NESTING ! +use mode_bikhardt USE MODE_FIELD, ONLY : TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME ! IMPLICIT NONE diff --git a/src/MNH/eddy_flux_one_wayn.f90 b/src/MNH/eddy_flux_one_wayn.f90 index 1aaadbc64f4d049638e6fd39d54f42ac7afb173b..31549eab9eb22dbfa862d9b69f72cbf091c58ee5 100644 --- a/src/MNH/eddy_flux_one_wayn.f90 +++ b/src/MNH/eddy_flux_one_wayn.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2011-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ############################### @@ -65,11 +65,10 @@ USE MODD_METRICS_n USE MODI_GRADIENT_W USE MODI_GRADIENT_U ! -! For the horizontal interpolation -USE MODI_BIKHARDT USE MODD_BIKHARDT_n USE MODD_NESTING ! +use mode_bikhardt USE MODE_FIELD, ONLY : TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME ! IMPLICIT NONE diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 4678c605673b913b6be87dc70e12572429f90773..dad3e933933a55d6a761bae30c453cecf9a0e377 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -301,6 +301,7 @@ USE MODE_IO USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list USE MODE_IO_FILE, ONLY: IO_File_open USE MODE_IO_FIELD_READ, only: IO_Field_read +USE MODE_INI_ONE_WAY_n USE MODE_GATHER_ll USE MODE_MSG USE MODE_TYPE_ZDIFFU @@ -392,7 +393,6 @@ USE MODI_INI_RADIATIONS_ECRAD 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 @@ -2006,20 +2006,20 @@ IF ( KMI > 1) THEN DPTR_XLBYRM=>XLBYRM DPTR_XLBXSVM=>XLBXSVM DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),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 ) + CALL INI_ONE_WAY_n(NDAD(KMI),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,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 ! ! diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90 index 1b6100cd773e6cd67bc95046afe517991cede48b..50cbf7ae92633f14d3579f961cc825188da6d148 100644 --- a/src/MNH/ini_one_wayn.f90 +++ b/src/MNH/ini_one_wayn.f90 @@ -3,78 +3,25 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -! ####################### - MODULE MODI_INI_ONE_WAY_n -! ####################### -! -INTERFACE -! - SUBROUTINE INI_ONE_WAY_n( KDAD,PTSTEP,KMI,KTCOUNT, & - PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KDXRATIO,KDYRATIO,KDTRATIO, & - HLBCX,HLBCY,KRIMX,KRIMY, & - KKLIN_LBXU,PCOEFLIN_LBXU,KKLIN_LBYU,PCOEFLIN_LBYU, & - KKLIN_LBXV,PCOEFLIN_LBXV,KKLIN_LBYV,PCOEFLIN_LBYV, & - KKLIN_LBXW,PCOEFLIN_LBXW,KKLIN_LBYW,PCOEFLIN_LBYW, & - KKLIN_LBXM,PCOEFLIN_LBXM,KKLIN_LBYM,PCOEFLIN_LBYM, & - HCLOUD, OUSECHAQ, OUSECHIC, & - PLBXUM,PLBYUM,PLBXVM,PLBYVM,PLBXWM,PLBYWM, & - PLBXTHM,PLBYTHM, & - PLBXTKEM,PLBYTKEM, & - PLBXRM,PLBYRM,PLBXSVM,PLBYSVM ) -! -! -INTEGER, INTENT(IN) :: KDAD ! Number of the DAD model -REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KMI ! model number -INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop COUNTer - ! (=1 at the segment beginning) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KDTRATIO ! Time step resolution RATIO -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area -! coefficients for the vertical interpolation of the LB fields -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXU,KKLIN_LBYU -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXU,PCOEFLIN_LBYU -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXV,KKLIN_LBYV -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXV,PCOEFLIN_LBYV -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXW,KKLIN_LBYW -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXW,PCOEFLIN_LBYW -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXM,KKLIN_LBYM -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXM,PCOEFLIN_LBYM -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Indicator of the cloud scheme -LOGICAL, INTENT(IN) :: OUSECHAQ ! logical for aqueous phase chemistry -LOGICAL, INTENT(IN) :: OUSECHIC ! logical for ice phase chemistry -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHM ,PLBYTHM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKEM,PLBYTKEM ! Theta, TKE -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXRM ,PLBYRM ! Moisture and SV -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXSVM ,PLBYSVM ! in x and y-dir. -! -END SUBROUTINE INI_ONE_WAY_n -! -END INTERFACE -! -END MODULE MODI_INI_ONE_WAY_n -! +!######################## +MODULE MODE_INI_ONE_WAY_n +!######################## + +use mode_msg + +implicit none + +private + +public :: INI_ONE_WAY_n, Compute_ini_LB + +contains ! #################################################################### -SUBROUTINE INI_ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & +SUBROUTINE INI_ONE_WAY_n(KDAD,KMI, & PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KDXRATIO,KDYRATIO,KDTRATIO, & + KDXRATIO,KDYRATIO, & HLBCX,HLBCY,KRIMX,KRIMY, & KKLIN_LBXU,PCOEFLIN_LBXU,KKLIN_LBYU,PCOEFLIN_LBYU, & KKLIN_LBXV,PCOEFLIN_LBXV,KKLIN_LBYV,PCOEFLIN_LBYV, & @@ -141,100 +88,96 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -!! +! P. Wautelet 03/05/2019: restructuration of one_wayn and ini_one_wayn +! !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ -USE MODE_ll -use mode_msg -USE MODE_MODELN_HANDLER -! -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_CST -USE MODD_FIELD_n ! modules relative to the outer model $n -USE MODD_PARAM_n -USE MODD_CH_MNHC_n, ONLY: LUSECHAQ, LUSECHIC -USE MODD_REF_n -USE MODD_NSV -! -USE MODI_BIKHARDT -USE MODI_VER_INTERP_LIN -USE MODI_SET_CONC_RAIN_C2R2 -USE MODI_SET_CONC_ICE_C1R3 -USE MODI_SET_CHEMAQ_1WAY ! +USE MODD_CH_MNHC_n, only: LUSECHAQ, LUSECHIC +USE MODD_CST, only: XTH00 +USE MODD_FIELD_n, only: XRT, XSVT, XUT, XVT, XWT, XTHT, XTKET +USE MODD_NSV, only: NSV_A, NSV_C1R3BEG_A, NSV_C1R3_A, NSV_C2R2BEG_A, NSV_C2R2_A, NSV_CHEMBEG_A, NSV_CHEMEND_A, & + NSV_CHEM_A, NSV_CHICBEG_A, NSV_CHIC_A, NSV_DSTBEG_A, NSV_DSTDEPBEG_A, NSV_DSTDEP_A, NSV_DST_A, & + NSV_ELECBEG_A, NSV_ELEC_A, NSV_LGBEG_A, NSV_LG_A, NSV_LIMA_A, NSV_LIMA_BEG_A, & + NSV_LNOXBEG_A, NSV_LNOX_A, NSV_PPBEG_A, NSV_PP_A, & + NSV_SLTBEG_A, NSV_SLTDEPBEG_A, NSV_SLTDEP_A, NSV_SLT_A, NSV_USER_A + +USE MODD_PARAM_n, only: CCLOUD +USE MODD_REF_n, only: XRHODJ, XRHODREF +! +use mode_bikhardt +use mode_ll, only: LS_FORCING_ll, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll, SET_LSFIELD_1WAY_ll +USE MODE_MODELN_HANDLER, only: GOTO_MODEL +! +USE MODI_SET_CHEMAQ_1WAY +USE MODI_SET_CONC_ICE_C1R3 USE MODI_SET_CONC_LIMA +USE MODI_SET_CONC_RAIN_C2R2 +! ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! ! -INTEGER, INTENT(IN) :: KDAD ! Number of the DAD model -REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KMI ! model number -INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop COUNTer - ! (=1 at the segment beginning) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KDTRATIO ! Time step resolution RATIO -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area +INTEGER, INTENT(IN) :: KDAD ! Number of the DAD model +INTEGER, INTENT(IN) :: KMI ! model number +! interpolation coefficients +REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. +! +INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO +INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions +INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area ! coefficients for the vertical interpolation of the LB fields -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXU,KKLIN_LBYU -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXU,PCOEFLIN_LBYU -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXV,KKLIN_LBYV -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXV,PCOEFLIN_LBYV -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXW,KKLIN_LBYW -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXW,PCOEFLIN_LBYW -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXM,KKLIN_LBYM -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXM,PCOEFLIN_LBYM -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Indicator of the cloud scheme -LOGICAL, INTENT(IN) :: OUSECHAQ ! logical for aqueous phase -LOGICAL, INTENT(IN) :: OUSECHIC ! logical for ice phase chemistry -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHM ,PLBYTHM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKEM,PLBYTKEM ! Theta, TKE -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXRM ,PLBYRM ! Moisture and SV -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXSVM ,PLBYSVM ! in x and y-dir. +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBXU,KKLIN_LBYU +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXU,PCOEFLIN_LBYU +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBXV,KKLIN_LBYV +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXV,PCOEFLIN_LBYV +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBXW,KKLIN_LBYW +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXW,PCOEFLIN_LBYW +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBXM,KKLIN_LBYM +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXM,PCOEFLIN_LBYM +CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Indicator of the cloud scheme +LOGICAL, INTENT(IN) :: OUSECHAQ ! logical for aqueous phase +LOGICAL, INTENT(IN) :: OUSECHIC ! logical for ice phase chemistry +! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Large Scale fields at t-dt +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHM ,PLBYTHM ! Large Scale fields at t-dt +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKEM,PLBYTKEM ! Theta, TKE +REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBXRM ,PLBYRM ! Moisture and SV +REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBXSVM ,PLBYSVM ! in x and y-dir. ! ! !* 0.2 declarations of local variables ! -INTEGER :: IIB,IIE,IJB,IJE,IIU,IJU -INTEGER :: ILBX,ILBY,ILBX2,ILBY2 -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK -LOGICAL :: GVERT_INTERP +INTEGER :: IIB,IIE,IJB,IJE,IIU,IJU +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK ! -INTEGER :: IRR,ISV_USER ! Number of moist and user scalar variables -INTEGER :: JRR,JSV ! Loop index +INTEGER :: IRR,ISV_USER ! Number of moist and user scalar variables +INTEGER :: JRR,JSV ! Loop index +INTEGER :: IGRID ! ! reduced array for the interpolation coefficients -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOEFLIN_LBXM_RED,ZCOEFLIN_LBYM_RED -INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: IKLIN_LBXM_RED,IKLIN_LBYM_RED +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOEFLIN_LBXM_RED,ZCOEFLIN_LBYM_RED +INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: IKLIN_LBXM_RED,IKLIN_LBYM_RED ! ! Variables used for LS communications -INTEGER :: IINFO_ll, IDIMX, IDIMY -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTUM, ZTVM, ZTWM, ZTTHM, ZTTKEM -REAL, DIMENSION(:,:,:,:), ALLOCATABLE ::ZTRM,ZTSVM -! -CHARACTER(LEN=4) :: ZINIT_TYPE ! type of C2R2 initialisation -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCONCM ! C2R2 concentrations -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMM ! chemical concentrations -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMMI ! chemical ice phase concentrations +INTEGER :: IINFO_ll, IDIMX, IDIMY +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTUM, ZTVM, ZTWM, ZTTHM, ZTTKEM +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZTRM,ZTSVM +! +CHARACTER(LEN=4) :: ZINIT_TYPE ! type of C2R2 initialisation +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCONCM ! C2R2 concentrations +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMM ! chemical concentrations +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMMI ! chemical ice phase concentrations !------------------------------------------------------------------------------- ! !* 0. INITIALISATION @@ -271,8 +214,6 @@ ELSE ENDIF ! ! -GVERT_INTERP=.TRUE. -! IRR=MIN(SIZE(XRT,4),SIZE(PLBXRM,4)) ISV_USER=MIN(NSV_USER_A(KDAD),NSV_USER_A(KMI)) ! @@ -551,190 +492,69 @@ IF (ALLOCATED(ZCHEMMI)) DEALLOCATE(ZCHEMMI) !* 1. U FIELD TREATMENT ! ----------------- ! -!* 1.1 Horizontal Bikhardt interpolation -! -PLBXUM=0. -PLBYUM=0. -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,2, & - HLBCX,HLBCY,ZTUM,ZWORK) +IGRID = 2 +CALL Compute_ini_LB( PLBXUM, PLBYUM, ZTUM, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXU, KKLIN_LBYU, & + PCOEFLIN_LBXU, PCOEFLIN_LBYU ) DEALLOCATE(ZTUM) ! -ILBX2=SIZE(PLBXUM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXUM(1:ILBX,IJB:IJE,:)=ZWORK(IIB+1:IIB+ILBX,IJB:IJE,:) ! C grid -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXUM(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYUM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYUM(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYUM(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -!* 1.2 Vertical interpolation -! -IF ( SIZE(PLBXUM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBXUM(:,:,:) = VER_INTERP_LIN(PLBXUM(:,:,:), & - KKLIN_LBXU(:,:,:),PCOEFLIN_LBXU(:,:,:)) -END IF -! -IF ( SIZE(PLBYUM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBYUM(:,:,:) = VER_INTERP_LIN(PLBYUM(:,:,:), & - KKLIN_LBYU(:,:,:),PCOEFLIN_LBYU(:,:,:)) -END IF -! !------------------------------------------------------------------------------- ! !* 2. V FIELD TREATMENT ! ----------------- ! -!* 2.1 Horizontal Bikhardt interpolation -! -PLBXVM=0. -PLBYVM=0. -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,3, & - HLBCX,HLBCY,ZTVM,ZWORK) +IGRID = 3 +CALL Compute_ini_LB( PLBXVM, PLBYVM, ZTVM, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXV, KKLIN_LBYV, & + PCOEFLIN_LBXV, PCOEFLIN_LBYV ) DEALLOCATE(ZTVM) ! -ILBX2=SIZE(PLBXVM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXVM(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXVM(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYVM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYVM(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB+1:IJB+ILBY,:) ! C grid -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYVM(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -!* 1.2 Vertical interpolation -! -IF ( SIZE(PLBXVM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBXVM(:,:,:) = VER_INTERP_LIN(PLBXVM(:,:,:), & - KKLIN_LBXV(:,:,:),PCOEFLIN_LBXV(:,:,:)) -END IF -! -IF ( SIZE(PLBYVM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBYVM(:,:,:) = VER_INTERP_LIN(PLBYVM(:,:,:), & - KKLIN_LBYV(:,:,:),PCOEFLIN_LBYV(:,:,:)) -END IF - !------------------------------------------------------------------------------- ! !* 3. W FIELD TREATMENT ! ----------------- ! -!* 3.1 Horizontal Bikhardt interpolation -! -PLBXWM=0. -PLBYWM=0. -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,4, & - HLBCX,HLBCY,ZTWM,ZWORK) +IGRID = 4 +CALL Compute_ini_LB( PLBXWM, PLBYWM, ZTWM, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXW, KKLIN_LBYW, & + PCOEFLIN_LBXW, PCOEFLIN_LBYW ) DEALLOCATE(ZTWM) ! -ILBX2=SIZE(PLBXWM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXWM(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXWM(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYWM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYWM(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYWM(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -!* 1.2 Vertical interpolation -! -IF ( SIZE(PLBXWM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBXWM(:,:,:) = VER_INTERP_LIN(PLBXWM(:,:,:), & - KKLIN_LBXW(:,:,:),PCOEFLIN_LBXW(:,:,:)) -END IF -! -IF ( SIZE(PLBYWM,1) /= 0 .AND. GVERT_INTERP) THEN - PLBYWM(:,:,:) = VER_INTERP_LIN(PLBYWM(:,:,:), & - KKLIN_LBYW(:,:,:),PCOEFLIN_LBYW(:,:,:)) -END IF -! -! -! !------------------------------------------------------------------------------- ! -!* 5. COMPUTE LARGE SCALE SOURCES FOR POTENTIAL TEMPERATURE +!* 4. COMPUTE LARGE SCALE SOURCES FOR POTENTIAL TEMPERATURE ! ----------------------------------------------------- ! -CALL COMPUTE_LB_M(PLBXTHM,PLBYTHM,ZTTHM,XTH00) +IGRID = 1 +CALL Compute_ini_LB( PLBXTHM, PLBYTHM, ZTTHM, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + PTH00 = XTH00, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) ! DEALLOCATE(ZTTHM) ! ! !------------------------------------------------------------------------------- ! -!* 6. COMPUTE LARGE SCALE SOURCES FOR TURBULENT KINETIC ENERGY +!* 5. COMPUTE LARGE SCALE SOURCES FOR TURBULENT KINETIC ENERGY ! -------------------------------------------------------- ! ! @@ -742,13 +562,22 @@ IF (SIZE(XTKET,3) == 0 .OR. SIZE(PLBXTKEM,3) == 0) THEN PLBXTKEM(:,:,:) = 0. ! turbulence not activated PLBYTKEM(:,:,:) = 0. ELSE - CALL COMPUTE_LB_M(PLBXTKEM,PLBYTKEM,ZTTKEM) + IGRID = 1 + CALL Compute_ini_LB( PLBXTKEM, PLBYTKEM, ZTTKEM, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) DEALLOCATE(ZTTKEM) ENDIF ! !------------------------------------------------------------------------------- ! -!* 7. COMPUTE LARGE SCALE SOURCES FOR MOIST VARIABLES +!* 6. COMPUTE LARGE SCALE SOURCES FOR MOIST VARIABLES ! ----------------------------------------------- ! ! @@ -756,8 +585,17 @@ IF (IRR == 0 ) THEN PLBXRM(:,:,:,:) = 0. ! water cycle not activated PLBYRM(:,:,:,:) = 0. ELSE + IGRID = 1 DO JRR = 1,IRR - CALL COMPUTE_LB_M(PLBXRM(:,:,:,JRR),PLBYRM(:,:,:,JRR),ZTRM(:,:,:,JRR)) + CALL Compute_ini_LB( PLBXRM(:,:,:,JRR), PLBYRM(:,:,:,JRR), ZTRM(:,:,:,JRR), ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) END DO DEALLOCATE(ZTRM) ! @@ -768,13 +606,22 @@ END IF ! !------------------------------------------------------------------------------- ! -!* 8. COMPUTE LARGE SCALE SOURCES FOR SCALAR VARIABLES +!* 7. COMPUTE LARGE SCALE SOURCES FOR SCALAR VARIABLES ! ------------------------------------------------ ! ! IF (NSV_A(KMI) > 0) THEN + IGRID = 1 DO JSV = 1,NSV_A(KMI) - CALL COMPUTE_LB_M(PLBXSVM(:,:,:,JSV),PLBYSVM(:,:,:,JSV),ZTSVM(:,:,:,JSV)) + CALL Compute_ini_LB( PLBXSVM(:,:,:,JSV),PLBYSVM(:,:,:,JSV),ZTSVM(:,:,:,JSV), ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) END DO DEALLOCATE(ZTSVM) ELSE @@ -788,20 +635,67 @@ DEALLOCATE(ZCOEFLIN_LBXM_RED,ZCOEFLIN_LBYM_RED,IKLIN_LBXM_RED,IKLIN_LBYM_RED) CALL GOTO_MODEL(KMI) !------------------------------------------------------------------------------ ! -CONTAINS +END SUBROUTINE INI_ONE_WAY_n + + + +!################################################################################# +SUBROUTINE Compute_ini_LB(PLBX,PLBY,PTFIELD,PWORK, & + PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & + PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & + KIB,KIE,KJB,KJE, KGRID, & + KDIMX,KDIMY,KDXRATIO,KDYRATIO,HLBCX,HLBCY,KRIMX,KRIMY, & + KKLIN_LBX,KKLIN_LBY, & + PCOEFLIN_LBX,PCOEFLIN_LBY, & + PTH00, & + KKLIN_LBX_RED,KKLIN_LBY_RED, & + PCOEFLIN_LBX_RED,PCOEFLIN_LBY_RED ) +!################################################################################# +! +use modd_parameters, only: jphext + +use mode_bikhardt +use mode_ll, only: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll + +use modi_ver_interp_lin + +IMPLICIT NONE ! +!* 0.1 declarations of arguments ! -! ################################################ - SUBROUTINE COMPUTE_LB_M(PLBX,PLBY,PTFIELD,PTH00) -! ################################################ +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBX,PLBY ! source term +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTFIELD ! ls forcing array +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWORK +! interpolation coefficients +REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. +INTEGER, INTENT(IN) :: KIB,KIE,KJB,KJE +INTEGER, INTENT(IN) :: KGRID ! code of grid point +INTEGER, INTENT(IN) :: KDIMX, KDIMY +INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO +INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions +INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBX,KKLIN_LBY +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBX,PCOEFLIN_LBY +REAL, OPTIONAL, INTENT(IN) :: PTH00 ! reference temperature +INTEGER, DIMENSION(:,:,:), optional, INTENT(IN) :: KKLIN_LBX_RED,KKLIN_LBY_RED +REAL, DIMENSION(:,:,:), optional, INTENT(in) :: PCOEFLIN_LBX_RED,PCOEFLIN_LBY_RED +! +!* 0.2 declarations of local variables ! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBX,PLBY ! source term -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTFIELD ! ls forcing array -REAL, OPTIONAL, INTENT(IN) :: PTH00 ! reference temperature +INTEGER :: ILBX, ILBY, ILBX2, ILBY2 +INTEGER :: IW, IE, IN, IS ! + +if ( kgrid<1 .or. kgrid>4 ) call Print_msg( NVERB_FATAL, 'GEN', 'Compute_LB', 'invalid kgrid dummy argument' ) + IF(PRESENT(PTH00)) THEN - PLBX=PTH00 ! to avoid undefined computation - PLBY=PTH00 + PLBX(:,:,:) = PTH00 ! to avoid undefined computation + PLBY(:,:,:) = PTH00 ELSE PLBX=0. PLBY=0. @@ -812,8 +706,8 @@ ENDIF ! CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - HLBCX,HLBCY,PTFIELD,ZWORK) + 2,2,KDIMX-1,KDIMY-1,KDXRATIO,KDYRATIO,KGRID, & + HLBCX,HLBCY,PTFIELD,PWORK) ! ILBX2=SIZE(PLBX,1) IF(LWEST_ll( ).AND.LEAST_ll( )) THEN @@ -823,11 +717,19 @@ ELSE ENDIF ! IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBX(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) + iw = kib + ie = kib -1 + ilbx + if ( kgrid == 2 ) then + iw = iw + 1 + ie = ie + 1 + end if + PLBX(1:ILBX,KJB:KJE,:) = PWORK(iw:ie,KJB:KJE,: ) ENDIF ! IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBX(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) + iw = kie + 1 - ilbx + ie = kie + PLBX(ILBX2-ILBX+1:ILBX2,KJB:KJE,:) = PWORK(iw:ie,KJB:KJE,:) ENDIF ! ILBY2=SIZE(PLBY,2) @@ -838,36 +740,39 @@ ELSE ENDIF ! IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBY(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) + is = kjb + in = kjb - 1 + ilby + if ( kgrid == 3 ) then + is = is + 1 + in = in + 1 + end if + PLBY(KIB:KIE,1:ILBY,:) = PWORK(KIB:KIE,is:in,:) ENDIF ! IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBY(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) + is = kje + 1 - ilby + in = kje + PLBY(KIB:KIE,ILBY2-ILBY+1:ILBY2,:) = PWORK(KIB:KIE,is:in,:) ENDIF ! !* Vertical interpolation ! -IF ( SIZE(PLBX,1) /= 0 .AND. GVERT_INTERP) THEN - IF ( ILBX == KRIMX+JPHEXT ) THEN - PLBX(:,:,:) = VER_INTERP_LIN(PLBX(:,:,:), & - KKLIN_LBXM(:,:,:),PCOEFLIN_LBXM(:,:,:)) - ELSE - PLBX(:,:,:) = VER_INTERP_LIN(PLBX(:,:,:), & - IKLIN_LBXM_RED(:,:,:),ZCOEFLIN_LBXM_RED(:,:,:)) - END IF +IF ( SIZE(PLBX,1) /= 0 ) THEN + if ( present( kklin_lbx_red ) .and. ilbx /= krimx+jphext ) then + PLBX(:,:,:) = VER_INTERP_LIN( PLBX(:,:,:), KKLIN_LBX_RED(:,:,:), PCOEFLIN_LBX_RED(:,:,:) ) + else + PLBX(:,:,:) = VER_INTERP_LIN( PLBX(:,:,:), KKLIN_LBX(:,:,:), PCOEFLIN_LBX(:,:,:) ) + end if END IF ! -IF ( SIZE(PLBY,1) /= 0 .AND. GVERT_INTERP) THEN - IF ( ILBY == KRIMY+JPHEXT ) THEN - PLBY(:,:,:) = VER_INTERP_LIN(PLBY(:,:,:), & - KKLIN_LBYM(:,:,:),PCOEFLIN_LBYM(:,:,:)) - ELSE - PLBY(:,:,:) = VER_INTERP_LIN(PLBY(:,:,:), & - IKLIN_LBYM_RED(:,:,:),ZCOEFLIN_LBYM_RED(:,:,:)) - END IF +IF ( SIZE(PLBY,1) /= 0 ) THEN + if ( present( kklin_lby_red ) .and. ilby /= krimy+jphext ) then + PLBY(:,:,:) = VER_INTERP_LIN( PLBY(:,:,:), KKLIN_LBY_RED(:,:,:), PCOEFLIN_LBY_RED(:,:,:) ) + else + PLBY(:,:,:) = VER_INTERP_LIN( PLBY(:,:,:), KKLIN_LBY(:,:,:), PCOEFLIN_LBY(:,:,:) ) + end if END IF ! -! -END SUBROUTINE COMPUTE_LB_M -! -END SUBROUTINE INI_ONE_WAY_n +END SUBROUTINE Compute_ini_LB + +END MODULE MODE_INI_ONE_WAY_n diff --git a/src/MNH/ini_spawn_lsn.f90 b/src/MNH/ini_spawn_lsn.f90 index f33f727bbc247a84af9b5ae3934f0e8de1157b72..d1274f06b9987ff87bcbf50390a13b2b82970a5d 100644 --- a/src/MNH/ini_spawn_lsn.f90 +++ b/src/MNH/ini_spawn_lsn.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1997-2019 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 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$ -!----------------------------------------------------------------- ! ######################### MODULE MODI_INI_SPAWN_LS_n ! ######################### @@ -147,6 +143,7 @@ END MODULE MODI_INI_SPAWN_LS_n ! !* 0. DECLARATIONS ! ------------ +use mode_bikhardt USE MODE_ll USE MODE_MODELN_HANDLER ! @@ -158,7 +155,6 @@ USE MODD_FIELD_n ! modules relative to the outer model $n USE MODD_LSFIELD_n USE MODD_GRID_n ! -USE MODI_BIKHARDT USE MODI_SHUMAN USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 00aa82518fea1a3cd00e205dac3bd22497af384c..1d6bc3eefe6e98c6b53edb1a4346b1c613ed793b 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -45,12 +45,10 @@ END MODULE MODI_INI_SPECTRE_n ! ------------ ! USE MODD_ADV_n +USE MODD_ARGSLIST_ll, ONLY: LIST_ll USE MODD_BIKHARDT_n USE MODD_BUDGET -USE MODD_CH_AERO_n, ONLY: XSOLORG,XMI -USE MODD_CH_AEROSOL, ONLY: LORILAM -USE MODD_CH_MNHC_n, ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & - LCH_CONV_LINOX, XCH_TUV_DOBNEW, LCH_PH +USE MODD_CH_MNHC_n, ONLY: LUSECHAQ, LUSECHIC, LCH_INIT_FIELD USE MODD_CH_PH_n USE MODD_CLOUD_MF_n USE MODD_CST @@ -59,7 +57,6 @@ USE MODD_CONF_n USE MODD_CTURB USE MODD_CURVCOR_n USE MODD_DEEP_CONVECTION_n -USE MODD_DIAG_FLAG, ONLY: LCHEMDIAG USE MODD_DIM_n USE MODD_DRAGTREE USE MODD_DUST @@ -67,7 +64,6 @@ USE MODD_DYN USE MODD_DYN_n USE MODD_DYNZD USE MODD_DYNZD_n -USE MODD_ELEC_n, ONLY: XCION_POS_FW, XCION_NEG_FW USE MODD_FIELD_n USE MODD_FRC USE MODD_FRC_n @@ -81,9 +77,8 @@ USE MODD_LUNIT_n, ONLY: COUTFILE, TLUOUT USE MODD_MEAN_FIELD USE MODD_MEAN_FIELD_n USE MODD_METRICS_n -USE MODD_NESTING, only: CDAD_NAME, NDAD, NDT_2_WAY, NDTRATIO, NDXRATIO_ALL, NDYRATIO_ALL +USE MODD_NESTING, only: NDAD, NDT_2_WAY, NDXRATIO_ALL, NDYRATIO_ALL USE MODD_NSV -USE MODD_NUDGING_n, ONLY: LNUDGING USE MODD_OUT_n USE MODD_PARAMETERS USE MODD_PARAM_KAFR_n @@ -97,18 +92,15 @@ USE MODD_PAST_FIELD_n USE MODD_RADIATIONS_n USE MODD_REF USE MODD_REF_n -USE MODD_SERIES, ONLY: LSERIES USE MODD_SHADOWS_n USE MODD_SPECTRE -USE MODD_STAND_ATM, ONLY: XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM USE MODD_TIME USE MODD_TIME_n -USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI USE MODD_TURB_n USE MODD_VAR_ll, ONLY: IP ! -USE MODD_ARGSLIST_ll, ONLY: LIST_ll USE MODE_GATHER_ll +USE MODE_INI_ONE_WAY_n USE MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_ll USE MODE_MODELN_HANDLER @@ -119,7 +111,6 @@ USE MODE_TYPE_ZDIFFU USE MODI_INI_BIKHARDT_n USE MODI_INI_CPL USE MODI_INI_DYNAMICS -USE MODI_INI_ONE_WAY_n USE MODI_INI_SPAWN_LS_n USE MODI_GET_SIZEX_LB USE MODI_GET_SIZEY_LB @@ -139,7 +130,6 @@ TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! !* 0.2 declarations of local variables ! -INTEGER :: JSV ! Loop index INTEGER :: ILUOUT ! Logical unit number of output-listing INTEGER :: IIU ! Upper dimension in x direction (local) INTEGER :: IJU ! Upper dimension in y direction (local) @@ -147,10 +137,6 @@ 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 @@ -167,14 +153,6 @@ 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 :: ZCOVER ! surface cover types -INTEGER :: ICOVER ! number of cover types -! -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 !------------------------------------------ ! Dummy pointers needed to correct an ifort Bug REAL, DIMENSION(:), POINTER :: DPTR_XZHAT @@ -884,20 +862,20 @@ IF ( KMI > 1) THEN DPTR_XLBYRM=>XLBYRM DPTR_XLBXSVM=>XLBXSVM DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),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 ) + CALL INI_ONE_WAY_n(NDAD(KMI),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,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 ! ! @@ -958,4 +936,3 @@ DEALLOCATE(ZJ) ! END SUBROUTINE INI_SPECTRE_n - diff --git a/src/MNH/les_cloud_masksn.f90 b/src/MNH/les_cloud_masksn.f90 index e08d56550d075d79270aff0a4ceaa60b3fd7cf9a..daeb189e9c4857293aa878d87b0c9ad65e92d079 100644 --- a/src/MNH/les_cloud_masksn.f90 +++ b/src/MNH/les_cloud_masksn.f90 @@ -38,6 +38,7 @@ !! P. Aumond 10/2009 Add possibility of user maskS !! F.Couvreux 06/2011 : Conditional sampling !! C.Lac 10/2014 : Correction on user masks +!! Q.Rodier 05/2019 : Missing parallelization !! !! -------------------------------------------------------------------------- ! @@ -66,7 +67,7 @@ IMPLICIT NONE ! INTEGER :: JK ! vertical loop counter INTEGER :: JI ! loop index on masks -INTEGER :: IIU, IJU ! hor. indices +INTEGER :: IIU, IJU,IIB,IJB,IIE,IJE ! hor. indices INTEGER :: IKU, KBASE, KTOP ! ver. index INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG ! moist variables indices INTEGER :: JSV ! ind of scalars @@ -92,6 +93,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZMEANRC !------------------------------------------------------------------------------- ! CALL GET_DIM_EXT_ll('B',IIU,IJU) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! IKU = SIZE(XTHT,3) ! @@ -215,8 +217,8 @@ DEALLOCATE(ZWORK1D) IF (LLES_NEB_MASK) THEN ALLOCATE(LLES_CURRENT_NEB_MASK(IIU,IJU,NLES_K)) LLES_CURRENT_NEB_MASK (:,:,:) = .FALSE. - WHERE ((ZRC_LES>1.E-6 .OR. ZRI_LES>1.E-6) .AND. ZW_LES>0.) - LLES_CURRENT_NEB_MASK (:,:,:) = .TRUE. + WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0.) + LLES_CURRENT_NEB_MASK (IIB:IIE,IJB:IJE,:) = .TRUE. END WHERE END IF ! @@ -228,9 +230,9 @@ END IF IF (LLES_CORE_MASK) THEN ALLOCATE(LLES_CURRENT_CORE_MASK(IIU,IJU,NLES_K)) LLES_CURRENT_CORE_MASK (:,:,:) = .FALSE. - WHERE ((ZRC_LES>1.E-6 .OR. ZRI_LES>1.E-6) & - .AND. ZW_LES>0. .AND. ZTHV_ANOM>0.) - LLES_CURRENT_CORE_MASK (:,:,:) = .TRUE. + WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) & + .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0. .AND. ZTHV_ANOM(IIB:IIE,IJB:IJE,:)>0.) + LLES_CURRENT_CORE_MASK (IIB:IIE,IJB:IJE,:) = .TRUE. END WHERE END IF ! @@ -243,10 +245,10 @@ IF (LLES_CS_MASK) THEN ! CALL LES_MEAN_ll(ZRC_LES, LLES_CURRENT_CART_MASK, ZMEANRC ) ALLOCATE(LLES_CURRENT_CS1_MASK(IIU,IJU,NLES_K)) - LLES_CURRENT_CS1_MASK (:,:,:) = .FALSE. + LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE. IF (NSV_CS >= 2) THEN ALLOCATE(LLES_CURRENT_CS2_MASK(IIU,IJU,NLES_K)) - LLES_CURRENT_CS2_MASK (:,:,:) = .FALSE. + LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE. IF (NSV_CS == 3) THEN ALLOCATE(LLES_CURRENT_CS3_MASK(IIU,IJU,NLES_K)) LLES_CURRENT_CS3_MASK (:,:,:) = .FALSE. @@ -271,73 +273,73 @@ IF (LLES_CS_MASK) THEN ! case no cloud top and base IF (JSV == NSV_CSBEG) THEN IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! ! case cloud top and base defined ! IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1) .AND. & - ZRC_LES(:,:,JK)>1.E-6) - LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE. + ZRC_LES(IIB:IIE,IJB:IJE,JK)>1.E-6) + LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ELSE IF ( JSV == NSV_CSBEG + 1 ) THEN IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE ( ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! ! case cloud top and base defined ! IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! ELSE IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE ( ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! ! case cloud top and base defined ! IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF ! IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > & + WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE. + LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. END WHERE END IF END IF @@ -353,7 +355,7 @@ END IF IF (LLES_MY_MASK) THEN ALLOCATE(LLES_CURRENT_MY_MASKS(IIU,IJU,NLES_K,NLES_MASKS_USER)) DO JI=1,NLES_MASKS_USER - LLES_CURRENT_MY_MASKS (:,:,:,JI) = .FALSE. + LLES_CURRENT_MY_MASKS (IIB:IIE,IJB:IJE,:,JI) = .FALSE. END DO ! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) ! LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE. diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 128897c87ec0514d20b086e6115ad077790ee6ad..94c45b456313b9f0b9684778c24b942a199f50e1 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -354,6 +354,7 @@ USE MODE_ll USE MODE_MNH_TIMING USE MODE_MODELN_HANDLER USE MODE_MPPDB +USE MODE_ONE_WAY_n ! USE MODI_ADVECTION_METSV USE MODI_ADVECTION_UVW @@ -393,7 +394,6 @@ USE MODI_MNHGET_SURF_PARAM_n USE MODI_MNHWRITE_ZS_DUMMY_n USE MODI_NUDGING USE MODI_NUM_DIFF -USE MODI_ONE_WAY_n USE MODI_PHYS_PARAM_n USE MODI_PRESSUREZ USE MODI_PROFILER_n diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90 index 05532ca21cc52e30ba2ef6be4633a2760a93b08d..f7bcfbd74eb3bf7ac1593cfba69ad864ede34ddf 100644 --- a/src/MNH/one_wayn.f90 +++ b/src/MNH/one_wayn.f90 @@ -1,91 +1,22 @@ -!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2019 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. !----------------------------------------------------------------- -! ################### - MODULE MODI_ONE_WAY_n -! ################### -! -INTERFACE -! - SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & - PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - KDXRATIO,KDYRATIO,KDTRATIO, & - HLBCX,HLBCY,KRIMX,KRIMY, & - KKLIN_LBXU,PCOEFLIN_LBXU,KKLIN_LBYU,PCOEFLIN_LBYU, & - KKLIN_LBXV,PCOEFLIN_LBXV,KKLIN_LBYV,PCOEFLIN_LBYV, & - KKLIN_LBXW,PCOEFLIN_LBXW,KKLIN_LBYW,PCOEFLIN_LBYW, & - KKLIN_LBXM,PCOEFLIN_LBXM,KKLIN_LBYM,PCOEFLIN_LBYM, & - OSTEADY_DMASS,HCLOUD,OUSECHAQ,OUSECHIC, & - PLBXUM,PLBYUM,PLBXVM,PLBYVM,PLBXWM,PLBYWM, & - PLBXTHM,PLBYTHM, & - PLBXTKEM,PLBYTKEM, & - PLBXRM,PLBYRM,PLBXSVM,PLBYSVM, & - PDRYMASST,PDRYMASSS, & - PLBXUS,PLBYUS,PLBXVS,PLBYVS,PLBXWS,PLBYWS, & - PLBXTHS,PLBYTHS, & - PLBXTKES,PLBYTKES, & - PLBXRS,PLBYRS,PLBXSVS,PLBYSVS ) -! -! -INTEGER, INTENT(IN) :: KDAD ! Number of the DAD model -REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KMI ! model number +!#################### +MODULE MODE_ONE_WAY_n +!#################### + +use mode_msg + +implicit none + +private + +public :: ONE_WAY_n + +contains -INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop COUNTer - ! (=1 at the segment beginning) -! - ! interpolation coefficients -REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. -REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. -! -INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO -INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model -INTEGER, INTENT(IN) :: KDTRATIO ! Time step resolution RATIO -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral -CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions -INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area -! coefficients for the vertical interpolation of the LB fields -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXU,KKLIN_LBYU -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXU,PCOEFLIN_LBYU -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXV,KKLIN_LBYV -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXV,PCOEFLIN_LBYV -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXW,KKLIN_LBYW -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXW,PCOEFLIN_LBYW -INTEGER, DIMENSION(:,:,:), INTENT( IN ) :: KKLIN_LBXM,KKLIN_LBYM -REAL, DIMENSION(:,:,:), INTENT( IN ) :: PCOEFLIN_LBXM,PCOEFLIN_LBYM -! -LOGICAL, INTENT(IN) :: OSTEADY_DMASS ! Md evolution logical switch -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Indicator of the cloud scheme -LOGICAL, INTENT(IN) :: OUSECHAQ ! logical for aqueous phase chemistry -LOGICAL, INTENT(IN) :: OUSECHIC ! logical for ice phase chemistry -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBYUM,PLBYVM,PLBYWM -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBXTHM ,PLBYTHM ! Large Scale fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBXTKEM,PLBYTKEM ! Theta, TKE -REAL, DIMENSION(:,:,:,:),INTENT(IN) :: PLBXRM ,PLBYRM ! Moisture and SV -REAL, DIMENSION(:,:,:,:),INTENT(IN) :: PLBXSVM ,PLBYSVM ! in x and y-dir. -! -REAL, INTENT(INOUT) :: PDRYMASST ! Mass of dry air Md -REAL, INTENT(INOUT) :: PDRYMASSS ! Md source -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUS,PLBXVS,PLBXWS ! Large Scale source terms -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUS,PLBYVS,PLBYWS -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHS ,PLBYTHS ! Large Scale fields sources -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKES,PLBYTKES ! Theta, TKE -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXRS ,PLBYRS ! Moisture and SV -REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXSVS ,PLBYSVS ! in x and y-dir. -! -END SUBROUTINE ONE_WAY_n -! -END INTERFACE -! -END MODULE MODI_ONE_WAY_n -! ! #################################################################### SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & @@ -188,30 +119,36 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & !! Modification 01/2016 (JP Pinty) Add LIMA !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 03/05/2019: restructuration of one_wayn and ini_one_wayn !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ -USE MODE_ll -USE MODE_MODELN_HANDLER -use mode_msg +USE MODD_CH_MNHC_n, only: LUSECHAQ, LUSECHIC +USE MODD_CONF, only: CEQNSYS +USE MODD_CST, only: XCPD, XP00, XRD, XRV, XTH00 +USE MODD_FIELD_n, only: XPABST, XRT, XSVT, XUT, XVT, XWT, XTHT, XTKET +USE MODD_NESTING, only: NXOR_ALL, NXEND_ALL, NYOR_ALL, NYEND_ALL +USE MODD_NSV, only: NSV_A, NSV_C1R3BEG_A, NSV_C1R3_A, NSV_C2R2BEG_A, NSV_C2R2_A, NSV_CHEMBEG_A, NSV_CHEMEND_A, & + NSV_CHEM_A, NSV_CHICBEG_A, NSV_CHIC_A, NSV_DSTBEG_A, NSV_DST_A, & + NSV_ELECBEG_A, NSV_ELEC_A, NSV_LGBEG_A, NSV_LG_A, NSV_LIMA_A, NSV_LIMA_BEG_A, & + NSV_PPBEG_A, NSV_PP_A, & + NSV_SLTBEG_A, NSV_SLT_A, NSV_USER_A, & + NSV_AERBEG_A, NSV_AER_A, NSV_CSBEG_A, NSV_CS_A + +USE MODD_PARAMETERS, only: JPHEXT, JPVEXT +USE MODD_PARAM_n, only: CCLOUD +USE MODD_REF_n, only: XRHODJ, XRHODREF, XRVREF, XTHVREF +! +use mode_bikhardt +use mode_ll, only: LS_FORCING_ll, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll, SET_LSFIELD_1WAY_ll +USE MODE_MODELN_HANDLER, only: GOTO_MODEL +use mode_sum_ll, only: SUM3D_ll ! -USE MODD_PARAMETERS -USE MODD_NESTING -USE MODD_CST -USE MODD_REF_n ! modules relative to the outer model $n -USE MODD_FIELD_n -USE MODD_CONF -USE MODD_PARAM_n -USE MODD_CH_MNHC_n, ONLY: LUSECHAQ, LUSECHIC -USE MODD_NSV -! -USE MODI_BIKHARDT -USE MODI_VER_INTERP_LIN -USE MODI_SET_CONC_RAIN_C2R2 -USE MODI_SET_CONC_ICE_C1R3 USE MODI_SET_CHEMAQ_1WAY +USE MODI_SET_CONC_ICE_C1R3 USE MODI_SET_CONC_LIMA +USE MODI_SET_CONC_RAIN_C2R2 ! IMPLICIT NONE ! @@ -269,9 +206,8 @@ REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PLBXSVS ,PLBYSVS ! in x and y-dir. ! !* 0.2 declarations of local variables ! -REAL :: ZTIME ! Interpolation length +REAL :: ZTIME ! Interpolation duration INTEGER :: IIB,IIE,IJB,IJE,IIU,IJU -INTEGER :: ILBX,ILBY,ILBX2,ILBY2 REAL :: ZBIGTSTEP ! time step of the dad model ($n) REAL :: ZRV_O_RD ! = Rv / Rd REAL :: ZRD_O_CPD ! = Rd / Cpd @@ -279,7 +215,6 @@ REAL :: ZDRYMASST,ZDRYMASSM !REAL, DIMENSION(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3)) :: ZJ,ZRHOD REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ,ZRHOD REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK -LOGICAL :: GVERT_INTERP ! INTEGER :: IRR,ISV_USER ! Number of moist and scalar variables INTEGER :: JRR,JSV ! Loop index @@ -298,7 +233,7 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCONCT REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMT REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMTI ! -INTEGER :: N_VAR_LIMA +integer :: igrid ! !------------------------------------------------------------------------------- ! @@ -324,7 +259,6 @@ ZRV_O_RD = XRV / XRD ZRD_O_CPD = XRD / XCPD ! ZTIME = PTSTEP * (1+KDTRATIO) -GVERT_INTERP=.TRUE. ZJ(:,:,:) =0. ZRHOD(:,:,:)=0. ! @@ -631,183 +565,44 @@ IF (ALLOCATED(ZCHEMTI)) DEALLOCATE(ZCHEMTI) ! !* 1. U FIELD TREATMENT ! ----------------- -PLBXUS=0. -PLBYUS=0. -! -!* 1.1 Horizontal Bikhardt interpolation -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,2, & - HLBCX,HLBCY,ZTUT,ZWORK) +IGRID = 2 +CALL Compute_LB( PLBXUM, PLBYUM, PLBXUS, PLBYUS, ZTUT, ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXU, KKLIN_LBYU, & + PCOEFLIN_LBXU, PCOEFLIN_LBYU ) DEALLOCATE(ZTUT) ! -ILBX2=SIZE(PLBXUM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF (LWEST_ll() .AND. ILBX/=0) THEN - PLBXUS(1:ILBX,IJB:IJE,:)=ZWORK(IIB+1:IIB+ILBX,IJB:IJE,:) ! C grid -ENDIF -! -IF (LEAST_ll() .AND. ILBX/=0) THEN - PLBXUS(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYUM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYUS(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYUS(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -! -!* 1.2 Vertical interpolation and tendency computation -! -IF ( SIZE(PLBXUS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBXUS(:,:,:) = & - VER_INTERP_LIN(PLBXUS(:,:,:), KKLIN_LBXU(:,:,:),PCOEFLIN_LBXU(:,:,:)) - PLBXUS(:,:,:) = (PLBXUS(:,:,:) - PLBXUM(:,:,:)) / ZTIME -END IF -! -IF ( SIZE(PLBYUS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBYUS(:,:,:) = & - VER_INTERP_LIN(PLBYUS(:,:,:), KKLIN_LBYU(:,:,:),PCOEFLIN_LBYU(:,:,:)) - PLBYUS(:,:,:) = (PLBYUS(:,:,:) - PLBYUM(:,:,:)) / ZTIME -END IF -! !------------------------------------------------------------------------------- ! !* 2. V FIELD TREATMENT ! ----------------- -PLBXVS=0. -PLBYVS=0. -! -!* 2.1 Horizontal Bikhardt interpolation -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,3, & - HLBCX,HLBCY,ZTVT,ZWORK) +IGRID = 3 +CALL Compute_LB( PLBXVM, PLBYVM, PLBXVS, PLBYVS, ZTVT, ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXV, KKLIN_LBYV, & + PCOEFLIN_LBXV, PCOEFLIN_LBYV ) DEALLOCATE(ZTVT) ! -ILBX2=SIZE(PLBXVM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXVS(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXVS(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYVM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYVS(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB+1:IJB+ILBY,:) ! C grid -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYVS(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! - -!* 2.2 Vertical interpolation and tendency computation -! -IF ( SIZE(PLBXVS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBXVS(:,:,:) = & - VER_INTERP_LIN(PLBXVS(:,:,:), KKLIN_LBXV(:,:,:),PCOEFLIN_LBXV(:,:,:)) - PLBXVS(:,:,:) = (PLBXVS(:,:,:) - PLBXVM(:,:,:)) / ZTIME -END IF -! -IF ( SIZE(PLBYVS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBYVS(:,:,:) = & - VER_INTERP_LIN(PLBYVS(:,:,:), KKLIN_LBYV(:,:,:),PCOEFLIN_LBYV(:,:,:)) - PLBYVS(:,:,:) = (PLBYVS(:,:,:) - PLBYVM(:,:,:)) / ZTIME -END IF -! !------------------------------------------------------------------------------- ! !* 3. W FIELD TREATMENT ! ----------------- -PLBXWS=0. -PLBYWS=0. -! -!* 3.1 Horizontal Bikhardt interpolation -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,4, & - HLBCX,HLBCY,ZTWT,ZWORK) +IGRID = 4 +CALL Compute_LB( PLBXWM, PLBYWM, PLBXWS, PLBYWS, ZTWT, ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXW, KKLIN_LBYW, & + PCOEFLIN_LBXW, PCOEFLIN_LBYW ) DEALLOCATE(ZTWT) ! -ILBX2=SIZE(PLBXWM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXWS(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXWS(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYWM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYWS(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYWS(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -! -! -!* 3.2 Vertical interpolation and tendency computation -! -IF ( SIZE(PLBXWS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBXWS(:,:,:) = & - VER_INTERP_LIN(PLBXWS(:,:,:), KKLIN_LBXW(:,:,:),PCOEFLIN_LBXW(:,:,:)) - PLBXWS(:,:,:) = (PLBXWS(:,:,:) - PLBXWM(:,:,:)) / ZTIME -END IF -! -IF ( SIZE(PLBYWS,1) /= 0 ) THEN - IF( GVERT_INTERP ) PLBYWS(:,:,:) = & - VER_INTERP_LIN(PLBYWS(:,:,:), KKLIN_LBYW(:,:,:),PCOEFLIN_LBYW(:,:,:)) - PLBYWS(:,:,:) = (PLBYWS(:,:,:) - PLBYWM(:,:,:)) / ZTIME -END IF -! ! !------------------------------------------------------------------------------- ! @@ -895,7 +690,17 @@ CALL GO_TOMODEL_ll(KMI, IINFO_ll) ! ----------------------------------------------------- ! ! -CALL COMPUTE_LB_M(PLBXTHM,PLBYTHM,PLBXTHS,PLBYTHS,ZTTHT,XTH00) +IGRID = 1 +CALL Compute_LB( PLBXTHM, PLBYTHM, PLBXTHS, PLBYTHS, ZTTHT, ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + PTH00 = XTH00, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) DEALLOCATE(ZTTHT) ! ! @@ -908,7 +713,16 @@ IF (SIZE(XTKET,3) == 0 .OR. SIZE(PLBXTKEM,3) == 0) THEN PLBXTKES(:,:,:) = 0. ! turbulence not activated PLBYTKES(:,:,:) = 0. ELSE - CALL COMPUTE_LB_M(PLBXTKEM,PLBYTKEM,PLBXTKES,PLBYTKES,ZTTKET) + IGRID = 1 + CALL Compute_LB( PLBXTKEM, PLBYTKEM, PLBXTKES, PLBYTKES, ZTTKET, ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) DEALLOCATE(ZTTKET) END IF ! @@ -923,8 +737,17 @@ IF (IRR == 0) THEN PLBYRS(:,:,:,:) = 0. ELSE DO JRR = 1,IRR - CALL COMPUTE_LB_M(PLBXRM(:,:,:,JRR),PLBYRM(:,:,:,JRR), & - PLBXRS(:,:,:,JRR),PLBYRS(:,:,:,JRR),ZTRT(:,:,:,JRR)) + IGRID = 1 + CALL Compute_LB( PLBXRM(:,:,:,JRR), PLBYRM(:,:,:,JRR), PLBXRS(:,:,:,JRR), PLBYRS(:,:,:,JRR), & + ZTRT(:,:,:,JRR), ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) END DO DEALLOCATE(ZTRT) ! @@ -941,8 +764,17 @@ END IF IF (NSV_A(KMI) > 0) THEN ! Users scalar variables DO JSV = 1,NSV_A(KMI) - CALL COMPUTE_LB_M(PLBXSVM(:,:,:,JSV),PLBYSVM(:,:,:,JSV), & - PLBXSVS(:,:,:,JSV),PLBYSVS(:,:,:,JSV),ZTSVT(:,:,:,JSV)) + IGRID = 1 + CALL Compute_LB( PLBXSVM(:,:,:,JSV), PLBYSVM(:,:,:,JSV), PLBXSVS(:,:,:,JSV), PLBYSVS(:,:,:,JSV), & + ZTSVT(:,:,:,JSV), ZTIME, ZWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + IIB, IIE, IJB, IJE, IGRID, & + IDIMX, IDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBXM, KKLIN_LBYM, & + PCOEFLIN_LBXM, PCOEFLIN_LBYM, & + KKLIN_LBX_RED = IKLIN_LBXM_RED, KKLIN_LBY_RED = IKLIN_LBYM_RED, & + PCOEFLIN_LBX_RED = ZCOEFLIN_LBXM_RED, PCOEFLIN_LBY_RED = ZCOEFLIN_LBYM_RED ) END DO DEALLOCATE(ZTSVT) ELSE @@ -956,97 +788,67 @@ DEALLOCATE(ZCOEFLIN_LBXM_RED,ZCOEFLIN_LBYM_RED,IKLIN_LBXM_RED,IKLIN_LBYM_RED) !------------------------------------------------------------------------------ CALL GOTO_MODEL(KMI) ! -CONTAINS -! -! -! ############################################################# - SUBROUTINE COMPUTE_LB_M(PLBXM,PLBYM,PLBXS,PLBYS,PTFIELD,PTH00) -! ############################################################# -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBXM,PLBYM !LB fields at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXS,PLBYS ! LB source terms -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTFIELD ! ls forcing array -REAL, OPTIONAL, INTENT(IN) :: PTH00 ! reference temperature -! -! -IF(PRESENT(PTH00)) THEN - PLBXS=PTH00 ! to avoid undefined computation - PLBYS=PTH00 -ELSE - PLBXS=0. - PLBYS=0. -ENDIF -! -!* Horizontal Bikhardt interpolation -! -! -CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & - PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & - 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - HLBCX,HLBCY,PTFIELD,ZWORK) -! -ILBX2=SIZE(PLBXM,1) -IF(LWEST_ll( ).AND.LEAST_ll( )) THEN - ILBX=ILBX2/2 -ELSE - ILBX=ILBX2 -ENDIF -! -IF(LWEST_ll( ) .AND. ILBX/=0) THEN - PLBXS(1:ILBX,IJB:IJE,:)=ZWORK(IIB:IIB-1+ILBX,IJB:IJE,:) -ENDIF -! -IF(LEAST_ll( ) .AND. ILBX/=0) THEN - PLBXS(ILBX2-ILBX+1:ILBX2,IJB:IJE,:)=ZWORK(IIE+1-ILBX:IIE,IJB:IJE,:) -ENDIF -! -ILBY2=SIZE(PLBYM,2) -IF(LSOUTH_ll( ).AND.LNORTH_ll( )) THEN - ILBY=ILBY2/2 -ELSE - ILBY=ILBY2 -ENDIF -! -IF(LSOUTH_ll( ) .AND. ILBY/=0) THEN - PLBYS(IIB:IIE,1:ILBY,:)=ZWORK(IIB:IIE,IJB:IJB-1+ILBY,:) -ENDIF -! -IF(LNORTH_ll( ) .AND. ILBY/=0) THEN - PLBYS(IIB:IIE,ILBY2-ILBY+1:ILBY2,:)=ZWORK(IIB:IIE,IJE+1-ILBY:IJE,:) -ENDIF -! -! -!* Vertical interpolation and tendency -! -! -IF ( SIZE(PLBXS,1) /= 0 ) THEN - IF( GVERT_INTERP ) THEN - IF ( ILBX == KRIMX+JPHEXT ) THEN - PLBXS(:,:,:) = VER_INTERP_LIN(PLBXS(:,:,:), & - KKLIN_LBXM(:,:,:),PCOEFLIN_LBXM(:,:,:)) - ELSE - PLBXS(:,:,:) = VER_INTERP_LIN(PLBXS(:,:,:), & - IKLIN_LBXM_RED(:,:,:),ZCOEFLIN_LBXM_RED(:,:,:)) - ENDIF - ENDIF - PLBXS(:,:,:) = (PLBXS(:,:,:) - PLBXM(:,:,:)) / ZTIME -END IF -! -! -IF ( SIZE(PLBYS,1) /= 0 ) THEN - IF( GVERT_INTERP ) THEN - IF ( ILBY == KRIMY+JPHEXT ) THEN - PLBYS(:,:,:) = VER_INTERP_LIN(PLBYS(:,:,:), & - KKLIN_LBYM(:,:,:),PCOEFLIN_LBYM(:,:,:)) - ELSE - PLBYS(:,:,:) = VER_INTERP_LIN(PLBYS(:,:,:), & - IKLIN_LBYM_RED(:,:,:),ZCOEFLIN_LBYM_RED(:,:,:)) - ENDIF - ENDIF - PLBYS(:,:,:) = (PLBYS(:,:,:) - PLBYM(:,:,:)) / ZTIME -END IF -! -END SUBROUTINE COMPUTE_LB_M +END SUBROUTINE ONE_WAY_n + + + +!################################################################################# +SUBROUTINE Compute_LB(PLBXM,PLBYM,PLBX,PLBY,PTFIELD,PTIME,PWORK, & + PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, & + PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, & + KIB,KIE,KJB,KJE, KGRID, & + KDIMX,KDIMY,KDXRATIO,KDYRATIO,HLBCX,HLBCY,KRIMX,KRIMY, & + KKLIN_LBX,KKLIN_LBY, & + PCOEFLIN_LBX,PCOEFLIN_LBY, & + PTH00, & + KKLIN_LBX_RED,KKLIN_LBY_RED, & + PCOEFLIN_LBX_RED,PCOEFLIN_LBY_RED ) +!################################################################################# + +use MODE_INI_ONE_WAY_n, only: Compute_ini_LB + +IMPLICIT NONE ! +!* 0.1 declarations of arguments ! -END SUBROUTINE ONE_WAY_n +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLBXM,PLBYM ! Large-scale field at t-dt +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBX,PLBY ! source term +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTFIELD ! ls forcing array +REAL, INTENT(IN) :: PTIME ! Interpolation duration +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWORK +! interpolation coefficients +REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. +REAL, DIMENSION(:), INTENT(IN) :: PBFY1,PBFY2,PBFY3,PBFY4 ! Flux points in Y-direc. +INTEGER, INTENT(IN) :: KIB,KIE,KJB,KJE +INTEGER, INTENT(IN) :: KGRID ! code of grid point +INTEGER, INTENT(IN) :: KDIMX, KDIMY +INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction resolution RATIO +INTEGER, INTENT(IN) :: KDYRATIO ! between inner model and outer model +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCX ! type of lateral +CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY ! boundary conditions +INTEGER, INTENT(IN) :: KRIMX,KRIMY ! size of the RIM area +INTEGER, DIMENSION(:,:,:), INTENT(IN) :: KKLIN_LBX,KKLIN_LBY +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBX,PCOEFLIN_LBY +REAL, OPTIONAL, INTENT(IN) :: PTH00 ! reference temperature +INTEGER, DIMENSION(:,:,:), optional, INTENT(IN) :: KKLIN_LBX_RED,KKLIN_LBY_RED +REAL, DIMENSION(:,:,:), optional, INTENT(in) :: PCOEFLIN_LBX_RED,PCOEFLIN_LBY_RED + + +CALL Compute_ini_LB( PLBX, PLBY, PTFIELD, PWORK, & + PBMX1, PBMX2, PBMX3, PBMX4, PBMY1, PBMY2, PBMY3, PBMY4, & + PBFX1, PBFX2, PBFX3, PBFX4, PBFY1, PBFY2, PBFY3, PBFY4, & + KIB, KIE, KJB, KJE, KGRID, & + KDIMX, KDIMY, KDXRATIO, KDYRATIO, HLBCX, HLBCY, KRIMX, KRIMY, & + KKLIN_LBX, KKLIN_LBY, & + PCOEFLIN_LBX, PCOEFLIN_LBY, & + PTH00 = PTH00, & + KKLIN_LBX_RED = KKLIN_LBX_RED, KKLIN_LBY_RED = KKLIN_LBY_RED, & + PCOEFLIN_LBX_RED = PCOEFLIN_LBX_RED, PCOEFLIN_LBY_RED = PCOEFLIN_LBY_RED ) +PLBX(:,:,:) = (PLBX(:,:,:) - PLBXM(:,:,:)) / PTIME +PLBY(:,:,:) = (PLBY(:,:,:) - PLBYM(:,:,:)) / PTIME + +end SUBROUTINE Compute_LB + +end MODULE MODE_ONE_WAY_n diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index b0f75841c3fc10bfe0c3c8ab5b0a094d5ec36649..62d152167dcaf4ba6853784893d1229937f27d4e 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -2,6 +2,7 @@ !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. +!----------------------------------------------------------------- !####################### MODULE MODI_SPAWN_FIELD2 !####################### @@ -187,6 +188,7 @@ USE MODD_RELFRC_n USE MODD_SALT, ONLY: CSALTNAMES USE MODD_SPAWN ! +use mode_bikhardt USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_ll @@ -196,8 +198,6 @@ USE MODE_MPPDB USE MODE_THERMO USE MODE_TOOLS, ONLY: UPCASE ! -USE MODI_BIKHARDT -! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index 15de26857beed2dd1fa0d811b2c82330722ecdd1..4ba0d58a36220aa6703065ab8e356a3a0494bfaa 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -164,11 +164,11 @@ USE MODD_LBC_n, ONLY: LBC_MODEL USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_BIKHARDT_n USE MODD_VAR_ll +use mode_bikhardt USE MODE_ll USE MODE_TIME USE MODE_GRIDPROJ ! -USE MODI_BIKHARDT USE MODI_SPAWN_ZS ! USE MODE_MODELN_HANDLER diff --git a/src/MNH/spawn_lsn.f90 b/src/MNH/spawn_lsn.f90 index 88d40d981a5826dc3400f7c3752262678fff458c..d72774348bbcf8e84d88176a208ed056217f4a52 100644 --- a/src/MNH/spawn_lsn.f90 +++ b/src/MNH/spawn_lsn.f90 @@ -23,7 +23,7 @@ INTERFACE INTEGER, INTENT(IN) :: KDAD ! number of the DAD model REAL, INTENT(IN) :: PTSTEP ! Time step INTEGER, INTENT(IN) :: KMI ! model number - ! interpolation coefficients + ! interpolation coefficients REAL, DIMENSION(:), INTENT(IN) :: PBMX1,PBMX2,PBMX3,PBMX4 ! Mass points in X-direc. REAL, DIMENSION(:), INTENT(IN) :: PBMY1,PBMY2,PBMY3,PBMY4 ! Mass points in Y-direc. REAL, DIMENSION(:), INTENT(IN) :: PBFX1,PBFX2,PBFX3,PBFX4 ! Flux points in X-direc. @@ -129,6 +129,7 @@ END MODULE MODI_SPAWN_LS_n ! !* 0. DECLARATIONS ! ------------ +use mode_bikhardt USE MODE_ll USE MODE_MODELN_HANDLER ! @@ -139,7 +140,6 @@ USE MODD_LSFIELD_n USE MODD_FIELD_n ! modules relative to the outer model _n USE MODD_GRID_n ! -USE MODI_BIKHARDT USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN USE MODI_SHUMAN diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90 index 4a4077c296999362a58b8729cfebd4827cd65b70..0a55faaef3b11cd76e9f289ad02fd6a32e772000 100644 --- a/src/MNH/spawn_pressure2.f90 +++ b/src/MNH/spawn_pressure2.f90 @@ -1,6 +1,6 @@ !MNH_LIC Copyright 1997-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- !####################### @@ -122,11 +122,11 @@ USE MODD_VER_INTERP_LIN USE MODD_SPAWN ! USE MODI_SHUMAN -USE MODI_BIKHARDT USE MODI_COMPUTE_EXNER_FROM_TOP USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN ! +use mode_bikhardt USE MODE_MODELN_HANDLER USE MODE_ll USE MODE_MPPDB diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90 index 0c324004db2bc022e01a0d0851e92d327c927cb5..4a6ecb4f7d5181a10521d82ec754245958021f74 100644 --- a/src/MNH/spawn_surf2_rain.f90 +++ b/src/MNH/spawn_surf2_rain.f90 @@ -122,9 +122,9 @@ USE MODD_IO, ONLY: TFILEDATA USE MODD_LBC_n, ONLY: LBC_MODEL USE MODD_SPAWN ! +use mode_bikhardt USE MODE_MODELN_HANDLER ! -USE MODI_BIKHARDT ! Interface modules USE MODI_READ_PRECIP_FIELD ! IMPLICIT NONE diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90 index ea7ad57684df040d48e490829a65991582d45b1c..fc12915cca3825c01cea9fef34d8d52cdec7f841 100644 --- a/src/MNH/spawn_zs.f90 +++ b/src/MNH/spawn_zs.f90 @@ -110,7 +110,7 @@ use modd_precision, only: MNHREAL_MPI ! USE MODD_BIKHARDT_n ! -USE MODI_BIKHARDT +use mode_bikhardt USE MODI_ZS_BOUNDARY ! USE MODE_MODELN_HANDLER diff --git a/src/MNH/zs_boundaryn.f90 b/src/MNH/zs_boundaryn.f90 index 2fe1bf3b4b496ad49adfa6521e9e1e550b8fd5aa..b26462efd793b2cebedd6ebf2961bd32991d3db2 100644 --- a/src/MNH/zs_boundaryn.f90 +++ b/src/MNH/zs_boundaryn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1999-2019 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 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 init 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! ####################### MODULE MODI_ZS_BOUNDARY_n ! ####################### @@ -100,7 +95,7 @@ USE MODE_MODELN_HANDLER USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODD_GRID_n ! contains the DAD model informations ! -USE MODI_BIKHARDT +use mode_bikhardt ! ! IMPLICIT NONE