From cab0323943b0c5f04914ef9a39fb878b66a419a2 Mon Sep 17 00:00:00 2001 From: Weiwei Date: Wed, 9 Oct 2024 10:34:04 -0600 Subject: [PATCH] Connect nTiedtke to CCPP SCM new file: CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 new file: CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.meta new file: CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 new file: CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta deleted: CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 deleted: CONV/nTiedtke/mmm_cu_ntiedtke_post.meta deleted: CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 deleted: CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta renamed: CONV/nTiedtke/cu_ntiedtke.F90 -> CONV/nTiedtke/ufs_cu_ntiedtke.F90 renamed: CONV/nTiedtke/cu_ntiedtke.meta -> CONV/nTiedtke/ufs_cu_ntiedtke.meta renamed: CONV/nTiedtke/cu_ntiedtke_post.F90 -> CONV/nTiedtke/ufs_cu_ntiedtke_post.F90 renamed: CONV/nTiedtke/cu_ntiedtke_post.meta -> CONV/nTiedtke/ufs_cu_ntiedtke_post.meta renamed: CONV/nTiedtke/cu_ntiedtke_pre.F90 -> CONV/nTiedtke/ufs_cu_ntiedtke_pre.F90 renamed: CONV/nTiedtke/cu_ntiedtke_pre.meta -> CONV/nTiedtke/ufs_cu_ntiedtke_pre.meta modified: mmm_physics --- .../nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 | 101 +++++ .../nTiedtke/gfs_mmm_cu_ntiedtke_post.meta | 187 +++++++++ .../CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 | 196 +++++++++ .../nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90.org | 117 ++++++ .../nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta | 383 ++++++++++++++++++ .../nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta.org | 251 ++++++++++++ .../nTiedtke/laura_prepost/cu_ntiedtke_post.F | 120 ++++++ .../nTiedtke/laura_prepost/cu_ntiedtke_pre.F | 187 +++++++++ .../CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 | 47 --- .../CONV/nTiedtke/mmm_cu_ntiedtke_post.meta | 24 -- physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 | 59 --- .../CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta | 76 ---- .../{cu_ntiedtke.F90 => ufs_cu_ntiedtke.F90} | 22 +- ...{cu_ntiedtke.meta => ufs_cu_ntiedtke.meta} | 6 +- ...dtke_post.F90 => ufs_cu_ntiedtke_post.F90} | 16 +- ...ke_post.meta => ufs_cu_ntiedtke_post.meta} | 4 +- ...iedtke_pre.F90 => ufs_cu_ntiedtke_pre.F90} | 16 +- ...dtke_pre.meta => ufs_cu_ntiedtke_pre.meta} | 4 +- physics/mmm_physics | 2 +- 19 files changed, 1577 insertions(+), 241 deletions(-) create mode 100644 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 create mode 100755 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.meta create mode 100644 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 create mode 100644 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90.org create mode 100755 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta create mode 100755 physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta.org create mode 100644 physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_post.F create mode 100644 physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_pre.F delete mode 100644 physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 delete mode 100644 physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.meta delete mode 100644 physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 delete mode 100644 physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta rename physics/CONV/nTiedtke/{cu_ntiedtke.F90 => ufs_cu_ntiedtke.F90} (99%) rename physics/CONV/nTiedtke/{cu_ntiedtke.meta => ufs_cu_ntiedtke.meta} (99%) rename physics/CONV/nTiedtke/{cu_ntiedtke_post.F90 => ufs_cu_ntiedtke_post.F90} (64%) rename physics/CONV/nTiedtke/{cu_ntiedtke_post.meta => ufs_cu_ntiedtke_post.meta} (95%) rename physics/CONV/nTiedtke/{cu_ntiedtke_pre.F90 => ufs_cu_ntiedtke_pre.F90} (80%) rename physics/CONV/nTiedtke/{cu_ntiedtke_pre.meta => ufs_cu_ntiedtke_pre.meta} (97%) diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 new file mode 100644 index 000000000..b6f13dd9e --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.F90 @@ -0,0 +1,101 @@ +! ########################################################################################### +! +! ########################################################################################### +module gfs_mmm_cu_ntiedtke_post + use machine, only: kind_phys + + implicit none + + public gfs_mmm_cu_ntiedtke_post_run + +contains +!> \section arg_table_gfs_mmm_cu_ntiedtke_post_run +!! \htmlinclude gfs_mmm_cu_ntiedtke_post_run.html +!! + ! ######################################################################################### + ! + ! ######################################################################################### + subroutine gfs_mmm_cu_ntiedtke_post_run(nCol, nLev, qv, temp, spechum, prevst, prevsq, qc, qi, & + ugrs, vgrs, pres, presi, geoph, geophi, pomg, forcet, forceq, & + raincd_mm, raincd, & + errmsg, errflg) + + ! Input variables + integer, intent(in ) :: & + nCol, & ! Number of horizontal gridpoints + nLev ! Number of vertical levels + real(kind_phys), dimension(:), intent(in ) :: raincd_mm + real(kind_phys), dimension(:,:), intent(in ), optional :: qv + + ! In/out variables + real(kind_phys), dimension(:,:), intent(inout) :: temp, spechum, qc, qi, ugrs, vgrs, pres, presi, pomg + real(kind_phys), dimension(:,:), intent(inout), optional:: forcet, forceq, geoph, geophi + + ! Output variables + real(kind_phys), dimension(:), intent(out ) :: raincd + real(kind_phys), dimension(:,:), intent(out ), optional :: prevst, prevsq + + character(len=*), intent(out) :: & + errmsg ! CCPP error message + integer, intent(out) :: & + errflg ! CCPP error code + + ! Local variables + integer :: i, k, kk + real(kind_phys), dimension(nCol, nLev) :: pt, pqv, pqc, pqi, pu, pv, prsl, zl, omega, tendt, tendq + real(kind_phys), dimension(nCol,nLev+1):: prsli, zi + + ! Initialize CCPP error handling + errmsg = '' + errflg = 0 + + ! Convert water vapor mixing ratio back to specific humidity + spechum = qv/(1.0_kind_phys+qv) + + ! Variables with vertical layer being reversed back + do k=1,nLev + kk = nLev-k+1 + do i=1,nCol + pt(i,k) = temp(i,kk) + pqv(i,k) = spechum(i,kk) + pqc(i,k) = qc(i,kk) + pqi(i,k) = qi(i,kk) + pu(i,k) = ugrs(i,kk) + pv(i,k) = vgrs(i,kk) + prsl(i,k) = pres(i,kk) + prsli(i,k) = presi(i,kk+1) + zl(i,k) = geoph(i,kk) + zi(i,k) = geophi(i,kk+1) + omega(i,k) = pomg(i,kk) + tendt(i,k) = forcet(i,kk) + tendq(i,k) = forceq(i,kk) + enddo + enddo + prsli(:,nLev+1)=presi(:,1) + zi(:,nLev+1)=geophi(:,1) + + !output + temp = pt + spechum = pqv + qc = pqc + qi = pqi + ugrs = pu + vgrs = pv + pres = prsl + presi = prsli + geoph = zl + geophi = zi + pomg = omega + forcet = tendt + forceq = tendq + + ! To calculate tendencies in next iteration + prevst = temp + prevsq = spechum + + ! Convert unit of deep convection induced precipitation from mm to m + raincd = raincd_mm * 1e-3 + + end subroutine gfs_mmm_cu_ntiedtke_post_run + +end module gfs_mmm_cu_ntiedtke_post diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.meta b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.meta new file mode 100755 index 000000000..fd39126c8 --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_post.meta @@ -0,0 +1,187 @@ +[ccpp-table-properties] + name = gfs_mmm_cu_ntiedtke_post + type = scheme + dependencies = ../../hooks/machine.F + +######################################################################## +[ccpp-arg-table] + name = gfs_mmm_cu_ntiedtke_post_run + type = scheme +[nCol] + standard_name = horizontal_loop_extent + long_name = horizontal loop extent + units = count + dimensions = () + type = integer + intent = in +[nLev] + standard_name = vertical_layer_dimension + long_name = number of vertical levels + units = count + dimensions = () + type = integer + intent = in +[qv] + standard_name = water_vapor_mixing_ratio + long_name = water vapor mixing ratio + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real | kind = kind_phys + intent = in + optional = T +[temp] + standard_name = air_temperature_of_new_state + long_name = temperature updated by physics + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[spechum] + standard_name = specific_humidity_of_new_state + long_name = water vapor specific humidity updated by physics + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[prevst] + standard_name = air_temperature_on_previous_timestep + long_name = temperature from previous time step + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = True +[prevsq] + standard_name = specific_humidity_on_previous_timestep + long_name = moisture from previous time step + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = True +[qc] + standard_name = cloud_condensed_water_mixing_ratio_convective_transport_tracer + long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) in the convectively transported tracer array + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[qi] + standard_name = ice_water_mixing_ratio_convective_transport_tracer + long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) in the convectively transported tracer array + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[ugrs] + standard_name = x_wind_of_new_state + long_name = updated x-direction wind + units = m s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[vgrs] + standard_name = y_wind_of_new_state + long_name = updated y-direction wind + units = m s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[pres] + standard_name = air_pressure + long_name = mean layer pressure + units = Pa + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[presi] + standard_name = air_pressure_at_interface + long_name = air pressure at model layer interfaces + units = Pa + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + intent = inout +[geoph] + standard_name = geopotential_height + long_name = geopotential height at model layer centers + units = m + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + intent = inout + optional = T +[geophi] + standard_name = geopotential_height_at_interface + long_name = geopotential height at model layer interfaces + units = m + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + intent = inout + optional = T +[pomg] + standard_name = lagrangian_tendency_of_air_pressure + long_name = layer mean vertical velocity + units = Pa s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[forcet] + standard_name = tendency_of_air_temperature_due_to_nonphysics + long_name = temperature tendency due to dynamics only + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout + optional = True +[forceq] + standard_name = tendendy_of_specific_humidity_due_to_nonphysics + long_name = moisture tendency due to dynamics only + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout + optional = True +[raincd_mm] + standard_name = lwe_thickness_of_deep_convective_precipitation_amount_in_mm + long_name = deep convective rainfall amount on physics timestep in mm + units = mm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[raincd] + standard_name = lwe_thickness_of_deep_convective_precipitation_amount + long_name = deep convective rainfall amount on physics timestep + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=* + intent = out +[errflg] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 new file mode 100644 index 000000000..72c2c443f --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90 @@ -0,0 +1,196 @@ +! ########################################################################################### +! +! ########################################################################################### +module gfs_mmm_cu_ntiedtke_pre + use machine, only: kind_phys + + implicit none + + public gfs_mmm_cu_ntiedtke_pre_run + +contains +!> \section arg_table_gfs_mmm_cu_ntiedtke_pre_run +!! \htmlinclude gfs_mmm_cu_ntiedtke_pre_run.html +!! + ! ######################################################################################### + ! + ! ######################################################################################### + subroutine gfs_mmm_cu_ntiedtke_pre_run(nCol, nLev, temp, spechum, qv, temp_new, spechum_new,& + flag_init, flag_restart, kdt, fhour, dtp, prevst, prevsq, forcet, forceq, & + qc, qi, ugrs, vgrs, pres, presi, & + geop, geopi, geoph, geophi, con_1ovg,& + pomg, wet, dry, icy, ep1, con_rd, con_cp, ps, & + hfx_wat, hfx_lnd, hfx_ice, hfx, qfx_wat, qfx_lnd, qfx_ice, qfx, & + slimask, xland, errmsg, errflg) + + ! Input variables + logical, intent(in ) :: flag_init, flag_restart + + integer, intent(in ) :: & + nCol, & ! Number of horizontal gridpoints + nLev, & ! Number of vertical levels + kdt ! Index of time step for current iteration + + integer, dimension(:), intent(in ) :: slimask ! landmask: sea/land/ice=0/1/2 + + real(kind_phys), intent(in ) :: & + fhour, & ! Current forecast time (hour) + dtp, & ! Physics timestep (second) + con_1ovg,& ! 1/g + ep1, & ! (rv/rd) - 1 + con_rd, & ! rd + con_cp ! cp + + real(kind_phys), dimension(:), intent(in ) :: & + hfx_wat, & ! Kinematic surface upward sensible heat flux over water (K m s-1) + hfx_lnd, & ! Kinematic surface upward sensible heat flux over land (K m s-1) + hfx_ice, & ! Kinematic surface upward sensible heat flux over ice (K m s-1) + qfx_wat, & ! Kinematic surface upward latent heat flux over water (kg kg-1 m s-1) + qfx_lnd, & ! Kinematic surface upward latent heat flux over land (kg kg-1 m s-1) + qfx_ice, & ! Kinematic surface upward latent heat flux over ice (kg kg-1 m s-1) + ps ! Surface pressure (Pa) + + ! Variables to be vertically reversed + real(kind_phys), dimension(:,:), intent(in ) :: & + temp, & ! Air temperature (K) + spechum, & ! Specific humidity (kg/kg) + geop, & ! Geopotential (m2 s-2) + geopi ! Geopotential at model layer interface (m2 s-2) + real(kind_phys), dimension(:,:), intent(inout) :: & + temp_new, & ! Air temperature of new state (K) + spechum_new, & ! Specific humidity of new state (kg/kg) + qc, & ! Cloud liquid water mixing ratio of new state (kg/kg) + qi, & ! Cloud ice mixing ratio of new state (kg/kg) + ugrs, & ! x-wind of new state (m/s) + vgrs, & ! y-wind of new state (m/s) + pres, & ! Air pressure (Pa) + presi, & ! Air Pressure at model layer interface (Pa) + pomg ! Layer mean vertical velocity (Pa s-1) + + real(kind_phys), dimension(:,:), intent(in), optional :: prevst, prevsq ! t and q from previous time step + + logical, dimension(:), intent(in) :: & + wet, & ! Flag indicating presence of some ocean or lake surface area fraction + dry, & ! Flag indicating presence of some land surface area fraction + icy ! Flag indicating presence of some sea ice surface area fraction + + ! Output variables + real(kind_phys), dimension(:), intent(out ), optional:: & + hfx, & ! Surface kinematic upward sensible heat flux (W m-2) + qfx, & ! Surface kinematic upward latent heat flux (W m-2) + xland ! Sea/land/ice mask for MMM physics + real(kind_phys), dimension(:,:),intent(out ), optional:: & + qv, & ! Water vapor mixing ratio (kg/kg) + !pqc, & ! Cloud liquid water mixing ratio of new state transported by convection (kg/kg) + !pqi, & ! Cloud ice mixing ratio of new state transported by convection (kg/kg) + forcet, & ! Temperature tendency due to dynamics only (K s-1) + forceq, & ! Moisture tendency due to dynamics only (kg kg-1 s-1) + geoph, & ! Geopotential height (m) + geophi ! Geopoteitial height at model interface (m) + character(len=*), intent(out) :: & + errmsg ! CCPP error message + integer, intent(out) :: & + errflg ! CCPP error code + + ! Local variables + integer :: i, k, kk + real(kind_phys) :: tvcon, rho, dtdyn + real(kind_phys), dimension(nCol, nLev) :: prevsqv, pt, qv_new, pqv, pqc, pqi, pu, pv, prsl, zl, omega, tendt, tendq + real(kind_phys), dimension(nCol,nLev+1):: prsli, zi + + ! Initialize CCPP error handling + errmsg = '' + errflg = 0 + + !> convert specific humidity to water vapor mixing ratio + do k=1,nLev + do i=1,nCol + qv_new(i,k) = spechum_new(i,k)/ (1.0_kind_phys - spechum_new(i,k))! to be vertically reversed + qv(i,k) = spechum(i,k) / (1.0_kind_phys - spechum(i,k)) ! to calculate dynamics tendencies + prevsqv(i,k)= prevsq(i,k) / (1.0_kind_phys - prevsq(i,k)) ! to calculate dynamics tendencies + end do + end do + + ! Calculate tendencies due to nonphys (incl. dynamics+PBL for moisture and dynamics+PBL+radiation for temperature) + if(flag_init .and. .not.flag_restart) then + forcet=0.0 + forceq=0.0 + else + dtdyn=3600.0*(fhour)/kdt + if(dtp > dtdyn) then + forcet=(temp - prevst)/dtp + forceq=(qv - prevsqv)/dtp + else + forcet=(temp - prevst)/dtdyn + forceq=(qv - prevsqv)/dtdyn + endif + endif + + !> convert heat fluxes + do i = 1,nCol + tvcon = (1. + ep1 * spechum(i,1)) + rho = ps(i) / (con_rd * temp(i,1) * tvcon) + if (dry(i)) then + hfx(i) = rho * con_cp * hfx_lnd(i) + qfx(i) = rho * qfx_lnd(i) + end if + if (wet(i)) then + hfx(i) = rho * con_cp * hfx_wat(i) + qfx(i) = rho * qfx_wat(i) + end if + + if (icy(i)) then + hfx(i) = rho * con_cp * hfx_ice(i) + qfx(i) = rho * qfx_ice(i) + end if + end do + + ! Compute land/sea mask convention from (0-sea/1-land/2-ice) ---> (1-land/2-sea) + do i=1,nCol + if(slimask(i).eq.0)then + xland(i) = 2 + else + xland(i) = 1 + end if + enddo + + ! Reverse vertical layers for mass flux calculation + do k=1,nLev + kk=nLev-k+1 + do i=1,nCol + pt(i,k) = temp_new(i,kk) + pqv(i,k) = qv_new(i,kk) + pqc(i,k) = qc(i,kk) + pqi(i,k) = qi(i,kk) + pu(i,k) = ugrs(i,kk) + pv(i,k) = vgrs(i,kk) + prsl(i,k) = pres(i,kk) + prsli(i,k) = presi(i,kk+1) + zl(i,k) = geop(i,kk) * con_1ovg ! calculate geopotential height + zi(i,k) = geopi(i,kk+1) * con_1ovg! calculate geopotnetial height + omega(i,k) = pomg(i,kk) + tendt(i,k) = forcet(i,kk) + tendq(i,k) = forceq(i,kk) + enddo + enddo + prsli(:,nLev+1)=presi(:,1) + zi(:,nLev+1)=geopi(:,1) * con_1ovg + + ! Output + temp_new= pt + qv = pqv + qc = pqc + qi = pqi + ugrs = pu + vgrs = pv + pres = prsl + presi = prsli + geoph = zl + geophi = zi + pomg = omega + forcet = tendt + forceq = tendq + + end subroutine gfs_mmm_cu_ntiedtke_pre_run + +end module gfs_mmm_cu_ntiedtke_pre diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90.org b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90.org new file mode 100644 index 000000000..00d3993d3 --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.F90.org @@ -0,0 +1,117 @@ +! ########################################################################################### +! +! ########################################################################################### +module gfs_mmm_cu_ntiedtke_pre + use machine, only: kind_phys + + implicit none + + public gfs_mmm_cu_ntiedtke_pre_run + +contains +!> \section arg_table_gfs_mmm_cu_ntiedtke_pre_run +!! \htmlinclude gfs_mmm_cu_ntiedtke_pre_run.html +!! + ! ######################################################################################### + ! + ! ######################################################################################### + subroutine gfs_mmm_cu_ntiedtke_pre_run(nCol, nLev, spechum, qv, ntqv, index_of_process_non_physics, dtidx, ndtend, dtend, dqvdt_dyn, & + wet, dry, icy, ep1, con_rd, con_cp, temp, ps, & + hfx_wat, hfx_lnd, hfx_ice, hfx, qfx_wat, qfx_lnd, qfx_ice, qfx, & + slimask, xland, errmsg, errflg) + + ! Input variables + integer, intent(in) :: & + nCol, & ! Number of horizontal gridpoints + nLev, & ! Number of vertical levels + ntqv, & ! Tracer index for water vapor (specific humidity) + index_of_process_non_physics, & ! Index of non-physics transport process + ndtend ! Last dimension of array of diagnostic tendencies for state variables + integer, dimension(:), intent(in) :: slimask ! landmask: sea/land/ice=0/1/2 + integer, dimension(:,:), intent(in) :: dtidx ! Index of state-variable and process in last dimension of diagnostic tendencies array AKA cumulative_change_index + + real(kind_phys), intent(in) :: & + ep1, & ! (rv/rd) - 1 + con_rd, & ! rd + con_cp ! cp + + real(kind_phys), dimension(:), intent(in) :: & + hfx_wat, & ! Kinematic surface upward sensible heat flux over water (K m s-1) + hfx_lnd, & ! Kinematic surface upward sensible heat flux over land (K m s-1) + hfx_ice, & ! Kinematic surface upward sensible heat flux over ice (K m s-1) + qfx_wat, & ! Kinematic surface upward latent heat flux over water (kg kg-1 m s-1) + qfx_lnd, & ! Kinematic surface upward latent heat flux over land (kg kg-1 m s-1) + qfx_ice, & ! Kinematic surface upward latent heat flux over ice (kg kg-1 m s-1) + ps ! Surface pressure (Pa) + real(kind_phys), dimension(:,:), intent(in) :: & + temp, & ! Air temperature (K) + spechum ! Specific humidity (kg/kg) + + logical, dimension(:), intent(in) :: & + wet, & ! Flag indicating presence of some ocean or lake surface area fraction + dry, & ! Flag indicating presence of some land surface area fraction + icy ! Flag indicating presence of some sea ice surface area fraction + + ! Output variables + real(kind_phys), dimension(:), intent(out ), optional:: & + hfx, & ! Surface kinematic upward sensible heat flux (W m-2) + qfx, & ! Surface kinematic upward latent heat flux (W m-2) + xland ! Sea/land/ice mask for MMM physics + real(kind_phys), dimension(:,:), intent(out ), optional:: & + qv, & ! Water vapor mixing ratio (kg/kg) + dqvdt_dyn ! Tendency of water vapor mixing ratio + real(kind_phys), dimension(:,:,:), intent(inout), optional:: dtend ! diagnostic tendencies for state variables + character(len=*), intent(out) :: & + errmsg ! CCPP error message + integer, intent(out) :: & + errflg ! CCPP error code + + ! Local variables + integer :: i, k + real(kind_phys) :: tvcon, rho + real(kind_phys), dimension(nCol, nLev) :: dshdt_dyn + + ! Initialize CCPP error handling + errmsg = '' + errflg = 0 + + + !> convert specific humidity to water vapor mixing ratio + dshdt_dyn = dtend(:,:,dtidx(100+ntqv,index_of_process_non_physics)) + do k=1,nLev + do i=1,nCol + qv(i,k) = spechum(i,k)/(1.0_kind_phys-spechum(i,k)) + dqvdt_dyn(i,k) = dshdt_dyn(i,k)/(1.0_kind_phys-dshdt_dyn(i,k)) + end do + end do + !> convert heat fluxes + do i = 1,nCol + tvcon = (1. + ep1 * spechum(i,1)) + rho = ps(i) / (con_rd * temp(i,1) * tvcon) + if (dry(i)) then + hfx(i) = rho * con_cp * hfx_lnd(i) + qfx(i) = rho * qfx_lnd(i) + end if + if (wet(i)) then + hfx(i) = rho * con_cp * hfx_wat(i) + qfx(i) = rho * qfx_wat(i) + end if + + if (icy(i)) then + hfx(i) = rho * con_cp * hfx_ice(i) + qfx(i) = rho * qfx_ice(i) + end if + end do + + ! Compute land/sea mask convention from (0-sea/1-land/2-ice) ---> (1-land/2-sea) + do i=1,nCol + if(slimask(i).eq.0)then + xland(i) = 2 + else + xland(i) = 1 + end if + enddo + + end subroutine gfs_mmm_cu_ntiedtke_pre_run + +end module gfs_mmm_cu_ntiedtke_pre diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta new file mode 100755 index 000000000..ac118e9d0 --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta @@ -0,0 +1,383 @@ +[ccpp-table-properties] + name = gfs_mmm_cu_ntiedtke_pre + type = scheme + dependencies = ../../hooks/machine.F + +######################################################################## +[ccpp-arg-table] + name = gfs_mmm_cu_ntiedtke_pre_run + type = scheme +[nCol] + standard_name = horizontal_loop_extent + long_name = horizontal loop extent + units = count + dimensions = () + type = integer + intent = in +[nLev] + standard_name = vertical_layer_dimension + long_name = number of vertical levels + units = count + dimensions = () + type = integer + intent = in +[temp] + standard_name = air_temperature + long_name = model layer mean temperature + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[spechum] + standard_name = specific_humidity + long_name = water vapor specific humidity + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[temp_new] + standard_name = air_temperature_of_new_state + long_name = temperature updated by physics + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[spechum_new] + standard_name = specific_humidity_of_new_state + long_name = water vapor specific humidity updated by physics + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[qv] + standard_name = water_vapor_mixing_ratio + long_name = water vapor mixing ratio + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = T +[flag_init] + standard_name = flag_for_first_timestep + long_name = flag signaling first time step for time integration loop + units = flag + dimensions = () + type = logical + intent = in +[flag_restart] + standard_name = flag_for_restart + long_name = flag for restart (warmstart) or coldstart + units = flag + dimensions = () + type = logical + intent = in +[kdt] + standard_name = index_of_timestep + long_name = current forecast iteration + units = index + dimensions = () + type = integer + intent = in +[fhour] + standard_name = forecast_time + long_name = curent forecast time + units = h + dimensions = () + type = real + kind = kind_phys + intent = in +[dtp] + standard_name = timestep_for_physics + long_name = physics timestep + units = s + dimensions = () + type = real + kind = kind_phys + intent = in +[prevst] + standard_name = air_temperature_on_previous_timestep + long_name = temperature from previous time step + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in + optional = True +[prevsq] + standard_name = specific_humidity_on_previous_timestep + long_name = moisture from previous time step + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in + optional = True +[forcet] + standard_name = tendency_of_air_temperature_due_to_nonphysics + long_name = temperature tendency due to dynamics only + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = True +[forceq] + standard_name = tendendy_of_specific_humidity_due_to_nonphysics + long_name = moisture tendency due to dynamics only + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = True +[qc] + standard_name = cloud_condensed_water_mixing_ratio_convective_transport_tracer + long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) in the convectively transported tracer array + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[qi] + standard_name = ice_water_mixing_ratio_convective_transport_tracer + long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) in the convectively transported tracer array + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[ugrs] + standard_name = x_wind_of_new_state + long_name = updated x-direction wind + units = m s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[vgrs] + standard_name = y_wind_of_new_state + long_name = updated y-direction wind + units = m s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[pres] + standard_name = air_pressure + long_name = mean layer pressure + units = Pa + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[presi] + standard_name = air_pressure_at_interface + long_name = air pressure at model layer interfaces + units = Pa + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + intent = inout +[geop] + standard_name = geopotential + long_name = geopotential at model layer centers + units = m2 s-2 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + intent = in +[geopi] + standard_name = geopotential_at_interface + long_name = geopotential at model layer interfaces + units = m2 s-2 + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[con_1ovg] + standard_name = one_divided_by_the_gravitational_acceleration + long_name = inverse of gravitational acceleration + units = s2 m-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[geoph] + standard_name = geopotential_height + long_name = geopotential height at model layer centers + units = m + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + intent = out + optional = T +[geophi] + standard_name = geopotential_height_at_interface + long_name = geopotential height at model layer interfaces + units = m + dimensions = (horizontal_loop_extent,vertical_interface_dimension) + type = real + kind = kind_phys + intent = out + optional = T +[pomg] + standard_name = lagrangian_tendency_of_air_pressure + long_name = layer mean vertical velocity + units = Pa s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout +[wet] + standard_name = flag_nonzero_wet_surface_fraction + long_name = flag indicating presence of some ocean or lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[dry] + standard_name = flag_nonzero_land_surface_fraction + long_name = flag indicating presence of some land surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[icy] + standard_name = flag_nonzero_sea_ice_surface_fraction + long_name = flag indicating presence of some sea ice surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[ep1] + standard_name = ratio_of_vapor_to_dry_air_gas_constants_minus_one + long_name = rv/rd - 1 (rv = ideal gas constant for water vapor) + units = none + dimensions = () + type = real + kind = kind_phys + intent = in +[con_rd] + standard_name = gas_constant_of_dry_air + long_name = ideal gas constant for dry air + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[con_cp] + standard_name = specific_heat_of_dry_air_at_constant_pressure + long_name = specific heat of dry air at constant pressure + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[ps] + standard_name = surface_air_pressure + long_name = surface pressure + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_lnd] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_land + long_name = kinematic surface upward sensible heat flux over land + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_ice] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_ice + long_name = kinematic surface upward sensible heat flux over ice + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx] + standard_name = kinematic_surface_upward_sensible_heat_flux + long_name = kinematic surface upward sensible heat flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[qfx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx_lnd] + standard_name = kinematic_surface_upward_latent_heat_flux_over_land + long_name = kinematic surface upward latent heat flux over land + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx_ice] + standard_name = kinematic_surface_upward_latent_heat_flux_over_ice + long_name = kinematic surface upward latent heat flux over ice + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx] + standard_name = kinematic_surface_upward_latent_heat_flux + long_name = kinematic surface upward latent heat flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[slimask] + standard_name = sea_land_ice_mask + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = integer + intent = in +[xland] + standard_name = sea_land_ice_mask_mmm + long_name = sea/land/ice mask mmm + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=* + intent = out +[errflg] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out diff --git a/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta.org b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta.org new file mode 100755 index 000000000..5b6adb82b --- /dev/null +++ b/physics/CONV/nTiedtke/gfs_mmm_cu_ntiedtke_pre.meta.org @@ -0,0 +1,251 @@ +[ccpp-table-properties] + name = gfs_mmm_cu_ntiedtke_pre + type = scheme + dependencies = ../../hooks/machine.F + +######################################################################## +[ccpp-arg-table] + name = gfs_mmm_cu_ntiedtke_pre_run + type = scheme +[nCol] + standard_name = horizontal_loop_extent + long_name = horizontal loop extent + units = count + dimensions = () + type = integer + intent = in +[nLev] + standard_name = vertical_layer_dimension + long_name = number of vertical levels + units = count + dimensions = () + type = integer + intent = in +[spechum] + standard_name = specific_humidity + long_name = water vapor specific humidity + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[qv] + standard_name = water_vapor_mixing_ratio + long_name = water vapor mixing ratio + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = T +#[nprocess] +# standard_name = number_of_cumulative_change_processes +# long_name = number of processes that cause changes in state variables +# units = count +# dimensions = () +# type = integer +# intent = in +[ntqv] + standard_name = index_of_specific_humidity_in_tracer_concentration_array + long_name = tracer index for water vapor (specific humidity) + units = index + dimensions = () + type = integer + intent = in +[index_of_process_non_physics] + standard_name = index_of_non_physics_process_in_cumulative_change_index + long_name = index of non-physics transport process in second dimension of array cumulative change index + units = index + dimensions = () + type = integer + intent = in +[dtidx] + standard_name = cumulative_change_of_state_variables_outer_index + long_name = index of state-variable and process in last dimension of diagnostic tendencies array AKA cumulative_change_index + units = index + dimensions = (number_of_tracers_plus_one_hundred,number_of_cumulative_change_processes) + type = integer + intent = in +[ndtend] + standard_name = cumulative_change_of_state_variables_outer_index_max + long_name = last dimension of array of diagnostic tendencies for state variables + units = count + dimensions = () + type = integer + intent = in +[dtend] + standard_name = cumulative_change_of_state_variables + long_name = diagnostic tendencies for state variables + units = mixed + dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) + type = real + kind = kind_phys + intent = inout + optional = T +[dqvdt_dyn] + standard_name = tendendy_of_water_vapor_mixing_ratio_due_to_nonphysics + long_name = moisture tendency due to dynamics only + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + optional = T +[wet] + standard_name = flag_nonzero_wet_surface_fraction + long_name = flag indicating presence of some ocean or lake surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[dry] + standard_name = flag_nonzero_land_surface_fraction + long_name = flag indicating presence of some land surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[icy] + standard_name = flag_nonzero_sea_ice_surface_fraction + long_name = flag indicating presence of some sea ice surface area fraction + units = flag + dimensions = (horizontal_loop_extent) + type = logical + intent = in +[ep1] + standard_name = ratio_of_vapor_to_dry_air_gas_constants_minus_one + long_name = rv/rd - 1 (rv = ideal gas constant for water vapor) + units = none + dimensions = () + type = real + kind = kind_phys + intent = in +[con_rd] + standard_name = gas_constant_of_dry_air + long_name = ideal gas constant for dry air + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[con_cp] + standard_name = specific_heat_of_dry_air_at_constant_pressure + long_name = specific heat of dry air at constant pressure + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[temp] + standard_name = air_temperature + long_name = layer mean air temperature + units = K + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[ps] + standard_name = surface_air_pressure + long_name = surface pressure + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_lnd] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_land + long_name = kinematic surface upward sensible heat flux over land + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx_ice] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_ice + long_name = kinematic surface upward sensible heat flux over ice + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[hfx] + standard_name = kinematic_surface_upward_sensible_heat_flux + long_name = kinematic surface upward sensible heat flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[qfx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx_lnd] + standard_name = kinematic_surface_upward_latent_heat_flux_over_land + long_name = kinematic surface upward latent heat flux over land + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx_ice] + standard_name = kinematic_surface_upward_latent_heat_flux_over_ice + long_name = kinematic surface upward latent heat flux over ice + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[qfx] + standard_name = kinematic_surface_upward_latent_heat_flux + long_name = kinematic surface upward latent heat flux + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[slimask] + standard_name = sea_land_ice_mask + long_name = landmask: sea/land/ice=0/1/2 + units = flag + dimensions = (horizontal_loop_extent) + type = integer + intent = in +[xland] + standard_name = sea_land_ice_mask_mmm + long_name = sea/land/ice mask mmm + units = flag + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out + optional = T +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=* + intent = out +[errflg] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out diff --git a/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_post.F b/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_post.F new file mode 100644 index 000000000..e08c87d9f --- /dev/null +++ b/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_post.F @@ -0,0 +1,120 @@ +!================================================================================================================= + module cu_ntiedtke_post + use ccpp_kind_types,only: kind_phys + + implicit none + private + public:: cu_ntiedtke_post_init, & + cu_ntiedtke_post_finalize, & + cu_ntiedtke_post_run + + + contains + + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_post_init +!!\html\include cu_ntiedtke_post_init.html +!! + subroutine cu_ntiedtke_post_init(errmsg,errflg) +!================================================================================================================= + +!--- output arguments: + character(len=*),intent(out):: & + errmsg ! output error message (-). + + integer,intent(out):: & + errflg ! output error flag (-). + +!----------------------------------------------------------------------------------------------------------------- + +!--- output error flag and message: + errflg = 0 + errmsg = " " + + end subroutine cu_ntiedtke_post_init + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_post_finalize +!!\html\include cu_ntiedtke_post_finalize.html +!! + subroutine cu_ntiedtke_post_finalize(errmsg,errflg) +!================================================================================================================= + +!--- output arguments: + character(len=*),intent(out):: & + errmsg ! output error message (-). + + integer,intent(out):: & + errflg ! output error flag (-). + +!----------------------------------------------------------------------------------------------------------------- + +!--- output error flag and message: + errflg = 0 + errmsg = " " + + end subroutine cu_ntiedtke_post_finalize + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_post_run +!!\html\include cu_ntiedtke_post_run.html +!! + subroutine cu_ntiedtke_post_run(its,ite,kts,kte,stepcu,dt,exner,qv,qc,qi,t,u,v,qvf,qcf,qif,tf,uf,vf,rn,raincv, & + pratec,rthcuten,rqvcuten,rqccuten,rqicuten,rucuten,rvcuten,errmsg,errflg) +!================================================================================================================= + +!--- input arguments: + integer,intent(in):: its,ite,kts,kte + integer,intent(in):: stepcu + + real(kind=kind_phys),intent(in):: dt + real(kind=kind_phys),intent(in),dimension(its:ite):: rn + real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: exner,qv,qc,qi,t,u,v,qvf,qcf,qif,tf,uf,vf + +!--- inout arguments: + real(kind=kind_phys),intent(inout),dimension(its:ite):: raincv,pratec + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: rqvcuten,rqccuten,rqicuten + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: rthcuten,rucuten,rvcuten + +!--- output arguments: + character(len=*),intent(out):: errmsg + integer,intent(out):: errflg + +!--- local variables and arrays: + integer:: i,k,pp,zz + + real(kind=kind_phys):: delt,rdelt + +!----------------------------------------------------------------------------------------------------------------- + + delt = dt*stepcu + rdelt = 1./delt + + do i = its,ite + raincv(i) = rn(i)/stepcu + pratec(i) = rn(i)/(stepcu*dt) + enddo + + pp = 0 + do k = kts,kte + zz = kte - pp + do i = its,ite + rthcuten(i,k) = (tf(i,zz)-t(i,k))/exner(i,k)*rdelt + rqvcuten(i,k) = (qvf(i,zz)-qv(i,k))*rdelt + rqccuten(i,k) = (qcf(i,zz)-qc(i,k))*rdelt + rqicuten(i,k) = (qif(i,zz)-qi(i,k))*rdelt + rucuten(i,k) = (uf(i,zz)-u(i,k))*rdelt + rvcuten(i,k) = (vf(i,zz)-v(i,k))*rdelt + enddo + pp = pp + 1 + enddo + + errmsg = 'cu_ntiedtke_post_run OK' + errflg = 0 + + end subroutine cu_ntiedtke_post_run + +!================================================================================================================= + end module cu_ntiedtke_post +!================================================================================================================= diff --git a/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_pre.F b/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_pre.F new file mode 100644 index 000000000..84d2d89a5 --- /dev/null +++ b/physics/CONV/nTiedtke/laura_prepost/cu_ntiedtke_pre.F @@ -0,0 +1,187 @@ +!================================================================================================================= + module cu_ntiedtke_pre + use ccpp_kind_types,only: kind_phys + + implicit none + private + public:: cu_ntiedtke_pre_init, & + cu_ntiedtke_pre_finalize, & + cu_ntiedtke_pre_run + + + contains + + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_pre_init +!!\html\include cu_ntiedtke_pre_init.html +!! + subroutine cu_ntiedtke_pre_init(errmsg,errflg) +!================================================================================================================= + +!--- output arguments: + character(len=*),intent(out):: & + errmsg ! output error message (-). + + integer,intent(out):: & + errflg ! output error flag (-). + +!----------------------------------------------------------------------------------------------------------------- + +!--- output error flag and message: + errflg = 0 + errmsg = " " + + end subroutine cu_ntiedtke_pre_init + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_pre_finalize +!!\html\include cu_ntiedtke_pre_finalize.html +!! + subroutine cu_ntiedtke_pre_finalize(errmsg,errflg) +!================================================================================================================= + +!--- output arguments: + character(len=*),intent(out):: & + errmsg ! output error message (-). + + integer,intent(out):: & + errflg ! output error flag (-). + +!----------------------------------------------------------------------------------------------------------------- + +!--- output error flag and message: + errflg = 0 + errmsg = " " + + end subroutine cu_ntiedtke_pre_finalize + +!================================================================================================================= +!>\section arg_table_cu_ntiedtke_pre_run +!!\html\include cu_ntiedtke_pre_run.html +!! + subroutine cu_ntiedtke_pre_run(its,ite,kts,kte,im,kx,kx1,itimestep,stepcu,dt,grav,xland,dz,pres,presi, & + t,rho,qv,qc,qi,u,v,w,qvften,thften,qvftenz,thftenz,slimsk,delt,prsl,ghtl, & + tf,qvf,qcf,qif,uf,vf,prsi,ghti,omg,errmsg,errflg) +!================================================================================================================= + +!--- input arguments: + integer,intent(in):: its,ite,kts,kte + integer,intent(in):: itimestep + integer,intent(in):: stepcu + + real(kind=kind_phys),intent(in):: dt,grav + real(kind=kind_phys),intent(in),dimension(its:ite):: xland + real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte):: dz,pres,t,rho,qv,qc,qi,u,v + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: qvften,thften + real(kind=kind_phys),intent(in),dimension(its:ite,kts:kte+1):: presi,w + +!--- inout arguments: + integer,intent(inout):: im,kx,kx1 + integer,intent(inout),dimension(its:ite):: slimsk + + real(kind=kind_phys),intent(inout):: delt + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: tf,qvf,qcf,qif,uf,vf + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: ghtl,omg,prsl + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte):: qvftenz,thftenz + real(kind=kind_phys),intent(inout),dimension(its:ite,kts:kte+1):: ghti,prsi + +!--- output arguments: + character(len=*),intent(out):: errmsg + integer,intent(out):: errflg + +!--- local variables and arrays: + integer:: i,k,pp,zz + + real(kind=kind_phys),dimension(its:ite,kts:kte):: zl,dot + real(kind=kind_phys),dimension(its:ite,kts:kte+1):: zi + +!----------------------------------------------------------------------------------------------------------------- + + im = ite-its+1 + kx = kte-kts+1 + kx1 = kx+1 + + delt = dt*stepcu + + do i = its,ite + slimsk(i) = (abs(xland(i)-2.)) + enddo + + k = kts + do i = its,ite + zi(i,k) = 0. + enddo + do k = kts,kte + do i = its,ite + zi(i,k+1) = zi(i,k)+dz(i,k) + enddo + enddo + do k = kts,kte + do i = its,ite + zl(i,k) = 0.5*(zi(i,k)+zi(i,k+1)) + dot(i,k) = -0.5*grav*rho(i,k)*(w(i,k)+w(i,k+1)) + enddo + enddo + + pp = 0 + do k = kts,kte+1 + zz = kte + 1 - pp + do i = its,ite + ghti(i,zz) = zi(i,k) + prsi(i,zz) = presi(i,k) + enddo + pp = pp + 1 + enddo + pp = 0 + do k = kts,kte + zz = kte-pp + do i = its,ite + ghtl(i,zz) = zl(i,k) + omg(i,zz) = dot(i,k) + prsl(i,zz) = pres(i,k) + enddo + pp = pp + 1 + enddo + + pp = 0 + do k = kts,kte + zz = kte-pp + do i = its,ite + tf(i,zz) = t(i,k) + qvf(i,zz) = qv(i,k) + qcf(i,zz) = qc(i,k) + qif(i,zz) = qi(i,k) + uf(i,zz) = u(i,k) + vf(i,zz) = v(i,k) + enddo + pp = pp + 1 + enddo + + if(itimestep == 1) then + do k = kts,kte + do i = its,ite + qvftenz(i,k) = 0. + thftenz(i,k) = 0. + enddo + enddo + else + pp = 0 + do k = kts,kte + zz = kte-pp + do i = its,ite + qvftenz(i,zz) = qvften(i,k) + thftenz(i,zz) = thften(i,k) + enddo + pp = pp + 1 + enddo + endif + + errmsg = 'cu_ntiedtke_pre_run OK' + errflg = 0 + + end subroutine cu_ntiedtke_pre_run + +!================================================================================================================= + end module cu_ntiedtke_pre +!================================================================================================================= diff --git a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 b/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 deleted file mode 100644 index 69a6d98af..000000000 --- a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.F90 +++ /dev/null @@ -1,47 +0,0 @@ -!>\file wsm6.F90 -!! This file runs the nTiedtke scheme - - -!>\defgroup TODO: ADD THIS LINE -!! This module runs the nTiedtke scheme -module mmm_cu_ntiedtke_post - - use ccpp_kinds, only : kind_phys - - use mmm_cu_ntiedtke, only : mmm_cu_ntiedtke_finalize - - implicit none - - public :: mmm_cu_ntiedtke_post_finalize - - private - - logical :: is_initialized = .False. - - contains - -!> \section arg_table_mmm_cu_ntiedtke_finalize Argument Table -!! \htmlinclude mmm_cu_ntiedtke_finalize.html -!! - subroutine mmm_cu_ntiedtke_post_finalize(errmsg, errflg) - - implicit none - - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - - - - if (.not. is_initialized) return - - call mmm_cu_ntiedtke_finalize(errmsg, errflg) - - is_initialized = .false. - - end subroutine mmm_cu_ntiedtke_post_finalize - -end module mmm_cu_ntiedtke_post diff --git a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.meta b/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.meta deleted file mode 100644 index e7c87625b..000000000 --- a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_post.meta +++ /dev/null @@ -1,24 +0,0 @@ -[ccpp-table-properties] - name = mmm_cu_ntiedtke_post - type = scheme - dependencies = ../../hooks/mmm_kinds.F90,../../mmm_physics/mmm_cu_ntiedtke.F90 - -######################################################################## -[ccpp-arg-table] - name = mmm_cu_ntietdke_post - type = scheme -[errmsg] - standard_name = ccpp_error_message - long_name = error message for error handling in CCPP - units = none - dimensions = () - type = character - kind = len=* - intent = out -[errflg] - standard_name = ccpp_error_code - long_name = error code for error handling in CCPP - units = 1 - dimensions = () - type = integer - intent = out diff --git a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 b/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 deleted file mode 100644 index ae139ee86..000000000 --- a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.F90 +++ /dev/null @@ -1,59 +0,0 @@ -!>\file wsm6.F90 -!! This file runs the CU nTiedtke Scheme - - - -!>\defgroup -!! This module runs the nTiedtke Scheme -module mmm_cu_ntiedtke_pre - - use ccpp_kinds, only : kind_phys - use mmm_cu_ntiedtke, only : mmm_cu_ntiedtke_init - - implicit none - - public :: mmm_cu_ntiedtke_pre_init - - private - - logical :: is_initialized = .False. - - contains - -!> This subroutine is a wrapper around the actual cu_ntiedtke_init(). -!! \section arg_table_mmm_cu_ntiedtke_init Argument Table -!! \htmlinclude mmm_cu_ntiedtke_init.html -!! - subroutine mmm_cu_ntiedtke_pre_init(con_cp, con_rd, con_rv, con_hvap, & - con_xls, con_hfus, con_g, errmsg, errflg) - - implicit none - !input arguments: - real(kind=kind_phys), intent(in) :: con_cp !< specific heat of dry air at constant pressure - real(kind=kind_phys), intent(in) :: con_rd !< gas constant dry air - real(kind=kind_phys), intent(in) :: con_rv !< gas constant water vapor - real(kind=kind_phys), intent(in) :: con_hvap !< latent heat of vaporization of water - real(kind=kind_phys), intent(in) :: con_xls !< latent heat of sublimation of water - real(kind=kind_phys), intent(in) :: con_hfus !< latent heat of fusion of water - real(kind=kind_phys), intent(in) :: con_g !< gravitational acceleration - - !--- output arguments: - character(len=*), intent(out) :: errmsg - integer, intent(out) :: errflg - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - - if (is_initialized) return - - ! Call ntiedtke init - call mmm_cu_ntiedtke_init(con_cp, con_rd, con_rv, con_hvap, & - con_xls, con_hfus, con_g, errmsg, errflg) - - if (errflg /= 0) return - - is_initialized = .true. - - end subroutine mmm_cu_ntiedtke_pre_init -end module mmm_cu_ntiedtke_pre diff --git a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta b/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta deleted file mode 100644 index 547f0981f..000000000 --- a/physics/CONV/nTiedtke/mmm_cu_ntiedtke_pre.meta +++ /dev/null @@ -1,76 +0,0 @@ -[ccpp-table-properties] - name = mmm_cu_ntiedtke_pre - type = scheme - dependencies = ../../hooks/mmm_kinds.F90,../../mmm_physics/mmm_cu_ntiedtke.F90 - -######################################################################## -[ccpp-arg-table] - name = mmm_cu_ntiedtke_pre_run - type = scheme -[con_cp] - standard_name = specific_heat_of_dry_air_at_constant_pressure - long_name = specific heat of dry air at constant pressure - units = J kg-1 K-1 - dimensions = () - type = real - kind = kind_phys - intent = in -[con_rd] - standard_name = gas_constant_dry_air - long_name = gas constant dry air - units = J kg-1 K-1 - dimensions = () - type = real | kind = kind_phys - intent = in -[con_rv] - standard_name = gas_constant_water_vapor - long_name = gas constant water vapor - units = J kg-1 K-1 - dimensions = () - type = real | kind = kind_phys - intent = in -[con_hvap] - standard_name = latent_heat_of_vaporization_of_water_at_0C - long_name = latent heat of vaporization of water at 0c - units = J kg-1 - dimensions = () - type = real | kind = kind_phys - intent = in -[con_xls] - standard_name = latent_heat_of_sublimation_of_water_at_0C - long_name = latent heat of sublimation of water at 0C - units = J kg-1 - dimensions = () - type = real | kind = kind_phys - intent = in -[con_hfus] - standard_name = latent_heat_of_fusion_of_water_at_0C - long_name = latent heat of fusion of water at 0C - units = J kg-1 - dimensions = () - type = real | kind = kind_phys - intent = in -[con_g] - standard_name = gravitational_acceleration - long_name = gravitational acceleration - units = m s-2 - dimensions = () - type = real | kind = kind_phys - intent = in -[errmsg] - standard_name = ccpp_error_message - long_name = error message for error handling in CCPP - units = none - dimensions = () - type = character - kind = len=* - intent = out -[errflg] - standard_name = ccpp_error_code - long_name = error code for error handling in CCPP - units = 1 - dimensions = () - type = integer - intent = out - -######################################################################## diff --git a/physics/CONV/nTiedtke/cu_ntiedtke.F90 b/physics/CONV/nTiedtke/ufs_cu_ntiedtke.F90 similarity index 99% rename from physics/CONV/nTiedtke/cu_ntiedtke.F90 rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke.F90 index ada38c6f5..6c7092f0c 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke.F90 +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke.F90 @@ -1,4 +1,4 @@ -!> \file cu_ntiedtke.F90 +!> \file ufs_cu_ntiedtke.F90 !! This file contains the CCPP-compliant new Tiedtke scheme which parameterize !! Shallow, deep, and mid-level convections in the model !! Please refer to Tiedtke (1989), Bechtold et al. (2004,2008, 2014), @@ -6,7 +6,7 @@ !! !########################################################### -module cu_ntiedtke +module ufs_cu_ntiedtke !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ use machine , only : kind_phys @@ -103,10 +103,10 @@ module cu_ntiedtke contains !> \brief Brief description of the subroutine !! -!! \section arg_table_cu_ntiedtke_init Argument Table -!! \htmlinclude cu_ntiedtke_init.html +!! \section arg_table_ufs_cu_ntiedtke_init Argument Table +!! \htmlinclude ufs_cu_ntiedtke_init.html !! - subroutine cu_ntiedtke_init(imfshalcnv, imfshalcnv_ntiedtke, imfdeepcnv, & + subroutine ufs_cu_ntiedtke_init(imfshalcnv, imfshalcnv_ntiedtke, imfdeepcnv, & imfdeepcnv_ntiedtke,mpirank, mpiroot, errmsg, errflg) implicit none @@ -145,19 +145,19 @@ subroutine cu_ntiedtke_init(imfshalcnv, imfshalcnv_ntiedtke, imfdeepcnv, & return end if - end subroutine cu_ntiedtke_init + end subroutine ufs_cu_ntiedtke_init ! Tiedtke cumulus scheme from WRF with small modifications ! This scheme includes both deep and shallow convections !=================== ! -!> \section arg_table_cu_ntiedtke_run Argument Table -!! \htmlinclude cu_ntiedtke_run.html +!> \section arg_table_ufs_cu_ntiedtke_run Argument Table +!! \htmlinclude ufs_cu_ntiedtke_run.html !! !----------------------------------------------------------------------- ! level 1 subroutine 'tiecnvn' !----------------------------------------------------------------- - subroutine cu_ntiedtke_run(pu,pv,pt,pqv,tdi,qvdi,pqvf,ptf,clw,poz,pzz,prsl,prsi,pomg, & + subroutine ufs_cu_ntiedtke_run(pu,pv,pt,pqv,tdi,qvdi,pqvf,ptf,clw,poz,pzz,prsl,prsi,pomg, & evap,hfx,zprecc,lmask,lq,km,dt,dx,kbot,ktop,kcnv, & ktrac,ud_mf,dd_mf,dt_mf,cnvw,cnvc,errmsg,errflg) !----------------------------------------------------------------- @@ -384,7 +384,7 @@ subroutine cu_ntiedtke_run(pu,pv,pt,pqv,tdi,qvdi,pqvf,ptf,clw,poz,pzz,prsl,prsi, deallocate(ptenc) ! return - end subroutine cu_ntiedtke_run + end subroutine ufs_cu_ntiedtke_run !############################################################# ! @@ -3830,5 +3830,5 @@ real(kind=kind_phys) function foedelta(tt) foedelta = max(0.,sign(1.,tt-tmelt)) end function foedelta -end module cu_ntiedtke +end module ufs_cu_ntiedtke diff --git a/physics/CONV/nTiedtke/cu_ntiedtke.meta b/physics/CONV/nTiedtke/ufs_cu_ntiedtke.meta similarity index 99% rename from physics/CONV/nTiedtke/cu_ntiedtke.meta rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke.meta index 3e1755a5a..4ad07e424 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke.meta +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke.meta @@ -1,11 +1,11 @@ [ccpp-table-properties] - name = cu_ntiedtke + name = ufs_cu_ntiedtke type = scheme dependencies = ../../hooks/machine.F,../../hooks/physcons.F90 ######################################################################## [ccpp-arg-table] - name = cu_ntiedtke_init + name = ufs_cu_ntiedtke_init type = scheme [imfshalcnv] standard_name = control_for_shallow_convection_scheme @@ -67,7 +67,7 @@ ######################################################################## [ccpp-arg-table] - name = cu_ntiedtke_run + name = ufs_cu_ntiedtke_run type = scheme [pu] standard_name = x_wind_of_new_state diff --git a/physics/CONV/nTiedtke/cu_ntiedtke_post.F90 b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.F90 similarity index 64% rename from physics/CONV/nTiedtke/cu_ntiedtke_post.F90 rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.F90 index 583dfd57d..e576b779f 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke_post.F90 +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.F90 @@ -1,20 +1,20 @@ -!> \file cu_ntiedtke_post.F90 +!> \file ufs_cu_ntiedtke_post.F90 !! Contains code related to New Tiedtke convective scheme -module cu_ntiedtke_post +module ufs_cu_ntiedtke_post implicit none private - public :: cu_ntiedtke_post_run + public :: ufs_cu_ntiedtke_post_run contains -!> \section arg_table_cu_ntiedtke_post_run Argument Table -!! \htmlinclude cu_ntiedtke_post_run.html +!> \section arg_table_ufs_cu_ntiedtke_post_run Argument Table +!! \htmlinclude ufs_cu_ntiedtke_post_run.html !! - subroutine cu_ntiedtke_post_run (t, q, prevst, prevsq, errmsg, errflg) + subroutine ufs_cu_ntiedtke_post_run (t, q, prevst, prevsq, errmsg, errflg) use machine, only: kind_phys @@ -35,6 +35,6 @@ subroutine cu_ntiedtke_post_run (t, q, prevst, prevsq, errmsg, errflg) prevst(:,:) = t(:,:) prevsq(:,:) = q(:,:) - end subroutine cu_ntiedtke_post_run + end subroutine ufs_cu_ntiedtke_post_run -end module cu_ntiedtke_post +end module ufs_cu_ntiedtke_post diff --git a/physics/CONV/nTiedtke/cu_ntiedtke_post.meta b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.meta similarity index 95% rename from physics/CONV/nTiedtke/cu_ntiedtke_post.meta rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.meta index db51223d3..8b737986f 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke_post.meta +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_post.meta @@ -1,11 +1,11 @@ [ccpp-table-properties] - name = cu_ntiedtke_post + name = ufs_cu_ntiedtke_post type = scheme dependencies = ../../hooks/machine.F ######################################################################## [ccpp-arg-table] - name = cu_ntiedtke_post_run + name = ufs_cu_ntiedtke_post_run type = scheme [t] standard_name = air_temperature_of_new_state diff --git a/physics/CONV/nTiedtke/cu_ntiedtke_pre.F90 b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.F90 similarity index 80% rename from physics/CONV/nTiedtke/cu_ntiedtke_pre.F90 rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.F90 index 81a55176d..506bfa601 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke_pre.F90 +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.F90 @@ -1,20 +1,20 @@ -!> \file cu_ntiedtke_pre.F90 +!> \file ufs_cu_ntiedtke_pre.F90 !! Contains code related to New Tiedtke convective scheme -module cu_ntiedtke_pre +module ufs_cu_ntiedtke_pre implicit none private - public :: cu_ntiedtke_pre_run + public :: ufs_cu_ntiedtke_pre_run contains -!> \section arg_table_cu_ntiedtke_pre_run Argument Table -!! \htmlinclude cu_ntiedtke_pre_run.html +!> \section arg_table_ufs_cu_ntiedtke_pre_run Argument Table +!! \htmlinclude ufs_cu_ntiedtke_pre_run.html !! - subroutine cu_ntiedtke_pre_run (flag_init, flag_restart, kdt, fhour, dtp, t, q, prevst, prevsq, & + subroutine ufs_cu_ntiedtke_pre_run (flag_init, flag_restart, kdt, fhour, dtp, t, q, prevst, prevsq, & forcet, forceq, errmsg, errflg) use machine, only: kind_phys @@ -59,6 +59,6 @@ subroutine cu_ntiedtke_pre_run (flag_init, flag_restart, kdt, fhour, dtp, t, q, endif endif - end subroutine cu_ntiedtke_pre_run + end subroutine ufs_cu_ntiedtke_pre_run -end module cu_ntiedtke_pre +end module ufs_cu_ntiedtke_pre diff --git a/physics/CONV/nTiedtke/cu_ntiedtke_pre.meta b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.meta similarity index 97% rename from physics/CONV/nTiedtke/cu_ntiedtke_pre.meta rename to physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.meta index 1938ee711..161a7057b 100644 --- a/physics/CONV/nTiedtke/cu_ntiedtke_pre.meta +++ b/physics/CONV/nTiedtke/ufs_cu_ntiedtke_pre.meta @@ -1,11 +1,11 @@ [ccpp-table-properties] - name = cu_ntiedtke_pre + name = ufs_cu_ntiedtke_pre type = scheme dependencies = ../../hooks/machine.F ######################################################################## [ccpp-arg-table] - name = cu_ntiedtke_pre_run + name = ufs_cu_ntiedtke_pre_run type = scheme [flag_init] standard_name = flag_for_first_timestep diff --git a/physics/mmm_physics b/physics/mmm_physics index a8644a41d..a61ebffad 160000 --- a/physics/mmm_physics +++ b/physics/mmm_physics @@ -1 +1 @@ -Subproject commit a8644a41dece32e97f8b5e0e8801f8edc3b60a89 +Subproject commit a61ebffad7f3bab96e8b16897da1b268eb095a1a