10 use fckit_mpi_module,
only: fckit_mpi_sum
29 real(kind_real),
parameter ::
bound = 5.0_kind_real
33 character(len=1024) :: prefix
56 subroutine diag_alloc(diag,nam,geom,bpar,samp,prefix,double_fit)
61 class(diag_type),
intent(inout) :: diag
62 type(nam_type),
intent(in) :: nam
63 type(geom_type),
intent(in) :: geom
64 type(bpar_type),
intent(in) :: bpar
65 type(samp_type),
intent(in) :: samp
66 character(len=*),
intent(in) :: prefix
67 logical,
intent(in) :: double_fit
73 if (nam%var_diag.or.nam%local_diag)
then 80 diag%prefix = trim(prefix)
83 allocate(diag%blk(0:diag%nc2a,bpar%nbe))
85 if (bpar%diag_block(ib))
then 87 call diag%blk(ic2a,ib)%alloc(nam,geom,bpar,samp,ic2a,ib,prefix,double_fit.and.nam%double_fit(bpar%b_to_v1(ib)))
103 class(diag_type),
intent(inout) :: diag
104 type(mpl_type),
intent(inout) :: mpl
105 type(nam_type),
intent(in) :: nam
106 type(geom_type),
intent(in) :: geom
107 type(bpar_type),
intent(in) :: bpar
108 type(samp_type),
intent(in) :: samp
111 integer :: ib,il0,ic2a
112 real(kind_real) :: rmse,norm,rmse_tot,norm_tot
113 real(kind_real) :: rh_c2a(samp%nc2a,geom%nl0),rv_c2a(samp%nc2a,geom%nl0)
114 real(kind_real),
allocatable :: rv_rfac_c2a(:,:),rv_coef_c2a(:,:)
117 if (bpar%fit_block(ib))
then 118 if (nam%local_diag)
then 122 if (diag%blk(0,ib)%double_fit)
then 123 allocate(rv_rfac_c2a(samp%nc2a,geom%nl0))
124 allocate(rv_coef_c2a(samp%nc2a,geom%nl0))
130 if (diag%blk(0,ib)%double_fit)
then 131 call msr(rv_rfac_c2a)
132 call msr(rv_coef_c2a)
138 rh_c2a(ic2a,il0) = diag%blk(ic2a,ib)%fit_rh(il0)
139 rv_c2a(ic2a,il0) = diag%blk(ic2a,ib)%fit_rv(il0)
140 if (diag%blk(0,ib)%double_fit)
then 141 rv_rfac_c2a(ic2a,il0) = diag%blk(ic2a,ib)%fit_rv_rfac(il0)
142 rv_coef_c2a(ic2a,il0) = diag%blk(ic2a,ib)%fit_rv_coef(il0)
146 if (
isnotmsr(rh_c2a(ic2a,il0)).and.
isnotmsr(diag%blk(0,ib)%fit_rh(il0)))
then 147 if ((rh_c2a(ic2a,il0)<diag%blk(0,ib)%fit_rh(il0)/
bound) &
148 & .or.(rh_c2a(ic2a,il0)>diag%blk(0,ib)%fit_rh(il0)*
bound))
call msr(rh_c2a(ic2a,il0))
150 if (
isnotmsr(rv_c2a(ic2a,il0)).and.
isnotmsr(diag%blk(0,ib)%fit_rv(il0)))
then 151 if ((rv_c2a(ic2a,il0)<diag%blk(0,ib)%fit_rv(il0)/
bound) &
152 & .or.(rv_c2a(ic2a,il0)>diag%blk(0,ib)%fit_rv(il0)*
bound))
call msr(rv_c2a(ic2a,il0))
157 call samp%diag_filter(mpl,nam,geom,il0,
'median',nam%diag_rhflt,rh_c2a(:,il0))
158 call samp%diag_filter(mpl,nam,geom,il0,
'median',nam%diag_rhflt,rv_c2a(:,il0))
159 if (diag%blk(0,ib)%double_fit)
then 160 call samp%diag_filter(mpl,nam,geom,il0,
'median',nam%diag_rhflt,rv_rfac_c2a(:,il0))
161 call samp%diag_filter(mpl,nam,geom,il0,
'median',nam%diag_rhflt,rv_coef_c2a(:,il0))
165 call samp%diag_filter(mpl,nam,geom,il0,
'average',nam%diag_rhflt,rh_c2a(:,il0))
166 call samp%diag_filter(mpl,nam,geom,il0,
'average',nam%diag_rhflt,rv_c2a(:,il0))
167 if (diag%blk(0,ib)%double_fit)
then 168 call samp%diag_filter(mpl,nam,geom,il0,
'average',nam%diag_rhflt,rv_rfac_c2a(:,il0))
169 call samp%diag_filter(mpl,nam,geom,il0,
'average',nam%diag_rhflt,rv_coef_c2a(:,il0))
173 call samp%diag_fill(mpl,nam,geom,il0,rh_c2a(:,il0))
174 call samp%diag_fill(mpl,nam,geom,il0,rv_c2a(:,il0))
175 if (diag%blk(0,ib)%double_fit)
then 176 call samp%diag_fill(mpl,nam,geom,il0,rv_rfac_c2a(:,il0))
177 call samp%diag_fill(mpl,nam,geom,il0,rv_coef_c2a(:,il0))
182 diag%blk(ic2a,ib)%fit_rh(il0) = rh_c2a(ic2a,il0)
183 diag%blk(ic2a,ib)%fit_rv(il0) = rv_c2a(ic2a,il0)
184 if (diag%blk(0,ib)%double_fit)
then 185 diag%blk(ic2a,ib)%fit_rv_rfac(il0) = rv_rfac_c2a(ic2a,il0)
186 diag%blk(ic2a,ib)%fit_rv_coef(il0) = rv_coef_c2a(ic2a,il0)
192 if (diag%blk(0,ib)%double_fit)
then 193 deallocate(rv_rfac_c2a)
194 deallocate(rv_coef_c2a)
200 call ver_smooth(mpl,geom%nl0,geom%vunitavg,nam%rvflt,diag%blk(ic2a,ib)%fit_rh)
201 call ver_smooth(mpl,geom%nl0,geom%vunitavg,nam%rvflt,diag%blk(ic2a,ib)%fit_rv)
202 if (diag%blk(0,ib)%double_fit)
then 203 call ver_smooth(mpl,geom%nl0,geom%vunitavg,nam%rvflt,diag%blk(ic2a,ib)%fit_rv_rfac)
204 call ver_smooth(mpl,geom%nl0,geom%vunitavg,nam%rvflt,diag%blk(ic2a,ib)%fit_rv_coef)
210 if (diag%blk(0,ib)%double_fit)
then 211 call fit_diag_dble(mpl,nam%nc3,bpar%nl0r(ib),geom%nl0,bpar%l0rl0b_to_l0(:,:,ib),geom%disth,diag%blk(ic2a,ib)%distv, &
212 & diag%blk(ic2a,ib)%fit_rh,diag%blk(ic2a,ib)%fit_rv,diag%blk(ic2a,ib)%fit_rv_rfac,diag%blk(ic2a,ib)%fit_rv_coef, &
213 & diag%blk(ic2a,ib)%fit)
215 call fit_diag(mpl,nam%nc3,bpar%nl0r(ib),geom%nl0,bpar%l0rl0b_to_l0(:,:,ib),geom%disth,diag%blk(ic2a,ib)%distv, &
216 & diag%blk(ic2a,ib)%fit_rh,diag%blk(ic2a,ib)%fit_rv,diag%blk(ic2a,ib)%fit)
224 rmse = rmse+sum(abs(diag%blk(ic2a,ib)%fit-diag%blk(ic2a,ib)%raw),mask=
isnotmsr(diag%blk(ic2a,ib)%raw))
225 norm = norm+
real(count(isnotmsr(diag%blk(ic2a,ib)%raw)),kind_real)
227 call mpl%f_comm%allreduce(rmse,rmse_tot,fckit_mpi_sum())
228 call mpl%f_comm%allreduce(norm,norm_tot,fckit_mpi_sum())
229 if (norm_tot>0.0) rmse_tot = sqrt(rmse_tot/norm_tot)
230 write(mpl%info,
'(a10,a,a,a,e15.8,a,i8,a)')
'',
'Fit RMSE for block ',trim(bpar%blockname(ib)),
': ',rmse_tot, &
231 &
' for ',int(norm_tot),
' diagnostic points' 241 subroutine diag_write(diag,mpl,nam,geom,bpar,io,samp)
246 class(diag_type),
intent(inout) :: diag
247 type(mpl_type),
intent(inout) :: mpl
248 type(nam_type),
intent(in) :: nam
249 type(geom_type),
intent(in) :: geom
250 type(bpar_type),
intent(in) :: bpar
251 type(io_type),
intent(in) :: io
252 type(samp_type),
intent(in) :: samp
255 integer :: ib,i,ic2,il0,il0i,iproc,ic2a,ildw,n
256 real(kind_real) :: fld_c2a(samp%nc2a,geom%nl0),fld_c2b(samp%nc2b,geom%nl0),fld_c0a(geom%nc0a,geom%nl0)
257 character(len=7) :: lonchar,latchar
258 character(len=1024) :: filename
261 filename = trim(nam%prefix)//
'_diag.nc' 263 if (bpar%diag_block(ib))
then 264 call diag%blk(0,ib)%write(mpl,nam,geom,bpar,filename)
269 if ((trim(diag%prefix)/=
'cov').and.(nam%var_diag.or.nam%local_diag))
then 271 if (bpar%fit_block(ib))
then 272 filename = trim(nam%prefix)//
'_local_diag_'//trim(diag%prefix)
274 if (nam%local_diag)
then 276 if (diag%blk(0,ib)%double_fit) n = n+2
282 fld_c2a(ic2a,:) = diag%blk(ic2a,ib)%raw_coef_ens
284 fld_c2a(ic2a,:) = diag%blk(ic2a,ib)%fit_rh*
reqkm 286 fld_c2a(ic2a,:) = diag%blk(ic2a,ib)%fit_rv
288 fld_c2a(ic2a,:) = diag%blk(ic2a,ib)%fit_rv_rfac
290 fld_c2a(ic2a,:) = diag%blk(ic2a,ib)%fit_rv_coef
295 call samp%com_AB%ext(mpl,geom%nl0,fld_c2a,fld_c2b)
297 il0i =
min(il0,geom%nl0i)
298 call samp%h(il0i)%apply(mpl,fld_c2b(:,il0),fld_c0a(:,il0))
303 call io%fld_write(mpl,nam,geom,filename,trim(bpar%blockname(ib))//
'_raw_coef_ens',fld_c0a)
305 call io%fld_write(mpl,nam,geom,filename,trim(bpar%blockname(ib))//
'_fit_rh',fld_c0a)
307 call io%fld_write(mpl,nam,geom,filename,trim(bpar%blockname(ib))//
'_fit_rv',fld_c0a)
309 call io%fld_write(mpl,nam,geom,filename,trim(bpar%blockname(ib))//
'_fit_rv_rfac',fld_c0a)
311 call io%fld_write(mpl,nam,geom,filename,trim(bpar%blockname(ib))//
'_fit_rv_coef',fld_c0a)
319 if (
isnotmsi(samp%nn_ldwv_index(ildw)))
then 320 ic2 = samp%nn_ldwv_index(ildw)
321 iproc = samp%c2_to_proc(ic2)
322 if (mpl%myproc==iproc)
then 324 write(lonchar,
'(f7.2)') nam%lon_ldwv(ildw)*
rad2deg 325 write(latchar,
'(f7.2)') nam%lat_ldwv(ildw)*
rad2deg 326 filename = trim(nam%prefix)//
'_diag_'//trim(adjustl(lonchar))//
'-'//trim(adjustl(latchar))//
'.nc' 329 ic2a = samp%c2_to_c2a(ic2)
331 if (bpar%diag_block(ib))
call diag%blk(ic2a,ib)%write(mpl,nam,geom,bpar,filename)
335 call mpl%warning(
'missing local profile')
350 class(diag_type),
intent(inout) :: diag
351 type(mpl_type),
intent(inout) :: mpl
352 type(nam_type),
intent(in) :: nam
353 type(geom_type),
intent(in) :: geom
354 type(bpar_type),
intent(in) :: bpar
355 type(io_type),
intent(in) :: io
356 type(samp_type),
intent(in) :: samp
357 type(avg_type),
intent(in) :: avg
358 character(len=*),
intent(in) :: prefix
361 integer :: ib,ic2a,ic2,il0
364 call diag%alloc(nam,geom,bpar,samp,prefix,.false.)
367 if (bpar%diag_block(ib))
then 368 write(mpl%info,
'(a10,a,a,a)')
'',
'Block ',trim(bpar%blockname(ib))
374 ic2 = samp%c2a_to_c2(ic2a)
378 diag%blk(ic2a,ib)%raw = avg%blk(ic2,ib)%m11
383 if (
isnotmsr(diag%blk(0,ib)%raw(1,bpar%il0rz(il0,ib),il0)))
then 384 write(mpl%info,
'(a13,a,i3,a,a,e9.2,a)')
'',
'Level: ',nam%levs(il0),
' ~> cov. at class zero: ',trim(mpl%peach), &
385 & diag%blk(0,ib)%raw(1,bpar%il0rz(il0,ib),il0),trim(mpl%black)
393 call diag%write(mpl,nam,geom,bpar,io,samp)
406 class(diag_type),
intent(inout) :: diag
407 type(mpl_type),
intent(inout) :: mpl
408 type(nam_type),
intent(in) :: nam
409 type(geom_type),
intent(in) :: geom
410 type(bpar_type),
intent(in) :: bpar
411 type(io_type),
intent(in) :: io
412 type(samp_type),
intent(in) :: samp
413 type(avg_type),
intent(in) :: avg
414 character(len=*),
intent(in) :: prefix
417 integer :: ib,ic2a,ic2,il0
418 type(diag_type) :: ndiag
421 call diag%alloc(nam,geom,bpar,samp,prefix,.true.)
422 call ndiag%alloc(nam,geom,bpar,samp,
'n'//trim(prefix),.false.)
425 if (bpar%diag_block(ib))
then 426 write(mpl%info,
'(a10,a,a,a)',advance=
'no')
'',
'Block ',trim(bpar%blockname(ib)),
':' 431 if (nam%var_diag)
then 434 ic2 = samp%c2a_to_c2(ic2a)
440 if (nam%var_filter)
then 441 diag%blk(ic2a,ib)%raw_coef_ens = avg%blk(ic2,ib)%m2flt
443 diag%blk(ic2a,ib)%raw_coef_ens = sum(avg%blk(ic2,ib)%m2,dim=2)/
real(avg%nsub,kind_real)
446 diag%blk(ic2a,ib)%raw_coef_ens = 1.0
451 call mpl%prog_init(diag%nc2a+1)
456 ic2 = samp%c2a_to_c2(ic2a)
462 diag%blk(ic2a,ib)%raw = avg%blk(ic2,ib)%cor
465 if (bpar%fit_block(ib))
call diag%blk(ic2a,ib)%fitting(mpl,nam,geom,bpar,samp)
468 call mpl%prog_print(ic2a+1)
470 ndiag%blk(0,ib)%raw = avg%blk(0,ib)%nc1a_cor
471 write(mpl%info,
'(a)')
'100%' 476 if (bpar%fit_block(ib))
then 477 if (
isnotmsr(diag%blk(0,ib)%fit_rh(il0)))
then 478 write(mpl%info,
'(a13,a,i3,a4,a16,a,f10.2,a,f10.2,a)')
'',
'Level: ',nam%levs(il0),
' ~> ',
'cor. support radii: ', &
479 & trim(mpl%aqua),diag%blk(0,ib)%fit_rh(il0)*
reqkm,trim(mpl%black)//
' km / '//trim(mpl%aqua), &
480 & diag%blk(0,ib)%fit_rv(il0),trim(mpl%black)//
' '//trim(mpl%vunitchar)
481 if (diag%blk(0,ib)%double_fit)
then 482 write(mpl%info,
'(a47,a,f10.2,a,f10.2,a)')
'cor. double fit: ',trim(mpl%aqua),diag%blk(0,ib)%fit_rv_rfac(il0), &
483 & trim(mpl%black)//
' / '//trim(mpl%aqua),diag%blk(0,ib)%fit_rv_coef(il0),trim(mpl%black)//
' '//trim(mpl%vunitchar)
493 call diag%fit_filter(mpl,nam,geom,bpar,samp)
496 call diag%write(mpl,nam,geom,bpar,io,samp)
497 call ndiag%write(mpl,nam,geom,bpar,io,samp)
510 class(diag_type),
intent(inout) :: diag
511 type(mpl_type),
intent(inout) :: mpl
512 type(nam_type),
intent(in) :: nam
513 type(geom_type),
intent(in) :: geom
514 type(bpar_type),
intent(in) :: bpar
515 type(io_type),
intent(in) :: io
516 type(samp_type),
intent(in) :: samp
517 type(avg_type),
intent(in) :: avg
518 character(len=*),
intent(in) :: prefix
521 integer :: ib,ic2a,ic2,il0
524 call diag%alloc(nam,geom,bpar,samp,prefix,.false.)
527 if (bpar%diag_block(ib))
then 528 write(mpl%info,
'(a10,a,a,a)',advance=
'no')
'',
'Block ',trim(bpar%blockname(ib)),
':' 532 call mpl%prog_init(diag%nc2a+1)
537 ic2 = samp%c2a_to_c2(ic2a)
541 call diag%blk(ic2a,ib)%localization(geom,bpar,avg%blk(ic2,ib))
544 call diag%blk(ic2a,ib)%normalization(geom,bpar,.true.)
545 if (trim(nam%method)==
'loc_norm') diag%blk(ic2a,ib)%raw_coef_ens = 1.0
548 if (bpar%fit_block(ib))
call diag%blk(ic2a,ib)%fitting(mpl,nam,geom,bpar,samp)
551 call mpl%prog_print(ic2a+1)
553 write(mpl%info,
'(a)')
'100%' 558 select case (trim(nam%method))
559 case (
'loc',
'hyb-avg',
'hyb-rnd',
'dual-ens')
560 if (
isnotmsr(diag%blk(0,ib)%raw_coef_ens(il0)))
then 561 write(mpl%info,
'(a13,a,i3,a4,a20,a,f10.2,a)')
'',
'Level: ',nam%levs(il0),
' ~> ',
'loc. at class zero: ', &
562 & trim(mpl%peach),diag%blk(0,ib)%raw_coef_ens(il0),trim(mpl%black)
566 if (bpar%fit_block(ib))
then 567 if (
isnotmsr(diag%blk(0,ib)%fit_rh(il0)))
then 568 select case (trim(nam%method))
569 case (
'loc',
'hyb-avg',
'hyb-rnd',
'dual-ens')
570 write(mpl%info,
'(a47)',advance=
'no')
'loc. support radii: ' 572 write(mpl%info,
'(a13,a,i3,a4,a20)',advance=
'no')
'',
'Level: ',nam%levs(il0),
' ~> ',
'loc. support radii: ' 574 write(mpl%info,
'(a,f10.2,a,f10.2,a)') trim(mpl%aqua),diag%blk(0,ib)%fit_rh(il0)*
reqkm, &
575 & trim(mpl%black)//
' km / '//trim(mpl%aqua),diag%blk(0,ib)%fit_rv(il0),trim(mpl%black)//
' '//trim(mpl%vunitchar)
584 call diag%fit_filter(mpl,nam,geom,bpar,samp)
587 call diag%write(mpl,nam,geom,bpar,io,samp)
600 class(diag_type),
intent(inout) :: diag
601 type(mpl_type),
intent(inout) :: mpl
602 type(nam_type),
intent(in) :: nam
603 type(geom_type),
intent(in) :: geom
604 type(bpar_type),
intent(in) :: bpar
605 type(io_type),
intent(in) :: io
606 type(samp_type),
intent(in) :: samp
607 type(avg_type),
intent(in) :: avg
608 type(avg_type),
intent(in) :: avg_sta
609 character(len=*),
intent(in) :: prefix
612 integer :: ib,ic2a,ic2,il0
615 call diag%alloc(nam,geom,bpar,samp,prefix,.false.)
618 if (bpar%diag_block(ib))
then 619 write(mpl%info,
'(a10,a,a,a)',advance=
'no')
'',
'Block ',trim(bpar%blockname(ib)),
':' 623 call mpl%prog_init(diag%nc2a+1)
628 ic2 = samp%c2a_to_c2(ic2a)
632 call diag%blk(ic2a,ib)%hybridization(geom,bpar,avg%blk(ic2,ib),avg_sta%blk(ic2,ib))
635 call diag%blk(ic2a,ib)%normalization(geom,bpar,.true.)
638 if (bpar%fit_block(ib))
call diag%blk(ic2a,ib)%fitting(mpl,nam,geom,bpar,samp)
641 call mpl%prog_print(ic2a+1)
643 write(mpl%info,
'(a)')
'100%' 648 if (
isnotmsr(diag%blk(0,ib)%raw_coef_ens(il0)))
then 649 write(mpl%info,
'(a13,a,i3,a4,a21,a,f10.2,a)')
'',
'Level: ',nam%levs(il0),
' ~> ',
'loc. at class zero: ', &
650 & trim(mpl%peach),diag%blk(0,ib)%raw_coef_ens(il0),trim(mpl%black)
653 if (bpar%fit_block(ib))
then 654 if (
isnotmsr(diag%blk(0,ib)%fit_rh(il0)))
then 655 write(mpl%info,
'(a48,a,f10.2,a,f10.2,a)')
'loc. support radii: ',trim(mpl%aqua),diag%blk(0,ib)%fit_rh(il0)*
reqkm, &
656 & trim(mpl%black)//
' km / '//trim(mpl%aqua),diag%blk(0,ib)%fit_rv(il0),trim(mpl%black)//
' '//trim(mpl%vunitchar)
661 write(mpl%info,
'(a13,a,a,f10.2,a)')
'',
'Raw static coeff.: ',trim(mpl%purple),diag%blk(0,ib)%raw_coef_sta,trim(mpl%black)
667 call diag%fit_filter(mpl,nam,geom,bpar,samp)
670 call diag%write(mpl,nam,geom,bpar,io,samp)
678 subroutine diag_dualens(diag,mpl,nam,geom,bpar,io,samp,avg,avg_lr,diag_lr,prefix,prefix_lr)
683 class(diag_type),
intent(inout) :: diag
684 type(mpl_type),
intent(inout) :: mpl
685 type(nam_type),
intent(in) :: nam
686 type(geom_type),
intent(in) :: geom
687 type(bpar_type),
intent(in) :: bpar
688 type(io_type),
intent(in) :: io
689 type(samp_type),
intent(in) :: samp
690 type(avg_type),
intent(in) :: avg
691 type(avg_type),
intent(in) :: avg_lr
692 type(diag_type),
intent(inout) :: diag_lr
693 character(len=*),
intent(in) :: prefix
694 character(len=*),
intent(in) :: prefix_lr
697 integer :: ib,ic2a,ic2,il0
700 call diag%alloc(nam,geom,bpar,samp,prefix,.false.)
701 call diag_lr%alloc(nam,geom,bpar,samp,prefix_lr,.false.)
704 if (bpar%diag_block(ib))
then 705 write(mpl%info,
'(a10,a,a,a)',advance=
'no')
'',
'Block ',trim(bpar%blockname(ib)),
':' 709 call mpl%prog_init(diag%nc2a+1)
714 ic2 = samp%c2a_to_c2(ic2a)
718 call diag%blk(ic2a,ib)%dualens(geom,bpar,avg%blk(ic2,ib),avg_lr%blk(ic2a,ib),diag_lr%blk(ic2a,ib))
721 call diag%blk(ic2a,ib)%normalization(geom,bpar,.true.)
722 call diag_lr%blk(ic2a,ib)%normalization(geom,bpar,.true.)
725 if (bpar%fit_block(ib))
then 726 call diag%blk(ic2a,ib)%fitting(mpl,nam,geom,bpar,samp)
727 call diag_lr%blk(ic2a,ib)%fitting(mpl,nam,geom,bpar,samp)
731 call mpl%prog_print(ic2a+1)
733 write(mpl%info,
'(a)')
'100%' 738 if (
isnotmsr(diag%blk(0,ib)%raw_coef_ens(il0)))
then 739 write(mpl%info,
'(a10,a,i3,a4,a21,a,f10.2,a)')
'',
'Level: ',nam%levs(il0),
' ~> ',
'loc. at class zero (HR): ', &
740 & trim(mpl%peach),diag%blk(0,ib)%raw_coef_ens(il0),trim(mpl%black)
743 if (
isnotmsr(diag%blk(0,ib)%raw_coef_ens(il0)))
then 744 write(mpl%info,
'(a45,a,f10.2,a)')
'loc. at class zero (LR): ',trim(mpl%peach),diag_lr%blk(0,ib)%raw_coef_ens(il0), &
748 if (bpar%fit_block(ib))
then 749 if (
isnotmsr(diag%blk(0,ib)%fit_rh(il0)))
then 750 write(mpl%info,
'(a45,a,f10.2,a,f10.2,a)')
'loc. support radii (HR): ',trim(mpl%aqua), &
751 & diag%blk(0,ib)%fit_rh(il0)*
reqkm,trim(mpl%black)//
' km / '//trim(mpl%aqua),diag_lr%blk(0,ib)%fit_rv(il0), &
752 & trim(mpl%black)//
' '//trim(mpl%vunitchar)
755 if (
isnotmsr(diag_lr%blk(0,ib)%fit_rh(il0)))
then 756 write(mpl%info,
'(a45,a,f10.2,a,f10.2,a)')
'loc. support radii (LR): ',trim(mpl%aqua), &
757 & diag_lr%blk(0,ib)%fit_rh(il0)*
reqkm,trim(mpl%black)//
' km / '//trim(mpl%aqua),diag_lr%blk(0,ib)%fit_rv(il0), &
758 & trim(mpl%black)//
' '//trim(mpl%vunitchar)
767 call diag%fit_filter(mpl,nam,geom,bpar,samp)
768 call diag_lr%fit_filter(mpl,nam,geom,bpar,samp)
771 call diag%write(mpl,nam,geom,bpar,io,samp)
772 call diag_lr%write(mpl,nam,geom,bpar,io,samp)
subroutine diag_correlation(diag, mpl, nam, geom, bpar, io, samp, avg, prefix)
subroutine diag_dualens(diag, mpl, nam, geom, bpar, io, samp, avg, avg_lr, diag_lr, prefix, prefix_lr)
subroutine diag_covariance(diag, mpl, nam, geom, bpar, io, samp, avg, prefix)
subroutine diag_write(diag, mpl, nam, geom, bpar, io, samp)
real(kind_real), parameter bound
subroutine diag_localization(diag, mpl, nam, geom, bpar, io, samp, avg, prefix)
integer, parameter, public kind_real
subroutine diag_fit_filter(diag, mpl, nam, geom, bpar, samp)
subroutine diag_hybridization(diag, mpl, nam, geom, bpar, io, samp, avg, avg_sta, prefix)
subroutine diag_alloc(diag, nam, geom, bpar, samp, prefix, double_fit)
real(fp), parameter, public pi