diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90 index 4a2ee968fc6272d6034168d0e2e492206fa8a981..f9b556b40bebab63acb1bae728127371e8e14d76 100644 --- a/src/common/turb/mode_prandtl.F90 +++ b/src/common/turb/mode_prandtl.F90 @@ -271,28 +271,43 @@ IF (.NOT. OHARAT) THEN ! ! 1.3 1D Redelsperger numbers ! -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = CST%XG / PTHVREF(IIB:IIE,IJB:IJE,1:D%NKT) * PLM(IIB:IIE,IJB:IJE,1:D%NKT) & - * PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) / PTKEM(IIB:IIE,IJB:IJE,1:D%NKT) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -CALL MZM_PHY(D,ZWORK1,PBLL_O_E) -! -CALL GZ_M_W_PHY(D,PTHLM,PDZZ,ZWORK1) -IF (KRR /= 0) THEN ! moist case - CALL GZ_M_W_PHY(D,PRM(:,:,:,1),PDZZ,ZWORK2) +IF (OOCEAN) THEN !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) - PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)= CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * PETHETA(IIB:IIE,IJB:IJE,1:D%NKT) & - * ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) - PREDR1(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT) & - * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) + ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = CST%XG * CST%XALPHAOC * PLM(IIB:IIE,IJB:IJE,1:D%NKT) & + * PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) / PTKEM(IIB:IIE,IJB:IJE,1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ELSE ! dry case +ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) - PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)= CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) - PREDR1(IIB:IIE,IJB:IJE,1:D%NKT) = 0. + ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = CST%XG / PTHVREF(IIB:IIE,IJB:IJE,1:D%NKT) * PLM(IIB:IIE,IJB:IJE,1:D%NKT) & + * PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) / PTKEM(IIB:IIE,IJB:IJE,1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) END IF ! +CALL MZM_PHY(D,ZWORK1,PBLL_O_E) +CALL GZ_M_W_PHY(D,PTHLM,PDZZ,ZWORK1) +! +IF (OOCEAN) THEN + !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)= CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT)*ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) + !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + PREDR1(:,:,:) = 0. +ELSE + IF (KRR /= 0) THEN ! moist case + CALL GZ_M_W_PHY(D,PRM(:,:,:,1),PDZZ,ZWORK2) + !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)= CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * PETHETA(IIB:IIE,IJB:IJE,1:D%NKT) & + * ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) + PREDR1(IIB:IIE,IJB:IJE,1:D%NKT) = CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * PEMOIST(IIB:IIE,IJB:IJE,1:D%NKT) & + * ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) + !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + ELSE ! dry case + !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + PREDTH1(IIB:IIE,IJB:IJE,1:D%NKT)= CSTURB%XCTV*PBLL_O_E(IIB:IIE,IJB:IJE,1:D%NKT) * ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) + PREDR1(IIB:IIE,IJB:IJE,1:D%NKT) = 0. + !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) + END IF +END IF +! ! 3. Limits on 1D Redelperger numbers ! -------------------------------- ! @@ -493,61 +508,77 @@ DO JSV=1,KSV ! ELSE IF (O2D) THEN ! 3D case in a 2D model ! - ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) - ZWORK2 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & - GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), & - D%NKA, D%NKU, D%NKL) - ZWORK3 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & - GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), & - D%NKA, D%NKU, D%NKL) -! - !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) - IF (KRR /= 0) THEN - ZWORK1(:,:,:) = ZW1(:,:,:)*PETHETA(:,:,:) - ELSE - ZWORK1(:,:,:) = ZW1(:,:,:) - END IF - PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV) + & - ZWORK1(:,:,:) * ZWORK2(:,:,:) - ! - IF (KRR /= 0) THEN - PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV) + & - ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:) + IF (OOCEAN) THEN + IF (KRR /= 0) THEN + ZW1 = MZM((CST%XG *CST%XALPHAOC * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) *PETHETA + ELSE + ZW1 = MZM((CST%XG *CST%XALPHAOC * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) + END IF ELSE - PRED2RS3(:,:,:,JSV) = 0. + ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) + ZWORK2 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & + GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), & + D%NKA, D%NKU, D%NKL) + ZWORK3 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & + GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL), & + D%NKA, D%NKU, D%NKL) +! + !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) + IF (KRR /= 0) THEN + ZWORK1(:,:,:) = ZW1(:,:,:)*PETHETA(:,:,:) + ELSE + ZWORK1(:,:,:) = ZW1(:,:,:) + END IF + PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV) + & + ZWORK1(:,:,:) * ZWORK2(:,:,:) + ! + IF (KRR /= 0) THEN + PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV) + & + ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:) + ELSE + PRED2RS3(:,:,:,JSV) = 0. + END IF + !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) END IF - !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) ! ELSE ! 3D case in a 3D model ! - ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) - ZWORK2 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & - GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL) & - +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)* & - GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), & - D%NKA, D%NKU, D%NKL) - ZWORK3 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & - GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL) & - +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)* & - GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), & - D%NKA, D%NKU, D%NKL) + IF (OOCEAN) THEN + IF (KRR /= 0) THEN + ZW1 = MZM((CST%XG *CST%XALPHAOC * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) *PETHETA + ELSE + ZW1 = MZM((CST%XG *CST%XALPHAOC * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) + END IF + ELSE + ZW1 = MZM((CST%XG / PTHVREF * PLM * PLEPS / PTKEM)**2, D%NKA, D%NKU, D%NKL) + ZWORK2 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & + GX_M_M(PTHLM,PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL) & + +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)* & + GY_M_M(PTHLM,PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), & + D%NKA, D%NKU, D%NKL) + ZWORK3 = MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL)* & + GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX, D%NKA, D%NKU, D%NKL) & + +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL)* & + GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY, D%NKA, D%NKU, D%NKL), & + D%NKA, D%NKU, D%NKL) - !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) - IF (KRR /= 0) THEN - ZWORK1(:,:,:) = ZW1(:,:,:)*PETHETA(:,:,:) - ELSE - ZWORK1(:,:,:) = ZW1(:,:,:) - END IF - PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV) + & - ZWORK1(:,:,:)*ZWORK2(:,:,:) - ! - IF (KRR /= 0) THEN - PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV) + & - ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:) - ELSE - PRED2RS3(:,:,:,JSV) = 0. - END IF - !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) + !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) + IF (KRR /= 0) THEN + ZWORK1(:,:,:) = ZW1(:,:,:)*PETHETA(:,:,:) + ELSE + ZWORK1(:,:,:) = ZW1(:,:,:) + END IF + PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV) + & + ZWORK1(:,:,:)*ZWORK2(:,:,:) + ! + IF (KRR /= 0) THEN + PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV) + & + ZW1(:,:,:) * PEMOIST(:,:,:) * ZWORK3(:,:,:) + ELSE + PRED2RS3(:,:,:,JSV) = 0. + END IF + !$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) + END IF ! END IF ! end of HTURBDIM if-block ! diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90 index 4ee346eba820e0eeb7b1fdaf8c336ca49c564242..0604cb046003336de303fe6dd47fed0544f6d5ff 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -237,10 +237,8 @@ USE MODD_METRICS_n, ONLY: XDXX, XDYY, XDZX, XDZY, XDZZ USE MODD_PARAMETERS, ONLY: JPVEXT_TURB, JPHEXT USE MODD_TURB_n, ONLY: TURB_t USE MODD_LES -USE MODD_DIM_n, ONLY: NIMAX_ll, NJMAX_ll USE MODD_OCEANH, ONLY: XSSTFL USE MODD_TURB_n, ONLY: TURB_t -USE MODD_FRC, ONLY: XCENTX_OC, XCENTY_OC, XRADX_OC,XRADY_OC ! USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -256,8 +254,6 @@ USE MODE_PRANDTL USE SHUMAN_PHY, ONLY: MZM_PHY, MZF_PHY, DZM_PHY, DZF_PHY ! USE MODI_SECOND_MNH -USE MODE_ll -USE MODE_GATHER_ll ! IMPLICIT NONE ! @@ -394,17 +390,8 @@ INTEGER :: IIB,IJB ! Lower bounds of the physical INTEGER :: IIE,IJE ! Upper bounds of the physical ! sub-domain in x and y directions ! -! NIMPORTE QUOI : TODO TO BE REMOVED OUTSIDE OF TURB ? : -REAL, DIMENSION(1) :: ZXHAT_ll ! Position x in the conformal - ! plane (array on the complete domain) -REAL, DIMENSION(1) :: ZYHAT_ll ! Position y in the conformal - ! plane (array on the complete domain) -! -! REAL :: ZTIME1, ZTIME2 REAL :: ZDELTAX -REAL :: ZXBEG,ZXEND,ZYBEG,ZYEND ! Forcing size for ocean deep convection -REAL, DIMENSION(D%NIT,D%NJT) :: ZDIST ! distance ! from the center of the cooling REAL :: ZFLPROV INTEGER :: JKM ! vertical index loop @@ -412,7 +399,6 @@ INTEGER :: JSW REAL :: ZSWA ! index for time flux interpolation ! INTEGER :: IIU, IJU -INTEGER :: IRESP LOGICAL :: GUSERV ! flag to use water LOGICAL :: GFTH2 ! flag to use w'th'2 LOGICAL :: GFWTH ! flag to use w'2th' @@ -435,33 +421,6 @@ IIE=D%NIEC IIB=D%NIBC IJE=D%NJEC IJB=D%NJBC -! -!! Compute Shape of sfc flux for Oceanic Deep Conv Case -! -IF (OOCEAN .AND. ODEEPOC) THEN - !* COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS - !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 ) - !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc - ! L0_subproc as referenced in the full domain 1 - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) - CALL GET_DIM_EXT_ll('B',IIU,IJU) - CALL GET_INDICE_ll(IIB,IJB,IIE,IJE,IIU,IJU) - DO JJ = IJB,IJE - DO JI = IIB,IIE - ZDIST(JI,JJ) = SQRT( & - (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + & - (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2 & - ) - END DO - END DO - DO JJ=IJB,IJE - DO JI=IIB,IIE - IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0. - END DO - END DO -END IF !END DEEP OCEAN CONV CASE -! IKT=D%NKT IKTB=D%NKTB IKTE=D%NKTE diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index 6d6035e5b38e28d67cc9134fc1197052647550ac..3438ab29ddd28425735a03270a7ac11eed02b09b 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -262,6 +262,7 @@ USE MODD_DEEP_CONVECTION_n USE MODD_DEF_EDDY_FLUX_n ! Ajout PP USE MODD_DEF_EDDYUV_FLUX_n ! Ajout PP USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS +USE MODD_DIM_n, ONLY: NIMAX_ll, NJMAX_ll USE MODD_DRAGBLDG_n USE MODD_DRAGTREE_n USE MODD_DUST @@ -324,6 +325,7 @@ use mode_budget, only: Budget_store_end, Budget_store_init USE MODE_DATETIME USE MODE_DUST_PSD USE MODE_ll +USE MODE_GATHER_ll USE MODE_MNH_TIMING USE MODE_MODELN_HANDLER USE MODE_MPPDB @@ -428,7 +430,7 @@ INTEGER :: IIU, IJU, IKU ! dimensional indexes ! INTEGER :: JSV ! Loop index for Scalar Variables INTEGER :: JSWB ! loop on SW spectral bands -INTEGER :: IIB,IIE,IJB,IJE, IKB, IKE +INTEGER :: IIB,IIE,IJB,IJE, IKB, IKE, JI,JJ INTEGER :: IMODEIDX ! index values for the Beginning or the End of the physical ! domain in x and y directions @@ -463,6 +465,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetr REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !OHARAT turb option from AROME (not allocated in MNH) ! to be moved as optional args for turb REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTDIFF, ZTDISS +REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_ll,ZYHAT_ll ! Position x/y in the conformal + ! plane (array on the complete domain) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIST ! distance from the center of the cooling ! TYPE(DIMPHYEX_t) :: YLDIMPHYEX LOGICAL :: GCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables @@ -1500,7 +1505,34 @@ GCOMPUTE_SRC=SIZE(XSIGS, 3)/=0 ! ALLOCATE(ZTDIFF(IIU,IJU,IKU)) ALLOCATE(ZTDISS(IIU,IJU,IKU)) - +! +!! Compute Shape of sfc flux for Oceanic Deep Conv Case +! +IF (LOCEAN .AND. LDEEPOC) THEN + ALLOCATE(ZDIST(IIU,IJU)) + !* COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS + ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT)) + !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 ) + !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc + ! L0_subproc as referenced in the full domain 1 + CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) + CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) + CALL GET_DIM_EXT_ll('B',IIU,IJU) + DO JJ = IJB,IJE + DO JI = IIB,IIE + ZDIST(JI,JJ) = SQRT( & + (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + & + (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2 & + ) + END DO + END DO + DO JJ=IJB,IJE + DO JI=IIB,IIE + IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0. + END DO + END DO +END IF !END DEEP OCEAN CONV CASE +! ! CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,& IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, 1, NMODEL_CLOUD, &