Changeset 76 for trunk/SOURCES/relaxation_water_diffusion.f90
- Timestamp:
- 06/29/16 16:21:13 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SOURCES/relaxation_water_diffusion.f90
r65 r76 18 18 19 19 subroutine relaxation_waterdif(NXX,NYY,DT,DX,vieuxHWATER,limit_hw,klimit,BMELT,INFILTR,PGMX,PGMY,KOND,KONDMAX,HWATER) 20 implicit none 20 21 !$ USE OMP_LIB 22 23 implicit none 21 24 22 25 … … 57 60 58 61 ! write(166,*)' entree relaxation waterdif' 62 !$OMP PARALLEL 63 !$OMP WORKSHARE 59 64 HWATER(:,:)= vieuxHWATER(:,:) 60 65 !$OMP END WORKSHARE 61 66 ! calcul de kmx et kmx a partir de KOND 62 67 ! conductivite hyrdraulique sur les noeuds mineurs 63 68 ! moyenne harmonique 64 69 ! ---------------------------------------- 65 70 !$OMP DO 66 71 do j=2,nyy 67 72 do i=2,nxx … … 75 80 end do 76 81 end do 77 82 !$OMP END DO 83 84 !$OMP DO 78 85 do j=2,nyy 79 86 do i=2,nxx … … 86 93 enddo 87 94 enddo 88 95 !$OMP END DO 89 96 90 97 ! attribution des coefficients arelax .... … … 100 107 dtwdx2=dt/dx/dx 101 108 102 arelax(:,:)=0. 103 brelax(:,:)=0. 104 crelax(:,:)=1. 105 drelax(:,:)=0. 106 erelax(:,:)=0. 107 frelax(:,:)=limit_hw(:,:) 108 109 110 109 !$OMP WORKSHARE 110 arelax(:,:)=0. 111 brelax(:,:)=0. 112 crelax(:,:)=1. 113 drelax(:,:)=0. 114 erelax(:,:)=0. 115 frelax(:,:)=limit_hw(:,:) 116 !$OMP END WORKSHARE 117 118 !$OMP DO 111 119 do J=2,NYY-1 112 120 do I=2,NXX-1 113 121 114 122 if (klimit(i,j).eq.0) then 115 116 123 ! calcul du vecteur 117 118 124 FRELAX(I,J)= VIEUXHWATER(I,J)+(BMELT(I,J)-INFILTR)*DT 119 125 frelax(i,j)=frelax(i,j)+(kmx(i,j)*pgmx(i,j)-kmx(i+1,j)*pgmx(i+1,j))*dtsrgdx 120 126 frelax(i,j)=frelax(i,j)+(kmy(i,j)*pgmy(i,j)-kmy(i,j+1)*pgmy(i,j+1))*dtsrgdx 121 122 127 ! calcul des diagonales 123 128 arelax(i,j)=-kmx(i,j)*dtwdx2 ! arelax : diagonale i-1,j … … 131 136 crelax(i,j)=1.+((kmx(i,j)+kmx(i+1,j))+(kmy(i,j)+kmy(i,j+1)))*dtwdx2 132 137 !crelax : diagonale i,j 133 134 138 else if (klimit(i,j).eq.1) then 135 139 hwater(i,j)=limit_hw(i,j) 136 140 ! write(6,*) i,j,hwater(i,j),crelax(i,j),frelax(i,j),arelax(i,j) 137 138 141 endif 139 140 142 end do 141 143 end do 142 143 144 !$OMP END DO 145 !$OMP END PARALLEL 144 146 145 147 ! Boucle de relaxation : … … 152 154 ntour=ntour+1 153 155 ! write(6,*) 'boucle de relaxation numero',ntour 154 156 !$OMP PARALLEL 157 !$OMP DO PRIVATE(reste) 155 158 do j=2,NYY-1 156 159 do i=2,NXX-1 … … 161 164 162 165 DELTAH(I,J) = RESTE/CRELAX(I,J) 163 164 166 end do 165 167 end do 166 167 deltah(:,:)=min(deltah(:,:),10.) 168 deltah(:,:)=max(deltah(:,:),-10.) 169 170 171 168 !$OMP END DO 169 170 !$OMP WORKSHARE 171 deltah(:,:)=min(deltah(:,:),10.) 172 deltah(:,:)=max(deltah(:,:),-10.) 173 !$OMP END WORKSHARE 172 174 ! il faut faire le calcul suivant dans une autre boucle car RESTE est fonction 173 175 ! de hwater sur les points voisins. 176 !$OMP DO 174 177 do j=2,NYY-1 175 178 do i=2,NXX-1 176 179 HWATER(I,J) = HWATER(I,J) - DELTAH(I,J) 177 178 180 end do 179 181 end do 180 182 !$OMP END DO 181 183 182 184 ! critere d'arret: 183 184 185 186 185 Delh=0 187 186 Vh=0 188 187 188 !$OMP DO REDUCTION(+:Delh) 189 189 DO j=2,NYY-1 190 190 DO i=2,NXX-1 191 191 192 192 ! write(166,*) I,J,delh,deltah(i,j) 193 193 Delh=Delh+deltah(i,j)**2 194 194 ! Vh=Vh+h(i,j)**2. 195 195 END DO 196 196 END DO 197 197 !$OMP END DO 198 !$OMP END PARALLEL 198 199 ! write(6,*) delh,maxval(deltah),minval(deltah) 199 200 ! testh=SQRT(Delh/Vh)
Note: See TracChangeset
for help on using the changeset viewer.