@@ -417,18 +417,22 @@ subroutine init_oda(Time, G, GV, US, diag_CS, CS)
417
417
end subroutine init_oda
418
418
419
419
! > 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 )
421
421
type (time_type), intent (in ) :: Time ! < The current model time
422
422
type (ocean_grid_type), pointer :: G ! < domain and grid information for ocean model
423
423
type (verticalGrid_type), intent (in ) :: GV ! < The ocean's vertical grid structure
424
424
real , dimension (SZI_(G),SZJ_(G),SZK_(GV)), intent (in ) :: h ! < Layer thicknesses [H ~> m or kg m-2]
425
425
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
426
429
427
430
type (ODA_CS), pointer :: CS ! < ocean DA control structure
428
431
real , dimension (SZI_(G),SZJ_(G),CS% nk) :: T ! Temperature on the analysis grid [C ~> degC]
429
432
real , dimension (SZI_(G),SZJ_(G),CS% nk) :: S ! Salinity on the analysis grid [S ~> ppt]
430
433
real , dimension (SZIB_(G),SZJ_(G),CS% nk) :: U ! < zonal velocity [L T-1 ~> m s-1]
431
434
real , dimension (SZI_(G),SZJB_(G),CS% nk) :: V ! < meridional velocity [L T-1 ~> m s-1]
435
+
432
436
integer :: i, j, m
433
437
! integer :: isc, iec, jsc, jec
434
438
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)
465
469
call remapping_core_h(CS% remapCS, GV% ke, h(i,j,:), tv% S(i,j,:), &
466
470
CS% nk, CS% h(i,j,:), S(i,j,:), h_neglect, h_neglect_edge)
467
471
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
+
468
482
! cast ensemble members to the analysis domain
469
483
if (CS% prior_ave_counter < 0.5 ) then
470
484
CS% Ocean_background_ave% T = 0.0
471
485
CS% Ocean_background_ave% S = 0.0
486
+ CS% Ocean_background_ave% U = 0.0
487
+ CS% Ocean_background_ave% V = 0.0
472
488
call MOM_mesg(" ODA Reset background accumulation" )
473
489
endif
474
490
475
491
CS% Ocean_background_ave% T = CS% Ocean_background_ave% T + T
476
492
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
477
496
478
497
CS% prior_ave_counter = CS% prior_ave_counter + 1.0
479
498
@@ -497,10 +516,16 @@ subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
497
516
498
517
CS% Ocean_background_ave% T = CS% Ocean_background_ave% T / (CS% prior_ave_counter)
499
518
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)
500
522
501
523
do m= 1 ,CS% ensemble_size
502
524
call pass_var(CS% Ocean_background_ave% T,G% Domain)
503
525
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)
504
529
enddo
505
530
506
531
! ! switch to global pelist
@@ -511,11 +536,14 @@ subroutine set_prior_tracer(Time, G, GV, h, tv, u, v, CS)
511
536
CS% mpp_domain, CS% Ocean_prior% T(:,:,:,m), complete= .true. )
512
537
call redistribute_array(CS% domains(m)% mpp_domain, CS% Ocean_background_ave% S,&
513
538
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. )
514
541
enddo
515
542
516
543
do m= 1 ,CS% ensemble_size
517
544
call pass_var(CS% Ocean_prior% T(:,:,:,m),CS% Grid% domain)
518
545
call pass_var(CS% Ocean_prior% S(:,:,:,m),CS% Grid% domain)
546
+ call pass_var(CS% Ocean_prior% SSH(:,:,m),CS% Grid% domain)
519
547
enddo
520
548
521
549
CS% prior_ave_counter = 0.0
@@ -747,11 +775,11 @@ subroutine init_ocean_ensemble(CS,Grid,GV,ens_size)
747
775
748
776
allocate (CS% T(isd:ied,jsd:jed,nk,ens_size),source= 0.0 )
749
777
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 )
751
779
! allocate(CS%id_t(ens_size), source=-1)
752
780
! 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 )
755
783
! allocate(CS%id_u(ens_size), source=-1)
756
784
! allocate(CS%id_v(ens_size), source=-1)
757
785
! allocate(CS%id_ssh(ens_size), source=-1)
@@ -773,11 +801,11 @@ subroutine init_ocean_background(CS,Grid,GV)
773
801
774
802
allocate (CS% T(isd:ied,jsd:jed,nk),source= 0.0 )
775
803
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 )
777
805
! allocate(CS%id_t(ens_size), source=-1)
778
806
! 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 )
781
809
! allocate(CS%id_u(ens_size), source=-1)
782
810
! allocate(CS%id_v(ens_size), source=-1)
783
811
! allocate(CS%id_ssh(ens_size), source=-1)
0 commit comments