Changeset 1459 for trunk/LMDZ.COMMON/libf/dyn3d
- Timestamp:
- Jun 20, 2015, 9:22:53 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3d/advect.F
r1422 r1459 28 28 c ------------- 29 29 30 #include "dimensions.h"31 #include "paramet.h"32 #include "comgeom.h"30 include "dimensions.h" 31 include "paramet.h" 32 include "comgeom.h" 33 33 34 34 c Arguments: 35 35 c ---------- 36 36 37 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 38 REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),w(ip1jmp1,llm) 39 REAL dv(ip1jm,llm),du(ip1jmp1,llm),dteta(ip1jmp1,llm) 37 REAL,INTENT(IN) :: vcov(ip1jm,llm) 38 REAL,INTENT(IN) :: ucov(ip1jmp1,llm) 39 REAL,INTENT(IN) :: teta(ip1jmp1,llm) 40 REAL,INTENT(IN) :: massebx(ip1jmp1,llm) 41 REAL,INTENT(IN) :: masseby(ip1jm,llm) 42 REAL,INTENT(IN) :: w(ip1jmp1,llm) 43 REAL,INTENT(INOUT) :: dv(ip1jm,llm) 44 REAL,INTENT(INOUT) :: du(ip1jmp1,llm) 45 REAL,INTENT(INOUT) :: dteta(ip1jmp1,llm) 40 46 41 47 c Local: … … 57 63 deuxjour = 2. * daysec 58 64 59 DO 1ij = 1, ip1jmp160 unsaire2(ij) = unsaire(ij) * unsaire(ij)61 1 CONTINUE65 DO ij = 1, ip1jmp1 66 unsaire2(ij) = unsaire(ij) * unsaire(ij) 67 ENDDO 62 68 END IF 63 69 … … 100 106 101 107 c 102 DO 20l = 1, llmm1108 DO l = 1, llmm1 103 109 104 110 105 111 c ...... calcul de - w/2. au niveau l+1 ....... 106 112 107 DO 5ij = 1, ip1jmp1108 wsur2( ij ) = - 0.5 * w( ij,l+1 )109 5 CONTINUE113 DO ij = 1, ip1jmp1 114 wsur2( ij ) = - 0.5 * w( ij,l+1 ) 115 ENDDO 110 116 111 117 112 118 c ..................... calcul pour du .................. 113 119 114 DO 6ij = iip2 ,ip1jm-1115 ww = wsur2 ( ij ) + wsur2( ij+1 )116 uu = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) )117 du(ij,l) = du(ij,l) - ww * ( uu - uav(ij, l ) )/massebx(ij, l)118 du(ij,l+1)= du(ij,l+1) + ww * ( uu - uav(ij,l+1))/massebx(ij,l+1)119 6 CONTINUE120 DO ij = iip2 ,ip1jm-1 121 ww = wsur2 ( ij ) + wsur2( ij+1 ) 122 uu = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) ) 123 du(ij,l) = du(ij,l) -ww*(uu-uav(ij,l))/massebx(ij,l) 124 du(ij,l+1)= du(ij,l+1) +ww*(uu-uav(ij,l+1))/massebx(ij,l+1) 125 ENDDO 120 126 121 127 c ..... correction pour du(iip1,j,l) ........ … … 123 129 124 130 CDIR$ IVDEP 125 DO 7ij = iip1 +iip1, ip1jm, iip1126 du( ij, l ) = du( ij -iim, l )127 du( ij,l+1 ) = du( ij -iim,l+1 )128 7 CONTINUE131 DO ij = iip1 +iip1, ip1jm, iip1 132 du( ij, l ) = du( ij -iim, l ) 133 du( ij,l+1 ) = du( ij -iim,l+1 ) 134 ENDDO 129 135 130 136 c ................. calcul pour dv ..................... 131 137 132 DO 8ij = 1, ip1jm133 ww = wsur2( ij+iip1 ) + wsur2( ij )134 vv = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) )135 dv(ij,l) = dv(ij, l ) - ww * (vv - vav(ij, l ) )/masseby(ij, l)136 dv(ij,l+1)= dv(ij,l+1) + ww * (vv - vav(ij,l+1))/masseby(ij,l+1)137 8 CONTINUE138 DO ij = 1, ip1jm 139 ww = wsur2( ij+iip1 ) + wsur2( ij ) 140 vv = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) ) 141 dv(ij,l) = dv(ij, l ) - ww*(vv-vav(ij,l))/masseby(ij,l) 142 dv(ij,l+1)= dv(ij,l+1) + ww*(vv-vav(ij,l+1))/masseby(ij,l+1) 143 ENDDO 138 144 139 145 c … … 147 153 c ............... 148 154 149 DO 15ij = 1, ip1jmp1155 DO ij = 1, ip1jmp1 150 156 ww = wsur2(ij) * (teta(ij,l) + teta(ij,l+1) ) 151 157 dteta(ij, l ) = dteta(ij, l ) - ww 152 158 dteta(ij,l+1) = dteta(ij,l+1) + ww 153 15 CONTINUE159 ENDDO 154 160 155 IF( conser) THEN156 DO 17ij = 1,ip1jmp1157 ge(ij) = wsur2(ij) * wsur2(ij) * unsaire2(ij)158 17 CONTINUE159 gt = SSUM( ip1jmp1,ge,1 )160 gtot(l) = deuxjour * SQRT( gt/ip1jmp1 )161 END IF161 IF( conser) THEN 162 DO ij = 1,ip1jmp1 163 ge(ij) = wsur2(ij) * wsur2(ij) * unsaire2(ij) 164 ENDDO 165 gt = SSUM( ip1jmp1,ge,1 ) 166 gtot(l) = deuxjour * SQRT( gt/ip1jmp1 ) 167 END IF 162 168 163 20 CONTINUE169 ENDDO ! of DO l = 1, llmm1 164 170 165 RETURN166 171 END
Note: See TracChangeset
for help on using the changeset viewer.