1 | |
---|
2 | /*************************************************************************** |
---|
3 | module classe dta_lfexp.h - description |
---|
4 | ***************************************************************************/ |
---|
5 | // Mohamed Berrada |
---|
6 | // locean-ipsl.upmc, Paris, August 9, 2011 |
---|
7 | //=========================================================================== |
---|
8 | // methode forward |
---|
9 | forward (YREAL x1,YREAL x2,YREAL x3,YREAL x4,YREAL x5,YREAL x6) |
---|
10 | { /* 1 from nu 1 i j k |
---|
11 | 2 from dta_lfexp 1 i j k t-1 |
---|
12 | 3 from dta_lfexp 1 i-1 j k t-1 |
---|
13 | 4 from dta_lfexp 1 i+1 j k t-1 |
---|
14 | 5 from dta_lfexp 1 i j-1 k t-1 |
---|
15 | 6 from dta_lfexp 1 i j+1 k t-1 */ |
---|
16 | // if (Yi==5 && Yj==5) |
---|
17 | //printf("dta_lfil : %d\n",Yt); |
---|
18 | |
---|
19 | double zbtr = zbtr2(Yi,Yj); |
---|
20 | if(Yt==1){ |
---|
21 | double wm12=sqrt(zbtr);//1./(106000.); //1/sqrt(ds1*ds2) |
---|
22 | YS1=wm12*x1; |
---|
23 | } |
---|
24 | else{ |
---|
25 | if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 || Yk==NZ-1){ |
---|
26 | YS1=0.; |
---|
27 | } |
---|
28 | else{ |
---|
29 | double bi = fsaht_fil * pdth_fil * umask(Yi,Yj,Yk) * ze1ur(Yi,Yj); |
---|
30 | double bim1 = fsaht_fil * pdth_fil * umask(Yi-1,Yj,Yk) * ze1ur(Yi-1,Yj); |
---|
31 | double bj = fsaht_fil * pdth_fil * vmask(Yi,Yj,Yk) * ze2vr(Yi,Yj); |
---|
32 | double bjm1 = fsaht_fil * pdth_fil * vmask(Yi,Yj-1,Yk) * ze2vr(Yi,Yj-1); |
---|
33 | |
---|
34 | double tip1,tim1,tjp1,tjm1, tij; |
---|
35 | //cdt au bord i |
---|
36 | if (Yi==1){ |
---|
37 | tim1= 0.; |
---|
38 | #ifdef K_NEU |
---|
39 | tim1= bim1 * x2; |
---|
40 | #endif |
---|
41 | } |
---|
42 | else{ |
---|
43 | tim1= bim1 * x3; |
---|
44 | } |
---|
45 | if (Yi==NX-2){ |
---|
46 | tip1= 0.; |
---|
47 | #ifdef K_NEU |
---|
48 | tip1= bi * x2; |
---|
49 | #endif |
---|
50 | } |
---|
51 | else{ |
---|
52 | tip1= bi * x4; |
---|
53 | } |
---|
54 | //cdt au bord j |
---|
55 | if (Yj==1){ |
---|
56 | tjm1= 0.; |
---|
57 | #ifdef K_NEU |
---|
58 | tjm1= bjm1 * x2; |
---|
59 | #endif |
---|
60 | } |
---|
61 | else{ |
---|
62 | tjm1= bjm1 * x5; |
---|
63 | } |
---|
64 | if (Yj==NY-2){ |
---|
65 | tjp1= 0.; |
---|
66 | #ifdef K_NEU |
---|
67 | tjp1= bj * x2; |
---|
68 | #endif |
---|
69 | } |
---|
70 | else{ |
---|
71 | tjp1= bj * x6; |
---|
72 | } |
---|
73 | |
---|
74 | tij= (1./zbtr-bi-bim1-bj-bjm1) * x2; |
---|
75 | YS1 = zbtr*(tip1 + tim1 + tjp1 + tjm1 + tij); |
---|
76 | } |
---|
77 | } |
---|
78 | } |
---|
79 | |
---|
80 | //=========================================================================== |
---|
81 | // methode backward |
---|
82 | |
---|
83 | backward (YREAL x1,YREAL x2,YREAL x3,YREAL x4,YREAL x5,YREAL x6) |
---|
84 | { |
---|
85 | YJ1I1=0.; YJ1I2=0.; YJ1I3=0.; YJ1I4=0.; YJ1I5=0.; YJ1I6=0.; |
---|
86 | double zbtr = zbtr2(Yi,Yj); |
---|
87 | if(Yt==1){ |
---|
88 | double wm12=sqrt(zbtr);//1./(106000.); //1/sqrt(ds1*ds2) |
---|
89 | YJ1I1=wm12; |
---|
90 | } |
---|
91 | else{ |
---|
92 | if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 || Yk==NZ-1){ |
---|
93 | YJ1I1=0.; YJ1I2=0.; YJ1I3=0.; YJ1I4=0.; YJ1I5=0.; YJ1I6=0.; |
---|
94 | } |
---|
95 | else{ |
---|
96 | double bi = fsaht_fil * pdth_fil * umask(Yi,Yj,Yk) * ze1ur(Yi,Yj); |
---|
97 | double bim1 = fsaht_fil * pdth_fil * umask(Yi-1,Yj,Yk) * ze1ur(Yi-1,Yj); |
---|
98 | double bj = fsaht_fil * pdth_fil * vmask(Yi,Yj,Yk) * ze2vr(Yi,Yj); |
---|
99 | double bjm1 = fsaht_fil * pdth_fil * vmask(Yi,Yj-1,Yk) * ze2vr(Yi,Yj-1); |
---|
100 | |
---|
101 | double dtip1_x4=0.,dtim1_x3=0.,dtjp1_x6=0.,dtjm1_x5=0.; |
---|
102 | double dtip1_x2=0.,dtim1_x2=0.,dtjp1_x2=0.,dtjm1_x2=0., dtij_x2=0.; |
---|
103 | //cdt au bord i |
---|
104 | if (Yi==1){ |
---|
105 | dtim1_x2= 0.; |
---|
106 | #ifdef K_NEU |
---|
107 | dtim1_x2= bim1; |
---|
108 | #endif |
---|
109 | } |
---|
110 | else{ |
---|
111 | dtim1_x3= bim1; |
---|
112 | } |
---|
113 | if (Yi==NX-2){ |
---|
114 | dtip1_x2= 0.; |
---|
115 | #ifdef K_NEU |
---|
116 | dtip1_x2= bi; |
---|
117 | #endif |
---|
118 | } |
---|
119 | else{ |
---|
120 | dtip1_x4= bi; |
---|
121 | } |
---|
122 | //cdt au bord j |
---|
123 | if (Yj==1){ |
---|
124 | dtjm1_x2= 0.; |
---|
125 | #ifdef K_NEU |
---|
126 | dtjm1_x2= bjm1; |
---|
127 | #endif |
---|
128 | } |
---|
129 | else{ |
---|
130 | dtjm1_x5= bjm1; |
---|
131 | } |
---|
132 | if (Yj==NY-2){ |
---|
133 | dtjp1_x2= 0.; |
---|
134 | #ifdef K_NEU |
---|
135 | dtjp1_x2= bj; |
---|
136 | #endif |
---|
137 | } |
---|
138 | else{ |
---|
139 | dtjp1_x6= bj; |
---|
140 | } |
---|
141 | dtij_x2= (1./zbtr-bi-bim1-bj-bjm1); |
---|
142 | |
---|
143 | YJ1I1 = 0.; |
---|
144 | YJ1I2 = zbtr*(dtip1_x2 + dtim1_x2 + dtjp1_x2 + dtjm1_x2 + dtij_x2); |
---|
145 | YJ1I3 = zbtr*(dtim1_x3); |
---|
146 | YJ1I4 = zbtr*(dtip1_x4); |
---|
147 | YJ1I5 = zbtr*(dtjm1_x5); |
---|
148 | YJ1I6 = zbtr*(dtjp1_x6); |
---|
149 | } |
---|
150 | } |
---|
151 | } |
---|