!-------------------------------------- LICENCE BEGIN ------------------------------------ !Environment Canada - Atmospheric Science and Technology License/Disclaimer, ! version 3; Last Modified: May 7, 2008. !This is free but copyrighted software; you can use/redistribute/modify it under the terms !of the Environment Canada - Atmospheric Science and Technology License/Disclaimer !version 3 or (at your option) any later version that should be found at: !http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html ! !This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; !without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. !See the above mentioned License/Disclaimer for more details. !You should have received a copy of the License/Disclaimer along with this software; !if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), !CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca !-------------------------------------- LICENCE END -------------------------------------- ***s/r v4d_varconv - conversion control variables GEM <--> 3D-Var * #include "model_macros_f.h"*
subroutine v4d_varconv( C_ut1, C_vt1, C_tt1, C_hut1, C_st1, 3,4 $ DIST_DIM, Nk, inverse_L ) * implicit none * integer DIST_DIM,Nk real C_ut1 (DIST_SHAPE,Nk), C_vt1 (DIST_SHAPE,Nk), % C_tt1 (DIST_SHAPE,Nk), C_hut1(DIST_SHAPE,Nk), % C_st1 (DIST_SHAPE) logical inverse_L * *author * Stephane Laroche * *revision * v3_00 - Laroche S. - initial MPI version * v3_00 - Gauthier P. - ln q to q * v3_02 - Laroche S. - conversion to hybrid coordinate * v3_11 - Tanguay M. - Add option for profiles done on U-V grids for winds * - Add option for staggering already done by 3D-Var * v3_30 - Fillion/Tanguay - Extend the scaling to all the grid in LAM mode * *object * *arguments * Name I/O Description *---------------------------------------------------------------- * C_ut1 * C_vt1 * C_tt1 * C_hut1 * C_st1 *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "geomg.cdk"
#include "cstv.cdk"
#include "dcst.cdk"
#include "v4dg.cdk"
* *modules * integer i, j, k real*8 pri2c_8 real wu(LDIST_SHAPE,l_nk),wv(LDIST_SHAPE,l_nk) if(.not.inverse_L) then C C Conversion GEM --> 3D-Var C ========================= C * C C Winds C ----- C if(.not.V4dg_pruv_L) then * call itf_phy_uvgridscal
( C_ut1, C_vt1, LDIST_DIM, Nk, .true. ) do k=1,Nk do j= 1, l_nj pri2c_8 = Dcst_rayt_8/Geomg_cy_8(j) do i= 1, l_ni C_ut1(i,j,k) = C_ut1(i,j,k)*pri2c_8 C_vt1(i,j,k) = C_vt1(i,j,k)*pri2c_8 end do end do end do * else * do k=1,Nk do j= 1, l_nj pri2c_8 = Dcst_rayt_8/Geomg_cy_8(j) do i= 1, l_niu C_ut1(i,j,k) = C_ut1(i,j,k)*pri2c_8 end do end do end do * do k=1,Nk do j= 1, l_njv pri2c_8 = Dcst_rayt_8/Geomg_cyv_8(j) do i= 1, l_ni C_vt1(i,j,k) = C_vt1(i,j,k)*pri2c_8 end do end do end do * endif C C Temperature C ----------- C do k=1,Nk do j= 1, l_nj do i= 1, l_ni C_tt1(i,j,k) = (C_tt1(i,j,k) + Cstv_tstr_8) $ / (1.0 + Dcst_delta_8*C_hut1(i,j,k)) end do end do end do C C Surface pressure C ---------------- C do j= 1, l_nj do i= 1, l_ni C_st1(i,j) = Geomg_z_8(Nk)*exp(C_st1(i,j)) end do end do C C Humidity: q --> log q C do k=1,Nk do j= 1, l_nj do i= 1, l_ni C_hut1(i,j,k) = alog(C_hut1(i,j,k)) end do end do end do * else * C C Conversion 3D-Var --> GEM C ========================= C C C Humidity: log q --> q = exp(log q) C do k=1,Nk do j= 1, l_nj do i= 1, l_ni C_hut1(i,j,k) = exp(C_hut1(i,j,k)) end do end do end do C C Winds C ----- do k=1,Nk do j=l_miny,l_maxy do i=l_minx,l_maxx wu(i,j,k) = 0.0 wv(i,j,k) = 0.0 enddo enddo enddo * if(.not.V4dg_ustag_L) then do k=1,Nk do j= 1, l_nj pri2c_8 = Dcst_rayt_8/Geomg_cy_8(j) do i= 1, l_ni C_ut1(i,j,k) = C_ut1(i,j,k)/pri2c_8 end do end do end do endif * if(.not.V4dg_vstag_L) then do k=1,Nk do j= 1, l_nj pri2c_8 = Dcst_rayt_8/Geomg_cy_8(j) do i= 1, l_ni C_vt1(i,j,k) = C_vt1(i,j,k)/pri2c_8 end do end do end do endif * if(.not.V4dg_ustag_L.and..not.V4dg_vstag_L) then call itf_phy_uvgridscal
( C_ut1, C_vt1, LDIST_DIM, Nk, .false. ) * elseif(V4dg_ustag_L.and..not.V4dg_vstag_L) then call itf_phy_uvgridscal
( wu, C_vt1, LDIST_DIM, Nk, .false. ) * elseif(.not.V4dg_ustag_L.and.V4dg_vstag_L) then call itf_phy_uvgridscal
( C_ut1, wv, LDIST_DIM, Nk, .false. ) endif * if(V4dg_ustag_L) then do k=1,Nk do j= 1, l_nj pri2c_8 = Dcst_rayt_8/Geomg_cy_8(j) do i= 1, l_niu C_ut1(i,j,k) = C_ut1(i,j,k)/pri2c_8 end do end do end do endif * if(V4dg_vstag_L) then do k=1,Nk do j= 1, l_njv pri2c_8 = Dcst_rayt_8/Geomg_cyv_8(j) do i= 1, l_ni C_vt1(i,j,k) = C_vt1(i,j,k)/pri2c_8 end do end do end do endif C C Temperature C ----------- C do k=1,Nk do j= 1, l_nj do i= 1, l_ni C_tt1(i,j,k) = C_tt1(i,j,k)*(1.0 + Dcst_delta_8*C_hut1(i,j,k)) $ - Cstv_tstr_8 end do end do end do C C Surface pressure C ---------------- C do j= 1, l_nj do i= 1, l_ni C_st1(i,j) = log( C_st1(i,j) / Geomg_z_8(Nk) ) end do end do endif return end