diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index ebd476354fc5dba27d7ebfd8eb33b5adc5f3cf80..f79e1cb148cc9264c8197fba25ef23557bdc061d 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -861,7 +861,7 @@ IF (STATUS /= NF90_NOERR) THEN ! Define the variable STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_WRITE_FIELD_NC4_N1','NF90_DEF_VAR',trim(YVARNAME)) + IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') diff --git a/src/MNH/advec_weno_k_2_aux.f90 b/src/MNH/advec_weno_k_2_aux.f90 index 4aae2317038a0d0810ff7e8e69c35bd893c4011c..4d5017f278f402ed5e5eb3619ef5bae7d7665e2c 100644 --- a/src/MNH/advec_weno_k_2_aux.f90 +++ b/src/MNH/advec_weno_k_2_aux.f90 @@ -154,6 +154,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRUCT ! contrav. comp. on MASS GRID ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR TYPE(HALO2_ll), OPTIONAL, POINTER :: TPHALO2 ! halo2 for the field at t +REAL, DIMENSION(:,:), POINTER :: TWEST, TEAST ! !* 0.2 Declarations of local variables : ! @@ -200,6 +201,11 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) !* 0.4. INITIALIZE THE FIELD ! --------------------- ! +IF (PRESENT(TPHALO2)) THEN + TWEST => TPHALO2%WEST + TEAST => TPHALO2%EAST +END IF +! PR(:,:,:) = 0.0 ! ZFPOS1 = 0.0 @@ -232,34 +238,34 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! (r=1 for the first stencil ZFPOS1, r=0 for the second ZFPOS2) ! ZFPOS1(IW:IE+1,:,:) = 0.5 * (3.0*PSRC(IW:IE+1,:,:) - PSRC(IW-1:IE,:,:)) - ZFPOS1(IW-1, :,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TPHALO2%WEST(:,:)) + ZFPOS1(IW-1, :,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TWEST(:,:)) ! ZFPOS2(IW-1:IE,:,:) = 0.5 * (PSRC(IW-1:IE,:,:) + PSRC(IW:IE+1,:,:)) - ZFPOS2(IE+1, :,:) = 0.5 * (PSRC(IE+1, :,:) + TPHALO2%EAST(:,:)) + ZFPOS2(IE+1, :,:) = 0.5 * (PSRC(IE+1, :,:) + TEAST(:,:)) ! ! intermediate flux at the mass point on Ugrid (i+1/2,j,k) for negative wind ! case (from the right to the left) ! (r=0 for the second stencil ZFNEG2=ZFPOS2, r=-1 for the first ZFNEG1) ! - ZFNEG1(IW-1:IE-1,:,:) = 0.5 * (3.0*PSRC(IW:IE,:,:) - PSRC(IW+1:IE+1,:,:)) - ZFNEG1(IE, :,:) = 0.5 * (3.0*PSRC(IE+1, :,:) - TPHALO2%EAST(:,:)) - ZFNEG2(IW-1:IE,:,:) = 0.5 * (PSRC(IW-1:IE,:,:) + PSRC(IW:IE+1,:,:)) - ZFNEG2(IE+1, :,:) = 0.5 * (PSRC(IE+1, :,:) + TPHALO2%EAST(:,:)) + ZFNEG1(IW-1:IE-1,:,:) = 0.5 * (3.0*PSRC(IW:IE,:,:) - PSRC(IW+1:IE+1,:,:)) + ZFNEG1(IE, :,:) = 0.5 * (3.0*PSRC(IE+1, :,:) - TEAST(:,:)) + ZFNEG2(IW-1:IE,:,:) = 0.5 * (PSRC(IW-1:IE,:,:) + PSRC(IW:IE+1,:,:)) + ZFNEG2(IE+1, :,:) = 0.5 * (PSRC(IE+1, :,:) + TEAST(:,:)) ! ! smoothness indicators for positive wind case ! ZBPOS1(IW:IE+1,:,:) = (PSRC(IW:IE+1,:,:) - PSRC(IW-1:IE,:,:))**2 - ZBPOS1(IW-1, :,:) = (PSRC(IW-1, :,:) - TPHALO2%WEST(:,:))**2 + ZBPOS1(IW-1, :,:) = (PSRC(IW-1, :,:) - TWEST(:,:))**2 ! ZBPOS2(IW-1:IE,:,:) = (PSRC(IW:IE+1,:,:) - PSRC(IW-1:IE,:,:))**2 - ZBPOS2(IE+1, :,:) = (TPHALO2%EAST(:,:) - PSRC(IE+1, :,:))**2 + ZBPOS2(IE+1, :,:) = (TEAST(:,:) - PSRC(IE+1, :,:))**2 ! ! smoothness indicators for negative wind case -! +! ZBNEG1(IW-1:IE-1,:,:) = (PSRC(IW:IE,:,:) - PSRC(IW+1:IE+1,:,:))**2 - ZBNEG1(IE, :,:) = (PSRC(IE+1, :,:) - TPHALO2%EAST(:,:))**2 + ZBNEG1(IE, :,:) = (PSRC(IE+1, :,:) - TEAST(:,:))**2 ZBNEG2(IW-1:IE,:,:) = (PSRC(IW-1:IE,:,:) - PSRC(IW:IE+1,:,:))**2 - ZBNEG2(IE+1, :,:) = (PSRC(IE+1, :,:) - TPHALO2%EAST(:,:))**2 + ZBNEG2(IE+1, :,:) = (PSRC(IE+1, :,:) - TEAST(:,:))**2 ! ! WENO weights ! @@ -290,9 +296,9 @@ CASE ('OPEN','WALL','NEST') ! !!$ ELSEIF (NHALO == 1) THEN ELSE - ZFPOS1(IW-1,:,:) = 0.5 * (3.0*PSRC(IW-1,:,:) - TPHALO2%WEST(:,:)) + ZFPOS1(IW-1,:,:) = 0.5 * (3.0*PSRC(IW-1,:,:) - TWEST(:,:)) ZFPOS2(IW-1,:,:) = 0.5 * (PSRC(IW-1, :,:) + PSRC(IW,:,:)) - ZBPOS1(IW-1,:,:) = (PSRC(IW-1,:,:) - TPHALO2%WEST(:,:))**2 + ZBPOS1(IW-1,:,:) = (PSRC(IW-1,:,:) - TWEST(:,:))**2 ZBPOS2(IW-1,:,:) = (PSRC(IW, :,:) - PSRC(IW-1,:,:))**2 ! ZFNEG1(IW-1,:,:) = 0.5 * (3.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) @@ -318,13 +324,13 @@ CASE ('OPEN','WALL','NEST') !!$ ELSEIF (NHALO == 1) THEN ELSE ZFPOS1(IE,:,:) = 0.5 * (3.0*PSRC(IE,:,:) - PSRC(IE-1,:,:)) - ZFPOS2(IE,:,:) = 0.5 * (PSRC(IE, :,:) + PSRC(IE+1,:,:)) + ZFPOS2(IE,:,:) = 0.5 * (PSRC(IE, :,:) + PSRC(IE+1,:,:)) ZBPOS1(IE,:,:) = (PSRC(IE,:,:) - PSRC(IE-1,:,:))**2 ZBPOS2(IE,:,:) = (PSRC(IE+1,:,:) - PSRC(IE,:,:))**2 ! - ZFNEG1(IE,:,:) = 0.5 * (3.0*PSRC(IE+1,:,:) - TPHALO2%EAST(:,:)) + ZFNEG1(IE,:,:) = 0.5 * (3.0*PSRC(IE+1,:,:) - TEAST(:,:)) ZFNEG2(IE,:,:) = 0.5 * (PSRC(IE,:,:) + PSRC(IE+1,:,:)) - ZBNEG1(IE,:,:) = (PSRC(IE+1,:,:) - TPHALO2%EAST(:,:))**2 + ZBNEG1(IE,:,:) = (PSRC(IE+1,:,:) - TEAST(:,:))**2 ZBNEG2(IE,:,:) = (PSRC(IE, :,:) - PSRC(IE+1,:,:))**2 ! ZOMP1(IE,:,:) = ZGAMMA1 / (ZEPS + ZBPOS1(IE,:,:))**2 @@ -407,6 +413,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRUCT ! contrav. comp. on MASS GRID ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR TYPE(HALO2_ll), OPTIONAL, POINTER :: TPHALO2 ! halo2 for the field at t +REAL, DIMENSION(:,:), POINTER :: TWEST, TEAST ! !* 0.2 Declarations of local variables : ! @@ -454,6 +461,11 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) !* 0.4. INITIALIZE THE FIELD ! --------------------- ! +IF (PRESENT(TPHALO2)) THEN + TWEST => TPHALO2%WEST + TEAST => TPHALO2%EAST +END IF +! PR(:,:,:) = 0.0 ! ZFPOS1 = 0.0 @@ -483,36 +495,36 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! intermediate fluxes for positive wind case ! ZFPOS1(IW+1:IE+1,:,:) = 0.5 * (3.0*PSRC(IW:IE,:,:) - PSRC(IW-1:IE-1,:,:)) - ZFPOS1(IW, :,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TPHALO2%WEST(:,:)) + ZFPOS1(IW, :,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TWEST(:,:)) !! ZFPOS1(IW-1, :,:) = - 999. ! ZFPOS2(IW:IE+1,:,:) = 0.5 * (PSRC(IW-1:IE,:,:) + PSRC(IW:IE+1,:,:)) - ZFPOS2(IW-1, :,:) = 0.5 * (TPHALO2%WEST(:,:) + PSRC(IW-1, :,:)) + ZFPOS2(IW-1, :,:) = 0.5 * (TWEST(:,:) + PSRC(IW-1, :,:)) ! ! intermediate flux for negative wind case ! ZFNEG1(IW-1:IE,:,:) = 0.5 * (3.0*PSRC(IW-1:IE,:,:) - PSRC(IW:IE+1,:,:)) - ZFNEG1(IE+1, :,:) = 0.5 * (3.0*PSRC(IE+1, :,:) - TPHALO2%EAST(:,:)) + ZFNEG1(IE+1, :,:) = 0.5 * (3.0*PSRC(IE+1, :,:) - TEAST(:,:)) ! ZFNEG2(IW:IE+1,:,:) = 0.5 * (PSRC(IW:IE+1,:,:) + PSRC(IW-1:IE,:,:)) - ZFNEG2(IW-1, :,:) = 0.5 * (PSRC(IW-1, :,:) + TPHALO2%WEST(:,:)) -! + ZFNEG2(IW-1, :,:) = 0.5 * (PSRC(IW-1, :,:) + TWEST(:,:)) +! ! smoothness indicators for positive wind case ! ZBPOS1(IW+1:IE+1,:,:) = (PSRC(IW:IE,:,:) - PSRC(IW-1:IE-1,:,:))**2 - ZBPOS1(IW, :,:) = (PSRC(IW-1, :,:) - TPHALO2%WEST(:,:))**2 + ZBPOS1(IW, :,:) = (PSRC(IW-1, :,:) - TWEST(:,:))**2 !! ZBPOS1(IW-1, :,:) = - 999. ! ZBPOS2(IW:IE+1,:,:) = (PSRC(IW:IE+1,:,:) - PSRC(IW-1:IE,:,:))**2 - ZBPOS2(IW-1, :,:) = (PSRC(IW-1, :,:) - TPHALO2%WEST(:,:))**2 + ZBPOS2(IW-1, :,:) = (PSRC(IW-1, :,:) - TWEST(:,:))**2 ! ! smoothness indicators for negative wind case -! +! ZBNEG1(IW-1:IE,:,:) = (PSRC(IW-1:IE,:,:) - PSRC(IW:IE+1,:,:))**2 - ZBNEG1(IE+1, :,:) = (PSRC(IE+1, :,:) - TPHALO2%EAST(:,:))**2 + ZBNEG1(IE+1, :,:) = (PSRC(IE+1, :,:) - TEAST(:,:))**2 ! ZBNEG2(IW:IE+1,:,:) = (PSRC(IW-1:IE,:,:) - PSRC(IW:IE+1,:,:))**2 - ZBNEG2(IW-1, :,:) = (TPHALO2%WEST(:,:) - PSRC(IW-1,:,:))**2 + ZBNEG2(IW-1, :,:) = (TWEST(:,:) - PSRC(IW-1,:,:))**2 ! ! WENO weights ! @@ -543,9 +555,9 @@ CASE ('OPEN','WALL','NEST') ! !!$ ELSEIF (NHALO == 1) THEN ELSE - ZFPOS1(IW,:,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TPHALO2%WEST(:,:)) + ZFPOS1(IW,:,:) = 0.5 * (3.0*PSRC(IW-1, :,:) - TWEST(:,:)) ZFPOS2(IW,:,:) = 0.5 * (PSRC(IW-1, :,:) + PSRC(IW, :,:)) - ZBPOS1(IW,:,:) = (PSRC(IW-1,:,:) - TPHALO2%WEST(:,:))**2 + ZBPOS1(IW,:,:) = (PSRC(IW-1,:,:) - TWEST(:,:))**2 ZBPOS2(IW,:,:) = (PSRC(IW, :,:) - PSRC(IW-1,:,:))**2 ! ZFNEG1(IW,:,:) = 0.5 * (3.0*PSRC(IW,:,:) - PSRC(IW+1,:,:)) @@ -575,9 +587,9 @@ CASE ('OPEN','WALL','NEST') ZBPOS1(IE+1,:,:) = (PSRC(IE,:,:) - PSRC(IE-1,:,:))**2 ZBPOS2(IE+1,:,:) = (PSRC(IE+1,:,:) - PSRC(IE,:,:))**2 ! - ZFNEG1(IE+1,:,:) = 0.5 * (3.0*PSRC(IE+1,:,:) - TPHALO2%EAST(:,:)) + ZFNEG1(IE+1,:,:) = 0.5 * (3.0*PSRC(IE+1,:,:) - TEAST(:,:)) ZFNEG2(IE+1,:,:) = 0.5 * (PSRC(IE+1, :,:) + PSRC(IE,:,:)) - ZBNEG1(IE+1,:,:) = (PSRC(IE+1,:,:) - TPHALO2%EAST(:,:))**2 + ZBNEG1(IE+1,:,:) = (PSRC(IE+1,:,:) - TEAST(:,:))**2 ZBNEG2(IE+1,:,:) = (PSRC(IE, :,:) - PSRC(IE+1,:,:))**2 ! ZOMP1(IE+1,:,:) = ZGAMMA1 / (ZEPS + ZBPOS1(IE+1,:,:))**2 @@ -660,6 +672,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVCT ! contrav. comp. on MASS GRID ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR TYPE(HALO2_ll), OPTIONAL, POINTER :: TPHALO2 ! halo2 for the field at t +REAL, DIMENSION(:,:), POINTER :: TNORTH, TSOUTH ! ! !* 0.2 Declarations of local variables : @@ -708,6 +721,11 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) !* 0.4. INITIALIZE THE FIELD ! --------------------- ! +IF (PRESENT(TPHALO2)) THEN + TNORTH => TPHALO2%NORTH + TSOUTH => TPHALO2%SOUTH +END IF +! PR(:,:,:) = 0.0 ! ZFPOS1 = 0.0 @@ -737,34 +755,34 @@ CASE ('CYCL') ! In that case one must have HLBCY(1) == HLBCY(2) ! intermediate fluxes for positive wind case ! ZFPOS1(:,IS+1:IN+1,:) = 0.5 * (3.0*PSRC(:,IS:IN,:) - PSRC(:,IS-1:IN-1,:)) - ZFPOS1(:,IS, :) = 0.5 * (3.0*PSRC(:,IS-1, :) - TPHALO2%SOUTH(:,:)) + ZFPOS1(:,IS, :) = 0.5 * (3.0*PSRC(:,IS-1, :) - TSOUTH(:,:)) !! ZFPOS1(:,IS-1, :) = - 999. ! ZFPOS2(:,IS:IN+1,:) = 0.5 * (PSRC(:,IS-1:IN,:) + PSRC(:,IS:IN+1,:)) - ZFPOS2(:,IS-1, :) = 0.5 * (TPHALO2%SOUTH(:,:) + PSRC(:,IS-1, :)) + ZFPOS2(:,IS-1, :) = 0.5 * (TSOUTH(:,:) + PSRC(:,IS-1, :)) ! ZFNEG1(:,IS-1:IN,:) = 0.5 * (3.0*PSRC(:,IS-1:IN,:) - PSRC(:,IS:IN+1,:)) - ZFNEG1(:,IN+1, :) = 0.5 * (3.0*PSRC(:,IN+1, :) - TPHALO2%NORTH(:,:)) + ZFNEG1(:,IN+1, :) = 0.5 * (3.0*PSRC(:,IN+1, :) - TNORTH(:,:)) ! ZFNEG2(:,IS:IN+1,:) = 0.5 * (PSRC(:,IS:IN+1,:) + PSRC(:,IS-1:IN,:)) - ZFNEG2(:,IS-1, :) = 0.5 * (PSRC(:,IS-1, :) + TPHALO2%SOUTH(:,:)) + ZFNEG2(:,IS-1, :) = 0.5 * (PSRC(:,IS-1, :) + TSOUTH(:,:)) ! ! smoothness indicators for positive wind case ! ZBPOS1(:,IS+1:IN+1,:) = (PSRC(:,IS:IN,:) - PSRC(:,IS-1:IN-1,:))**2 - ZBPOS1(:,IS, :) = (PSRC(:,IS-1, :) - TPHALO2%SOUTH(:,:))**2 -!! ZBPOS1(:,IS-1, :) = - 999. + ZBPOS1(:,IS, :) = (PSRC(:,IS-1, :) - TSOUTH(:,:))**2 +!! ZBPOS1(:,IS-1, :) = - 999. ! ZBPOS2(:,IS:IN+1,:) = (PSRC(:,IS:IN+1,:) - PSRC(:,IS-1:IN,:))**2 - ZBPOS2(:,IS-1, :) = (PSRC(:,IS-1, :) - TPHALO2%SOUTH(:,:))**2 + ZBPOS2(:,IS-1, :) = (PSRC(:,IS-1, :) - TSOUTH(:,:))**2 ! ! smoothness indicators for negative wind case ! ZBNEG1(:,IS-1:IN,:) = (PSRC(:,IS-1:IN,:) - PSRC(:,IS:IN+1,:))**2 - ZBNEG1(:,IN+1, :) = (PSRC(:,IN+1, :) - TPHALO2%NORTH(:,:))**2 + ZBNEG1(:,IN+1, :) = (PSRC(:,IN+1, :) - TNORTH(:,:))**2 ! ZBNEG2(:,IS:IN+1,:) = (PSRC(:,IS-1:IN,:) - PSRC(:,IS:IN+1,:))**2 - ZBNEG2(:,IS-1, :) = (TPHALO2%SOUTH(:,:) - PSRC(:,IS-1,:))**2 + ZBNEG2(:,IS-1, :) = (TSOUTH(:,:) - PSRC(:,IS-1,:))**2 ! ! WENO weights ! @@ -795,9 +813,9 @@ CASE ('OPEN','WALL','NEST') ! !!$ ELSEIF (NHALO == 1) THEN ELSE - ZFPOS1(:,IS,:) = 0.5 * (3.0*PSRC(:,IS-1,:) - TPHALO2%SOUTH(:,:)) + ZFPOS1(:,IS,:) = 0.5 * (3.0*PSRC(:,IS-1,:) - TSOUTH(:,:)) ZFPOS2(:,IS,:) = 0.5 * (PSRC(:,IS-1,:) + PSRC(:,IS,:)) - ZBPOS1(:,IS,:) = (PSRC(:,IS-1,:) - TPHALO2%SOUTH(:,:))**2 + ZBPOS1(:,IS,:) = (PSRC(:,IS-1,:) - TSOUTH(:,:))**2 ZBPOS2(:,IS,:) = (PSRC(:,IS, :) - PSRC(:,IS-1,:))**2 ! ZFNEG1(:,IS,:) = 0.5 * (3.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) @@ -827,9 +845,9 @@ CASE ('OPEN','WALL','NEST') ZBPOS1(:,IN+1,:) = (PSRC(:,IN,:) - PSRC(:,IN-1,:))**2 ZBPOS2(:,IN+1,:) = (PSRC(:,IN+1,:) - PSRC(:,IN,:))**2 ! - ZFNEG1(:,IN+1,:) = 0.5 * (3.0*PSRC(:,IN+1,:) - TPHALO2%NORTH(:,:)) + ZFNEG1(:,IN+1,:) = 0.5 * (3.0*PSRC(:,IN+1,:) - TNORTH(:,:)) ZFNEG2(:,IN+1,:) = 0.5 * (PSRC(:,IN+1, :) + PSRC(:,IN,:)) - ZBNEG1(:,IN+1,:) = (PSRC(:,IN+1,:) - TPHALO2%NORTH(:,:))**2 + ZBNEG1(:,IN+1,:) = (PSRC(:,IN+1,:) - TNORTH(:,:))**2 ZBNEG2(:,IN+1,:) = (PSRC(:,IN, :) - PSRC(:,IN+1,:))**2 ! ZOMP1(:,IN+1,:) = ZGAMMA1 / (ZEPS + ZBPOS1(:,IN+1,:))**2 @@ -909,6 +927,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVCT ! contrav. comp. on MASS GRID ! output source term REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR TYPE(HALO2_ll), OPTIONAL, POINTER :: TPHALO2 ! halo2 for the field at t +REAL, DIMENSION(:,:), POINTER :: TNORTH, TSOUTH ! !* 0.2 Declarations of local variables : ! @@ -956,6 +975,11 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) !* 0.4. INITIALIZE THE FIELD ! --------------------- ! +IF (PRESENT(TPHALO2)) THEN + TNORTH => TPHALO2%NORTH + TSOUTH => TPHALO2%SOUTH +END IF +! PR(:,:,:) = 0.0 ! ZFPOS1 = 0.0 @@ -985,34 +1009,34 @@ CASE ('CYCL') ! In that case one must have HLBCX(1) == HLBCX(2) ! intermediate fluxes for positive wind case ! ZFPOS1(:,IS:IN+1,:) = 0.5 * (3.0*PSRC(:,IS:IN+1,:) - PSRC(:,IS-1:IN,:)) - ZFPOS1(:,IS-1, :) = 0.5 * (3.0*PSRC(:,IS-1, :) - TPHALO2%SOUTH(:,:)) + ZFPOS1(:,IS-1, :) = 0.5 * (3.0*PSRC(:,IS-1, :) - TSOUTH(:,:)) ! ZFPOS2(:,IS-1:IN,:) = 0.5 * (PSRC(:,IS-1:IN,:) + PSRC(:,IS:IN+1,:)) - ZFPOS2(:,IN+1, :) = 0.5 * (PSRC(:,IN+1, :) + TPHALO2%NORTH(:,:)) + ZFPOS2(:,IN+1, :) = 0.5 * (PSRC(:,IN+1, :) + TNORTH(:,:)) ! ! intermediate flux for negative wind case ! ZFNEG1(:,IS-1:IN-1,:) = 0.5 * (3.0*PSRC(:,IS:IN,:) - PSRC(:,IS+1:IN+1,:)) - ZFNEG1(:,IN, :) = 0.5 * (3.0*PSRC(:,IN+1, :) - TPHALO2%NORTH(:,:)) + ZFNEG1(:,IN, :) = 0.5 * (3.0*PSRC(:,IN+1, :) - TNORTH(:,:)) ! ZFNEG2(:,IS-1:IN,:) = 0.5 * (PSRC(:,IS-1:IN,:) + PSRC(:,IS:IN+1,:)) - ZFNEG2(:,IN+1, :) = 0.5 * (PSRC(:,IN+1, :) + TPHALO2%NORTH(:,:)) + ZFNEG2(:,IN+1, :) = 0.5 * (PSRC(:,IN+1, :) + TNORTH(:,:)) ! ! smoothness indicators for positive wind case ! ZBPOS1(:,IS:IN+1,:) = (PSRC(:,IS:IN+1,:) - PSRC(:,IS-1:IN,:))**2 - ZBPOS1(:,IS-1, :) = (PSRC(:,IS-1, :) - TPHALO2%SOUTH(:,:))**2 + ZBPOS1(:,IS-1, :) = (PSRC(:,IS-1, :) - TSOUTH(:,:))**2 ! ZBPOS2(:,IS-1:IN,:) = (PSRC(:,IS:IN+1,:) - PSRC(:,IS-1:IN,:))**2 - ZBPOS2(:,IN+1, :) = (TPHALO2%NORTH(:,:) - PSRC(:,IN+1, :))**2 + ZBPOS2(:,IN+1, :) = (TNORTH(:,:) - PSRC(:,IN+1, :))**2 ! ! smoothness indicators for negative wind case ! ZBNEG1(:,IS-1:IN-1,:) = (PSRC(:,IS:IN,:) - PSRC(:,IS+1:IN+1,:))**2 - ZBNEG1(:,IN, :) = (PSRC(:,IN+1, :) - TPHALO2%NORTH(:,:))**2 + ZBNEG1(:,IN, :) = (PSRC(:,IN+1, :) - TNORTH(:,:))**2 ! ZBNEG2(:,IS-1:IN,:) = (PSRC(:,IS-1:IN,:) - PSRC(:,IS:IN+1,:))**2 - ZBNEG2(:,IN+1, :) = (PSRC(:,IN+1, :) - TPHALO2%NORTH(:,:))**2 + ZBNEG2(:,IN+1, :) = (PSRC(:,IN+1, :) - TNORTH(:,:))**2 ! ! WENO weights ! @@ -1041,9 +1065,9 @@ CASE ('OPEN','WALL','NEST') ! !!$ ELSEIF (NHALO == 1) THEN ELSE - ZFPOS1(:,IS-1,:) = 0.5 * (3.0*PSRC(:,IS-1,:) - TPHALO2%SOUTH(:,:)) + ZFPOS1(:,IS-1,:) = 0.5 * (3.0*PSRC(:,IS-1,:) - TSOUTH(:,:)) ZFPOS2(:,IS-1,:) = 0.5 * (PSRC(:,IS-1, :) + PSRC(:,IS,:)) - ZBPOS1(:,IS-1,:) = (PSRC(:,IS-1,:) - TPHALO2%SOUTH(:,:))**2 + ZBPOS1(:,IS-1,:) = (PSRC(:,IS-1,:) - TSOUTH(:,:))**2 ZBPOS2(:,IS-1,:) = (PSRC(:,IS, :) - PSRC(:,IS-1,:))**2 ! ZFNEG1(:,IS-1,:) = 0.5 * (3.0*PSRC(:,IS,:) - PSRC(:,IS+1,:)) @@ -1073,9 +1097,9 @@ CASE ('OPEN','WALL','NEST') ZBPOS1(:,IN,:) = (PSRC(:,IN, :) - PSRC(:,IN-1,:))**2 ZBPOS2(:,IN,:) = (PSRC(:,IN+1,:) - PSRC(:,IN, :))**2 ! - ZFNEG1(:,IN,:) = 0.5 * (3.0*PSRC(:,IN+1,:) - TPHALO2%NORTH(:,:)) + ZFNEG1(:,IN,:) = 0.5 * (3.0*PSRC(:,IN+1,:) - TNORTH(:,:)) ZFNEG2(:,IN,:) = 0.5 * (PSRC(:,IN, :) + PSRC(:,IN+1,:)) - ZBNEG1(:,IN,:) = (PSRC(:,IN+1,:) - TPHALO2%NORTH(:,:))**2 + ZBNEG1(:,IN,:) = (PSRC(:,IN+1,:) - TNORTH(:,:))**2 ZBNEG2(:,IN,:) = (PSRC(:,IN, :) - PSRC(:,IN+1,:))**2 ! ZOMP1(:,IN,:) = ZGAMMA1 / (ZEPS + ZBPOS1(:,IN,:))**2 @@ -1096,8 +1120,8 @@ CASE ('OPEN','WALL','NEST') ZFPOS2(:,IS:IN-1,:) = 0.5 * (PSRC(:,IS:IN-1, :) + PSRC(:,IS+1:IN, :)) ZBPOS1(:,IS:IN-1,:) = (PSRC(:,IS:IN-1,:) - PSRC(:,IS-1:IN-2,:))**2 ZBPOS2(:,IS:IN-1,:) = (PSRC(:,IS+1:IN,:) - PSRC(:,IS:IN-1, :))**2 -! - ZFNEG1(:,IS:IN-1,:) = 0.5 * (3.0*PSRC(:,IS+1:IN,:) - PSRC(:,IS+2:IN+1,:)) +! + ZFNEG1(:,IS:IN-1,:) = 0.5 * (3.0*PSRC(:,IS+1:IN,:) - PSRC(:,IS+2:IN+1,:)) ZFNEG2(:,IS:IN-1,:) = 0.5 * (PSRC(:,IS:IN-1, :) + PSRC(:,IS+1:IN, :)) ZBNEG1(:,IS:IN-1,:) = (PSRC(:,IS+1:IN,:) - PSRC(:,IS+2:IN+1,:))**2 ZBNEG2(:,IS:IN-1,:) = (PSRC(:,IS:IN-1,:) - PSRC(:,IS+1:IN, :))**2 diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90 index 7f9f22aa73dd58f07e8b087eb7660cd6aae53c87..da0087ff5d8f0c3600af141282ff952b43db1c2f 100644 --- a/src/MNH/condensation.f90 +++ b/src/MNH/condensation.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-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. ! ######spl MODULE MODI_CONDENSATION @@ -181,17 +181,19 @@ REAL, DIMENSION(KIU,KJU,KKU) :: ZLV, ZLS, ZCPD REAL :: ZTEMP, ZPV, ZQSL, ZPIV, ZQSI, ZCOND, ZLVS ! thermodynamics REAL :: ZLL, DZZ, ZZZ ! used for length scales REAL :: ZAH, ZA, ZB, ZSBAR, ZQ1, ZSIGMA, ZDRW, ZDTL, ZSIG_CONV ! related to computation of Sig_s +INTEGER :: INQ1 +REAL :: ZINC ! !* 0.3 Definition of constants : ! !------------------------------------------------------------------------------- ! -REAL :: ZL0 = 600. ! tropospheric length scale -REAL :: ZCSIGMA = 0.2 ! constant in sigma_s parameterization -REAL :: ZCSIG_CONV = 0.30E-2 ! scaling factor for ZSIG_CONV as function of mass flux +REAL,PARAMETER :: ZL0 = 600. ! tropospheric length scale +REAL,PARAMETER :: ZCSIGMA = 0.2 ! constant in sigma_s parameterization +REAL,PARAMETER :: ZCSIG_CONV = 0.30E-2 ! scaling factor for ZSIG_CONV as function of mass flux ! -REAL, DIMENSION(-22:11) :: ZSRC_1D =(/ & +REAL, DIMENSION(-22:11),PARAMETER :: ZSRC_1D =(/ & 0. , 0. , 2.0094444E-04, 0.316670E-03, & 4.9965648E-04, 0.785956E-03 , 1.2341294E-03, 0.193327E-02, & 3.0190963E-03, 0.470144E-02 , 7.2950651E-03, 0.112759E-01, & @@ -201,8 +203,6 @@ REAL, DIMENSION(-22:11) :: ZSRC_1D =(/ & 0.8413813 , 0.933222E+00 , 0.9772662 , 0.993797E+00, & 0.9986521 , 0.999768E+00 , 0.9999684 , 0.999997E+00, & 1.0000000 , 1.000000 /) -INTEGER :: INQ1 -REAL :: ZINC ! !------------------------------------------------------------------------------- ! @@ -303,11 +303,12 @@ END IF ! !Ice fraction ZFRAC(:,:,:) = 0. -WHERE(PRC(:,:,:)+PRI(:,:,:) > 1.E-20) - ZFRAC(:,:,:) = PRI(:,:,:) / (PRC(:,:,:)+PRI(:,:,:)) -ENDWHERE -CALL COMPUTE_FRAC_ICE(HFRAC_ICE, ZFRAC, PT) -IF(.NOT. OUSERI) ZFRAC(:,:,:)=0. +IF (OUSERI) THEN + WHERE(PRC(:,:,:)+PRI(:,:,:) > 1.E-20) + ZFRAC(:,:,:) = PRI(:,:,:) / (PRC(:,:,:)+PRI(:,:,:)) + ENDWHERE + CALL COMPUTE_FRAC_ICE(HFRAC_ICE, ZFRAC, PT) +ENDIF ! DO JK=IKTB,IKTE JKP=MAX(MIN(JK+KKL,IKTE),IKTB) diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90 index e331acb020a3c0620fa63f7b0a43ffed490b700a..dc6a40759936aad02741e87f6c39c23569d3b052 100644 --- a/src/MNH/ice4_compute_pdf.f90 +++ b/src/MNH/ice4_compute_pdf.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_COMPUTE_PDF INTERFACE @@ -10,7 +10,7 @@ SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, & IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV ! Kind of Subgrid autoconversion method -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction @@ -46,9 +46,9 @@ SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, & ! ------------ ! ! -USE MODD_RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM -USE MODD_LUNIT_n, ONLY : TLUOUT +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC +! USE MODE_MSG ! IMPLICIT NONE @@ -57,7 +57,7 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KSIZE CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV ! Kind of Subgrid autoconversion method -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90 index 9110a971c0272027e987813e01634464ef2f52dc..5cff3a6ba63f53360ad6dffee4815b189b94a7c9 100644 --- a/src/MNH/ice4_fast_rg.f90 +++ b/src/MNH/ice4_fast_rg.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_FAST_RG INTERFACE @@ -96,10 +96,13 @@ SUBROUTINE ICE4_FAST_RG(KSIZE, LDSOFT, LDCOMPUTE, KRR, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LEVLIMIT, LNULLWETG, LWETGPOST, LCRFLIMIT +USE MODD_CST, ONLY: XALPI,XALPW,XBETAI,XBETAW,XGAMW,XCI,XCL,XCPV,XESTT,XGAMI,XLMTT,XLVTT,XMD,XMV,XRV,XTT +USE MODD_PARAM_ICE, ONLY: LCRFLIMIT,LEVLIMIT,LNULLWETG,LWETGPOST +USE MODD_RAIN_ICE_DESCR, ONLY: XBS,XCEXVT,XCXG,XCXS,XDG,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: NDRYLBDAG,NDRYLBDAR,NDRYLBDAS,X0DEPG,X1DEPG,XCOLEXIG,XCOLEXSG,XCOLIG,XCOLSG,XDRYINTP1G, & + XDRYINTP1R,XDRYINTP1S,XDRYINTP2G,XDRYINTP2R,XDRYINTP2S,XEX0DEPG,XEX1DEPG,XEXICFRR, & + XEXRCFRI,XFCDRYG,XFIDRYG,XFRDRYG,XFSDRYG,XICFRR,XKER_RDRYG,XKER_SDRYG,XLBRDRYG1, & + XLBRDRYG2,XLBRDRYG3,XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,XRCFRI ! IMPLICIT NONE ! diff --git a/src/MNH/ice4_fast_rh.f90 b/src/MNH/ice4_fast_rh.f90 index 9deafac9dde79a2a23790b88204ac9051f6f0db7..e5b965eba53a7cb9230969cb9f639e5322c34be8 100644 --- a/src/MNH/ice4_fast_rh.f90 +++ b/src/MNH/ice4_fast_rh.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_FAST_RH INTERFACE @@ -86,10 +86,15 @@ SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, LDCOMPUTE, LDWETG, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LEVLIMIT, LNULLWETH, LWETHPOST, LCONVHG +USE MODD_CST, ONLY: XALPI,XALPW,XBETAI,XBETAW,XGAMW,XCI,XCL,XCPV,XESTT,XGAMI,XLMTT,XLVTT,XMD,XMV,XRV,XTT +USE MODD_PARAM_ICE, ONLY: LCONVHG,LEVLIMIT,LNULLWETH,LWETHPOST +USE MODD_RAIN_ICE_DESCR, ONLY: XBG,XBS,XCEXVT,XCXG,XCXH,XCXS,XDH,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: NWETLBDAG,NWETLBDAH,NWETLBDAR,NWETLBDAS,X0DEPH,X1DEPH,XCOLEXGH,XCOLEXIH,XCOLGH,XCOLIH,XCOLEXSH, & + XCOLSH,XEX0DEPH,XEX1DEPH,XFGWETH,XFRWETH,XFSWETH,XFWETH,XKER_GWETH,XKER_RWETH,XKER_SWETH, & + XLBGWETH1,XLBGWETH2,XLBGWETH3,XLBRWETH1,XLBRWETH2,XLBRWETH3,XLBSWETH1,XLBSWETH2,XLBSWETH3, & + XWETINTP1G,XWETINTP1H,XWETINTP1R,XWETINTP1S,XWETINTP2G,XWETINTP2H,XWETINTP2R,XWETINTP2S +! +USE MODE_MPPDB ! IMPLICIT NONE ! diff --git a/src/MNH/ice4_fast_ri.f90 b/src/MNH/ice4_fast_ri.f90 index 7e9814e6b4a2115e1d5c1262d04b93716361a6fb..aa4d60a6f823fa0d11d8d5da9591611da9730f5d 100644 --- a/src/MNH/ice4_fast_ri.f90 +++ b/src/MNH/ice4_fast_ri.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_FAST_RI INTERFACE @@ -66,9 +66,8 @@ SUBROUTINE ICE4_FAST_RI(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_DESCR, ONLY: XDI,XLBEXI,XLBI,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: X0DEPI,X2DEPI ! IMPLICIT NONE ! @@ -93,7 +92,6 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI ! !* 0.2 declaration of local variables ! -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMASK ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90 index c8fc0c9fd4de628cb6b751a75de386db72d76ac5..8fc279e94853a2bfff7342df9dc03a206b6f1f40 100644 --- a/src/MNH/ice4_fast_rs.f90 +++ b/src/MNH/ice4_fast_rs.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_FAST_RS INTERFACE @@ -79,10 +79,14 @@ SUBROUTINE ICE4_FAST_RS(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LEVLIMIT, CSNOWRIMING +USE MODD_CST, ONLY: XALPI,XALPW,XBETAI,XBETAW,XCI,XCL,XCPV,XESTT,XGAMI,XGAMW,XLMTT,XLVTT,XMD,XMV,XRV,XTT +USE MODD_PARAM_ICE, ONLY: LEVLIMIT, CSNOWRIMING +USE MODD_RAIN_ICE_DESCR, ONLY: XBS,XCEXVT,XCXS,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: NACCLBDAR,NACCLBDAS,NGAMINC,X0DEPS,X1DEPS,XACCINTP1R,XACCINTP1S,XACCINTP2R,XACCINTP2S, & + XCRIMSG,XCRIMSS,XEX0DEPS,XEX1DEPS,XEXCRIMSG,XEXCRIMSS,XEXSRIMCG,XEXSRIMCG2,XFRACCSS, & + XFSACCRG,XFSCVMG,XGAMINC_RIM1,XGAMINC_RIM1,XGAMINC_RIM2,XGAMINC_RIM4,XKER_RACCS, & + XKER_RACCSS,XKER_SACCRG,XLBRACCS1,XLBRACCS2,XLBRACCS3,XLBSACCR1,XLBSACCR2,XLBSACCR3, & + XRIMINTP1,XRIMINTP2,XSRIMCG,XSRIMCG2,XSRIMCG3 ! IMPLICIT NONE ! diff --git a/src/MNH/ice4_nucleation.f90 b/src/MNH/ice4_nucleation.f90 index fcb0373e25806b15e27e3b6dd699e24b7b9f365a..549736b05968f9fe04711ba19eebd7b631adbff2 100644 --- a/src/MNH/ice4_nucleation.f90 +++ b/src/MNH/ice4_nucleation.f90 @@ -1,17 +1,17 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_NUCLEATION INTERFACE -SUBROUTINE ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, & +SUBROUTINE ICE4_NUCLEATION(KSIZE, ODSOFT, ODCOMPUTE, & PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, & PRVT, & PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: ODCOMPUTE REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF! Reference density @@ -27,7 +27,7 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI END SUBROUTINE ICE4_NUCLEATION END INTERFACE END MODULE MODI_ICE4_NUCLEATION -SUBROUTINE ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, & +SUBROUTINE ICE4_NUCLEATION(KSIZE, ODSOFT, ODCOMPUTE, & PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, & PRVT, & PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) @@ -48,18 +48,20 @@ SUBROUTINE ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN -USE MODD_PARAM_ICE, ONLY : LFEEDBACKT +USE MODD_CST, ONLY: XALPI,XALPW,XBETAI,XBETAW,XGAMI,XGAMW,XMD,XMV,XTT +USE MODD_PARAM_ICE, ONLY: LFEEDBACKT +USE MODD_RAIN_ICE_PARAM, ONLY: XALPHA1,XALPHA2,XBETA1,XBETA2,XMNU0,XNU10,XNU20 +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +! +USE MODE_MPPDB ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: ODCOMPUTE REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF! Reference density @@ -77,15 +79,15 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI ! REAL, DIMENSION(KSIZE) :: ZW ! work array LOGICAL, DIMENSION(KSIZE) :: GNEGT ! Test where to compute the HEN process -REAL, DIMENSION(KSIZE) :: ZZW, & ! Work array - ZUSW, & ! Undersaturation over water - ZSSI ! Supersaturation over ice +REAL, DIMENSION(KSIZE) :: ZZW, & ! Work array + ZUSW, & ! Undersaturation over water + ZSSI ! Supersaturation over ice !------------------------------------------------------------------------------- ! ! PRVHENI_MR(:)=0. -IF(.NOT. LDSOFT) THEN - GNEGT(:)=PT(:)<XTT .AND. PRVT>XRTMIN(1) .AND. LDCOMPUTE(:) +IF(.NOT. ODSOFT) THEN + GNEGT(:)=PT(:)<XTT .AND. PRVT>XRTMIN(1) .AND. ODCOMPUTE(:) PRVHENI_MR(:)=0. ZSSI(:)=0. ZUSW(:)=0. diff --git a/src/MNH/ice4_rimltc.f90 b/src/MNH/ice4_rimltc.f90 index 17efc9b098840471fa7209b8a5b9afec6d33e9f4..6b63a46f5da20ab01750461e2145646345529c90 100644 --- a/src/MNH/ice4_rimltc.f90 +++ b/src/MNH/ice4_rimltc.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_RIMLTC INTERFACE @@ -48,10 +48,8 @@ SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LFEEDBACKT +USE MODD_CST, ONLY: XTT +USE MODD_PARAM_ICE, ONLY: LFEEDBACKT ! IMPLICIT NONE ! diff --git a/src/MNH/ice4_rrhong.f90 b/src/MNH/ice4_rrhong.f90 index 7555a0fb52e948d8e68e98993cda2bf24481825f..08d296a4d40e86c1933a48b3235610865159739b 100644 --- a/src/MNH/ice4_rrhong.f90 +++ b/src/MNH/ice4_rrhong.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_RRHONG INTERFACE @@ -48,10 +48,9 @@ SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LFEEDBACKT +USE MODD_CST, ONLY: XTT +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +USE MODD_PARAM_ICE, ONLY: LFEEDBACKT ! IMPLICIT NONE ! diff --git a/src/MNH/ice4_rsrimcg_old.f90 b/src/MNH/ice4_rsrimcg_old.f90 index 5dd5773099dd7c9adcc505616a5d465011c42932..1f51bb30f82dd2b576bc64e38970ff1f8849263b 100644 --- a/src/MNH/ice4_rsrimcg_old.f90 +++ b/src/MNH/ice4_rsrimcg_old.f90 @@ -1,18 +1,18 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_RSRIMCG_OLD INTERFACE -SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, & +SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, ODCOMPUTE, & &PRHODREF, & &PLBDAS, & &PT, PRCT, PRST, & &PRSRIMCG_MR, PB_RS, PB_RG) IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: ODCOMPUTE REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature @@ -24,7 +24,7 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG END SUBROUTINE ICE4_RSRIMCG_OLD END INTERFACE END MODULE MODI_ICE4_RSRIMCG_OLD -SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, & +SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, ODCOMPUTE, & &PRHODREF, & &PLBDAS, & &PT, PRCT, PRST, & @@ -46,18 +46,18 @@ SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : CSNOWRIMING +USE MODD_CST, ONLY: XTT +USE MODD_PARAM_ICE, ONLY: CSNOWRIMING +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: NGAMINC,XEXSRIMCG,XGAMINC_RIM2,XRIMINTP1,XRIMINTP2,XSRIMCG ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: ODCOMPUTE REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature @@ -84,8 +84,8 @@ INTEGER :: JJ ! PRSRIMCG_MR(:)=0. ! -IF(.NOT. LDSOFT) THEN - GRIM(:) = PRCT(:)>XRTMIN(2) .AND. PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) .AND. PT(:)<XTT +IF(.NOT. ODSOFT) THEN + GRIM(:) = PRCT(:)>XRTMIN(2) .AND. PRST(:)>XRTMIN(5) .AND. ODCOMPUTE(:) .AND. PT(:)<XTT IGRIM = COUNT(GRIM(:)) ! IF(IGRIM>0 .AND. CSNOWRIMING=='OLD ') THEN diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90 index 7be61085b545dbe1c140d0ee072e31d28610f516..10dd37ae9af8494bc6be65bfcc7a973060c8ee0e 100644 --- a/src/MNH/ice4_sedimentation_split.f90 +++ b/src/MNH/ice4_sedimentation_split.f90 @@ -77,13 +77,15 @@ SUBROUTINE ICE4_SEDIMENTATION_SPLIT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM -USE MODD_PARAM_ICE -USE MODI_GAMMA +USE MODD_CST, ONLY: XCPD,XP00,XRD,XRHOLW +USE MODD_PARAM_ICE, ONLY: XSPLIT_MAXCFL +USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAC,XALPHAC2,XCONC_LAND,XCONC_SEA,XCONC_URBAN,XLBC,XNUC,XNUC2,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: XFSEDC +! USE MODE_MSG ! +USE MODI_GAMMA +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -464,23 +466,24 @@ CONTAINS ENDIF ENDDO ELSE - ! ******* for other species - IF(KSPE==3) THEN + ! ******* for other species + SELECT CASE(KSPE) + CASE(3) ZFSED=XFSEDR ZEXSED=XEXSEDR - ELSEIF(KSPE==5) THEN + CASE(5) ZFSED=XFSEDS ZEXSED=XEXSEDS - ELSEIF(KSPE==6) THEN + CASE(6) ZFSED=XFSEDG ZEXSED=XEXSEDG - ELSEIF(KSPE==7) THEN + CASE(7) ZFSED=XFSEDH ZEXSED=XEXSEDH - ELSE + CASE DEFAULT write( yspe, '( I10 )' ) kspe call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_SPLIT', 'no sedimentation parameter for KSPE='//trim(yspe) ) - ENDIF + END SELECT PWSED(:,:,:) = 0. DO JL=1, KSEDIM JI=I1(JL) diff --git a/src/MNH/ice4_slow.f90 b/src/MNH/ice4_slow.f90 index 5927644eaf2048108b7af79368c631d876ace790..f264b0b6fed783dbfdcaf60bdb3bc0cee20b40d1 100644 --- a/src/MNH/ice4_slow.f90 +++ b/src/MNH/ice4_slow.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_SLOW INTERFACE @@ -67,9 +67,10 @@ SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, PT, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR +USE MODD_CST, ONLY: XTT +USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: X0DEPG,X0DEPS,X1DEPG,X1DEPS,XACRIAUTI,XALPHA3,XBCRIAUTI,XBETA3,XCOLEXIS,XCRIAUTI, & + XEX0DEPG,XEX0DEPS,XEX1DEPG,XEX1DEPS,XEXIAGGS,XFIAGGS,XHON,XTEXAUTI,XTIMAUTI ! IMPLICIT NONE ! @@ -106,10 +107,9 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG ! !* 0.2 declaration of local variables ! -REAL, DIMENSION(SIZE(PRHODREF)) :: ZCRIAUTI -REAL :: ZTIMAUTIC LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMASK -!------------------------------------------------------------------------------- +REAL, DIMENSION(SIZE(PRHODREF)) :: ZCRIAUTI +REAL :: ZTIMAUTIC ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90 index 9883eaf7b3fc5c6610bdf2ee78d94f17c0367299..ddf291409c07fdaea43629ee1aa7fb2987c86745 100644 --- a/src/MNH/ice4_tendencies.f90 +++ b/src/MNH/ice4_tendencies.f90 @@ -1,11 +1,11 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_TENDENCIES INTERFACE SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, LDCOMPUTE, & + &KRR, ODSOFT, ODCOMPUTE, & &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & &PEXN, PRHODREF, PLVFACT, PLSFACT, LDMICRO, K1, K2, K3, & &PPRES, PCF, PSIGMA_RC, & @@ -28,8 +28,8 @@ SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, K IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: ODCOMPUTE LOGICAL, INTENT(IN) :: OWARM CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP @@ -132,7 +132,7 @@ END SUBROUTINE ICE4_TENDENCIES END INTERFACE END MODULE MODI_ICE4_TENDENCIES SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, LDCOMPUTE, & + &KRR, ODSOFT, ODCOMPUTE, & &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & &PEXN, PRHODREF, PLVFACT, PLSFACT, LDMICRO, K1, K2, K3, & &PPRES, PCF, PSIGMA_RC, & @@ -169,23 +169,22 @@ SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, K !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR - +USE MODD_CST, ONLY: XALPI,XBETAI,XCI,XCPV,XGAMI,XLSTT,XMD,XMV,XP00,XRV,XTT +USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,XLBG,XLBH,XLBR,XLBS,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC +! +USE MODI_ICE4_COMPUTE_PDF +USE MODI_ICE4_FAST_RG +USE MODI_ICE4_FAST_RH +USE MODI_ICE4_FAST_RI +USE MODI_ICE4_FAST_RS USE MODI_ICE4_NUCLEATION -USE MODI_ICE4_RRHONG +USE MODI_ICE4_RAINFR_VERT USE MODI_ICE4_RIMLTC +USE MODI_ICE4_RRHONG USE MODI_ICE4_RSRIMCG_OLD -USE MODI_ICE4_COMPUTE_PDF -USE MODI_ICE4_RAINFR_VERT USE MODI_ICE4_SLOW USE MODI_ICE4_WARM -USE MODI_ICE4_FAST_RS -USE MODI_ICE4_FAST_RG -USE MODI_ICE4_FAST_RH -USE MODI_ICE4_FAST_RI - ! IMPLICIT NONE ! @@ -193,8 +192,8 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT -LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE +LOGICAL, INTENT(IN) :: ODSOFT +LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: ODCOMPUTE LOGICAL, INTENT(IN) :: OWARM CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP @@ -335,7 +334,7 @@ ZT(:)=PT(:) ! !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES ! -------------------------------------- -CALL ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_NUCLEATION(KSIZE, ODSOFT, ODCOMPUTE, & ZTHT, PPRES, PRHODREF, PEXN, PLSFACT, ZT, & ZRVT, & PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) @@ -346,7 +345,7 @@ ZT(:) = ZTHT(:) * PEXN(:) ! !* 3.3 compute the spontaneous freezing source: RRHONG ! -CALL ICE4_RRHONG(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_RRHONG(KSIZE, ODSOFT, ODCOMPUTE, & &PEXN, PLVFACT, PLSFACT, & &ZT, ZRRT, & &ZTHT, & @@ -358,7 +357,7 @@ ZT(:) = ZTHT(:) * PEXN(:) ! !* 7.1 cloud ice melting ! -CALL ICE4_RIMLTC(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_RIMLTC(KSIZE, ODSOFT, ODCOMPUTE, & &PEXN, PLVFACT, PLSFACT, & &ZT, & &ZTHT, ZRIT, & @@ -374,7 +373,7 @@ ZLBDAS(:)=0. WHERE(ZRST(:)>0.) ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) END WHERE -CALL ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, ODCOMPUTE, & &PRHODREF, & &ZLBDAS, & &ZT, ZRCT, ZRST, & @@ -401,8 +400,7 @@ IF(KSIZE>0) THEN PRHODREF, ZRCT, PCF, PSIGMA_RC,& PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, ZRF) !Diagnostic of precipitation fraction - PRAINFR(:,:,:)=0. - PRAINFR(:,:,:)=UNPACK(ZRF(:), MASK=LDMICRO(:,:,:), FIELD=PRAINFR(:,:,:)) + PRAINFR(:,:,:)=UNPACK(ZRF(:), MASK=LDMICRO(:,:,:), FIELD=0.) ZRRT3D(:,:,:)=PRRT3D(:,:,:)-UNPACK(PRRHONG_MR(:), MASK=LDMICRO(:,:,:), FIELD=0.) CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), ZRRT3D(:,:,:)) DO JL=1,KSIZE @@ -438,7 +436,7 @@ IF(KSIZE>0) THEN ENDIF ! ! -CALL ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, ZT, & +CALL ICE4_SLOW(KSIZE, ODSOFT, ODCOMPUTE, PRHODREF, ZT, & &ZSSI, PLVFACT, PLSFACT, & &ZRVT, ZRCT, ZRIT, ZRST, ZRGT, & &ZLBDAS, ZLBDAG, & @@ -455,7 +453,7 @@ CALL ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, ZT, & ! IF(OWARM) THEN ! Check if the formation of the raindrops by the slow ! warm processes is allowed - CALL ICE4_WARM(KSIZE, LDSOFT, LDCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & + CALL ICE4_WARM(KSIZE, ODSOFT, ODCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & &PRHODREF, PLVFACT, ZT, PPRES, ZTHT,& &ZLBDAR, ZLBDAR_RF, ZKA, ZDV, ZCJ, & &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & @@ -475,7 +473,7 @@ END IF !* 4. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s ! ---------------------------------------------- ! -CALL ICE4_FAST_RS(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_FAST_RS(KSIZE, ODSOFT, ODCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAR, ZLBDAS, & @@ -495,7 +493,7 @@ CALL ICE4_FAST_RS(KSIZE, LDSOFT, LDCOMPUTE, & ! ZRGSI(:) = PRVDEPG(:) + PRSMLTG(:) + PRRACCSG(:) + PRSACCRG(:) + PRCRIMSG(:) + PRSRIMCG(:) ZRGSI_MR(:) = PRRHONG_MR(:) + PRSRIMCG_MR(:) -CALL ICE4_FAST_RG(KSIZE, LDSOFT, LDCOMPUTE, KRR, & +CALL ICE4_FAST_RG(KSIZE, ODSOFT, ODCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, PCIT, & &ZLBDAR, ZLBDAS, ZLBDAG, & @@ -514,7 +512,7 @@ CALL ICE4_FAST_RG(KSIZE, LDSOFT, LDCOMPUTE, KRR, & ! ---------------------------------------------- ! IF (KRR==7) THEN - CALL ICE4_FAST_RH(KSIZE, LDSOFT, LDCOMPUTE, LLWETG, & + CALL ICE4_FAST_RH(KSIZE, ODSOFT, ODCOMPUTE, LLWETG, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & @@ -544,7 +542,7 @@ END IF !* 7. COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES ! ------------------------------------------------------------- ! -CALL ICE4_FAST_RI(KSIZE, LDSOFT, LDCOMPUTE, & +CALL ICE4_FAST_RI(KSIZE, ODSOFT, ODCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, & &ZAI, ZCJ, PCIT, & &ZSSI, & diff --git a/src/MNH/ice4_warm.f90 b/src/MNH/ice4_warm.f90 index 1a4b70cbc2f6a80e438efe9b7cd966180c46c0a1..5c7be540c2669b5439600eb0182c9399293c8a08 100644 --- a/src/MNH/ice4_warm.f90 +++ b/src/MNH/ice4_warm.f90 @@ -1,17 +1,17 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. MODULE MODI_ICE4_WARM INTERFACE SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, LDCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, PT, PPRES, PTHT, & - &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, PRF, & - &PRVT, PRCT, PRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) + PRHODREF, PLVFACT, PT, PPRES, PTHT, & + PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & + PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & + PCF, PRF, & + PRVT, PRCT, PRRT, & + PRCAUTR, PRCACCR, PRREVAV, & + PA_TH, PA_RV, PA_RC, PA_RR) IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE LOGICAL, INTENT(IN) :: LDSOFT @@ -48,13 +48,13 @@ END SUBROUTINE ICE4_WARM END INTERFACE END MODULE MODI_ICE4_WARM SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, LDCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, PT, PPRES, PTHT, & - &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, PRF, & - &PRVT, PRCT, PRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) + PRHODREF, PLVFACT, PT, PPRES, PTHT, & + PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & + PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & + PCF, PRF, & + PRVT, PRCT, PRRT, & + PRCAUTR, PRCACCR, PRREVAV, & + PA_TH, PA_RV, PA_RC, PA_RR) !! !!** PURPOSE !! ------- @@ -72,9 +72,10 @@ SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, LDCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR +USE MODD_CST, ONLY: XALPW,XBETAW,XCL,XCPD,XCPV,XGAMW,XLVTT,XMD,XMV,XRV,XTT +USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT,XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: X0EVAR,X1EVAR,XCRIAUTC,XEX0EVAR,XEX1EVAR,XEXCACCR,XFCACCR,XTIMAUTC +! USE MODE_MSG ! IMPLICIT NONE @@ -115,12 +116,10 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR ! !* 0.2 declaration of local variables ! -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW2, ZZW3, ZZW4 -REAL, DIMENSION(SIZE(PRHODREF)) :: ZUSW ! Undersaturation over water -REAL, DIMENSION(SIZE(PRHODREF)) :: ZTHLT ! Liquid potential temperature -REAL :: ZTIMAUTIC LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMASK, GMASK1, GMASK2 -!------------------------------------------------------------------------------- +REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW2, ZZW3, ZZW4 +REAL, DIMENSION(SIZE(PRHODREF)) :: ZUSW ! Undersaturation over water +REAL, DIMENSION(SIZE(PRHODREF)) :: ZTHLT ! Liquid potential temperature ! ! ! @@ -143,7 +142,6 @@ ENDIF PA_RC(:) = PA_RC(:) - PRCAUTR(:) PA_RR(:) = PA_RR(:) + PRCAUTR(:) ! -! !* 4.3 compute the accretion of r_c for r_r production: RCACCR ! IF (HSUBG_RC_RR_ACCR=='NONE') THEN @@ -195,11 +193,9 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN END WHERE ENDIF ELSE - !wrong HSUBG_RC_RR_ACCR case - - WRITE(*,*) 'wrong HSUBG_RC_RR_ACCR case' - CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','') + CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RC_RR_ACCR case') ENDIF +! PA_RC(:) = PA_RC(:) - PRCACCR(:) PA_RR(:) = PA_RR(:) + PRCACCR(:) ! @@ -277,8 +273,7 @@ ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN ENDIF ELSE - WRITE(*,*) 'wrong HSUBG_RR_EVAP case' - CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','') + CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RR_EVAP case') END IF PA_RR(:) = PA_RR(:) - PRREVAV(:) PA_RV(:) = PA_RV(:) + PRREVAV(:) diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90 index 2008de1af2848cff57e72c8ccb17de598e35674b..efd91de496c9606f25fd3d2619e3e3c66b04274c 100644 --- a/src/MNH/ice_adjust.f90 +++ b/src/MNH/ice_adjust.f90 @@ -334,7 +334,6 @@ DO JITER =1,ITERMAX !CALL ADJUST_LANGLOIS(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, KKL, & ! PPABST, ZT, ZRV, ZRC, ZRI, ZLV, ZLS, ZCPH) HFRAC_ICE must be implemented in Langlois before using it again ZSIGS=0. - ZSRCS=0. CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, KKL, & HFRAC_ICE, & PPABST, PZZ, ZT, ZRV, ZRC, ZRI, PRS, PRG, ZSIGS, PMFCONV, PCLDFR, & diff --git a/src/MNH/ppm.f90 b/src/MNH/ppm.f90 index 77923310494085f99c93860d92b30c7363ac7325..caec0f6ca9d4c1bf5b57a0aa6bcafd7b3c290bc0 100644 --- a/src/MNH/ppm.f90 +++ b/src/MNH/ppm.f90 @@ -235,6 +235,7 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG !BEG JUAN PPM_LL INTEGER :: IJS,IJN !END JUAN PPM_LL +LOGICAL :: GWEST , GEAST !------------------------------------------------------------------------------- ! !* 0.3. COMPUTES THE DOMAIN DIMENSIONS @@ -244,6 +245,9 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) IJS=IJB IJN=IJE ! +GWEST = LWEST_ll() +GEAST = LEAST_ll() +! !BEG JUAN PPM_LL ! !* initialise & update halo & halo2 for PSRC @@ -399,13 +403,13 @@ CASE('OPEN') ! ! WEST BOUND ! - IF (LWEST_ll()) THEN + IF (GWEST) THEN ZDMQ(IIB-1,IJS:IJN,:) = -ZDMQ(IIB,IJS:IJN,:) ENDIF ! ! EAST BOUND ! - IF (LEAST_ll()) THEN + IF (GEAST) THEN ZDMQ(IIE+1,IJS:IJN,:) = -ZDMQ(IIE,IJS:IJN,:) ENDIF ! @@ -451,7 +455,7 @@ CASE('OPEN') ! ! WEST BOUND ! - IF (LWEST_ll()) THEN + IF (GWEST) THEN ZQL0(IIB-1,IJS:IJN,:) = ZQL0(IIB,IJS:IJN,:) ENDIF ! @@ -461,7 +465,7 @@ CASE('OPEN') ! ! EAST BOUND ! - IF (LEAST_ll()) THEN + IF (GEAST) THEN ZQR0(IIE+1,IJS:IJN,:) = ZQR0(IIE,IJS:IJN,:) ENDIF ! @@ -504,7 +508,8 @@ CASE('OPEN') !!$ ZFPOS(IIB+1:IIE+1,:,:) = ZQR(IIB:IIE,:,:) - 0.5*PCR(IIB+1:IIE+1,:,:) * & !!$ (ZDQ(IIB:IIE,:,:) - (1.0 - 2.0*PCR(IIB+1:IIE+1,:,:)/3.0) & !!$ * ZQ6(IIB:IIE,:,:)) - ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZQR(IIB-1:IIE,IJS:IJN,:) - 0.5*PCR(IIB:IIE+1,IJS:IJN,:) * & + + ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZQR(IIB-1:IIE,IJS:IJN,:) - 0.5*PCR(IIB:IIE+1,IJS:IJN,:) * & (ZDQ(IIB-1:IIE,IJS:IJN,:) - (1.0 - 2.0*PCR(IIB:IIE+1,IJS:IJN,:)/3.0) & * ZQ6(IIB-1:IIE,IJS:IJN,:)) ! @@ -515,7 +520,7 @@ CASE('OPEN') ! ! advection flux at open boundary when u(IIB) > 0 ! - IF (LWEST_ll()) THEN + IF (GWEST) THEN ZFPOS(IIB,IJS:IJN,:) = (PSRC(IIB-1,IJS:IJN,:) - ZQR(IIB-1,IJS:IJN,:))*PCR(IIB,IJS:IJN,:) + & ZQR(IIB-1,IJS:IJN,:) ! PPOSX(IIB-1,:,:) is not important for the calc of advection so @@ -534,7 +539,7 @@ CASE('OPEN') ! EAST BOUND ! ! advection flux at open boundary when u(IIE+1) < 0 - IF (LEAST_ll()) THEN + IF (GEAST) THEN ZFNEG(IIE+1,IJS:IJN,:) = (ZQR(IIE,IJS:IJN,:)-PSRC(IIE+1,IJS:IJN,:))*PCR(IIE+1,IJS:IJN,:) + & ZQR(IIE,IJS:IJN,:) ENDIF @@ -660,6 +665,8 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! +LOGICAL :: GSOUTH , GNORTH +! ! terms used in parabolic interpolation, dmq, qL, qR, dq, q6 REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL,ZQR REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDQ,ZQ6 @@ -682,6 +689,10 @@ INTEGER :: IIW,IIA CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) IIW=IIB IIA=IIE +! +GSOUTH=LSOUTH_ll() +GNORTH=LNORTH_ll() +! CALL GET_HALO(PSRC) ! @@ -830,13 +841,13 @@ CASE('OPEN') ! ! SOUTH BOUND ! - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN ZDMQ(IIW:IIA,IJB-1,:) = -ZDMQ(IIW:IIA,IJB,:) ENDIF ! ! NORTH BOUND ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN ZDMQ(IIW:IIA,IJE+1,:) = -ZDMQ(IIW:IIA,IJE,:) ENDIF ! @@ -870,7 +881,7 @@ CASE('OPEN') ! ! SOUTH BOUND ! - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN ZQL0(IIW:IIA,IJB-1,:) = ZQL0(IIW:IIA,IJB,:) ENDIF ! @@ -878,7 +889,7 @@ CASE('OPEN') ! ! NORTH BOUND ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN ZQR0(IIW:IIA,IJE+1,:) = ZQR0(IIW:IIA,IJE,:) ENDIF ! @@ -928,7 +939,7 @@ CASE('OPEN') ! ! SOUTH BOUND ! - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN ZFPOS(IIW:IIA,IJB,:) = (PSRC(IIW:IIA,IJB-1,:) - ZQR(IIW:IIA,IJB-1,:))*PCR(IIW:IIA,IJB,:) + & ZQR(IIW:IIA,IJB-1,:) ENDIF @@ -949,7 +960,7 @@ CASE('OPEN') ! ! NORTH BOUND ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN ZFNEG(IIW:IIA,IJE+1,:) = (ZQR(IIW:IIA,IJE,:)-PSRC(IIW:IIA,IJE+1,:))*PCR(IIW:IIA,IJE+1,:) + & ZQR(IIW:IIA,IJE,:) ENDIF @@ -1187,7 +1198,7 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + & ! PR = DZF(1,IKU,1, PCR*MZM(1,IKU,1,PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & ZFNEG*(0.5-SIGN(0.5,PCR)) ) ) -CALL GET_HALO(PR) +!Unnecessary CALL GET_HALO(PR) ! CONTAINS ! @@ -1303,6 +1314,7 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! +LOGICAL :: GWEST, GEAST ! advection fluxes REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG ! @@ -1324,6 +1336,9 @@ IJN=IJE !!$IJS=IJB-1 !!$IJN=IJE+1 ! +GWEST = LWEST_ll() +GEAST = LEAST_ll() +! !BEG JUAN PPM_LL ! !* initialise & update halo & halo2 for PSRC @@ -1333,7 +1348,6 @@ ZPHAT=PSRC ZFPOS=PSRC ZFNEG=PSRC PR=PSRC -!!$! ! !END JUAN PPM_LL !------------------------------------------------------------------------------- @@ -1416,7 +1430,7 @@ CASE ('OPEN') ! ! WEST BOUND ! - IF (.NOT. LWEST_ll()) THEN +IF (.NOT. GWEST) THEN ZPHAT(IIB ,IJS:IJN,:) = ( 7.0 * & ( PSRC(IIB ,IJS:IJN,:) + PSRC(IIB-1,IJS:IJN,:) ) - & ( PSRC(IIB+1,IJS:IJN,:) + TZ_PSRC_HALO2_ll%HALO2%WEST(IJS:IJN,:) ) ) / 12.0 @@ -1425,18 +1439,18 @@ CASE ('OPEN') ! CALL GET_HALO(ZPHAT) ! - IF (LWEST_ll()) THEN + IF (GWEST) THEN ZPHAT(IIB ,IJS:IJN,:) = 0.5*(PSRC(IIB-1,IJS:IJN,:) + PSRC(IIB,IJS:IJN,:)) ZPHAT(IIB-1,IJS:IJN,:) = ZPHAT(IIB,IJS:IJN,:) ENDIF ! ! EAST BOUND ! - IF (LEAST_ll()) THEN + IF (GEAST) THEN ZPHAT(IIE+1,IJS:IJN,:) = 0.5*(PSRC(IIE,IJS:IJN,:) + PSRC(IIE+1,IJS:IJN,:)) ENDIF ! -! update ZPHAT HALO before next/further utilisation +! update ZPHAT HALO before next/further utilisation ! !!$CALL GET_HALO(ZPHAT) ! @@ -1452,7 +1466,7 @@ CALL GET_HALO(ZPHAT) CALL GET_HALO(ZFPOS) ! JUAN ! ! positive flux on the WEST boundary - IF (LWEST_ll()) THEN + IF (GWEST) THEN ZFPOS(IIB,IJS:IJN,:) = (PSRC(IIB-1,IJS:IJN,:) - ZPHAT(IIB,IJS:IJN,:))*PCR(IIB,IJS:IJN,:) + & ZPHAT(IIB,IJS:IJN,:) ! this is not used @@ -1471,7 +1485,7 @@ CALL GET_HALO(ZFPOS) ! JUAN ! CALL GET_HALO(ZFNEG) ! JUAN ! - IF (LEAST_ll()) THEN + IF (GEAST) THEN ! ! in OPEN case PCR(IIB-1) is not used, so we also set ZFNEG(IIB-1) = 0 ! @@ -1492,7 +1506,7 @@ CALL GET_HALO(ZFPOS) ! JUAN ! ! in OPEN case fix boundary conditions ! - IF (LWEST_ll()) THEN + IF (GWEST) THEN WHERE ( PCR(IIB,IJS:IJN,:) <= 0. ) ! OUTFLOW condition PR(IIB-1,IJS:IJN,:) = 2.*PR(IIB,IJS:IJN,:) - PR(IIB+1,IJS:IJN,:) ELSEWHERE @@ -1500,7 +1514,7 @@ CALL GET_HALO(ZFPOS) ! JUAN END WHERE ENDIF ! - IF (LEAST_ll()) THEN + IF (GEAST) THEN WHERE ( PCR(IIE,IJS:IJN,:) >= 0. ) ! OUTFLOW condition PR(IIE+1,IJS:IJN,:) = 2.*PR(IIE,IJS:IJN,:) - PR(IIE-1,IJS:IJN,:) ELSEWHERE @@ -1565,6 +1579,8 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions INTEGER:: IIE,IJE ! End useful area in x,y,z directions ! +LOGICAL :: GNORTH, GSOUTH +! ! advection fluxes REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG ! @@ -1588,6 +1604,9 @@ IIA=IIE !!$IIW=IIB-1 !!$IIA=IIE+1 ! +GNORTH = LNORTH_ll() +GSOUTH = LSOUTH_ll() +! !------------------------------------------------------------------------------- ! IF ( L2D ) THEN @@ -1679,7 +1698,7 @@ CASE ('OPEN') ! ! SOUTH BOUND ! - IF ( .NOT. LSOUTH_ll()) THEN + IF ( .NOT. GSOUTH) THEN ZPHAT(IIW:IIA,IJB ,:) = (7.0 * & (PSRC(IIW:IIA,IJB ,:) + PSRC(IIW:IIA,IJB-1,:)) - & (PSRC(IIW:IIA,IJB+1,:) + TZ_PSRC_HALO2_ll%HALO2%SOUTH(IIW:IIA,:) )) / 12.0 @@ -1688,14 +1707,14 @@ CASE ('OPEN') ! CALL GET_HALO(ZPHAT) ! - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN ZPHAT(IIW:IIA,IJB ,:) = 0.5*(PSRC(IIW:IIA,IJB-1,:) + PSRC(IIW:IIA,IJB,:)) ZPHAT(IIW:IIA,IJB-1,:) = ZPHAT(IIW:IIA,IJB,:) ENDIF ! ! NORTH BOUND ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN ZPHAT(IIW:IIA,IJE+1,:) = 0.5*(PSRC(IIW:IIA,IJE,:) + PSRC(IIW:IIA,IJE+1,:)) ENDIF ! @@ -1718,7 +1737,7 @@ ZFPOS(IIW:IIA,IJB:IJE+1,:) = ZPHAT(IIW:IIA,IJB:IJE+1,:) - & CALL GET_HALO(ZFPOS) ! JUAN ! ! positive flux on the SOUTH boundary - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN ZFPOS(IIW:IIA,IJB,:) = (PSRC(IIW:IIA,IJB-1,:) - ZPHAT(IIW:IIA,IJB,:))*PCR(IIW:IIA,IJB,:) + & ZPHAT(IIW:IIA,IJB,:) ! @@ -1738,7 +1757,7 @@ CALL GET_HALO(ZFPOS) ! JUAN ! CALL GET_HALO(ZFNEG) ! JUAN ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN ! this is not used ZFNEG(IIW:IIA,IJB-1,:) = 0.0 ! @@ -1755,7 +1774,7 @@ CALL GET_HALO(ZFPOS) ! JUAN ! ! in OPEN case fix boundary conditions ! - IF (LSOUTH_ll()) THEN + IF (GSOUTH) THEN WHERE ( PCR(IIW:IIA,IJB,:) <= 0. ) ! OUTFLOW condition PR(IIW:IIA,IJB-1,:) = 1.0 * 2.*PR(IIW:IIA,IJB,:) - PR(IIW:IIA,IJB+1,:) ELSEWHERE @@ -1763,7 +1782,7 @@ CALL GET_HALO(ZFPOS) ! JUAN END WHERE ENDIF ! - IF (LNORTH_ll()) THEN + IF (GNORTH) THEN WHERE ( PCR(IIW:IIA,IJE,:) >= 0. ) ! OUTFLOW condition PR(IIW:IIA,IJE+1,:) = 1.0 * 2.*PR(IIW:IIA,IJE,:) - PR(IIW:IIA,IJE-1,:) ELSEWHERE @@ -1898,7 +1917,7 @@ ZFNEG(:,:,IKE+1) = (ZPHAT(:,:,IKE+1) - PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + & ! calculate the advection ! PR = PSRC * PRHO - & - DZF(1,IKU,1, PCR*MZM(1,IKU,1,PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & + DZF(1,IKU,1, PCR*MZM(1,IKU,1,PRHO)*( ZFPOS(:,:,:)*(0.5+SIGN(0.5,PCR)) + & ZFNEG*(0.5-SIGN(0.5,PCR)) ) ) ! ! in OPEN case fix boundary conditions diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index 2138a5c43cf879495f548bf7135e3a9932648afe..eb85e8a2f1a4860e1c4adff09e0caea95cc3528a 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -8,7 +8,7 @@ ! INTERFACE SUBROUTINE RAIN_ICE_RED ( OSEDIC,HSEDIM, HSUBG_AUCV_RC, OWARM, KKA, KKU, KKL, & - PTSTEP, KRR, LDMICRO, PEXN, & + PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & @@ -31,7 +31,7 @@ INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, INTENT(IN) :: PTSTEP ! Double Time step ! (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: LDMICRO ! mask to limit computation +LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: ODMICRO ! mask to limit computation ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thikness (m) @@ -82,7 +82,7 @@ END INTERFACE END MODULE MODI_RAIN_ICE_RED ! ######spl SUBROUTINE RAIN_ICE_RED ( OSEDIC,HSEDIM, HSUBG_AUCV_RC, OWARM, KKA, KKU, KKL, & - PTSTEP, KRR, LDMICRO, PEXN, & + PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & @@ -244,19 +244,21 @@ END MODULE MODI_RAIN_ICE_RED !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM -USE MODD_PARAM_ICE -USE MODD_BUDGET -USE MODD_LES +USE MODD_BUDGET, ONLY: LBU_ENABLE,LBUDGET_RC,LBUDGET_RR,LBUDGET_RI,LBUDGET_RS,LBUDGET_RG,LBUDGET_RH,LBUDGET_RV,LBUDGET_TH +USE MODD_CST, ONLY: XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT +USE MODD_PARAMETERS, ONLY: JPVEXT,XUNDEF +USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER, & + NMAXITER,XMRSTEP,XTSTEP_TS,XVDEPOSC +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +USE MODD_VAR_ll, ONLY: IP +! USE MODI_BUDGET +USE MODI_ICE4_NUCLEATION_WRAPPER USE MODI_ICE4_RAINFR_VERT USE MODI_ICE4_SEDIMENTATION_STAT USE MODI_ICE4_SEDIMENTATION_SPLIT -USE MODI_ICE4_NUCLEATION_WRAPPER USE MODI_ICE4_TENDENCIES +! USE MODE_ll USE MODE_MSG ! @@ -281,7 +283,7 @@ INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, INTENT(IN) :: PTSTEP ! Double Time step (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: LDMICRO ! mask to limit computation +LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: ODMICRO ! mask to limit computation ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thikness (m) @@ -316,7 +318,7 @@ REAL, DIMENSION(:,:,:),INTENT(OUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR! Rain fraction +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR! Rain fraction REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t @@ -337,10 +339,10 @@ INTEGER :: IKE, IKTE ! ! !For packing INTEGER :: IMICRO ! Case r_x>0 locations -INTEGER, DIMENSION(COUNT(LDMICRO)) :: I1,I2,I3 ! Used to replace the COUNT +INTEGER, DIMENSION(COUNT(ODMICRO)) :: I1,I2,I3 ! Used to replace the COUNT INTEGER :: JL ! and PACK intrinsics ! -!Arrays for nucleation call outisde of LDMICRO points +!Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) :: ZW ! work array REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) :: ZT ! Temperature REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & @@ -357,7 +359,7 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! !Packed variables -REAL, DIMENSION(COUNT(LDMICRO)) :: ZRVT, & ! Water vapor m.r. at t +REAL, DIMENSION(COUNT(ODMICRO)) :: ZRVT, & ! Water vapor m.r. at t & ZRCT, & ! Cloud water m.r. at t & ZRRT, & ! Rain water m.r. at t & ZRIT, & ! Pristine ice m.r. at t @@ -382,7 +384,7 @@ REAL, DIMENSION(COUNT(LDMICRO)) :: ZRVT, & ! Water vapor m.r. at t ! note that ZRC = ZHLC_HRC + ZHLC_LRC ! !Output packed tendencies (for budgets only) -REAL, DIMENSION(COUNT(LDMICRO)) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change +REAL, DIMENSION(COUNT(ODMICRO)) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change & ZRCHONI, & ! Homogeneous nucleation & ZRRHONG_MR, & ! Spontaneous freezing mixing ratio change & ZRVDEPS, & ! Deposition on r_s, @@ -410,7 +412,7 @@ REAL, DIMENSION(COUNT(LDMICRO)) :: ZRVHENI_MR, & ! heterogeneous nucleation mixi & ZRDRYHG ! Conversion of hailstone into graupel ! !Output packed total mixing ratio change (for budgets only) -REAL, DIMENSION(COUNT(LDMICRO)) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change +REAL, DIMENSION(COUNT(ODMICRO)) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change & ZTOT_RCHONI, & ! Homogeneous nucleation & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change & ZTOT_RVDEPS, & ! Deposition on r_s, @@ -437,7 +439,7 @@ REAL, DIMENSION(COUNT(LDMICRO)) :: ZTOT_RVHENI, & ! heterogeneous nucleation mix & ZTOT_RDRYHG ! Conversion of hailstone into graupel ! !For time- or mixing-ratio- splitting -REAL, DIMENSION(COUNT(LDMICRO)) :: Z0RVT, & ! Water vapor m.r. at the beginig of the current loop +REAL, DIMENSION(COUNT(ODMICRO)) :: Z0RVT, & ! Water vapor m.r. at the beginig of the current loop & Z0RCT, & ! Cloud water m.r. at the beginig of the current loop & Z0RRT, & ! Rain water m.r. at the beginig of the current loop & Z0RIT, & ! Pristine ice m.r. at the beginig of the current loop @@ -448,7 +450,7 @@ REAL, DIMENSION(COUNT(LDMICRO)) :: Z0RVT, & ! Water vapor m.r. at the begi & ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH ! !To take into acount external tendencies inside the splitting -REAL, DIMENSION(COUNT(LDMICRO)) :: ZEXT_RV, & ! External tendencie for rv +REAL, DIMENSION(COUNT(ODMICRO)) :: ZEXT_RV, & ! External tendencie for rv ZEXT_RC, & ! External tendencie for rc ZEXT_RR, & ! External tendencie for rr ZEXT_RI, & ! External tendencie for ri @@ -457,22 +459,22 @@ REAL, DIMENSION(COUNT(LDMICRO)) :: ZEXT_RV, & ! External tendencie for rv ZEXT_RH, & ! External tendencie for rh ZEXT_TH, & ! External tendencie for th ZEXT_WW ! Working array -LOGICAL :: LEXT_TEND +LOGICAL :: GEXT_TEND ! -INTEGER, DIMENSION(COUNT(LDMICRO)) :: IITER ! Number of iterations done (with real tendencies computation) +INTEGER, DIMENSION(COUNT(ODMICRO)) :: IITER ! Number of iterations done (with real tendencies computation) INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) -REAL, DIMENSION(COUNT(LDMICRO)) :: ZTIME, & ! Current integration time (starts with 0 and ends with PTSTEP) +REAL, DIMENSION(COUNT(ODMICRO)) :: ZTIME, & ! Current integration time (starts with 0 and ends with PTSTEP) & ZMAXTIME, & ! Time on which we can apply the current tendencies & ZTIME_THRESHOLD, & ! Time to reach threshold & ZTIME_LASTCALL ! Integration time when last tendecies call has been done -LOGICAL, DIMENSION(COUNT(LDMICRO)) :: LLCOMPUTE ! Points where we must compute tendenceis +LOGICAL, DIMENSION(COUNT(ODMICRO)) :: LLCOMPUTE ! Points where we must compute tendenceis LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)):: GDEP REAL :: ZTSTEP ! length of sub-timestep in case of time splitting REAL :: ZINV_TSTEP ! Inverse ov PTSTEP -REAL, DIMENSION(COUNT(LDMICRO), 6) :: ZRS_TEND -REAL, DIMENSION(COUNT(LDMICRO), 6) :: ZRG_TEND -REAL, DIMENSION(COUNT(LDMICRO), 8) :: ZRH_TEND +REAL, DIMENSION(COUNT(ODMICRO), 6) :: ZRS_TEND +REAL, DIMENSION(COUNT(ODMICRO), 6) :: ZRG_TEND +REAL, DIMENSION(COUNT(ODMICRO), 8) :: ZRH_TEND ! !For total tendencies computation REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & @@ -495,7 +497,7 @@ IKTB=1+JPVEXT IKTE=IKT-JPVEXT ! ZINV_TSTEP=1./PTSTEP -LEXT_TEND=.TRUE. +GEXT_TEND=.TRUE. ! ZT(:,:,:) = PTHT(:,:,:) * PEXN(:,:,:) ! LSFACT and LVFACT without exner @@ -606,7 +608,7 @@ ENDIF ! the microphysical fields are larger than a minimal value only !!! ! IMICRO=0 -IF(COUNT(LDMICRO)/=0) IMICRO=RAIN_ICE_COUNTJV(LDMICRO(:,:,:), IIT, IJT, IKT, SIZE(I1), I1(:), I2(:), I3(:)) +IF(COUNT(ODMICRO)/=0) IMICRO=RAIN_ICE_COUNTJV(ODMICRO(:,:,:), IIT, IJT, IKT, SIZE(I1), I1(:), I2(:), I3(:)) !Packing IF(IMICRO>0) THEN DO JL=1, IMICRO @@ -623,7 +625,7 @@ IF(IMICRO>0) THEN ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ZEXN(JL) = PEXN(I1(JL),I2(JL),I3(JL)) ENDDO - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JL=1, IMICRO ZEXT_RV(JL) = PRVS(I1(JL),I2(JL),I3(JL)) - ZRVT(JL)*ZINV_TSTEP ZEXT_RC(JL) = PRCS(I1(JL),I2(JL),I3(JL)) - ZRCT(JL)*ZINV_TSTEP @@ -645,14 +647,14 @@ IF(IMICRO>0) THEN DO JL=1, IMICRO ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL)) ENDDO - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JL=1, IMICRO ZEXT_RH(JL) = PRHS(I1(JL),I2(JL),I3(JL)) - ZRHT(JL)*ZINV_TSTEP ENDDO ENDIF ELSE ZRHT(:)=0. - IF(LEXT_TEND) ZEXT_RH(:)=0. + IF(GEXT_TEND) ZEXT_RH(:)=0. ENDIF IF(LBU_ENABLE) THEN ZTOT_RVHENI(:)=0. @@ -713,7 +715,7 @@ INB_ITER_MAX=NMAXITER IF(XTSTEP_TS/=0.)THEN INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting ZTSTEP=PTSTEP/INB_ITER_MAX - INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time + INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !For the case XMRSTEP/=0. at the same time ENDIF IITER(:)=0 ZTIME(:)=0. ! Current integration time (all points may have a different integration time) @@ -763,7 +765,7 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies CALL ICE4_TENDENCIES(IMICRO, IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, & &KRR, LSOFT, LLCOMPUTE, & &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, HSUBG_AUCV_RC, CSUBG_PR_PDF, & - &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, LDMICRO, I1, I2, I3, & + &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, ODMICRO, I1, I2, I3, & &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & &ZZT, ZTHT, & @@ -782,7 +784,7 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies &ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH, & &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, PRAINFR) ! External tendencies - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN ZA_TH(:) = ZA_TH(:) + ZEXT_TH(:) ZA_RV(:) = ZA_RV(:) + ZEXT_RV(:) ZA_RC(:) = ZA_RC(:) + ZEXT_RC(:) @@ -818,7 +820,7 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ENDIF !We need to adjust tendencies when a specy disappears - !When a specy is missing, only the external tendencies can be negative (and we must keep track of it) + !When a species is missing, only the external tendencies can be negative (and we must keep track of it) WHERE(ZA_RV(:)<-1.E-20 .AND. ZRVT(:)>XRTMIN(1)) ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RV(:)+ZRVT(:))/ZA_RV(:)) END WHERE @@ -1009,15 +1011,6 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZTIME(:)=ZTIME(:)+ZMAXTIME(:) ENDDO ENDDO - - - - - - - - - !------------------------------------------------------------------------------- ! !* 5. UNPACKING DIAGNOSTICS @@ -1025,14 +1018,14 @@ ENDDO ! IF(IMICRO>0) THEN ZW(:,:,:) = 0. - ZHLC_HCF3D(:,:,:) = UNPACK(ZHLC_HCF(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_HCF3D(:,:,:) = UNPACK(ZHLC_HCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_LCF3D(:,:,:) = UNPACK(ZHLC_LCF(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_LCF3D(:,:,:) = UNPACK(ZHLC_LCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_HRC3D(:,:,:) = UNPACK(ZHLC_HRC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_HRC3D(:,:,:) = UNPACK(ZHLC_HRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_LRC3D(:,:,:) = UNPACK(ZHLC_LRC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) - PCIT(:,:,:) = UNPACK(ZCIT(:), MASK=LDMICRO(:,:,:), FIELD=PCIT(:,:,:)) + ZHLC_LRC3D(:,:,:) = UNPACK(ZHLC_LRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) + PCIT(:,:,:) = UNPACK(ZCIT(:), MASK=ODMICRO(:,:,:), FIELD=PCIT(:,:,:)) ELSE PRAINFR(:,:,:)=0. ZHLC_HCF3D(:,:,:)=0. @@ -1042,15 +1035,14 @@ ELSE PCIT(:,:,:) = 0. ENDIF IF(OWARM) THEN - ZW(:,:,:)=0. - PEVAP3D(:,:,:)=UNPACK(ZRREVAV(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + PEVAP3D(:,:,:)=UNPACK(ZRREVAV(:), MASK=ODMICRO(:,:,:), FIELD=0.) ENDIF ! ! -!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF LDMICRO POINTS +!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS ! ---------------------------------------------------------------- ! -CALL ICE4_NUCLEATION_WRAPPER(IIT, IJT, IKT, .NOT. LDMICRO, & +CALL ICE4_NUCLEATION_WRAPPER(IIT, IJT, IKT, .NOT. ODMICRO, & PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT/PEXN, ZT, & PRVT, & PCIT, ZZ_RVHENI_MR) @@ -1070,7 +1062,7 @@ PTHS(:,:,:)=PTHS(:,:,:) + ZZ_RVHENI(:,:,:)*ZZ_LSFACT(:,:,:) ! ! ZW_??S variables will contain the new S variables values ! -IF(LEXT_TEND) THEN +IF(GEXT_TEND) THEN !Z..T variables contain the exeternal tendency, we substract it ZRVT(:) = ZRVT(:) - ZEXT_RV(:) * PTSTEP ZRCT(:) = ZRCT(:) - ZEXT_RC(:) * PTSTEP @@ -1082,14 +1074,14 @@ IF(LEXT_TEND) THEN ZTHT(:) = ZTHT(:) - ZEXT_TH(:) * PTSTEP ENDIF !Tendencies computed from difference between old state and new state (can be negative) -ZW_RVS(:,:,:) = (UNPACK(ZRVT(:), MASK=LDMICRO(:,:,:), FIELD=PRVT(:,:,:)) - PRVT(:,:,:))*ZINV_TSTEP -ZW_RCS(:,:,:) = (UNPACK(ZRCT(:), MASK=LDMICRO(:,:,:), FIELD=PRCT(:,:,:)) - PRCT(:,:,:))*ZINV_TSTEP -ZW_RRS(:,:,:) = (UNPACK(ZRRT(:), MASK=LDMICRO(:,:,:), FIELD=PRRT(:,:,:)) - PRRT(:,:,:))*ZINV_TSTEP -ZW_RIS(:,:,:) = (UNPACK(ZRIT(:), MASK=LDMICRO(:,:,:), FIELD=PRIT(:,:,:)) - PRIT(:,:,:))*ZINV_TSTEP -ZW_RSS(:,:,:) = (UNPACK(ZRST(:), MASK=LDMICRO(:,:,:), FIELD=PRST(:,:,:)) - PRST(:,:,:))*ZINV_TSTEP -ZW_RGS(:,:,:) = (UNPACK(ZRGT(:), MASK=LDMICRO(:,:,:), FIELD=PRGT(:,:,:)) - PRGT(:,:,:))*ZINV_TSTEP +ZW_RVS(:,:,:) = (UNPACK(ZRVT(:), MASK=ODMICRO(:,:,:), FIELD=PRVT(:,:,:)) - PRVT(:,:,:))*ZINV_TSTEP +ZW_RCS(:,:,:) = (UNPACK(ZRCT(:), MASK=ODMICRO(:,:,:), FIELD=PRCT(:,:,:)) - PRCT(:,:,:))*ZINV_TSTEP +ZW_RRS(:,:,:) = (UNPACK(ZRRT(:), MASK=ODMICRO(:,:,:), FIELD=PRRT(:,:,:)) - PRRT(:,:,:))*ZINV_TSTEP +ZW_RIS(:,:,:) = (UNPACK(ZRIT(:), MASK=ODMICRO(:,:,:), FIELD=PRIT(:,:,:)) - PRIT(:,:,:))*ZINV_TSTEP +ZW_RSS(:,:,:) = (UNPACK(ZRST(:), MASK=ODMICRO(:,:,:), FIELD=PRST(:,:,:)) - PRST(:,:,:))*ZINV_TSTEP +ZW_RGS(:,:,:) = (UNPACK(ZRGT(:), MASK=ODMICRO(:,:,:), FIELD=PRGT(:,:,:)) - PRGT(:,:,:))*ZINV_TSTEP IF(KRR==7) THEN - ZW_RHS(:,:,:) = (UNPACK(ZRHT(:), MASK=LDMICRO(:,:,:), FIELD=PRHT(:,:,:)) - PRHT(:,:,:))*ZINV_TSTEP + ZW_RHS(:,:,:) = (UNPACK(ZRHT(:), MASK=ODMICRO(:,:,:), FIELD=PRHT(:,:,:)) - PRHT(:,:,:))*ZINV_TSTEP ELSE ZW_RHS(:,:,:) = 0. ENDIF @@ -1113,7 +1105,7 @@ CALL CORRECT_NEGATIVITIES(KRR, ZW_RVS, ZW_RCS, ZW_RRS, & ! IF(LBU_ENABLE) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1122,7 +1114,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1131,7 +1123,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1140,7 +1132,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1149,21 +1141,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1173,21 +1165,21 @@ IF(LBU_ENABLE) THEN IF(OWARM) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC') IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC') IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) @@ -1197,17 +1189,17 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH') @@ -1216,17 +1208,17 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH') @@ -1235,11 +1227,11 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS') @@ -1248,16 +1240,16 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH') @@ -1266,21 +1258,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH') @@ -1292,7 +1284,7 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG') @@ -1300,21 +1292,21 @@ IF(LBU_ENABLE) THEN END IF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH') @@ -1325,7 +1317,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1335,25 +1327,25 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH') @@ -1364,36 +1356,36 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG') IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH') @@ -1405,7 +1397,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1415,7 +1407,7 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1424,7 +1416,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI') ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1540,7 +1532,6 @@ IF(LSEDIM_AFTER) THEN ! !sedimentation of rain fraction CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP) - ENDIF ! ! diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 88210cf5983cfb77302569cfe4506d6889c78d14..590a10f7f017beca02d95ca6302f60a093507493 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -68,23 +68,23 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at time t REAL, INTENT(IN) :: PSIGQSAT! coeff applied to qsat variance contribution REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV ! convective mass flux REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure time t-Dt +REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure time t-Dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at time t-Dt ! ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_ACT ! W for CCN activation -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! THeta RADiative Tendancy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD! THeta RADiative Tendancy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources ! ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number ! concentration at time t LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the ! cloud droplet sedimentation @@ -106,36 +106,36 @@ LOGICAL, INTENT(IN) :: OHHONI! enable haze freezing LOGICAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux solid mixing ratio -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux solid mixing ratio +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP! Cloud instant deposition +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Cloud instant deposition REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSUPSAT !sursat -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSSPRO !sursat -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction +REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask +REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! END SUBROUTINE RESOLVED_CLOUD END INTERFACE @@ -300,10 +300,10 @@ USE MODI_ICE_ADJUST USE MODI_ICE_C1R3 USE MODI_KHKO_NOTADJUST USE MODI_LIMA -USE MODI_LIMA_WARM +USE MODI_LIMA_ADJUST USE MODI_LIMA_COLD USE MODI_LIMA_MIXED -USE MODI_LIMA_ADJUST +USE MODI_LIMA_WARM USE MODI_RAIN_C2R2_KHKO USE MODI_RAIN_ICE USE MODI_RAIN_ICE_RED @@ -316,9 +316,8 @@ IMPLICIT NONE ! ! ! -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud - ! paramerization -CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation +CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud paramerization +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation scheme CHARACTER(LEN=4), INTENT(IN) :: HSCONV ! Shallow convection scheme CHARACTER(LEN=4), INTENT(IN) :: HMF_CLOUD! Type of statistical cloud INTEGER, INTENT(IN) :: KRR ! Number of moist variables @@ -357,23 +356,23 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at time t REAL, INTENT(IN) :: PSIGQSAT! coeff applied to qsat variance contribution REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV ! convective mass flux REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure time t-Dt +REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure time t-Dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at time t-Dt ! ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_ACT ! W for CCN activation -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! THeta RADiative Tendancy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD! THeta RADiative Tendancy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources ! ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number ! concentration at time t LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the ! cloud droplet sedimentation @@ -394,36 +393,36 @@ LOGICAL, INTENT(IN) :: OHHONI! enable haze freezing LOGICAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux solid mixing ratio -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux solid mixing ratio +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP! Cloud instant deposition +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Cloud instant deposition REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSUPSAT !sursat -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSSPRO !sursat -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction +REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask +REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! ! !* 0.2 Declarations of local variables : @@ -462,6 +461,7 @@ LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limi REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR ! INTEGER :: JMOD, JMOD_IFN +LOGICAL :: GWEST,GEAST,GNORTH,GSOUTH ! BVIE work array waiting for PINPRI REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI ! @@ -475,6 +475,11 @@ IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT IKU=SIZE(PZZ,3) ! +GWEST = LWEST_ll() +GEAST = LEAST_ll() +GSOUTH = LSOUTH_ll() +GNORTH = LNORTH_ll() +! IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') THEN ISVBEG = NSV_C2R2BEG ISVEND = NSV_C2R2END @@ -495,7 +500,7 @@ IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') ZSVT(:,:,:,:) = PSVT(:,:,:,ISVBEG:ISVEND) ZSVS(:,:,:,:) = PSVS(:,:,:,ISVBEG:ISVEND) END IF -IF (HCLOUD(1:3)=='ICE') THEN +IF (HCLOUD(1:3)=='ICE' .AND. LRED) THEN ALLOCATE(ZRSMIN(SIZE(XRTMIN))) ZRSMIN(:) = XRTMIN(:) / PTSTEP END IF @@ -530,10 +535,10 @@ END DO ! ! complete the physical boundaries to avoid some computations ! -IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') PRT(:IIB-1,:,:,2:) = 0.0 -IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1:,:,:,2:) = 0.0 -IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') PRT(:,:IJB-1,:,2:) = 0.0 -IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 +IF(GWEST .AND. HLBCX(1) /= 'CYCL') PRT(:IIB-1,:,:,2:) = 0.0 +IF(GEAST .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1:,:,:,2:) = 0.0 +IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') PRT(:,:IJB-1,:,2:) = 0.0 +IF(GNORTH .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JI=1,JPHEXT @@ -545,10 +550,10 @@ END DO ! ! complete the physical boundaries to avoid some computations ! - IF(LWEST_ll() .AND. HLBCX(1) /= 'CYCL') ZSVT(:IIB-1,:,:,:) = 0.0 - IF(LEAST_ll() .AND. HLBCX(2) /= 'CYCL') ZSVT(IIE+1:,:,:,:) = 0.0 - IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') ZSVT(:,:IJB-1,:,:) = 0.0 - IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') ZSVT(:,IJE+1:,:,:) = 0.0 + IF(GWEST .AND. HLBCX(1) /= 'CYCL') ZSVT(:IIB-1,:,:,:) = 0.0 + IF(GEAST .AND. HLBCX(2) /= 'CYCL') ZSVT(IIE+1:,:,:,:) = 0.0 + IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') ZSVT(:,:IJB-1,:,:) = 0.0 + IF(GNORTH .AND. HLBCY(2) /= 'CYCL') ZSVT(:,IJE+1:,:,:) = 0.0 ENDIF ! ! complete the vertical boundaries @@ -1003,8 +1008,8 @@ SELECT CASE ( HCLOUD ) PRS(:,:,:,5)>ZRSMIN(5) .OR. & PRS(:,:,:,6)>ZRSMIN(6) .OR. & PRS(:,:,:,7)>ZRSMIN(7) - CALL RAIN_ICE_RED ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & - PTSTEP, KRR, LLMICRO, ZEXN, & + CALL RAIN_ICE_RED ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & + PTSTEP, KRR, LLMICRO, ZEXN, & ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & PRT(:,:,:,3), PRT(:,:,:,4), & @@ -1015,7 +1020,7 @@ SELECT CASE ( HCLOUD ) PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN, & PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR ) ELSE - CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & + CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & KSPLITR, PTSTEP, KRR, & ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & @@ -1023,7 +1028,7 @@ SELECT CASE ( HCLOUD ) PRT(:,:,:,5), PRT(:,:,:,6), & PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC, PINPRR, PINPRR3D, PEVAP3D, & + PINPRC, PINPRR, PINPRR3D, PEVAP3D, & PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR, & PSEA, PTOWN, & PRT(:,:,:,7), PRS(:,:,:,7), PINPRH,PFPR=ZFPR ) @@ -1034,7 +1039,7 @@ SELECT CASE ( HCLOUD ) !* 10.2 Perform the saturation adjustment over cloud ice and cloud water ! IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN - CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'DEPI', & + CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'DEPI', & OSUBG_COND, OSIGMAS, PTSTEP,PSIGQSAT, & PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, ZZZ, & ZEXN, PCF_MF,PRC_MF,PRI_MF, & diff --git a/src/MNH/tridiag_thermo.f90 b/src/MNH/tridiag_thermo.f90 index 8239886c230ac037c548d740d58001b4c959a87c..0da3f156b1cd1229272086f5409651a8d5f2388d 100644 --- a/src/MNH/tridiag_thermo.f90 +++ b/src/MNH/tridiag_thermo.f90 @@ -217,15 +217,13 @@ ZY(:,:,IKB) = PRHODJ(:,:,IKB)*PVARM(:,:,IKB)/PTSTEP & + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL * PVARM(:,:,IKB+KKL) & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL * PVARM(:,:,IKB ) ! -DO JK=IKTB+1,IKTE-1 - ZY(:,:,JK) = PRHODJ(:,:,JK)*PVARM(:,:,JK)/PTSTEP & - - ZMZM_RHODJ(:,:,JK+KKL) * PF(:,:,JK+KKL)/PDZZ(:,:,JK+KKL) & - + ZMZM_RHODJ(:,:,JK ) * PF(:,:,JK )/PDZZ(:,:,JK ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK+KKL) * PIMPL * PVARM(:,:,JK+KKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK+KKL) * PIMPL * PVARM(:,:,JK ) & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK ) * PIMPL * PVARM(:,:,JK ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK ) * PIMPL * PVARM(:,:,JK-KKL) -END DO + ZY(:,:,IKTB+1:IKTE-1) = PRHODJ(:,:,IKTB+1:IKTE-1)*PVARM(:,:,IKTB+1:IKTE-1)/PTSTEP & + - ZMZM_RHODJ(:,:,IKTB+1+KKL:IKTE-1+KKL) * PF(:,:,IKTB+1+KKL:IKTE-1+KKL)/PDZZ(:,:,IKTB+1+KKL:IKTE-1+KKL) & + + ZMZM_RHODJ(:,:,IKTB+1:IKTE-1 ) * PF(:,:,IKTB+1:IKTE-1 )/PDZZ(:,:,IKTB+1:IKTE-1 ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL * PVARM(:,:,IKTB+1+KKL:IKTE-1+KKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL * PVARM(:,:,IKTB+1:IKTE-1 ) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1 ) * PIMPL * PVARM(:,:,IKTB+1:IKTE-1 ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1 ) * PIMPL * PVARM(:,:,IKTB+1-KKL:IKTE-1-KKL) ! ZY(:,:,IKE) = PRHODJ(:,:,IKE)*PVARM(:,:,IKE)/PTSTEP & - ZMZM_RHODJ(:,:,IKE+KKL) * PF(:,:,IKE+KKL)/PDZZ(:,:,IKE+KKL) & @@ -245,15 +243,13 @@ IF ( PIMPL > 1.E-10 ) THEN ZB(:,:,IKB) = PRHODJ(:,:,IKB)/PTSTEP & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL ZC(:,:,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL - - DO JK=IKTB+1,IKTE-1 - ZA(:,:,JK) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK ) * PIMPL - ZB(:,:,JK) = PRHODJ(:,:,JK)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK+KKL) * PIMPL & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK ) * PIMPL - ZC(:,:,JK) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,JK+KKL) * PIMPL - END DO - +! + ZA(:,:,IKTB+1:IKTE-1) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1) * PIMPL + ZB(:,:,IKTB+1:IKTE-1) = PRHODJ(:,:,IKTB+1:IKTE-1)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1) * PIMPL + ZC(:,:,IKTB+1:IKTE-1) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL +! ZA(:,:,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL ZB(:,:,IKE) = PRHODJ(:,:,IKE)/PTSTEP & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL diff --git a/src/MNH/tridiag_w.f90 b/src/MNH/tridiag_w.f90 index f16bbd8ef6329be9fc390645c9804cb9babdf3c3..477384a7197c54f06a3199f5e34b5d67873672c5 100644 --- a/src/MNH/tridiag_w.f90 +++ b/src/MNH/tridiag_w.f90 @@ -212,15 +212,13 @@ ZY(:,:,IKB) = ZMZM_RHODJ(:,:,IKB)*PVARM(:,:,IKB)/PTSTEP & + ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB) * PVARM(:,:,IKB+1)& - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB) * PVARM(:,:,IKB ) ! -DO JK=IKB+1,IKE-1 - ZY(:,:,JK) = ZMZM_RHODJ(:,:,JK)*PVARM(:,:,JK)/PTSTEP & - - PRHODJ(:,:,JK ) * PF(:,:,JK )/PMZF_DZZ(:,:,JK ) & - + PRHODJ(:,:,JK-1) * PF(:,:,JK-1)/PMZF_DZZ(:,:,JK-1) & - + ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK ) * PVARM(:,:,JK+1) & - - ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK ) * PVARM(:,:,JK ) & - - ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK-1) * PVARM(:,:,JK ) & - + ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK-1) * PVARM(:,:,JK-1) -END DO + ZY(:,:,IKB+1:IKE-1) = ZMZM_RHODJ(:,:,IKB+1:IKE-1)*PVARM(:,:,IKB+1:IKE-1)/PTSTEP & + - PRHODJ(:,:,IKB+1:IKE-1 ) * PF(:,:,IKB+1:IKE-1 )/PMZF_DZZ(:,:,IKB+1:IKE-1 ) & + + PRHODJ(:,:,IKB:IKE-2) * PF(:,:,IKB:IKE-2)/PMZF_DZZ(:,:,IKB:IKE-2) & + + ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB+1:IKE-1 ) * PVARM(:,:,IKB+2:IKE) & + - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB+1:IKE-1 ) * PVARM(:,:,IKB+1:IKE-1 ) & + - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB:IKE-2) * PVARM(:,:,IKB+1:IKE-1 ) & + + ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB:IKE-2) * PVARM(:,:,IKB:IKE-2) ! ZY(:,:,IKE) = ZMZM_RHODJ(:,:,IKE)*PVARM(:,:,IKE)/PTSTEP & - PRHODJ(:,:,IKE ) * PF(:,:,IKE )/PMZF_DZZ(:,:,IKE ) & @@ -247,13 +245,11 @@ ZY(:,:,IKE) = ZMZM_RHODJ(:,:,IKE)*PVARM(:,:,IKE)/PTSTEP & - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB) ZC(:,:,IKB) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB) - DO JK=IKB+1,IKE-1 - ZA(:,:,JK) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK-1) - ZB(:,:,JK) = ZMZM_RHODJ(:,:,JK)/PTSTEP & - - ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK ) & - - ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK-1) - ZC(:,:,JK) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,JK ) - END DO + ZA(:,:,IKB+1:IKE-1) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB:IKE-2) + ZB(:,:,IKB+1:IKE-1) = ZMZM_RHODJ(:,:,IKB+1:IKE-1)/PTSTEP & + - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB+1:IKE-1 ) & + - ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB:IKE-2) + ZC(:,:,IKB+1:IKE-1) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKB+1:IKE-1 ) ZA(:,:,IKE) = ZRHODJ_DFDDWDZ_O_DZ2(:,:,IKE-1) ZB(:,:,IKE) = ZMZM_RHODJ(:,:,IKE)/PTSTEP & diff --git a/src/MNH/tridiag_wind.f90 b/src/MNH/tridiag_wind.f90 index 7e1b2c7a151ddc9c7dd46a0c665b60459a665b0f..5dc35f1b1411c77450d13aee9575bdc3c3a5199a 100644 --- a/src/MNH/tridiag_wind.f90 +++ b/src/MNH/tridiag_wind.f90 @@ -197,14 +197,12 @@ IKE=KKU-JPVEXT_TURB*KKL ZY(:,:,IKB) = PVARM(:,:,IKB) + PTSTEP*PSOURCE(:,:,IKB) - & PEXPL / PRHODJA(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB)) ! -DO JK=IKTB+1,IKTE-1 - ZY(:,:,JK)= PVARM(:,:,JK) + PTSTEP*PSOURCE(:,:,JK) - & - PEXPL / PRHODJA(:,:,JK) * & - ( PVARM(:,:,JK-KKL)*PA(:,:,JK) & - -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+KKL)) & - +PVARM(:,:,JK+KKL)*PA(:,:,JK+KKL) & + ZY(:,:,IKTB+1:IKTE-1)= PVARM(:,:,IKTB+1:IKTE-1) + PTSTEP*PSOURCE(:,:,IKTB+1:IKTE-1) - & + PEXPL / PRHODJA(:,:,IKTB+1:IKTE-1) * & + ( PVARM(:,:,IKTB+1-KKL:IKTE-1-KKL)*PA(:,:,IKTB+1:IKTE-1) & + -PVARM(:,:,IKTB+1:IKTE-1)*(PA(:,:,IKTB+1:IKTE-1)+PA(:,:,IKTB+1+KKL:IKTE-1+KKL)) & + +PVARM(:,:,IKTB+1+KKL:IKTE-1+KKL)*PA(:,:,IKTB+1+KKL:IKTE-1+KKL) & ) -END DO ! ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) + & PEXPL / PRHODJA(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-KKL)) diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 835d79d0ed735eb1a835f49d1319df233f60ebb5..156d30481999c6bcdbbe6c0500232879cf867a33 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -460,7 +460,6 @@ REAL, INTENT(IN) :: PCOEF_AMPL_SAT ! saturation of the amplification coeff REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHLT ! conservative pot. temp. REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! water var. where ! PRT(:,:,:,1) is the conservative mixing ratio -! ! sources of momentum, conservative potential temperature, Turb. Kin. Energy, ! TKE dissipation REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS,PRVS,PRWS,PRTHLS,PRTKES @@ -471,7 +470,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS ! Source terms for all passive scalar variables REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Sigma_s at time t+1 : square root of the variance of the deviation to the -! saturation +! saturation REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF ! MF contribution for vert. turb. transport @@ -495,9 +494,8 @@ REAL, ALLOCATABLE, DIMENSION(:,:,:) ::& ZEXN, & ! EXN at t-1 ZT, & ! T at t-1 ZLOCPEXNM, & ! Lv/Cp/EXNREF at t-1 - ZLM, & ! Turbulent mixing length ZLEPS, & ! Dissipative length - ZDP,ZTP, ZTRH, & ! Dynamic and Thermal Production of TKE + ZTRH, & ! Dynamic and Thermal Production of TKE ZATHETA,ZAMOIST, & ! coefficients for s = f (Thetal,Rnp) ZCOEF_DISS, & ! 1/(Cph*Exner) for dissipative heating ZFRAC_ICE, & ! ri fraction of rc+ri @@ -549,10 +547,7 @@ ALLOCATE ( & ZEXN(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZT(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZLOCPEXNM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & - ZLM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZLEPS(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & - ZDP(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & - ZTP(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZTRH(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZATHETA(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & ZAMOIST(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)), & @@ -603,8 +598,11 @@ ZEXPL = 1.- PIMPL ZRVORD= XRV / XRD ! ! -ZTHLM(:,:,:) = PTHLT(:,:,:) -ZRM(:,:,:,:) = PRT(:,:,:,:) +!Copy data into ZTHLM and ZRM only if needed +IF (HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. ORMC01) THEN + ZTHLM(:,:,:) = PTHLT(:,:,:) + ZRM(:,:,:,:) = PRT(:,:,:,:) +END IF ! ! ! @@ -742,7 +740,7 @@ SELECT CASE (HTURBLEN) CASE ('BL89') ZSHEAR=0. - CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM) + CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,PLEM) ! !* 3.2 RM17 mixing length ! ------------------ @@ -751,37 +749,37 @@ SELECT CASE (HTURBLEN) ZDUDZ = MXF(MZF(1,KKU,1,GZ_U_UW(1,KKU,1,PUT,PDZZ))) ZDVDZ = MYF(MZF(1,KKU,1,GZ_V_VW(1,KKU,1,PVT,PDZZ))) ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ) - CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM) + CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,PLEM) ! !* 3.3 Delta mixing length ! ------------------- ! CASE ('DELT') - CALL DELT(ZLM) + CALL DELT(PLEM) ! !* 3.4 Deardorff mixing length ! ----------------------- ! CASE ('DEAR') - CALL DEAR(ZLM) + CALL DEAR(PLEM) ! !* 3.5 Blackadar mixing length ! ----------------------- ! CASE ('BLKR') ZL0 = 100. - ZLM(:,:,:) = ZL0 + PLEM(:,:,:) = ZL0 ZALPHA=0.5**(-1.5) ! DO JK=IKTB,IKTE - ZLM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - & + PLEM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - & & PZZ(:,:,KKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:) - ZLM(:,:,JK) = ZALPHA * ZLM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,:,JK) ) + PLEM(:,:,JK) = ZALPHA * PLEM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*PLEM(:,:,JK) ) END DO ! - ZLM(:,:,IKTB-1) = ZLM(:,:,IKTB) - ZLM(:,:,IKTE+1) = ZLM(:,:,IKTE) + PLEM(:,:,IKTB-1) = PLEM(:,:,IKTB) + PLEM(:,:,IKTE+1) = PLEM(:,:,IKTE) ! ! ! @@ -797,7 +795,7 @@ IF (KMODEL_CL==KMI .AND. HTURBLEN_CL/='NONE') CALL CLOUD_MODIF_LM !* 3.6 Dissipative length ! ------------------ ! -ZLEPS(:,:,:)=ZLM(:,:,:) +ZLEPS(:,:,:)=PLEM(:,:,:) ! !* 3.7 Correction in the Surface Boundary Layer (Redelsperger 2001) ! ---------------------------------------- @@ -812,14 +810,14 @@ IF (ORMC01) THEN ZSFRV=0. ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV) END IF - CALL RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS) + CALL RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,PLEM,ZLEPS) END IF ! !* 3.8 Mixing length in external points (used if HTURBDIM="3DIM") ! ---------------------------------------------------------- ! IF (HTURBDIM=="3DIM") THEN - CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS) + CALL UPDATE_LM(HLBCX,HLBCY,PLEM,ZLEPS) END IF !---------------------------------------------------------------------------- ! @@ -831,10 +829,7 @@ END IF ! ! ! - IF (CPROGRAM=='AROME ') THEN - ZUSLOPE=PUT(:,:,KKA) - ZVSLOPE=PVT(:,:,KKA) - ELSE + IF (CPROGRAM/='AROME ') THEN CALL ROTATE_WIND(PUT,PVT,PWT, & PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & @@ -842,14 +837,16 @@ END IF ZUSLOPE,ZVSLOPE ) ! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE) + ELSE + ZUSLOPE=PUT(:,:,KKA) + ZVSLOPE=PVT(:,:,KKA) END IF ! ! !* 4.2 compute the proportionality coefficient between wind and stress ! - ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & - (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) & - ) + ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & + (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) ! !* 4.6 compute the surface tangential fluxes ! @@ -917,12 +914,12 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M, & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & - PTKET,ZLM,ZLEPS, & + PTKET,PLEM,ZLEPS, & ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE, & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,PBL_DEPTH, & PSBL_DEPTH,ZLMO, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS, & - ZDP,ZTP,PSIGS,PWTH,PWRC,PWSV ) + PDYP,PTHP,PSIGS,PWTH,PWRC,PWSV ) ! IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VTURB_BU_RU') @@ -966,9 +963,9 @@ IF (HTURBDIM=='3DIM') THEN PSFTH,PSFRV,PSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M, & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & - PTKET,ZLM,ZLEPS, & + PTKET,PLEM,ZLEPS, & ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE, & - ZDP,ZTP,PSIGS, & + PDYP,PTHP,PSIGS, & ZTRH, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS ) END IF @@ -1012,19 +1009,16 @@ IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'HTURB_BU_RRI') ! 6.1 Contribution of mass-flux in the TKE buoyancy production if ! cloud computation is not statistical - ZTP = ZTP + XG / PTHVREF * MZF(KKA,KKU,KKL, PFLXZTHVMF ) + PTHP = PTHP + XG / PTHVREF * MZF(KKA,KKU,KKL, PFLXZTHVMF ) ! 6.2 TKE evolution equation -CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,ZDP,ZTRH, & +CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,PLEM,ZLEPS,PDYP,ZTRH, & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & PTSTEP,PIMPL,ZEXPL, & HTURBLEN,HTURBDIM, & TPFILE,OCLOSE_OUT,OTURB_DIAG, & - ZTP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS,PTR,PDISS ) -! -PDYP = ZDP -PTHP = ZTP + PTHP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS,PTR,PDISS ) ! IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN @@ -1042,8 +1036,6 @@ END IF !* 7. STORES SOME INFORMATIONS RELATED TO THE TURBULENCE SCHEME ! --------------------------------------------------------- ! -PLEM = ZLM -! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN ! ! stores the mixing length @@ -1058,7 +1050,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZLM) + CALL IO_Field_write(TPFILE,TZFIELD,PLEM) ! IF (KRR /= 0) THEN ! @@ -1196,13 +1188,13 @@ IF (LLES_CALL) THEN !* 12. LES mixing end dissipative lengths, presso-correlations ! ------------------------------------------------------- ! - CALL LES_MEAN_SUBGRID(ZLM,X_LES_SUBGRID_LMix) + CALL LES_MEAN_SUBGRID(PLEM,X_LES_SUBGRID_LMix) CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_LDiss) ! !* presso-correlations for subgrid Tke are equal to zero. ! - ZLM = 0. - CALL LES_MEAN_SUBGRID(ZLM,X_LES_SUBGRID_WP) + ZLEPS = 0. !ZLEPS is used as a work array (not used anymore) + CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_WP) ! CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 @@ -1482,9 +1474,8 @@ REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: & !------------------------------------------------------------------------------- ! ! initialize the mixing length with the mesh grid -DO JK = IKTB,IKTE ! 1D turbulence scheme - PLM(:,:,JK) = PZZ(:,:,JK+KKL) - PZZ(:,:,JK) -END DO +! 1D turbulence scheme +PLM(:,:,IKTB:IKTE) = PZZ(:,:,IKTB+KKL:IKTE+KKL) - PZZ(:,:,IKTB:IKTE) PLM(:,:,KKU) = PLM(:,:,IKE) PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA) IF ( HTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme @@ -1665,7 +1656,7 @@ WHERE ( PCEI(:,:,:) < PCEI_MAX .AND. & ! ------------------------------------------ ! IF (HTURBLEN_CL == HTURBLEN) THEN - ZLM_CLOUD(:,:,:) = ZLM(:,:,:) + ZLM_CLOUD(:,:,:) = PLEM(:,:,:) ELSE SELECT CASE (HTURBLEN_CL) ! @@ -1703,16 +1694,16 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZLM) + CALL IO_Field_write(TPFILE,TZFIELD,PLEM) ENDIF ! ! Amplification of the mixing length when the criteria are verified ! -WHERE (ZCOEF_AMPL(:,:,:) /= 1.) ZLM(:,:,:) = ZCOEF_AMPL(:,:,:)*ZLM_CLOUD(:,:,:) +WHERE (ZCOEF_AMPL(:,:,:) /= 1.) PLEM(:,:,:) = ZCOEF_AMPL(:,:,:)*ZLM_CLOUD(:,:,:) ! ! Cloud mixing length in the clouds at the points which do not verified the CEI ! -WHERE (PCEI(:,:,:) == -1.) ZLM(:,:,:) = ZLM_CLOUD(:,:,:) +WHERE (PCEI(:,:,:) == -1.) PLEM(:,:,:) = ZLM_CLOUD(:,:,:) ! ! !* 5. IMPRESSION