1 | |
---|
2 | /*************************************************************************** |
---|
3 | module classe spguv_dynspg_flt.h - description |
---|
4 | ***************************************************************************/ |
---|
5 | // Mohamed Berrada |
---|
6 | // locean-ipsl.upmc, Paris, April 20, 2009 |
---|
7 | //=========================================================================== |
---|
8 | // methode forward |
---|
9 | forward (YREAL x1,YREAL x2,YREAL x3) |
---|
10 | {/* 1 from gcx2 1 i+1 j t |
---|
11 | 2 from gcx2 1 i j t |
---|
12 | 3 from gcx2 1 i j+1 t*/ |
---|
13 | |
---|
14 | /* YS1 */ |
---|
15 | /* A |
---|
16 | R */ |
---|
17 | if(Yt==TU){ |
---|
18 | YS1=0.; |
---|
19 | YS2=0.; |
---|
20 | } |
---|
21 | else{ |
---|
22 | double znugdt = rnu * grav * r2dt; |
---|
23 | if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 ){ |
---|
24 | YS1=0.; |
---|
25 | } |
---|
26 | else{ |
---|
27 | // ! trend of Transport divergence gradient |
---|
28 | // double ztdgu = znugdt * (gcx(Yi+1,Yj ) - gcx(Yi,Yj) ) / e1u(Yi,Yj); |
---|
29 | // double ztdgv = znugdt * (gcx(Yi ,Yj+1) - gcx(Yi,Yj) ) / e2v(Yi,Yj); |
---|
30 | double ztdgu = znugdt * (x1 - x2 ) / e1u(Yi,Yj); |
---|
31 | double ztdgv = znugdt * (x3 - x2 ) / e2v(Yi,Yj); |
---|
32 | // ! multiplied by z2dt |
---|
33 | YS1 = r2dt * ztdgu; |
---|
34 | YS2 = r2dt * ztdgv; |
---|
35 | } |
---|
36 | } |
---|
37 | // |
---|
38 | /* if(Yt==6 && Yi==28 && Yj==3) xtest("spg YS_spg",YS1,Yi,Yj,Yk,Yt); |
---|
39 | if(Yt==6 && Yi==28 && Yj==3) xtest("spg x1",x1,Yi,Yj,Yk,Yt); |
---|
40 | if(Yt==6 && Yi==28 && Yj==3) xtest("spg x2",x2,Yi,Yj,Yk,Yt); |
---|
41 | if(Yt==6 && Yi==28 && Yj==3) xtest("spg x3",x3,Yi,Yj,Yk,Yt);*/ |
---|
42 | |
---|
43 | } |
---|
44 | |
---|
45 | //=========================================================================== |
---|
46 | // methode backward |
---|
47 | |
---|
48 | backward (YREAL x1,YREAL x2,YREAL x3) |
---|
49 | {//(12 7 0; 4) |
---|
50 | double znugdt,dztdgu_x1,dztdgu_x2,dztdgv_x2,dztdgv_x3; |
---|
51 | YJ1I1=0.; YJ1I2=0.; YJ1I3=0.; |
---|
52 | YJ2I1=0.; YJ2I2=0.; YJ2I3=0.; |
---|
53 | if(Yt!=TU){ |
---|
54 | znugdt = rnu * grav * r2dt; |
---|
55 | if(Yi==0 || Yi==NX-1 || Yj==0 || Yj==NY-1 ){ |
---|
56 | YJ1I1=0.; YJ1I2=0.; YJ1I3=0.; |
---|
57 | YJ2I1=0.; YJ2I2=0.; YJ2I3=0.; |
---|
58 | } |
---|
59 | else{ |
---|
60 | // ! trend of Transport divergence gradient |
---|
61 | dztdgu_x1 = znugdt / e1u(Yi,Yj); |
---|
62 | dztdgu_x2 = -znugdt / e1u(Yi,Yj); |
---|
63 | dztdgv_x2 = -znugdt / e2v(Yi,Yj); |
---|
64 | dztdgv_x3 = znugdt / e2v(Yi,Yj); |
---|
65 | // ! multiplied by z2dt |
---|
66 | YJ1I1=r2dt * dztdgu_x1; |
---|
67 | YJ1I2=r2dt * dztdgu_x2; |
---|
68 | YJ1I3=0.; |
---|
69 | YJ2I1=0.; |
---|
70 | YJ2I2=r2dt * dztdgv_x2; |
---|
71 | YJ2I3=r2dt * dztdgv_x3; |
---|
72 | } |
---|
73 | } |
---|
74 | // |
---|
75 | /* if(Yi==11 && Yj== 11 &&Yt==3) |
---|
76 | { |
---|
77 | if(Ycurward==BACKWARD) |
---|
78 | printf("BACKWARD:\n"); |
---|
79 | if(Ycurward==LINWARD) |
---|
80 | printf("LINWARD:\n"); |
---|
81 | printf("x1:%24.16e x2:%24.16e x3:%24.16e \n",x1,x2,x3); |
---|
82 | // printf("znugdt:%24.16e \n",znugdt); |
---|
83 | printf("dztdgu_x1:%24.16e \n",dztdgu_x1); |
---|
84 | printf("dztdgu_x2:%24.16e \n",dztdgu_x2); |
---|
85 | printf("dztdgv_x2:%24.16e \n",dztdgv_x2); |
---|
86 | printf("dztdgv_x3:%24.16e \n",dztdgv_x3); |
---|
87 | }*/ |
---|
88 | } |
---|
89 | |
---|
90 | //=========================================================================== |
---|
91 | //************************* FIN DU MODULE spguv_dynspg_flt ************************* |
---|
92 | |
---|