source: trunk/LMDZ.COMMON/libf/dyn3d_common/relaxetat0.F @ 3000

Last change on this file since 3000 was 1345, checked in by aslmd, 10 years ago

LMDZ.COMMON. introduced an attenuation profile for nudging towards wind. new parameter: phalf: pressure at which attenuation factor is divided by two.

File size: 2.4 KB
Line 
1      SUBROUTINE relaxetat0(fichnom)
2
3      use netcdf, only: nf90_get_var
4      use comuforc_h
5      use ioipsl_getincom
6
7      IMPLICIT NONE
8
9!=======================================================================
10! Author: A. Spiga
11! Purpose: Read a simple relaxation field
12!=======================================================================
13
14#include "dimensions.h"
15#include "paramet.h"
16#include "netcdf.inc"
17#include "iniprint.h"
18
19! INPUTS
20      CHARACTER*(*) fichnom
21
22! VARIABLES
23      REAL ucov(iip1, jjp1,llm)
24      REAL press(llm)
25      INTEGER ierr, nid, nvarid
26      INTEGER i,j,l,ij
27
28      !! OPEN NETCDF FILE
29      ierr = NF_OPEN (fichnom, NF_NOWRITE,nid)
30      IF (ierr.NE.NF_NOERR) THEN
31        write(lunout,*)'relaxetat0: Pb d''ouverture du fichier'
32        write(lunout,*)' ierr = ', ierr
33        CALL ABORT
34      ENDIF
35
36      !! ALLOCATE RELAXATION FIELD
37      IF (.NOT.ALLOCATED(uforc)) ALLOCATE(uforc(ip1jmp1,llm))
38
39      !! READ RELAXATION FIELD
40      ierr = NF_INQ_VARID (nid, "ucov", nvarid)
41      IF (ierr .NE. NF_NOERR) THEN
42         write(lunout,*)"dynetat0: Le champ <ucov> est absent"
43         CALL abort
44      ENDIF
45      ierr = nf90_get_var(nid, nvarid, ucov)
46      IF (ierr .NE. NF_NOERR) THEN
47         write(lunout,*)"dynetat0: Lecture echouee pour <ucov>"
48         CALL abort
49      ENDIF
50
51      !! TRANSFER TO SHARED VARIABLE IN comuforc_h MODULE
52      !! TBD --> check the relaxation field's dimensions are OK!
53      do l=1,llm
54        do j=1,jjp1
55           do i=1,iip1
56              ij=(j-1)*iip1+i
57              uforc(ij,l)=ucov(i,j,l)
58           enddo
59        enddo
60      enddo
61
62      !! READ THE RELAXATION RATE IN SETTINGS
63      facwind = 1000.
64      CALL getin('facwind',facwind)
65
66      !! CALCULATE ATTENUATION FACTOR WITH ALTITUDE
67      ierr = NF_INQ_VARID (nid, "presnivs", nvarid)
68      IF (ierr .NE. NF_NOERR) THEN
69         write(lunout,*)"dynetat0: Le champ <presnivs> est absent"
70         CALL abort
71      ENDIF
72      ierr = nf90_get_var(nid, nvarid, press)
73      IF (ierr .NE. NF_NOERR) THEN
74         write(lunout,*)"dynetat0: Lecture echouee pour <press>"
75         CALL abort
76      ENDIF
77      phalf = 1.e5 !! at this pressure, attenua is 0.5
78      CALL getin('phalf',phalf)
79      !! attenua goes from 1 at lowermost levels to 0 at uppermost levels
80      IF (.NOT.ALLOCATED(attenua)) ALLOCATE(attenua(llm))
81      attenua = 0.5*(1.+tanh(log10(press/phalf)))
82
83      !! END
84      ierr = NF_CLOSE(nid)
85      RETURN
86      END
Note: See TracBrowser for help on using the repository browser.