9 use datetime_mod,
only: datetime
10 use fckit_configuration_module,
only: fckit_configuration
11 use kinds,
only: kind_real
35 procedure :: setup => soca_bkgerr_setup
38 procedure :: mult => soca_bkgerr_mult
53 subroutine soca_bkgerr_setup(self, f_conf, bkg, geom)
55 type(fckit_configuration),
intent(in) :: f_conf
57 type(
soca_geom),
target,
intent(in) :: geom
60 real(kind=kind_real) :: std
62 type(datetime) :: vdate
63 character(len=800) :: fname =
'soca_bkgerrsoca.nc'
68 call self%std_bkgerr%copy(bkg)
73 call self%std_bkgerr%read(f_conf, vdate)
76 do i=1,
size(self%std_bkgerr%fields)
77 field => self%std_bkgerr%fields(i)
78 select case(field%name)
79 case (
"tocn",
"socn",
"ssh")
80 field%val = sqrt(field%val)
85 call self%bounds%read(f_conf)
88 if ( f_conf%has(
"fixed_std_sst") )
then
89 call f_conf%get_or_die(
"fixed_std_sst", std)
90 call self%std_bkgerr%get(
"tocn", field)
91 field%val(:,:,1) = std
93 if ( f_conf%has(
"fixed_std_sss") )
then
94 call f_conf%get_or_die(
"fixed_std_sss", std)
95 call self%std_bkgerr%get(
"socn", field)
96 field%val(:,:,1) = std
103 do i=1,
size(self%std_bkgerr%fields)
104 field => self%std_bkgerr%fields(i)
105 select case(field%name)
106 case (
'sw',
'lw',
'lhf',
'shf',
'us')
107 call bkg%get(field%name, field_bkg)
108 field%val = abs(field_bkg%val) * 0.1_kind_real
110 call bkg%get(field%name, field_bkg)
111 field%val = abs(field_bkg%val) * 0.2_kind_real
116 call self%bounds%apply(self%std_bkgerr)
119 call self%std_bkgerr%write_file(fname)
121 end subroutine soca_bkgerr_setup
128 subroutine soca_bkgerr_mult(self, dxa, dxm)
133 type(
soca_field),
pointer :: field_m, field_a, field_e
135 integer :: isc, iec, jsc, jec, i, j, n
138 call dxa%check_congruent(dxm)
139 call dxa%check_subset(self%std_bkgerr)
142 isc=self%geom%isc; iec=self%geom%iec
143 jsc=self%geom%jsc; jec=self%geom%jec
146 do n=1,
size(dxa%fields)
147 field_a => dxa%fields(n)
148 call self%std_bkgerr%get(field_a%name, field_e)
149 call dxm%get(field_a%name, field_m)
152 field_m%val(i,j,:) = field_e%val(i,j,:) * field_a%val(i,j,:)
156 end subroutine soca_bkgerr_mult
variable transform: background error
Handle fields for the model.
Variable transform for background error.
bounds for background error
Holds all data and metadata related to a single field variable.
A collection of soca_field types representing a collective state or increment.