1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
!-------------------------------------------------------------------------------
! This file is part of Code_Saturne, a general-purpose CFD tool.
!
! Copyright (C) 1998-2016 EDF S.A.
!
! This program is free software; you can redistribute it and/or modify it under
! the terms of the GNU General Public License as published by the Free Software
! Foundation; either version 2 of the License, or (at your option) any later
! version.
!
! This program 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 GNU General Public License for more
! details.
!
! You should have received a copy of the GNU General Public License along with
! this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
! Street, Fifth Floor, Boston, MA 02110-1301, USA.
!-------------------------------------------------------------------------------
!> \file soliva.f90
!> \brief Atmospheric soil module - soil variables initialisation
!> \brief Initialize soil model variables
!> NB : data structures are define in module atsoil.f90
!-------------------------------------------------------------------------------
subroutine soliva
!===============================================================================
! Module files
!===============================================================================
use paramx
use numvar
use optcal
use cstphy
use cstnum
use entsor
use parall
use period
use ppppar
use ppthch
use ppincl
use atincl
use atsoil
use mesh
implicit none
!===============================================================================
! Local variables
integer ifac,iphysi
double precision rscp
double precision esaini,qsaini,huini,psini
!===============================================================================
! 1 - initialisation du tableau solva
! -----------------------------------
! initialisation de t et qv en z0
if(qvsini.gt.1.d0) then
! si qvsini>1 qvsini represente l'humidite relative en %
esaini = 610.78d0*exp(17.2694d0*tsini/ &
(tsini + tkelvi - 35.86d0))
qsaini = esaini/(rvsra*p0 + esaini*(1.d0 - rvsra))
qvsini = qvsini*qsaini/100.d0
endif
!==============================================================
if ( ippmod(iatmos).eq.1 ) iphysi = 0
if ( ippmod(iatmos).eq.2 ) iphysi = 3
do ifac = 1, nfmodsol
psini = p0
if(iphysi.gt.0)then
rscp = (rair/cp0)*(1.d0 + (rvsra - cpvcpa)*qvsini)
else
rscp = (rair/cp0)
endif
solution_sol(ifac)%temp_sol = tsini
solution_sol(ifac)%tempp = (tsini+tkelvi)*((ps/psini)**rscp)
solution_sol(ifac)%total_water = 0.d0
if(iphysi.gt.0) solution_sol(ifac)%total_water = qvsini
solution_sol(ifac)%w1 = 0.d0
solution_sol(ifac)%w2 = 0.d0
if(iphysi.eq.3) then
if(w1ini.lt.1.d-20) then
! si w1ini = 0 on fait un calcul approximatif de w1ini
esaini = 610.78d0*exp(17.2694d0*tsini/ &
(tsini + tkelvi - 35.86d0))
qsaini = esaini/(rvsra*psini + esaini*(1.d0 - rvsra))
huini = qvsini/qsaini
huini = min(huini,1.d0)
solution_sol(ifac)%w1 = acos(1.d0-2.d0*huini)/acos(-1.d0)
else
solution_sol(ifac)%w1 = w1ini
endif
if(w2ini.lt.1.d-20) then
! si w2ini=0 on fixe le rapport w1ini/w2ini a 1
! (equilibre entre les couches)
solution_sol(ifac)%w2 = solution_sol(ifac)%w1
else
solution_sol(ifac)%w2 = w2ini
endif
endif
enddo
return
end subroutine
|