Skip to content

Commit 95f6c80

Browse files
committed
Added U/V/SSH to DA prior variables
1 parent 7036600 commit 95f6c80

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

src/core/MOM.F90

+1-1
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ subroutine step_MOM(forces_in, fluxes_in, sfc_state, Time_start, time_int_in, CS
10301030

10311031
if (CS%ensemble_ocean) then
10321032
! store ensemble vector in odaCS
1033-
call set_prior_tracer(CS%Time, G, GV, CS%h, CS%tv, CS%u, CS%v, CS%odaCS)
1033+
call set_prior_tracer(CS%Time, G, GV, CS%h, CS%tv, CS%u, CS%v, ssh, CS%odaCS)
10341034
! call DA interface
10351035
call oda(CS%Time,CS%odaCS)
10361036
! update the time for the next analysis step if needed

src/ocean_data_assim/MOM_oda_driver.F90

+35-7
Original file line numberDiff line numberDiff line change
@@ -417,18 +417,22 @@ subroutine init_oda(Time, G, GV, US, diag_CS, CS)
417417
end subroutine init_oda
418418

419419
!> Copy ensemble member tracers to ensemble vector.
420-
subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
420+
subroutine set_prior_tracer(Time, G, GV, h, tv, model_u, model_v, model_ssh, CS)
421421
type(time_type), intent(in) :: Time !< The current model time
422422
type(ocean_grid_type), pointer :: G !< domain and grid information for ocean model
423423
type(verticalGrid_type), intent(in) :: GV !< The ocean's vertical grid structure
424424
real, dimension(SZI_(G),SZJ_(G),SZK_(GV)), intent(in) :: h !< Layer thicknesses [H ~> m or kg m-2]
425425
type(thermo_var_ptrs), intent(in) :: tv !< A structure pointing to various thermodynamic variables
426+
real, dimension(SZIB_(G),SZJ_(G),SZK_(GV)), intent(in) :: model_u
427+
real, dimension(SZI_(G),SZJB_(G),SZK_(GV)), intent(in) :: model_v
428+
real, dimension(SZI_(G),SZJ_(G)), intent(in) :: model_ssh
426429

427430
type(ODA_CS), pointer :: CS !< ocean DA control structure
428431
real, dimension(SZI_(G),SZJ_(G),CS%nk) :: T ! Temperature on the analysis grid [C ~> degC]
429432
real, dimension(SZI_(G),SZJ_(G),CS%nk) :: S ! Salinity on the analysis grid [S ~> ppt]
430433
real, dimension(SZIB_(G),SZJ_(G),CS%nk) :: U !< zonal velocity [L T-1 ~> m s-1]
431434
real, dimension(SZI_(G),SZJB_(G),CS%nk) :: V !< meridional velocity [L T-1 ~> m s-1]
435+
432436
integer :: i, j, m
433437
! integer :: isc, iec, jsc, jec
434438
real :: h_neglect, h_neglect_edge ! small thicknesses [H ~> m or kg m-2]
@@ -465,15 +469,30 @@ subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
465469
call remapping_core_h(CS%remapCS, GV%ke, h(i,j,:), tv%S(i,j,:), &
466470
CS%nk, CS%h(i,j,:), S(i,j,:), h_neglect, h_neglect_edge)
467471
enddo ; enddo
472+
! remap U and V from the ensemble member to the analysis grid
473+
do j=G%jsc,G%jec ; do i=G%iscB,G%iecB
474+
call remapping_core_h(CS%remapCS, GV%ke, h(i,j,:), model_u(i,j,:), &
475+
CS%nk, CS%h(i,j,:), U(i,j,:), h_neglect, h_neglect_edge)
476+
enddo ; enddo
477+
do j=G%jscB,G%jecB ; do i=G%isc,G%iec
478+
call remapping_core_h(CS%remapCS, GV%ke, h(i,j,:), model_v(i,j,:), &
479+
CS%nk, CS%h(i,j,:), V(i,j,:), h_neglect, h_neglect_edge)
480+
enddo ; enddo
481+
468482
! cast ensemble members to the analysis domain
469483
if (CS%prior_ave_counter < 0.5) then
470484
CS%Ocean_background_ave%T = 0.0
471485
CS%Ocean_background_ave%S = 0.0
486+
CS%Ocean_background_ave%U = 0.0
487+
CS%Ocean_background_ave%V = 0.0
472488
call MOM_mesg("ODA Reset background accumulation")
473489
endif
474490

475491
CS%Ocean_background_ave%T = CS%Ocean_background_ave%T + T
476492
CS%Ocean_background_ave%S = CS%Ocean_background_ave%S + S
493+
CS%Ocean_background_ave%U = CS%Ocean_background_ave%U + U
494+
CS%Ocean_background_ave%V = CS%Ocean_background_ave%V + V
495+
CS%Ocean_background_ave%SSH = CS%Ocean_background_ave%SSH + model_ssh
477496

478497
CS%prior_ave_counter = CS%prior_ave_counter + 1.0
479498

@@ -497,10 +516,16 @@ subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
497516

498517
CS%Ocean_background_ave%T = CS%Ocean_background_ave%T / (CS%prior_ave_counter)
499518
CS%Ocean_background_ave%S = CS%Ocean_background_ave%S / (CS%prior_ave_counter)
519+
CS%Ocean_background_ave%U = CS%Ocean_background_ave%U / (CS%prior_ave_counter)
520+
CS%Ocean_background_ave%V = CS%Ocean_background_ave%V / (CS%prior_ave_counter)
521+
CS%Ocean_background_ave%SSH = CS%Ocean_background_ave%SSH / (CS%prior_ave_counter)
500522

501523
do m=1,CS%ensemble_size
502524
call pass_var(CS%Ocean_background_ave%T,G%Domain)
503525
call pass_var(CS%Ocean_background_ave%S,G%Domain)
526+
call pass_var(CS%Ocean_background_ave%U,G%Domain)
527+
call pass_var(CS%Ocean_background_ave%V,G%Domain)
528+
call pass_var(CS%Ocean_background_ave%SSH,G%Domain)
504529
enddo
505530

506531
!! switch to global pelist
@@ -511,11 +536,14 @@ subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
511536
CS%mpp_domain, CS%Ocean_prior%T(:,:,:,m), complete=.true.)
512537
call redistribute_array(CS%domains(m)%mpp_domain, CS%Ocean_background_ave%S,&
513538
CS%mpp_domain, CS%Ocean_prior%S(:,:,:,m), complete=.true.)
539+
call redistribute_array(CS%domains(m)%mpp_domain, CS%Ocean_background_ave%SSH,&
540+
CS%mpp_domain, CS%Ocean_prior%SSH(:,:,m), complete=.true.)
514541
enddo
515542

516543
do m=1,CS%ensemble_size
517544
call pass_var(CS%Ocean_prior%T(:,:,:,m),CS%Grid%domain)
518545
call pass_var(CS%Ocean_prior%S(:,:,:,m),CS%Grid%domain)
546+
call pass_var(CS%Ocean_prior%SSH(:,:,m),CS%Grid%domain)
519547
enddo
520548

521549
CS%prior_ave_counter = 0.0
@@ -747,11 +775,11 @@ subroutine init_ocean_ensemble(CS,Grid,GV,ens_size)
747775

748776
allocate(CS%T(isd:ied,jsd:jed,nk,ens_size),source=0.0)
749777
allocate(CS%S(isd:ied,jsd:jed,nk,ens_size),source=0.0)
750-
! allocate(CS%SSH(is:ie,js:je,ens_size))
778+
allocate(CS%SSH(isd:ied,jsd:jed,ens_size),source=0.0)
751779
! allocate(CS%id_t(ens_size), source=-1)
752780
! allocate(CS%id_s(ens_size), source=-1)
753-
! allocate(CS%U(isdB:iedB,jsd:jed,nk,ens_size),source=0.0)
754-
! allocate(CS%V(isd:ied,jsdB:jedB,nk,ens_size),source=0.0)
781+
allocate(CS%U(isdB:iedB,jsd:jed,nk,ens_size),source=0.0)
782+
allocate(CS%V(isd:ied,jsdB:jedB,nk,ens_size),source=0.0)
755783
! allocate(CS%id_u(ens_size), source=-1)
756784
! allocate(CS%id_v(ens_size), source=-1)
757785
! allocate(CS%id_ssh(ens_size), source=-1)
@@ -773,11 +801,11 @@ subroutine init_ocean_background(CS,Grid,GV)
773801

774802
allocate(CS%T(isd:ied,jsd:jed,nk),source=0.0)
775803
allocate(CS%S(isd:ied,jsd:jed,nk),source=0.0)
776-
! allocate(CS%SSH(is:ie,js:je,ens_size))
804+
allocate(CS%SSH(isd:ied,jsd:jed),source=0.0)
777805
! allocate(CS%id_t(ens_size), source=-1)
778806
! allocate(CS%id_s(ens_size), source=-1)
779-
! allocate(CS%U(isdB:iedB,jsd:jed,nk,ens_size),source=0.0)
780-
! allocate(CS%V(isd:ied,jsdB:jedB,nk,ens_size),source=0.0)
807+
allocate(CS%U(isdB:iedB,jsd:jed,nk),source=0.0)
808+
allocate(CS%V(isd:ied,jsdB:jedB,nk),source=0.0)
781809
! allocate(CS%id_u(ens_size), source=-1)
782810
! allocate(CS%id_v(ens_size), source=-1)
783811
! allocate(CS%id_ssh(ens_size), source=-1)

0 commit comments

Comments
 (0)