LCOV - code coverage report
Current view: top level - dynamics/fv - diag_dynvar_ic.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 11 34 32.4 %
Date: 2025-03-14 01:21:06 Functions: 1 1 100.0 %

          Line data    Source code
       1             : !-----------------------------------------------------------------------
       2             : !BOP
       3             : ! !ROUTINE:  diag_dynvar_ic --- record state variables to IC file
       4             : !
       5             : ! !INTERFACE:
       6       16128 :   subroutine diag_dynvar_ic(grid, phis, ps, t3, u3s, v3s, tracer)
       7             : 
       8             : ! !USES:
       9             :     use shr_kind_mod , only: r8 => shr_kind_r8
      10             :     use cam_history  , only: outfld, write_inithist
      11             :     use constituents , only: cnst_name, pcnst, cnst_type
      12             :     use dynamics_vars, only: T_FVDYCORE_GRID
      13             : 
      14             :     implicit none
      15             : !
      16             : !-----------------------------------------------------------------------
      17             : !
      18             : ! !INPUT PARAMETERS:
      19             : !
      20             :     type (T_FVDYCORE_GRID), intent(in) :: grid
      21             : ! surface geopotential (grav*zs)
      22             :     real(r8), intent(in) :: phis(grid%ifirstxy:grid%ilastxy,            &
      23             :                                  grid%jfirstxy:grid%jlastxy)
      24             : ! Surface pressure (pa)   
      25             :     real(r8), intent(in) :: ps  (grid%ifirstxy:grid%ilastxy,            &
      26             :                                  grid%jfirstxy:grid%jlastxy)
      27             : ! Temperature (K)
      28             :     real(r8), intent(in) :: t3  (grid%ifirstxy:grid%ilastxy,            &
      29             :                                  grid%jfirstxy:grid%jlastxy, grid%km )  
      30             : ! u wind velocities, staggered grid
      31             :     real(r8), intent(in) :: u3s (grid%ifirstxy:grid%ilastxy,            &
      32             :                                  grid%jfirstxy:grid%jlastxy, grid%km)
      33             : ! v wind velocities, staggered grid
      34             :     real(r8), intent(in) :: v3s (grid%ifirstxy:grid%ilastxy,            &
      35             :                                  grid%jfirstxy:grid%jlastxy, grid%km)
      36             : ! Tracers
      37             :     real(r8), intent(in) :: tracer (grid%ifirstxy:grid%ilastxy,          &
      38             :                                     grid%jfirstxy:grid%jlastxy,          &
      39             :                                     grid%km,grid%ntotq)
      40             : 
      41             : ! !HISTORY:
      42             : !   01.01.01   XXXXXX  Delivery
      43             : !   05.07.12   Sawyer  Simplified interface with grid argument, ProTeX
      44             : !   06.03.22   Sawyer  Rewritten for XY decomposition
      45             : !   06.06.28   Sawyer  T3 changed from IKJ to IJK indexing
      46             : !   06.07.01   Sawyer  Transitioned tracers q3 to T_TRACERS
      47             : !
      48             : !EOP
      49             : !-----------------------------------------------------------------------
      50             : !BOC
      51             : !---------------------------Local workspace-----------------------------
      52             :     integer :: i, j, k, m   ! indices
      53             :     integer :: ifirstxy, ilastxy, jfirstxy, jlastxy, km, ntotq, idim
      54       32256 :     real(r8):: tmp(grid%ifirstxy:grid%ilastxy,grid%km)
      55             : !
      56             : !-----------------------------------------------------------------------
      57             : !
      58             : 
      59       16128 :     ifirstxy     = grid%ifirstxy
      60       16128 :     ilastxy      = grid%ilastxy
      61       16128 :     jfirstxy     = grid%jfirstxy
      62       16128 :     jlastxy      = grid%jlastxy
      63       16128 :     km           = grid%km
      64       16128 :     ntotq        = grid%ntotq
      65       16128 :     idim         = ilastxy - ifirstxy + 1
      66             : 
      67       16128 :     if( write_inithist() ) then
      68             : 
      69             : !$OMP PARALLEL DO PRIVATE (I, J, K, M, TMP)
      70           0 :        do j = jfirstxy, jlastxy
      71             : 
      72           0 :           call outfld ('PS&IC      ', ps  (:,j) , idim, j)
      73             : 
      74           0 :           do k = 1, km
      75           0 :              do i = ifirstxy, ilastxy
      76           0 :                 tmp(i,k) = t3(i,j,k)
      77             :              enddo
      78             :           enddo
      79           0 :           call outfld ('T&IC       ', tmp       , idim, j) 
      80             : 
      81           0 :           do k = 1, km
      82           0 :              do i = ifirstxy, ilastxy
      83           0 :                 tmp(i,k) = u3s(i,j,k)
      84             :              enddo
      85             :           enddo
      86           0 :           call outfld ('US&IC      ', tmp       , idim, j)
      87             : 
      88           0 :           do k = 1, km
      89           0 :              do i = ifirstxy, ilastxy
      90           0 :                 tmp(i,k) = v3s(i,j,k)
      91             :              enddo
      92             :           enddo
      93           0 :           call outfld ('VS&IC      ', tmp       , idim, j)
      94             : 
      95             :           ! The tracers are all wet mixing ratios in the dycore.  If cnst_type is dry
      96             :           ! then need to convert before writing to initial file.
      97           0 :           do m = 1, pcnst
      98           0 :              if (cnst_type(m) == 'dry') then
      99           0 :                 do k = 1, km
     100           0 :                    do i = ifirstxy, ilastxy
     101             :                       ! convert wet to dry
     102           0 :                       tmp(i,k) = tracer(i,j,k,m) / (1._r8 - tracer(i,j,k,1))
     103             :                    enddo
     104             :                 enddo
     105             :              else
     106           0 :                 do k = 1, km
     107           0 :                    do i = ifirstxy, ilastxy
     108           0 :                       tmp(i,k) = tracer(i,j,k,m)
     109             :                    enddo
     110             :                 enddo
     111             :              end if
     112           0 :              call outfld(trim(cnst_name(m))//'&IC' , tmp  , idim, j)
     113             :           end do
     114             : 
     115             :        enddo
     116             : 
     117             :     end if
     118             : 
     119       16128 :   end subroutine diag_dynvar_ic

Generated by: LCOV version 1.14