From e4cf6b199d365dba4451e3ceaa9466085437bf26 Mon Sep 17 00:00:00 2001 From: NoraLoose Date: Wed, 3 Nov 2021 13:13:50 -0600 Subject: [PATCH 1/3] Add weighted d[uv]_dt_str diagnostics - thickness-weighted versions of du_dt_str, dv_dt_str - du_dt_str, dv_dt_str multiplied by viscous remmant fraction --- .../vertical/MOM_vert_friction.F90 | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/parameterizations/vertical/MOM_vert_friction.F90 b/src/parameterizations/vertical/MOM_vert_friction.F90 index f9512d8c06..ad8c317187 100644 --- a/src/parameterizations/vertical/MOM_vert_friction.F90 +++ b/src/parameterizations/vertical/MOM_vert_friction.F90 @@ -128,6 +128,8 @@ module MOM_vert_friction ! integer :: id_hf_du_dt_visc = -1, id_hf_dv_dt_visc = -1 integer :: id_h_du_dt_visc = -1, id_h_dv_dt_visc = -1 integer :: id_hf_du_dt_visc_2d = -1, id_hf_dv_dt_visc_2d = -1 + integer :: id_h_du_dt_str = -1, id_h_dv_dt_str = -1 + integer :: id_du_dt_str_visc_rem = -1, id_dv_dt_str_visc_rem = -1 !>@} type(PointAccel_CS), pointer :: PointAccel_CSp => NULL() !< A pointer to the control structure @@ -219,6 +221,11 @@ subroutine vertvisc(u, v, h, forces, visc, dt, OBC, ADp, CDp, G, GV, US, CS, & real, allocatable, dimension(:,:,:) :: h_du_dt_visc ! h x du_dt_visc [H L T-2 ~> m2 s-2] real, allocatable, dimension(:,:,:) :: h_dv_dt_visc ! h x dv_dt_visc [H L T-2 ~> m2 s-2] + + real, allocatable, dimension(:,:,:) :: h_du_dt_str ! h x du_dt_str [H L T-2 ~> m2 s-2] + real, allocatable, dimension(:,:,:) :: h_dv_dt_str ! h x dv_dt_str [H L T-2 ~> m2 s-2] + real, allocatable, dimension(:,:,:) :: du_dt_str_visc_rem ! du_dt_str x visc_rem_u [L T-2 ~> m s-2] + real, allocatable, dimension(:,:,:) :: dv_dt_str_visc_rem ! dv_dt_str x visc_rem_v [L T-2 ~> m s-2] logical :: do_i(SZIB_(G)) logical :: DoStokesMixing @@ -564,6 +571,44 @@ subroutine vertvisc(u, v, h, forces, visc, dt, OBC, ADp, CDp, G, GV, US, CS, & call post_data(CS%id_h_dv_dt_visc, h_dv_dt_visc, CS%diag) deallocate(h_dv_dt_visc) endif + + if (CS%id_h_du_dt_str > 0) then + allocate(h_du_dt_str(G%IsdB:G%IedB,G%jsd:G%jed,GV%ke)) + h_du_dt_str(:,:,:) = 0.0 + do k=1,nz ; do j=js,je ; do I=Isq,Ieq + h_du_dt_str(I,j,k) = ADp%du_dt_str(I,j,k) * ADp%diag_hu(I,j,k) + enddo ; enddo ; enddo + call post_data(CS%id_h_du_dt_str, h_du_dt_str, CS%diag) + deallocate(h_du_dt_str) + endif + if (CS%id_h_dv_dt_str > 0) then + allocate(h_dv_dt_str(G%isd:G%ied,G%JsdB:G%JedB,GV%ke)) + h_dv_dt_str(:,:,:) = 0.0 + do k=1,nz ; do J=Jsq,Jeq ; do i=is,ie + h_dv_dt_str(i,J,k) = ADp%dv_dt_str(i,J,k) * ADp%diag_hv(i,J,k) + enddo ; enddo ; enddo + call post_data(CS%id_h_dv_dt_str, h_dv_dt_str, CS%diag) + deallocate(h_dv_dt_str) + endif + + if (CS%id_du_dt_str_visc_rem > 0) then + allocate(du_dt_str_visc_rem(G%IsdB:G%IedB,G%jsd:G%jed,GV%ke)) + du_dt_str_visc_rem(:,:,:) = 0.0 + do k=1,nz ; do j=js,je ; do I=Isq,Ieq + du_dt_str_visc_rem(I,j,k) = ADp%du_dt_str(I,j,k) * ADp%visc_rem_u(I,j,k) + enddo ; enddo ; enddo + call post_data(CS%id_du_dt_str_visc_rem, du_dt_str_visc_rem, CS%diag) + deallocate(du_dt_str_visc_rem) + endif + if (CS%id_dv_dt_str_visc_rem > 0) then + allocate(dv_dt_str_visc_rem(G%isd:G%ied,G%JsdB:G%JedB,GV%ke)) + dv_dt_str_visc_rem(:,:,:) = 0.0 + do k=1,nz ; do J=Jsq,Jeq ; do i=is,ie + dv_dt_str_visc_rem(i,J,k) = ADp%dv_dt_str(i,J,k) * ADp%visc_rem_v(i,J,k) + enddo ; enddo ; enddo + call post_data(CS%id_dv_dt_str_visc_rem, dv_dt_str_visc_rem, CS%diag) + deallocate(dv_dt_str_visc_rem) + endif end subroutine vertvisc @@ -1913,6 +1958,38 @@ subroutine vertvisc_init(MIS, Time, G, GV, US, param_file, diag, ADp, dirs, & call safe_alloc_ptr(ADp%dv_dt_visc,isd,ied,JsdB,JedB,nz) call safe_alloc_ptr(ADp%diag_hv,isd,ied,JsdB,JedB,nz) endif + + CS%id_h_du_dt_str = register_diag_field('ocean_model', 'h_du_dt_str', diag%axesCuL, Time, & + 'Thickness Multiplied Zonal Acceleration from Surface Wind Stresses', 'm2 s-2', & + conversion=GV%H_to_m*US%L_T2_to_m_s2) + if (CS%id_h_du_dt_str > 0) then + call safe_alloc_ptr(ADp%du_dt_str,IsdB,IedB,jsd,jed,nz) + call safe_alloc_ptr(ADp%diag_hu,IsdB,IedB,jsd,jed,nz) + endif + + CS%id_h_dv_dt_str = register_diag_field('ocean_model', 'h_dv_dt_str', diag%axesCvL, Time, & + 'Thickness Multiplied Meridional Acceleration from Surface Wind Stresses', 'm2 s-2', & + conversion=GV%H_to_m*US%L_T2_to_m_s2) + if (CS%id_h_dv_dt_str > 0) then + call safe_alloc_ptr(ADp%dv_dt_str,isd,ied,JsdB,JedB,nz) + call safe_alloc_ptr(ADp%diag_hv,isd,ied,JsdB,JedB,nz) + endif + + CS%id_du_dt_str_visc_rem = register_diag_field('ocean_model', 'du_dt_str_visc_rem', diag%axesCuL, Time, & + 'Zonal Acceleration from Surface Wind Stresses multiplied by viscous remnant', 'm s-2', & + conversion=US%L_T2_to_m_s2) + if (CS%id_du_dt_str_visc_rem > 0) then + call safe_alloc_ptr(ADp%du_dt_str,IsdB,IedB,jsd,jed,nz) + call safe_alloc_ptr(ADp%visc_rem_u,IsdB,IedB,jsd,jed,nz) + endif + + CS%id_dv_dt_str_visc_rem = register_diag_field('ocean_model', 'dv_dt_str_visc_rem', diag%axesCvL, Time, & + 'Meridional Acceleration from Surface Wind Stresses multiplied by viscous remnant', 'm s-2', & + conversion=US%L_T2_to_m_s2) + if (CS%id_dv_dt_str_visc_rem > 0) then + call safe_alloc_ptr(ADp%dv_dt_str,isd,ied,JsdB,JedB,nz) + call safe_alloc_ptr(ADp%visc_rem_v,isd,ied,JsdB,JedB,nz) + endif if ((len_trim(CS%u_trunc_file) > 0) .or. (len_trim(CS%v_trunc_file) > 0)) & call PointAccel_init(MIS, Time, G, param_file, diag, dirs, CS%PointAccel_CSp) From 93c4250a093bac1a2cc107a1c009c2b9dd3d1964 Mon Sep 17 00:00:00 2001 From: NoraLoose Date: Thu, 4 Nov 2021 16:26:27 -0600 Subject: [PATCH 2/3] Remove trailing spaces --- src/parameterizations/vertical/MOM_vert_friction.F90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/parameterizations/vertical/MOM_vert_friction.F90 b/src/parameterizations/vertical/MOM_vert_friction.F90 index ad8c317187..73f60d4a35 100644 --- a/src/parameterizations/vertical/MOM_vert_friction.F90 +++ b/src/parameterizations/vertical/MOM_vert_friction.F90 @@ -221,7 +221,6 @@ subroutine vertvisc(u, v, h, forces, visc, dt, OBC, ADp, CDp, G, GV, US, CS, & real, allocatable, dimension(:,:,:) :: h_du_dt_visc ! h x du_dt_visc [H L T-2 ~> m2 s-2] real, allocatable, dimension(:,:,:) :: h_dv_dt_visc ! h x dv_dt_visc [H L T-2 ~> m2 s-2] - real, allocatable, dimension(:,:,:) :: h_du_dt_str ! h x du_dt_str [H L T-2 ~> m2 s-2] real, allocatable, dimension(:,:,:) :: h_dv_dt_str ! h x dv_dt_str [H L T-2 ~> m2 s-2] real, allocatable, dimension(:,:,:) :: du_dt_str_visc_rem ! du_dt_str x visc_rem_u [L T-2 ~> m s-2] @@ -571,7 +570,7 @@ subroutine vertvisc(u, v, h, forces, visc, dt, OBC, ADp, CDp, G, GV, US, CS, & call post_data(CS%id_h_dv_dt_visc, h_dv_dt_visc, CS%diag) deallocate(h_dv_dt_visc) endif - + if (CS%id_h_du_dt_str > 0) then allocate(h_du_dt_str(G%IsdB:G%IedB,G%jsd:G%jed,GV%ke)) h_du_dt_str(:,:,:) = 0.0 @@ -1958,7 +1957,7 @@ subroutine vertvisc_init(MIS, Time, G, GV, US, param_file, diag, ADp, dirs, & call safe_alloc_ptr(ADp%dv_dt_visc,isd,ied,JsdB,JedB,nz) call safe_alloc_ptr(ADp%diag_hv,isd,ied,JsdB,JedB,nz) endif - + CS%id_h_du_dt_str = register_diag_field('ocean_model', 'h_du_dt_str', diag%axesCuL, Time, & 'Thickness Multiplied Zonal Acceleration from Surface Wind Stresses', 'm2 s-2', & conversion=GV%H_to_m*US%L_T2_to_m_s2) @@ -1974,7 +1973,7 @@ subroutine vertvisc_init(MIS, Time, G, GV, US, param_file, diag, ADp, dirs, & call safe_alloc_ptr(ADp%dv_dt_str,isd,ied,JsdB,JedB,nz) call safe_alloc_ptr(ADp%diag_hv,isd,ied,JsdB,JedB,nz) endif - + CS%id_du_dt_str_visc_rem = register_diag_field('ocean_model', 'du_dt_str_visc_rem', diag%axesCuL, Time, & 'Zonal Acceleration from Surface Wind Stresses multiplied by viscous remnant', 'm s-2', & conversion=US%L_T2_to_m_s2) From 2da92420fbb930e7d9a518d932bc78bdd573036d Mon Sep 17 00:00:00 2001 From: NoraLoose Date: Thu, 4 Nov 2021 16:39:02 -0600 Subject: [PATCH 3/3] Remove one more space --- src/parameterizations/vertical/MOM_vert_friction.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parameterizations/vertical/MOM_vert_friction.F90 b/src/parameterizations/vertical/MOM_vert_friction.F90 index 73f60d4a35..d0d3943a26 100644 --- a/src/parameterizations/vertical/MOM_vert_friction.F90 +++ b/src/parameterizations/vertical/MOM_vert_friction.F90 @@ -1957,7 +1957,7 @@ subroutine vertvisc_init(MIS, Time, G, GV, US, param_file, diag, ADp, dirs, & call safe_alloc_ptr(ADp%dv_dt_visc,isd,ied,JsdB,JedB,nz) call safe_alloc_ptr(ADp%diag_hv,isd,ied,JsdB,JedB,nz) endif - + CS%id_h_du_dt_str = register_diag_field('ocean_model', 'h_du_dt_str', diag%axesCuL, Time, & 'Thickness Multiplied Zonal Acceleration from Surface Wind Stresses', 'm2 s-2', & conversion=GV%H_to_m*US%L_T2_to_m_s2)