- Timestamp:
- 02/23/16 15:30:13 (8 years ago)
- Location:
- branches/iLoveclim
- Files:
-
- 12 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/iLoveclim
-
branches/iLoveclim/INPUT/ANTEIS1/.gmtcommands4
r4 r52 1 1 # GMT common arguments shelf 2 -R1/141/1/141 2 3 EOF -
branches/iLoveclim/SOURCES/Ant40_files/bmelt-ant-regions_mod.f90
r4 r52 14 14 MODULE BMELT_ANT_REGIONS ! cat juillet 2005 15 15 16 USE module3D_phy 17 18 19 implicit none 20 21 REAL,dimension(nx,ny) :: bmgrz !< fusion basale a la grounding zone 22 real,dimension(nx,ny) :: bmshelf !< fusion basale sous shelf 23 24 REAL,dimension(nx,ny) :: dist_talu !< distance du point au talu continental 25 REAL,dimension(nx,ny) :: typeshelf !< Type de shelf Ronne->1 Ross ->2 .... 26 !< utilises pour moduler la fusion sous le shelf 27 integer, dimension(10) :: region !< pour écrire dans le fichier param 28 character(len=30),dimension(10) :: regname !< nom des régions 29 real :: bsupshelf 30 integer :: grd !< pour une sortie 31 32 real :: bmelt_Ross,bmgrz_Ross !< fusion basale Ross 33 real :: bmelt_FRis,bmgrz_FRis !< fusion basale filchner-Ronne ice shelf 34 real :: bmelt_Amery,bmgrz_Amery !< Amery ice shelves 35 real :: bmelt_PIG,bmgrz_PIG !< Pine Island glacier 36 real :: bmelt_Pen,bmgrz_Pen !< Petits ice shelves Peninsule 37 real :: bmelt_other,bmgrz_other !< Autre ice shelves 38 real :: bmelt_talus,bmgrz_talus !< Au dela du talus continental 16 USE module3D_phy 17 18 19 implicit none 20 21 REAL,dimension(nx,ny) :: bmgrz !< fusion basale a la grounding zone 22 real,dimension(nx,ny) :: bmshelf !< fusion basale sous shelf 23 24 REAL,dimension(nx,ny) :: dist_talu !< distance du point au talu continental 25 REAL,dimension(nx,ny) :: typeshelf !< Type de shelf Ronne->1 Ross ->2 .... 26 !< utilises pour moduler la fusion sous le shelf 27 integer, dimension(10) :: region !< pour écrire dans le fichier param 28 character(len=30),dimension(10) :: regname !< nom des régions 29 real :: bsupshelf 30 integer :: grd !< pour une sortie 31 32 real :: bmelt_Ross,bmgrz_Ross !< fusion basale Ross 33 real :: bmelt_FRis,bmgrz_FRis !< fusion basale filchner-Ronne ice shelf 34 real :: bmelt_Amery,bmgrz_Amery !< Amery ice shelves 35 real :: bmelt_PIG,bmgrz_PIG !< Pine Island glacier 36 real :: bmelt_Pen,bmgrz_Pen !< Petits ice shelves Peninsule 37 real :: bmelt_other,bmgrz_other !< Autre ice shelves 38 real :: bmelt_talus,bmgrz_talus !< Au dela du talus continental 39 real :: bmelt_coef !< Coef pour corriger les valeurs std de bmelt (lu dans namelist) 39 40 40 41 CONTAINS 41 !------------------------------------------------------------------------------- 42 subroutine init_bmelt 43 44 45 46 ! Cette routine fait l'initialisation pour la fusion basale. 47 ! Elle est appelée par inputfile-vec-0.5.f90 48 49 50 namelist/bmelt_ant_reg/bmelt_Ross,bmgrz_Ross,bmelt_FRis,bmgrz_FRis, & 51 bmelt_Amery,bmgrz_Amery,bmelt_PIG,bmgrz_PIG, & 52 bmelt_Pen,bmgrz_Pen,bmelt_other,bmgrz_other, & 53 bmelt_talus,bmgrz_talus 54 55 56 rewind(num_param) ! pour revenir au debut du fichier param_list.dat 57 read(num_param,bmelt_ant_reg) 58 59 60 ! ecriture dans le fichier parametres 61 write(num_rep_42,*)'fusion basale sous les ice shelves : bmelt-ant-regions_mod' 62 write(num_rep_42,*)'----------------------------------------------------------' 63 64 ! lecture du fichier contenant les distances au talu continental (m) 65 open(88,file=TRIM(DIRNAMEINP)//'distance_talu-40km.xy') 66 67 do j=1,ny 68 do i=1,nx 69 read(88,'(i3,1x,i3,1x,f10.2)') k,k,dist_talu(i,j) 70 enddo 71 enddo 72 close(88) 73 74 ! les bords de la grille sont mis a dist_talus=0 de force 75 76 77 dist_talu(1,:)=0. !a gauche 78 dist_talu(2,:)=0. 79 80 dist_talu(nx-1,:)=0. ! a droite 81 dist_talu(nx,:)=0. 82 83 dist_talu(:,1)=0. ! en bas 84 dist_talu(:,2)=0. 85 86 dist_talu(:,ny-1)=0. ! en haut 87 dist_talu(:,ny)=0. 88 89 90 debug_3D(:,:,32)=dist_talu(:,:) 91 92 ! lecture du fichier contenant les types de shelves 93 ! Ronne-Flichner ->1, Ross -> 2 , Amery -> 3, 94 ! PIG-> 4, les petits shelves au dessus de PIG -> 5 95 96 open(88,file=TRIM(DIRNAMEINP)//'numer-ice-shelves-juil07.dat',status='OLD') 97 typeshelf(:,:)=100 98 do k=1,nx*ny 99 read(88,*,end=36) i,j,typeshelf(i,j) 100 end do 101 36 close(88) 102 103 104 105 region(:)=0 106 regname(1)='Ronne-Fichner' 107 regname(2)='Ross' 108 regname(3)='Amery' 109 regname(4)='Pig' 110 regname(5)='Petits ice shelves peninsule' 111 regname(6)='autres ice shelves' 112 regname(7)='Au dela du talus continental' 113 114 bms_init: do j=1,ny 115 do i=1,nx 116 117 talus: if (dist_talu(i,j).GT.5000.) then 118 if (nint(typeshelf(i,j)).eq.1) then ! Ronne-Filchner FRis 119 bmshelf(i,j)=bmelt_FRis 120 bmgrz(i,j)=bmgrz_FRis 121 122 123 if (region(1).eq.0) then ! pour l'impression dans 42 124 region(1)=1 125 write(num_rep_42,80)regname(1),bmshelf(i,j),bmgrz(i,j) 126 endif 127 128 80 format(a32,' bmshelf=',f8.4,' bmgrz=',f8.4) 129 130 else if (nint(typeshelf(i,j)).eq.2) then ! Ross 131 bmshelf(i,j)=bmelt_Ross 132 bmgrz(i,j)=bmgrz_Ross 133 134 if (region(2).eq.0) then 135 region(2)=1 136 write(num_rep_42,80)regname(2),bmshelf(i,j),bmgrz(i,j) 137 endif 138 139 140 else if (nint(typeshelf(i,j)).eq.3) then ! Amery 141 bmshelf(i,j)=bmelt_Amery 142 bmgrz(i,j)=bmgrz_Amery 143 if (region(3).eq.0) then 144 region(3)=1 145 write(num_rep_42,80)regname(3),bmshelf(i,j),bmgrz(i,j) 146 endif 147 148 149 else if (nint(typeshelf(i,j)).eq.4) then ! Pig 150 bmshelf(i,j)=bmelt_PIG 151 bmgrz(i,j)=bmgrz_PIG 152 153 if (region(4).eq.0) then 154 region(4)=1 155 write(num_rep_42,80)regname(4),bmshelf(i,j),bmgrz(i,j) 156 endif 157 158 else if (nint(typeshelf(i,j)).eq.5) then ! petits shelves peninsule 159 bmshelf(i,j)=bmelt_Pen 160 bmgrz(i,j)=bmgrz_Pen 161 162 if (region(5).eq.0) then 163 region(5)=1 164 write(num_rep_42,80)regname(5),bmshelf(i,j),bmgrz(i,j) 165 endif 166 167 168 else ! 169 typeshelf(i,j)=6 170 bmshelf(i,j)=bmelt_other 171 bmgrz(i,j)=bmgrz_other 172 173 if (region(6).eq.0) then 174 region(6)=1 175 write(num_rep_42,80)regname(6),bmshelf(i,j),bmgrz(i,j) 176 endif 177 178 179 endif 180 181 182 else ! au dela du talus continental 183 184 bmshelf(i,j)=bmelt_talus 185 bmgrz(i,j)=bmgrz_talus 186 187 if (region(7).eq.0) then 188 region(7)=1 189 write(num_rep_42,80)regname(7),bmshelf(i,j),bmgrz(i,j) 190 endif 191 192 193 endif talus ! fin du test sur dist_talus 194 195 enddo 196 enddo bms_init 197 198 debug_3D(:,:,33)=typeshelf(:,:) 199 debug_3D(:,:,34)=bmshelf(:,:) 200 return 201 end subroutine init_bmelt 202 203 !________________________________________________________________________________ 204 subroutine bmeltshelf 205 206 207 ! cette routine calcule la fusion basale proprement dite 208 209 integer :: ngr ! nombre de voisins flottants 210 real :: coef_talus ! pour ne pas changer la fusion au dessus de l'ocean profond 42 !------------------------------------------------------------------------------- 43 subroutine init_bmelt 44 45 46 ! Cette routine fait l'initialisation pour la fusion basale. 47 ! Elle est appelée par inputfile-vec-0.5.f90 48 49 50 namelist/bmelt_ant_reg/bmelt_Ross,bmgrz_Ross,bmelt_FRis,bmgrz_FRis, & 51 bmelt_Amery,bmgrz_Amery,bmelt_PIG,bmgrz_PIG, & 52 bmelt_Pen,bmgrz_Pen,bmelt_other,bmgrz_other, & 53 bmelt_talus,bmgrz_talus,bmelt_coef 54 55 56 rewind(num_param) ! pour revenir au debut du fichier param_list.dat 57 read(num_param,bmelt_ant_reg) 58 59 ! formats pour les ecritures dans 42 60 428 format(A) 61 62 write(num_rep_42,428)'!___________________________________________________________' 63 write(num_rep_42,428) '&bmelt-ant-regions ' 64 write(num_rep_42,*) 65 write(num_rep_42,*) 'bmelt_Ross = ',bmelt_Ross 66 write(num_rep_42,*) 'bmgrz_Ross = ',bmgrz_Ross 67 write(num_rep_42,*) 'bmelt_FRis = ',bmelt_FRis 68 write(num_rep_42,*) 'bmgrz_FRis = ',bmgrz_FRis 69 write(num_rep_42,*) 'bmelt_Amery = ',bmelt_Amery 70 write(num_rep_42,*) 'bmgrz_Amery = ',bmgrz_Amery 71 write(num_rep_42,*) 'bmelt_PIG = ',bmelt_PIG 72 write(num_rep_42,*) 'bmgrz_PIG = ',bmgrz_PIG 73 write(num_rep_42,*) 'bmelt_Pen = ',bmelt_Pen 74 write(num_rep_42,*) 'bmgrz_Pen = ',bmgrz_Pen 75 write(num_rep_42,*) 'bmelt_other = ',bmelt_other 76 write(num_rep_42,*) 'bmgrz_other = ',bmgrz_other 77 write(num_rep_42,*) 'bmelt_talus = ',bmelt_talus 78 write(num_rep_42,*) 'bmgrz_talus = ',bmgrz_talus 79 write(num_rep_42,*) 'bmelt_coef = ',bmelt_coef 80 write(num_rep_42,*)'/' 81 write(num_rep_42,428) '! bmelt_Ross & bmgrz_Ross : fonte basale secteur Ross' 82 write(num_rep_42,428) '! bmelt_FRis & bmgrz_FRis : fonte basale secteur Filchner Ronne' 83 write(num_rep_42,428) '! bmelt_Amery & bmgrz_Amery : fonte basale secteur Amery' 84 write(num_rep_42,428) '! bmelt_PIG & bmgrz_PIG : fonte basale secteur Pine Island' 85 write(num_rep_42,428) '! bmelt_Pen & bmgrz_Pen : fonte basale secteur Peninsule' 86 write(num_rep_42,428) '! bmelt_other & bmgrz_other : fonte basale autres secteurs' 87 write(num_rep_42,428) '! bmelt_talus & bmgrz_talus : fonte basale apres talus cont' 88 write(num_rep_42,428) '! bmelt_coef : coef fonte (1 pour conserver val)' 89 write(num_rep_42,*) 90 91 92 ! ecriture dans le fichier parametres 93 write(num_rep_42,*)'fusion basale sous les ice shelves : bmelt-ant-regions_mod' 94 write(num_rep_42,*)'----------------------------------------------------------' 95 96 97 ! lecture du fichier contenant les distances au talu continental (m) 98 open(88,file=TRIM(DIRNAMEINP)//'distance_talu-40km.xy') 99 100 do j=1,ny 101 do i=1,nx 102 read(88,'(i3,1x,i3,1x,f10.2)') k,k,dist_talu(i,j) 103 enddo 104 enddo 105 close(88) 106 107 ! les bords de la grille sont mis a dist_talus=0 de force 108 109 110 dist_talu(1,:)=0. !a gauche 111 dist_talu(2,:)=0. 112 113 dist_talu(nx-1,:)=0. ! a droite 114 dist_talu(nx,:)=0. 115 116 dist_talu(:,1)=0. ! en bas 117 dist_talu(:,2)=0. 118 119 dist_talu(:,ny-1)=0. ! en haut 120 dist_talu(:,ny)=0. 121 122 123 debug_3D(:,:,32)=dist_talu(:,:) 124 125 ! lecture du fichier contenant les types de shelves Ronne-Flichner 126 ! ->1, Ross -> 2 , Amery -> 3, PIG-> 4, les petits shelves au dessus de PIG -> 5 127 128 open(88,file=TRIM(DIRNAMEINP)//'numer-ice-shelves-juil07.dat',status='OLD') 129 typeshelf(:,:)=100 130 do k=1,nx*ny 131 read(88,*,end=36) i,j,typeshelf(i,j) 132 end do 133 36 close(88) 134 135 136 137 region(:)=0 138 regname(1)='Ronne-Fichner' 139 regname(2)='Ross' 140 regname(3)='Amery' 141 regname(4)='Pig' 142 regname(5)='Petits ice shelves peninsule' 143 regname(6)='autres ice shelves' 144 regname(7)='Au dela du talus continental' 145 146 bms_init: do j=1,ny 147 do i=1,nx 148 149 talus: if (dist_talu(i,j).GT.5000.) then 150 if (nint(typeshelf(i,j)).eq.1) then ! Ronne-Filchner FRis 151 bmshelf(i,j)=bmelt_FRis 152 bmgrz(i,j)=bmgrz_FRis 153 154 155 if (region(1).eq.0) then ! pour l'impression dans 42 156 region(1)=1 157 write(num_rep_42,80)regname(1),bmshelf(i,j),bmgrz(i,j) 158 endif 159 160 80 format(a32,' bmshelf=',f8.4,' bmgrz=',f8.4) 161 162 else if (nint(typeshelf(i,j)).eq.2) then ! Ross 163 bmshelf(i,j)=bmelt_Ross 164 bmgrz(i,j)=bmgrz_Ross 165 166 if (region(2).eq.0) then 167 region(2)=1 168 write(num_rep_42,80)regname(2),bmshelf(i,j),bmgrz(i,j) 169 endif 170 171 172 else if (nint(typeshelf(i,j)).eq.3) then ! Amery 173 bmshelf(i,j)=bmelt_Amery 174 bmgrz(i,j)=bmgrz_Amery 175 if (region(3).eq.0) then 176 region(3)=1 177 write(num_rep_42,80)regname(3),bmshelf(i,j),bmgrz(i,j) 178 endif 179 180 181 else if (nint(typeshelf(i,j)).eq.4) then ! Pig 182 bmshelf(i,j)=bmelt_PIG 183 bmgrz(i,j)=bmgrz_PIG 184 185 if (region(4).eq.0) then 186 region(4)=1 187 write(num_rep_42,80)regname(4),bmshelf(i,j),bmgrz(i,j) 188 endif 189 190 else if (nint(typeshelf(i,j)).eq.5) then ! petits shelves peninsule 191 bmshelf(i,j)=bmelt_Pen 192 bmgrz(i,j)=bmgrz_Pen 193 194 if (region(5).eq.0) then 195 region(5)=1 196 write(num_rep_42,80)regname(5),bmshelf(i,j),bmgrz(i,j) 197 endif 198 199 200 else ! 201 typeshelf(i,j)=6 202 bmshelf(i,j)=bmelt_other 203 bmgrz(i,j)=bmgrz_other 204 205 if (region(6).eq.0) then 206 region(6)=1 207 write(num_rep_42,80)regname(6),bmshelf(i,j),bmgrz(i,j) 208 endif 209 210 211 endif 212 213 214 else ! au dela du talus continental 215 216 bmshelf(i,j)=bmelt_talus 217 bmgrz(i,j)=bmgrz_talus 218 219 if (region(7).eq.0) then 220 region(7)=1 221 write(num_rep_42,80)regname(7),bmshelf(i,j),bmgrz(i,j) 222 endif 223 224 225 endif talus ! fin du test sur dist_talus 226 227 enddo 228 enddo bms_init 229 230 bmshelf(:,:)=bmshelf(:,:)*bmelt_coef 231 bmgrz(:,:)=bmgrz(:,:)*bmelt_coef 232 debug_3D(:,:,33)=typeshelf(:,:) 233 debug_3D(:,:,34)=bmshelf(:,:) 234 return 235 end subroutine init_bmelt 236 237 !________________________________________________________________________________ 238 subroutine bmeltshelf 239 240 241 ! cette routine calcule la fusion basale proprement dite 242 243 integer :: ngr ! nombre de voisins flottants 244 real :: coef_talus ! pour ne pas changer la fusion au dessus de l'ocean profond 211 245 212 246 do j=2,ny-1 213 do i=2,nx-1214 215 talus_nochange : if (typeshelf(i,j).lt.10) then216 coef_talus = coefbmshelf217 else218 coef_talus = 1 ! pas de changement au dela du talus continental219 endif talus_nochange220 221 222 shelf: if (flot(i,j)) then ! partie flottante223 224 bmelt(i,j)=coef_talus*bmshelf(i,j)225 226 ! bloc bsupshelf à enlever227 ! if (time.gt.5000.) then228 ! bmelt(i,j)=bmelt(i,j)+bsupshelf229 ! endif230 231 232 233 if (fbm(i,j)) then234 bmelt(i,j)=coef_talus*bmgrz(i,j)235 endif236 237 ! if (time.gt.5000.) then238 ! bmelt(i,j)=bmelt(i,j)+bsupshelf239 ! endif240 241 ! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre242 ! pour les shelves stationnaires243 244 if (igrdline.eq.1) then245 corrbmelt(i,j)=hdot(i,j)+bmelt(i,j) ! le bmelt d'equilibre246 debug_3D(i,j,28)=corrbmelt(i,j)247 endif248 249 250 else ! point posé, on compte le nombre de voisins flottants251 ngr=0252 if (flot(i+1,j)) ngr=ngr+1253 if (flot(i-1,j)) ngr=ngr+1254 if (flot(i,j+1)) ngr=ngr+1255 if (flot(i,j-1)) ngr=ngr+1256 257 ! la fusion des points limites est une combinaison entre valeur posée et valeur flottante258 ! en fonction du nombre de points flottants259 260 bmelt(i,j)= ngr/4.*bmgrz(i,j)*coef_talus+(1.-ngr/4.)*bmelt(i,j)261 262 263 endif shelf264 265 end do247 do i=2,nx-1 248 249 talus_nochange : if (typeshelf(i,j).lt.10) then 250 coef_talus = coefbmshelf 251 else 252 coef_talus = 1 ! pas de changement au dela du talus continental 253 endif talus_nochange 254 255 256 shelf: if (flot(i,j)) then ! partie flottante 257 258 bmelt(i,j)=coef_talus*bmshelf(i,j) 259 260 ! bloc bsupshelf à enlever 261 ! if (time.gt.5000.) then 262 ! bmelt(i,j)=bmelt(i,j)+bsupshelf 263 ! endif 264 265 266 267 if (fbm(i,j)) then 268 bmelt(i,j)=coef_talus*bmgrz(i,j) 269 endif 270 271 ! if (time.gt.5000.) then 272 ! bmelt(i,j)=bmelt(i,j)+bsupshelf 273 ! endif 274 275 ! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre 276 ! pour les shelves stationnaires 277 278 if (igrdline.eq.1) then 279 corrbmelt(i,j)=hdot(i,j)+bmelt(i,j) ! le bmelt d'equilibre 280 debug_3D(i,j,28)=corrbmelt(i,j) 281 endif 282 283 284 else ! point posé, on compte le nombre de voisins flottants 285 ngr=0 286 if (flot(i+1,j)) ngr=ngr+1 287 if (flot(i-1,j)) ngr=ngr+1 288 if (flot(i,j+1)) ngr=ngr+1 289 if (flot(i,j-1)) ngr=ngr+1 290 291 ! la fusion des points limites est une combinaison entre valeur posée et valeur flottante 292 ! en fonction du nombre de points flottants 293 294 bmelt(i,j)= ngr/4.*bmgrz(i,j)*coef_talus+(1.-ngr/4.)*bmelt(i,j) 295 296 297 endif shelf 298 299 end do 266 300 end do 267 301 268 ! les bords de la grille sont mis a dist_talus=0 de force269 ! attention, pourrait poser des problemes avec AGRIF270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 if (igrdline.eq.1) then286 bmelt(:,:)=0. ! hdot donne alors le -bmelt287 endif288 289 ! ecriture des bmelt pour en faire des statistiques290 !--------------------------------------------------291 !open(144,file='bmelt-test')292 !do j=1,ny293 ! do i=1,nx294 ! if (fbm(i,j)) then295 ! grd=1296 ! else297 ! grd=0298 ! endif299 ! if ((flot(i,j)).and.(H(i,j).gt.1.)) then300 ! write(144,999) i,j,grd,nint(typeshelf(i,j)), &301 ! bmelt(i,j),bmgrz(i,j),bmshelf(i,j),hdot(i,j),dist_talu(i,j)302 ! endif303 ! end do304 !end do305 !999 format(4(i0,2x),5(e12.3,2x))306 !close(144)302 ! les bords de la grille sont mis a dist_talus=0 de force 303 ! attention, pourrait poser des problemes avec AGRIF 304 305 bmelt(1,:)=bmelt_talus !a gauche 306 bmelt(2,:)=bmelt_talus 307 308 bmelt(nx-1,:)=bmelt_talus ! a droite 309 bmelt(nx,:)=bmelt_talus 310 311 bmelt(:,1)=bmelt_talus ! en bas 312 bmelt(:,2)=bmelt_talus 313 314 bmelt(:,ny-1)=bmelt_talus ! en haut 315 bmelt(:,ny)=bmelt_talus 316 317 318 319 if (igrdline.eq.1) then 320 bmelt(:,:)=0. ! hdot donne alors le -bmelt 321 endif 322 323 ! ecriture des bmelt pour en faire des statistiques 324 !-------------------------------------------------- 325 !open(144,file='bmelt-test') 326 !do j=1,ny 327 ! do i=1,nx 328 ! if (fbm(i,j)) then 329 ! grd=1 330 ! else 331 ! grd=0 332 ! endif 333 ! if ((flot(i,j)).and.(H(i,j).gt.1.)) then 334 ! write(144,999) i,j,grd,nint(typeshelf(i,j)), & 335 ! bmelt(i,j),bmgrz(i,j),bmshelf(i,j),hdot(i,j),dist_talu(i,j) 336 ! endif 337 ! end do 338 !end do 339 !999 format(4(i0,2x),5(e12.3,2x)) 340 !close(144) 307 341 308 342 return 309 343 end subroutine bmeltshelf 310 344 311 345 -
branches/iLoveclim/SOURCES/Ant40_files/lect-anteis_mod.f90
r35 r52 242 242 ! close(88) 243 243 244 call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf) ! socle 245 246 244 call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf) 247 245 248 246 ! pour passer les flux des mW/m2 au J/m2/an -
branches/iLoveclim/SOURCES/Fichiers-parametres/anteis1_LISTE-VAR-NETCDF.dat
r35 r52 118 118 Acc 119 119 11 120 1 41120 1 1 1 121 121 ----------------------------------------------------------- 122 122 Abl -
branches/iLoveclim/SOURCES/GrIce2sea_files/climat_GrIce2sea_years_perturb_mod.f90
r45 r52 100 100 101 101 namelist/clim_smb_T_gen/smb_file,coef_smb_unit,temp_annual_file 102 102 namelist/clim_snap/nb_snap,time_depart_snaps,ecart_snap,file_smb_snap,massb_time 103 103 104 104 428 format(A) … … 118 118 smb_file = trim(dirnameinp)//trim(smb_file) 119 119 120 call Read_Ncdf_var(' z',smb_file,tab)120 call Read_Ncdf_var('smb',smb_file,tab) 121 121 122 122 ! call lect_input(3,'smb',1,bm,smb_file,trim(dirnameinp)//trim(runname)//'.nc') … … 145 145 temp_annual_file = trim(dirnameinp)//trim(temp_annual_file) 146 146 147 call Read_Ncdf_var(' z',temp_annual_file,tab)147 call Read_Ncdf_var('Tann',temp_annual_file,tab) 148 148 Tann(:,:) = tab(:,:) 149 149 ! call lect_input(3,'Tann',1,Tann,temp_annual_file,trim(dirnameinp)//trim(runname)//'.nc') … … 155 155 ta0(:,:) = Tann(:,:) 156 156 Tjuly(:,:) = Tann(:,:) 157 158 159 160 !lecture namelist161 162 namelist/clim_snap/nb_snap,time_depart_snaps,ecart_snap,file_smb_snap,massb_time163 157 164 158 rewind(num_param) ! pour revenir au debut du fichier param_list.dat -
branches/iLoveclim/SOURCES/Hemin40_files/lect-hemin40_mod.f90
r27 r52 2 2 3 3 use module3D_phy 4 use interface_input 5 use io_netcdf_grisli 6 7 implicit none 4 8 5 character(len=50) :: FILE1 6 character(len=50) :: FILE2 7 character(len=80) :: filin 8 real, dimension(nx,ny,5) :: bidon ! pour l'appel a courbure 9 character(len=100) :: topo_dep ! Topo de départ 10 character(len=100) :: topo_ref ! Topo de référence 11 character(len=100) :: grid_topo ! fichier grille 12 character(len=100) :: ghf_fich ! fichier grille 13 character(len=80) :: filin 14 real, dimension(nx,ny,5) :: bidon ! pour l'appel a courbure 15 character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 9 16 10 17 contains … … 12 19 subroutine input_topo 13 20 14 namelist/topo_file/file1,file2 15 rewind(num_param) ! pour revenir au debut du fichier param_list.dat 16 read(num_param,topo_file) 21 integer :: ios 22 23 namelist/topo_file/topo_ref,topo_dep,grid_topo,ghf_fich 24 rewind(num_param) ! pour revenir au debut du fichier param_list.dat 25 read(num_param,topo_file) 17 26 ! formats pour les ecritures dans 42 18 27 428 format(A) 19 write(num_rep_42,428)'!___________________________________________________________' 20 write(num_rep_42,428) '&topo_file ! nom du bloc ' 21 write(num_rep_42,*) 22 write(num_rep_42,*) 'file1 = ', file1 23 write(num_rep_42,*) 'file2 = ', file2 24 write(num_rep_42,*)'/' 25 write(num_rep_42,428) '! file1 : topo de depart' 26 write(num_rep_42,428) '! file2 : topo de reference' 27 write(num_rep_42,*) 28 write(num_rep_42,428)'!___________________________________________________________' 29 write(num_rep_42,428) '&topo_file ! nom du bloc ' 30 write(num_rep_42,*) 31 write(num_rep_42,'(A,A)') 'topo_ref = ', topo_ref 32 write(num_rep_42,'(A,A)') 'topo_dep = ', topo_dep 33 write(num_rep_42,'(A,A)') 'grid_topo =', grid_topo 34 write(num_rep_42,'(A,A)') 'ghf_fich = ', ghf_fich 35 write(num_rep_42,*)'/' 36 write(num_rep_42,428) '! topo_ref= topo ref isostasie' 37 write(num_rep_42,428) '! topo_dep= topo de depart' 38 write(num_rep_42,428) '! grid_topo : fichier i,j,x,y,lon,lat' 39 write(num_rep_42,428) '! ghf_fich : fichier flux geothermique' 40 write(num_rep_42,*) 41 42 topo_ref=trim(dirnameinp)//trim(topo_ref) 43 topo_dep=trim(dirnameinp)//trim(topo_dep) 44 grid_topo=trim(dirnameinp)//trim(grid_topo) 45 ghf_fich=trim(dirnameinp)//trim(ghf_fich) 46 47 !write(num_rep_42,*) 'file1 = ', file1 48 !write(num_rep_42,*) 'file2 = ', file2 49 !write(num_rep_42,*)'/' 50 !write(num_rep_42,428) '! file1 : topo de depart' 51 !write(num_rep_42,428) '! file2 : topo de reference' 52 !write(num_rep_42,*) 28 53 29 54 !====================================== La reponse est 42 =========== … … 41 66 42 67 43 ! lecture adaptee aux fichiers intercomparaison EISMINT44 nxx=nx45 nyy=ny68 !!$! lecture adaptee aux fichiers intercomparaison EISMINT 69 !!$ nxx=nx 70 !!$ nyy=ny 46 71 47 ! lecture de la topo actuelle 48 ! --------------------------- 49 open (20,file=TRIM(DIRNAMEINP)//file2,status='old') 50 51 read(20,'(A80)') TITRE 52 read(20,*) NI,NJ,NXX,NYY,STEP 53 read(20,*) 54 do J=1,ny 55 do I=1,nx 56 read (20,*) S0(I,J),H0(I,J),BSOC0(I,J) 57 S0(i,j)=max(S0(i,j),0.) 58 end do 59 end do 60 close(20) 72 !!$! lecture de la topo actuelle 73 !!$! --------------------------- 74 !!$ open (20,file=TRIM(DIRNAMEINP)//file2,status='old') 75 !!$ 76 !!$ read(20,'(A80)') TITRE 77 !!$ read(20,*) NI,NJ,NXX,NYY,STEP 78 !!$ read(20,*) 79 !!$ do J=1,ny 80 !!$ do I=1,nx 81 !!$ read (20,*) S0(I,J),H0(I,J),BSOC0(I,J) 82 !!$ S0(i,j)=max(S0(i,j),0.) 83 !!$ end do 84 !!$ end do 85 !!$ close(20) 86 !!$ 87 !!$ 88 !!$! lecture de la topo de depart 89 !!$! --------------------------- 90 !!$ open (20,file=TRIM(DIRNAMEINP)//file1,status='old') 91 !!$! open (20,file='../INPUT-DATA/hemin.g50') 92 !!$ read(20,'(A80)') TITRE 93 !!$ read(20,*) NI,NJ,NXX,NYY,STEP 94 !!$ read(20,*) 95 !!$ do J=1,ny 96 !!$ do I=1,nx 97 !!$ read (20,*) S(I,J),H(I,J),BSOC(I,J) 98 !!$ end do 99 !!$ end do 100 !!$ close(20) 61 101 62 63 ! lecture de la topo de depart 64 ! --------------------------- 65 open (20,file=TRIM(DIRNAMEINP)//file1,status='old') 66 ! open (20,file='../INPUT-DATA/hemin.g50') 67 read(20,'(A80)') TITRE 68 read(20,*) NI,NJ,NXX,NYY,STEP 69 read(20,*) 70 do J=1,ny 71 do I=1,nx 72 read (20,*) S(I,J),H(I,J),BSOC(I,J) 73 end do 74 end do 75 close(20) 102 103 ! lecture de la topo de référence 104 call lect_input(1,'Bsoc',1,Bsoc0,topo_ref,file_ncdf) ! socle 105 call lect_input(1,'S',1,S0,topo_ref,file_ncdf) ! surface 106 call lect_input(1,'H',1,H0,topo_ref,file_ncdf) ! epaisseur 107 108 ! lecture de la topo de départ 109 call lect_input(1,'Bsoc',1,Bsoc,topo_dep,file_ncdf) ! socle 110 call lect_input(1,'S',1,S,topo_dep,file_ncdf) ! surface 111 call lect_input(1,'H',1,H,topo_dep,file_ncdf) ! epaisseur 112 76 113 77 114 ! calcul des courbures du socle 78 79 115 call courbure(nx,ny,dx,Bsoc,bidon(:,:,1),bidon(:,:,2),bidon(:,:,3), & 80 116 bidon(:,:,4),socle_cry,bidon(:,:,5)) … … 83 119 ! lecture des coordonnées geographiques 84 120 85 filin=TRIM(DIRNAMEINP)//'coord-nord-40km.dat' 121 ! filin=TRIM(DIRNAMEINP)//grid_topo 86 122 87 123 ! les coordonnees sont calculees en °dec avec GMT, 88 124 ! les longitudes sont comprises entre -180 et +180 (negative a l'Ouest de 89 125 ! Greenwich et positive a l'Est) 90 open(unit=2004,file= filin,iostat=ios)126 open(unit=2004,file=grid_topo,iostat=ios) 91 127 do k=1,nx*ny 92 128 read(2004,*) i,j,XCC(i,j),YCC(i,j),XLONG(i,j),YLAT(i,j) … … 101 137 102 138 ! lecture du flux geothermique de Shapiro 103 open(88,file=TRIM(DIRNAMEINP)//'ijphi_hemin40.dat') 139 ! open(88,file=TRIM(DIRNAMEINP)//'ijphi_hemin40.dat') 140 ! open(88,file=ghf_fich) 104 141 105 write(42,*) 'flux geothermique Shapiro : ',TRIM(DIRNAMEINP)//'ijphi_hemin40.dat' 142 !!$ write(42,*) 'flux geothermique Shapiro : ',TRIM(DIRNAMEINP)//'ijphi_hemin40.dat' 143 !!$ do k=1,nx*ny 144 !!$ read(88,*) i,j,ghf(i,j) 145 !!$ end do 146 !!$ close(88) 106 147 107 do k=1,nx*ny 108 read(88,*) i,j,ghf(i,j) 109 ! print*, i,j,ghf(i,j) 110 end do 111 close(88) 148 call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf) 149 112 150 ! pour passer les flux des mW/m2 au J/m2/an 113 151 ghf(:,:)=-SECYEAR/1000.*ghf(:,:) -
branches/iLoveclim/SOURCES/Makefile.grisli-gfortran.inc
r45 r52 92 92 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 93 93 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 94 prop-thermiques_mod.o \95 94 calving_frange.o no_calving.o no_lakes.o \ 96 95 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ … … 1616 1615 $(toy_recul) \ 1617 1616 $(mod_communs_RGL) \ 1618 $(mod_clim_ perturb) \1617 $(mod_clim_tof) \ 1619 1618 $(mod_tracers) \ 1620 1619 $(mod_ell) $(Liste_GrIce2sea) \ … … 1628 1627 $(toy_recul) \ 1629 1628 $(mod_communs_RGL) \ 1630 $(mod_clim_ perturb) \1629 $(mod_clim_tof) \ 1631 1630 $(mod_tracers) \ 1632 1631 $(mod_ell) $(Liste_GrIce2sea) \ -
branches/iLoveclim/SOURCES/Makefile.grisli.inc
r45 r52 91 91 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 92 92 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 93 prop-thermiques_mod.o \94 93 calving_frange.o no_calving.o no_lakes.o \ 95 94 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ … … 1617 1616 $(toy_recul) \ 1618 1617 $(mod_communs_RGL) \ 1619 $(mod_clim_ perturb) \1618 $(mod_clim_tof) \ 1620 1619 $(mod_tracers) \ 1621 1620 $(mod_ell) $(Liste_GrIce2sea) \ … … 1629 1628 $(toy_recul) \ 1630 1629 $(mod_communs_RGL) \ 1631 $(mod_clim_ perturb) \1630 $(mod_clim_tof) \ 1632 1631 $(mod_tracers) \ 1633 1632 $(mod_ell) $(Liste_GrIce2sea) \ -
branches/iLoveclim/SOURCES/Netcdf-routines/io_netcdf_GRISLI.f90
r32 r52 191 191 ! 192 192 status = nf90_inq_varid(ncid,varname,varid) 193 if (status/=nf90_noerr) then 194 write(*,*)"pb de nom de variable :", varname, file 195 stop 196 endif 193 197 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 194 198 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 249 253 ! 250 254 status = nf90_inq_varid(ncid,varname,varid) 255 if (status/=nf90_noerr) then 256 write(*,*)"pb de nom de variable :", varname, file 257 stop 258 endif 251 259 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 252 260 ! … … 294 302 ! 295 303 status = nf90_inq_varid(ncid,varname,varid) 304 if (status/=nf90_noerr) then 305 write(*,*)"pb de nom de variable :", varname, file 306 stop 307 endif 296 308 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 297 309 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 346 358 ! 347 359 status = nf90_inq_varid(ncid,varname,varid) 360 if (status/=nf90_noerr) then 361 write(*,*)"pb de nom de variable :", varname, file 362 stop 363 endif 348 364 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 349 365 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 394 410 ! 395 411 status = nf90_inq_varid(ncid,varname,varid) 412 if (status/=nf90_noerr) then 413 write(*,*)"pb de nom de variable :", varname, file 414 stop 415 endif 396 416 status=nf90_inquire_variable(ncid,varid,dimids=dimID) 397 417 status=nf90_inquire_dimension(ncid,dimID(1),len=dim1) … … 438 458 ! 439 459 status = nf90_inq_varid(ncid,varname,varid) 460 if (status/=nf90_noerr) then 461 write(*,*)"pb de nom de variable :", varname, file 462 stop 463 endif 440 464 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 441 465 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 484 508 ! 485 509 status = nf90_inq_varid(ncid,varname,varid) 510 if (status/=nf90_noerr) then 511 write(*,*)"pb de nom de variable :", varname, file 512 stop 513 endif 486 514 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 487 515 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 532 560 ! 533 561 status = nf90_inq_varid(ncid,varname,varid) 562 if (status/=nf90_noerr) then 563 write(*,*)"pb de nom de variable :", varname, file 564 stop 565 endif 534 566 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 535 567 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 584 616 ! 585 617 status = nf90_inq_varid(ncid,varname,varid) 586 ! 618 if (status/=nf90_noerr) then 619 write(*,*)"pb de nom de variable :", varname, file 620 stop 621 endif 587 622 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 588 623 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) … … 638 673 ! 639 674 status = nf90_inq_varid(ncid,varname,varid) 640 ! 675 if (status/=nf90_noerr) then 676 write(*,*)"pb de nom de variable :", varname, file 677 stop 678 endif 641 679 status=nf90_inquire_variable(ncid,varid,dimids=dimIDS) 642 680 status=nf90_inquire_dimension(ncid,dimIDS(1),len=dim1) -
branches/iLoveclim/SOURCES/steps_time_loop.f90
r25 r52 15 15 16 16 use module3d_phy 17 18 17 use module_choix ! module de choix du type de run 19 ! module_choix donne acces a tous les modules 20 ! de declaration des packages 21 18 ! module_choix donne acces a tous les modules 19 ! de declaration des packages 22 20 use sorties_ncdf_grisli 23 21 use flottab_mod -
branches/iLoveclim/SOURCES/steps_time_loop_avec_iterbeta.f90
r19 r52 15 15 16 16 use module3d_phy 17 18 use geom_type19 use temperature_type20 use ice_flow_type21 use mask_flgz_type22 use deformation_type23 use autre_pr_temp_type24 25 17 use module_choix ! module de choix du type de run 26 18 ! module_choix donne acces a tous les modules 27 19 ! de declaration des packages 28 20 use icetempmod 29 21 use sorties_ncdf_grisli 30 22 use flottab_mod 31 use interface_icetempmod32 23 use diagno_mod 33 34 24 35 25 … … 205 195 ! module_choix donne acces a tous les modules 206 196 ! de declaration des packages 207 use i nterface_icetempmod197 use icetempmod 208 198 use sorties_ncdf_grisli 209 199 use flottab_mod … … 211 201 use resolmeca_SIA_L1 212 202 ! use track_debug 213 214 use geom_type215 use temperature_type216 use ice_flow_type217 use mask_flgz_type218 use deformation_type219 use autre_pr_temp_type220 use step_temp_type221 203 222 204 … … 309 291 310 292 calc_temp: if ((nt.gt.2).and.(geoplace(1:5).ne.'mism3')) then 311 ! Hassine ca va etre modifier bien sur apres: l appel sera beaucoup moin long que ca312 call Update_geom(Geom_g)313 call Update_Temperature(Temperature_g)314 call Update_Ice_flow(Ice_flow_g)315 call Update_Mask_flgz(Mask_flgz_g)316 call Update_Deformation(Deformation_g)317 call Update_autre_pr_temp(Autre_pr_temp_g)318 call Update_step_temp(step_temp_g)319 320 293 if (itracebug.eq.1) call tracebug('avant appel icetemp') 321 322 call icetemp(geom_g,temperature_g, & 323 Ice_flow_g,Mask_flgz_g,& 324 deformation_g,Autre_pr_temp_g,& 325 step_temp_g,num_tracebug,debug_3D) 326 327 ! update arrays T, Tpmp 328 T= Temperature_g%Temperature 329 Tpmp= Temperature_g%Temp_melting 330 Tbdot= Autre_pr_temp_g%Tbdot 331 Bmelt= Autre_pr_temp_g%BMELT 332 Ibase=Autre_pr_temp_g%IBASE 333 Phid=Autre_pr_temp_g%Phid 334 335 ! write(6,*) time,'call icetemp' 294 call icetemp 336 295 ! subroutines pour le calcul de la fusion basale 337 296 call bmeltshelf
Note: See TracChangeset
for help on using the changeset viewer.