Diagnostics not more naturally calculated elsewhere are computed here.
197 type(ocean_grid_type),
intent(inout) :: G
198 type(verticalGrid_type),
intent(in) :: GV
199 type(unit_scale_type),
intent(in) :: US
200 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
202 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
204 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
206 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
209 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
212 type(thermo_var_ptrs),
intent(in) :: tv
214 type(accel_diag_ptrs),
intent(in) :: ADp
216 type(cont_diag_ptrs),
intent(in) :: CDp
218 real,
dimension(:,:),
pointer :: p_surf
221 real,
intent(in) :: dt
223 type(diag_grid_storage),
intent(in) :: diag_pre_sync
224 type(diagnostics_CS),
intent(inout) :: CS
226 real,
dimension(SZI_(G),SZJ_(G)), &
227 optional,
intent(in) :: eta_bt
233 integer,
dimension(2) :: EOSdom
234 integer i, j, k, is, ie, js, je, Isq, Ieq, Jsq, Jeq, nz, nkmb
236 real :: Rcv(SZI_(G),SZJ_(G),SZK_(G))
237 real :: work_3d(SZI_(G),SZJ_(G),SZK_(G))
238 real :: work_2d(SZI_(G),SZJ_(G))
239 real :: rho_in_situ(SZI_(G))
241 real,
allocatable,
dimension(:,:) :: &
242 hf_du_dt_2d, hf_dv_dt_2d
245 real :: surface_field(SZI_(G),SZJ_(G))
246 real :: pressure_1d(SZI_(G))
251 real :: absurdly_small_freq2
255 real,
dimension(SZK_(G)) :: temp_layer_ave, salt_layer_ave
256 real :: thetaoga, soga, masso, tosga, sosga
258 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec
259 isq = g%IscB ; ieq = g%IecB ; jsq = g%JscB ; jeq = g%JecB
260 nz = g%ke ; nkmb = gv%nk_rho_varies
263 absurdly_small_freq2 = 1e-34*us%T_to_s**2
265 if (loc(cs)==0)
call mom_error(fatal, &
266 "calculate_diagnostic_fields: Module must be initialized before used.")
268 call calculate_derivs(dt, g, cs)
271 call diag_save_grids(cs%diag)
272 call diag_copy_storage_to_diag(cs%diag, diag_pre_sync)
274 if (cs%id_h_pre_sync > 0) &
275 call post_data(cs%id_h_pre_sync, diag_pre_sync%h_state, cs%diag, alt_h = diag_pre_sync%h_state)
277 if (cs%id_du_dt>0)
call post_data(cs%id_du_dt, cs%du_dt, cs%diag, alt_h = diag_pre_sync%h_state)
279 if (cs%id_dv_dt>0)
call post_data(cs%id_dv_dt, cs%dv_dt, cs%diag, alt_h = diag_pre_sync%h_state)
281 if (cs%id_dh_dt>0)
call post_data(cs%id_dh_dt, cs%dh_dt, cs%diag, alt_h = diag_pre_sync%h_state)
301 if (cs%id_hf_du_dt_2d > 0)
then
302 allocate(hf_du_dt_2d(g%IsdB:g%IedB,g%jsd:g%jed))
303 hf_du_dt_2d(:,:) = 0.0
304 do k=1,nz ;
do j=js,je ;
do i=isq,ieq
305 hf_du_dt_2d(i,j) = hf_du_dt_2d(i,j) + cs%du_dt(i,j,k) * adp%diag_hfrac_u(i,j,k)
306 enddo ;
enddo ;
enddo
307 call post_data(cs%id_hf_du_dt_2d, hf_du_dt_2d, cs%diag)
308 deallocate(hf_du_dt_2d)
311 if (cs%id_hf_dv_dt_2d > 0)
then
312 allocate(hf_dv_dt_2d(g%isd:g%ied,g%JsdB:g%JedB))
313 hf_dv_dt_2d(:,:) = 0.0
314 do k=1,nz ;
do j=jsq,jeq ;
do i=is,ie
315 hf_dv_dt_2d(i,j) = hf_dv_dt_2d(i,j) + cs%dv_dt(i,j,k) * adp%diag_hfrac_v(i,j,k)
316 enddo ;
enddo ;
enddo
317 call post_data(cs%id_hf_dv_dt_2d, hf_dv_dt_2d, cs%diag)
318 deallocate(hf_dv_dt_2d)
321 call diag_restore_grids(cs%diag)
323 call calculate_energy_diagnostics(u, v, h, uh, vh, adp, cdp, g, gv, us, cs)
332 if (nkmb==0 .and. nz > 1) nkmb = nz
334 if (cs%id_u > 0)
call post_data(cs%id_u, u, cs%diag)
336 if (cs%id_v > 0)
call post_data(cs%id_v, v, cs%diag)
338 if (cs%id_h > 0)
call post_data(cs%id_h, h, cs%diag)
340 if (
associated(cs%e))
then
341 call find_eta(h, tv, g, gv, us, cs%e, eta_bt)
342 if (cs%id_e > 0)
call post_data(cs%id_e, cs%e, cs%diag)
345 if (
associated(cs%e_D))
then
346 if (
associated(cs%e))
then
347 do k=1,nz+1 ;
do j=js,je ;
do i=is,ie
348 cs%e_D(i,j,k) = cs%e(i,j,k) + g%bathyT(i,j)
349 enddo ;
enddo ;
enddo
351 call find_eta(h, tv, g, gv, us, cs%e_D, eta_bt)
352 do k=1,nz+1 ;
do j=js,je ;
do i=is,ie
353 cs%e_D(i,j,k) = cs%e_D(i,j,k) + g%bathyT(i,j)
354 enddo ;
enddo ;
enddo
357 if (cs%id_e_D > 0)
call post_data(cs%id_e_D, cs%e_D, cs%diag)
361 if (cs%id_masscello > 0)
then
362 do k=1,nz;
do j=js,je ;
do i=is,ie
363 work_3d(i,j,k) = gv%H_to_kg_m2*h(i,j,k)
364 enddo ;
enddo ;
enddo
365 call post_data(cs%id_masscello, work_3d, cs%diag)
369 if (cs%id_masso > 0)
then
371 do k=1,nz ;
do j=js,je ;
do i=is,ie
372 work_2d(i,j) = work_2d(i,j) + (gv%H_to_kg_m2*h(i,j,k)) * us%L_to_m**2*g%areaT(i,j)
373 enddo ;
enddo ;
enddo
374 masso = reproducing_sum(work_2d)
375 call post_data(cs%id_masso, masso, cs%diag)
379 if (cs%id_thkcello>0 .or. cs%id_volcello>0)
then
380 if (gv%Boussinesq)
then
381 if (cs%id_thkcello > 0)
then ;
if (gv%H_to_Z == 1.0)
then
382 call post_data(cs%id_thkcello, h, cs%diag)
384 do k=1,nz;
do j=js,je ;
do i=is,ie
385 work_3d(i,j,k) = gv%H_to_Z*h(i,j,k)
386 enddo ;
enddo ;
enddo
387 call post_data(cs%id_thkcello, work_3d, cs%diag)
389 if (cs%id_volcello > 0)
then
390 do k=1,nz;
do j=js,je ;
do i=is,ie
391 work_3d(i,j,k) = ( gv%H_to_Z*h(i,j,k) ) * us%Z_to_m*us%L_to_m**2*g%areaT(i,j)
392 enddo ;
enddo ;
enddo
393 call post_data(cs%id_volcello, work_3d, cs%diag)
396 eosdom(:) = eos_domain(g%HI)
398 if (
associated(p_surf))
then
400 pressure_1d(i) = p_surf(i,j)
409 pressure_1d(i) = pressure_1d(i) + 0.5*(gv%H_to_RZ*gv%g_Earth)*h(i,j,k)
412 call calculate_density(tv%T(:,j,k), tv%S(:,j,k), pressure_1d, rho_in_situ, &
413 tv%eqn_of_state, eosdom)
415 work_3d(i,j,k) = (gv%H_to_RZ*h(i,j,k)) / rho_in_situ(i)
418 pressure_1d(i) = pressure_1d(i) + 0.5*(gv%H_to_RZ*gv%g_Earth)*h(i,j,k)
422 if (cs%id_thkcello > 0)
call post_data(cs%id_thkcello, work_3d, cs%diag)
423 if (cs%id_volcello > 0)
then
424 do k=1,nz;
do j=js,je ;
do i=is,ie
425 work_3d(i,j,k) = us%Z_to_m*us%L_to_m**2*g%areaT(i,j) * work_3d(i,j,k)
426 enddo ;
enddo ;
enddo
427 call post_data(cs%id_volcello, work_3d, cs%diag)
433 if (tv%T_is_conT)
then
437 if ((cs%id_Tpot > 0) .or. (cs%id_tob > 0))
then
438 do k=1,nz ;
do j=js,je ;
do i=is,ie
439 work_3d(i,j,k) = gsw_pt_from_ct(tv%S(i,j,k),tv%T(i,j,k))
440 enddo ;
enddo ;
enddo
441 if (cs%id_Tpot > 0)
call post_data(cs%id_Tpot, work_3d, cs%diag)
442 if (cs%id_tob > 0)
call post_data(cs%id_tob, work_3d(:,:,nz), cs%diag, mask=g%mask2dT)
446 if (cs%id_tob > 0)
call post_data(cs%id_tob, tv%T(:,:,nz), cs%diag, mask=g%mask2dT)
450 if (tv%S_is_absS)
then
454 if ((cs%id_Sprac > 0) .or. (cs%id_sob > 0))
then
455 do k=1,nz ;
do j=js,je ;
do i=is,ie
456 work_3d(i,j,k) = gsw_sp_from_sr(tv%S(i,j,k))
457 enddo ;
enddo ;
enddo
458 if (cs%id_Sprac > 0)
call post_data(cs%id_Sprac, work_3d, cs%diag)
459 if (cs%id_sob > 0)
call post_data(cs%id_sob, work_3d(:,:,nz), cs%diag, mask=g%mask2dT)
463 if (cs%id_sob > 0)
call post_data(cs%id_sob, tv%S(:,:,nz), cs%diag, mask=g%mask2dT)
467 if (cs%id_thetaoga>0)
then
468 thetaoga = global_volume_mean(tv%T, h, g, gv)
469 call post_data(cs%id_thetaoga, thetaoga, cs%diag)
473 if (cs%id_tosga > 0)
then
474 do j=js,je ;
do i=is,ie
475 surface_field(i,j) = tv%T(i,j,1)
477 tosga = global_area_mean(surface_field, g)
478 call post_data(cs%id_tosga, tosga, cs%diag)
482 if (cs%id_soga>0)
then
483 soga = global_volume_mean(tv%S, h, g, gv)
484 call post_data(cs%id_soga, soga, cs%diag)
488 if (cs%id_sosga > 0)
then
489 do j=js,je ;
do i=is,ie
490 surface_field(i,j) = tv%S(i,j,1)
492 sosga = global_area_mean(surface_field, g)
493 call post_data(cs%id_sosga, sosga, cs%diag)
497 if (cs%id_temp_layer_ave>0)
then
498 temp_layer_ave = global_layer_mean(tv%T, h, g, gv)
499 call post_data(cs%id_temp_layer_ave, temp_layer_ave, cs%diag)
503 if (cs%id_salt_layer_ave>0)
then
504 salt_layer_ave = global_layer_mean(tv%S, h, g, gv)
505 call post_data(cs%id_salt_layer_ave, salt_layer_ave, cs%diag)
508 call calculate_vertical_integrals(h, tv, p_surf, g, gv, us, cs)
510 if ((cs%id_Rml > 0) .or. (cs%id_Rcv > 0) .or.
associated(cs%h_Rlay) .or. &
511 associated(cs%uh_Rlay) .or.
associated(cs%vh_Rlay) .or. &
512 associated(cs%uhGM_Rlay) .or.
associated(cs%vhGM_Rlay))
then
514 if (
associated(tv%eqn_of_state))
then
515 eosdom(:) = eos_domain(g%HI, halo=1)
516 pressure_1d(:) = tv%P_Ref
518 do k=1,nz ;
do j=js-1,je+1
519 call calculate_density(tv%T(:,j,k), tv%S(:,j,k), pressure_1d, rcv(:,j,k), tv%eqn_of_state, &
523 do k=1,nz ;
do j=js-1,je+1 ;
do i=is-1,ie+1
524 rcv(i,j,k) = gv%Rlay(k)
525 enddo ;
enddo ;
enddo
527 if (cs%id_Rml > 0)
call post_data(cs%id_Rml, rcv, cs%diag)
528 if (cs%id_Rcv > 0)
call post_data(cs%id_Rcv, rcv, cs%diag)
530 if (
associated(cs%h_Rlay))
then
535 do k=1,nkmb ;
do i=is,ie
536 cs%h_Rlay(i,j,k) = 0.0
538 do k=nkmb+1,nz ;
do i=is,ie
539 cs%h_Rlay(i,j,k) = h(i,j,k)
541 do k=1,nkmb ;
do i=is,ie
542 call find_weights(gv%Rlay, rcv(i,j,k), k_list, nz, wt, wt_p)
543 cs%h_Rlay(i,j,k_list) = cs%h_Rlay(i,j,k_list) + h(i,j,k)*wt
544 cs%h_Rlay(i,j,k_list+1) = cs%h_Rlay(i,j,k_list+1) + h(i,j,k)*wt_p
548 if (cs%id_h_Rlay > 0)
call post_data(cs%id_h_Rlay, cs%h_Rlay, cs%diag)
551 if (
associated(cs%uh_Rlay))
then
556 do k=1,nkmb ;
do i=isq,ieq
557 cs%uh_Rlay(i,j,k) = 0.0
559 do k=nkmb+1,nz ;
do i=isq,ieq
560 cs%uh_Rlay(i,j,k) = uh(i,j,k)
563 do k=1,nkmb ;
do i=isq,ieq
564 call find_weights(gv%Rlay, 0.5*(rcv(i,j,k)+rcv(i+1,j,k)), k_list, nz, wt, wt_p)
565 cs%uh_Rlay(i,j,k_list) = cs%uh_Rlay(i,j,k_list) + uh(i,j,k)*wt
566 cs%uh_Rlay(i,j,k_list+1) = cs%uh_Rlay(i,j,k_list+1) + uh(i,j,k)*wt_p
570 if (cs%id_uh_Rlay > 0)
call post_data(cs%id_uh_Rlay, cs%uh_Rlay, cs%diag)
573 if (
associated(cs%vh_Rlay))
then
578 do k=1,nkmb ;
do i=is,ie
579 cs%vh_Rlay(i,j,k) = 0.0
581 do k=nkmb+1,nz ;
do i=is,ie
582 cs%vh_Rlay(i,j,k) = vh(i,j,k)
584 do k=1,nkmb ;
do i=is,ie
585 call find_weights(gv%Rlay, 0.5*(rcv(i,j,k)+rcv(i,j+1,k)), k_list, nz, wt, wt_p)
586 cs%vh_Rlay(i,j,k_list) = cs%vh_Rlay(i,j,k_list) + vh(i,j,k)*wt
587 cs%vh_Rlay(i,j,k_list+1) = cs%vh_Rlay(i,j,k_list+1) + vh(i,j,k)*wt_p
591 if (cs%id_vh_Rlay > 0)
call post_data(cs%id_vh_Rlay, cs%vh_Rlay, cs%diag)
594 if (
associated(cs%uhGM_Rlay) .and.
associated(cdp%uhGM))
then
599 do k=1,nkmb ;
do i=isq,ieq
600 cs%uhGM_Rlay(i,j,k) = 0.0
602 do k=nkmb+1,nz ;
do i=isq,ieq
603 cs%uhGM_Rlay(i,j,k) = cdp%uhGM(i,j,k)
605 do k=1,nkmb ;
do i=isq,ieq
606 call find_weights(gv%Rlay, 0.5*(rcv(i,j,k)+rcv(i+1,j,k)), k_list, nz, wt, wt_p)
607 cs%uhGM_Rlay(i,j,k_list) = cs%uhGM_Rlay(i,j,k_list) + cdp%uhGM(i,j,k)*wt
608 cs%uhGM_Rlay(i,j,k_list+1) = cs%uhGM_Rlay(i,j,k_list+1) + cdp%uhGM(i,j,k)*wt_p
612 if (cs%id_uhGM_Rlay > 0)
call post_data(cs%id_uhGM_Rlay, cs%uhGM_Rlay, cs%diag)
615 if (
associated(cs%vhGM_Rlay) .and.
associated(cdp%vhGM))
then
620 do k=1,nkmb ;
do i=is,ie
621 cs%vhGM_Rlay(i,j,k) = 0.0
623 do k=nkmb+1,nz ;
do i=is,ie
624 cs%vhGM_Rlay(i,j,k) = cdp%vhGM(i,j,k)
626 do k=1,nkmb ;
do i=is,ie
627 call find_weights(gv%Rlay, 0.5*(rcv(i,j,k)+rcv(i,j+1,k)), k_list, nz, wt, wt_p)
628 cs%vhGM_Rlay(i,j,k_list) = cs%vhGM_Rlay(i,j,k_list) + cdp%vhGM(i,j,k)*wt
629 cs%vhGM_Rlay(i,j,k_list+1) = cs%vhGM_Rlay(i,j,k_list+1) + cdp%vhGM(i,j,k)*wt_p
633 if (cs%id_vhGM_Rlay > 0)
call post_data(cs%id_vhGM_Rlay, cs%vhGM_Rlay, cs%diag)
637 if (
associated(tv%eqn_of_state))
then
638 eosdom(:) = eos_domain(g%HI)
639 if (cs%id_rhopot0 > 0)
then
642 do k=1,nz ;
do j=js,je
643 call calculate_density(tv%T(:,j,k), tv%S(:,j,k), pressure_1d, rcv(:,j,k), &
644 tv%eqn_of_state, eosdom)
646 if (cs%id_rhopot0 > 0)
call post_data(cs%id_rhopot0, rcv, cs%diag)
648 if (cs%id_rhopot2 > 0)
then
649 pressure_1d(:) = 2.0e7*us%kg_m3_to_R*us%m_s_to_L_T**2
651 do k=1,nz ;
do j=js,je
652 call calculate_density(tv%T(:,j,k), tv%S(:,j,k), pressure_1d, rcv(:,j,k), &
653 tv%eqn_of_state, eosdom)
655 if (cs%id_rhopot2 > 0)
call post_data(cs%id_rhopot2, rcv, cs%diag)
657 if (cs%id_rhoinsitu > 0)
then
662 pressure_1d(:) = pressure_1d(:) + 0.5 * h(:,j,k) * (gv%H_to_RZ*gv%g_Earth)
663 call calculate_density(tv%T(:,j,k), tv%S(:,j,k), pressure_1d, rcv(:,j,k), &
664 tv%eqn_of_state, eosdom)
665 pressure_1d(:) = pressure_1d(:) + 0.5 * h(:,j,k) * (gv%H_to_RZ*gv%g_Earth)
668 if (cs%id_rhoinsitu > 0)
call post_data(cs%id_rhoinsitu, rcv, cs%diag)
671 if (cs%id_drho_dT > 0 .or. cs%id_drho_dS > 0)
then
676 pressure_1d(:) = pressure_1d(:) + 0.5 * h(:,j,k) * gv%H_to_Pa
678 call calculate_density_derivs(tv%T(:,j,k),tv%S(:,j,k),pressure_1d, &
679 rcv(:,j,k),work_3d(:,j,k),is,ie-is+1, tv%eqn_of_state)
680 pressure_1d(:) = pressure_1d(:) + 0.5 * h(:,j,k) * gv%H_to_Pa
683 if (cs%id_drho_dT > 0)
call post_data(cs%id_drho_dT, rcv, cs%diag)
684 if (cs%id_drho_dS > 0)
call post_data(cs%id_drho_dS, work_3d, cs%diag)
688 if ((cs%id_cg1>0) .or. (cs%id_Rd1>0) .or. (cs%id_cfl_cg1>0) .or. &
689 (cs%id_cfl_cg1_x>0) .or. (cs%id_cfl_cg1_y>0))
then
690 call wave_speed(h, tv, g, gv, us, cs%cg1, cs%wave_speed_CSp)
691 if (cs%id_cg1>0)
call post_data(cs%id_cg1, cs%cg1, cs%diag)
692 if (cs%id_Rd1>0)
then
694 do j=js,je ;
do i=is,ie
696 f2_h = absurdly_small_freq2 + 0.25 * &
697 ((g%CoriolisBu(i,j)**2 + g%CoriolisBu(i-1,j-1)**2) + &
698 (g%CoriolisBu(i-1,j)**2 + g%CoriolisBu(i,j-1)**2))
699 mag_beta = sqrt(0.5 * ( &
700 (((g%CoriolisBu(i,j)-g%CoriolisBu(i-1,j)) * g%IdxCv(i,j))**2 + &
701 ((g%CoriolisBu(i,j-1)-g%CoriolisBu(i-1,j-1)) * g%IdxCv(i,j-1))**2) + &
702 (((g%CoriolisBu(i,j)-g%CoriolisBu(i,j-1)) * g%IdyCu(i,j))**2 + &
703 ((g%CoriolisBu(i-1,j)-g%CoriolisBu(i-1,j-1)) * g%IdyCu(i-1,j))**2) ))
704 cs%Rd1(i,j) = cs%cg1(i,j) / sqrt(f2_h + cs%cg1(i,j) * mag_beta)
707 call post_data(cs%id_Rd1, cs%Rd1, cs%diag)
709 if (cs%id_cfl_cg1>0)
then
710 do j=js,je ;
do i=is,ie
711 cs%cfl_cg1(i,j) = (dt*cs%cg1(i,j)) * (g%IdxT(i,j) + g%IdyT(i,j))
713 call post_data(cs%id_cfl_cg1, cs%cfl_cg1, cs%diag)
715 if (cs%id_cfl_cg1_x>0)
then
716 do j=js,je ;
do i=is,ie
717 cs%cfl_cg1_x(i,j) = (dt*cs%cg1(i,j)) * g%IdxT(i,j)
719 call post_data(cs%id_cfl_cg1_x, cs%cfl_cg1_x, cs%diag)
721 if (cs%id_cfl_cg1_y>0)
then
722 do j=js,je ;
do i=is,ie
723 cs%cfl_cg1_y(i,j) = (dt*cs%cg1(i,j)) * g%IdyT(i,j)
725 call post_data(cs%id_cfl_cg1_y, cs%cfl_cg1_y, cs%diag)
728 if ((cs%id_cg_ebt>0) .or. (cs%id_Rd_ebt>0) .or. (cs%id_p_ebt>0))
then
729 if (cs%id_p_ebt>0)
then
730 call wave_speed(h, tv, g, gv, us, cs%cg1, cs%wave_speed_CSp, use_ebt_mode=.true., &
731 mono_n2_column_fraction=cs%mono_N2_column_fraction, &
732 mono_n2_depth=cs%mono_N2_depth, modal_structure=cs%p_ebt)
733 call post_data(cs%id_p_ebt, cs%p_ebt, cs%diag)
735 call wave_speed(h, tv, g, gv, us, cs%cg1, cs%wave_speed_CSp, use_ebt_mode=.true., &
736 mono_n2_column_fraction=cs%mono_N2_column_fraction, &
737 mono_n2_depth=cs%mono_N2_depth)
739 if (cs%id_cg_ebt>0)
call post_data(cs%id_cg_ebt, cs%cg1, cs%diag)
740 if (cs%id_Rd_ebt>0)
then
742 do j=js,je ;
do i=is,ie
744 f2_h = absurdly_small_freq2 + 0.25 * &
745 ((g%CoriolisBu(i,j)**2 + g%CoriolisBu(i-1,j-1)**2) + &
746 (g%CoriolisBu(i-1,j)**2 + g%CoriolisBu(i,j-1)**2))
747 mag_beta = sqrt(0.5 * ( &
748 (((g%CoriolisBu(i,j)-g%CoriolisBu(i-1,j)) * g%IdxCv(i,j))**2 + &
749 ((g%CoriolisBu(i,j-1)-g%CoriolisBu(i-1,j-1)) * g%IdxCv(i,j-1))**2) + &
750 (((g%CoriolisBu(i,j)-g%CoriolisBu(i,j-1)) * g%IdyCu(i,j))**2 + &
751 ((g%CoriolisBu(i-1,j)-g%CoriolisBu(i-1,j-1)) * g%IdyCu(i-1,j))**2) ))
752 cs%Rd1(i,j) = cs%cg1(i,j) / sqrt(f2_h + cs%cg1(i,j) * mag_beta)
755 call post_data(cs%id_Rd_ebt, cs%Rd1, cs%diag)