SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modi_glt_mltvtp_r.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !GLT_LIC The GELATO model is a seaice model used in stand-alone or embedded mode.
6 !GLT_LIC It has been developed by Meteo-France. The holder of GELATO is Meteo-France.
7 !GLT_LIC
8 !GLT_LIC This software is governed by the CeCILL-C license under French law and biding
9 !GLT_LIC by the rules of distribution of free software. See the CeCILL-C_V1-en.txt
10 !GLT_LIC (English) and CeCILL-C_V1-fr.txt (French) for details. The CeCILL is a free
11 !GLT_LIC software license, explicitly compatible with the GNU GPL
12 !GLT_LIC (see http://www.gnu.org/licenses/license-list.en.html#CeCILL)
13 !GLT_LIC
14 !GLT_LIC The CeCILL-C licence agreement grants users the right to modify and re-use the
15 !GLT_LIC software governed by this free software license. The exercising of this right
16 !GLT_LIC is conditional upon the obligation to make available to the community the
17 !GLT_LIC modifications made to the source code of the software so as to contribute to
18 !GLT_LIC its evolution.
19 !GLT_LIC
20 !GLT_LIC In consideration of access to the source code and the rights to copy, modify
21 !GLT_LIC and redistribute granted by the license, users are provided only with a limited
22 !GLT_LIC warranty and the software's author, the holder of the economic rights, and the
23 !GLT_LIC successive licensors only have limited liability. In this respect, the risks
24 !GLT_LIC associated with loading, using, modifying and/or developing or reproducing the
25 !GLT_LIC software by the user are brought to the user's attention, given its Free
26 !GLT_LIC Software status, which may make it complicated to use, with the result that its
27 !GLT_LIC use is reserved for developers and experienced professionals having in-depth
28 !GLT_LIC computer knowledge. Users are therefore encouraged to load and test the
29 !GLT_LIC suitability of the software as regards their requirements in conditions enabling
30 !GLT_LIC the security of their systems and/or data to be ensured and, more generally, to
31 !GLT_LIC use and operate it in the same conditions of security.
32 !GLT_LIC
33 !GLT_LIC The GELATO sofware is cureently distibuted with the SURFEX software, available at
34 !GLT_LIC http://www.cnrm.meteo.fr/surfex. The fact that you download the software deemed that
35 !GLT_LIC you had knowledge of the CeCILL-C license and that you accept its terms.
36 !GLT_LIC Attempts to use this software in a way not complying with CeCILL-C license
37 !GLT_LIC may lead to prosecution.
38 !GLT_LIC
39 ! =======================================================================
40 ! ======================== MODULE modi_glt_mltvtp_r =========================
41 ! =======================================================================
42 !
43 ! Goal:
44 ! -----
45 ! This module contains a subroutine that updates vertical temperature
46 ! profiles in sea ice, only in case of sea ice melting.
47 ! The updated thickness of every sea ice level should be provided as
48 ! an input (4D pdhi array), as well as the sea ice object variable
49 ! before thickness is updated.
50 !
51 ! Method:
52 ! -------
53 !
54 ! Created : 2007/12 (D. Salas y Melia)
55 ! Modified: 2009/06 (D. Salas y Melia) Reduced grid
56 !
57 ! ---------------------- BEGIN MODULE modi_glt_mltvtp_r ---------------------
58 !
59 !THXS_SFX!MODULE modi_glt_mltvtp_r
60 !THXS_SFX!INTERFACE
61 !THXS_SFX!!
62 !THXS_SFX!SUBROUTINE glt_mltvtp_r( pdhi,phsi,tpsil )
63 !THXS_SFX! USE modd_types_glt
64 !THXS_SFX! USE modd_glt_param
65 !THXS_SFX! REAL, DIMENSION(nilay,nt,np), INTENT(in) :: &
66 !THXS_SFX! pdhi
67 !THXS_SFX! REAL, DIMENSION(nt,np), INTENT(inout) :: &
68 !THXS_SFX! phsi
69 !THXS_SFX! TYPE(t_vtp), DIMENSION(nl,nt,np), INTENT(inout) :: &
70 !THXS_SFX! tpsil
71 !THXS_SFX!END SUBROUTINE glt_mltvtp_r
72 !THXS_SFX!!
73 !THXS_SFX!END INTERFACE
74 !THXS_SFX!END MODULE modi_glt_mltvtp_r
75 !
76 ! ----------------------- END MODULE modi_glt_mltvtp_r ----------------------
77 !
78 !
79 ! -----------------------------------------------------------------------
80 ! ------------------------ SUBROUTINE glt_mltvtp_r --------------------------
81 !
82 ! * Subroutine used to update sea ice vertical temperature profile, due
83 ! to sea ice melting.
84 !
85 SUBROUTINE glt_mltvtp_r( pdhi,phsi,tpsil )
86 !
88  USE modd_types_glt
89  USE modd_glt_param
92 !
93  IMPLICIT NONE
94 !
95  REAL, DIMENSION(nilay,nt,np), INTENT(in) :: &
96  pdhi
97  REAL, DIMENSION(nt,np), INTENT(inout) :: &
98  phsi
99  TYPE(t_vtp), DIMENSION(nl,nt,np), INTENT(inout) :: &
100  tpsil
101 !
102  INTEGER :: &
103  jp,jk,jl
104  REAL :: zavti,zavtf,zdavt
105  REAL, DIMENSION(nilay) :: &
106  zentn,zsf3tinvo
107  REAL, DIMENSION(nilay+1) :: &
108  zlevo
109  REAL, DIMENSION(nt,np) :: &
110  zhsi
111 !
112 !
113 !
114 ! 1. Update vertical temperature profile
115 ! =======================================
116 !
117 ! Compute new sea ice thickness
118  zhsi(:,:) = sum( pdhi(:,:,:),dim=1 )
119 !
120  DO jp=1,np
121  DO jk=1,nt
122  IF ( zhsi(jk,jp)>0. .AND. zhsi(jk,jp)<phsi(jk,jp) ) THEN
123 ! Normalized level boundaries in the melted ice slab (former)
124  zsf3tinvo=pdhi(:,jk,jp) / zhsi(jk,jp)
125  zlevo(1)=0.
126  DO jl=2,nilay+1
127  zlevo(jl)=zlevo(jl-1)+pdhi(jl-1,jk,jp)
128  END DO
129  zlevo(:)=zlevo/zlevo(nilay+1)
130 ! Interpolate
131  zentn=glt_interpz( height,tpsil(1:nilay,jk,jp)%ent,zlevo )
132 ! In principle, the following is now impossible...
133  IF (lp3) THEN
134  zavti=sum( zsf3tinvo*tpsil(1:nilay,jk,jp)%ent )
135  zavtf=sum( sf3tinv*zentn )
136  zdavt=abs(zavtf-zavti)
137  IF ( zdavt>epsil5 ) THEN
138  print*,'PB in mltvtp at jp,jk =',jp,jk
139  print*,'Average temperature is not conserved.'
140  print*,' Initial =',zavti
141  print*,' Final =',zavtf
142  ENDIF
143  ENDIF
144  tpsil(1:nilay,jk,jp)%ent = zentn
145  ENDIF
146  END DO
147  END DO
148 !
149 ! .. Update phsi
150 !
151  phsi(:,:) = zhsi(:,:)
152 !
153 END SUBROUTINE glt_mltvtp_r
154 !
155 ! ---------------------- END SUBROUTINE glt_mltvtp_r ------------------------
156 ! -----------------------------------------------------------------------
subroutine glt_mltvtp_r(pdhi, phsi, tpsil)