File: getwind.f

package info (click to toggle)
flextra 5.0-2.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 860 kB
  • ctags: 402
  • sloc: fortran: 6,987; makefile: 55; sh: 17
file content (81 lines) | stat: -rw-r--r-- 4,613 bytes parent folder | download | duplicates (7)
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
      subroutine getwind(firststep,init,itime,levconst,xt,yt,zt,
     +lkind,lkindz,iter,ngrid,uint,vint,dzdt,idiff,indwz,nstop)
C                            i      i    i       i     i  i  i
C       i      i    i     i    o    o    o     o     o     o
********************************************************************************
*                                                                              *
*  This subroutine reads the wind fields and interpolates the wind fields to   *
*  the current trajectory position.                                            *
*  One has to distinguish between different types of trajectories, eg. isobaric*
*  on model layers or 3-dim. Interpolation is done separately for each of these*
*  types.                                                                      *
*                                                                              *
*    Author: A. Stohl                                                          *
*                                                                              *
*    26 April 1994                                                             *
*                                                                              *
*     Update: 23 December 1998 (Use of global domain and nesting)              *
*                                                                              *
********************************************************************************
*                                                                              *
* Variables:                                                                   *
* uint,vint,dzdt     wind components in grid units per second                  *
* firststep          .true. for first iteration of petterssen                  *
* idiff [s]          Temporal distance between the windfields used for interpol*
* indwz              index of the model layer beneath current position of traj.*
* init               .true. for first time step of trajectory                  *
* iter               number of iteration step                                  *
* itime [s]          current temporal position                                 *
* levconst           height of trajectory in Pa, m or K, depending on type of t*
* lkind              kind of trajectory (e.g. isobaric, 3-dimensional)         *
* lkindz             unit of z coordinate (1:masl, 2:magl, 3:hPa)              *
* memtime(3) [s]     times of the wind fields in memory                        *
* ngrid              points towards which grid shall be used                   *
* nstop              =greater 0, if trajectory calculation is finished         *
* xt,yt,zt           coordinates position for which wind data shall be calculat*
*                                                                              *
* Constants:                                                                   *
*                                                                              *
********************************************************************************

      include 'includepar'
      include 'includecom'

      integer itime,idiff,indexf,indwz,nstop,lkind,lkindz,iter,ngrid
      real xt,yt,zt,levconst,uint,vint,dzdt
      logical firststep,init


C Update of the wind fields that are currently kept in memory.
C If a new wind field is necessary, read it.
**************************************************************

      call getfields(firststep,itime,indexf,idiff,nstop)

      if (nstop.ge.3) return       ! error has occurred

C Call interpolation of the different types of trajectories.
************************************************************
     
      if (lkind.eq.1) then         ! full 3-dimensional trajectories
        call inter3d(xt,yt,zt,indexf,itime,init,firststep,
     +  iter,lkindz,ngrid,uint,vint,dzdt,indwz)
      else if (lkind.eq.2) then    ! trajectories on model layers
        call intermod(xt,yt,zt,indexf,itime,init,firststep,
     +  iter,lkindz,ngrid,uint,vint)
        dzdt=0.
      else if (lkind.eq.3) then    ! mixing layer trajectories
        call intermix(xt,yt,zt,levconst,indexf,itime,iter,ngrid,
     +  uint,vint)
        dzdt=0.
      else if (lkind.eq.4) then    ! isobaric trajectories
        call interisobar(xt,yt,zt,levconst,indexf,itime,init,firststep,
     +  iter,lkindz,ngrid,uint,vint)
        dzdt=0.
      else if (lkind.eq.5) then    ! isentropic trajectories
        call interisentrop(xt,yt,zt,levconst,indexf,itime,init,
     +  firststep,iter,lkindz,ngrid,uint,vint)
      endif

      return
      end