From 3df4a4ea8c4be534f000f71e0db3e61925c58819 Mon Sep 17 00:00:00 2001 From: Peter Bogenschutz Date: Mon, 5 Feb 2024 16:48:13 -0800 Subject: [PATCH 1/4] change the compset that scam generic uses --- components/eam/bld/namelist_files/use_cases/scam_generic.xml | 1 - components/eam/cime_config/config_component.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/components/eam/bld/namelist_files/use_cases/scam_generic.xml b/components/eam/bld/namelist_files/use_cases/scam_generic.xml index 395d9a6ec860..2b77e3b630ae 100644 --- a/components/eam/bld/namelist_files/use_cases/scam_generic.xml +++ b/components/eam/bld/namelist_files/use_cases/scam_generic.xml @@ -3,7 +3,6 @@ -atm/cam/inic/homme/cami_mam3_Linoz_ne4np4_L72_c160909.nc atm/cam/chem/trop_mozart_aero/emis/aces4bgc_nvsoa_soag_elev_2000_c160427.nc diff --git a/components/eam/cime_config/config_component.xml b/components/eam/cime_config/config_component.xml index c7585072ac94..103f296eb691 100755 --- a/components/eam/cime_config/config_component.xml +++ b/components/eam/cime_config/config_component.xml @@ -136,7 +136,7 @@ 20TR_eam_chemUCI-Linoz-mam5 scam_arm95 scm_arm97_chemUCI-Linoz-mam5-vbs - scm_generic_chemUCI-Linoz-mam5-vbs + scam_generic 1850-PD_cam5 aquaplanet_EAMv1 RCEMIP_EAMv1 From 1d3480a762e4a0362e883a468138b0bc165df62e Mon Sep 17 00:00:00 2001 From: Peter Bogenschutz Date: Tue, 6 Feb 2024 16:38:42 -0800 Subject: [PATCH 2/4] add idealization flags for P3 microphysics, relating to turning off generation of liquid precipitation and prescribing the droplet concentration --- .../namelist_files/namelist_defaults_eam.xml | 1 + .../namelist_files/namelist_definition.xml | 4 +- .../eam/src/physics/p3/eam/micro_p3.F90 | 39 ++++++++++++------- .../src/physics/p3/eam/micro_p3_interface.F90 | 10 +++-- .../eam/src/physics/p3/eam/micro_p3_utils.F90 | 3 -- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/components/eam/bld/namelist_files/namelist_defaults_eam.xml b/components/eam/bld/namelist_files/namelist_defaults_eam.xml index 56c816b1753c..cfd9bf682c8e 100755 --- a/components/eam/bld/namelist_files/namelist_defaults_eam.xml +++ b/components/eam/bld/namelist_files/namelist_defaults_eam.xml @@ -917,6 +917,7 @@ 1.0D0 .false. 100.D6 + 200.D6 0.1D6 -999. -999. diff --git a/components/eam/bld/namelist_files/namelist_definition.xml b/components/eam/bld/namelist_files/namelist_definition.xml index bc9977f67b58..384d8f29b39b 100644 --- a/components/eam/bld/namelist_files/namelist_definition.xml +++ b/components/eam/bld/namelist_files/namelist_definition.xml @@ -4706,7 +4706,9 @@ Default: FALSE -Turn off microphysics computation. +Turn off microphysics computation for MG2. For P3 this disables the generation of +liquid precipitation via autoconversion only, to be used for idealized simulations of +warm phase boundary layer clouds. Default: FALSE | | diff --git a/components/eam/src/physics/p3/eam/micro_p3.F90 b/components/eam/src/physics/p3/eam/micro_p3.F90 index 730736a2dbf2..e668cbaa494c 100644 --- a/components/eam/src/physics/p3/eam/micro_p3.F90 +++ b/components/eam/src/physics/p3/eam/micro_p3.F90 @@ -56,7 +56,7 @@ module micro_p3 use phys_control, only: use_hetfrz_classnuc ! physical and mathematical constants - use micro_p3_utils, only: rho_1000mb,rho_600mb,ar,br,f1r,f2r,rho_h2o,kr,kc,aimm,mi0,nccnst, & + use micro_p3_utils, only: rho_1000mb,rho_600mb,ar,br,f1r,f2r,rho_h2o,kr,kc,aimm,mi0, & eci,eri,bcn,cpw,cons1,cons3,cons4,cons5,cons6,cons7, & inv_rho_h2o,inv_dropmass,qsmall,nsmall,cp,g,rd,rv,ep_2,inv_cp, & thrd,sxth,piov6,rho_rimeMin, & @@ -441,7 +441,7 @@ SUBROUTINE p3_main_part1(kts, kte, kbot, ktop, kdir, do_predict_nc, do_prescribe t_atm, rho, inv_rho, qv_sat_l, qv_sat_i, qv_supersat_i, rhofacr, rhofaci, acn, qv, th_atm, & qc, nc, qr, nr, & qi, ni, qm, bm, qc_incld, qr_incld, qi_incld, qm_incld, & - nc_incld, nr_incld, ni_incld, bm_incld, is_nucleat_possible, is_hydromet_present) + nc_incld, nr_incld, ni_incld, bm_incld, is_nucleat_possible, is_hydromet_present, nccnst) implicit none @@ -449,7 +449,7 @@ SUBROUTINE p3_main_part1(kts, kte, kbot, ktop, kdir, do_predict_nc, do_prescribe integer, intent(in) :: kts, kte, kbot, ktop, kdir logical(btype), intent(in) :: do_predict_nc - real(rtype), intent(in) :: dt + real(rtype), intent(in) :: dt, nccnst real(rtype), intent(in), dimension(kts:kte) :: pres, dpres, dz, nc_nuceat_tend, exner, inv_exner, & inv_cld_frac_l, inv_cld_frac_i, inv_cld_frac_r, latent_heat_vapor, latent_heat_sublim, latent_heat_fusion, nccn_prescribed @@ -561,15 +561,15 @@ SUBROUTINE p3_main_part2(kts, kte, kbot, ktop, kdir, do_predict_nc, do_prescribe qm, bm, latent_heat_vapor, latent_heat_sublim, latent_heat_fusion, qc_incld, qr_incld, qi_incld, qm_incld, nc_incld, nr_incld, & ni_incld, bm_incld, mu_c, nu, lamc, cdist, cdist1, cdistr, mu_r, lamr, logn0r, qv2qi_depos_tend, precip_total_tend, & nevapr, qr_evap_tend, vap_liq_exchange, vap_ice_exchange, liq_ice_exchange, pratot, & - prctot, frzimm, frzcnt, frzdep, p3_tend_out, is_hydromet_present) + prctot, frzimm, frzcnt, frzdep, p3_tend_out, is_hydromet_present, do_precip_off, nccnst) implicit none ! args integer, intent(in) :: kts, kte, kbot, ktop, kdir - logical(btype), intent(in) :: do_predict_nc, do_prescribed_CCN - real(rtype), intent(in) :: dt, inv_dt + logical(btype), intent(in) :: do_predict_nc, do_prescribed_CCN, do_precip_off + real(rtype), intent(in) :: dt, inv_dt, nccnst real(rtype), intent(in) :: p3_autocon_coeff, p3_accret_coeff, p3_qc_autocon_expon, p3_nc_autocon_expon, p3_qc_accret_expon, & p3_wbf_coeff, p3_embryonic_rain_size, p3_max_mean_rain_size @@ -875,7 +875,7 @@ SUBROUTINE p3_main_part2(kts, kte, kbot, ktop, kdir, do_predict_nc, do_prescribe ! NOTE: cloud_water_autoconversion must be called before droplet_self_collection call cloud_water_autoconversion(rho(k),qc_incld(k),nc_incld(k),inv_qc_relvar(k),& p3_autocon_coeff,p3_qc_autocon_expon,p3_nc_autocon_expon,p3_embryonic_rain_size,& - qc2qr_autoconv_tend,nc2nr_autoconv_tend,ncautr) + do_precip_off,qc2qr_autoconv_tend,nc2nr_autoconv_tend,ncautr) !............................ ! self-collection of droplets @@ -978,7 +978,7 @@ SUBROUTINE p3_main_part2(kts, kte, kbot, ktop, kdir, do_predict_nc, do_prescribe !-- warm-phase only processes: call update_prognostic_liquid(qc2qr_accret_tend, nc_accret_tend, qc2qr_autoconv_tend, nc2nr_autoconv_tend, ncautr, & nc_selfcollect_tend, qr2qv_evap_tend, nr_evap_tend, nr_selfcollect_tend, & - do_predict_nc, do_prescribed_CCN, inv_rho(k), exner(k), latent_heat_vapor(k), dt, & + do_predict_nc, nccnst, do_prescribed_CCN, inv_rho(k), exner(k), latent_heat_vapor(k), dt, & th_atm(k), qv(k), qc(k), nc(k), qr(k), nr(k)) !== @@ -1259,7 +1259,7 @@ SUBROUTINE p3_main(qc,nc,qr,nr,th_atm,qv,dt,qi,qm,ni,bm, p3_wbf_coeff,p3_mincdnc,p3_max_mean_rain_size,p3_embryonic_rain_size, & dpres,exner,qv2qi_depos_tend,precip_total_tend,nevapr,qr_evap_tend,precip_liq_flux,precip_ice_flux,rflx,sflx,cflx,cld_frac_r,cld_frac_l,cld_frac_i, & p3_tend_out,mu_c,lamc,liq_ice_exchange,vap_liq_exchange, & - vap_ice_exchange,qv_prev,t_prev,col_location,diag_equiv_reflectivity,diag_ze_rain,diag_ze_ice & + vap_ice_exchange,qv_prev,t_prev,col_location,do_precip_off,nccnst,diag_equiv_reflectivity,diag_ze_rain,diag_ze_ice & #ifdef SCREAM_CONFIG_IS_CMAKE ,elapsed_s & #endif @@ -1337,6 +1337,10 @@ SUBROUTINE p3_main(qc,nc,qr,nr,th_atm,qv,dt,qi,qm,ni,bm, ! INPUT for prescribed CCN option logical(btype), intent(in) :: do_prescribed_CCN + ! INPUT for idealization options + logical(btype), intent(in) :: do_precip_off + real(rtype), intent(in) :: nccnst + ! INPUT for p3 tuning parameters real(rtype), intent(in) :: p3_autocon_coeff ! autconversion coefficient real(rtype), intent(in) :: p3_accret_coeff ! accretion coefficient @@ -1517,7 +1521,7 @@ SUBROUTINE p3_main(qc,nc,qr,nr,th_atm,qv,dt,qi,qm,ni,bm, rhofaci(i,:), acn(i,:), qv(i,:), th_atm(i,:), qc(i,:), nc(i,:), qr(i,:), nr(i,:), & qi(i,:), ni(i,:), qm(i,:), bm(i,:), qc_incld(i,:), qr_incld(i,:), & qi_incld(i,:), qm_incld(i,:), nc_incld(i,:), nr_incld(i,:), & - ni_incld(i,:), bm_incld(i,:), is_nucleat_possible, is_hydromet_present) + ni_incld(i,:), bm_incld(i,:), is_nucleat_possible, is_hydromet_present, nccnst) if (debug_ON) then tmparr1(i,:) = th_atm(i,:)*inv_exner(i,:)!(pres(i,:)*1.e-5)**(rd*inv_cp) @@ -1541,7 +1545,8 @@ SUBROUTINE p3_main(qc,nc,qr,nr,th_atm,qv,dt,qi,qm,ni,bm, bm_incld(i,:), mu_c(i,:), nu(i,:), lamc(i,:), cdist(i,:), cdist1(i,:), & cdistr(i,:), mu_r(i,:), lamr(i,:), logn0r(i,:), qv2qi_depos_tend(i,:), precip_total_tend(i,:), & nevapr(i,:), qr_evap_tend(i,:), vap_liq_exchange(i,:), vap_ice_exchange(i,:), & - liq_ice_exchange(i,:), pratot(i,:), prctot(i,:), frzimm(i,:), frzcnt(i,:), frzdep(i,:), p3_tend_out(i,:,:), is_hydromet_present) + liq_ice_exchange(i,:), pratot(i,:), prctot(i,:), frzimm(i,:), frzcnt(i,:), frzdep(i,:), p3_tend_out(i,:,:), is_hydromet_present, & + do_precip_off, nccnst) ! measure microphysics processes tendency output @@ -2950,7 +2955,7 @@ end subroutine rain_self_collection subroutine cloud_water_autoconversion(rho,qc_incld,nc_incld,inv_qc_relvar, & p3_autocon_coeff,p3_qc_autocon_expon,p3_nc_autocon_expon,p3_embryonic_rain_size, & - qc2qr_autoconv_tend,nc2nr_autoconv_tend,ncautr) + do_precip_off,qc2qr_autoconv_tend,nc2nr_autoconv_tend,ncautr) implicit none @@ -2963,6 +2968,8 @@ subroutine cloud_water_autoconversion(rho,qc_incld,nc_incld,inv_qc_relvar, real(rtype), intent(in) :: p3_nc_autocon_expon real(rtype), intent(in) :: p3_embryonic_rain_size + logical(btype), intent(in) :: do_precip_off + real(rtype), intent(out) :: qc2qr_autoconv_tend real(rtype), intent(out) :: nc2nr_autoconv_tend real(rtype), intent(out) :: ncautr @@ -2981,8 +2988,9 @@ subroutine cloud_water_autoconversion(rho,qc_incld,nc_incld,inv_qc_relvar, ncautr = qc2qr_autoconv_tend*cons3*(1._rtype/bfb_pow(p3_embryonic_rain_size,3._rtype)) nc2nr_autoconv_tend = qc2qr_autoconv_tend*nc_incld/qc_incld - if (qc2qr_autoconv_tend .eq.0._rtype) nc2nr_autoconv_tend = 0._rtype - if (nc2nr_autoconv_tend.eq.0._rtype) qc2qr_autoconv_tend = 0._rtype + if (qc2qr_autoconv_tend .eq.0._rtype .or. do_precip_off) nc2nr_autoconv_tend = 0._rtype + if (nc2nr_autoconv_tend.eq.0._rtype .or. do_precip_off) qc2qr_autoconv_tend = 0._rtype + if (do_precip_off) ncautr = 0._rtype endif qc_not_small @@ -3502,7 +3510,7 @@ end subroutine update_prognostic_ice subroutine update_prognostic_liquid(qc2qr_accret_tend,nc_accret_tend,qc2qr_autoconv_tend,nc2nr_autoconv_tend, & ncautr,nc_selfcollect_tend, qr2qv_evap_tend,nr_evap_tend,nr_selfcollect_tend, & - do_predict_nc, do_prescribed_CCN, inv_rho,exner,latent_heat_vapor,dt, & + do_predict_nc, nccnst, do_prescribed_CCN, inv_rho,exner,latent_heat_vapor,dt, & th_atm,qv,qc,nc,qr,nr) !-- warm-phase only processes: @@ -3520,6 +3528,7 @@ subroutine update_prognostic_liquid(qc2qr_accret_tend,nc_accret_tend,qc2qr_autoc logical(btype), intent(in) :: do_predict_nc, do_prescribed_CCN + real(rtype), intent(in) :: nccnst real(rtype), intent(in) :: inv_rho real(rtype), intent(in) :: exner real(rtype), intent(in) :: latent_heat_vapor diff --git a/components/eam/src/physics/p3/eam/micro_p3_interface.F90 b/components/eam/src/physics/p3/eam/micro_p3_interface.F90 index 9d53e95fc17f..bb6e164b4a14 100644 --- a/components/eam/src/physics/p3/eam/micro_p3_interface.F90 +++ b/components/eam/src/physics/p3/eam/micro_p3_interface.F90 @@ -42,6 +42,7 @@ module micro_p3_interface use ncdio_atm, only: infld use ppgrid, only: begchunk, endchunk, pcols, pver, pverp,psubcols use cam_history_support, only: add_hist_coord + use iop_data_mod, only: precip_off implicit none save @@ -131,8 +132,8 @@ module micro_p3_interface p3_wbf_coeff = huge(1.0_rtype), & p3_mincdnc = huge(1.0_rtype), & p3_max_mean_rain_size = huge(1.0_rtype), & - p3_embryonic_rain_size = huge(1.0_rtype) - + p3_embryonic_rain_size = huge(1.0_rtype), & + micro_nccons = huge(1.0_rtype) integer :: ncnst @@ -165,7 +166,7 @@ subroutine micro_p3_readnl(nlfile) micro_p3_tableversion, micro_p3_lookup_dir, micro_aerosolactivation, micro_subgrid_cloud, & micro_tend_output, p3_autocon_coeff, p3_qc_autocon_expon, p3_nc_autocon_expon, p3_accret_coeff, & p3_qc_accret_expon, p3_wbf_coeff, p3_max_mean_rain_size, p3_embryonic_rain_size, & - do_prescribed_CCN, do_Cooper_inP3, p3_mincdnc + do_prescribed_CCN, do_Cooper_inP3, p3_mincdnc, micro_nccons !----------------------------------------------------------------------------- @@ -220,6 +221,7 @@ subroutine micro_p3_readnl(nlfile) call mpibcast(p3_embryonic_rain_size, 1 , mpir8, 0, mpicom) call mpibcast(do_prescribed_CCN, 1, mpilog, 0, mpicom) call mpibcast(do_Cooper_inP3, 1, mpilog, 0, mpicom) + call mpibcast(micro_nccons, 1, mpir8, 0, mpicom) #endif @@ -1363,6 +1365,8 @@ subroutine micro_p3_tend(state, ptend, dtime, pbuf) qv_prev(its:ite,kts:kte), & ! IN qv at end of prev p3_main call kg kg-1 t_prev(its:ite,kts:kte), & ! IN t at end of prev p3_main call K col_location(its:ite,:3), & ! IN column locations + precip_off, & ! IN Option to turn precip (liquid) off + micro_nccons, & ! IN Option for constant droplet concentration diag_equiv_reflectivity(its:ite,kts:kte), & !OUT equivalent reflectivity (rain + ice) [dBz] diag_ze_rain(its:ite,kts:kte),diag_ze_ice(its:ite,kts:kte)) !OUT equivalent reflectivity for rain and ice [dBz] diff --git a/components/eam/src/physics/p3/eam/micro_p3_utils.F90 b/components/eam/src/physics/p3/eam/micro_p3_utils.F90 index dab1c4751323..c2182a14206c 100644 --- a/components/eam/src/physics/p3/eam/micro_p3_utils.F90 +++ b/components/eam/src/physics/p3/eam/micro_p3_utils.F90 @@ -33,9 +33,6 @@ module micro_p3_utils ! maximum total ice concentration (sum of all categories) real(rtype), public, parameter :: max_total_ni = 500.e+3_rtype ! (m) - ! droplet concentration (m-3) - real(rtype), public, parameter :: nccnst = 200.e+6_rtype - ! parameters for Seifert and Beheng (2001) autoconversion/accretion real(rtype), public, parameter :: kc = 9.44e+9_rtype real(rtype), public, parameter :: kr = 5.78e+3_rtype From ab94e4f7b9a9c8d2deba2f4b6b8352c76fa449af Mon Sep 17 00:00:00 2001 From: Peter Bogenschutz Date: Wed, 7 Feb 2024 12:12:30 -0800 Subject: [PATCH 3/4] update replay option so that it will produce output when run with theta-l dycore --- components/eam/src/dynamics/se/stepon.F90 | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/components/eam/src/dynamics/se/stepon.F90 b/components/eam/src/dynamics/se/stepon.F90 index 831fd6d87603..c9c28ad1eb70 100644 --- a/components/eam/src/dynamics/se/stepon.F90 +++ b/components/eam/src/dynamics/se/stepon.F90 @@ -526,9 +526,10 @@ subroutine stepon_run3(dtime, cam_out, phys_state, dyn_in, dyn_out) use hycoef, only: hyam, hybm use dimensions_mod, only: nlev, nelemd, np, npsq use se_iop_intr_mod, only: iop_setfield, iop_setinitial - use dyn_comp, only: TimeLevel + use dyn_comp, only: TimeLevel, hvcoord use cam_history, only: outfld use cam_logfile, only: iulog + use element_ops, only: get_temperature use mpishorthand real(r8), intent(in) :: dtime ! Time-step real(r8) :: ftmp_temp(np,np,nlev,nelemd), ftmp_q(np,np,nlev,pcnst,nelemd) @@ -542,6 +543,7 @@ subroutine stepon_run3(dtime, cam_out, phys_state, dyn_in, dyn_out) type (dyn_export_t), intent(inout) :: dyn_out ! Dynamics export container type (element_t), pointer :: elem(:) integer :: rc, i, j, k, p, ie, tl_f + real(r8) :: temperature(np,np,nlev) ! Temperature from dynamics #if defined (E3SM_SCM_REPLAY) real(r8) :: forcing_temp(npsq,nlev), forcing_q(npsq,nlev,pcnst) #endif @@ -554,7 +556,10 @@ subroutine stepon_run3(dtime, cam_out, phys_state, dyn_in, dyn_out) ! Save ftmp stuff to get state before dynamics is called do ie=1,nelemd - ftmp_temp(:,:,:,ie) = dyn_in%elem(ie)%state%T(:,:,:,tl_f) + + call get_temperature(dyn_in%elem(ie),temperature,hvcoord,tl_f) + + ftmp_temp(:,:,:,ie) = temperature(:,:,:) ftmp_q(:,:,:,:,ie) = dyn_in%elem(ie)%state%Q(:,:,:,:) enddo @@ -599,6 +604,10 @@ subroutine stepon_run3(dtime, cam_out, phys_state, dyn_in, dyn_out) tl_f = TimeLevel%n0 do ie=1,nelemd + + ! Get temperature from dynamics state + call get_temperature(dyn_in%elem(ie),temperature,hvcoord,tl_f) + do k=1,nlev do j=1,np do i=1,np @@ -606,9 +615,9 @@ subroutine stepon_run3(dtime, cam_out, phys_state, dyn_in, dyn_out) ! Note that this calculation will not provide b4b results with ! an E3SM because the dynamics tendency is not computed in the exact ! same way as an E3SM run, introducing error with roundoff - forcing_temp(i+(j-1)*np,k) = (dyn_in%elem(ie)%state%T(i,j,k,tl_f) - & + forcing_temp(i+(j-1)*np,k) = (temperature(i,j,k) - & ftmp_temp(i,j,k,ie))/dtime - dyn_in%elem(ie)%derived%FT(i,j,k) - out_temp(i+(j-1)*np,k) = dyn_in%elem(ie)%state%T(i,j,k,tl_f) + out_temp(i+(j-1)*np,k) = temperature(i,j,k) out_u(i+(j-1)*np,k) = dyn_in%elem(ie)%state%v(i,j,1,k,tl_f) out_v(i+(j-1)*np,k) = dyn_in%elem(ie)%state%v(i,j,2,k,tl_f) out_q(i+(j-1)*np,k) = dyn_in%elem(ie)%state%Q(i,j,k,1) From 3f054ae96a222e802b392c527a4b560b08e9dbb7 Mon Sep 17 00:00:00 2001 From: Peter Bogenschutz Date: Tue, 13 Feb 2024 13:35:04 -0800 Subject: [PATCH 4/4] modifications to get replay option to run --- components/eam/src/dynamics/se/se_iop_intr_mod.F90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/components/eam/src/dynamics/se/se_iop_intr_mod.F90 b/components/eam/src/dynamics/se/se_iop_intr_mod.F90 index 02862980053c..b77ef1540d4c 100644 --- a/components/eam/src/dynamics/se/se_iop_intr_mod.F90 +++ b/components/eam/src/dynamics/se/se_iop_intr_mod.F90 @@ -56,7 +56,7 @@ subroutine iop_setinitial(elem) integer i, j, k, cix, ie, thelev integer inumliq, inumice, icldliq, icldice - if (.not. use_replay .and. get_nstep() .eq. 0 .and. par%dynproc) then + if (get_nstep() .eq. 0 .and. par%dynproc) then call cnst_get_ind('NUMLIQ', inumliq, abrtf=.false.) call cnst_get_ind('NUMICE', inumice, abrtf=.false.) call cnst_get_ind('CLDLIQ', icldliq) @@ -215,8 +215,7 @@ subroutine iop_setfield(elem,iop_update_phase1) integer i, j, k, ie do ie=1,nelemd - if (have_ps .and. use_replay .and. .not. iop_update_phase1) elem(ie)%state%ps_v(:,:,:) = psobs - if (have_ps .and. .not. use_replay) elem(ie)%state%ps_v(:,:,:) = psobs + if (have_ps) elem(ie)%state%ps_v(:,:,:) = psobs do i=1, PLEV ! If DP CRM mode do NOT write over dycore vertical velocity if ((have_omega .and. iop_update_phase1) .and. .not. dp_crm) elem(ie)%derived%omega_p(:,:,i)=wfld(i) ! set t to tobs at first