diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90 index bed084bc483fe466de586f12a2f6592891374647..88fd2788a27c95053d73df834712ff7c387b9d0a 100644 --- a/src/MNH/modd_spawn.f90 +++ b/src/MNH/modd_spawn.f90 @@ -63,4 +63,10 @@ CHARACTER (LEN=28) :: CDADINIFILE ! DAD fm-file for initial file CHARACTER (LEN=28) :: CDADSPAFILE ! DAD fm-file for spawning file ! if LBAL_ONLY=T ! +! Pointers to the data of the mesh #1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRR1 +REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1 +REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1 +REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVT1 +! END MODULE MODD_SPAWN diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index 75e95c58b2826a3758af2fb23321a23a4467055f..e2ab3cebc0043b0554f86f7e597bd9efa242e901 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -174,6 +174,7 @@ USE MODD_ELEC_DESCR, ONLY: CELECNAMES ! USE MODD_BIKHARDT_n USE MODD_LUNIT_n +USE MODD_SPAWN ! USE MODI_BIKHARDT ! @@ -195,8 +196,6 @@ USE MODD_LATZ_EDFLX USE MODD_DEF_EDDY_FLUX_n USE MODD_DEF_EDDYUV_FLUX_n ! -USE MODE_FIELD -! USE MODE_MPPDB USE MODE_ll ! @@ -243,7 +242,8 @@ INTEGER :: IRR ! Number of moist variables REAL, DIMENSION(SIZE(FIELD_MODEL(1)%XRT,1),SIZE(FIELD_MODEL(1)%XRT,2),SIZE(FIELD_MODEL(1)%XRT,3)) :: ZHUT ! relative humidity ! (model 1) !REAL, DIMENSION(SIZE(FIELD_MODEL(1)%XTHT,1),SIZE(FIELD_MODEL(1)%XTHT,2),SIZE(FIELD_MODEL(1)%XTHT,3)) :: ZTHVT! virtual pot. T -REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZTHVT! virtual pot. T +!REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZTHVT! virtual pot. T +REAL, DIMENSION(SIZE(XTHT1,1),SIZE(XTHT1,2),SIZE(XTHT1,3)) :: ZTHVT! virtual pot. T ! (model 1) !$20140708 !$***** 3D @@ -280,7 +280,6 @@ CHARACTER (LEN=16) :: YRECFM_T ! management CHARACTER (LEN=16) :: YRECFM_M ! management CHARACTER (LEN=100) :: YCOMMENT ! variables CHARACTER (LEN=2) :: YDIR -INTEGER :: IID ! CHARACTER(LEN=2) :: INDICE INTEGER :: I @@ -300,12 +299,7 @@ CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) ! !* 1.1 Secondary variables ! -!CALL COMPUTE_THV_HU(CONF_MODEL(1)%LUSERV,FIELD_MODEL(1)%XRT,FIELD_MODEL(1)%XTHT,FIELD_MODEL(1)%XPABST,ZTHVT,ZHUT) -CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) -ALLOCATE(ZTHVT(SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,1), & - SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,2), & - SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,3) )) -CALL COMPUTE_THV_HU(CONF_MODEL(1)%LUSERV,FIELD_MODEL(1)%XRT,TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,FIELD_MODEL(1)%XPABST,ZTHVT,ZHUT) +CALL COMPUTE_THV_HU(CONF_MODEL(1)%LUSERV,FIELD_MODEL(1)%XRT,XTHT1,FIELD_MODEL(1)%XPABST,ZTHVT,ZHUT) ! !* 1.2 Working arrays for reading in SON input file ! @@ -332,23 +326,15 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN ! !* 2.1.1 variables which always exist ! -! PUT (:,:,:) = FIELD_MODEL(1)%XUT (KXOR:KXEND,KYOR:KYEND,:) -! PVT (:,:,:) = FIELD_MODEL(1)%XVT (KXOR:KXEND,KYOR:KYEND,:) - CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP) - PUT (:,:,:) = TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(KXOR:KXEND,KYOR:KYEND,:) - CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP) - PVT (:,:,:) = TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(KXOR:KXEND,KYOR:KYEND,:) + PUT (:,:,:) = XUT1(KXOR:KXEND,KYOR:KYEND,:) + PVT (:,:,:) = XVT1(KXOR:KXEND,KYOR:KYEND,:) PWT (:,:,:) = FIELD_MODEL(1)%XWT (KXOR:KXEND,KYOR:KYEND,:) PTHVT(:,:,:) = ZTHVT(KXOR:KXEND,KYOR:KYEND,:) ! -! PLSUM (:,:,:) = FIELD_MODEL(1)%XUT (KXOR:KXEND,KYOR:KYEND,:) -! PLSVM (:,:,:) = FIELD_MODEL(1)%XVT (KXOR:KXEND,KYOR:KYEND,:) PLSUM (:,:,:) = PUT (:,:,:) PLSVM (:,:,:) = PVT (:,:,:) PLSWM (:,:,:) = FIELD_MODEL(1)%XWT (KXOR:KXEND,KYOR:KYEND,:) -! PLSTHM(:,:,:) = FIELD_MODEL(1)%XTHT(KXOR:KXEND,KYOR:KYEND,:) - CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) - PLSTHM(:,:,:) = TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(KXOR:KXEND,KYOR:KYEND,:) + PLSTHM(:,:,:) = XTHT1(KXOR:KXEND,KYOR:KYEND,:) ! PLSRVM(:,:,:) = 0. ! @@ -484,14 +470,10 @@ ELSE ! !$series of SET_LSFIELD_1WAY_ll !$***** 3D VARS -! CALL SET_LSFIELD_1WAY_ll(FIELD_MODEL(1)%XUT(:,:,JI),ZUT_C(:,:,JI),2) - CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP) - CALL SET_LSFIELD_1WAY_ll(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(:,:,JI),ZUT_C(:,:,JI),2) + CALL SET_LSFIELD_1WAY_ll(XUT1(:,:,JI),ZUT_C(:,:,JI),2) CALL SET_LSFIELD_1WAY_ll(LSFIELD_MODEL(1)%XLSUM(:,:,JI), ZLSUM_C(:,:,JI),2) ! -! CALL SET_LSFIELD_1WAY_ll(FIELD_MODEL(1)%XVT(:,:,JI),ZVT_C(:,:,JI),2) - CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP) - CALL SET_LSFIELD_1WAY_ll(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(:,:,JI),ZUT_C(:,:,JI),2) + CALL SET_LSFIELD_1WAY_ll(XVT1(:,:,JI),ZVT_C(:,:,JI),2) CALL SET_LSFIELD_1WAY_ll(LSFIELD_MODEL(1)%XLSVM(:,:,JI),ZLSVM_C(:,:,JI),2) ! CALL SET_LSFIELD_1WAY_ll(FIELD_MODEL(1)%XWT(:,:,JI),ZWT_C(:,:,JI),2) diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90 index 83015a497d45b025095e22a785276ba51ce70a96..be300a2b4bd61ac07b49abf6ba00a48dc9c48686 100644 --- a/src/MNH/spawn_pressure2.f90 +++ b/src/MNH/spawn_pressure2.f90 @@ -124,6 +124,7 @@ USE MODD_REF_n, ONLY: REF_MODEL ! USE MODD_BIKHARDT_n USE MODD_VER_INTERP_LIN +USE MODD_SPAWN ! USE MODI_SHUMAN USE MODI_BIKHARDT @@ -131,8 +132,6 @@ USE MODI_COMPUTE_EXNER_FROM_TOP USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN ! -USE MODE_FIELD -! USE MODE_MODELN_HANDLER USE MODE_ll USE MODE_MPPDB @@ -169,8 +168,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: & ! MODEL 1 VARIABLES ZTHV1, & ! virtual potential temperature at mass points at t or t-dt ZHYDEXN1, & ! hydrostatic Exner functions at mass points at t or t-dt ZSUMR ! sum of water mixing ratios (at t-dt or t) -!REAL, DIMENSION(SIZE(FIELD_MODEL(1)%XTHT,1),SIZE(FIELD_MODEL(1)%XTHT,2)) :: & ! MODEL 1 VARIABLES -REAL, DIMENSION(:,:),ALLOCATABLE :: & ! MODEL 1 VARIABLES +REAL, DIMENSION(SIZE(XTHT1,1),SIZE(XTHT1,2)) :: & ! MODEL 1 VARIABLES ZHYDEXNTOP1 ! model top Exner functions at t or t-dt !$20140709 REAL, DIMENSION(:,:), ALLOCATABLE :: ZHYDEXNTOP1_C @@ -190,7 +188,6 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK INTEGER :: IMI INTEGER :: JI, IDIMX_C,IDIMY_C INTEGER :: IINFO_ll -INTEGER :: IID,IRESP ! !------------------------------------------------------------------------------- ! @@ -202,11 +199,8 @@ CALL GOTO_MODEL(2) ! IIU = SIZE(PTHVT,1) IJU = SIZE(PTHVT,2) -!IIU1= SIZE(FIELD_MODEL(1)%XTHT,1) -!IJU1= SIZE(FIELD_MODEL(1)%XTHT,2) -CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) -IIU1= SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,1) -IJU1= SIZE(TFIELDLIST(IID)%TFIELD_X3D(1)%DATA,2) +IIU1= SIZE(XTHT1,1) +IJU1= SIZE(XTHT1,2) IKU=SIZE(PZZ,3) IKE=IKU-JPVEXT ! @@ -236,20 +230,16 @@ END IF ALLOCATE(ZEXN1(IIU1,IJU1,IKU)) ALLOCATE(ZTHV1(IIU1,IJU1,IKU)) ALLOCATE(ZSUMR(IIU1,IJU1,IKU)) - ALLOCATE(ZHYDEXNTOP1(IIU1,IJU1)) ZSUMR(:,:,:) = 0. DO JRR=1,CONF_MODEL(1)%NRR ZSUMR(:,:,:) = ZSUMR(:,:,:) + FIELD_MODEL(1)%XRT(:,:,:,JRR) END DO ! ZEXN1(:,:,:)=(FIELD_MODEL(1)%XPABST(:,:,:)/XP00)**(XRD/XCPD) - CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) IF (CONF_MODEL(1)%LUSERV) THEN -! ZTHV1(:,:,:)=FIELD_MODEL(1)%XTHT(:,:,:)*(1.+XRV/XRD*FIELD_MODEL(1)%XRT(:,:,:,1))/(1.+ZSUMR) - ZTHV1(:,:,:)=TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(:,:,:)*(1.+XRV/XRD*FIELD_MODEL(1)%XRT(:,:,:,1))/(1.+ZSUMR) + ZTHV1(:,:,:)=XTHT1(:,:,:)*(1.+XRV/XRD*FIELD_MODEL(1)%XRT(:,:,:,1))/(1.+ZSUMR) ELSE -! ZTHV1(:,:,:)=FIELD_MODEL(1)%XTHT(:,:,:) - ZTHV1(:,:,:)=TFIELDLIST(IID)%TFIELD_X3D(1)%DATA(:,:,:) + ZTHV1(:,:,:)=XTHT1(:,:,:) END IF DEALLOCATE(ZSUMR) ! diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90 index 5ea40207d2727dc6adc2e5a6cc4903450ab0553b..18cfed7cb47dc43682b353dd3aeaf046f2c1402c 100644 --- a/src/MNH/spawn_surf2_rain.f90 +++ b/src/MNH/spawn_surf2_rain.f90 @@ -122,14 +122,14 @@ USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_FIELD_n, ONLY : XTHT USE MODD_CONF, ONLY : CCONF,CPROGRAM ! +USE MODD_SPAWN +! USE MODI_BIKHARDT ! Interface modules ! USE MODE_MODELN_HANDLER ! USE MODI_READ_PRECIP_FIELD ! -USE MODE_FIELD -! ! IMPLICIT NONE ! @@ -180,7 +180,6 @@ CHARACTER (LEN=4):: YGETRCT,YGETRRT,YGETRST,YGETRGT,YGETRHT ! READ,INIT or SKIP INTEGER :: ILU ! vertical size of arrays ! INTEGER :: IDIMX,IDIMY -INTEGER :: IID,IRESP !------------------------------------------------------------------------------- ! !* 1. PROLOGUE: @@ -219,9 +218,7 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN PINPRR(:,:) = PRECIP_MODEL(1)%XINPRR(KXOR:KXEND,KYOR:KYEND) PINPRR3D(:,:,:) = PRECIP_MODEL(1)%XINPRR3D(KXOR:KXEND,KYOR:KYEND,:) PEVAP3D(:,:,:) = PRECIP_MODEL(1)%XEVAP3D(KXOR:KXEND,KYOR:KYEND,:) -! PACPRR(:,:) = PRECIP_MODEL(1)%XACPRR(KXOR:KXEND,KYOR:KYEND) - CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP) - PACPRR(:,:) = TFIELDLIST(IID)%TFIELD_X2D(1)%DATA(KXOR:KXEND,KYOR:KYEND) + PACPRR(:,:) = XACPRR1(KXOR:KXEND,KYOR:KYEND) END IF ! IF (SIZE(PRECIP_MODEL(1)%XINPRS) /= 0 ) THEN @@ -297,12 +294,10 @@ ELSE XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XEVAP3D,PEVAP3D) - CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & -! LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACPRR,PACPRR) - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,TFIELDLIST(IID)%TFIELD_X2D(1)%DATA,PACPRR) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACPRR1,PACPRR) PINPRR(:,:)=MAX(0.,PINPRR(:,:)) PINPRR3D(:,:,:)=MAX(0.,PINPRR3D(:,:,:)) PEVAP3D(:,:,:)=MAX(0.,PEVAP3D(:,:,:)) diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index 914c14f2b7bb585b4154e5ef6e48e1d28fa1615c..ef037122296337c430316a29e5b805498954869c 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -224,6 +224,7 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION) CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ', & form='FORMATTED',position="REWIND",mode=GLOBAL) CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) +CALL SET_POINTERS_TO_MODEL1() CALL GOTO_MODEL(2) CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) CALL INIT_NMLVAR @@ -256,6 +257,18 @@ SUBROUTINE UPDATE_MODD_FROM_NMLVAR LRES_n=LRES XRES_n=XRES END SUBROUTINE UPDATE_MODD_FROM_NMLVAR + +SUBROUTINE SET_POINTERS_TO_MODEL1() +! +USE MODD_FIELD_n +USE MODD_PRECIP_n +! +XACPRR1 => XACPRR +XTHT1 => XTHT +XUT1 => XUT +XVT1 => XVT +! +END SUBROUTINE SET_POINTERS_TO_MODEL1 ! !------------------------------------------------------------------------------- !