From 2811e7418929ab00c4366e1a8c54b046f7c8a4ea Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Mon, 2 Dec 2019 15:42:42 +0100 Subject: [PATCH] Robert S. 02/12/2019: Large scale vertical wind forcing allowed for grid nesting ideal simulations --- src/MNH/deallocate_model1.f90 | 3 --- src/MNH/forcing.f90 | 10 +++++++--- src/MNH/ini_modeln.f90 | 21 +++++++++++---------- src/MNH/modd_frc.f90 | 1 - src/MNH/modd_frcn.f90 | 12 ++++++++---- src/MNH/modeln.f90 | 2 +- src/MNH/phys_paramn.f90 | 1 + 7 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90 index dc3107d54..113521daf 100644 --- a/src/MNH/deallocate_model1.f90 +++ b/src/MNH/deallocate_model1.f90 @@ -455,9 +455,6 @@ IF ( ALLOCATED(XUFRC) .AND. KCALL == 4 ) THEN DEALLOCATE(XGYTHFRC) DEALLOCATE(XPGROUNDFRC) END IF -IF ( ALLOCATED(XWTFRC) .AND. KCALL == 4 ) THEN - DEALLOCATE(XWTFRC) -END IF ! !* 12. Module MODD_ICE_CONC$n ! diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90 index ebb2873db..13e295bb5 100644 --- a/src/MNH/forcing.f90 +++ b/src/MNH/forcing.f90 @@ -11,7 +11,7 @@ INTERFACE ! SUBROUTINE FORCING ( PTSTEP, OUSERV, PRHODJ, PCORIOZ, & PZHAT, PZZ, TPDTCUR, & - PUFRC_PAST, PVFRC_PAST, & + PUFRC_PAST, PVFRC_PAST, PWTFRC, & PUT, PVT, PWT, PTHT, PTKET, PRT, PSVT, & PRUS, PRVS, PRWS, PRTHS, PRTKES, PRRS, PRSVS, & KMI,PJ) @@ -29,6 +29,8 @@ TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUFRC_PAST, PVFRC_PAST ! ! forcing at previous time-step ! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTFRC ! large scale vertical wind +! REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT,PVT,PWT,PTHT,PTKET ! wind, potential temperature and ! TKE at time t @@ -53,7 +55,7 @@ END MODULE MODI_FORCING ! ###################################################################### SUBROUTINE FORCING ( PTSTEP, OUSERV, PRHODJ, PCORIOZ, & PZHAT, PZZ, TPDTCUR, & - PUFRC_PAST, PVFRC_PAST, & + PUFRC_PAST, PVFRC_PAST, PWTFRC, & PUT, PVT, PWT, PTHT, PTKET, PRT, PSVT, & PRUS, PRVS, PRWS, PRTHS, PRTKES, PRRS, PRSVS, & KMI,PJ) @@ -186,6 +188,8 @@ TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUFRC_PAST, PVFRC_PAST ! ! forcing at previous time-step ! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTFRC ! large scale vertical wind +! REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT,PVT,PWT,PTHT,PTKET ! wind, potential temperature and ! TKE at time t @@ -610,7 +614,7 @@ END DO ! ! store large scale w in module to be used later ! in convection scheme -XWTFRC(:,:,:) = ZWF(:,:,:) +PWTFRC(:,:,:) = ZWF(:,:,:) ! !* computes evolution of forcing wind WHERE(PUFRC_PAST==XUNDEF) PUFRC_PAST = ZUF(:,:,:) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 63ef283bf..e195ef603 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1485,7 +1485,17 @@ ALLOCATE(XRI_MF(IIU,IJU,IKU)) ; XRI_MF=0.0 ! ALLOCATE(ZJ(IIU,IJU,IKU)) ! -!* 3.10 Forcing variables (Module MODD_FRC) +!* 3.10 Forcing variables (Module MODD_FRC and MODD_FRCn) +! +IF ( LFORCING ) THEN + ALLOCATE(XWTFRC(IIU,IJU,IKU)) ; XWTFRC = XUNDEF + 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 ! IF (KMI == 1) THEN IF ( LFORCING ) THEN @@ -1517,15 +1527,6 @@ IF (KMI == 1) THEN 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 ELSE !Do not allocate because they are the same on all grids (not 'n' variables) END IF diff --git a/src/MNH/modd_frc.f90 b/src/MNH/modd_frc.f90 index a2dfc1c56..57d78f87e 100644 --- a/src/MNH/modd_frc.f90 +++ b/src/MNH/modd_frc.f90 @@ -69,7 +69,6 @@ TYPE (DATE_TIME), SAVE, DIMENSION(:), ALLOCATABLE :: TDTFRC ! date of REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XUFRC, &! geostrophic wind XVFRC, &! components U and V XWFRC ! large scale vertical wind -REAL, SAVE, DIMENSION(:,:,:),ALLOCATABLE:: XWTFRC ! large scale vertical wind REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XTHFRC, &! large scale TH profile XRVFRC ! large scale RV profile REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XGXTHFRC,&! large scale TH gradient diff --git a/src/MNH/modd_frcn.f90 b/src/MNH/modd_frcn.f90 index 3a01de69f..fc9c68362 100644 --- a/src/MNH/modd_frcn.f90 +++ b/src/MNH/modd_frcn.f90 @@ -35,11 +35,12 @@ ! USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE - +! TYPE FRC_t ! - REAL, DIMENSION(:,:,:), POINTER :: XUFRC_PAST=>NULL()! Forcing wind components - REAL, DIMENSION(:,:,:), POINTER :: XVFRC_PAST=>NULL()! at previous time-step + REAL, DIMENSION(:,:,:), POINTER :: XUFRC_PAST=>NULL() ! Forcing wind components + REAL, DIMENSION(:,:,:), POINTER :: XVFRC_PAST=>NULL() ! at previous time-step + REAL, DIMENSION(:,:,:), POINTER :: XWTFRC=>NULL() ! large scale vertical wind ! END TYPE FRC_t @@ -47,6 +48,7 @@ TYPE(FRC_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: FRC_MODEL REAL, DIMENSION(:,:,:), POINTER :: XUFRC_PAST=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XVFRC_PAST=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XWTFRC=>NULL() CONTAINS @@ -56,11 +58,13 @@ INTEGER, INTENT(IN) :: KFROM, KTO ! Save current state for allocated arrays FRC_MODEL(KFROM)%XUFRC_PAST=>XUFRC_PAST FRC_MODEL(KFROM)%XVFRC_PAST=>XVFRC_PAST +FRC_MODEL(KFROM)%XWTFRC=>XWTFRC ! ! Current model is set to model KTO XUFRC_PAST=>FRC_MODEL(KTO)%XUFRC_PAST XVFRC_PAST=>FRC_MODEL(KTO)%XVFRC_PAST - +XWTFRC=>FRC_MODEL(KTO)%XWTFRC +! END SUBROUTINE FRC_GOTO_MODEL END MODULE MODD_FRC_n diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index a2884c77f..c1db82d4d 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1150,7 +1150,7 @@ END IF ! IF ( LFORCING ) THEN CALL FORCING(XTSTEP,LUSERV,XRHODJ,XCORIOZ,XZHAT,XZZ,TDTCUR,& - XUFRC_PAST, XVFRC_PAST, & + XUFRC_PAST, XVFRC_PAST,XWTFRC, & XUT,XVT,XWT,XTHT,XTKET,XRT,XSVT, & XRUS,XRVS,XRWS,XRTHS,XRTKES,XRRS,XRSVS,IMI,ZJ) END IF diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 9854052e4..9a7dc40d9 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -249,6 +249,7 @@ USE MODD_BLANK USE MODD_CST USE MODD_DYN USE MODD_CONF +USE MODD_FRC_n USE MODD_FRC USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS -- GitLab