source: trunk/src/dta_zfilt.h @ 186

Last change on this file since 186 was 70, checked in by berrada, 13 years ago

fusion mb-branche dans tronc

  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1
2/***************************************************************************
3                 module classe dta_zfilt.h  -  description
4***************************************************************************/
5// Mohamed Berrada
6// locean-ipsl.upmc, Paris, July 29, 2011
7//===========================================================================
8//                          methode forward
9forward (YREAL x1,YREAL x2,YREAL x3,YREAL x4)
10{ /*    1       from    nu                      1  i    j    k 
11        2       from    dta_zfilt               1  i    j    k-1   t-1
12        3       from    dta_zfilt               1  i    j    k     t-1
13        4       from    dta_zfilt               1  i    j    k+1   t-1 */
14
15  if(Yt==1){
16    double wm12=1./sqrt(fse3t(Yi,Yj,Yk)); //1/sqrt(dz)
17    YS1=wm12*x1;
18  }
19  else{
20    if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 || Yk==NZ-1){
21      YS1=0.;
22    }
23    else{
24      double ak =avt_fil*pdtz_fil/fse3w(Yi,Yj,Yk) 
25        ,akp1=avt_fil*pdtz_fil/fse3w(Yi,Yj,Yk+1);
26      double tkm1, tk,tkp1;
27      if(Yk==0){
28#ifdef K_NEU
29        tkm1= -ak* x3;
30#else
31        tkm1= 0.;
32#endif
33      }
34      else
35        tkm1= -ak* x3;
36      tk=(fse3t(Yi,Yj,Yk) +akp1 +ak)*x3;
37      if(Yk==NZ-2){
38#ifdef K_NEU
39        tkp1  = -akp1*x3;
40#else
41        tkp1= 0.;
42#endif
43      }
44      else
45        tkp1  = -akp1*x4;
46      YS1 = (tkm1 + tk +tkp1)/fse3t(Yi,Yj,Yk);
47    }
48  }
49  //
50}
51     
52//===========================================================================
53//                         methode  backward
54
55backward (YREAL x1,YREAL x2,YREAL x3,YREAL x4)
56{
57  YJ1I1=0.;     YJ1I2=0.; YJ1I3=0.;     YJ1I4=0.;
58
59  if(Yt==1){
60    YJ1I1=0.;     YJ1I2=0.;
61  }
62  else{
63    if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 || Yk==NZ-1){
64      YJ1I1=0.;     YJ1I2=0.;
65    }
66    else{
67      double zave3r = 1.e0 / fse3w(Yi,Yj,Yk); //! 1 sur le pas veritcal au point w (Arakawa mesh)
68      YJ1I1=avt_fil*zave3r;     YJ1I2=-avt_fil*zave3r;
69    }
70  }
71  if(Yt==1){
72    double wm12=1./sqrt(fse3t(Yi,Yj,Yk)); //1/sqrt(dz)
73    YJ1I1=wm12;
74  }
75  else{
76    if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 || Yk==NZ-1){
77      YJ1I1=0.;
78    }
79    else{
80      double ak =avt_fil*pdtz_fil/fse3w(Yi,Yj,Yk) 
81        ,akp1=avt_fil*pdtz_fil/fse3w(Yi,Yj,Yk+1);
82      double dtkm1_x2=0., dtk_x3=0.,dtkp1_x4=0.;
83      double dtkm1_x3=0.,dtkp1_x3=0.;
84      if(Yk==0){
85#ifdef K_NEU
86        dtkm1_x3= -ak;
87#endif
88      }
89      else
90        dtkm1_x2= -ak;
91
92      dtk_x3=(fse3t(Yi,Yj,Yk) +akp1 +ak);
93      if(Yk==NZ-2){
94#ifdef K_NEU
95        dtkp1_x3  = -akp1;
96#endif
97      }
98      else
99        dtkp1_x4  = -akp1;
100
101      YJ1I1=0.;
102      YJ1I2=dtkm1_x2/fse3t(Yi,Yj,Yk);
103      YJ1I3=(dtkm1_x3 + dtk_x3 +dtkp1_x3)/fse3t(Yi,Yj,Yk);
104      YJ1I4=dtkp1_x4/fse3t(Yi,Yj,Yk);
105    }
106  }
107  //
108
109}
Note: See TracBrowser for help on using the repository browser.