From 4bdca574ea64f101893b33cc715cd06c38a3834b Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Thu, 4 Jan 2024 13:48:50 +0100 Subject: [PATCH 1/2] pass 10m u,v from cam to mediator that will then be send to ww3 --- src/control/camsrfexch.F90 | 18 ++++++++++++++++++ src/cpl/nuopc/atm_import_export.F90 | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/src/control/camsrfexch.F90 b/src/control/camsrfexch.F90 index de1ea4ce6e..2eefec0e0a 100644 --- a/src/control/camsrfexch.F90 +++ b/src/control/camsrfexch.F90 @@ -44,6 +44,8 @@ module camsrfexch real(r8) :: topo(pcols) ! surface topographic height (m) real(r8) :: ubot(pcols) ! bot level u wind real(r8) :: vbot(pcols) ! bot level v wind + real(r8) :: u10m(pcols) ! 10m u wind + real(r8) :: v10m(pcols) ! 10m v wind real(r8) :: qbot(pcols,pcnst) ! bot level specific humidity real(r8) :: pbot(pcols) ! bot level pressure real(r8) :: rho(pcols) ! bot level density @@ -286,6 +288,8 @@ subroutine atm2hub_alloc( cam_out ) cam_out(c)%topo(:) = 0._r8 cam_out(c)%ubot(:) = 0._r8 cam_out(c)%vbot(:) = 0._r8 + cam_out(c)%u10m(:) = 0._r8 + cam_out(c)%v10m(:) = 0._r8 cam_out(c)%qbot(:,:) = 0._r8 cam_out(c)%pbot(:) = 0._r8 cam_out(c)%rho(:) = 0._r8 @@ -426,6 +430,9 @@ subroutine cam_export(state,cam_out,pbuf) integer :: prec_dp_idx, snow_dp_idx, prec_sh_idx, snow_sh_idx integer :: prec_sed_idx,snow_sed_idx,prec_pcw_idx,snow_pcw_idx integer :: srf_ozone_idx, lightning_idx + real(r8):: ubot, vbot, zm + real(r8):: wnd10m_mag, wnd10m_dir + real(r8), parameter :: z0= 0.0001_r8 ! [m] roughness length over ocean real(r8), pointer :: psl(:) @@ -493,7 +500,18 @@ subroutine cam_export(state,cam_out,pbuf) cam_out%pbot(i) = state%pmid(i,pver) cam_out%psl(i) = psl(i) cam_out%rho(i) = cam_out%pbot(i)/(rair*cam_out%tbot(i)) + + ! Assume that the direction of the wind at 10m is the same as + ! at the bottom level + ubot = state%u(i,pver) + vbot = state%v(i,pver) + zm = state%zm(i,pver) + wnd10m_mag = sqrt(ubot**2 + vbot**2) * log(10._r8/z0)/log(zm/z0) + wnd10m_dir = atan2(vbot,ubot) + cam_out%u10m(i) = wnd10m_mag*cos(wnd10m_dir) + cam_out%v10m(i) = wnd10m_mag*sin(wnd10m_dir) end do + do m = 1, pcnst do i = 1, ncol cam_out%qbot(i,m) = state%q(i,pver,m) diff --git a/src/cpl/nuopc/atm_import_export.F90 b/src/cpl/nuopc/atm_import_export.F90 index dc21bf7392..9d692bae19 100644 --- a/src/cpl/nuopc/atm_import_export.F90 +++ b/src/cpl/nuopc/atm_import_export.F90 @@ -163,6 +163,8 @@ subroutine advertise_fields(gcomp, flds_scalar_name, rc) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_z' ) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_u' ) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_v' ) + call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_u10m' ) + call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_v10m' ) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_tbot' ) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_ptem' ) call fldlist_add(fldsFrAtm_num, fldsFrAtm, 'Sa_shum' ) @@ -936,6 +938,7 @@ subroutine export_fields( gcomp, model_mesh, model_clock, cam_out, rc) real(r8), pointer :: fldptr_lwdn(:) , fldptr_swnet(:) real(r8), pointer :: fldptr_topo(:) , fldptr_zbot(:) real(r8), pointer :: fldptr_ubot(:) , fldptr_vbot(:) + real(r8), pointer :: fldptr_u10m(:) , fldptr_v10m(:) real(r8), pointer :: fldptr_pbot(:) , fldptr_tbot(:) real(r8), pointer :: fldptr_shum(:) , fldptr_dens(:) real(r8), pointer :: fldptr_ptem(:) , fldptr_pslv(:) @@ -960,6 +963,10 @@ subroutine export_fields( gcomp, model_mesh, model_clock, cam_out, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call state_getfldptr(exportState, 'Sa_v' , fldptr=fldptr_vbot, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + call state_getfldptr(exportState, 'Sa_u10m', fldptr=fldptr_u10m, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call state_getfldptr(exportState, 'Sa_v10m', fldptr=fldptr_v10m, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call state_getfldptr(exportState, 'Sa_tbot', fldptr=fldptr_tbot, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call state_getfldptr(exportState, 'Sa_pbot', fldptr=fldptr_pbot, rc=rc) @@ -985,6 +992,8 @@ subroutine export_fields( gcomp, model_mesh, model_clock, cam_out, rc) fldptr_dens(g) = cam_out(c)%rho(i) fldptr_ptem(g) = cam_out(c)%thbot(i) fldptr_pslv(g) = cam_out(c)%psl(i) + fldptr_u10m(g) = cam_out(c)%u10m(i) + fldptr_v10m(g) = cam_out(c)%v10m(i) g = g + 1 end do end do From 322989b65fb851448199a99273a25663cc15e2f5 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sat, 24 Feb 2024 19:39:04 +0100 Subject: [PATCH 2/2] removed camnor_physics/control directory - no longer needed --- bld/configure | 1 - 1 file changed, 1 deletion(-) diff --git a/bld/configure b/bld/configure index b46b4940f4..4cd9c05127 100755 --- a/bld/configure +++ b/bld/configure @@ -2115,7 +2115,6 @@ sub write_filepath print $fh "$camsrcdir/src/physics/camnor_phys/physics_cam6\n"; die "CAM6 not currently supported for NorESM configurations.\n"; } - print $fh "$camsrcdir/src/physics/camnor_phys/control\n"; if ($dyn eq 'fv') { print $fh "$camsrcdir/src/physics/camnor_phys/fv\n"; }