- Timestamp:
- 07/05/16 11:20:52 (8 years ago)
- Location:
- branches/iLoveclim
- Files:
-
- 43 deleted
- 70 edited
- 48 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/iLoveclim
-
branches/iLoveclim/SOURCES/3D-physique-gen_mod.f90
r38 r77 254 254 real, dimension(nx,ny) :: coef_drag !< coefficient de la loi de friction non lineaire : depend de la valeur de alpha_drag 255 255 !< si alpha_drag = 1, coef_drag = drag_centre 256 real, dimension(nx,ny) :: betamax_2d !< (Pa) frottement maxi sous les streams 256 257 ! 257 258 real,dimension(nx,ny),target :: BM !< mass balance 'o' … … 470 471 logical,dimension(nx,ny) :: cotemx !< points cotiers ">" 471 472 logical,dimension(nx,ny) :: cotemy !< points cotiers "^" 473 logical,dimension(nx,ny) :: fleuvemx !< actual grounded stream 474 logical,dimension(nx,ny) :: fleuvemy !< actual grounded stream 472 475 logical,dimension(nx,ny) :: isolx !< designe un point sans voisin sur ses faces x 473 476 logical,dimension(nx,ny) :: isoly !< designe un point sans voisin sur ses faces y -
branches/iLoveclim/SOURCES/ANT15-LBq_files/module_choix_antar15_LBq.f90
r4 r77 36 36 ! use lect_topo_anteis ! pour l'antarctique 40 km 37 37 38 use lect_topo_ant_gen ! read antarctic topo with .dat files 38 !use lect_topo_ant_gen ! read antarctic topo with .dat files Catherine 39 use lect_topo_anteis ! pour l'antarctique 40 km ou 15km Christophe 39 40 !use lect_topo_ant_CISM_gen 40 41 !use lect_topo_nord40 ! pour l'hemisphere nord 40 km … … 45 46 46 47 ! use lect_clim_act_ant_gen 47 use lect_clim_acc_T_ant_gen 48 ! use lect_clim_acc_T_ant_gen ! module Catherine climat Antarctique 49 50 !--------------Module climat --------------- 51 !use climat_forcage_mois_mod ! forcage mensuel GCM 1 Snapshot Fev 2015 52 !use climat_Grice2sea_years_mod ! climat force par fichier SMB directement (grice2sea) 53 use climat_Grice2sea_years_perturb_mod ! forcage avec SMB type MAR et evolutionn temporelle (futur ou carotte) 48 54 49 55 ! use lect_clim_act_nord40 ! pour l'hemisphere nord et l'eurasie … … 51 57 52 58 !--------------Lecture climat forcage--------------- 53 use climat_perturb_mod59 !use climat_perturb_mod 54 60 !use climat_forcage_mod 55 61 !use climat_synthes_mod 56 62 !use climat_profil_mod 57 63 !use climat_regions_delta 64 65 !use ablation_mod ! calcul de l'ablation (PDD ou autre methode) 66 use no_ablation ! pas de calcul de l'ablation => lecture fichier SMB (necessaire avec climat_Grice2sea_years_mod) 58 67 59 68 ! pas de lacs proglaciaires … … 64 73 ! attention tracer fait appel a un modele climat qui doit etre compatible avec celui choisi 65 74 ! dans modile choix. 66 67 75 use notracer_mod 68 76 … … 75 83 !use deformation_mod ! module concernant les lois de deformation 76 84 use deformation_mod_2lois ! module concernant les lois de deformation 77 78 !--------------Module propriete thermique de la glace79 use prop_thermiques_ice80 ! use prop_therm_ice_heino81 85 82 86 ! eau basale … … 104 108 ! use dragging_beta_buoy ! beta fonction de la flottaison 105 109 106 use dragging_beta_nolin ! beta non lineaire 110 !use dragging_beta_nolin ! beta non lineaire 111 112 use dragging_neff_slope ! dragging Aurelien et Christophe 107 113 108 114 !use beta_iter_vitbil_mod … … 111 117 !use dragging_plastic_LGM 112 118 !------------ spinup ----------------------------------- 113 119 use no_spinup ! spinup=0 ou spinup=1 114 120 ! use spinup_vitbil ! plusieurs variantes de spinup : inclue le dragging 115 121 ! enlever le use dragging dans ce cas là … … 133 139 !use bmelt_ant_regions ! pour l'Antarctique avec régions 134 140 135 use bmelt_seuil_prof 141 !use bmelt_seuil_prof 142 use bmelt_ant_regions ! pour l'Antarctique avec régions 136 143 137 ! USEBMELT_NOR_REGIONS ! pour le nord avec régions144 ! use BMELT_NOR_REGIONS ! pour le nord avec régions 138 145 ! use BMELT_NOR_DEPTH ! pour le nord avec profondeur d'eau 139 146 -
branches/iLoveclim/SOURCES/ANT15-LBq_files/paradim-ant15_LBq_mod.f90
r4 r77 16 16 ! character 17 17 character(len=7), parameter :: geoplace='A-LBq15' 18 character(len=2 3), parameter :: dirnameinp='../INPUT/ANT-LBq-15km/' !< input directory19 character(len= 17), parameter :: dirforcage='../INPUT/Forcage/' !< input directory18 character(len=25), parameter :: dirnameinp='../../INPUT/ANT-LBq-15km/' !< input directory 19 character(len=20), parameter :: dirforcage='../../INPUT/Forcage/' !< input directory 20 20 21 21 ! dimensionnement grilles -
branches/iLoveclim/SOURCES/Ant40_files/bmelt-ant-regions_mod.f90
r52 r77 14 14 MODULE BMELT_ANT_REGIONS ! cat juillet 2005 15 15 16 USE module3D_phy 17 18 16 use module3D_phy 17 use netcdf 18 use io_netcdf_grisli 19 19 20 implicit none 20 21 … … 26 27 !< utilises pour moduler la fusion sous le shelf 27 28 integer, dimension(10) :: region !< pour écrire dans le fichier param 28 character(len=30),dimension(10) :: regname !< nom des régions 29 character(len=30),dimension(10) :: regname !< nom des régions 30 character(len=100) :: file_number_shelves ! fichier avec les zones ice-shelves 29 31 real :: bsupshelf 30 32 integer :: grd !< pour une sortie … … 38 40 real :: bmelt_talus,bmgrz_talus !< Au dela du talus continental 39 41 real :: bmelt_coef !< Coef pour corriger les valeurs std de bmelt (lu dans namelist) 42 real, parameter :: depth_talus=-2500. !< Profondeur du talus continental 40 43 41 44 CONTAINS … … 46 49 ! Cette routine fait l'initialisation pour la fusion basale. 47 50 ! Elle est appelée par inputfile-vec-0.5.f90 48 51 52 real*8, dimension(:,:), pointer :: tab !< tableau 2d real pointer 49 53 50 54 namelist/bmelt_ant_reg/bmelt_Ross,bmgrz_Ross,bmelt_FRis,bmgrz_FRis, & 51 55 bmelt_Amery,bmgrz_Amery,bmelt_PIG,bmgrz_PIG, & 52 56 bmelt_Pen,bmgrz_Pen,bmelt_other,bmgrz_other, & 53 bmelt_talus,bmgrz_talus,bmelt_coef 57 bmelt_talus,bmgrz_talus,bmelt_coef,file_number_shelves 54 58 55 59 … … 78 82 write(num_rep_42,*) 'bmgrz_talus = ',bmgrz_talus 79 83 write(num_rep_42,*) 'bmelt_coef = ',bmelt_coef 84 write(num_rep_42,*) 'file_numer_shelves = ',file_number_shelves 80 85 write(num_rep_42,*)'/' 81 86 write(num_rep_42,428) '! bmelt_Ross & bmgrz_Ross : fonte basale secteur Ross' … … 87 92 write(num_rep_42,428) '! bmelt_talus & bmgrz_talus : fonte basale apres talus cont' 88 93 write(num_rep_42,428) '! bmelt_coef : coef fonte (1 pour conserver val)' 94 write(num_rep_42,428) '! file_numer_ice-shelves : fichier zones ice shelves' 89 95 write(num_rep_42,*) 90 96 91 97 92 ! ecriture dans le fichier parametres93 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,ny101 do i=1,nx102 read(88,'(i3,1x,i3,1x,f10.2)') k,k,dist_talu(i,j)103 enddo104 enddo105 close(88)106 107 ! les bords de la grille sont mis a dist_talus=0 de force108 109 110 dist_talu(1,:)=0. !a gauche111 dist_talu(2,:)=0.112 113 dist_talu(nx-1,:)=0. ! a droite114 dist_talu(nx,:)=0.115 116 dist_talu(:,1)=0. ! en bas117 dist_talu(:,2)=0.118 119 dist_talu(:,ny-1)=0. ! en haut120 dist_talu(:,ny)=0.121 122 123 debug_3D(:,:,32)=dist_talu(:,:)124 98 125 99 ! lecture du fichier contenant les types de shelves Ronne-Flichner 126 100 ! ->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 101 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 102 file_number_shelves=TRIM(DIRNAMEINP)//trim(file_number_shelves) 103 ! call lect_input(1,'z',1,typeshelf,file_number_shelves,file_ncdf) 104 call Read_Ncdf_var('z',file_number_shelves,tab) 105 typeshelf(:,:) = tab(:,:) 106 ! open(88,file=TRIM(DIRNAMEINP)//'numer-ice-shelves-juil07.dat',status='OLD') 107 ! open(88,file=TRIM(file_number_shelves),status='OLD') 108 ! do j=1,ny 109 ! do i=1,nx 110 ! read(88,*) typeshelf(i,j) 111 ! enddo 112 ! enddo 113 ! close(88) 136 114 137 115 region(:)=0 … … 147 125 do i=1,nx 148 126 149 talus: if ( dist_talu(i,j).GT.5000.) then127 talus: if (Bsoc(i,j).GT.depth_talus) then 150 128 if (nint(typeshelf(i,j)).eq.1) then ! Ronne-Filchner FRis 151 129 bmshelf(i,j)=bmelt_FRis … … 227 205 enddo 228 206 enddo bms_init 207 229 208 230 209 bmshelf(:,:)=bmshelf(:,:)*bmelt_coef … … 247 226 do i=2,nx-1 248 227 249 talus_nochange : if ( typeshelf(i,j).lt.10) then228 talus_nochange : if (Bsoc(i,j).GT.depth_talus) then 250 229 coef_talus = coefbmshelf 251 230 else 252 coef_talus = 1 ! pas de changement au dela du talus continental 231 coef_talus = 1 ! pas de changement au dela du talus continental 253 232 endif talus_nochange 254 233 -
branches/iLoveclim/SOURCES/Ant40_files/lect-anteis_mod.f90
r52 r77 37 37 38 38 integer :: ios 39 ! pour les lectures ncdf 40 real*8, dimension(:,:), pointer :: tab !< tableau 2d real pointer 39 41 40 42 namelist/topo_file/topo_ref,topo_dep,grid_topo,ghf_fich … … 101 103 ! voir init_iso et a avoir une surface de reference pour les temperatures 102 104 ! lecture adaptee aux fichiers ZBL.dat ou netcdf ou grd 103 call lect_input(1,'Bsoc',1,Bsoc0,topo_ref,file_ncdf) ! socle 104 call lect_input(1,'S',1,S0,topo_ref,file_ncdf) ! surface 105 call lect_input(1,'H',1,H0,topo_ref,file_ncdf) ! epaisseur 105 ! call lect_input(1,'Bsoc',1,Bsoc0,topo_ref,file_ncdf) ! socle 106 ! call lect_input(1,'S',1,S0,topo_ref,file_ncdf) ! surface 107 ! call lect_input(1,'H',1,H0,topo_ref,file_ncdf) ! epaisseur 108 109 ! lecture pour eviter plantage avec compile -O0 110 call Read_Ncdf_var('Bsoc',topo_ref,tab) 111 Bsoc0(:,:) = tab(:,:) 112 call Read_Ncdf_var('S',topo_ref,tab) 113 S0(:,:) = tab(:,:) 114 call Read_Ncdf_var('H',topo_ref,tab) 115 H0(:,:) = tab(:,:) 106 116 !cdc correction point pole sud : 107 117 ! S0(71,71)=(S0(71,70)+S0(71,72)+S0(70,71)+S0(72,71))/4. … … 127 137 ! --------------------------- 128 138 ! lecture adaptee aux fichiers ZBL.dat ou netcdf ou grd 129 call lect_input(1,'Bsoc',1,Bsoc,topo_dep,file_ncdf) ! socle 130 call lect_input(1,'S',1,S,topo_dep,file_ncdf) ! surface 131 call lect_input(1,'H',1,H,topo_dep,file_ncdf) ! epaisseur 139 ! call lect_input(1,'Bsoc',1,Bsoc,topo_dep,file_ncdf) ! socle 140 ! call lect_input(1,'S',1,S,topo_dep,file_ncdf) ! surface 141 ! call lect_input(1,'H',1,H,topo_dep,file_ncdf) ! epaisseur 142 ! lecture pour eviter plantage avec compile -O0 143 call Read_Ncdf_var('Bsoc',topo_dep,tab) 144 Bsoc(:,:) = tab(:,:) 145 call Read_Ncdf_var('S',topo_dep,tab) 146 S(:,:) = tab(:,:) 147 call Read_Ncdf_var('H',topo_dep,tab) 148 H(:,:) = tab(:,:) 149 132 150 ! S(71,71)=(S(71,70)+S(71,72)+S(70,71)+S(72,71))/4. 133 151 ! Bsoc(71,71)=(Bsoc(71,70)+Bsoc(71,72)+Bsoc(70,71)+Bsoc(72,71))/4. … … 242 260 ! close(88) 243 261 244 call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf) 262 ! call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf) 263 ! pour eviter plantage -O0 264 call Read_Ncdf_var('ghf',ghf_fich,tab) 265 ghf(:,:) = tab(:,:) 245 266 246 267 ! pour passer les flux des mW/m2 au J/m2/an -
branches/iLoveclim/SOURCES/Ant40_files/module_choix-antar40-0.4.f90
r45 r77 45 45 46 46 !--------------Lecture climat forcage--------------- 47 use climat_forcage_mois_mod ! forcage mensuel GCM 1 Snapshot Fev 201547 !use climat_forcage_mois_mod ! forcage mensuel GCM 1 Snapshot Fev 2015 48 48 !use climat_perturb_mod ! climat perturbe a reverifier Dec 2015 49 49 !use climat_Grice2sea_years_mod ! climat force par fichier SMB directement (grice2sea) 50 use climat_Grice2sea_years_perturb_mod ! climat force par fichier SMB directement (grice2sea) + index temperature carotte de glace 51 50 52 51 53 !use climat_forcage_mod … … 54 56 !use climat_regions_delta 55 57 56 use ablation_mod ! calcul de l'ablation (PDD ou autre methode)57 !use no_ablation ! pas de calcul de l'ablation => lecture fichier SMB (necessaire avec climat_Grice2sea_years_mod)58 !use ablation_mod ! calcul de l'ablation (PDD ou autre methode) 59 use no_ablation ! pas de calcul de l'ablation => lecture fichier SMB (necessaire avec climat_Grice2sea_years_mod) 58 60 59 61 ! pas de lacs proglaciaires … … 78 80 ! sliding- dragging 79 81 ! use module sliding_vitbal 80 use sliding_Bindschadler 82 ! use sliding_Bindschadler 83 use no_sliding 81 84 ! use sliding_dragging_heino ! loi de glissement heino : mis dans diffusiv : 82 85 … … 86 89 !use dragging_hwat_cont 87 90 88 use dragging_hwat_contmaj ! frottement basal catherine grisliv8 ice stream peu actifs89 ! use dragging_neff_contmaj ! dragging Aurelien et Christophe Fev 2016 91 !use dragging_hwat_contmaj ! frottement basal catherine grisliv8 ice stream peu actifs 92 use dragging_neff_slope ! dragging Aurelien et Christophe 90 93 ! use dragging_hwat_sedim version sediment HN 91 94 … … 107 110 108 111 !--------------Fusion basale------------------------ 109 !use bmelt_ant_regions ! pour l'Antarctique avec régions110 use bmelt_ant_regions_oce ! pour Ant region et temp ocean112 use bmelt_ant_regions ! pour l'Antarctique avec régions 113 !use bmelt_ant_regions_oce ! pour Ant region et temp ocean 111 114 !use bmelt_nor_regions ! pour le nord avec régions 112 115 !use bmelt_nor_depth ! pour le nord avec profondeur d'eau -
branches/iLoveclim/SOURCES/Antarctique_general_files/output_anta_mod-0.4.f90
r4 r77 123 123 124 124 filout = runname//'_vol_regions.dat' 125 filout = TRIM(DIRNAMEOUT)// 'time-series/'//TRIM(filout)125 filout = TRIM(DIRNAMEOUT)//TRIM(filout) 126 126 open(nvol,file=filout) 127 127 128 128 filout = runname// '_volbuoy_regions.dat' 129 filout = TRIM(DIRNAMEOUT)// 'time-series/'//TRIM(filout)129 filout = TRIM(DIRNAMEOUT)//TRIM(filout) 130 130 open(nvolbuoy,file=filout) 131 131 132 132 filout = runname//'_meanhdot_regions.dat' 133 filout = TRIM(DIRNAMEOUT)// 'time-series/'//TRIM(filout)133 filout = TRIM(DIRNAMEOUT)//TRIM(filout) 134 134 open(nhdot,file=filout) 135 135 136 136 filout = runname//'_sigmahdot_regions.dat' 137 filout = TRIM(DIRNAMEOUT)// 'time-series/'//TRIM(filout)137 filout = TRIM(DIRNAMEOUT)//TRIM(filout) 138 138 open(nsigma_hdot,file=filout) 139 139 140 140 filout = runname//'_nbpoints_regions.dat' 141 filout = TRIM(DIRNAMEOUT)// 'time-series/'//TRIM(filout)141 filout = TRIM(DIRNAMEOUT)//TRIM(filout) 142 142 open(npoints,file=filout) 143 143 -
branches/iLoveclim/SOURCES/Draggings_modules/beta_iter_vitbil_mod.f90
r8 r77 99 99 betamy_file = trim(dirnameinp)//trim(betamy_file) 100 100 betamax = beta_limgz 101 101 betamax_2d(:,:) = betamax 102 102 103 103 ! call lect_input(1,'beta_c',1,drag_centre,beta_c_file,'') … … 345 345 end where 346 346 347 fleuvemx(:,:)=gzmx(:,:) 348 fleuvemy(:,:)=gzmy(:,:) 347 349 348 350 end subroutine gzm_beta_prescr -
branches/iLoveclim/SOURCES/Draggings_modules/dragging_prescr_beta_buoyency_mod.f90
r4 r77 100 100 betamy_file = trim(dirnameinp)//trim(betamy_file) 101 101 betamax = beta_limgz 102 betamax_2d(:,:) = betamax 102 103 103 104 ! read the beta value on centered and staggered grids … … 327 328 end where 328 329 330 fleuvemx(:,:)=gzmx(:,:) 331 fleuvemy(:,:)=gzmy(:,:) 329 332 330 333 -
branches/iLoveclim/SOURCES/Draggings_modules/dragging_prescr_beta_mod.f90
r4 r77 82 82 betamy_file = trim(dirnameinp)//trim(betamy_file) 83 83 betamax = beta_limgz 84 betamax_2d(:,:) = betamax 84 85 85 86 ! read the beta value on centered and staggered grids … … 336 337 end where 337 338 338 339 fleuvemx(:,:)=gzmx(:,:) 340 fleuvemy(:,:)=gzmy(:,:) 339 341 340 342 end subroutine gzm_beta_prescr -
branches/iLoveclim/SOURCES/Draggings_modules/dragging_prescr_beta_nolin_mod.f90
r4 r77 169 169 betamy_file = trim(dirnameinp)//trim(betamy_file) 170 170 betamax = beta_limgz 171 betamax2d(:,:) = betamax 171 172 172 173 … … 434 435 end where 435 436 436 437 fleuvemx(:,:)=gzmx(:,:) 438 fleuvemy(:,:)=gzmy(:,:) 437 439 438 440 end subroutine gzm_beta_prescr -
branches/iLoveclim/SOURCES/Fichiers-parametres/A-LBq15_LISTE-VAR-NETCDF.dat
r4 r77 82 82 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fin du header commentaire 83 83 ============================================ classe 1 84 1 100 4 ! class 1 nombre de snapmax 100 4 type de noeud84 1 220 4 ! class 1 nombre de snapmax 100 4 type de noeud 85 85 'o' '>' '^' 'x' 86 86 ----------------------------------------------------------- … … 114 114 Bm 115 115 10 116 1 0 -1116 1 1 1 117 117 ----------------------------------------------------------- 118 118 Acc 119 119 11 120 0 4 0120 1 1 1 121 121 ----------------------------------------------------------- 122 122 Abl 123 123 12 124 1 0 -1124 1 1 1 125 125 ----------------------------------------------------------- 126 126 Calv 127 127 13 128 0 1 -1128 0 1 1 129 129 ----------------------------------------------------------- 130 130 dHdt … … 134 134 Tann 135 135 18 136 1 0 -1136 1 1 1 137 137 ----------------------------------------------------------- 138 138 Tjja 139 139 19 140 1 0 -1140 1 1 1 141 141 ----------------------------------------------------------- 142 142 Tb … … 144 144 1 1 1 145 145 ----------------------------------------------------------- 146 ghf 147 23 148 1 1 -1 149 ----------------------------------------------------------- 146 150 phid 147 151 24 148 1 0 -1152 1 1 1 149 153 ----------------------------------------------------------- 150 154 Bmelt 151 155 25 152 1 0 -1156 1 1 1 153 157 ----------------------------------------------------------- 154 158 Uxbar_maj 155 159 30 156 01 1160 1 1 1 157 161 ----------------------------------------------------------- 158 162 Uybar_maj 159 163 31 160 01 1164 1 1 1 161 165 ----------------------------------------------------------- 162 166 Umag … … 168 172 1 1 1 169 173 ----------------------------------------------------------- 170 171 174 bm_ref_t 175 197 176 1 1 1 177 ----------------------------------------------------------- 178 grad_bm 179 198 180 1 1 1 181 ----------------------------------------------------------- 182 bm_time 183 199 184 1 1 1 185 ----------------------------------------------------------- 172 186 ============================================ classe 2 173 2 100 3 ! class 2 nombre de snapmax 100 3 type de noeud a sortir187 2 220 3 ! class 2 nombre de snapmax 100 3 type de noeud a sortir 174 188 '>' '^' 'o' 175 189 ----------------------------------------------------------- … … 204 218 frtmx 205 219 40 206 0 0 -1220 1 1 1 207 221 ----------------------------------------------------------- 208 222 frtmy ! sur noeud mineur 209 223 41 210 0 0 -1224 1 1 1 211 225 ----------------------------------------------------------- 212 226 tobmx ! sur noeud mineur 213 227 42 214 01 1228 1 1 1 215 229 ----------------------------------------------------------- 216 230 tobmy 217 231 43 218 01 1232 1 1 1 219 233 ----------------------------------------------------------- 220 234 toshe … … 224 238 epsxx !'o' 225 239 45 226 1 0-1240 1 3 -1 227 241 ----------------------------------------------------------- 228 242 epsyy !'o' 229 243 46 230 1 0-1244 1 3 -1 231 245 ----------------------------------------------------------- 232 246 epsxy !'x' 233 247 47 234 1 01248 1 3 1 235 249 ----------------------------------------------------------- 236 250 eps 'o' 237 251 48 238 1 0 1 239 ----------------------------------------------------------- 240 Abar 'o' 241 49 242 1 1 1 252 1 3 1 243 253 ----------------------------------------------------------- 244 254 pvi ! 'o' … … 264 274 Hwat 265 275 60 266 01 1276 1 1 1 267 277 ----------------------------------------------------------- 268 278 Hdw … … 292 302 Nefmx 293 303 68 294 01 1304 1 1 1 295 305 ----------------------------------------------------------- 296 306 Nefmy 297 307 69 298 02 1308 1 2 1 299 309 ----------------------------------------------------------- 300 310 posx … … 316 326 H_uw_x 317 327 192 318 01 1328 1 1 1 319 329 ----------------------------------------------------------- 320 330 H_uw_y 321 331 193 322 0 1 1323 -----------------------------------------------------------324 time_float325 194326 332 1 1 1 327 333 ----------------------------------------------------------- -
branches/iLoveclim/SOURCES/Fichiers-parametres/A-LBq15_TEMPS-NETCDF.dat
r4 r77 15 15 ----------------------------------------------------------------------- 16 16 4 ndtsortie lecture de dtncdf de sortie 17 10.17 5000. 18 18 10000. 19 19 20000. 20 20 1.e10 21 21 ------------------------------------------------------------------------------------------- 22 24 npredeft lecture de predef_tsort 23 1990 24 1991 25 1992 26 1993 27 1994 28 1995 29 1996 30 1997 31 1998 32 1999 22 9 npredeft lecture de predef_tsort 23 -21000 24 10 25 100 26 200 27 500 28 1000 33 29 2000 34 200135 200236 200337 200438 200539 200640 200741 200842 200843 201044 201145 201246 201547 248 649 750 851 952 10.53 1154 1255 1356 1457 1658 1759 1860 1961 15.62 20.63 30.64 40.65 50.66 15067 20.68 100.69 500.70 5.71 10.72 =======73 20.74 50.75 100.76 200.77 500.78 1000.79 10000.80 20000.81 70.82 80.83 90.84 100085 1000086 5000087 2588 3589 6690 10091 15092 20093 25094 30095 35096 40097 45098 50099 300100 400101 3000102 4000103 30 5000 104 5010105 5020106 5050107 5100108 5200109 5300110 5400111 5500112 5600113 5700114 5800115 5900116 6000117 6500118 31 7000 119 7500120 8000121 122 32 ------------------------------------------------------------------------------------------- 123 -
branches/iLoveclim/SOURCES/Fichiers-parametres/Makefile.tof-lsce3130.inc
r22 r77 19 19 20 20 # lit le nom du fichier param pour lancer sur r2d2 par une commande : echo jobparam | LBQ.... 21 22 21 JOB = 'job' 23 22 23 # mettre debug à 1 pour compiler avec options strictes 24 debug ?= 0 25 26 # compilation avec ifort : 27 ifeq ($(ifort),1) 24 28 25 29 # librairies 30 NCDF_INC = -I$(NETCDFHOME)/include 31 NCDF_LIB = -L$(NETCDFHOME)/lib -lnetcdf -lnetcdff 26 32 27 NCDF_INC = $(NETCDFHOME)/include 28 NCDF_LIB = -L$(NETCDFHOME)/lib -lnetcdf -lnetcdff 33 # utilisation de MKL : 34 ifeq ($(mkl_c), 1) 35 MKL_LIB = -L$(MKLROOT)/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm # MKL parallele 36 # MKL_LIB = -L$(MKLROOT)/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm # MKL sequentiel 37 MKL_INC = -I$(MKLROOT)/include 38 endif 29 39 40 IFORT= ifort 30 41 31 #MKL_LIB = -L$(DIRLOCAL)/intel/mkl9/lib/32 -lmkl_lapack -lmkl_ia32 -lguide -lpthread 32 #MKL_LIB = -L$(DIRLOCAL)/intel/mkl10/lib/32 -lmkl -lguide -lpthread # -lmklapack 33 34 ifeq ($(mkl_c), 1) 35 MKL_LIB = -L$MKLROOT/lib/em64t -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread 36 export $MKL_LIB 37 endif 38 39 IFORT= ifort 40 41 ARITHM = -O2 -fp-model precise -heap-arrays -traceback -diag-disable warn -mcmodel=medium # -traceback -CB -g # options pour une meilleure arithmetique 42 ARITHMi = -O2 -fp-model precise #-openmp 42 43 # (normalement reproductible) 44 ifeq ($(debug), 1) 45 ARITHM = $(ARITHMi) -CB -g -p -traceback -warn all #-openmp 46 else 47 ARITHM = $(ARITHMi) -diag-disable warn 48 endif 49 43 50 #ARITHM = -fp-model precise -warn all -CU -CA # options pour une meilleure arithmetique (normalement reproductible) 44 51 # ARITHM = -03 # trop brutal ne pas utiliser 45 52 53 FT = $(IFORT) $(ARITHM) $(MKL_INC) #-traceback -CB #-g #-pg # -g # -pg -ipo !aurel : j'ai enleve -CB 54 LK = $(IFORT) $(ARITHM) -i_dynamic # -traceback -CB # -g #-pg #-g # -pg 55 F_NETCDF = $(IFORT) $(ARITHM) -c -I$(NCDF_INC) # -traceback -CB #-g #-pg -ipo # -g 56 #FT = $(IFORT) $(ARITHM) -c -I$(NCDF_INC) # -traceback -CB #-g #-pg -ipo # -g 57 58 # compilation avec gfortran et librairie BLAS 59 else 46 60 61 # librairies 62 LIBSYS = /usr/lib 63 # INCSYS = /usr/include # Ubuntu 64 INCSYS = /usr/lib64/gfortran/modules # Fedora 65 NCDF_INC = $(INCSYS) 66 NCDF_LIB = -L$(LIBSYS) -lnetcdff -lnetcdf 47 67 48 FT = $(IFORT) $(ARITHM) -c #-traceback -CB #-g #-pg # -g # -pg -ipo !aurel : j'ai enleve -CB 49 LK = $(IFORT) $(ARITHM) -i_dynamic # -traceback -CB # -g #-pg #-g # -pg 50 F_NETCDF = $(IFORT) $(ARITHM) -c -I$(NCDF_INC) # -traceback -CB #-g #-pg -ipo # -g 51 FT = $(IFORT) $(ARITHM) -c -I$(NCDF_INC) # -traceback -CB #-g #-pg -ipo # -g 52 F_90 = -w90 68 IFORT= gfortran 69 70 ARITHMi = -O2 -ffree-line-length-none -mtune=native -mfpmath=sse 71 72 ifeq ($(debug), 1) 73 ARITHM = $(ARITHMi) -g -pg -Wall -fno-align-commons -p -ggdb -ffpe-trap=invalid,zero,overflow,underflow -fbacktrace -fcheck=all 74 else 75 ARITHM = $(ARITHMi) 76 endif 77 78 # debug : -g -CB -fp-stack-check -check all 79 FT = $(IFORT) $(ARITHM) -c 80 LK = $(IFORT) $(ARITHM) 81 F_NETCDF = $(IFORT) $(ARITHM) -c -I$(NCDF_INC) 82 endif 53 83 54 84 55 85 56 -
branches/iLoveclim/SOURCES/Fichiers-parametres/hemin40_TEMPS-NETCDF.dat
r9 r77 15 15 ------------------------------------------------------------------------------------------- 16 16 4 ndtsortie lecture de dtsortie_hz 17 1000 0.17 1000. 18 18 50000. 19 19 100000. -
branches/iLoveclim/SOURCES/GrIce2sea_files/climat_GrIce2sea_years_mod.f90
r35 r77 116 116 !cdc test debug Hemin15 et Greeneem15 117 117 ! where (bm(:,:).lt.-1000) bm(:,:)=0. 118 118 where (bm(:,:).eq.0) bm(:,:)=-10. !afq 119 119 120 120 acc(:,:) = 0. … … 138 138 !cdc test debug Hemin15 139 139 ! where (Tann(:,:).lt.-100.) Tann(:,:)=10. 140 140 where (Tann(:,:).lt.-100.) Tann(:,:)=10. !afq 141 141 142 142 ta0(:,:) = Tann(:,:) -
branches/iLoveclim/SOURCES/GrIce2sea_files/climat_GrIce2sea_years_perturb_mod.f90
r52 r77 16 16 17 17 18 use module3d_phy,only: nx,ny,S,S0,H,Bsoc,acc,abl,BM,Tann,Tjuly,Ts,time,dt,num_param,num_rep_42,num_forc,dirforcage,dirnameinp,tafor,time,sealevel 18 use module3d_phy,only: nx,ny,S,S0,H,Bsoc,acc,abl,BM,Tann,Tjuly,Ts,time,dt,num_param,num_rep_42,num_forc,dirforcage,dirnameinp,tafor,time,sealevel,coefbmshelf 19 19 !use lect_climref_Ice2sea 20 20 use netcdf … … 58 58 59 59 ! aurel, pour climat type perturb: 60 integer nft !< nombre de lignes a lire dans le fichier forcage climatique 61 real,dimension(:),allocatable :: tdate !< time for climate forcing 62 real,dimension(:),allocatable :: tpert !< temperature for climate forcing 63 real,dimension(:),allocatable :: spert !< sea surface perturbation 64 real :: coefT !< pour modifier l'amplitude de la perturb. T 65 character(len=120) :: filforc !< nom du fichier forcage 60 integer nft !> nombre de lignes a lire dans le fichier forcage climatique 61 real,dimension(:),allocatable :: tdate !> time for climate forcing 62 real,dimension(:),allocatable :: tpert !> temperature for climate forcing 63 real,dimension(:),allocatable :: spert !> sea surface perturbation 64 real :: coefT !> pour modifier l'amplitude de la perturb. T 65 character(len=120) :: filforc !> nom du fichier forcage 66 integer :: pertsmb !> boolean: do we modify the smb? 67 real :: rapsmb !> if we modify the smb this is the equivalent of rappact 66 68 67 69 … … 124 126 bm(:,:) = tab(:,:) * coef_smb_unit 125 127 126 ! where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.)) 127 ! bm(:,:) = bm(:,:) - 5. ! pour faire un masque a l'exterieur du Groenland actuel 128 ! end where 129 128 !where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.)) 129 ! bm(:,:) = bm(:,:) - 5. ! pour faire un masque a l'exterieur du Groenland actuel 130 !end where 131 where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.).and.(bm(:,:).gt.0.)) 132 bm(:,:) = -0.1 133 end where 130 134 !cdc test debug Hemin15 et Greeneem15 131 135 ! where (bm(:,:).lt.-1000) bm(:,:)=0. 132 136 where (bm(:,:).eq.0) bm(:,:)=-5. !afq 137 133 138 acc(:,:) = 0. 134 139 abl(:,:) = 0. … … 151 156 !cdc test debug Hemin15 152 157 ! where (Tann(:,:).lt.-100.) Tann(:,:)=10. 153 158 where (Tann(:,:).lt.-100.) Tann(:,:)=10. !afq 154 159 155 160 ta0(:,:) = Tann(:,:) … … 228 233 229 234 ! copie la valeur de reference dans bm_0 230 bm_0(:,:) = bm(:,:)235 ! bm_0(:,:) = bm(:,:) 231 236 endif 232 237 ! copie la valeur de reference dans bm_0 238 bm_0(:,:) = bm(:,:) !afq marion dufresne: we do it even if we don't read any snapshot 239 233 240 filin=trim(dirforcage)//trim(filforc) 234 241 … … 318 325 implicit none 319 326 namelist/lapse_rates/T_lapse_rate 320 namelist/clim_pert_massb/coefT,filforc 327 namelist/clim_pert_massb/coefT,filforc,pertsmb,rapsmb 321 328 322 329 rewind(num_param) ! pour revenir au debut du fichier param_list.dat … … 344 351 write(num_rep_42,*) 'coefT = ', coefT 345 352 write(num_rep_42,'(A,A)') ' filforc = ', filforc 353 write(num_rep_42,*) 'pertsmb = ', pertsmb 354 write(num_rep_42,*) 'rapsmb = ', rapsmb 346 355 write(num_rep_42,*)'/' 347 356 write(num_rep_42,*) … … 370 379 implicit none 371 380 372 integer i, j,ift373 381 integer i,ift 382 374 383 select case (massb_time) 375 384 case(0) … … 403 412 Tann (:,:) = Ta0 (:,:) + T_lapse_rate * (S(:,:)-S0(:,:)) +Tafor 404 413 Ts(:,:) = Tann(:,:) 414 415 ! aurel marion dufresne: we might want to decrease the SMB during glacials..? 416 if (pertsmb.eq.1) then 417 bm(:,:) = bm_0(:,:) * exp( rapsmb *(Tann(:,:)-Ta0(:,:))) 418 if (Tafor.lt.0.) then 419 where(bm(:,:).lt.0.) bm(:,:)=min(bm(:,:)-Tafor*0.05,1.) !10 degrees less give 0.5 meter more ? 420 end if 421 end if 422 423 ! coefmshelf est un coefficient qui fait varier bmgrz et bmshelf en fonction de tafor 424 coefbmshelf=(1.+tafor/10.) ! coefbmshelf=0 pour tafor=-10deg 425 coefbmshelf=max(coefbmshelf,0.) 426 coefbmshelf=min(coefbmshelf,2.) 427 405 428 case(1) 406 429 call massb_Ice2sea_RCM -
branches/iLoveclim/SOURCES/Greeneem_files/lect-greeneem_mod.f90
r27 r77 24 24 integer :: n1,n2,ndx 25 25 real :: sealevel0 26 real :: archimed 27 integer :: ios 26 28 27 29 contains … … 84 86 do i=1,nx 85 87 86 archim = Bsoc(i,j)+H(i,j)*ro/row -sealevel88 archimed = Bsoc(i,j)+H(i,j)*ro/row -sealevel 87 89 88 if (( ARCHIM.LT.0.).and.(H(I,J).gt.1.E-3)) then ! le point flotte90 if ((archimed.LT.0.).and.(H(I,J).gt.1.E-3)) then ! le point flotte 89 91 flot(i,j)=.true. 90 92 else -
branches/iLoveclim/SOURCES/Hemin40_files/output_hemin40_mod.f90
r13 r77 157 157 integer inp(13) ! Surface posee (nb de noeuds) 158 158 integer inf(13) ! surface flottante 159 integer npab, npcal 160 161 REAL long, lat, rd, cx, cy, cxmin, cymin, r2 159 162 160 !Variables pour sommer 163 161 real isvol(13),isvolf(13) ! volume posé et flottants … … 165 163 REAL ISABLBORD(13),ABLATOT(13),TACC(13),TBM(13) 166 164 REAL ITJJA(13) 167 REAL ABLAMEAN165 ! REAL ABLAMEAN 168 166 !moyennes utilisées en output 169 167 REAL HMAX_(13) , HMEAN_(13) … … 178 176 179 177 REAL HDOTMEAN_G 180 REAL ABLA(NX,NY)178 ! REAL ABLA(NX,NY) 181 179 REAL DELTAVOL 182 180 … … 384 382 905 format(f9.1,1x, e11.4,1x,e11.5, 1x,i5, 1x,e10.4,1x,i5 , 6(1x,e12.5), & 385 383 12(2(1x,e10.4,1x,i5), 9(1x,e11.4) ) ) 386 900 format(i5,1x,f9.1,1x,f5.1,1x,e10.5,1x,i4,1x,i4,1x,f6.2,1X, &387 f6.2,1X,f6.2,1X,f6.2,1X,i5,8(1x,f6.2))388 903 format(f9.1,1x,f4.1,1x,f5.1,1x,e10.5,1x,i5,1x,i4,1x,i5,1X, &389 f7.3,1x,f6.2,1X,i6,4(1x,e7.1),1X,f6.2,1x,f7.3)390 384 391 904 format(F9.1,1x,e10.5,1x,e11.5,1x,i5,6(1x,e12.6),3(1x,e10.5, &392 1x,i5,6(1X,e12.6)),1X,i4,1X,i5,1x,f7.3,1x, &393 f6.2,1x,i6,2(1x,e7.1),2(1x,f8.4),1X,f6.2,2(1x,i5),1x,e7.1, &394 8(1x,e12.6),4(1x,f15.7),9(1x,e10.5,1x,i5,2(1x,e12.6),1x,f15.7), &395 26(1x,f8.3))396 385 397 386 940 format('%%%% ',a,' time=',f8.0,' %%%%') -
branches/iLoveclim/SOURCES/Makefile
r40 r77 1 1 2 # Makefile pour construire les executables grisli en fonction de la machin 2 3 # Pour compiler : make -f Makefile-template Grice2sea … … 10 11 11 12 # Choice for compiler (ifort = 1, gfortran = 0) 12 ifort ?= 013 ifort ?= 1 13 14 14 15 # Choice for librairies (mkl_c = 1 = MKL, = 0 = BLAS) 15 16 #Â NOTA: mkl_c = 1 with ifort = 0 ignores the MKL and uses BLAS anyhow 16 mkl_c ?= 017 mkl_c ?= 1 17 18 18 ifeq ($(ifort),1)19 #ifeq ($(ifort),1) 19 20 include Fichiers-parametres/Makefile.tof-lsce3130.inc 20 else21 include Fichiers-parametres/Makefile.dmr-lsce3027.inc22 endif21 #else 22 # include Fichiers-parametres/Makefile.dmr-lsce3027.inc 23 #endif 23 24 24 25 # Compilation (le corps du Makefile) 25 26 #------------------------------------------- 26 27 27 ifeq ($(ifort),1)28 #ifeq ($(ifort),1) 28 29 include Makefile.grisli.inc 29 else30 include Makefile.grisli-gfortran.inc31 endif30 #else 31 # include Makefile.grisli-gfortran.inc 32 #endif -
branches/iLoveclim/SOURCES/Makefile.grisli-gfortran.inc
r52 r77 75 75 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 76 76 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 77 dragging_hwat_sedim_mod.o dragging_neff_ contmaj_mod.o \77 dragging_hwat_sedim_mod.o dragging_neff_slope_mod.o \ 78 78 calving_frange.o no_calving.o no_lakes.o \ 79 79 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ … … 219 219 fake-routines-ant_mod.o module_choix-antar40-0.4.o \ 220 220 track_ant40_mod.o 221 222 Liste_Snowball = output_snowball_mod-0.4.o \ 223 lect-snowball_mod.o \ 224 bmelt-snowball-depth_mod.o \ 225 fake-routines-snowball_mod.o \ 226 module_choix-snowball.o \ 227 track_snowball_mod.o 228 221 229 222 230 Liste_eura40 = output_eurasie40_mod-0.1.o \ … … 280 288 281 289 Dim_Ant40 = paradim-ant40_mod.o geography-ant40_mod.o 290 291 Dim_Snowball = paradim-snowball_mod.o geography-snowball_mod.o 282 292 283 293 Dim_eura40 = paradim-euras40_mod.o geography-euras40_mod.o … … 712 722 $(FT) dragging_hwat_sedim_mod.f90 713 723 714 dragging_neff_ contmaj_mod.o : dragging_neff_contmaj_mod.f90715 $(FT) dragging_neff_ contmaj_mod.f90724 dragging_neff_slope_mod.o : dragging_neff_slope_mod.f90 725 $(FT) dragging_neff_slope_mod.f90 716 726 717 727 dragging_calc_beta_mod.o : Antarctique_general_files/dragging_calc_beta_mod.f90 … … 734 744 735 745 beta_iter_vitbil_mod.o : Draggings_modules/beta_iter_vitbil_mod.f90 736 $(F T) Draggings_modules/beta_iter_vitbil_mod.f90746 $(F_NETCDF) Draggings_modules/beta_iter_vitbil_mod.f90 737 747 738 748 dragging_stream_impose_vitbil_mod.o : Ant40_files/dragging_stream_impose_vitbil_mod.f90 … … 841 851 output_anta40_mod-0.4.o : Ant40_files/output_anta40_mod-0.4.f90 842 852 $(FT) Ant40_files/output_anta40_mod-0.4.f90 853 854 output_snowball_mod-0.4.o : Snowball_files/output_snowball_mod-0.4.f90 855 $(FT) Snowball_files/output_snowball_mod-0.4.f90 843 856 844 857 output_global_mod.o :output_global_mod.f90 … … 1285 1298 track_hemin15_mod.o : Hemin15_files/track_hemin15_mod.f90 1286 1299 $(FT) Hemin15_files/track_hemin15_mod.f90 1300 1301 1302 # routines Snowball 1303 paradim-snowball_mod.o : Snowball_files/paradim-snowball_mod.f90 1304 $(FT) Snowball_files/paradim-snowball_mod.f90 1305 1306 geography-snowball_mod.o : Snowball_files/geography-snowball_mod.f90 1307 $(FT) Snowball_files/geography-snowball_mod.f90 1308 1309 lect-snowball_mod.o : Snowball_files/lect-snowball_mod.f90 1310 $(FT) Snowball_files/lect-snowball_mod.f90 1311 1312 bmelt-snowball-depth_mod.o : Snowball_files/bmelt-snowball-depth_mod.f90 1313 $(FT) Snowball_files/bmelt-snowball-depth_mod.f90 1314 1315 fake-routines-snowball_mod.o : Snowball_files/fake-routines-snowball_mod.f90 1316 $(FT) Snowball_files/fake-routines-snowball_mod.f90 1317 1318 module_choix-snowball.o : Snowball_files/module_choix-snowball.f90 1319 $(FT) Snowball_files/module_choix-snowball.f90 1320 1321 track_snowball_mod.o : Snowball_files/track_snowball_mod.f90 1322 $(FT) Snowball_files/track_snowball_mod.f90 1323 1287 1324 1288 1325 # routines Eurasie-40 … … 1598 1635 $(diagnoshelf) \ 1599 1636 $(Liste_Netcdf) \ 1600 $(routines_communes) steps_time_loop.o $(routine_elliptiques) 1637 $(routines_communes) steps_time_loop.o $(routine_elliptiques) \ 1638 $(Liste_BLAS) 1601 1639 1602 1640 $(LK) -o ../bin/Grice2sea \ … … 1610 1648 $(Liste_Netcdf) \ 1611 1649 $(routines_communes) steps_time_loop.o \ 1612 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) 1650 $(routine_elliptiques) \ 1651 $(Liste_BLAS) 1652 $(NCDF_LIB) $(MKL_LIB) 1613 1653 1614 1654 Grice2sea_iterbeta : $(Dim_GrIce2sea) $(mod_dim_communs) \ … … 1639 1679 $(mod_communs) \ 1640 1680 $(mod_clim_tof) \ 1641 $(mod_ no_tracers) \1681 $(mod_tracers) \ 1642 1682 $(mod_ell) $(Liste_hemin40) \ 1643 1683 $(diagnoshelf) \ … … 1652 1692 $(mod_communs) \ 1653 1693 $(mod_clim_tof) \ 1654 $(mod_ no_tracers) \1694 $(mod_tracers) \ 1655 1695 $(mod_ell) $(Liste_hemin40) \ 1656 1696 $(diagnoshelf) \ … … 1740 1780 $(routines_communes) steps_time_loop.o \ 1741 1781 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1742 1782 1783 Snowball : $(Dim_Snowball) $(mod_dim_communs) \ 1784 $(toy_recul) \ 1785 $(mod_communs) \ 1786 $(mod_clim_tof) \ 1787 $(mod_no_tracers) \ 1788 $(mod_ell) $(Liste_Snowball) \ 1789 $(diagnoshelf) \ 1790 $(Liste_Netcdf) \ 1791 $(routines_communes) steps_time_loop.o \ 1792 $(routine_elliptiques) \ 1793 $(Liste_BLAS) 1794 1795 $(LK) -o ../bin/Snowball \ 1796 $(Dim_Snowball) $(mod_dim_communs) \ 1797 $(toy_recul) \ 1798 $(mod_communs) \ 1799 $(mod_clim_tof) \ 1800 $(mod_no_tracers) \ 1801 $(mod_ell) $(Liste_Snowball) \ 1802 $(diagnoshelf) \ 1803 $(Liste_Netcdf) \ 1804 $(routines_communes) steps_time_loop.o \ 1805 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1806 1743 1807 1744 1808 -
branches/iLoveclim/SOURCES/Makefile.grisli.inc
r52 r77 25 25 routine_elliptiques = remplimat-shelves-tabTu.o graphique_L2.o graph-sgbsv.o 26 26 diagnoshelf = diagno-L2_mod.o 27 #diagnoshelf = fake_diagno_mod.o28 27 29 28 … … 74 73 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 75 74 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 76 dragging_hwat_sedim_mod.o dragging_neff_ contmaj_mod.o \75 dragging_hwat_sedim_mod.o dragging_neff_slope_mod.o \ 77 76 calving_frange.o no_calving.o no_lakes.o \ 78 77 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ 79 relaxation_ mod-0.3.o relaxation_water_mod-0.4.o relaxation_water_diffusion.o \78 relaxation_water_diffusion.o \ 80 79 prescribe-H-i2s_mod.o \ 81 80 resol_adv_diff_2D-sept2009.o \ … … 93 92 calving_frange.o no_calving.o no_lakes.o \ 94 93 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ 95 relaxation_ mod-0.3.o relaxation_water_mod-0.4.o relaxation_water_diffusion.o \94 relaxation_water_diffusion.o \ 96 95 prescribe-H-i2s_mod.o \ 97 96 resol_adv_diff_2D-sept2009.o \ … … 100 99 tridiag_mod-0.3.o out_horiz_mod.o bmelt-seuil-profondeur_mod.o 101 100 102 # prescribe-H_mod.o ou prescribe-H-i2s_mod.o sont dans modules_dim \103 101 104 102 # attention les tracers reclament le climat_perturb … … 124 122 125 123 # liste de routines communes 126 # enleve : flow_general-0.3.o flowlaw-0.3.o Cat 23 mars 2012127 124 128 125 routines_communes = tracebug.o ablation_bord.o \ 129 icetemp_declar_mod.o bmelt-grounded.o calceps2-0.2.o\126 icetemp_declar_mod.o bmelt-grounded.o \ 130 127 diffusiv-polyn-0.6.o \ 131 flottab -rescue-1.o flottab2-0.7.o \128 flottab2-0.7.o \ 132 129 advec_icetemp.o \ 133 130 prop_th_icetemp.o \ … … 136 133 icetemp_mod.o \ 137 134 initial-0.3.o initial-phy-2.o initial2-0.4.o \ 138 l astoutput-0.2.o lect-eis.o readinput.o lect_datfile.o write_datfile.o \135 lect-eis.o readinput.o lect_datfile.o write_datfile.o \ 139 136 out_cptr_mod.o lineartemp-0.2.o litho-0.4.o main3D-0.4-40km.o masque.o \ 140 137 minmax-format.o moy_mxmy.o neffect-0.4.o new-flot-0.3.o next-time.o \ … … 144 141 tab-litho-0.3.o taubed-0.3.o \ 145 142 velocities-polyn-0.3.o \ 146 vtoutput-0.2.o courbures.o 147 148 # vtoutput-0.2.o steps_time_loop.o courbures.o 143 courbures.o 149 144 150 145 … … 166 161 Liste_GrIce2sea = lect_GrIce2sea_gen_nc.o \ 167 162 output_Grice2sea_mod.o fake-routines_Grice2sea_mod.o \ 168 dragging_prescr_beta_mod.o beta_iter_vitbil_mod.o module_choix_GrIce2sea.o 169 # massb-ant_forcage-0.4 163 dragging_prescr_beta_mod.o beta_iter_vitbil_mod.o module_choix_GrIce2sea.o 164 170 165 171 166 Liste_heminord = paradim-nord40_mod.o output_nord_mod-0.4.o \ … … 175 170 176 171 177 Liste_ANT15-LBq = lect-Ant_clim_Acc-T_gen_dat.o output_anta_mod-0.4.o \ 178 dragging-vit_bil_LBq_gen_mod.o dragging_LGM_mod.o dragging_plastic_LGM_mod.o \ 179 dragging_prescr_beta_mod.o dragging_prescr_beta_buoyency_mod.o dragging_prescr_beta_nolin_mod.o \ 180 fake-routines-ant_mod.o beta_iter_vitbil_mod.o \ 181 lect-Ant_gen2010_dat.o module_choix_antar15_LBq.o \ 182 massb-ant_perturb_Tparam.o track_ant40_mod.o 183 184 172 #Liste_ANT15-LBq = lect-Ant_clim_Acc-T_gen_dat.o output_anta_mod-0.4.o \ 173 # dragging-vit_bil_LBq_gen_mod.o dragging_LGM_mod.o dragging_plastic_LGM_mod.o \ 174 # dragging_prescr_beta_mod.o dragging_prescr_beta_buoyency_mod.o dragging_prescr_beta_nolin_mod.o \ 175 # fake-routines-ant_mod.o beta_iter_vitbil_mod.o \ 176 # lect-Ant_gen2010_dat.o module_choix_antar15_LBq.o \ 177 # massb-ant_perturb_Tparam.o track_ant40_mod.o 178 179 Liste_ANT15-LBq = output_anta_mod-0.4.o \ 180 lect-Ant_gen2010_dat.o \ 181 lect-anteis_mod.o \ 182 bmelt-ant-regions_mod.o \ 183 fake-routines-ant_mod.o \ 184 module_choix_antar15_LBq.o \ 185 track_ant40_mod.o \ 185 186 186 187 Liste_hudson = sedim_declar_hudson_mod.o climat-hudson_mod.o \ … … 218 219 fake-routines-ant_mod.o module_choix-antar40-0.4.o \ 219 220 track_ant40_mod.o 221 222 Liste_Snowball = output_snowball_mod-0.4.o \ 223 lect-snowball_mod.o \ 224 bmelt-snowball-depth_mod.o \ 225 fake-routines-snowball_mod.o \ 226 module_choix-snowball.o \ 227 track_snowball_mod.o 228 220 229 221 230 Liste_eura40 = output_eurasie40_mod-0.1.o \ … … 280 289 Dim_Ant40 = paradim-ant40_mod.o geography-ant40_mod.o 281 290 291 Dim_Snowball = paradim-snowball_mod.o geography-snowball_mod.o 292 282 293 Dim_eura40 = paradim-euras40_mod.o geography-euras40_mod.o 283 294 … … 294 305 Dim_gsearise05 = paradim-gsearise05_mod.o geography-gsearise05_mod.o 295 306 296 # Liste_BLAS = band.o reduc.o \ 297 # BLAS/isamax.o BLAS/lsame.o BLAS/scopy.o BLAS/sgbmv.o BLAS/sgemm.o \ 298 # BLAS/sgemv.o BLAS/sger.o BLAS/sscal.o BLAS/sswap.o BLAS/stbsv.o \ 299 # BLAS/strsm.o BLAS/xerbla.o 307 300 308 ifeq ($(mkl_c), 0) 301 Liste_BLAS = LAPACK/band.o LAPACK/reduc.o \302 BLAS/isamax.o BLAS/lsame.o BLAS/scopy.o \303 BLAS/slamch.o BLAS/slabad.o BLAS/slange.o \304 BLAS/slassq.o BLAS/sgeqrf.o BLAS/sormqr.o \305 BLAS/strmv.o BLAS/slarft.o \306 BLAS/ilaslr.o BLAS/ilaslc.o BLAS/strmm.o \307 BLAS/slarfb.o BLAS/slapy2.o BLAS/slarfg.o BLAS/slarf.o \308 BLAS/sgeqr2.o BLAS/sorm2r.o BLAS/snrm2.o \309 BLAS/slaqps.o BLAS/slaqp2.o BLAS/sgeqp3.o \310 BLAS/slaset.o BLAS/slaisnan.o BLAS/sisnan.o \311 BLAS/slascl.o BLAS/sdot.o BLAS/slaic1.o \312 BLAS/slarzb.o BLAS/slarzt.o \313 BLAS/saxpy.o BLAS/slarz.o BLAS/sormr3.o \314 BLAS/sormrz.o BLAS/slatrz.o BLAS/stzrzf.o BLAS/sgelsy.o \315 BLAS/sgbmv.o BLAS/sgemm.o BLAS/sgemv.o BLAS/sger.o \316 BLAS/sscal.o BLAS/sswap.o BLAS/stbsv.o \317 BLAS/strsm.o BLAS/xerbla.o309 Liste_BLAS = band.o reduc.o \ 310 isamax.o lsame.o scopy.o \ 311 slamch.o slabad.o slange.o \ 312 slassq.o sgeqrf.o sormqr.o \ 313 strmv.o slarft.o \ 314 ilaslr.o ilaslc.o strmm.o \ 315 slarfb.o slapy2.o slarfg.o slarf.o \ 316 sgeqr2.o sorm2r.o snrm2.o \ 317 slaqps.o slaqp2.o sgeqp3.o \ 318 slaset.o slaisnan.o sisnan.o \ 319 slascl.o sdot.o slaic1.o \ 320 slarzb.o slarzt.o \ 321 saxpy.o slarz.o sormr3.o \ 322 sormrz.o slatrz.o stzrzf.o sgelsy.o \ 323 sgbmv.o sgemm.o sgemv.o sger.o \ 324 sscal.o sswap.o stbsv.o \ 325 strsm.o xerbla.o 318 326 319 327 endif 320 328 321 # ancienne methode 322 #Liste_Netcdf = io_netcdf.o sortie_netcdf_GRISLI_mod.0.2.o 323 324 # pour fonctionner avec code Hassine 325 # sortie_netcdf_GRISLI_mod.0.2-hassine.o 329 326 330 Liste_Netcdf = sortie_netcdf_GRISLI_mod.0.2-hassine.o 327 331 … … 335 339 echo 'entree fichier parametre par commande echo job' 336 340 337 $(FT) initial-phy-2-job.f90 -o initial-phy-2.o341 $(FT) $(NCDF_INC) -c initial-phy-2-job.f90 338 342 else 339 343 echo ' fichier parametre defini par runname' 340 $(FT) initial-phy-2.f90 -o initial-phy-2.o344 $(FT) $(NCDF_INC) -c initial-phy-2.f90 341 345 endif 342 346 343 # routines et modules qui dependent de la machine (defini dans le makefile machine) 344 #---------------------------------------------------------------------------------- 345 # quelques ligne de difference dans la creation des netcdf 346 347 348 #sortie_netcdf_GRISLI_mod.0.2-hassine.o : 349 #ifeq ($(machine),'r2d2') 350 # $(F_NETCDF) Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine-r2d2.f90 -o sortie_netcdf_GRISLI_mod.0.2-hassine.o 351 #else 352 # $(F_NETCDF) Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine.f90 353 #endif 354 355 #out_cptr_mod.o : 356 #ifeq ($(machine),'r2d2') 357 # $(F_NETCDF) out_cptr_mod-r2d2.f90 -o out_cptr_mod.o 358 #else 359 # $(F_NETCDF) out_cptr_mod.f90 360 #endif 361 362 # Compilation Modules 363 #--------------------------------- 364 paradim-ant40_mod.o : Ant40_files/paradim-ant40_mod.f90 365 $(FT) Ant40_files/paradim-ant40_mod.f90 366 367 paradim-ant15_LBq_mod.o : ANT15-LBq_files/paradim-ant15_LBq_mod.f90 368 $(FT) ANT15-LBq_files/paradim-ant15_LBq_mod.f90 369 370 paradim-ant15_CISM_mod.o : Ant15_CISM_files/paradim-ant15_CISM_mod.f90 371 $(FT) Ant15_CISM_files/paradim-ant15_CISM_mod.f90 372 373 paradim-ant20_CISM_mod.o : Ant20_CISM_files/paradim-ant20_CISM_mod.f90 374 $(FT) Ant20_CISM_files/paradim-ant20_CISM_mod.f90 375 376 paradim-ant25_CISM_mod.o : Ant25_CISM_files/paradim-ant25_CISM_mod.f90 377 $(FT) Ant25_CISM_files/paradim-ant25_CISM_mod.f90 378 379 paradim-ant45_CISM_mod.o : Ant45_CISM_files/paradim-ant45_CISM_mod.f90 380 $(FT) Ant45_CISM_files/paradim-ant45_CISM_mod.f90 381 382 paradim-nord40_mod.o : Heminord_files/paradim-nord40_mod.f90 383 $(FT) Heminord_files/paradim-nord40_mod.f90 384 385 paradim-euras40_mod.o : Eurasie40_files/paradim-euras40_mod.f90 386 $(FT) Eurasie40_files/paradim-euras40_mod.f90 387 388 paradim-eura20_mod.o : paradim-eura20_mod.f90 389 $(FT) paradim-eura20_mod.f90 390 391 paradim-eura10_mod.o : paradim-eura10_mod.f90 392 $(FT) paradim-eura10_mod.f90 393 394 paradim-greenmint40_mod.o : Greenmint40_files/paradim-greenmint40_mod.f90 395 $(FT) Greenmint40_files/paradim-greenmint40_mod.f90 396 397 paradim-greeneem45_mod.o : Greeneem_files/Greeneem45_files/paradim-greeneem45_mod.f90 398 $(FT) Greeneem_files/Greeneem45_files/paradim-greeneem45_mod.f90 399 400 paradim-greeneem15_mod.o : Greeneem_files/Greeneem15_files/paradim-greeneem15_mod.f90 401 $(FT) Greeneem_files/Greeneem15_files/paradim-greeneem15_mod.f90 402 403 paradim-greeneem05_mod.o : Greeneem_files/Greeneem05_files/paradim-greeneem05_mod.f90 404 $(FT) Greeneem_files/Greeneem05_files/paradim-greeneem05_mod.f90 405 406 paradim-gsearise15_mod.o : Gsearise_files/Gsearise15_files/paradim-gsearise15_mod.f90 407 $(FT) Gsearise_files/Gsearise15_files/paradim-gsearise15_mod.f90 408 409 paradim-gsearise05_mod.o : Gsearise_files/Gsearise05_files/paradim-gsearise05_mod.f90 410 $(FT) Gsearise_files/Gsearise05_files/paradim-gsearise05_mod.f90 411 412 paradim-GrIce2sea-cut_Tamsin.o : GrIce2sea_files/paradim-GrIce2sea-cut_Tamsin.f90 413 $(FT) GrIce2sea_files/paradim-GrIce2sea-cut_Tamsin.f90 414 415 paradim-Heino_mod.o : Heino_files/paradim-Heino_mod.f90 416 $(FT) Heino_files/paradim-Heino_mod.f90 417 418 geography-ant40_mod.o : Ant40_files/geography-ant40_mod.f90 419 $(FT) Ant40_files/geography-ant40_mod.f90 420 421 geography-Ant15_LBq.o : ANT15-LBq_files/geography-Ant15_LBq.f90 422 $(FT) ANT15-LBq_files/geography-Ant15_LBq.f90 423 424 geography-Ant15CISM.o : Ant15_CISM_files/geography-Ant15CISM.f90 425 $(FT) Ant15_CISM_files/geography-Ant15CISM.f90 426 427 geography-Ant20CISM.o : Ant20_CISM_files/geography-Ant20CISM.f90 428 $(FT) Ant20_CISM_files/geography-Ant20CISM.f90 429 430 geography-Ant25CISM.o : Ant25_CISM_files/geography-Ant25CISM.f90 431 $(FT) Ant25_CISM_files/geography-Ant25CISM.f90 432 433 geography-Ant45CISM.o : Ant45_CISM_files/geography-Ant45CISM.f90 434 $(FT) Ant45_CISM_files/geography-Ant45CISM.f90 435 436 geography-heino_mod.o : Heino_files/geography-heino_mod.f90 437 $(FT) Heino_files/geography-heino_mod.f90 438 439 geography-heminord_mod.o : Heminord_files/geography-heminord_mod.f90 440 $(FT) Heminord_files/geography-heminord_mod.f90 441 442 geography-euras40_mod.o : Eurasie40_files/geography-euras40_mod.f90 443 $(FT) Eurasie40_files/geography-euras40_mod.f90 444 445 geography-greenmint40_mod.o : Greenmint40_files/geography-greenmint40_mod.f90 446 $(FT) Greenmint40_files/geography-greenmint40_mod.f90 447 448 geography-greeneem45_mod.o : Greeneem_files/Greeneem45_files/geography-greeneem45_mod.f90 449 $(FT) Greeneem_files/Greeneem45_files/geography-greeneem45_mod.f90 450 451 geography-greeneem15_mod.o : Greeneem_files/Greeneem15_files/geography-greeneem15_mod.f90 452 $(FT) Greeneem_files/Greeneem15_files/geography-greeneem15_mod.f90 453 454 geography-greeneem05_mod.o : Greeneem_files/Greeneem05_files/geography-greeneem05_mod.f90 455 $(FT) Greeneem_files/Greeneem05_files/geography-greeneem05_mod.f90 456 457 geography-gsearise15_mod.o : Gsearise_files/Gsearise15_files/geography-gsearise15_mod.f90 458 $(FT) Gsearise_files/Gsearise15_files/geography-gsearise15_mod.f90 459 460 geography-gsearise05_mod.o : Gsearise_files/Gsearise05_files/geography-gsearise05_mod.f90 461 $(FT) Gsearise_files/Gsearise05_files/geography-gsearise05_mod.f90 462 463 geography-GrIce2sea.o : GrIce2sea_files/geography-GrIce2sea.f90 464 $(FT) GrIce2sea_files/geography-GrIce2sea.f90 465 466 467 # Physique et topography 468 # --------------------------- 469 470 runparam_mod.o : runparam_mod.f90 471 $(FT) runparam_mod.f90 472 473 3D-physique-gen_mod.o : 3D-physique-gen_mod.f90 474 $(FT) 3D-physique-gen_mod.f90 475 476 param_phy_mod.o: param_phy_mod.f90 477 $(FT) param_phy_mod.f90 478 479 lect-anteis_mod.o : Ant40_files/lect-anteis_mod.f90 480 $(FT) Ant40_files/lect-anteis_mod.f90 481 482 lect-Ant_CISM_gen_dat.o : Antarctique_general_files/lect-Ant_CISM_gen_dat.f90 483 $(FT) Antarctique_general_files/lect-Ant_CISM_gen_dat.f90 484 485 lect-Ant_gen2010_dat.o : Antarctique_general_files/lect-Ant_gen2010_dat.f90 486 $(FT) Antarctique_general_files/lect-Ant_gen2010_dat.f90 487 488 lect-Ant_CISM_15_dat.o : Ant15_CISM_files/lect-Ant_CISM_15_dat.f90 489 $(FT) Ant15_CISM_files/lect-Ant_CISM_15_dat.f90 490 491 lect-Ant_CISM_45_dat.o : Ant45_CISM_files/lect-Ant_CISM_45_dat.f90 492 $(FT) Ant45_CISM_files/lect-Ant_CISM_45_dat.f90 493 494 lect-nord40_mod.o : Heminord_files/lect-nord40_mod.f90 495 $(FT) Heminord_files/lect-nord40_mod.f90 496 497 lect-eurasie_mod.o : Eurasie40_files/lect-eurasie_mod.f90 498 $(FT) Eurasie40_files/lect-eurasie_mod.f90 499 500 lect-greenmint_mod.o : Greenmint40_files/lect-greenmint_mod.f90 501 $(FT) Greenmint40_files/lect-greenmint_mod.f90 502 503 lect-greeneem_mod.o : Greeneem_files/lect-greeneem_mod.f90 504 $(FT) Greeneem_files/lect-greeneem_mod.f90 505 506 lect-gsearise_mod.o : Gsearise_files/lect-gsearise_mod.f90 507 $(FT) Gsearise_files/lect-gsearise_mod.f90 508 509 lect-Heino_mod.o : Heino_files/lect-Heino_mod.f90 510 $(FT) Heino_files/lect-Heino_mod.f90 511 512 lect_GrIce2sea_gen_nc.o : GrIce2sea_files/lect_GrIce2sea_gen_nc.f90 513 $(FT) GrIce2sea_files/lect_GrIce2sea_gen_nc.f90 514 515 bmelt-ant-regions_declar_mod.o : Ant40_files/bmelt-ant-regions_declar_mod.f90 516 $(FT) Ant40_files/bmelt-ant-regions_declar_mod.f90 517 518 bmelt-ant-regions_mod.o : Ant40_files/bmelt-ant-regions_mod.f90 519 $(FT) Ant40_files/bmelt-ant-regions_mod.f90 520 521 bmelt-ant-regions-oce_mod.o : Ant40_files/bmelt-ant-regions-oce_mod.f90 522 $(FT) Ant40_files/bmelt-ant-regions-oce_mod.f90 523 524 bmelt-nor-regions_mod.o : Heminord_files/bmelt-nor-regions_mod.f90 525 $(FT) Heminord_files/bmelt-nor-regions_mod.f90 526 527 bmelt-nor-depth_mod.o : Heminord_files/bmelt-nor-depth_mod.f90 528 $(FT) Heminord_files/bmelt-nor-depth_mod.f90 529 530 bmelt-eurasie-depth-lake_mod.o : Eurasie40_files/bmelt-eurasie-depth-lake_mod.f90 531 $(FT) Eurasie40_files/bmelt-eurasie-depth-lake_mod.f90 532 533 bmelt-seuil-profondeur_mod.o : bmelt-seuil-profondeur_mod.f90 534 $(FT) bmelt-seuil-profondeur_mod.f90 535 536 lakes-prescribed_mod-0.1.o : Eurasie40_files/lakes-prescribed_mod-0.1.f90 537 $(FT) Eurasie40_files/lakes-prescribed_mod-0.1.f90 538 539 no_lakes.o : no_lakes.f90 540 $(FT) no_lakes.f90 541 542 iso_declar_mod-0.3.o : iso_declar_mod-0.3.f90 543 $(FT) iso_declar_mod-0.3.f90 544 545 noisostasie_mod-0.3.o : noisostasie_mod-0.3.f90 546 $(FT) noisostasie_mod-0.3.f90 547 548 isostasie_mod-0.3.o : isostasie_mod-0.3.f90 549 $(FT) isostasie_mod-0.3.f90 550 551 eq_elliptique_mod-0.4.o : eq_elliptique_mod-0.4.f90 552 $(FT) eq_elliptique_mod-0.4.f90 553 554 555 #------------ Traceurs isotopiques 556 557 tracer_mod.o : tracer_mod.f90 558 $(FT) tracer_mod.f90 559 560 notracer_mod.o : notracer_mod.f90 561 $(FT) notracer_mod.f90 562 563 tracer_vars_mod.o : tracer_vars_mod.f90 564 $(FT) tracer_vars_mod.f90 565 566 interpolate_tracer.o : interpolate_tracer.f90 567 $(FT) interpolate_tracer.f90 568 569 celltest_tracer.o : celltest_tracer.f90 570 $(FT) celltest_tracer.f90 571 572 573 #-------------lecture des fichiers Climat 574 575 lect-Ant_clim_Acc-T_gen_dat.o : Antarctique_general_files/lect-Ant_clim_Acc-T_gen_dat.f90 576 $(FT) Antarctique_general_files/lect-Ant_clim_Acc-T_gen_dat.f90 577 578 579 lect-clim-act-greenmint_mod.o : Greenmint40_files/lect-clim-act-greenmint_mod.f90 580 $(FT) Greenmint40_files/lect-clim-act-greenmint_mod.f90 581 582 lect-clim-act-greeneem_mod.o : Greeneem_files/lect-clim-act-greeneem_mod.f90 583 $(FT) Greeneem_files/lect-clim-act-greeneem_mod.f90 584 585 lect-clim-act-gsearise_mod.o : Gsearise_files/lect-clim-act-gsearise_mod.f90 586 $(FT) Gsearise_files/lect-clim-act-gsearise_mod.f90 587 588 lect-clim-act-greeneem_mar_mod.o : Greeneem_files/lect-clim-act-greeneem_mar_mod.f90 589 $(FT) Greeneem_files/lect-clim-act-greeneem_mar_mod.f90 590 591 lect-clim-act-greeneem_mois_lapsecouche_mod.o : Greeneem_files/lect-clim-act-greeneem_mois_lapsecouche_mod.f90 592 $(FT) Greeneem_files/lect-clim-act-greeneem_mois_lapsecouche_mod.f90 593 594 lect-clim-act-greeneem_mois_mod.o : Greeneem_files/lect-clim-act-greeneem_mois_mod.f90 595 $(FT) Greeneem_files/lect-clim-act-greeneem_mois_mod.f90 596 597 lect-clim-act-gsearise_mois_mod.o : Gsearise_files/lect-clim-act-gsearise_mois_mod.f90 598 $(FT) Gsearise_files/lect-clim-act-gsearise_mois_mod.f90 599 600 lect-clim-act-nord40_mod.o : Heminord_files/lect-clim-act-nord40_mod.f90 601 $(FT) Heminord_files/lect-clim-act-nord40_mod.f90 602 603 lect_climat_ref_Ice2sea_mod.o : GrIce2sea_files/lect_climat_ref_Ice2sea_mod.f90 604 $(FT) GrIce2sea_files/lect_climat_ref_Ice2sea_mod.f90 605 606 607 # modules de climat 608 # --------------------------- 609 # nouveaux modules climat C. Dumas Fev 2015 610 climat_forcage_mois_mod.o : climat_forcage_mois_mod.f90 611 $(F_NETCDF) climat_forcage_mois_mod.f90 612 613 climat-forcage-insolation_mod_oneway.o : climat-forcage-insolation_mod_oneway.f90 614 $(F_NETCDF) climat-forcage-insolation_mod_oneway.f90 615 616 climat-forcage-insolation_mod.o : climat-forcage-insolation_mod.f90 617 $(F_NETCDF) climat-forcage-insolation_mod.f90 618 619 climat-perturb_mod-0.4.o : climat-perturb_mod-0.4.f90 620 $(F_NETCDF) climat-perturb_mod-0.4.f90 621 622 ablation_mod.o : ablation_mod.f90 623 $(FT) ablation_mod.f90 624 #Â Module climat pour iLOVECLIM 625 climat_coupl_atm_mod.o : climat_coupl_atm_mod.f90 626 $(FT) climat_coupl_atm_mod.f90 627 628 ##### anciens modules 629 climat-forcage_mod-0.4.o : climat-forcage_mod-0.4.f90 630 $(FT) climat-forcage_mod-0.4.f90 631 632 climat_GrIce2sea_mod.o : GrIce2sea_files/climat_GrIce2sea_mod.f90 633 $(FT) GrIce2sea_files/climat_GrIce2sea_mod.f90 634 635 climat_GrIce2sea_years_mod.o : GrIce2sea_files/climat_GrIce2sea_years_mod.f90 636 $(F_NETCDF) GrIce2sea_files/climat_GrIce2sea_years_mod.f90 637 638 climat_GrIce2sea_years_perturb_mod.o : GrIce2sea_files/climat_GrIce2sea_years_perturb_mod.f90 639 $(F_NETCDF) GrIce2sea_files/climat_GrIce2sea_years_perturb_mod.f90 640 641 climat-forcage-stat-mois_mod-0.1.o : climat-forcage-stat-mois_mod-0.1.f90 642 $(FT) climat-forcage-stat-mois_mod-0.1.f90 643 644 declare-month_mod.o : declare-month_mod.f90 645 $(FT) declare-month_mod.f90 646 647 declare-month_lapsecouche_mod.o : declare-month_lapsecouche_mod.f90 648 $(FT) declare-month_lapsecouche_mod.f90 649 650 climat-forcage-mois_mod-0.2.o : climat-forcage-mois_mod-0.2.f90 651 $(FT) climat-forcage-mois_mod-0.2.f90 652 653 ablation_month.o : ablation_month.f90 654 $(FT) ablation_month.f90 655 656 ablation_month_lapsecouche.o : ablation_month_lapsecouche.f90 657 $(FT) ablation_month_lapsecouche.f90 658 659 ablation_ann_july_mod.o : ablation_ann_july_mod.f90 660 $(FT) ablation_ann_july_mod.f90 661 662 no_ablation_mod.o : no_ablation_mod.f90 663 $(FT) no_ablation_mod.f90 664 665 accum_month.o : accum_month.f90 666 $(FT) accum_month.f90 667 668 accum_month_lapsecouche.o : accum_month_lapsecouche.f90 669 $(FT) accum_month_lapsecouche.f90 670 671 climat-perturb-mois_mod.o : climat-perturb-mois_mod.f90 672 $(FT) climat-perturb-mois_mod.f90 673 674 climat-perturb-mois_lapsecouche_mod.o : climat-perturb-mois_lapsecouche_mod.F90 675 $(FT) climat-perturb-mois_lapsecouche_mod.F90 676 677 clim-synthes_mod-o : climat-synthes_mod-0.4.f90 678 $(FT) climat-synthes_mod-0.4.f90 679 680 climat-heino_mod.o : Heino_files/climat-heino_mod.f90 681 $(FT) Heino_files/climat-heino_mod.f90 682 683 deformation_mod_2lois.o : deformation_mod_2lois.f90 684 $(FT) deformation_mod_2lois.f90 685 686 deformation_mod_2lois_isotherme.o : deformation_mod_2lois_isotherme.f90 687 $(FT) deformation_mod_2lois_isotherme.f90 688 689 deformation_mod-0.3.o : deformation_mod-0.3.f90 690 $(FT) deformation_mod-0.3.f90 691 692 sliding-Heino_mod.o : Heino_files/sliding-Heino_mod.f90 693 $(FT) Heino_files/sliding-Heino_mod.f90 694 695 sliding_Bindshadler_mod.o : sliding_Bindshadler_mod.f90 696 $(FT) sliding_Bindshadler_mod.f90 697 698 no_sliding.o : no_sliding.f90 699 $(FT) no_sliding.f90 700 701 dragging_hwatermax_0.2_mod.o : dragging_hwatermax_0.2_mod.f90 702 $(FT) dragging_hwatermax_0.2_mod.f90 703 704 dragging_hwat-contigu_mod.o : dragging_hwat-contigu_mod.f90 705 $(FT) dragging_hwat-contigu_mod.f90 706 707 dragging_hwat_contmaj_mod.o : dragging_hwat_contmaj_mod.f90 708 $(FT) dragging_hwat_contmaj_mod.f90 709 710 dragging_hwat_sedim_mod.o : dragging_hwat_sedim_mod.f90 711 $(FT) dragging_hwat_sedim_mod.f90 712 713 dragging_neff_contmaj_mod.o : dragging_neff_contmaj_mod.f90 714 $(FT) dragging_neff_contmaj_mod.f90 715 716 dragging_calc_beta_mod.o : Antarctique_general_files/dragging_calc_beta_mod.f90 717 $(FT) Antarctique_general_files/dragging_calc_beta_mod.f90 718 719 dragging_LGM_mod.o : Antarctique_general_files/dragging_LGM_mod.f90 720 $(FT) Antarctique_general_files/dragging_LGM_mod.f90 721 722 dragging_plastic_LGM_mod.o : Antarctique_general_files/dragging_plastic_LGM_mod.f90 723 $(FT) Antarctique_general_files/dragging_plastic_LGM_mod.f90 724 725 dragging_prescr_beta_mod.o : Draggings_modules/dragging_prescr_beta_mod.f90 726 $(FT) Draggings_modules/dragging_prescr_beta_mod.f90 727 728 dragging_prescr_beta_buoyency_mod.o : Draggings_modules/dragging_prescr_beta_buoyency_mod.f90 729 $(FT) Draggings_modules/dragging_prescr_beta_buoyency_mod.f90 730 731 dragging_prescr_beta_nolin_mod.o : Draggings_modules/dragging_prescr_beta_nolin_mod.f90 732 $(FT) Draggings_modules/dragging_prescr_beta_nolin_mod.f90 733 734 beta_iter_vitbil_mod.o : Draggings_modules/beta_iter_vitbil_mod.f90 735 $(FT) Draggings_modules/beta_iter_vitbil_mod.f90 736 737 dragging_stream_impose_vitbil_mod.o : Ant40_files/dragging_stream_impose_vitbil_mod.f90 738 $(FT) Ant40_files/dragging_stream_impose_vitbil_mod.f90 739 740 dragging-vit_bil_LBq_gen_mod.o : Antarctique_general_files/dragging-vit_bil_LBq_gen_mod.f90 741 $(FT) Antarctique_general_files/dragging-vit_bil_LBq_gen_mod.f90 742 743 dragging-vit_bil_CISM_gen_mod.o : Antarctique_general_files/dragging-vit_bil_CISM_gen_mod.f90 744 $(FT) Antarctique_general_files/dragging-vit_bil_CISM_gen_mod.f90 745 746 dragging_neem_mod.o : Greeneem_files/dragging_neem_mod.f90 747 $(FT) Greeneem_files/dragging_neem_mod.f90 748 749 dragging-vit_bil_CISM_15_mod.o : Ant15_CISM_files/dragging-vit_bil_CISM_15_mod.f90 750 $(FT) Ant15_CISM_files/dragging-vit_bil_CISM_15_mod.f90 751 752 dragging-vit_bil_CISM_45_mod.o : Ant45_CISM_files/dragging-vit_bil_CISM_45_mod.f90 753 $(FT) Ant45_CISM_files/dragging-vit_bil_CISM_45_mod.f90 754 755 prop-therm-Heino_mod.o : Heino_files/prop-therm-Heino_mod.f90 756 $(FT) Heino_files/prop-therm-Heino_mod.f90 757 758 calving_frange.o : calving_frange.f90 759 $(FT) calving_frange.f90 760 761 no_calving.o : no_calving.f90 762 $(FT) no_calving.f90 763 764 track_heino_mod.o : Heino_files/track_heino_mod.f90 765 $(FT) Heino_files/track_heino_mod.f90 766 767 track_ant40_mod.o : Ant40_files/track_ant40_mod.f90 768 $(FT) Ant40_files/track_ant40_mod.f90 769 770 track_greenmint_mod.o : Greenmint40_files/track_greenmint_mod.f90 771 $(FT) Greenmint40_files/track_greenmint_mod.f90 772 773 track_greeneem_mod.o : Greeneem_files/track_greeneem_mod.f90 774 $(FT) Greeneem_files/track_greeneem_mod.f90 775 776 track_gsearise_mod.o : Gsearise_files/track_gsearise_mod.f90 777 $(FT) Gsearise_files/track_gsearise_mod.f90 778 779 780 #------- modules de resolution equations 781 782 relaxation_mod-0.3.o : relaxation_mod-0.3.f90 783 $(FT) relaxation_mod-0.3.f90 784 785 relaxation_water_mod-0.4.o : relaxation_water_mod-0.4.f90 786 $(FT) relaxation_water_mod-0.4.f90 787 788 relaxation_water_diffusion.o : relaxation_water_diffusion.f90 789 $(FT) relaxation_water_diffusion.f90 790 791 tridiag_mod-0.3.o : tridiag_mod-0.3.f90 792 $(FT) tridiag_mod-0.3.f90 793 794 resol_adv_diff_2D.o : resol_adv_diff_2D.f90 795 $(FT) resol_adv_diff_2D.f90 796 797 resol_adv_diff_2D-juin2009.o : resol_adv_diff_2D-juin2009.f90 798 $(FT) resol_adv_diff_2D-juin2009.f90 799 800 resol_adv_diff_2D-sept2009.o : resol_adv_diff_2D-sept2009.f90 801 $(FT) resol_adv_diff_2D-sept2009.f90 802 803 #conserv-mass-adv-diff_mod.o : conserv-mass-adv-diff_mod.f90 804 # $(FT) conserv-mass-adv-diff_mod.f90 805 806 #precribe-H_mod.o : precribe-H_mod.f90 old version + mauvais nom 807 # $(FT) precribe-H_mod.f90 808 809 prescribe-H_mod.o : prescribe-H_mod.f90 810 $(FT) prescribe-H_mod.f90 811 812 prescribe-H-i2s_mod.o : prescribe-H-i2s_mod.f90 813 $(FT) prescribe-H-i2s_mod.f90 814 815 #conserv-mass-adv-diff_juin2009_mod.o : conserv-mass-adv-diff_juin2009_mod.f90 816 # $(FT) conserv-mass-adv-diff_juin2009_mod.f90 817 818 conserv-mass-adv-diff_sept2009_mod.o : conserv-mass-adv-diff_sept2009_mod.f90 819 $(FT) conserv-mass-adv-diff_sept2009_mod.f90 820 821 # --------- spinup 822 spinup_mod.o : spinup_mod.f90 823 $(FT) spinup_mod.f90 824 825 no_spinup_mod.o : no_spinup_mod.f90 826 $(FT) no_spinup_mod.f90 827 828 829 830 #-------------Output 831 out_horiz_mod.o : out_horiz_mod.f90 832 $(FT) out_horiz_mod.f90 833 834 out_profile_mod.o : out_profile_mod.f90 835 $(FT) out_profile_mod.f90 836 837 output_anta_mod-0.4.o : Antarctique_general_files/output_anta_mod-0.4.f90 838 $(FT) Antarctique_general_files/output_anta_mod-0.4.f90 839 840 output_anta40_mod-0.4.o : Ant40_files/output_anta40_mod-0.4.f90 841 $(FT) Ant40_files/output_anta40_mod-0.4.f90 842 843 output_global_mod.o :output_global_mod.f90 844 $(FT) output_global_mod.f90 845 846 output_green_mod-0.4.o : Greenmint40_files/output_green_mod-0.4.f90 847 $(FT) Greenmint40_files/output_green_mod-0.4.f90 848 849 output_greeneem_mod-0.4.o : Greeneem_files/output_greeneem_mod-0.4.f90 850 $(FT) Greeneem_files/output_greeneem_mod-0.4.f90 851 852 output_gsearise_mod-0.4.o : Gsearise_files/output_gsearise_mod-0.4.f90 853 $(FT) Gsearise_files/output_gsearise_mod-0.4.f90 854 855 output_heino_mod.o : Heino_files/output_heino_mod.f90 856 $(FT) Heino_files/output_heino_mod.f90 857 858 output_nord_mod-0.4.o : Heminord_files/output_nord_mod-0.4.f90 859 $(FT) Heminord_files/output_nord_mod-0.4.f90 860 861 output_Grice2sea_mod.o : GrIce2sea_files/output_Grice2sea_mod.f90 862 $(FT) GrIce2sea_files/output_Grice2sea_mod.f90 863 864 out_cptr_mod.o : out_cptr_mod.f90 865 $(F_NETCDF) out_cptr_mod.f90 866 867 util_recovery.o : util_recovery.f90 868 $(FT) util_recovery.f90 869 870 printtable_mod.o : printtable_mod.f90 871 $(FT) printtable_mod.f90 872 873 # modules "fake" pour compatibilite 874 #---------------------------------- 875 876 fake-routines-Heino_mod.o : Heino_files/fake-routines-Heino_mod.f90 877 $(FT) Heino_files/fake-routines-Heino_mod.f90 878 879 fake-routines-ant_mod.o : Antarctique_general_files/fake-routines-ant_mod.f90 880 $(FT) Antarctique_general_files/fake-routines-ant_mod.f90 881 882 fake-routines-greenmint_mod.o : Greenmint40_files/fake-routines-greenmint_mod.f90 883 $(FT) Greenmint40_files/fake-routines-greenmint_mod.f90 884 885 fake-routines-greeneem_mod.o : Greeneem_files/fake-routines-greeneem_mod.f90 886 $(FT) Greeneem_files/fake-routines-greeneem_mod.f90 887 888 fake-routines-gsearise_mod.o : Gsearise_files/fake-routines-gsearise_mod.f90 889 $(FT) Gsearise_files/fake-routines-gsearise_mod.f90 890 891 fake-routines-nord_mod.o : Heminord_files/fake-routines-nord_mod.f90 892 $(FT) Heminord_files/fake-routines-nord_mod.f90 893 894 fake-routines_Grice2sea_mod.o : GrIce2sea_files/fake-routines_Grice2sea_mod.f90 895 $(FT) GrIce2sea_files/fake-routines_Grice2sea_mod.f90 896 897 # modules choix pour selectionner les modules physiques 898 #-------------------------------------------------------- 899 900 module_choix-heino-0.4.o : Heino_files/module_choix-heino-0.4.f90 901 $(FT) Heino_files/module_choix-heino-0.4.f90 902 903 module_choix-heminord-0.4.o : Heminord_files/module_choix-heminord-0.4.f90 904 $(FT) Heminord_files/module_choix-heminord-0.4.f90 905 906 module_choix-antar40-0.4.o : Ant40_files/module_choix-antar40-0.4.f90 907 $(FT) Ant40_files/module_choix-antar40-0.4.f90 908 909 module_choix_antar15_LBq.o : ANT15-LBq_files/module_choix_antar15_LBq.f90 910 $(FT) ANT15-LBq_files/module_choix_antar15_LBq.f90 911 912 module_choix_antar15CISM.o : Ant15_CISM_files/module_choix_antar15CISM.f90 913 $(FT) Ant15_CISM_files/module_choix_antar15CISM.f90 914 915 module_choix_antar20CISM.o : Ant20_CISM_files/module_choix_antar20CISM.f90 916 $(FT) Ant20_CISM_files/module_choix_antar20CISM.f90 917 918 module_choix_antar25CISM.o : Ant25_CISM_files/module_choix_antar25CISM.f90 919 $(FT) Ant25_CISM_files/module_choix_antar25CISM.f90 920 921 module_choix_antar45CISM.o : Ant45_CISM_files/module_choix_antar45CISM.f90 922 $(FT) Ant45_CISM_files/module_choix_antar45CISM.f90 923 924 module_choix-antar40-0.4_old.o : Ant40_files/module_choix-antar40-0.4_old.f90 925 $(FT) Ant40_files/module_choix-antar40-0.4_old.f90 926 927 module_choix-greenmint-40.o : Greenmint40_files/module_choix-greenmint-40.f90 928 $(FT) Greenmint40_files/module_choix-greenmint-40.f90 929 930 module_choix-greeneem.o : Greeneem_files/module_choix-greeneem.f90 931 $(FT) Greeneem_files/module_choix-greeneem.f90 932 933 module_choix-gsearise.o : Gsearise_files/module_choix-gsearise.f90 934 $(FT) Gsearise_files/module_choix-gsearise.f90 935 936 module_choix_GrIce2sea.o : GrIce2sea_files/module_choix_GrIce2sea.f90 937 $(FT) GrIce2sea_files/module_choix_GrIce2sea.f90 938 939 # Routines pour MISMIP 940 #----------------------- 941 942 climat-mismip3d_mod.o : MISMIP3D_files/climat-mismip3d_mod.f90 943 $(FT) MISMIP3D_files/climat-mismip3d_mod.f90 944 945 dragging_mismip3d_mod.o : MISMIP3D_files/dragging_mismip3d_mod.f90 946 $(FT) MISMIP3D_files/dragging_mismip3d_mod.f90 947 948 fake-routines-mismip3d_mod.o : MISMIP3D_files/fake-routines-mismip3d_mod.f90 949 $(FT) MISMIP3D_files/fake-routines-mismip3d_mod.f90 950 951 lect-mismip3d_mod.o : MISMIP3D_files/lect-mismip3d_mod.f90 952 $(F_NETCDF) MISMIP3D_files/lect-mismip3d_mod.f90 953 954 geography-Mismip3d.o : MISMIP3D_files/geography-Mismip3d.f90 955 $(FT) MISMIP3D_files/geography-Mismip3d.f90 956 957 paradim_mismip3D_5km_mod.o : MISMIP3D_files/paradim_mismip3D_5km_mod.f90 958 $(FT) MISMIP3D_files/paradim_mismip3D_5km_mod.f90 959 960 module_choix_mismip3d.o : MISMIP3D_files/module_choix_mismip3d.f90 961 $(F_NETCDF) MISMIP3D_files/module_choix_mismip3d.f90 962 963 964 # Routines specifiques du programme : par ordre alphabetique 965 #----------------------------------- 966 967 tracebug.o : tracebug.f90 968 $(FT) tracebug.f90 969 970 ablation-0.2.o : ablation-0.2.f #module3d.mod 971 $(FT) ablation-0.2.f 972 973 ablation_bord.o : ablation_bord.f90 974 $(FT) ablation_bord.f90 975 976 accum7.o : accum7.f 977 $(FT) accum7.f 978 979 bmelt-grounded.o : bmelt-grounded.f90 980 $(FT) bmelt-grounded.f90 981 982 calceps2-0.2.o : calceps2-0.2.f #module3d.mod 983 $(FT) calceps2-0.2.f 984 985 courbures.o : courbures.f90 986 $(FT) courbures.f90 987 988 detect-assym.o : Heino_files/detect-assym.f90 989 $(FT) Heino_files/detect-assym.f90 990 991 diagno-ant-0.6_mod.o : diagno-ant-0.6_mod.f90 992 $(FT) diagno-ant-0.6_mod.f90 993 994 diffusiv-polyn-0.5.o : diffusiv-polyn-0.5.f90 #module3d.mod 995 $(FT) diffusiv-polyn-0.5.f90 996 997 diffusiv-polyn-0.6.o : diffusiv-polyn-0.6.f90 #module3d.mod 998 $(FT) diffusiv-polyn-0.6.f90 999 1000 eaubasale-0.5_mod.o : eaubasale-0.5_mod.f90 1001 $(FT) eaubasale-0.5_mod.f90 1002 1003 firstoutput-0.2.o : firstoutput-0.2.f #module3d.mod 1004 $(FT) firstoutput-0.2.f 1005 1006 #flottab2-0.6.o : flottab2-0.6.f90 #module3d.mod 1007 # $(FT) flottab2-0.6.f90 1008 1009 flottab2-0.7.o : flottab2-0.7.f90 #module3d.mod 1010 $(FT) flottab2-0.7.f90 1011 1012 #flottab2-0.5-heino.o : Heino_files/flottab2-0.5-heino.f90 #module3d.mod 1013 # $(FT) Heino_files/flottab2-0.5-heino.f90 1014 1015 flottab-rescue-1.o : flottab-rescue-1.f90 #module3d.mod 1016 $(FT) flottab-rescue-1.f90 1017 1018 flowlaw-0.3.o : flowlaw-0.3.f90 #module3d.mod 1019 $(FT) flowlaw-0.3.f90 1020 1021 flow_general-0.3.o : flow_general-0.3.f90 #module3d.mod deform_declar.mod 1022 $(FT) flow_general-0.3.f90 1023 1024 1025 initial-heino-phy.o : Heino_files/initial-heino-phy.f90 1026 $(FT) Heino_files/initial-heino-phy.f90 1027 1028 no-icethick.o : no-icethick.f90 #module3d.mod 1029 $(FT) no-icethick.f90 1030 1031 initial-0.3.o : initial-0.3.f90 1032 $(F_NETCDF) initial-0.3.f90 1033 1034 #initial-phy-2.o : initial-phy-2.f90 #module3d.mod iso_declar.mod 1035 # $(FT) initial-phy-2.f90 1036 1037 1038 1039 initial2-0.4.o : initial2-0.4.f90 #module3d.mod iso_declar.mod 1040 $(FT) initial2-0.4.f90 1041 1042 1043 inputfile-vec-0.5.o : inputfile-vec-0.5.f90#module3d.mod 1044 $(FT) inputfile-vec-0.5.f90 1045 1046 lastoutput-0.2.o : lastoutput-0.2.f#module3d.mod 1047 $(FT) lastoutput-0.2.f 1048 1049 lect-eis.o : lect-eis.f90 1050 $(FT) lect-eis.f90 1051 1052 lect_datfile.o : lect_datfile.f90 1053 $(FT) lect_datfile.f90 1054 1055 write_datfile.o : write_datfile.f90 1056 $(FT) write_datfile.f90 1057 1058 limit_file.o : limit_file.f90 1059 $(FT) limit_file.f90 1060 1061 lineartemp-0.2.o : lineartemp-0.2.f90 1062 $(FT) lineartemp-0.2.f90 1063 1064 litho-0.3.o : litho-0.3.f90#module3d.mod iso_declar.mod 1065 $(FT) litho-0.3.f90 1066 1067 litho-0.4.o : litho-0.4.f90#module3d.mod iso_declar.mod 1068 $(FT) litho-0.4.f90 1069 1070 main3D-0.4-40km.o : main3D-0.4-40km.f90 #module3d.mod iso_declar.mod 1071 $(F_NETCDF) main3D-0.4-40km.f90 1072 1073 main_dummy.o : main_dummy.f90 1074 $(F_NETCDF) main_dummy.f90 1075 1076 masque-0.2.o : masque-0.2.F#module3d.mod 1077 $(FT) masque-0.2.F 1078 1079 masque.o : masque.f90 1080 $(FT) masque.f90 1081 1082 massb-grice2sea_perturb_Tparam.o : GrIce2sea_files/massb-grice2sea_perturb_Tparam.f90 1083 $(FT) GrIce2sea_files/massb-grice2sea_perturb_Tparam.f90 1084 1085 1086 1087 massb-ant_perturb_Tparam.o : Antarctique_general_files/massb-ant_perturb_Tparam.f90 1088 $(FT) Antarctique_general_files/massb-ant_perturb_Tparam.f90 1089 1090 massbal-anteis-0.2.o : Ant40_files/massbal-anteis-0.2.f#module3d.mod 1091 $(FT) Ant40_files/massbal-anteis-0.2.f 1092 1093 massb_perturb_Tparam_green.o : Greenmint40_files/massb_perturb_Tparam_green.f90 1094 $(FT) Greenmint40_files/massb_perturb_Tparam_green.f90 1095 1096 massb_perturb_Tparam_greeneem.o : Greeneem_files/massb_perturb_Tparam_greeneem.f90 1097 $(FT) Greeneem_files/massb_perturb_Tparam_greeneem.f90 1098 1099 massb_perturb_Tparam_gsearise.o : Gsearise_files/massb_perturb_Tparam_gsearise.f90 1100 $(FT) Gsearise_files/massb_perturb_Tparam_gsearise.f90 1101 1102 massb_perturb_mois.o : massb_perturb_mois.f90 1103 $(FT) massb_perturb_mois.f90 1104 1105 massb_perturb_mois_lapsecouche.o : massb_perturb_mois_lapsecouche.f90 1106 $(FT) massb_perturb_mois_lapsecouche.f90 1107 1108 massb-GrIce2sea_fixe.o : GrIce2sea_files/massb-GrIce2sea_fixe.f90 1109 $(FT) GrIce2sea_files/massb-GrIce2sea_fixe.f90 1110 1111 massb-GrIce2sea_RCM.o : GrIce2sea_files/massb-GrIce2sea_RCM.f90 1112 $(FT) GrIce2sea_files/massb-GrIce2sea_RCM.f90 1113 1114 minmax-format.o : minmax-format.f90 1115 $(FT) minmax-format.f90 1116 1117 mix-SIA-L1_mod.o : mix-SIA-L1_mod.f90 1118 $(FT) mix-SIA-L1_mod.f90 1119 1120 moy_mxmy_shift.o : moy_mxmy_shift.f90 1121 $(FT) moy_mxmy_shift.f90 1122 1123 moy_mxmy.o : moy_mxmy.f90 1124 $(FT) moy_mxmy.f90 1125 1126 neffect-0.3.o : neffect-0.3.f90 #module3d.mod 1127 $(FT) neffect-0.3.f90 1128 1129 neffect-0.4.o : neffect-0.4.f90 #module3d.mod 1130 $(FT) neffect-0.4.f90 1131 1132 new-flot-0.3.o : new-flot-0.3.f90#module3d.mod 1133 $(FT) new-flot-0.3.f90 1134 1135 next-time.o : next-time.f90 1136 $(FT) next-time.f90 1137 1138 #plotoutput.o : plotoutput.f#module3d.mod 1139 # $(FT) plotoutput.f 1140 1141 printdebug.o : printdebug.f90 #module3d.mod 1142 $(FT) printdebug.f90 1143 1144 remplimat-ant-0.5-40km.o : remplimat-ant-0.5-40km.f90 #module3d.mod eq_elliptique_mod.mod 1145 $(FT) remplimat-ant-0.5-40km.f90 1146 1147 sealevel-out.o : sealevel-out.f90#module3d.mod 1148 $(FT) sealevel-out.f90 1149 1150 snaptime.o : snaptime.f90 1151 $(FT) snaptime.f90 1152 1153 sortie-hz-multivar.o : sortie-hz-multivar.f90 1154 $(FT) sortie-hz-multivar.f90 1155 1156 strain_rate.o : strain_rate.f90#module3d.mod 1157 $(FT) strain_rate.f90 1158 1159 surface-0.3.o : surface-0.3.f90#module3d.mod 1160 $(FT) surface-0.3.f90 1161 1162 slope_surf.o : slope_surf.f90 1163 $(FT) slope_surf.f90 1164 1165 tab-litho-0.3.o : tab-litho-0.3.f90#module3d.mod iso_declar.mod 1166 $(FT) tab-litho-0.3.f90 1167 1168 taubed-0.3.o : taubed-0.3.f90#module3d.mod iso_declar.mod 1169 $(FT) taubed-0.3.f90 1170 1171 #ts-output-0.2.o : ts-output-0.2.f 1172 # $(FT) ts-output-0.2.f 1173 1174 velocities-polyn-0.3.o : velocities-polyn-0.3.f90 #module3d.mod 1175 $(FT) velocities-polyn-0.3.f90 1176 1177 vtoutput-0.2.o : vtoutput-0.2.f#module3d.mod 1178 $(FT) vtoutput-0.2.f 1179 1180 # Routines Hudson : 1181 1182 paradim-hudson_mod.o : Hudson_files/paradim-hudson_mod.f90 1183 $(FT) Hudson_files/paradim-hudson_mod.f90 1184 1185 geography-hudson_mod.o : Hudson_files/geography-hudson_mod.f90 1186 $(FT) Hudson_files/geography-hudson_mod.f90 1187 1188 sedim_declar_hudson_mod.o : Hudson_files/sedim_declar_hudson_mod.f90 1189 $(FT) Hudson_files/sedim_declar_hudson_mod.f90 1190 1191 eaubasale-0.5_hudson_mod.o : Hudson_files/eaubasale-0.5_hudson_mod.f90 1192 $(FT) Hudson_files/eaubasale-0.5_hudson_mod.f90 1193 1194 climat-hudson_mod.o : Hudson_files/climat-hudson_mod.f90 1195 $(FT) Hudson_files/climat-hudson_mod.f90 1196 1197 lect-hudson_mod.o : Hudson_files/lect-hudson_mod.f90 1198 $(FT) Hudson_files/lect-hudson_mod.f90 1199 1200 fake-routines-hudson_mod.o : Hudson_files/fake-routines-hudson_mod.f90 1201 $(FT) Hudson_files/fake-routines-hudson_mod.f90 1202 1203 prop-therm-hudson_mod.o : Hudson_files/prop-therm-hudson_mod.f90 1204 $(FT) Hudson_files/prop-therm-hudson_mod.f90 1205 1206 sliding-hudson_mod.o : Hudson_files/sliding-hudson_mod.f90 1207 $(FT) Hudson_files/sliding-hudson_mod.f90 1208 1209 fake-dragging-hudson_mod.o : Hudson_files/fake-dragging-hudson_mod.f90 1210 $(FT) Hudson_files/fake-dragging-hudson_mod.f90 1211 1212 dragging_hudson_jorge_mod.o : Hudson_files/dragging_hudson_jorge_mod.f90 1213 $(FT) Hudson_files/dragging_hudson_jorge_mod.f90 1214 1215 dragging-hudson_mod.o : Hudson_files/dragging-hudson_mod.f90 1216 $(FT) Hudson_files/dragging-hudson_mod.f90 1217 1218 dragging_hwatermax_hudson_mod.o : Hudson_files/dragging_hwatermax_hudson_mod.f90 1219 $(FT) Hudson_files/dragging_hwatermax_hudson_mod.f90 1220 1221 bmelt_hudson_mod.o : Hudson_files/bmelt_hudson_mod.f90 1222 $(FT) Hudson_files/bmelt_hudson_mod.f90 1223 1224 initial-hudson-phy.o : Hudson_files/initial-hudson-phy.f90 1225 $(FT) Hudson_files/initial-hudson-phy.f90 1226 1227 output_hudson_mod.o : Hudson_files/output_hudson_mod.f90 1228 $(FT) Hudson_files/output_hudson_mod.f90 1229 1230 module_choix-hudson-0.4.o : Hudson_files/module_choix-hudson-0.4.f90 1231 $(FT) Hudson_files/module_choix-hudson-0.4.f90 1232 1233 track_hudson_mod.o : Hudson_files/track_hudson_mod.f90 1234 $(FT) Hudson_files/track_hudson_mod.f90 1235 1236 1237 # Routines Hemin-40 : 1238 1239 1240 paradim-hemin40_mod.o : Hemin40_files/paradim-hemin40_mod.f90 1241 $(FT) Hemin40_files/paradim-hemin40_mod.f90 1242 1243 geography-hemin40_mod.o : Hemin40_files/geography-hemin40_mod.f90 1244 $(FT) Hemin40_files/geography-hemin40_mod.f90 1245 1246 output_hemin40_mod.o : Hemin40_files/output_hemin40_mod.f90 1247 $(FT) Hemin40_files/output_hemin40_mod.f90 1248 1249 lect-hemin40_mod.o : Hemin40_files/lect-hemin40_mod.f90 1250 $(FT) Hemin40_files/lect-hemin40_mod.f90 1251 1252 bmelt-hemin40-regions_mod.o : Hemin40_files/bmelt-hemin40-regions_mod.f90 1253 $(FT) Hemin40_files/bmelt-hemin40-regions_mod.f90 1254 1255 bmelt-hemin40-depth_mod.o : Hemin40_files/bmelt-hemin40-depth_mod.f90 1256 $(FT) Hemin40_files/bmelt-hemin40-depth_mod.f90 1257 1258 fake-routines-hemin40_mod.o : Hemin40_files/fake-routines-hemin40_mod.f90 1259 $(FT) Hemin40_files/fake-routines-hemin40_mod.f90 1260 1261 module_choix-hemin40-0.4.o : Hemin40_files/module_choix-hemin40-0.4.f90 1262 $(FT) Hemin40_files/module_choix-hemin40-0.4.f90 1263 1264 track_hemin40_mod.o : Hemin40_files/track_hemin40_mod.f90 1265 $(FT) Hemin40_files/track_hemin40_mod.f90 1266 1267 # Routines Hemin-15 : 1268 1269 paradim-hemin15_mod.o : Hemin15_files/paradim-hemin15_mod.f90 1270 $(FT) Hemin15_files/paradim-hemin15_mod.f90 1271 1272 geography-hemin15_mod.o : Hemin15_files/geography-hemin15_mod.f90 1273 $(FT) Hemin15_files/geography-hemin15_mod.f90 1274 1275 lect-hemin15_mod.o : Hemin15_files/lect-hemin15_mod.f90 1276 $(FT) Hemin15_files/lect-hemin15_mod.f90 1277 1278 fake-routines-hemin15_mod.o : Hemin15_files/fake-routines-hemin15_mod.f90 1279 $(FT) Hemin15_files/fake-routines-hemin15_mod.f90 1280 1281 module_choix-hemin15.o : Hemin15_files/module_choix-hemin15.f90 1282 $(FT) Hemin15_files/module_choix-hemin15.f90 1283 1284 track_hemin15_mod.o : Hemin15_files/track_hemin15_mod.f90 1285 $(FT) Hemin15_files/track_hemin15_mod.f90 1286 1287 # routines Eurasie-40 1288 1289 1290 output_eurasie40_mod-0.1.o : Eurasie40_files/output_eurasie40_mod-0.1.f90 1291 $(FT) Eurasie40_files/output_eurasie40_mod-0.1.f90 1292 1293 lect-clim-act-eurasie_mod.o : Eurasie40_files/lect-clim-act-eurasie_mod.f90 1294 $(FT) Eurasie40_files/lect-clim-act-eurasie_mod.f90 1295 1296 climat-forcage-eurasie_mod-0.4.o : Eurasie40_files/climat-forcage-eurasie_mod-0.4.f90 1297 $(FT) Eurasie40_files/climat-forcage-eurasie_mod-0.4.f90 1298 1299 fake-routines-eurasie_mod.o : Eurasie40_files/fake-routines-eurasie_mod.f90 1300 $(FT) Eurasie40_files/fake-routines-eurasie_mod.f90 1301 1302 module_choix-eurasie-0.4.o : Eurasie40_files/module_choix-eurasie-0.4.f90 1303 $(FT) Eurasie40_files/module_choix-eurasie-0.4.f90 1304 1305 track_eurasie_mod.o : Eurasie40_files/track_eurasie_mod.f90 1306 $(FT) Eurasie40_files/track_eurasie_mod.f90 1307 1308 1309 # routines greenmint-40 1310 1311 1312 # Routines Temperature 1313 1314 icetemp_declar_mod.o : Temperature-routines/icetemp_declar_mod.f90 1315 $(FT) Temperature-routines/icetemp_declar_mod.f90 1316 1317 advec_icetemp.o : Temperature-routines/advec_icetemp.f90 1318 $(FT) Temperature-routines/advec_icetemp.f90 1319 1320 icetemp_mod.o : Temperature-routines/icetemp_mod.f90 1321 $(FT) Temperature-routines/icetemp_mod.f90 1322 1323 prop_th_icetemp.o: Temperature-routines/prop_th_icetemp.f90 1324 $(FT) Temperature-routines/prop_th_icetemp.f90 1325 1326 Qprod_icetemp.o: Temperature-routines/Qprod_icetemp.f90 1327 $(FT) Temperature-routines/Qprod_icetemp.f90 1328 1329 temp_col.o : Temperature-routines/temp_col.f90 1330 $(FT) Temperature-routines/temp_col.f90 1331 1332 # Routines Agrif 1333 1334 #open_file.o : open_file.f90 1335 # $(FT) open_file.f90 1336 1337 step.o : step.f90 1338 $(F_NETCDF) step.f90 1339 1340 steps_time_loop.o : steps_time_loop.f90 1341 $(F_NETCDF) steps_time_loop.f90 1342 1343 steps_time_loop_avec_iterbeta.o : steps_time_loop_avec_iterbeta.f90 1344 $(F_NETCDF) steps_time_loop_avec_iterbeta.f90 1345 1346 # nouvelles routines resolution equation elliptique 1347 1348 remplimat_declar_tabTu_mod.o : New-remplimat/remplimat_declar_tabTu_mod.f90 1349 $(FT) New-remplimat/remplimat_declar_tabTu_mod.f90 1350 1351 diagno-L2_mod.o : New-remplimat/diagno-L2_mod.f90 1352 $(FT) New-remplimat/diagno-L2_mod.f90 1353 1354 fake_diagno_mod.o : New-remplimat/fake_diagno_mod.f90 1355 $(FT) New-remplimat/fake_diagno_mod.f90 1356 1357 remplimat-shelves-tabTu.o : New-remplimat/remplimat-shelves-tabTu.f90 1358 $(FT) New-remplimat/remplimat-shelves-tabTu.f90 1359 1360 eq_ellipt_sgbsv_mod-0.2.o : New-remplimat/eq_ellipt_sgbsv_mod-0.2.f90 1361 $(FT) New-remplimat/eq_ellipt_sgbsv_mod-0.2.f90 1362 1363 graphique_L2.o : New-remplimat/graphique_L2.f90 1364 $(FT) New-remplimat/graphique_L2.f90 1365 1366 graph-sgbsv.o : New-remplimat/graph-sgbsv.f90 1367 $(FT) New-remplimat/graph-sgbsv.f90 1368 1369 # LAPACK 1370 reduc.o : LAPACK/reduc.f 1371 $(FT) $(F_90) LAPACK/reduc.f 1372 1373 band.o: LAPACK/band.f 1374 $(FT) $(F_90) LAPACK/band.f 1375 1376 ifeq ($(mkl_c), 0) 1377 #BLAS 1378 isamax.o : BLAS/isamax.f 1379 $(FT) BLAS/isamax.f 1380 lsame.o : BLAS/lsame.f 1381 $(FT) BLAS/lsame.f 1382 scopy.o: BLAS/scopy.f 1383 $(FT) BLAS/scopy.f 1384 slamch.o: BLAS/slamch.f 1385 $(FT) BLAS/slamch.f 1386 slabad.o: BLAS/slabad.f 1387 $(FT) BLAS/slabad.f 1388 slange.o: BLAS/slange.f 1389 $(FT) BLAS/slange.f 1390 slassq.o: BLAS/slassq.f 1391 $(FT) BLAS/slassq.f 1392 sgeqrf.o: BLAS/sgeqrf.f 1393 $(FT) BLAS/sgeqrf.f 1394 sormqr.o: BLAS/sormqr.f 1395 $(FT) BLAS/sormqr.f 1396 strmv.o: BLAS/strmv.f 1397 $(FT) BLAS/strmv.f 1398 slarft.o: BLAS/slarft.f 1399 $(FT) BLAS/slarft.f 1400 ilaslr.o: BLAS/ilaslr.f 1401 $(FT) BLAS/ilaslr.f 1402 ilaslc.o: BLAS/ilaslc.f 1403 $(FT) BLAS/ilaslc.f 1404 strmm.o: BLAS/strmm.f 1405 $(FT) BLAS/strmm.f 1406 slarfb.o: BLAS/slarfb.f 1407 $(FT) BLAS/slarfb.f 1408 slapy2.o: BLAS/slapy2.f 1409 $(FT) BLAS/slapy2.f 1410 slarfg.o: BLAS/slarfg.f 1411 $(FT) BLAS/slarfg.f 1412 slarf.o: BLAS/slarf.f 1413 $(FT) BLAS/slarf.f 1414 sgeqr2.o: BLAS/sgeqr2.f 1415 $(FT) BLAS/sgeqr2.f 1416 saxpy.o: BLAS/saxpy.f 1417 $(FT) BLAS/saxpy.f 1418 slarz.o: BLAS/slarz.f 1419 $(FT) BLAS/slarz.f 1420 sorm2r.o: BLAS/sorm2r.f 1421 $(FT) BLAS/sorm2r.f 1422 snrm2.o: BLAS/snrm2.f 1423 $(FT) BLAS/snrm2.f 1424 slaqps.o: BLAS/slaqps.f 1425 $(FT) BLAS/slaqps.f 1426 slaqp2.o: BLAS/slaqp2.f 1427 $(FT) BLAS/slaqp2.f 1428 sgeqp3.o: BLAS/sgeqp3.f 1429 $(FT) BLAS/sgeqp3.f 1430 slaset.o: BLAS/slaset.f 1431 $(FT) BLAS/slaset.f 1432 slaisnan.o: BLAS/slaisnan.f 1433 $(FT) BLAS/slaisnan.f 1434 sisnan.o: BLAS/sisnan.f 1435 $(FT) BLAS/sisnan.f 1436 slascl.o: BLAS/slascl.f 1437 $(FT) BLAS/slascl.f 1438 sdot.o: BLAS/sdot.f 1439 $(FT) BLAS/sdot.f 1440 slaic1.o: BLAS/slaic1.f 1441 $(FT) BLAS/slaic1.f 1442 slarzb.o: BLAS/slarzb.f 1443 $(FT) BLAS/slarzb.f 1444 slarzt.o: BLAS/slarzt.f 1445 $(FT) BLAs/slarzt.f 1446 sormr3.o: BLAS/sormr3.f 1447 $(FT) BLAS/sormr3.f 1448 sormrz.o: BLAS/sormrz.f 1449 $(FT) BLAS/sormrz.f 1450 slatrz.o: BLAS/slatrz.f 1451 $(FT) BLAS/slatrz.f 1452 stzrzf.o: BLAS/stzrzf.f 1453 $(FT) BLAS/stzrzf.f 1454 sgelsy.o: BLAS/sgelsy.f 1455 $(FT) BLAS/sgelsy.f 1456 sgbmv.o: BLAS/sgbmv.f 1457 $(FT) BLAS/sgbmv.f 1458 sgemm.o: BLAS/sgemm.f 1459 $(FT) BLAS/sgemm.f 1460 sgemv.o: BLAS/sgemv.f 1461 $(FT) BLAS/sgemv.f 1462 sger.o: BLAS/sger.f 1463 $(FT) BLAS/sger.f 1464 sscal.o: BLAS/sscal.f 1465 $(FT) BLAS/sscal.f 1466 sswap.o: BLAS/sswap.f 1467 $(FT) BLAS/sswap.f 1468 stbsv.o: BLAS/stbsv.f 1469 $(FT) BLAS/stbsv.f 1470 strsm.o: BLAS/strsm.f 1471 $(FT) BLAS/strsm.f 1472 xerbla.o: BLAS/xerbla.f 1473 $(FT) BLAS/xerbla.f 1474 1475 endif 1476 # routines netcdf 1477 1478 1479 1480 io_netcdf.o: Netcdf-routines/io_netcdf.f90 1481 $(F_NETCDF) Netcdf-routines/io_netcdf.f90 1482 1483 sortie_netcdf_GRISLI_mod.0.2.o : Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2.f90 1484 $(F_NETCDF) Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2.f90 1485 1486 # Hassine 1487 io_netcdf_GRISLI.o: Netcdf-routines/io_netcdf_GRISLI.f90 1488 $(F_NETCDF) Netcdf-routines/io_netcdf_GRISLI.f90 1489 1490 sortie_netcdf_GRISLI_mod.0.2-hassine.o : Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine.f90 1491 $(F_NETCDF) Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine.f90 1492 1493 readinput.o: readinput.f90 1494 $(F_NETCDF) readinput.f90 1495 1496 interface_input.o: interface_input.f90 1497 $(FT) interface_input.f90 1498 1499 1500 # routines et modules recul de ligne d'echouage ice2sea 1501 1502 proto_declar_3D_grisli_mod.o : Recul_force_grounding_line/proto_declar_3D_grisli_mod.f90 1503 $(FT) Recul_force_grounding_line/proto_declar_3D_grisli_mod.f90 1504 1505 declar_proto_recul.o : Recul_force_grounding_line/declar_proto_recul.f90 1506 $(FT) Recul_force_grounding_line/declar_proto_recul.f90 1507 1508 proto_recul_mod.o : Recul_force_grounding_line/proto_recul_mod.f90 1509 $(FT) Recul_force_grounding_line/proto_recul_mod.f90 1510 1511 declar_io_ncdf_proto_mod.o : Recul_force_grounding_line/declar_io_ncdf_proto_mod.f90 1512 $(FT) Recul_force_grounding_line/declar_io_ncdf_proto_mod.f90 1513 1514 # $(FT) -I$(NDC_INC) Netcdf-routines/sortie_netcdf_GRISLI_mod.f90 1515 1516 1517 # routines et modules recul de ligne d'echouage ice2sea version toy (finale) 1518 1519 toy_declar_3D_grisli_mod.o : Recul_force_grounding_line/toy_declar_3D_grisli_mod.f90 1520 $(FT) Recul_force_grounding_line/toy_declar_3D_grisli_mod.f90 1521 1522 declar_io_ncdf_toy_mod_fake.o : Recul_force_grounding_line/declar_io_ncdf_toy_mod_fake.f90 1523 $(FT) Recul_force_grounding_line/declar_io_ncdf_toy_mod_fake.f90 1524 1525 declar_toy_retreat.o : Recul_force_grounding_line/declar_toy_retreat.f90 1526 $(FT) Recul_force_grounding_line/declar_toy_retreat.f90 1527 1528 toy_retreat_mod.o : Recul_force_grounding_line/toy_retreat_mod.f90 1529 $(F_NETCDF) Recul_force_grounding_line/toy_retreat_mod.f90 1530 1531 347 # Hemin40_files : 348 %.o: Hemin40_files/%.f90 349 $(FT) $(NCDF_INC) -c Hemin40_files/$*.f90 350 351 # Hemin15_files 352 %.o: Hemin15_files/%.f90 353 $(FT) $(NCDF_INC) -c Hemin15_files/$*.f90 354 355 # Antarctique_general_files 356 %.o: Antarctique_general_files/%.f90 357 $(FT) $(NCDF_INC) -c Antarctique_general_files/$*.f90 358 359 # GrIce2sea_files 360 %.o: GrIce2sea_files/%.f90 361 $(FT) $(NCDF_INC) -c GrIce2sea_files/$*.f90 362 363 # Ant40_files 364 %.o: Ant40_files/%.f90 365 $(FT) $(NCDF_INC) -c Ant40_files/$*.f90 366 367 # ANT15-LBq_files 368 %.o: ANT15-LBq_files/%.f90 369 $(FT) $(NCDF_INC) -c ANT15-LBq_files/$*.f90 370 371 # Greeneem_files/Greeneem15_files 372 %.o: Greeneem_files/Greeneem15_files/%.f90 373 $(FT) $(NCDF_INC) -c Greeneem_files/Greeneem15_files/$*.f90 374 375 # Greeneem_files 376 %.o: Greeneem_files/%.f90 377 $(FT) $(NCDF_INC) -c Greeneem_files/$*.f90 378 379 # Draggings_modules 380 %.o: Draggings_modules/%.f90 381 $(FT) $(NCDF_INC) -c Draggings_modules/$*.f90 382 383 # Snowball_files 384 %.o: Snowball_files/%.f90 385 $(FT) $(NCDF_INC) -c Snowball_files/$*.f90 386 387 388 # subroutines communes : 389 %.o: %.f90 390 $(FT) $(NCDF_INC) -c $*.f90 391 392 # New-remplimat : 393 %.o : New-remplimat/%.f90 394 $(FT) $(NCDF_INC) -c New-remplimat/$*.f90 395 396 # Netcdf-routines : 397 %.o: Netcdf-routines/%.f90 398 $(FT) $(NCDF_INC) -c Netcdf-routines/$*.f90 399 400 #toy_recul : 401 %.o: Recul_force_grounding_line/%.f90 402 $(FT) $(NCDF_INC) -c Recul_force_grounding_line/$*.f90 403 404 #Temperature : 405 %.o : Temperature-routines/%.f90 406 $(FT) $(NCDF_INC) -c Temperature-routines/$*.f90 407 408 # BLAS : 409 %.o : BLAS/%.f 410 $(FT) -c BLAS/$*.f 411 412 # Reduc et band: 413 %.o : LAPACK/%.f 414 $(FT) -c LAPACK/$*.f 1532 415 1533 416 1534 417 # Liens et Construction des executables 1535 418 #--------------------------------------- 1536 # $(mod_clim_forcage) \ a mettre a la place de mod_clim_perturb eventuellement 1537 1538 1539 LBqAntar15 : $(Dim_ANT15-LBq) $(mod_dim_communs) \ 1540 $(Proto_recul) \ 1541 $(mod_communs) \ 1542 $(Proto_recul) \ 1543 $(mod_clim_perturb) \ 1544 $(mod_tracers) \ 419 420 Ant-15 : $(Dim_ANT15-LBq) $(mod_dim_communs) \ 421 $(toy_recul) \ 422 $(mod_communs) \ 423 $(mod_clim_tof) \ 424 $(mod_no_tracers) \ 1545 425 $(mod_ell) $(Liste_ANT15-LBq) \ 1546 426 $(diagnoshelf) \ 1547 427 $(Liste_Netcdf) \ 1548 $(routines_communes) steps_time_loop.o $(routine_elliptiques) 1549 1550 $(LK) -o ../bin/LBqAntar-15 $(Dim_ANT15-LBq) $(mod_dim_communs) \ 1551 $(Proto_recul) \ 1552 $(mod_communs) \ 1553 $(mod_clim_perturb) \ 1554 $(mod_tracers) \ 1555 $(mod_ell) \ 1556 $(Liste_ANT15-LBq) \ 1557 $(diagnoshelf) $(Liste_Netcdf) \ 1558 $(routines_communes) steps_time_loop.o $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) 428 $(routines_communes) steps_time_loop.o \ 429 $(routine_elliptiques) \ 430 $(Liste_BLAS) 431 432 $(LK) -o ../bin/Ant-15 \ 433 $(Dim_ANT15-LBq) $(mod_dim_communs) \ 434 $(toy_recul) \ 435 $(mod_communs) \ 436 $(mod_clim_tof) \ 437 $(mod_no_tracers) \ 438 $(mod_ell) $(Liste_ANT15-LBq) \ 439 $(diagnoshelf) \ 440 $(Liste_Netcdf) \ 441 $(routines_communes) steps_time_loop.o \ 442 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1559 443 1560 444 Recul_ice2sea : $(Dim_ANT15-LBq) $(mod_dim_communs) \ … … 1576 460 $(Liste_ANT15-LBq) \ 1577 461 $(diagnoshelf) $(Liste_Netcdf) \ 1578 $(routines_communes) steps_time_loop.o $(routine_elliptiques) $(NCDF_LIB) 462 $(routines_communes) steps_time_loop.o $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) 1579 463 1580 464 … … 1589 473 $(mod_ell) $(Liste_mismip_3D_5) \ 1590 474 $(Liste_Netcdf) $(Liste_mismip_post_ncdf) $(diagnoshelf) \ 1591 $(routines_communes) steps_time_loop.o $(routine_elliptiques) $(NCDF_LIB) 475 $(routines_communes) steps_time_loop.o $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) 1592 476 1593 477 Grice2sea : $(Dim_GrIce2sea) $(mod_dim_communs) \ … … 1599 483 $(diagnoshelf) \ 1600 484 $(Liste_Netcdf) \ 1601 $(routines_communes) steps_time_loop.o $(routine_elliptiques) 485 $(routines_communes) steps_time_loop.o \ 486 $(routine_elliptiques) \ 487 $(Liste_BLAS) 1602 488 1603 489 $(LK) -o ../bin/Grice2sea \ … … 1611 497 $(Liste_Netcdf) \ 1612 498 $(routines_communes) steps_time_loop.o \ 1613 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)499 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1614 500 1615 501 Grice2sea_iterbeta : $(Dim_GrIce2sea) $(mod_dim_communs) \ … … 1622 508 $(Liste_Netcdf) \ 1623 509 $(routines_communes) steps_time_loop_avec_iterbeta.o \ 1624 $(routine_elliptiques) 510 $(routine_elliptiques) \ 511 $(Liste_BLAS) 1625 512 1626 513 $(LK) -o ../bin/Grice2sea_iterbeta \ … … 1634 521 $(Liste_Netcdf) \ 1635 522 $(routines_communes) steps_time_loop_avec_iterbeta.o \ 1636 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)523 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1637 524 1638 525 Hemin-40 : $(Dim_hemin40) $(mod_dim_communs) \ … … 1640 527 $(mod_communs) \ 1641 528 $(mod_clim_tof) \ 1642 $(mod_ no_tracers) \529 $(mod_tracers) \ 1643 530 $(mod_ell) $(Liste_hemin40) \ 1644 531 $(diagnoshelf) \ … … 1653 540 $(mod_communs) \ 1654 541 $(mod_clim_tof) \ 1655 $(mod_ no_tracers) \542 $(mod_tracers) \ 1656 543 $(mod_ell) $(Liste_hemin40) \ 1657 544 $(diagnoshelf) \ 1658 545 $(Liste_Netcdf) \ 1659 546 $(routines_communes) main_dummy.o steps_time_loop.o \ 1660 $(routine_elliptiques) $(NCDF_LIB) 547 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1661 548 1662 549 ar -cvr libgrisli.a $(Dim_hemin40) $(mod_dim_communs) \ … … 1681 568 $(Liste_Netcdf) \ 1682 569 $(routines_communes) steps_time_loop.o \ 1683 $(routine_elliptiques) 570 $(routine_elliptiques) \ 571 $(Liste_BLAS) 1684 572 1685 573 $(LK) -o ../bin/Hemin-15 \ … … 1693 581 $(Liste_Netcdf) \ 1694 582 $(routines_communes) steps_time_loop.o \ 1695 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)583 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1696 584 1697 585 Greeneem15 : $(Dim_greeneem15) $(mod_dim_communs) \ … … 1699 587 $(mod_communs) \ 1700 588 $(mod_clim_tof) \ 1701 $(mod_ no_tracers) \589 $(mod_tracers) \ 1702 590 $(mod_ell) $(Liste_greeneem15) \ 1703 591 $(diagnoshelf) \ 1704 592 $(Liste_Netcdf) \ 1705 593 $(routines_communes) steps_time_loop.o \ 1706 $(routine_elliptiques) 594 $(routine_elliptiques) \ 595 $(Liste_BLAS) 1707 596 1708 597 $(LK) -o ../bin/Greeneem15 \ … … 1716 605 $(Liste_Netcdf) \ 1717 606 $(routines_communes) steps_time_loop.o \ 1718 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)607 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 1719 608 1720 609 Ant-40 : $(Dim_Ant40) $(mod_dim_communs) \ … … 1740 629 $(Liste_Netcdf) \ 1741 630 $(routines_communes) steps_time_loop.o \ 1742 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 631 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 632 633 Snowball : $(Dim_Snowball) $(mod_dim_communs) \ 634 $(toy_recul) \ 635 $(mod_communs) \ 636 $(mod_clim_tof) \ 637 $(mod_no_tracers) \ 638 $(mod_ell) $(Liste_Snowball) \ 639 $(diagnoshelf) \ 640 $(Liste_Netcdf) \ 641 $(routines_communes) steps_time_loop.o \ 642 $(routine_elliptiques) \ 643 $(Liste_BLAS) 644 645 $(LK) -o ../bin/Snowball \ 646 $(Dim_Snowball) $(mod_dim_communs) \ 647 $(toy_recul) \ 648 $(mod_communs) \ 649 $(mod_clim_tof) \ 650 $(mod_no_tracers) \ 651 $(mod_ell) $(Liste_Snowball) \ 652 $(diagnoshelf) \ 653 $(Liste_Netcdf) \ 654 $(routines_communes) steps_time_loop.o \ 655 $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB) $(Liste_BLAS) 656 657 658 clean : 659 rm -f *.o *.mod *~ */*~ BLAS/*.o 660 661 1743 662 1744 663 … … 1835 754 1836 755 1837 1838 # geographies obsoletes1839 1840 # listes1841 1842 #Liste_Antar15_CISM = lect-Ant_clim_CISM_gen_dat.o output_anta_mod-0.4.o \1843 # dragging-vit_bil_CISM_gen_mod.o fake-routines-ant_mod.o \1844 # lect-Ant_CISM_gen_dat.o module_choix_antar15CISM.o \1845 # massb-ant_forcage-0.4.o massb-ant_perturb_Tparam.o track_ant40_mod.o1846 1847 #Liste_Antar20_CISM = lect-Ant_clim_CISM_gen_dat.o output_anta_mod-0.4.o \1848 # dragging-vit_bil_CISM_gen_mod.o fake-routines-ant_mod.o \1849 # lect-Ant_CISM_gen_dat.o module_choix_antar20CISM.o \1850 # massb-ant_forcage-0.4.o massb-ant_perturb_Tparam.o track_ant40_mod.o1851 1852 #Liste_Antar25_CISM = lect-Ant_clim_CISM_gen_dat.o output_anta_mod-0.4.o \1853 # dragging-vit_bil_CISM_gen_mod.o fake-routines-ant_mod.o \1854 # lect-Ant_CISM_gen_dat.o module_choix_antar25CISM.o \1855 # massb-ant_forcage-0.4.o massb-ant_perturb_Tparam.o track_ant40_mod.o1856 1857 #Liste_Antar45_CISM = lect-Ant_clim_CISM_45_dat.o output_anta_mod-0.4.o \1858 # dragging-vit_bil_CISM_45_mod.o fake-routines-ant_mod.o \1859 # lect-Ant_CISM_45_dat.o module_choix_antar45CISM.o \1860 # massb-ant_forcage-0.4.o massb-ant_perturb_Tparam.o track_ant40_mod.o1861 1862 #Liste_HEINO = climat-heino_mod.o lect-Heino_mod.o \1863 # fake-routines-Heino_mod.o detect-assym.o \1864 # prop-therm-Heino_mod.o sliding-Heino_mod.o \1865 # initial-heino-phy.o output_heino_mod.o \1866 # module_choix-heino-0.4.o track_heino_mod.o1867 1868 #Antar20 : $(Dim_Antar20_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar20_CISM) \1869 # $(diagnoshelf) $(Liste_Netcdf) \1870 # $(routines_communes) $(routine_elliptiques)1871 1872 # $(LK) -o ../bin/Antar-20 $(Dim_Antar20_CISM) $(mod_dim_communs) $(mod_communs) \1873 # $(mod_ell) $(Liste_Antar20_CISM) \1874 # $(diagnoshelf) $(Liste_Netcdf) \1875 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)1876 1877 #Antar25 : $(Dim_Antar25_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar25_CISM) \1878 # $(diagnoshelf) $(Liste_Netcdf) \1879 # $(routines_communes) $(routine_elliptiques)1880 1881 # $(LK) -o ../bin/Antar-25 $(Dim_Antar25_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) \1882 # $(Liste_Antar25_CISM) \1883 # $(diagnoshelf) $(Liste_Netcdf) \1884 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)1885 1886 #Antar25-181 : $(Dim_Antar25_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar25_CISM) \1887 # $(diagnoshelf) $(Liste_Netcdf) \1888 # $(routines_communes) $(routine_elliptiques)1889 1890 # $(LK) -o ../bin-pc181/Antar-pc181 $(Dim_Antar25_CISM) $(mod_dim_communs) $(mod_communs) \1891 # $(mod_ell) $(Liste_Antar25_CISM) \1892 # $(diagnoshelf) $(Liste_Netcdf) \1893 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)1894 1895 1896 #Antar45 : $(Dim_Antar45_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar45_CISM) \1897 # $(diagnoshelf) $(Liste_Netcdf) \1898 # $(routines_communes) $(routine_elliptiques)1899 1900 # $(LK) -o ../bin/Antar-45 $(Dim_Antar45_CISM) $(mod_communs) $(mod_ell) $(Liste_Antar45_CISM) \1901 # $(diagnoshelf) $(Liste_Netcdf) \1902 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)1903 1904 #Liste_Antar_old = bmelt-ant-regions_mod.o \1905 # lect-clim-act-anteis_mod.o output_anta_mod-0.4.o \1906 # dragging_stream_impose_vitbil_mod.o \1907 # fake-routines-ant_mod.o lect-anteis_mod.o \1908 # module_choix-antar40-0.4_old.o massb-ant_forcage-0.4.o massb-ant_perturb-0.4.o \1909 # track_ant40_mod.o1910 1911 #Liste_Antar40 = bmelt-ant-regions_mod.o \1912 # lect-clim-act-anteis_mod.o output_anta_mod-0.4.o \1913 # dragging_stream_impose_vitbil_mod.o \1914 # fake-routines-ant_mod.o lect-anteis_mod.o \1915 # module_choix-antar40-0.4.o massb-ant_forcage-0.4.o massb-ant_perturb_Tparam.o \1916 # track_ant40_mod.o1917 1918 # listes de dimensionnement obsoletes1919 1920 # Dim_Antar40 = paradim-ant40_mod.o geography-ant40_mod.o1921 # Dim_Antar15_CISM = paradim-ant15_CISM_mod.o geography-Ant15CISM.o1922 # Dim_Antar20_CISM = paradim-ant20_CISM_mod.o geography-Ant20CISM.o1923 # Dim_Antar25_CISM = paradim-ant25_CISM_mod.o geography-Ant25CISM.o1924 # Dim_Antar45_CISM = paradim-ant45_CISM_mod.o geography-Ant45CISM.o1925 # Dim_heino = paradim-Heino_mod.o geography-heino_mod.o1926 1927 1928 # ancienne version diagnoshelf: obsolete, il faut aussi modifier le module choix1929 1930 #mod_ell_old = eq_elliptique_mod-0.4.o1931 #routine_elliptiques_old = remplimat-ant-0.5-40km.o1932 #diagnoshelf_old = diagno-ant-0.6_mod.o1933 1934 1935 # Routines obsoletes1936 1937 #icetemp-0.4.o : icetemp-0.4.f90 #module3d.mod tridiagmod.mod1938 # $(FT) icetemp-0.4.f901939 1940 #icetemp-0.5_mod.o : icetemp-0.5_mod.f901941 # $(FT) icetemp-0.5_mod.f901942 1943 #icethick-ant-0.5.o : icethick-ant-0.5.f90 #module3d.mod relaxation_mod.mod1944 # $(FT) icethick-ant-0.5.f901945 1946 #deform_declar_mod-0.3.o : deform_declar_mod-0.3.f901947 # $(FT) deform_declar_mod-0.3.f901948 1949 1950 #-------------lecture des fichiers Climat obsoletes1951 1952 #lect-clim-act-anteis_mod.o : Ant40_files/lect-clim-act-anteis_mod.f901953 # $(FT) Ant40_files/lect-clim-act-anteis_mod.f901954 1955 #lect-Ant_clim_CISM_gen_dat.o : Antarctique_general_files/lect-Ant_clim_CISM_gen_dat.f901956 # $(FT) Antarctique_general_files/lect-Ant_clim_CISM_gen_dat.f901957 1958 #lect-Ant_clim_CISM_15_dat.o : Ant15_CISM_files/lect-Ant_clim_CISM_15_dat.f901959 # $(FT) Ant15_CISM_files/lect-Ant_clim_CISM_15_dat.f901960 1961 #lect-Ant_clim_CISM_45_dat.o : Ant45_CISM_files/lect-Ant_clim_CISM_45_dat.f901962 # $(FT) Ant45_CISM_files/lect-Ant_clim_CISM_45_dat.f901963 1964 #massb-ant_forcage-0.4.o : Ant40_files/massb-ant_forcage-0.4.f1965 # $(FT) Ant40_files/massb-ant_forcage-0.4.f1966 1967 # ancienne methode netcdf1968 #sortie_netcdf_GRISLI_mod.o : Netcdf-routines/sortie_netcdf_GRISLI_mod.f901969 # $(FT) Netcdf-routines/sortie_netcdf_GRISLI_mod.f901970 1971 1972 1973 1974 1975 # Liens1976 1977 1978 #Heino : $(Dim_heino) $(mod_dim_communs) $(mod_communs) $(Liste_HEINO) $(Liste_Netcdf) \1979 # $(routines_communes) $(Liste_BLAS)1980 # $(LK) -o Heino $(Dim_heino) $(mod_dim_communs) $(mod_communs) $(Liste_HEINO) \1981 # $(Liste_Netcdf) \1982 # $(routines_communes) $(Liste_BLAS) $(NCDF_LIB)1983 1984 #Antar-40 : $(Dim_Antar40) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar40) \1985 # $(diagnoshelf) $(Liste_Netcdf) \1986 # $(routines_communes) $(routine_elliptiques)1987 1988 # $(LK) -o ../bin/Antar-40 $(Dim_Antar40) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar40) \1989 # $(diagnoshelf) $(Liste_Netcdf) \1990 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)1991 1992 #Antar15 : $(Dim_Antar15_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) $(Liste_Antar15_CISM) \1993 # $(diagnoshelf) $(Liste_Netcdf) \1994 # $(routines_communes) $(routine_elliptiques)1995 1996 # $(LK) -o ../bin/Antar-15 $(Dim_Antar15_CISM) $(mod_dim_communs) $(mod_communs) $(mod_ell) \1997 # $(Liste_Antar15_CISM) \1998 # $(diagnoshelf) $(Liste_Netcdf) \1999 # $(routines_communes) $(routine_elliptiques) $(NCDF_LIB) $(MKL_LIB)2000 2001 2002 #Antar_old : $(Dim_Antar40) $(mod_dim_communs) $(mod_communs) $(mod_ell_old) \2003 # $(Liste_Antar_old) $(diagnoshelf_old) $(Liste_Netcdf) \2004 # $(routines_communes) $(routine_elliptiques_old)2005 2006 # $(LK) -o ../bin/Antar_old $(Dim_Antar40) $(mod_dim_communs) $(mod_communs) \2007 # $(mod_ell_old) $(Liste_Antar_old) \2008 # $(diagnoshelf_old) $(Liste_Netcdf) \2009 # $(routines_communes) $(routine_elliptiques_old) $(NCDF_LIB) $(MKL_LIB) -
branches/iLoveclim/SOURCES/Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine.f90
r32 r77 157 157 integer :: num_file=22 158 158 integer :: i1,i2,i3 159 integer :: i,j,k ,l159 integer :: i,j,k 160 160 character(len=20) :: name1 161 161 character(len=20) :: name2 … … 385 385 integer :: ifin 386 386 integer :: npr 387 integer :: i ,j,k!< indices de travail387 integer :: i !< indices de travail 388 388 389 389 if (itracebug.eq.1) call tracebug(' Entree dans routine testsort_time_ncdf') … … 671 671 ! ferret conventions 672 672 673 if ( time .le. 0. ) then674 timetmp = -time675 nametmp = 'p_'676 else673 ! if ( time .le. 0. ) then 674 ! timetmp = -time 675 ! nametmp = 'p_' 676 ! else 677 677 timetmp = time 678 678 nametmp = 'f_' 679 endif679 ! endif 680 680 681 681 if (.not.associated(tab)) allocate(tab(nx,ny)) … … 921 921 if (ilemx(i,j)) then ! ile 922 922 tab(i,j)=2 923 else if (fleuvemx(i,j)) then 924 tab(i,j)=5 ! actual grounded streams 923 925 else 924 926 tab(i,j)=1 ! grounded zone -
branches/iLoveclim/SOURCES/New-remplimat/diagno-L2_mod.f90
r4 r77 1 1 !module diagno_L2_mod ! Nouvelle version, compatible remplimat 2008 Cat 2 2 module diagno_mod ! nom pendant les tests 3 3 !$ USE OMP_LIB 4 4 use module3D_phy 5 5 use module_choix … … 86 86 subroutine diagnoshelf ! Resolution numerique des equations diagnostiques 87 87 88 integer :: itest89 88 90 89 if (itracebug.eq.1) call tracebug(' Entree dans diagnoshelf') … … 111 110 call calc_pvi ! calcule les viscosites integrees 112 111 112 !$OMP PARALLEL 113 !$OMP WORKSHARE 113 114 where (flot(:,:).and.(H.gt.1)) ! valeur analytique pour les shelfs 114 115 pvi(:,:) = (4./coef_Sflot/rog)**2/btt(:,:,1,1)/H(:,:) 115 116 end where 116 117 !$OMP END WORKSHARE 118 !$OMP END PARALLEL 117 119 ! avec couplage thermomecanique 118 120 ! write(166,*) ' apres call calc_pvi',itour_pvi … … 179 181 180 182 ! nouvelles vitesses 181 183 !$OMP PARALLEL 184 !$OMP WORKSHARE 182 185 uxbar(:,:)=uxb1(:,:) 183 186 uybar(:,:)=uyb1(:,:) 184 187 !$OMP END WORKSHARE 185 188 186 189 187 190 ! calcul de tobmx et tobmy (frottement basal) apres calcul des vitesses 188 191 ! --------------------------------------------------------------------- 192 !$OMP DO 189 193 do j=1,ny 190 194 do i=1,nx … … 193 197 enddo 194 198 enddo 199 !$OMP END DO 195 200 196 201 ! Mise ne réserve des vitesses flgzmx et flgzmy 202 !$OMP WORKSHARE 197 203 where (flgzmx(:,:)) 198 204 uxflgz(:,:)=uxbar(:,:) … … 206 212 uyflgz(:,:)=0. 207 213 endwhere 208 214 !$OMP END WORKSHARE 215 !$OMP END PARALLEL 209 216 !i=92 210 217 !j=152 … … 239 246 ! Pour les noeuds posés mais ayant un voisin stream ou flottant, on calcule 240 247 ! la viscosité avec stream/shelves 241 242 248 ! le calcul se fait sur les noeuds majeurs 249 250 !$ integer :: rang ,nb_taches 251 !$ logical :: paral 252 253 integer :: t1,t2,ir 254 real :: temps, t_cpu_0, t_cpu_1, t_cpu, norme 255 243 256 if (itracebug.eq.1) call tracebug(' Calc pvi') 257 258 !$OMP PARALLEL PRIVATE(rang,iplus1,jplus1,sf3,sf1,BT2,phiphi,ttau,d02,discr) 259 !$ paral = OMP_IN_PARALLEL() 260 !$ rang=OMP_GET_THREAD_NUM() 261 !$ nb_taches=OMP_GET_NUM_THREADS() 262 263 !$OMP WORKSHARE 244 264 pvi(:,:) = pvimin 245 265 Abar(:,:) = 0. 246 247 266 !$OMP END WORKSHARE 267 268 !$OMP DO 248 269 do j=1,ny 249 270 do i=1,nx … … 323 344 end do 324 345 end do 346 !$OMP END DO 325 347 326 348 ! cas des noeuds fictifs, si l'épaisseur est très petite 327 349 ! pvimin est très petit 328 350 !$OMP WORKSHARE 329 351 where (H(:,:).le.1.) 330 352 pvi(:,:) = pvimin … … 335 357 end where 336 358 359 337 360 debug_3D(:,:,27)=pvi(:,:) 338 361 !$OMP END WORKSHARE 339 362 ! attention run 35 340 363 !-------------------- … … 346 369 347 370 ! calcul de la viscosite integree au milieu des mailles (pvm) 348 371 !$OMP DO 349 372 do i=2,nx 350 373 do j=2,ny … … 356 379 end do 357 380 end do 381 !$OMP END DO 382 !$OMP END PARALLEL 383 358 384 end subroutine calc_pvi 359 385 !------------------------------------------------------------------ … … 380 406 ! -41 -1 Sud -12 381 407 382 383 408 !$OMP PARALLEL 409 !$OMP WORKSHARE 384 410 imx_diag(:,:)=0 385 411 imy_diag(:,:)=0 … … 433 459 imx_diag(1,:)=0 ! hors domaine a cause des mailles alternees 434 460 imy_diag(:,1)=0 ! hors domaine a cause des mailles alternees 461 !$OMP END WORKSHARE 462 !$OMP END PARALLEL 435 463 436 464 end subroutine imx_imy_nx_ny -
branches/iLoveclim/SOURCES/New-remplimat/eq_ellipt_sgbsv_mod-0.2.f90
r4 r77 8 8 9 9 ! declaration des variables 10 10 !$ USE OMP_LIB 11 11 use remplimat_declar ! toutes les routines de ce module connaissent les Tuij.... 12 12 … … 154 154 ! write(6,*) 'sortie ok de sgbsv' 155 155 ! write(6,*)'-----------------------' 156 156 !$OMP PARALLEL 157 !$OMP DO 157 158 do j = ny1,ny2 158 159 do i = nx1,nx2 … … 171 172 end do 172 173 end do 173 174 174 !$OMP END DO 175 !$OMP END PARALLEL 175 176 176 177 else … … 181 182 182 183 else ! nblig=0, pas de passage par sgbsv 184 !$OMP PARALLEL 185 !$OMP WORKSHARE 183 186 uxnew(nx1:nx2,ny1:ny2)=uxprec(nx1:nx2,ny1:ny2) 184 187 uynew(nx1:nx2,ny1:ny2)=uyprec(nx1:nx2,ny1:ny2) 188 !$OMP END WORKSHARE 189 !$OMP END PARALLEL 185 190 end if 186 191 … … 209 214 ! numerotation des lignes 210 215 !-------------------------- 211 216 !$OMP PARALLEL 217 !$OMP WORKSHARE 212 218 ligu_L2(:,:) = -9999 213 219 ligv_L2(:,:) = -9999 214 220 pos_ligu(:,:) = -9999 215 221 pos_ligv(:,:) = -9999 216 222 !$OMP END WORKSHARE 223 !$OMP END PARALLEL 217 224 ! Boucle sur les noeuds avec la dimension la plus grande a l'interieur 218 225 … … 248 255 end do count 249 256 257 250 258 nblig = count_line-1 251 259 … … 253 261 ! calcul de la largeur de bande. depend de la numerotation des lignes 254 262 !-------------------------------------------------------------------- 263 !$OMP PARALLEL 264 !$OMP WORKSHARE 255 265 lu_band(:) = 0 256 266 ll_band(:) = 0 267 !$OMP END WORKSHARE 268 !$OMP END PARALLEL 257 269 258 270 larg_band: do j = ny1,ny2 … … 367 379 ! ecriture de la matrice proprement dite et du vecteur bdr 368 380 !------------------------------------------------------------ 381 !$OMP PARALLEL 382 !$OMP WORKSHARE 369 383 mmat(:,:) = 0. 370 384 bdr(:,:) = 0. 371 372 385 !$OMP END WORKSHARE 386 387 !$OMP DO PRIVATE(ligne,ilmin,ilmax,jlmin,jlmax,colonne) 373 388 ij_loop : do j = ny1,ny2 ! attention, on rempli 2 lignes par 2 lignes (u,v) 374 389 do i = nx1,nx2 … … 481 496 end do 482 497 end do ij_loop 498 !$OMP END DO 499 !$OMP END PARALLEL 483 500 484 501 -
branches/iLoveclim/SOURCES/New-remplimat/remplimat-shelves-tabTu.f90
r4 r77 41 41 !----------------------------------------------------------------------- 42 42 43 !$ USE OMP_LIB 43 44 use module3d_phy 44 45 use remplimat_declar ! les tableaux tuij, .... … … 87 88 !-------------------- 88 89 89 real :: epsilon90 90 real :: dx2=dx*dx ! variable de travail 91 91 real :: beta ! pour le frottement 92 real :: moteur ! pour le frottement93 92 real :: scal ! pour le conditionnement (diagonale=1) 93 94 character(len=80) :: fileout ! pour sortie fichier verification 94 95 95 96 … … 104 105 105 106 !----------------------------- 107 !$OMP PARALLEL 108 !$OMP WORKSHARE 106 109 Tu(:,:,:,:) = 0. ; Tv(:,:,:,:) = 0. ; Su(:,:,:,:) = 0. ; Sv(:,:,:,:) = 0. 107 110 opposx(:,:) = 0. ; opposy(:,:) = 0. … … 117 120 Hmx_oppos(:,:) = Hmx(:,:) 118 121 Hmy_oppos(:,:) = Hmy(:,:) 119 122 !$OMP END WORKSHARE 123 !$OMP END PARALLEL 120 124 121 125 ! calcul de Hmx_oppos et Hmy_oppos dans le cas de fronts … … 164 168 call limit_frotm 165 169 else 170 !$OMP PARALLEL 171 !$OMP WORKSHARE 166 172 frotmx(:,:)= betamx(:,:) 167 173 frotmy(:,:)= betamy(:,:) 174 !$OMP END WORKSHARE 175 !$OMP END PARALLEL 168 176 end if 169 177 … … 233 241 234 242 if (iter_beta.eq.1) then 235 236 237 call write_datfile3(nx,ny,betamx,betamy,beta_centre,'beta-estime.dat')238 239 240 241 243 call calc_beta(Vcol_x, Vcol_y) 244 fileout='beta-estime.dat' 245 call write_datfile3(nx,ny,betamx,betamy,beta_centre,fileout) 246 if (itracebug.eq.1) call tracebug(' remplimat apres calc_beta') 247 iter_beta = 0 ! pour faire un calcul de vitesse le coup d'apres 248 corr_def = .true. 249 goto 888 242 250 243 251 else if ((iter_beta.eq.0).and.(corr_def)) then … … 272 280 ! pour avoir la diagonale=1 a faire imperativement APRES okmat 273 281 !-------------------------------------------------------------- 274 282 !$OMP PARALLEL 283 !$OMP DO PRIVATE(scal) 275 284 do j=ny1,ny2 276 285 do i=nx1,nx2 … … 319 328 end do 320 329 end do 321 330 !$OMP END DO 331 !$OMP END PARALLEL 322 332 323 333 ! mise a identite des noeuds fantomes … … 329 339 330 340 331 332 debug_3d(:,:,35) = opposx(:,:) 333 debug_3d(:,:,36) = opposy(:,:) 341 !debug_3d(:,:,35) = opposx(:,:) 342 !debug_3d(:,:,36) = opposy(:,:) 334 343 335 344 … … 349 358 350 359 ! remise a 0 des noeuds fantomes 351 360 !$OMP PARALLEL 361 !$OMP WORKSHARE 352 362 where ((Hmx(nx1:nx2,ny1:ny2).le.1.).and.(flgzmx(nx1:nx2,ny1:ny2))) 353 363 uxnew(nx1:nx2,ny1:ny2)=0. … … 357 367 uynew(nx1:nx2,ny1:ny2)=0. 358 368 end where 359 369 !$OMP END WORKSHARE 370 !$OMP END PARALLEL 360 371 361 372 ! call graphique_L2(kl,ku,nx1,nx2,ny1,ny2,imx(nx1:nx2,ny1:ny2),imy(nx1:nx2,ny1:ny2)) … … 404 415 405 416 subroutine limit_frotm 417 418 !$USE OMP_LIB 406 419 !------------------------- 407 420 ! limite la valeur de frotmx a betamax … … 411 424 if (itracebug.eq.1) write(Num_tracebug,*)'betamax = ',betamax 412 425 426 !$OMP PARALLEL 427 !$OMP WORKSHARE 413 428 where (flgzmx(:,:)) 414 frotmx(:,:)=min(abs(betamx(:,:)),betamax )429 frotmx(:,:)=min(abs(betamx(:,:)),betamax_2d(:,:)) 415 430 elsewhere 416 431 frotmx(:,:)=0 … … 418 433 419 434 where (flgzmy(:,:)) 420 frotmy(:,:)=min(abs(betamy(:,:)),betamax )435 frotmy(:,:)=min(abs(betamy(:,:)),betamax_2d(:,:)) 421 436 elsewhere 422 437 frotmy(:,:)=0 423 438 end where 439 !$OMP END WORKSHARE 440 !$OMP END PARALLEL 424 441 425 442 end subroutine limit_frotm … … 433 450 434 451 subroutine rempli_Tuij ! appelle tous les cas 452 453 !$ USE OMP_LIB 435 454 436 455 ! imx(i,j)=0 -> ne pas traiter cette vitesse … … 464 483 count_line=1 ! pour numeroter les lignes 465 484 !------------------------------------------------------------------ 466 485 !$OMP PARALLEL 486 !$OMP DO 467 487 lignes_UV: do j=ny1,ny2 468 488 do i=nx1,nx2 … … 470 490 if (i.gt.nx1) then ! Vitesses U 471 491 ligu_L2(i,j)=count_line 492 !$OMP ATOMIC 472 493 count_line=count_line+1 473 494 … … 480 501 481 502 case(1) ! vitesse imposee 482 call vel_U_presc 503 call vel_U_presc(uxprec(i,j),Tu(i,j,0,0),opposx(i,j)) 483 504 484 505 case(2) ! cas general 485 call vel_U_general 506 call vel_U_general(frotmx(i,j),dx2,pvi(i,j),pvi(i-1,j),pvm(i,j),pvm(i,j+1),sdx(i,j),rog,hmx_oppos(i,j), & 507 Tu(i,j,:,:),Tv(i,j,:,:),opposx(i,j)) 486 508 487 509 case(-1) ! bord sud 488 call vel_U_South 510 call vel_U_South(Tu(i,j,:,:),Tv(i,j,:,:),opposx(i,j)) 489 511 490 512 case(-2) ! bord Est 491 call vel_U_East 513 call vel_U_East(pvi(i,j),pvi(i-1,j),rog,H(i-1,j),rowg,slv(i-1,j),B(i-1,j),dx,Tu(i,j,:,:),Tv(i,j,:,:),opposx(i,j)) 492 514 493 515 case(-3) ! bord nord 494 call vel_U_North 516 call vel_U_North(Tu(i,j,:,:),Tv(i,j,:,:),opposx(i,j)) 495 517 496 518 case(-4) ! bord West 497 call vel_U_West 519 call vel_U_West(pvi(i,j),pvi(i-1,j),rog,H(i,j),rowg,slv(i,j),B(i,j),dx,Tu(i,j,:,:),Tv(i,j,:,:),opposx(i,j)) 498 520 499 521 case(-12) ! coin SE 500 call vel_U_SE 522 call vel_U_SE(Tu(i,j,:,:),opposx(i,j)) 501 523 502 524 case(-23) ! coin NE 503 call vel_U_NE 525 call vel_U_NE(Tu(i,j,:,:),opposx(i,j)) 504 526 505 527 case(-34) ! coin NW 506 call vel_U_NW 528 call vel_U_NW(Tu(i,j,:,:),opposx(i,j)) 507 529 508 530 case(-41) ! coin SW 509 call vel_U_SW 531 call vel_U_SW(Tu(i,j,:,:),opposx(i,j)) 510 532 511 533 end select case_imx … … 515 537 516 538 ligv_L2(i,j)=count_line 539 !$OMP ATOMIC 517 540 count_line=count_line+1 518 541 … … 525 548 526 549 case(1) ! vitesse imposee 527 call vel_V_presc 550 call vel_V_presc(uyprec(i,j),Sv(i,j,0,0),opposy(i,j)) 528 551 529 552 case(2) ! cas general 530 call vel_V_general 553 call vel_V_general(frotmy(i,j),dx2,pvi(i,j),pvi(i,j-1),pvm(i,j),pvm(i+1,j),sdy(i,j),rog,hmy_oppos(i,j), & 554 Su(i,j,:,:),Sv(i,j,:,:),opposy(i,j)) 531 555 532 556 case(-1) ! bord sud 533 call vel_V_South 557 call vel_V_South(pvi(i,j),pvi(i,j-1),rog,H(i,j),rowg,slv(i,j),B(i,j),dx,Sv(i,j,:,:),Su(i,j,:,:),opposy(i,j)) 534 558 535 559 case(-2) ! bord Est 536 call vel_V_East 560 call vel_V_East(Sv(i,j,:,:),Su(i,j,:,:),opposy(i,j)) 537 561 538 562 case(-3) ! bord nord 539 call vel_V_North 563 call vel_V_North(pvi(i,j),pvi(i,j-1),rog,H(i-1,j),rowg,slv(i-1,j),B(i-1,j),dx,Sv(i,j,:,:),Su(i,j,:,:),opposy(i,j)) 540 564 541 565 case(-4) ! bord West 542 call vel_V_West 566 call vel_V_West(Sv(i,j,:,:),Su(i,j,:,:),opposy(i,j)) 543 567 544 568 case(-12) ! coin SE 545 call vel_V_SE 569 call vel_V_SE(Sv(i,j,:,:),opposy(i,j)) 546 570 547 571 case(-23) ! coin NE 548 call vel_V_NE 572 call vel_V_NE(Sv(i,j,:,:),opposy(i,j)) 549 573 550 574 case(-34) ! coin NW 551 call vel_V_NW 575 call vel_V_NW(Sv(i,j,:,:),opposy(i,j)) 552 576 553 577 case(-41) ! coin SW 554 578 555 call vel_V_SW 579 call vel_V_SW(Sv(i,j,:,:),opposy(i,j)) 556 580 557 581 end select case_imy … … 559 583 end do 560 584 end do lignes_UV 585 !$OMP END DO 586 !$OMP END PARALLEL 561 587 562 588 end subroutine rempli_Tuij … … 570 596 !------------------------------------------------------------------ 571 597 572 subroutine vel_U_presc ! ! vitesse imposee 573 574 Tu(i,j,0,0)=1. 575 opposx(i,j)=uxprec(i,j) 598 subroutine vel_U_presc(uxprec,Tu,opposx) ! ! vitesse imposee 599 600 implicit none 601 602 real,intent(in) :: uxprec 603 real,intent(out) :: Tu 604 real,intent(out) :: opposx 605 606 Tu=1. 607 opposx=uxprec 576 608 577 609 end subroutine vel_U_presc 578 610 !------------------------------------------------------------------ 579 611 580 subroutine vel_U_general ! cas general 581 582 583 beta=frotmx(i,j)*dx2 ! Terme en u(i,j) 584 585 586 587 Tu(i,j,0,0) = -4.*pvi(i,j)-4.*pvi(i-1,j)- pvm(i,j+1)-pvm(i,j)-beta 588 589 Tu(i,j,-1,0) = 4.*pvi(i-1,j) ! Terme en u(i-1,j) 590 591 Tu(i,j,1,0) = 4.*pvi(i,j) ! Terme en u(i+1,j) 592 593 Tu(i,j,0,-1) = pvm(i,j) ! Terme en u(i,j-1) 594 595 Tu(i,j,0,1) = pvm(i,j+1) ! Terme en u(i,j+1) 596 597 Tv(i,j,0,0) = -2.*pvi(i,j)-pvm(i,j) ! Terme en v(i,j) 598 599 Tv(i,j,-1,0) = 2.*pvi(i-1,j)+pvm(i,j) ! Terme en v(i-1,j) 600 601 Tv(i,j,-1,1) = -2.*pvi(i-1,j)-pvm(i,j+1) ! Terme en v(i-1,j+1) 602 603 Tv(i,j,0,1) = 2.*pvi(i,j)+pvm(i,j+1) ! Terme en v(i,j+1) 604 605 opposx(i,j) = rog*hmx_oppos(i,j)*sdx(i,j)*dx2 ! Terme en opposx(i,j) 612 subroutine vel_U_general(frotmx,dx2,pvi,pvi_imoinsun,pvm,pvm_jplusun,sdx,rog,hmx_oppos,Tu,Tv,opposx) ! cas general 613 614 implicit none 615 616 real,intent(in) :: frotmx 617 real,intent(in) :: dx2 618 real,intent(in) :: pvi 619 real,intent(in) :: pvi_imoinsun 620 real,intent(in) :: pvm 621 real,intent(in) :: pvm_jplusun 622 real,intent(in) :: sdx 623 real,intent(in) :: rog 624 real,intent(in) :: hmx_oppos 625 real,dimension(-1:1,-1:1),intent(inout) :: Tu 626 real,dimension(-1:1,-1:1),intent(inout) :: Tv 627 real,intent(out) :: opposx 628 629 beta=frotmx*dx2 ! Terme en u(i,j) 630 631 Tu(0,0) = -4.*pvi - 4.*pvi_imoinsun - pvm_jplusun - pvm - beta 632 633 Tu(-1,0) = 4.*pvi_imoinsun ! Terme en u(i-1,j) 634 635 Tu(1,0) = 4.*pvi ! Terme en u(i+1,j) 636 637 Tu(0,-1) = pvm ! Terme en u(i,j-1) 638 639 Tu(0,1) = pvm_jplusun ! Terme en u(i,j+1) 640 641 Tv(0,0) = -2.*pvi - pvm ! Terme en v(i,j) 642 643 Tv(-1,0) = 2.*pvi_imoinsun + pvm ! Terme en v(i-1,j) 644 645 Tv(-1,1) = -2.*pvi_imoinsun - pvm_jplusun ! Terme en v(i-1,j+1) 646 647 Tv(0,1) = 2.*pvi + pvm_jplusun ! Terme en v(i,j+1) 648 649 opposx = rog*hmx_oppos*sdx*dx2 ! Terme en opposx(i,j) 606 650 607 651 return … … 611 655 ! voir explications dans vel_U_West 612 656 613 subroutine vel_U_South ! bord sud non cisaillement 614 615 Tu(i,j,0,0) = 1. 616 Tu(i,j,0,1) = -1. 617 Tv(i,j,0,1) = -1. 618 Tv(i,j,-1,1) = 1. 619 opposx(i,j) = 0. 657 subroutine vel_U_South(Tu,Tv,opposx) ! bord sud non cisaillement 658 659 implicit none 660 real,dimension(-1:1,-1:1),intent(inout) :: Tu 661 real,dimension(-1:1,-1:1),intent(inout) :: Tv 662 real, intent(out) :: opposx 663 664 Tu(0,0) = 1. 665 Tu(0,1) = -1. 666 Tv(0,1) = -1. 667 Tv(-1,1) = 1. 668 opposx = 0. 620 669 621 670 return … … 623 672 !------------------------------------------------------------------ 624 673 625 subroutine vel_U_North ! bord nord non cisaillement 626 627 Tu(i,j,0,0) = 1. 628 Tu(i,j,0,-1) = -1. 629 Tv(i,j,0,0) = 1. 630 Tv(i,j,-1,0) = -1. 631 opposx(i,j) = 0. 674 subroutine vel_U_North(Tu,Tv,opposx) ! bord nord non cisaillement 675 676 implicit none 677 real,dimension(-1:1,-1:1),intent(inout) :: Tu 678 real,dimension(-1:1,-1:1),intent(inout) :: Tv 679 real, intent(out) :: opposx 680 681 Tu(0,0) = 1. 682 Tu(0,-1) = -1. 683 Tv(0,0) = 1. 684 Tv(-1,0) = -1. 685 opposx = 0. 632 686 633 687 return … … 636 690 ! voir explications dans vel_U_West 637 691 638 subroutine vel_U_East ! bord Est pression 692 subroutine vel_U_East(pvi,pvi_imoinsun,rog,H_imoinsun,rowg,slv_imoinsun,B_imoinsun,dx,Tu,Tv,opposx) ! bord Est pression 693 694 implicit none 695 real,intent(in) :: pvi 696 real,intent(in) :: pvi_imoinsun 697 real,intent(in) :: rog 698 real,intent(in) :: H_imoinsun 699 real,intent(in) :: rowg 700 real,intent(in) :: slv_imoinsun 701 real,intent(in) :: B_imoinsun 702 real,intent(in) :: dx 703 real,dimension(-1:1,-1:1),intent(inout) :: Tu 704 real,dimension(-1:1,-1:1),intent(inout) :: Tv 705 real, intent(out) :: opposx 639 706 640 Tu( i,j,0,0) = 4.*pvi(i-1,j)641 Tu( i,j,-1,0) = -4.*pvi(i-1,j)642 Tv( i,j,0,1) = 2.*pvi(i,j)643 Tv( i,j,0,0) = -2.*pvi(i,j)644 opposx (i,j) = 0.5*(rog*H(i-1,j)**2-rowg*(max(slv(i-1,j)-B(i-1,j),0.))**2)*dx707 Tu(0,0) = 4.*pvi_imoinsun 708 Tu(-1,0) = -4.*pvi_imoinsun 709 Tv(0,1) = 2.*pvi 710 Tv(0,0) = -2.*pvi 711 opposx = 0.5*(rog*H_imoinsun**2-rowg*(max(slv_imoinsun-B_imoinsun,0.))**2)*dx 645 712 646 713 return … … 648 715 !------------------------------------------------------------------ 649 716 650 subroutine vel_U_West 717 subroutine vel_U_West(pvi,pvi_imoinsun,rog,H,rowg,slv,B,dx,Tu,Tv,opposx) ! bord West pression 651 718 ! tous les coef * -1 719 implicit none 720 real,intent(in) :: pvi 721 real,intent(in) :: pvi_imoinsun 722 real,intent(in) :: rog 723 real,intent(in) :: H 724 real,intent(in) :: rowg 725 real,intent(in) :: slv 726 real,intent(in) :: B 727 real,intent(in) :: dx 728 real,dimension(-1:1,-1:1),intent(inout) :: Tu 729 real,dimension(-1:1,-1:1),intent(inout) :: Tv 730 real, intent(out) :: opposx 731 652 732 653 733 ! Tu(i,j,0,0) = 4.*pvi(i-1,j) 654 734 ! Tu(i,j,1,0) = -4.*pvi(i-1,j) 655 735 656 Tu( i,j,0,0) = 4.*pvi(i,j)! quand le bord est epais, il faut prendre657 Tu( i,j,1,0) = -4.*pvi(i,j)! le noeud du shelf pas celui en H=1736 Tu(0,0) = 4.*pvi ! quand le bord est epais, il faut prendre 737 Tu(1,0) = -4.*pvi ! le noeud du shelf pas celui en H=1 658 738 ! s'il est fin, pas de difference 659 739 … … 661 741 !!$ Tv(i-1,j,-1,1) = -2.*pvi(i-1,j) 662 742 663 Tv( i,j,-1,0) = 2.*pvi(i-1,j)664 Tv( i,j,-1,1) = -2.*pvi(i-1,j)665 opposx (i,j) = -0.5*(rog*H(i,j)**2-rowg*(max(slv(i,j)-B(i,j),0.))**2)*dx743 Tv(-1,0) = 2.*pvi_imoinsun 744 Tv(-1,1) = -2.*pvi_imoinsun 745 opposx = -0.5*(rog*H**2-rowg*(max(slv-B,0.))**2)*dx 666 746 667 747 … … 674 754 !------------------------------------------------------------------ 675 755 676 subroutine vel_V_presc ! vitesse imposee 677 678 Sv(i,j,0,0)=1. 679 opposy(i,j)=uyprec(i,j) 756 subroutine vel_V_presc(uyprec,Sv,opposy) ! vitesse imposee 757 758 implicit none 759 real,intent(in) :: uyprec 760 real,intent(out) :: Sv 761 real,intent(out) :: opposy 762 763 Sv=1. 764 opposy=uyprec 680 765 681 766 return … … 683 768 !------------------------------------------------------------------ 684 769 685 subroutine vel_V_general ! cas general 686 687 688 beta = frotmy(i,j)*dx2 ! Terme en v(i,j) 689 Sv(i,j,0,0) = -4.*pvi(i,j)-4.*pvi(i,j-1)- pvm(i+1,j)-pvm(i,j)-beta 690 691 Sv(i,j,0,-1) = 4.*pvi(i,j-1) ! Terme en v(i,j-1) 692 693 Sv(i,j,0,1) = 4.*pvi(i,j) ! Terme en v(i,j+1) 694 695 Sv(i,j,-1,0) = pvm(i,j) ! Terme en v(i-1,j) 696 697 Sv(i,j,1,0) = pvm(i+1,j) ! Terme en v(i+1,j) 698 699 Su(i,j,0,0) = -2.*pvi(i,j)-pvm(i,j) ! Terme en u(i,j) 700 701 Su(i,j,0,-1) = 2.*pvi(i,j-1)+pvm(i,j) ! Terme en u(i,j-1) 702 703 Su(i,j,1,-1) = -2.*pvi(i,j-1)-pvm(i+1,j) ! Terme en u(i+1,j-1) 704 705 Su(i,j,1,0) = 2.*pvi(i,j)+pvm(i+1,j) ! Terme en u(i+1,j) 706 707 opposy(i,j) = rog*hmy_oppos(i,j)*sdy(i,j)*dx2 ! Terme en opposy(i,j) 770 subroutine vel_V_general(frotmy,dx2,pvi,pvi_jmoinsun,pvm,pvm_iplusun,sdy,rog,hmy_oppos,Su,Sv,opposy)! cas general 771 772 implicit none 773 real,intent(in) :: frotmy 774 real,intent(in) :: dx2 775 real,intent(in) :: pvi 776 real,intent(in) :: pvi_jmoinsun 777 real,intent(in) :: pvm 778 real,intent(in) :: pvm_iplusun 779 real,intent(in) :: sdy 780 real,intent(in) :: rog 781 real,intent(in) :: hmy_oppos 782 real,dimension(-1:1,-1:1),intent(inout) :: Su 783 real,dimension(-1:1,-1:1),intent(inout) :: Sv 784 real,intent(out) :: opposy 785 786 real :: beta 787 788 789 beta = frotmy*dx2 ! Terme en v(i,j) 790 Sv(0,0) = -4.*pvi - 4.*pvi_jmoinsun - pvm_iplusun - pvm-beta 791 792 Sv(0,-1) = 4.*pvi_jmoinsun ! Terme en v(i,j-1) 793 794 Sv(0,1) = 4.*pvi ! Terme en v(i,j+1) 795 796 Sv(-1,0) = pvm ! Terme en v(i-1,j) 797 798 Sv(1,0) = pvm_iplusun ! Terme en v(i+1,j) 799 800 Su(0,0) = -2.*pvi - pvm ! Terme en u(i,j) 801 802 Su(0,-1) = 2.*pvi_jmoinsun + pvm ! Terme en u(i,j-1) 803 804 Su(1,-1) = -2.*pvi_jmoinsun - pvm_iplusun ! Terme en u(i+1,j-1) 805 806 Su(1,0) = 2.*pvi + pvm_iplusun ! Terme en u(i+1,j) 807 808 opposy = rog*hmy_oppos*sdy*dx2 ! Terme en opposy(i,j) 708 809 709 810 return … … 712 813 !------------------------------------------------------------------ 713 814 714 subroutine vel_V_West ! bord West non cisaillement 715 716 Sv(i,j,0,0) = 1. 717 Sv(i,j,1,0) = -1. 718 Su(i,j,1,0) = -1. 719 Su(i,j,1,-1) = 1. 720 opposy(i,j) = 0. 815 subroutine vel_V_West(Sv,Su,opposy) ! bord West non cisaillement 816 817 implicit none 818 real,dimension(-1:1,-1:1),intent(inout) :: Sv 819 real,dimension(-1:1,-1:1),intent(inout) :: Su 820 real,intent(out) :: opposy 821 822 Sv(0,0) = 1. 823 Sv(1,0) = -1. 824 Su(1,0) = -1. 825 Su(1,-1) = 1. 826 opposy = 0. 721 827 722 828 return … … 725 831 726 832 727 subroutine vel_V_East ! bord Est non cisaillement 728 729 Sv(i,j,0,0) = 1. 730 Sv(i,j,-1,0) = -1. 731 Su(i,j,0,0) = 1. 732 Su(i,j,0,-1) = -1. 733 opposy(i,j) = 0. 833 subroutine vel_V_East(Sv,Su,opposy) ! bord Est non cisaillement 834 835 implicit none 836 real,dimension(-1:1,-1:1),intent(inout) :: Sv 837 real,dimension(-1:1,-1:1),intent(inout) :: Su 838 real,intent(out) :: opposy 839 840 Sv(0,0) = 1. 841 Sv(-1,0) = -1. 842 Su(0,0) = 1. 843 Su(0,-1) = -1. 844 opposy = 0. 734 845 735 846 return … … 739 850 ! voir explications dans vel_U_West 740 851 741 subroutine vel_V_North ! bord Nord pression 852 subroutine vel_V_North(pvi,pvi_jmoinsun,rog,H_imoinsun,rowg,slv_imoinsun,B_imoinsun,dx,Sv,Su,opposy) ! bord Nord pression 853 854 implicit none 855 real,intent(in) :: pvi 856 real,intent(in) :: pvi_jmoinsun 857 real,intent(in) :: rog 858 real,intent(in) :: H_imoinsun 859 real,intent(in) :: rowg 860 real,intent(in) :: slv_imoinsun 861 real,intent(in) :: B_imoinsun 862 real,intent(in) :: dx 863 real,dimension(-1:1,-1:1),intent(inout) :: Sv 864 real,dimension(-1:1,-1:1),intent(inout) :: Su 865 real,intent(out) :: opposy 742 866 743 Sv( i,j,0,0) = 4.*pvi(i,j-1)744 Sv( i,j,0,-1) = -4.*pvi(i,j-1)745 Su( i,j,1,0) = 2.*pvi(i,j)746 Su( i,j,0,0) = -2.*pvi(i,j)747 opposy (i,j) = 0.5*(rog*H(i-1,j)**2-rowg*(max(slv(i-1,j)-B(i-1,j),0.))**2)*dx867 Sv(0,0) = 4.*pvi_jmoinsun 868 Sv(0,-1) = -4.*pvi_jmoinsun 869 Su(1,0) = 2.*pvi 870 Su(0,0) = -2.*pvi 871 opposy = 0.5*(rog*H_imoinsun**2-rowg*(max(slv_imoinsun-B_imoinsun,0.))**2)*dx 748 872 749 873 return … … 752 876 ! voir explications dans vel_U_West 753 877 754 subroutine vel_V_South 878 subroutine vel_V_South(pvi,pvi_jmoinsun,rog,H,rowg,slv,B,dx,Sv,Su,opposy) ! bord sud pression 755 879 ! tous les coef * -1 756 757 Sv(i,j,0,0) = 4.*pvi(i,j) 758 Sv(i,j,0,1) =-4.*pvi(i,j) 759 Su(i,j,0,-1) = 2.*pvi(i,j-1) 760 Su(i,j,1,-1) =-2.*pvi(i,j-1) 761 opposy(i,j) = -0.5*(rog*H(i,j)**2-rowg*(max(slv(i,j)-B(i,j),0.))**2)*dx 880 implicit none 881 real,intent(in) :: pvi 882 real,intent(in) :: pvi_jmoinsun 883 real,intent(in) :: rog 884 real,intent(in) :: H 885 real,intent(in) :: rowg 886 real,intent(in) :: slv 887 real,intent(in) :: B 888 real,intent(in) :: dx 889 real,dimension(-1:1,-1:1),intent(inout) :: Sv 890 real,dimension(-1:1,-1:1),intent(inout) :: Su 891 real,intent(out) :: opposy 892 893 Sv(0,0) = 4.*pvi 894 Sv(0,1) =-4.*pvi 895 Su(0,-1) = 2.*pvi_jmoinsun 896 Su(1,-1) =-2.*pvi_jmoinsun 897 opposy = -0.5*(rog*H**2-rowg*(max(slv-B,0.))**2)*dx 762 898 763 899 return … … 780 916 !Coin SE 781 917 !---------- 782 subroutine vel_U_SE 783 784 Tu(i,j,0,0) = 1. !*pvi(i,j) 785 Tu(i,j,0,1) = -1. !*pvi(i,j) 786 opposx(i,j) = 0. 918 subroutine vel_U_SE(Tu,opposx) 919 920 implicit none 921 real,dimension(-1:1,-1:1),intent(inout) :: Tu 922 real,intent(out) :: opposx 923 924 Tu(0,0) = 1. !*pvi(i,j) 925 Tu(0,1) = -1. !*pvi(i,j) 926 opposx = 0. 787 927 788 928 return … … 790 930 !------------------------------------------------------------------ 791 931 792 subroutine vel_V_SE 793 794 Sv(i,j,0,0) = 1. !*pvi(i,j) 795 Sv(i,j,-1,0)= -1. !*pvi(i,j) 796 opposy(i,j) = 0. 932 subroutine vel_V_SE(Sv,opposy) 933 934 implicit none 935 real,dimension(-1:1,-1:1),intent(inout) :: Sv 936 real,intent(out) :: opposy 937 938 Sv(0,0) = 1. !*pvi(i,j) 939 Sv(-1,0)= -1. !*pvi(i,j) 940 opposy = 0. 797 941 798 942 return … … 803 947 !Coin SW 804 948 !---------- 805 subroutine vel_U_SW 806 807 Tu(i,j,0,0) = 1. ! *pvi(i,j) 808 Tu(i,j,0,1) = -1. ! *pvi(i,j) 809 opposx(i,j) = 0. 949 subroutine vel_U_SW(Tu,opposx) 950 951 implicit none 952 real,dimension(-1:1,-1:1),intent(inout) :: Tu 953 real,intent(out) :: opposx 954 955 Tu(0,0) = 1. ! *pvi(i,j) 956 Tu(0,1) = -1. ! *pvi(i,j) 957 opposx = 0. 810 958 811 959 return … … 813 961 !------------------------------------------------------------------ 814 962 815 subroutine vel_V_SW 816 817 Sv(i,j,0,0) = 1. !*pvi(i,j) 818 Sv(i,j,1,0) = -1. !*pvi(i,j) 819 opposy(i,j) = 0. 963 subroutine vel_V_SW(Sv,opposy) 964 965 implicit none 966 real,dimension(-1:1,-1:1),intent(inout) :: Sv 967 real,intent(out) :: opposy 968 969 Sv(0,0) = 1. !*pvi(i,j) 970 Sv(1,0) = -1. !*pvi(i,j) 971 opposy = 0. 820 972 821 973 return … … 825 977 !Coin NE 826 978 !---------- 827 subroutine vel_U_NE 828 829 Tu(i,j,0,0) = 1. ! *pvi(i,j) 830 Tu(i,j,0,-1) = -1. ! *pvi(i,j) 831 opposx(i,j) = 0. 979 subroutine vel_U_NE(Tu,opposx) 980 981 implicit none 982 real,dimension(-1:1,-1:1),intent(inout) :: Tu 983 real,intent(out) :: opposx 984 985 Tu(0,0) = 1. ! *pvi(i,j) 986 Tu(0,-1) = -1. ! *pvi(i,j) 987 opposx = 0. 832 988 833 989 return … … 835 991 !------------------------------------------------------------------ 836 992 837 subroutine vel_V_NE 838 839 Sv(i,j,0,0) = 1. ! *pvi(i,j) 840 Sv(i,j,-1,0) = -1. ! *pvi(i,j) 841 opposy(i,j) = 0. 993 subroutine vel_V_NE(Sv,opposy) 994 995 implicit none 996 real,dimension(-1:1,-1:1),intent(inout) :: Sv 997 real,intent(out) :: opposy 998 999 Sv(0,0) = 1. ! *pvi(i,j) 1000 Sv(-1,0) = -1. ! *pvi(i,j) 1001 opposy = 0. 842 1002 843 1003 return … … 847 1007 !Coin NW 848 1008 !---------- 849 subroutine vel_U_NW 850 851 Tu(i,j,0,0) = 1. ! *pvi(i,j) 852 Tu(i,j,0,-1) = -1. ! *pvi(i,j) 853 opposx(i,j) = 0. 1009 subroutine vel_U_NW(Tu,opposx) 1010 1011 implicit none 1012 real,dimension(-1:1,-1:1),intent(inout) :: Tu 1013 real,intent(out) :: opposx 1014 1015 Tu(0,0) = 1. ! *pvi(i,j) 1016 Tu(0,-1) = -1. ! *pvi(i,j) 1017 opposx = 0. 854 1018 855 1019 return … … 857 1021 !------------------------------------------------------------------ 858 1022 859 subroutine vel_V_NW 860 861 Sv(i,j,0,0) = 1. !*pvi(i,j) 862 Sv(i,j,1,0) = -1. !*pvi(i,j) 863 opposy(i,j) = 0. 1023 subroutine vel_V_NW(Sv,opposy) 1024 1025 implicit none 1026 real,dimension(-1:1,-1:1),intent(inout) :: Sv 1027 real,intent(out) :: opposy 1028 1029 Sv(0,0) = 1. !*pvi(i,j) 1030 Sv(1,0) = -1. !*pvi(i,j) 1031 opposy = 0. 864 1032 865 1033 return … … 875 1043 subroutine Mu_Mv 876 1044 1045 !$ USE OMP_LIB 877 1046 !--------------------------------------------------------- 878 1047 ! Pour déterminer Mu, Mv, Nu, Nv les colonnes de L2 … … 882 1051 ! pourrait être dans un autre fichier 883 1052 1053 implicit none 1054 884 1055 if (itracebug.eq.1) call tracebug(' Mu_Mv') 885 1056 1057 !$OMP PARALLEL 1058 !$OMP DO PRIVATE(ilmin,ilmax,jlmin,jlmax) 886 1059 Col_U: do j=ny1,ny2 ! balaye tous les noeuds U 887 1060 do i=nx1+1,nx2 … … 909 1082 end do 910 1083 end do Col_U 911 1084 !$OMP END DO 1085 1086 !$OMP DO PRIVATE(ilmin,ilmax,jlmin,jlmax) 912 1087 Col_V: do j=ny1+1,ny2 ! balaye tous les noeuds V 913 1088 do i=nx1,nx2 … … 934 1109 end do 935 1110 end do Col_V 1111 !$OMP END DO 1112 !$OMP END PARALLEL 936 1113 937 1114 return … … 942 1119 subroutine okmat0 943 1120 1121 !$ USE OMP_LIB 944 1122 ! pourrais être dans un autre fichier avec un appel (nx1,nx2,ny1,ny2) 945 1123 … … 949 1127 ! et qui ne dépendent d'aucun noeud (ligne Tu,Tv nulle sauf diagonale) 950 1128 951 1129 implicit none 952 1130 953 1131 ! tableaux de travail … … 969 1147 pvi_ghost=40.*pvimin 970 1148 !pvi_ghost=10.*pvimin ! condition trop faible : pas de ghost 971 1149 !$OMP PARALLEL 1150 !$OMP WORKSHARE 972 1151 ok_umat(:,:) =.false. 973 1152 ok_vmat(:,:) =.false. 974 1153 ghost_x(:,:) =.false. 975 1154 ghost_y(:,:) =.false. 976 977 1155 !$OMP END WORKSHARE 1156 1157 !$OMP DO PRIVATE(Mloc,Nloc,Tuloc,Tvloc,Suloc,Svloc) 978 1158 do j=ny1,ny2 979 1159 do i=nx1,nx2 … … 1072 1252 end do 1073 1253 end do 1074 1254 !$OMP END DO 1075 1255 1076 1256 ! on enleve les lignes 1 decalees 1257 !$OMP WORKSHARE 1077 1258 ok_umat(1,:)=.false. 1078 1259 ok_vmat(:,1)=.false. 1260 !$OMP END WORKSHARE 1261 !$OMP END PARALLEL 1079 1262 1080 1263 ! sortie Netcdf pour verifier ok_umat 1081 where (ok_umat(:,:))1082 debug_3D(:,:,39)=11083 elsewhere1084 debug_3D(:,:,39)=01085 end where1086 1087 where (ok_vmat(:,:))1088 debug_3D(:,:,40)=11089 elsewhere1090 debug_3D(:,:,40)=01091 end where1092 1093 ! sortie Netcdf pour verifier ghost1094 where (ghost_x(:,:))1095 debug_3D(:,:,41)=11096 elsewhere1097 debug_3D(:,:,41)=01098 1099 end where1100 1101 where (ghost_y(:,:))1102 debug_3D(:,:,42)=11103 elsewhere1104 debug_3D(:,:,42)=01105 end where1264 !~ where (ok_umat(:,:)) 1265 !~ debug_3D(:,:,39)=1 1266 !~ elsewhere 1267 !~ debug_3D(:,:,39)=0 1268 !~ end where 1269 !~ 1270 !~ where (ok_vmat(:,:)) 1271 !~ debug_3D(:,:,40)=1 1272 !~ elsewhere 1273 !~ debug_3D(:,:,40)=0 1274 !~ end where 1275 !~ 1276 !~ ! sortie Netcdf pour verifier ghost 1277 !~ where (ghost_x(:,:)) 1278 !~ debug_3D(:,:,41)=1 1279 !~ elsewhere 1280 !~ debug_3D(:,:,41)=0 1281 !~ 1282 !~ end where 1283 !~ 1284 !~ where (ghost_y(:,:)) 1285 !~ debug_3D(:,:,42)=1 1286 !~ elsewhere 1287 !~ debug_3D(:,:,42)=0 1288 !~ end where 1106 1289 1107 1290 if (itracebug.eq.1) call tracebug(' Sortie Okmat') … … 1111 1294 !-------------------------------------------------------------------------------------- 1112 1295 subroutine ghost_identite ! mise a identite des noeuds fantomes 1113 1296 !$ USE OMP_LIB 1297 1298 implicit none 1299 1300 !$OMP PARALLEL 1301 !$OMP DO 1114 1302 do j=ny1,ny2 1115 1303 do i=nx1,nx2 … … 1132 1320 end do 1133 1321 end do 1322 !$OMP END DO 1323 !$OMP END PARALLEL 1134 1324 1135 1325 return … … 1138 1328 1139 1329 subroutine ghost_remove ! met a 0 les Tuij ... qui corresponde a des ghost 1140 1330 !$ USE OMP_LIB 1331 1332 implicit none 1333 1334 !$OMP PARALLEL 1335 !$OMP DO PRIVATE(ilmin,ilmax,jlmin,jlmax) 1141 1336 do j=ny1,ny2 1142 1337 do i=nx1,nx2 1143 1338 1144 1339 !u_ghost: if (ok_umat(i,j)) then 1145 1340 1146 1341 1147 ilmin=max(-1,nx1+1-i) ! pour avoir i+il entre nx1+1 et nx2 1148 ilmax=min(1,nx2-i) 1149 1150 jlmin=max(-1,ny1-j) ! pour avoir j+jl entre ny1 et ny2 1151 jlmax=min(1,ny2-j) 1152 1153 1154 1155 do jl = jlmin , jlmax ! balaye tous les coefficients d'un noeud U de -1 a 1 1156 do il = ilmin , ilmax ! de -1 a 1 1157 1158 if (ghost_x(i+il,j+jl)) then 1159 Tu(i,j,il,jl)=0. 1160 Su(i,j,il,jl)=0. 1161 end if 1162 1163 end do 1164 end do 1342 ilmin=max(-1,nx1+1-i) ! pour avoir i+il entre nx1+1 et nx2 1343 ilmax=min(1,nx2-i) 1344 1345 jlmin=max(-1,ny1-j) ! pour avoir j+jl entre ny1 et ny2 1346 jlmax=min(1,ny2-j) 1347 1348 do jl = jlmin , jlmax ! balaye tous les coefficients d'un noeud U de -1 a 1 1349 do il = ilmin , ilmax ! de -1 a 1 1350 if (ghost_x(i+il,j+jl)) then 1351 Tu(i,j,il,jl)=0. 1352 Su(i,j,il,jl)=0. 1353 end if 1354 end do 1355 end do 1165 1356 ! end if u_ghost 1166 1357 1167 1358 !v_ghost: if (ok_vmat(i,j)) then 1168 1359 1169 ilmin=max(-1,nx1-i) ! pour avoir i+il entre nx1 et nx2 1170 ilmax=min(1,nx2-i) 1171 1172 jlmin=max(-1,ny1+1-j) ! pour avoir j+jl entre ny1+1 et ny2 1173 jlmax=min(1,ny2-j) 1174 1175 do jl = jlmin , jlmax ! balaye tous les coefficients d'un noeud U de -1 a 1 1176 do il = ilmin , ilmax ! de -1 a 1 1177 if (ghost_y(i+il,j+jl)) then 1178 Tv(i,j,il,jl)=0. 1179 Sv(i,j,il,jl)=0. 1180 end if 1181 end do 1182 end do 1183 1360 ilmin=max(-1,nx1-i) ! pour avoir i+il entre nx1 et nx2 1361 ilmax=min(1,nx2-i) 1362 1363 jlmin=max(-1,ny1+1-j) ! pour avoir j+jl entre ny1+1 et ny2 1364 jlmax=min(1,ny2-j) 1365 1366 do jl = jlmin , jlmax ! balaye tous les coefficients d'un noeud U de -1 a 1 1367 do il = ilmin , ilmax ! de -1 a 1 1368 if (ghost_y(i+il,j+jl)) then 1369 Tv(i,j,il,jl)=0. 1370 Sv(i,j,il,jl)=0. 1371 end if 1372 end do 1373 end do 1184 1374 ! end if v_ghost 1185 1186 end do 1187 end do 1188 end subroutine ghost_remove 1375 end do 1376 end do 1377 !$OMP END DO 1378 !$OMP END PARALLEL 1379 end subroutine ghost_remove 1189 1380 !---------------------------------------------------------------------------------------- 1190 1381 subroutine calc_beta(uxgiven,uygiven) ! calcule betamx et betamy 1191 1382 !$USE OMP_LIB ! a partir du champ de vitesse 1192 1383 ! uxprec, uyprec 1193 1384 implicit none … … 1198 1389 real :: betamin = 10. ! minimum value on grounded point (in Pa an /m) 1199 1390 1200 debug_3D(:,:,69)=uxgiven(:,:)1201 debug_3D(:,:,70)=uygiven(:,:)1391 !debug_3D(:,:,69)=uxgiven(:,:) 1392 !debug_3D(:,:,70)=uygiven(:,:) 1202 1393 1203 1394 1204 1395 if (itracebug.eq.1) call tracebug(' Subroutine calc_beta') 1205 1396 1397 !$OMP PARALLEL 1398 !$OMP DO 1206 1399 do j=ny1+1,ny2-1 1207 1400 do i=nx1+1,nx2-1 … … 1216 1409 +Tv(i,j,il,jl)*uygiven(i+il,j+jl)) 1217 1410 1218 debug_3D(i,j,82)=debug_3D(i,j,82) + (Tu(i,j,il,jl)*uxgiven(i+il,j+jl) &1219 +Tv(i,j,il,jl)*uygiven(i+il,j+jl))1411 ! debug_3D(i,j,82)=debug_3D(i,j,82) + (Tu(i,j,il,jl)*uxgiven(i+il,j+jl) & 1412 ! +Tv(i,j,il,jl)*uygiven(i+il,j+jl)) 1220 1413 1221 1414 end do 1222 1415 end do 1223 1416 1224 debug_3D(i,j,82)=debug_3D(i,j,82)/dx/dx ! longitudinal stress computed from velocities1417 ! debug_3D(i,j,82)=debug_3D(i,j,82)/dx/dx ! longitudinal stress computed from velocities 1225 1418 1226 1419 … … 1248 1441 1249 1442 betamy(i,j)=-opposy(i,j) 1250 debug_3D(i,j,36) = opposy(i,j)/dx/dx ! driving stress ou pression hydrostatique (Pa)1443 ! debug_3D(i,j,36) = opposy(i,j)/dx/dx ! driving stress ou pression hydrostatique (Pa) 1251 1444 do jl=-1,1 1252 1445 do il=-1,1 … … 1255 1448 +Sv(i,j,il,jl)*uygiven(i+il,j+jl)) 1256 1449 1257 debug_3D(i,j,83)=debug_3D(i,j,83) + (Su(i,j,il,jl)*uxgiven(i+il,j+jl) &1258 +Sv(i,j,il,jl)*uygiven(i+il,j+jl))1450 ! debug_3D(i,j,83)=debug_3D(i,j,83) + (Su(i,j,il,jl)*uxgiven(i+il,j+jl) & 1451 ! +Sv(i,j,il,jl)*uygiven(i+il,j+jl)) 1259 1452 1260 1453 … … 1262 1455 end do 1263 1456 1264 debug_3D(i,j,83)=debug_3D(i,j,83) /dx/dx ! longitudinal stress computed from velocities1457 ! debug_3D(i,j,83)=debug_3D(i,j,83) /dx/dx ! longitudinal stress computed from velocities 1265 1458 1266 1459 ! fonctionne même quand frotmx n'est pas nul … … 1285 1478 end do 1286 1479 end do 1287 1480 !$OMP END DO 1481 !$OMP END PARALLEL 1288 1482 ! loop to spread negative beta on the neighbours 1289 1483 … … 1304 1498 1305 1499 ! average 1306 beta_centre(:,:)=0. 1307 do j=2,ny-1 1308 do i=2,nx-1 1309 beta_centre(i,j) = ((betamx(i,j)+betamx(i+1,j)) & 1310 + (betamy(i,j)+betamy(i,j+1)))*0.25 1311 end do 1312 end do 1313 1500 !$OMP PARALLEL 1501 !$OMP WORKSHARE 1502 beta_centre(:,:)=0. 1503 !$OMP END WORKSHARE 1504 !$OMP DO 1505 do j=2,ny-1 1506 do i=2,nx-1 1507 beta_centre(i,j) = ((betamx(i,j)+betamx(i+1,j)) & 1508 + (betamy(i,j)+betamy(i,j+1)))*0.25 1509 end do 1510 end do 1511 !$OMP END DO 1512 !$OMP END PARALLEL 1314 1513 1315 1514 -
branches/iLoveclim/SOURCES/Recul_force_grounding_line/toy_retreat_mod.f90
r22 r77 115 115 use declar_toy_retreat 116 116 implicit none 117 integer :: som_voisins !< pour des tests117 ! integer :: som_voisins !< pour des tests 118 118 119 119 … … 637 637 implicit none 638 638 639 integer :: som_voisins !< pour des tests639 ! integer :: som_voisins !< pour des tests 640 640 real :: Hf !< Hf = 0 si socle > 0 sinon H_float 641 641 real :: dyy ! variable de travail longueur de la maille en diagonale … … 752 752 implicit none 753 753 754 integer :: som_voisins !< pour des tests754 ! integer :: som_voisins !< pour des tests 755 755 756 756 ! les nouveaux points a traiter … … 873 873 integer :: num_job ! numero du job 874 874 integer :: lenrun ! longueur du run name 875 integer :: lenb ! longueur du nom de fichier876 integer :: pos ! position d'un sous_string875 !integer :: lenb ! longueur du nom de fichier 876 !integer :: pos ! position d'un sous_string 877 877 878 878 real*8, dimension(:,:), pointer :: tab !< tableau 2d real ecrit dans le fichier 879 879 character(len=4) :: char_num ! pour la lecture 880 880 character(len=80) :: file_B_test !< file name of the bedrock map to test topo instability 881 character(len=80) :: file_voisin !< file name of the bedrock map min or max to test topo instability881 !character(len=80) :: file_voisin !< file name of the bedrock map min or max to test topo instability 882 882 883 883 … … 1445 1445 integer,intent(in) :: ii,jj ! indice du point considere 1446 1446 1447 real :: dH_x ! variable de travail1448 real :: dH_y ! variable de travail1447 !real :: dH_x ! variable de travail 1448 !real :: dH_y ! variable de travail 1449 1449 1450 1450 DelHdt_sanity(ii,jj) = 5000. -
branches/iLoveclim/SOURCES/Temperature-routines/Qprod_icetemp.f90
r24 r77 17 17 18 18 use Icetemp_declar 19 !$ USE OMP_LIB 20 19 21 20 22 implicit none … … 41 43 real, dimension(Nx,Ny) :: Tox !< Contraintes Sur Maille Mx 42 44 real, dimension(Nx,Ny) :: Toy !< Contraintes Sur Maille Mx 45 real :: Chalk_1 !< Utilise Pour Le Calcul De Chalk : Glace Posée 46 real :: Chalk_2 !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice 43 47 44 48 … … 52 56 ! Q_prod_demi(T_m%T,T_m%Tpmp,Deform_m%Tobmx,Deform_m%Tobmy,Geom_m%H,Geom_m%Hmx,Geom_m%Hmy,mask_flot_m%Flot,mask_flot_m%Flotmx,mask_flot_m%Flotmy,mask_flot_m%Flgzmx ,mask_flot_m%Flgzmy,Geom_m%Slop_x,Geom_m%Slop_y,Ice_flow_m%Ddx,Ice_flow_m%Ddy,& 53 57 ! Ice_flow_m%Ddbx,Ice_flow_m%Ddby,Deform_m%Epsxx,Deform_m%Epsyy,Deform_m%Epsxy,mask_flot_m%Gzmx,mask_flot_m%Gzmy,Deform_m%Btt,Ice_flow_m%Uxbar,Ice_flow_m%Uybar,therm_var_m%Phid,Deform_m%Glen,Deform_m%Visc) 54 55 do K=2,Nz 56 do J=2,Ny-1 57 do I=2,Nx-1 58 59 60 61 !$OMP PARALLEL PRIVATE(chalk_1,chalk_2) 62 !$OMP DO COLLAPSE(2) 63 do K=2,Nz 64 do J=2,Ny-1 65 do I=2,Nx-1 58 66 59 67 ! Calcul De La Chaleur De Deformation Selon Xx Yy Zz Et Xy … … 80 88 end do 81 89 end do 82 end do 90 ! !$ i_min=min(i_min,j) 91 ! !$ i_max=max(i_max,j) 92 end do 93 !$OMP END DO NOWAIT 94 ! !$ print*,'nb_taches = ', nb_taches 95 ! !$ print*,"Rang : ",rang," i_min : ",i_min," i_max : ",i_max 83 96 84 97 ! Partie Sia Calcul De La Chaleur Produite Sur Chaque Demi Maille 85 do L=1,size(Btt,4) !N1poly,N2poly 86 do J=2,Ny 98 !$OMP DO COLLAPSE(2) 99 do L=1,size(Btt,4) !N1poly,N2poly 100 do J=2,Ny 87 101 do I=2,Nx 88 102 ! Ffx A 3 Dimensions ! … … 92 106 end do 93 107 end do 94 95 do L=1,size(Btt,4)!N1poly,N2poly 96 do K=2,Nz 97 do J=2,Ny 98 do I=2,Nx 99 if ((.not.Flotmx(I,J)).and.(.not.Gzmx(I,J))) then 100 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !& 108 !$OMP END DO 109 110 !$OMP DO COLLAPSE(2) 111 do K=2,Nz 112 do J=2,Ny 113 do I=2,Nx 114 do L=1,size(Btt,4)!N1poly,N2poly 115 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then ! grounded et slowssa 116 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !& 101 117 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 102 118 103 else if (Gzmx(I,J)) then ! Ice Streams104 105 106 107 108 if ((.not.Flotmy(I,J)).and.(.not.Gzmy(I,J))) then 109 119 else if (fleuvemx(I,J)) then ! Ice Streams 120 Chalx(I,J,K,L)=0. 121 else ! Ice Shelves 122 Chalx(I,J,K,L)=0. 123 endif 124 if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then ! grounded et slowssa 125 Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*Ffy(I,J,L) !& 110 126 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 111 else if (Gzmy(I,J)) then ! Ice Streams 112 Chaly(I,J,K,L)=0. 113 114 else ! Ice Shelves 115 Chaly(I,J,K,L)=0. 116 endif 117 118 end do 119 end do 120 end do 121 end do 127 else if (fleuvemy(I,J)) then ! Ice Streams 128 Chaly(I,J,K,L)=0. 129 else ! Ice Shelves 130 Chaly(I,J,K,L)=0. 131 endif 132 133 end do 134 end do 135 end do 136 end do 137 !$OMP END DO 138 122 139 123 140 ! Nouvelle Formulation De Chaldef_maj(I,J,K), Le 4 Vient Des Moyennes … … 126 143 ! Ancienne Formulation Chal=(Ro*G*H(I,J))**4*(Sx2+Sy2)*(Sx*Sx+Sy*Sy) 127 144 128 do K=2,Nz129 do J=1,Ny-1130 do I=1,Nx-1131 145 !$OMP DO COLLAPSE(2) 146 do K=2,Nz 147 do J=1,Ny-1 148 do I=1,Nx-1 132 149 ! Modif Christophe Mars 2000 : Chalx Et Chaly Sont A 4 Dim 133 150 Chaldef_maj(I,J,K)= 0. … … 153 170 end do 154 171 end do 172 !$OMP END DO NOWAIT 173 155 174 ! Chaleur Produite A La Base Par Le Glissement 175 !$OMP DO 156 176 do J=2,Ny 157 177 do I=2,Nx … … 169 189 endif 170 190 171 end do 172 end do 173 191 end do 192 end do 193 !$OMP END DO 194 174 195 ! Boundary Condition Ice-Rock Interface 175 196 K=Nz 176 197 198 !$OMP DO 177 199 do J=2,Ny-1 178 200 do I=2,Nx-1 … … 228 250 end do 229 251 end do 230 252 !$OMP END DO 253 !$OMP END PARALLEL 254 231 255 232 256 case (2) ! Q_prod_centre : Calcul Avec La Somme Des Carres … … 284 308 do J=2,Ny 285 309 do I=2,Nx 286 if ((.not.Flotmx(I,J)).and.(.not. Gzmx(I,J))) then310 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then 287 311 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !& 288 312 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 289 313 290 else if ( Gzmx(I,J)) then ! Ice Streams314 else if (fleuvemx(I,J)) then ! Ice Streams 291 315 Chalx(I,J,K,L)=0. 292 316 … … 296 320 endif 297 321 298 if ((.not.Flotmy(I,J)).and.(.not. Gzmy(I,J))) then322 if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then 299 323 Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*Ffy(I,J,L) !& 300 324 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 301 325 302 else if ( Gzmy(I,J)) then ! Ice Streams326 else if (fleuvemy(I,J)) then ! Ice Streams 303 327 Chaly(I,J,K,L)=0. 304 328 … … 469 493 do J=2,Ny 470 494 do I=2,Nx 471 if ((.not.Flotmx(I,J)).and.(.not. Gzmx(I,J))) then495 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then 472 496 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*ddx(I,J,L) 473 497 474 else if ( Gzmx(I,J)) then ! Ice Streams498 else if (fleuvemx(I,J)) then ! Ice Streams 475 499 Chalx(I,J,K,L)=0. 476 500 … … 480 504 endif 481 505 482 if ((.not.Flotmy(I,J)).and.(.not. Gzmy(I,J))) then506 if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then 483 507 Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*ddy(I,J,L) 484 508 485 else if ( Gzmy(I,J)) then ! Ice Streams509 else if (fleuvemy(I,J)) then ! Ice Streams 486 510 Chaly(I,J,K,L)=0. 487 511 … … 905 929 906 930 end select 931 907 932 end subroutine Qprod_ice -
branches/iLoveclim/SOURCES/Temperature-routines/advec_icetemp.f90
r24 r77 14 14 !> 15 15 16 Subroutine Advec_icetemp(Ii,Jj,Prodq_m,Cro_m,Advecx_m,Advecy_m,Advec_m,Ct_m) 16 Subroutine Advec_icetemp(Nz,Nzm,Nn,Prodq_m,Cro_m,Advecx_m,Advecy_m,Advec_m,Ct_m,Iadvec_w,Iadvec_e,Iadvec_s,Iadvec_n, & 17 Uxij,Uxi_plus_un,Uyij,Uyj_plus_un,Tij,Ti_moins_un,Ti_plus_un,Tj_moins_un,Tj_plus_un,Hij,Tsij,Aa,Bb,Cc,Rr, & 18 Dx11,Dou,DTT,Dee,Uzrij,Dttdx) 17 19 18 use icetemp_declar20 ! use icetemp_declar 19 21 20 22 Implicit None 21 23 !< Arguments 22 Integer, Intent(In) :: Ii,Jj !< Indice Selon X Et Y 23 Real, Dimension(Nz), Intent(In) :: Prodq_m !< Tableau 1d Vert. heat production 24 Real, Dimension(Nz), Intent(In) :: Cro_m !< Tableau 1d Vert. heat capcity 25 Real, Dimension(Nz), Intent(Inout):: Advecx_m !< Advection selon x 26 Real, Dimension(Nz), Intent(Inout):: Advecy_m !< Advection selon y 27 Real, Dimension(Nz), Intent(Inout):: Advec_m !< Advection total 28 Real, Dimension(Nz), Intent(In) :: Ct_m !< Tableau 1d Vert. thermal cond. 24 Integer, intent(in) :: Nz,Nzm,Nn !< Taille des tableaux 25 Real, Dimension(Nz), intent(in) :: Prodq_m !< Tableau 1d Vert. heat production 26 Real, Dimension(Nz), intent(in) :: Cro_m !< Tableau 1d Vert. heat capcity 27 Real, Dimension(Nz), intent(inout):: Advecx_m !< Advection selon x 28 Real, Dimension(Nz), intent(inout):: Advecy_m !< Advection selon y 29 Real, Dimension(Nz), intent(inout):: Advec_m !< Advection total 30 Real, Dimension(Nz), intent(in) :: Ct_m !< Tableau 1d Vert. thermal cond. 31 32 Integer, intent(in) :: Iadvec_w,Iadvec_e,Iadvec_s,Iadvec_n 33 real, dimension(Nz), Intent(in) :: Uxij, Uxi_plus_un 34 real, dimension(Nz), Intent(in) :: Uyij, Uyj_plus_un 35 real, dimension(Nz+Nzm), Intent(inout) :: Tij 36 real, dimension(Nz+Nzm), Intent(in) :: Ti_moins_un,Ti_plus_un,Tj_moins_un,Tj_plus_un 37 real, intent(in) :: Hij 38 real,intent(in) :: Tsij 39 Real,Dimension(Nn),intent(inout) :: Aa !< Work Arrays For Tridiag !Dim Nn 40 Real,Dimension(Nn),intent(inout) :: Bb !< Work Arrays For Tridiag !Dim Nn 41 Real,Dimension(Nn),intent(inout) :: Cc !< Work Arrays For Tridiag !Dim Nn 42 Real,Dimension(Nn),intent(inout) :: Rr !< Work Arrays For Tridiag !Dim Nn 43 Real, intent(in) :: Dx11 44 Real, intent(inout) :: Dou 45 real, intent(in) :: DTT 46 real, intent(in) :: Dee 47 real, dimension(Nz) :: Uzrij 48 real :: Dttdx 49 50 51 52 ! variables locales 53 Integer :: K 54 Real :: Dzz,Dah,Ct_haut,Ct_bas 29 55 30 56 … … 35 61 ! Avection Selon X (advecx_m en general > 0) 36 62 ! ---------------- 37 Advecx_m(K) = Iadvec_w (Ii,Jj) * Ux(Ii,Jj,K) * & ! ux west if upwind38 (T (Ii,Jj,K) - T(Ii-1,Jj,K)) & ! west T gradient63 Advecx_m(K) = Iadvec_w * Uxij(K) * & ! ux west if upwind 64 (Tij(K) - Ti_moins_un(K)) & ! west T gradient 39 65 40 + Iadvec_e (Ii+1,Jj)* Ux(Ii+1,Jj,K)* & ! ux east if upwind41 (T (Ii+1,Jj,K)-T(Ii,Jj,K)) ! east T gradient66 + Iadvec_e * Uxi_plus_un(K)* & ! ux east if upwind 67 (Ti_plus_un(K)-Tij(K)) ! east T gradient 42 68 43 69 Advecx_m(K) = Advecx_m(K) * Dx11 !Dx11=1/Dx … … 46 72 ! Avection Selon Y 47 73 ! ---------------- 48 Advecy_m(K) = Iadvec_s (Ii,Jj) * Uy(Ii,Jj,K) * & ! uy sud if upwind49 (T (Ii,Jj,K) - T(Ii,Jj-1,K))& ! south T gradient74 Advecy_m(K) = Iadvec_s * Uyij(K) * & ! uy sud if upwind 75 (Tij(K) - Tj_moins_un(K))& ! south T gradient 50 76 51 + Iadvec_n (Ii,Jj+1) * Uy(Ii,Jj+1,K) * & ! uy nord is upwind52 (T (Ii,Jj+1,K)-T(Ii,Jj,K)) ! north T gradient77 + Iadvec_n * Uyj_plus_un(K) * & ! uy nord is upwind 78 (Tj_plus_un(K)-Tij(K)) ! north T gradient 53 79 54 80 Advecy_m(K) = Advecy_m(K) * Dx11 … … 62 88 63 89 ! -----------------------------Cas General (H>10m) 64 thick_ice: If (H (Ii,Jj).Gt.10.) Then90 thick_ice: If (Hij.Gt.10.) Then 65 91 66 92 ! Variables De Calcul Dans La Glace 67 93 ! dou = dtt/dz^2 68 Dou=Dtt/Dee/Dee/ H (Ii,Jj) / H(Ii,Jj)94 Dou=Dtt/Dee/Dee/ Hij / Hij 69 95 70 96 ! Dah = dtt/dz 71 Dah=Dtt /Dee /H (Ii,Jj)97 Dah=Dtt /Dee /Hij 72 98 73 99 ! thermal conductivity at mid point just below the surface … … 75 101 76 102 ! surface temperature : cannot go above 0 celsius 77 T (Ii,Jj,1)=Min(0.,Ts(Ii,Jj))103 Tij(1)=Min(0.,Tsij) 78 104 79 105 ! surface boundary condition … … 81 107 Bb(1)=1. 82 108 Cc(1)=0. 83 Rr(1)=T (Ii,Jj,1)109 Rr(1)=Tij(1) 84 110 85 111 Do K=2,Nz-1 … … 91 117 92 118 ! Advection Verticale Centree 93 Aa(K) = -Dzz * Ct_haut - Uzr (Ii,Jj,K) * Dah / 2. ! lower diag94 Cc(K) = -Dzz * Ct_bas + Uzr (Ii,Jj,K) * Dah / 2. ! upper diag119 Aa(K) = -Dzz * Ct_haut - Uzrij(K) * Dah / 2. ! lower diag 120 Cc(K) = -Dzz * Ct_bas + Uzrij(K) * Dah / 2. ! upper diag 95 121 Bb(K) = 1.+ Dzz * (Ct_haut+Ct_bas) ! diag 96 122 97 Rr(K) = T (Ii,Jj,K) + Prodq_m(K) * Dtt ! vector123 Rr(K) = Tij(K) + Prodq_m(K) * Dtt ! vector 98 124 Rr(K) = Rr(K)- Dttdx * (Advec_m(K)) 99 125 -
branches/iLoveclim/SOURCES/Temperature-routines/icetemp_declar_mod.f90
r31 r77 22 22 Integer :: Nfracq !< Exposant Fracq 23 23 Integer :: Iq !< Choix Du Type De Routine Chaleur 24 Real :: Sx,Sy,Sx2,Sy2,Deh22 ,Tss25 Real :: Dou,D ah,Duu,Dzz,Dzi,Chalbed,Ct_bas,Ct_haut24 Real :: Sx,Sy,Sx2,Sy2,Deh22 ! ,Tss 25 Real :: Dou,Duu,Chalbed ! ,Dah,Dzz,Dzi,Ct_bas,Ct_haut 26 26 27 27 Real,Parameter :: Acof1=-0.0575 !< Pour La Temperature De L'Eau De Mer … … 32 32 ! a la Base De L'Ice Shelf 33 33 Integer :: Ifail1 !< Permet De Detecter Les Erreurs 34 Real :: Chalk_1 !< Utilise Pour Le Calcul De Chalk : Glace Posée35 Real :: Chalk_2 !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice Shelves36 34 Real :: Chalbed_1 !< Utilise Pour Le Calcul De Chalbed 37 35 Real :: Coefadv !< Pour Limiter Le Flux De Chaleur Horiz. … … 42 40 ! _______________ 43 41 44 Real, allocatable,Dimension(:) :: Aa !< Work Arrays For Tridiag !Dim Nn45 Real, allocatable,Dimension(:) :: Bb !< Work Arrays For Tridiag !Dim Nn46 Real, allocatable,Dimension(:) :: Cc !< Work Arrays For Tridiag !Dim Nn47 Real, allocatable,Dimension(:) :: Rr !< Work Arrays For Tridiag !Dim Nn48 Real, allocatable,Dimension(:) :: Hh !< Work Arrays For Tridiag !Dim Nn42 Real,Dimension(Nn) :: Aa !< Work Arrays For Tridiag !Dim Nn 43 Real,Dimension(Nn) :: Bb !< Work Arrays For Tridiag !Dim Nn 44 Real,Dimension(Nn) :: Cc !< Work Arrays For Tridiag !Dim Nn 45 Real,Dimension(Nn) :: Rr !< Work Arrays For Tridiag !Dim Nn 46 Real,Dimension(Nn) :: Hh !< Work Arrays For Tridiag !Dim Nn 49 47 50 Real, allocatable,Dimension(:) :: Tdot !< Temperature Time Derivative*Dtt51 Real,allocatable,Dimension(:) :: Abis,Bbis,Cbis,Rbis,Hbis52 Real, allocatable,Dimension(:) :: Ee !< Vertical Coordinate In Ice, Scaled To H Zeta48 Real,Dimension(Nz+Nzm) :: Tdot !< Temperature Time Derivative*Dtt 49 ! Real,allocatable,Dimension(:) :: Abis,Bbis,Cbis,Rbis,Hbis 50 Real,Dimension(Nz) :: Ee !< Vertical Coordinate In Ice, Scaled To H Zeta 53 51 54 52 ! Tableaux De Travail 2d 55 53 ! ___________________________ 56 Real, allocatable,Dimension(:,:):: Tbmer !< Temperature De La Mer A La Base De L'Ice Shelf57 Real, allocatable,Dimension(:,:) :: Chalglissx,Chalglissy !< Chaleur De Glissement58 Integer, allocatable,Dimension(:,:) :: Iadvec_w,Iadvec_e,Iadvec_s,Iadvec_n54 Real,Dimension(Nx,Ny):: Tbmer !< Temperature De La Mer A La Base De L'Ice Shelf 55 Real,Dimension(Nx,Ny) :: Chalglissx,Chalglissy !< Chaleur De Glissement 56 Integer,Dimension(Nx,Ny) :: Iadvec_w,Iadvec_e,Iadvec_s,Iadvec_n 59 57 ! Pour L'Advection 60 58 61 59 ! Tableaux De Travail 3d 62 60 ! __________________________ 63 Real, allocatable,Dimension(:,:,:,:) :: Chalx, Chaly !Dim Nx,Ny,Nz,N1poly:N2poly61 Real,Dimension(Nx,Ny,Nz,size(Btt,4)) :: Chalx, Chaly !Dim Nx,Ny,Nz,N1poly:N2poly 64 62 ! Utilise Pour Calculer La Chaleur De Deformation Selon Xx Yy Zz Et Xy 65 Real, allocatable,Dimension(:,:,:) :: Ffx,Ffy66 Real, allocatable,Dimension(:,:,:) :: T3d_new67 Real, allocatable,Dimension(:,:,:) :: Chal2_x, Chal2_y, Chal2_z, Chal2_xy68 Real, allocatable,Dimension(:,:,:) :: Chaldef_maj !< Chaleur De Deformation69 Real, allocatable,Dimension(:,:,:) :: Advecx,Advecy,Advec63 Real,Dimension(Nx,Ny,size(Btt,4)) :: Ffx,Ffy 64 Real,Dimension(Nx,Ny,Nz+Nzm) :: T3d_new 65 Real,Dimension(Nx,Ny,Nz) :: Chal2_x, Chal2_y, Chal2_z, Chal2_xy 66 Real,Dimension(Nx,Ny,Nz) :: Chaldef_maj !< Chaleur De Deformation 67 Real,Dimension(Nx,Ny,Nz) :: Advecx,Advecy,Advec 70 68 Real,Dimension(Nx,Ny,Nz) :: Cp !< Specific Heat Capacity (J/(M-3)/K)=Ro Cp 71 69 Real,Dimension(Nx,Ny,Nz) :: Ct !< Thermal Conductivity (J/M/K/A) -
branches/iLoveclim/SOURCES/Temperature-routines/icetemp_mod.f90
r31 r77 66 66 67 67 subroutine icetemp 68 68 !$ use OMP_LIB 69 69 use Icetemp_declar 70 70 71 71 72 72 Implicit None 73 74 ! Allocation de la memoire pour les tableaux dans icetemp_declar 75 76 If (.Not. Allocated(Aa)) then 77 ! tab Nn 78 Allocate (Aa(Nn),Bb(Nn),Cc(Nn),Rr(Nn),Hh(Nn)) 79 ! tab NzNzm_m 80 Allocate(Tdot(Nz+Nzm)) 81 ! tab Nzm+1 82 Allocate(Abis(Nzm+1),Bbis(Nzm+1),Cbis(Nzm+1),Rbis(Nzm+1),Hbis(Nzm+1)) 83 ! tab nz_m 84 Allocate(Ee(Nz)) 85 !Tab Nx,Ny 86 Allocate(Tbmer(Nx,Ny),& 87 Chalglissx(Nx,Ny),& 88 Chalglissy(Nx,Ny),& 89 Iadvec_w(Nx,Ny),& 90 Iadvec_e(Nx,Ny),& 91 Iadvec_s(Nx,Ny),& 92 Iadvec_n(Nx,Ny) ) 93 ! Tab Nx,Ny,Nz 94 Allocate(Chal2_x(Nx,Ny,Nz),& 95 Chal2_y(Nx,Ny,Nz),& 96 Chal2_z(Nx,Ny,Nz),& 97 Chal2_xy(Nx,Ny,Nz),& 98 Chaldef_maj(Nx,Ny,Nz),& 99 Advecx(Nx,Ny,Nz),& 100 Advecy(Nx,Ny,Nz),& 101 Advec(Nx,Ny,Nz)) 102 ! Tab Nx,Ny,Nz,N1poly:N2poly 103 Allocate(Chalx(Nx,Ny,Nz,size(Btt,4)),& 104 Chaly(Nx,Ny,Nz,size(Btt,4))) 105 ! Tab Nx,Ny,N1poly:N2poly 106 Allocate(Ffx( Nx,Ny,size(Btt,4)),& 107 Ffy( Nx,Ny,size(Btt,4))) 108 ! Tab Nx,Ny,NzNzm 109 Allocate( T3d_new (Nx,Ny,Nz+Nzm)) 110 end If 111 73 74 !~ integer :: t1,t2,ir 75 !~ real :: temps, t_cpu_0, t_cpu_1, t_cpu, norme 76 !~ 77 !~ ! Temps CPU de calcul initial. 78 !~ call cpu_time(t_cpu_0) 79 !~ ! Temps elapsed de reference. 80 !~ call system_clock(count=t1, count_rate=ir) 81 82 83 !$OMP PARALLEL 84 !$OMP WORKSHARE 112 85 ! init 113 86 Aa=0. … … 124 97 Chalglissx=0. 125 98 Chalglissy=0. 99 126 100 !Instruction 127 101 Dee=1./(Nz-1) … … 130 104 Ee(1)=0. 131 105 Ee(Nz)=1. 106 !$OMP END WORKSHARE 107 108 !$OMP DO 132 109 Do K=1,Nz 133 110 If ((K.Ne.1).And.(K.Ne.Nz)) Ee(K)=(K-1.)/(Nz-1.) 134 111 End Do 112 !$OMP END DO 113 !$OMP END PARALLEL 135 114 136 115 ! Variables Dependant Du Pas De Temps Dtt … … 156 135 Call Qprod_ice(Iq) 157 136 158 137 159 138 ! Dans Le Socle : Les elements de La Matrice Tridiag Sont Invariants Dans L'Espace 139 !$OMP PARALLEL 140 !$OMP DO 160 141 Do K=Nz+1,nz+nzm-1 161 142 Aa(K)=-Ctm … … 163 144 Cc(K)=-Ctm 164 145 End Do 146 !$OMP END DO 165 147 166 148 ! Conditions Aux Limites Pour Le Socle … … 174 156 ! Advection Selon X 175 157 ! ----------------- 176 158 !$OMP WORKSHARE 177 159 Iadvec_w(:,:)=Nint(Max(Sign(1.0,Uxbar(:,:)),0.0)) 178 160 Iadvec_e(:,:)=Nint(Abs(Min(Sign(1.0,Uxbar(:,:)),0.0))) … … 183 165 Iadvec_s(:,:)=Nint(Max(Sign(1.0,Uybar(:,:)),0.0)) 184 166 Iadvec_n(:,:)=Nint(Abs(Min(Sign(1.0,Uybar(:,:)),0.0))) 185 167 !$OMP END WORKSHARE 186 168 ! Boucle De Resolution Des Temperatures Colonne Par Colonne 187 169 !$OMP SINGLE 188 170 If (Itracebug.Eq.1) Write(num_tracebug,*)' avant appel boucle Advec_icetemp' 189 171 !$OMP END SINGLE 172 173 !$OMP DO PRIVATE(Deh22,Duu,Aa,Bb,Cc,Rr,Hh,Dou) 190 174 Do J=2,Ny-1 191 175 Do I=2,Nx-1 192 176 193 177 ! If (Itracebug.Eq.1) Write(num_tracebug,*)' avant appel Advect_icetemp i,j', i,j 194 call Advec_icetemp(I,J,Chaldef_maj(I,J,:),Cp(I,J,:),& 195 Advecx(I,J,:),Advecy(I,J,:),Advec(I,J,:),Ct(I,J,:)) 178 call Advec_icetemp(Nz,Nzm,Nn,Chaldef_maj(I,J,:),Cp(I,J,:),& 179 Advecx(I,J,:),Advecy(I,J,:),Advec(I,J,:),Ct(I,J,:),Iadvec_w(I,J),Iadvec_e(I+1,J),Iadvec_s(I,J),Iadvec_n(I,J+1), & 180 Ux(i,j,:),Ux(i+1,j,:),Uy(i,j,:),Uy(i,j+1,:),T(i,j,:),T(i-1,j,:),T(i+1,j,:),T(i,j-1,:),T(i,j+1,:), & 181 H(i,j),Ts(i,j),Aa,Bb,Cc,Rr,Dx11,Dou,DTT,Dee,Uzr(i,j,:),Dttdx) 196 182 197 183 ! variables de calcul dans la glace … … 201 187 202 188 ! If (Itracebug.Eq.1) Write(num_tracebug,*)' avant appel temp_col i,j', i,j 203 Call temp_col(I,J,T3d_new,Ct(I,J,:),& 204 flot(I,J),H(I,J),Tbmer(I,J)) 189 Call temp_col(Nz,Nzm,Nn,T3d_new(i,j,:),Ct(i,j,:),& 190 flot(i,j),H(i,j),Tbmer(i,j),Ibase(i,j),T(i,j,:),Tpmp(i,j,:),Aa,Bb,Cc,Rr,Hh,Ncond,Dee,Cm,& 191 Dzm,Phid(i,j),Ghf(i,j),Ifail1,Tbdot(i,j),DTT,Dou,Ts(i,j),Bmelt(i,j)) 205 192 206 193 ! Test Permettant D'Ecrire Les Variables Quand Il Y A Une Erreur … … 218 205 End Do 219 206 End Do 220 207 !$OMP END DO 208 209 !$OMP DO 221 210 Do J=1,Ny 222 211 Do I=1,Nx … … 226 215 End Do 227 216 End Do 217 !$OMP END DO 228 218 229 219 ! Attribution Finale De La Temperature 230 220 ! Limitation a 3 deg De Variation Par Dtt Et Pas Plus Froid Que -70 231 221 !$OMP DO COLLAPSE(2) PRIVATE(Tdot) 232 222 Do K=1,nz+nzm 233 223 Do J=1,Ny … … 250 240 End Do 251 241 End Do 252 253 242 !$OMP END DO 243 244 !$OMP DO COLLAPSE(2) 254 245 Do K=2,Nz 255 246 Do J=1,Ny … … 262 253 End Do 263 254 End Do 255 !$OMP END DO 264 256 265 257 ! Temperature Sur Les Bords : 266 258 ! ------------------------- 267 259 260 !$OMP DO COLLAPSE(2) 268 261 Do K=1,Nz 269 262 Do J=1,Ny … … 281 274 End Do 282 275 End Do 283 284 276 !$OMP END DO 277 278 !$OMP DO COLLAPSE(2) 285 279 Do K=1,Nz 286 280 Do J=1,Ny … … 294 288 End Do 295 289 End Do 296 297 Deallocate (Aa,Bb,Cc,Rr,Hh,Tdot,Abis,Bbis,Cbis,Rbis,Hbis,Ee,Tbmer, & 298 Chalglissx,Chalglissy,Iadvec_w,Iadvec_e, & 299 Iadvec_s,Iadvec_n,Chal2_x,Chal2_y,Chal2_z,Chal2_xy,Chaldef_maj, & 300 Advecx,Advecy,Advec,Chalx,Chaly,Ffx,Ffy,T3d_new) 290 !$OMP END DO 291 !$OMP END PARALLEL 292 293 !~ ! Temps elapsed final 294 !~ call system_clock(count=t2, count_rate=ir) 295 !~ temps=real(t2 - t1,kind=4)/real(ir,kind=4) 296 !~ ! Temps CPU de calcul final 297 !~ call cpu_time(t_cpu_1) 298 !~ t_cpu = t_cpu_1 - t_cpu_0 299 300 !~ ! Impression du resultat. 301 !~ print '(//,3X,"Valeurs de nx et ny : ",I5,I5/, & 302 !~ & 3X,"Temps elapsed : ",1PE10.3," sec.",/, & 303 !~ & 3X,"Temps CPU : ",1PE10.3," sec.",/, & 304 !~ & 3X,"Norme (PB si /= 0) : ",1PE10.3,//)', & 305 !~ nx,ny,temps,t_cpu,norme 306 301 307 302 308 If (Itracebug.Eq.1) Write(num_tracebug,*)' fin routine icetemp' -
branches/iLoveclim/SOURCES/Temperature-routines/prop_th_icetemp.f90
r24 r77 15 15 16 16 Subroutine Thermal_prop_icetemp 17 !$ USE OMP_LIB 17 18 Use Icetemp_declar 18 19 … … 21 22 If (Itracebug.Eq.1) Write(Num_tracebug,*)' Entree Dans Routine Thermal_prop_icetemp' 22 23 24 !$OMP PARALLEL 25 !$OMP DO COLLAPSE(2) 23 26 Do K=1,Nz 24 27 Do J=1,Ny … … 29 32 ! Attention Pour La Conductivite C'Est La Formule De Yin-Chao Yen 30 33 31 Ct(I,J,K)=6.62E732 Cp(I,J,K)=2009.34 ! Ct(I,J,K)=6.62E7 35 ! Cp(I,J,K)=2009. 33 36 Tpmp(I,J,K)=-0.00087*(K-1)*1./(Nz-1)*H(I,J)!De=1/(Nz_m-1) 34 37 Cp(I,J,K)=(2115.3+7.79293*T(I,J,K)) … … 38 41 End Do 39 42 End Do 40 43 !$OMP END DO 44 !$OMP END PARALLEL 41 45 End Subroutine Thermal_prop_icetemp 42 46 -
branches/iLoveclim/SOURCES/Temperature-routines/temp_col.f90
r24 r77 14 14 !> 15 15 16 Subroutine Temp_col(Ii,Jj,Newtempcol_m,Ct_m,Flot_m,H_m,Tbmer_m) 17 18 Use Icetemp_declar 16 Subroutine Temp_col(Nz,Nzm,Nn,Newtempcol,Ctij,Flotij,Hij,Tbmerij,Ibase,Tij,Tpmpij,Aa,Bb,Cc,Rr,Hh,Ncond,Dee,Cm, & 17 Dzm,Phidij,Ghfij,Ifail1,Tbdotij,DTT,Dou,Tsij,Bmeltij) 18 19 ! Use Icetemp_declar 19 20 Use Tridiagmod 20 21 21 22 22 23 Implicit None 23 integer :: Ii,Jj 24 Real,Dimension(Nx,Ny,Nz+Nzm),Intent(Out) :: Newtempcol_m !< Tableau 1d Vert. Des Temperatures En Sortie 25 Real,Dimension(Nz),Intent(In) :: Ct_m !< Tableau 1d Vert. Conductivite Thermique 26 Logical,Intent(In) :: Flot_m !< Vrai Si Flot_mtant (Test D'Archimede) 'O' 27 Real,Intent(In) :: H_m !< Ice Thickness 'O' 28 Real,Intent(In) :: Tbmer_m !< Temperature De La Mer A La Base De L'Ice Shelf 29 30 31 If (H_m.Gt.10.) Then 24 integer,intent(in) :: Nz,Nzm,Nn 25 Real,Dimension(Nz+Nzm),Intent(Out) :: Newtempcol !< Tableau 1d Vert. Des Temperatures En Sortie 26 Real,Dimension(Nz),Intent(In) :: Ctij !< Tableau 1d Vert. Conductivite Thermique 27 Logical,Intent(In) :: Flotij !< Vrai Si Flotijtant (Test D'Archimede) 'O' 28 Real,Intent(In) :: Hij !< Ice Thickness 'O' 29 Real,Intent(In) :: Tbmerij !< Temperature De La Mer A La Base De L'Ice Shelf 30 integer,intent(inout) :: Ibase 31 real,dimension(Nz+Nzm),intent(inout) :: Tij !< Temperature sur la colonne 32 real,dimension(Nz),intent(in) :: Tpmpij !< pressure melting point temperature in ice sheet 'o' 33 Real,Dimension(Nn),intent(inout) :: Aa !< Work Arrays For Tridiag !Dim Nn 34 Real,Dimension(Nn),intent(inout) :: Bb !< Work Arrays For Tridiag !Dim Nn 35 Real,Dimension(Nn),intent(inout) :: Cc !< Work Arrays For Tridiag !Dim Nn 36 Real,Dimension(Nn),intent(inout) :: Rr !< Work Arrays For Tridiag !Dim Nn 37 Real,Dimension(Nn),intent(inout) :: Hh !< Work Arrays For Tridiag !Dim Nn 38 Integer,intent(in) :: Ncond !< Switch : Ncond=1 Thermal Conductivity In Mantle 39 real, intent(in) :: Dee 40 real,intent(in) :: Cm 41 real,intent(in) :: Dzm 42 real,intent(inout) :: Phidij !< flux de chaleur lie a la deformation et glissement basal 43 real,intent(in) :: Ghfij !< flux geothermique 44 integer,intent(out) :: Ifail1 !< Diagnostique erreur dans Tridiag 45 real, intent(out) :: Tbdotij !< variation in time of basal temperature 46 real, intent(in) :: DTT 47 Real, intent(inout) :: Dou 48 real, intent(in) :: Tsij !< surface ice temperature 'o' 49 real, intent(out) :: Bmeltij !< fonte basale 50 51 52 53 ! variables locales 54 integer :: K 55 Real :: Dzi,Tss 56 Real,Dimension(Nzm+1) :: Abis,Bbis,Cbis,Rbis,Hbis 57 58 If (Hij.Gt.10.) Then 32 59 33 60 ! Conditions Aux Limites a La Base De La Glace … … 35 62 36 63 ! Base Froide 37 If ( ((Ibase (Ii,Jj).Eq.1).Or.(Ibase(Ii,Jj).Eq.4) &38 .Or. ((Ibase (Ii,Jj).Eq.5).And.(T(Ii,Jj,Nz).Lt.Tpmp(Ii,Jj,Nz)))) &39 .And..Not.Flot _m) Then40 41 Ibase (Ii,Jj)=164 If ( ((Ibase.Eq.1).Or.(Ibase.Eq.4) & 65 .Or. ((Ibase.Eq.5).And.(Tij(Nz).Lt.Tpmpij(Nz)))) & 66 .And..Not.Flotij) Then 67 68 Ibase=1 42 69 Bb(Nz)=1. 43 70 44 71 If (Ncond.Eq.1) Then ! Avec Socle 45 Dzi=H _m*Dee*Cm/Ct_m(Nz)72 Dzi=Hij*Dee*Cm/Ctij(Nz) 46 73 Aa(Nz)=-Dzm/(Dzm+Dzi) 47 74 Cc(Nz)=-Dzi/(Dzm+Dzi) 48 Rr(Nz)=H _m*Dee*Phid(Ii,Jj)*Dzm/Ct_m(Nz)/(Dzm+Dzi)75 Rr(Nz)=Hij*Dee*Phidij*Dzm/Ctij(Nz)/(Dzm+Dzi) 49 76 Else ! Sans Socle 50 77 Aa(Nz)=-1. 51 78 Cc(Nz)=0. 52 Rr(Nz)=-(Ghf (Ii,Jj)-Phid(Ii,Jj))/Ct_m(Nz)*H_m*Dee79 Rr(Nz)=-(Ghfij-Phidij)/Ctij(Nz)*Hij*Dee 53 80 Endif 54 81 … … 57 84 ! Base Temperee Ou Shelf 58 85 ! ---------------------- 59 If (Ibase (Ii,Jj).Eq.5) Ibase(Ii,Jj)=260 Ibase (Ii,Jj)=Max(Ibase(Ii,Jj),2)86 If (Ibase.Eq.5) Ibase=2 87 Ibase=Max(Ibase,2) 61 88 Aa(Nz)=0. 62 89 Bb(Nz)=1. 63 90 Cc(Nz)=0. 64 91 65 If (.Not.Flot _m) Then66 Rr(Nz)=Tpmp (Ii,Jj,Nz)67 Else 68 Rr(Nz)=Tbmer _m92 If (.Not.Flotij) Then 93 Rr(Nz)=Tpmpij(Nz) 94 Else 95 Rr(Nz)=Tbmerij 69 96 End If 70 97 … … 74 101 If (Ncond.Eq.1) Then ! Avec Socle 75 102 Do K=Nz+1,nz+nzm-1 76 Rr(K)=T (Ii,Jj,K)103 Rr(K)=Tij(K) 77 104 End Do 78 105 Call Tridiag (Aa,Bb,Cc,Rr,Hh,nz+nzm,Ifail1) … … 87 114 If (Ncond.Eq.0) Then 88 115 Do K=Nz+1,nz+nzm 89 Hh(K)=Hh(Nz)-Dzm*(K-Nz)*Ghf (Ii,Jj)/Cm116 Hh(K)=Hh(Nz)-Dzm*(K-Nz)*Ghfij/Cm 90 117 End Do 91 118 Endif 92 119 93 120 Do K=1,nz+nzm 94 Newtempcol _m(Ii,Jj,K)=Hh(K)121 Newtempcol(K)=Hh(K) 95 122 End Do 96 Tbdot (Ii,Jj)=(Newtempcol_m(Ii,Jj,Nz)-T(Ii,Jj,Nz))/Dtt123 Tbdotij=(Newtempcol(Nz)-Tij(Nz))/Dtt 97 124 98 125 ! ------------------------------------------------- Glace Tres Fine (H<10m Ou H=0) 99 Else If (H _m.Le.10.) Then126 Else If (Hij.Le.10.) Then 100 127 101 128 ! Pour Eviter Des Problemes Lorsque H Est Inferieur A 10 M … … 104 131 105 132 ! ........................................ Avec Calcul Dans Le Socle 106 If (Ncond.Eq.1.And..Not.Flot _m) Then107 If (H _m.Gt.0.) Then133 If (Ncond.Eq.1.And..Not.Flotij) Then 134 If (Hij.Gt.0.) Then 108 135 ! Gradient Dans Le Socle 109 Dou=(T (Ii,Jj,Nz+1)-T(Ii,Jj,Nz))/Dzm*Cm110 Dou=Dou/Ct _m(Nz)*Dee*H_m111 112 Tss=Min(0.,Ts (Ii,Jj))113 Do K=1,Nz 114 Newtempcol _m(Ii,Jj,K)=Tss+Dou*(K-1.)136 Dou=(Tij(Nz+1)-Tij(Nz))/Dzm*Cm 137 Dou=Dou/Ctij(Nz)*Dee*Hij 138 139 Tss=Min(0.,Tsij) 140 Do K=1,Nz 141 Newtempcol(K)=Tss+Dou*(K-1.) 115 142 End Do 116 143 117 144 Else 118 145 ! Pas De Glace 119 Tss=Ts (Ii,Jj)120 Do K=1,Nz 121 Newtempcol _m(Ii,Jj,K)=Tss146 Tss=Tsij 147 Do K=1,Nz 148 Newtempcol(K)=Tss 122 149 End Do 123 150 End If 124 151 125 152 ! Calcul Dans Le Socle Meme S'Il N'Y A Pas De Glace 126 Rr(Nz)=Newtempcol _m(Ii,Jj,Nz)153 Rr(Nz)=Newtempcol(Nz) 127 154 Aa(Nz)=0 128 155 Bb(Nz)=1 … … 130 157 131 158 Do K=Nz+1,nz+nzm-1 132 Rr(K)=T (Ii,Jj,K)159 Rr(K)=Tij(K) 133 160 End Do 134 161 … … 150 177 Else 151 178 ! Calotte Posee 152 If ((H _m.Gt.0.).And..Not.Flot_m) Then153 Dou=-Ghf (Ii,Jj)/Ct_m(Nz)*Dee*H_m154 Tss=Min(0.,Ts (Ii,Jj))155 Do K=1,Nz 156 Newtempcol _m(Ii,Jj,K)=Tss+Dou*(K-1.)179 If ((Hij.Gt.0.).And..Not.Flotij) Then 180 Dou=-Ghfij/Ctij(Nz)*Dee*Hij 181 Tss=Min(0.,Tsij) 182 Do K=1,Nz 183 Newtempcol(K)=Tss+Dou*(K-1.) 157 184 End Do 158 185 159 186 ! Shelf 160 Else If ((H _m.Gt.0.).And.Flot_m) Then161 Tss=Min(0.,Ts (Ii,Jj))162 Dou=(Tbmer _m-Tss)*Dee163 Do K=1,Nz 164 Newtempcol _m(Ii,Jj,K)=Tss+Dou*(K-1.)187 Else If ((Hij.Gt.0.).And.Flotij) Then 188 Tss=Min(0.,Tsij) 189 Dou=(Tbmerij-Tss)*Dee 190 Do K=1,Nz 191 Newtempcol(K)=Tss+Dou*(K-1.) 165 192 End Do 166 193 167 194 ! Pas De Glace 168 195 Else 169 Tss=Ts (Ii,Jj)170 Do K=1,Nz 171 Newtempcol _m(Ii,Jj,K)=Tss196 Tss=Tsij 197 Do K=1,Nz 198 Newtempcol(K)=Tss 172 199 End Do 173 200 End If 174 201 175 202 ! Temperature Dans Le Socle, Lineaire Avec Le Gradient Ghf 176 If (.Not.Flot _m) Then203 If (.Not.Flotij) Then 177 204 Do K=Nz+1,nz+nzm 178 Hh(K)=Newtempcol _m(Ii,Jj,Nz)-Dzm*(K-Nz)*Ghf(Ii,Jj)/Cm205 Hh(K)=Newtempcol(Nz)-Dzm*(K-Nz)*Ghfij/Cm 179 206 End Do 180 207 Else 181 208 Do K=Nz+1,nz+nzm 182 Hh(K)=Tbmer _m-Dzm*(K-Nz)*Ghf(Ii,Jj)/Cm209 Hh(K)=Tbmerij-Dzm*(K-Nz)*Ghfij/Cm 183 210 End Do 184 211 End If … … 189 216 190 217 Do K=Nz+1,nz+nzm 191 Newtempcol _m(Ii,Jj,K)=Hh(K)218 Newtempcol(K)=Hh(K) 192 219 End Do 193 220 194 Tbdot (Ii,Jj)=(Newtempcol_m(Ii,Jj,Nz)-T(Ii,Jj,Nz))/Dtt195 Bmelt (Ii,Jj)=0.196 Ibase (Ii,Jj)=5197 Phid (Ii,Jj)=0.221 Tbdotij=(Newtempcol(Nz)-Tij(Nz))/Dtt 222 Bmeltij=0. 223 Ibase=5 224 Phidij=0. 198 225 199 226 -
branches/iLoveclim/SOURCES/bmelt-seuil-profondeur_mod.f90
r4 r77 118 118 119 119 talus_nochange : if (Bsoc0(i,j).lt.depth_talus) then 120 coef_talus = 1 ! pas de changement au dessus de l'ocecan profond 121 else 120 122 coef_talus = coefbmshelf 121 else122 coef_talus = 1 ! pas de changement au dessus de l'ocecan profond123 123 endif talus_nochange 124 124 -
branches/iLoveclim/SOURCES/branche-Cat-spinup-dec2011/dragging_prescr_beta_mod.f90
r4 r77 99 99 betamy_file = trim(dirnameinp)//trim(betamy_file) 100 100 betamax = beta_limgz 101 betamax_2d(:,:) = betamax 101 102 102 103 ! read the beta value on centered and staggered grids -
branches/iLoveclim/SOURCES/climat-forcage-insolation_mod.f90
r21 r77 149 149 150 150 implicit none 151 integer :: mo,ti,tj 152 character(len=8) :: control ! label to check clim. forc. file (filin) is usable 153 integer :: l ! In snapshot files:the first column is the mask, read but not used 154 real :: T_surf_ref ! variable de travail calcul temp a l'instant t a la surface S 151 155 152 integer :: intr 156 153 integer :: igtr 157 154 integer :: ictr 158 integer :: k,d1,d2155 integer :: d1,d2 159 156 integer :: i,j 160 character(len=100) :: file_ncdf !< fichier netcdf157 ! character(len=100) :: file_ncdf !< fichier netcdf 161 158 real*8, dimension(:,:,:), pointer :: data_3D => null() ! donnees lues dans le netcdf 162 159 real*8, dimension(:,:),pointer :: data_2D => null() ! donnees lues dans le netcdf … … 450 447 write(num_rep_42,'(A,2(f7.1,","))') 'palier_ice = ', palier_ice(:,:) 451 448 write(num_rep_42,'(A,A)') 'surf_ice = ', surf_ice 452 write(num_rep_42,'(A,2(f 3.1,","))') 'palier_CO2 = ', palier_CO2(:)449 write(num_rep_42,'(A,2(f6.1,","))') 'palier_CO2 = ', palier_CO2(:) 453 450 write(num_rep_42,'(A,A)') 'orb_file = ', orb_file 454 451 write(num_rep_42,'(A,A)') 'co2_file = ', co2_file … … 494 491 implicit none 495 492 496 real COEFT,COEFP !497 493 !integer l ! dumm index for loops on snapshots files l=ITR,NTR-1 498 494 !cdc integer itr ! index of the current snapshot file (change with time) … … 517 513 !real,dimension(nx,ny) :: coeff1,coeff2 518 514 real,dimension(nx,ny) :: coeff2 519 integer :: k1,k2,m1,m2515 integer :: m1,m2 520 516 integer,dimension(nx,ny) :: Mask,Mask2 521 517 integer :: update_H … … 523 519 524 520 !Definition des variables pour le calcul de la fonction de CO2 525 double precision :: coefCO2521 !double precision :: coefCO2 526 522 527 523 !***************************************************************************** -
branches/iLoveclim/SOURCES/climat-forcage-insolation_mod_oneway.f90
r18 r77 85 85 86 86 implicit none 87 integer :: mo,ti,tj 88 character(len=8) :: control ! label to check clim. forc. file (filin) is usable 89 integer :: l ! In snapshot files:the first column is the mask, read but not used 90 real :: T_surf_ref ! variable de travail calcul temp a l'instant t a la surface S 87 91 88 integer :: intr 92 89 integer :: igtr 93 90 integer :: ictr 94 integer :: i,j 95 character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 91 ! character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 96 92 real*8, dimension(:,:,:), pointer :: data_3D => null() ! donnees lues dans le netcdf 97 93 real*8, dimension(:,:),pointer :: data_2D => null() ! donnees lues dans le netcdf … … 231 227 implicit none 232 228 233 real COEFT,COEFP !234 229 !integer l ! dumm index for loops on snapshots files l=ITR,NTR-1 235 230 !cdc integer itr ! index of the current snapshot file (change with time) 236 231 237 232 integer mo 238 integer :: ictr239 integer :: igtr240 233 integer :: i,j 241 234 -
branches/iLoveclim/SOURCES/climat-perturb_mod-0.4.f90
r27 r77 197 197 ! use module3d_phy 198 198 implicit none 199 integer :: i, j,ift199 integer :: i,ift 200 200 201 201 ! time en dehors des limites du fichier forcage -
branches/iLoveclim/SOURCES/climat_forcage_mois_mod.f90
r27 r77 64 64 65 65 implicit none 66 integer :: i,j,mo,ti,tj 67 character(len=8) :: control ! label to check clim. forc. file (filin) is usable 68 integer :: l ! In snapshot files:the first column is the mask, read but not used 69 real :: T_surf_ref ! variable de travail calcul temp a l'instant t a la surface S 70 character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 66 ! integer :: i,j,mo,ti,tj 67 ! integer :: l ! In snapshot files:the first column is the mask, read but not used 68 ! real :: T_surf_ref ! variable de travail calcul temp a l'instant t a la surface S 69 ! character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 71 70 real*8, dimension(:,:,:), pointer :: data_3D => null() ! donnees lues dans le netcdf 72 71 -
branches/iLoveclim/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90
r4 r77 80 80 subroutine icethick3 81 81 82 !$ USE OMP_LIB 83 82 84 implicit none 83 85 real,dimension(nx,ny) :: Dminx,Dminy 84 86 real,dimension(nx,ny) :: Uxdiff,Uydiff ! vitesse due a la diffusion 85 integer :: it1,it2,it386 87 87 real aux ! pour le calcul du critere 88 88 real maxdia ! sur le pas de temps … … 94 94 ! Copie de H sur vieuxH 95 95 ! -------------------- 96 !$OMP PARALLEL 97 !$OMP WORKSHARE 96 98 where (mk0(:,:).eq.0) 97 99 vieuxH(:,:)=0. … … 101 103 vieuxH(:,:)=H(:,:) 102 104 end where 105 !$OMP END WORKSHARE 103 106 104 107 ! mk0 est le masque à ne jamais dépasser … … 112 115 jmaxdia=0 113 116 114 ! attention limitation ! 117 ! attention limitation ! 118 !$OMP WORKSHARE 115 119 uxbar(:,:)=max(uxbar(:,:),-V_limit) 116 120 uxbar(:,:)=min(uxbar(:,:),V_limit) 117 121 uybar(:,:)=max(uybar(:,:),-V_limit) 118 122 uybar(:,:)=min(uybar(:,:),V_limit) 123 !$OMP END WORKSHARE 119 124 120 125 ! le pas de temps est choisi pour rendre la matrice advective diagonale dominante 121 do i=2,nx-1 122 do j=2,ny-1 126 !$OMP END PARALLEL 127 !$OMP PARALLEL 128 !$OMP DO PRIVATE(aux) 129 !do i=2,nx-1 130 ! do j=2,ny-1 131 do j=2,ny-1 132 do i=2,nx-1 123 133 aux = (abs(uxbar(i,j)) + abs(uxbar(i+1,j))) & 124 134 + (abs(uybar(i,j)) + abs(uybar(i,j+1))) 125 135 aux=aux*dx1*0.5 136 !$OMP CRITICAL 126 137 if (aux.gt.maxdia) then 127 138 maxdia=aux 128 imaxdia=i129 jmaxdia=j139 ! imaxdia=i 140 ! jmaxdia=j 130 141 endif 142 !$OMP END CRITICAL 131 143 end do 132 144 end do 133 145 !$OMP END DO 146 !$OMP END PARALLEL 134 147 135 148 if (maxdia.ge.(testdiag/dtmax)) then … … 143 156 ! avec le pas de temps long (dtt) 144 157 145 158 call next_time(time,dt,dtt,dtmax,dtmin,isynchro,itracebug,num_tracebug) 146 159 147 160 148 161 ! calcul diffusivite - vitesse 149 162 !----------------------------------------------------------------- 150 163 !$OMP PARALLEL 164 !$OMP WORKSHARE 151 165 Uxdiff(:,:)=diffmx(:,:)*(-sdx(:,:)) ! vitesse qui peut s'exprimer en terme diffusif 152 166 Uydiff(:,:)=diffmy(:,:)*(-sdy(:,:)) ! dans les where qui suivent elle est limitee a uxbar … … 174 188 uydiff(:,:)=max(uydiff(:,:),uybar(:,:)) ! pour tenir compte limitation utot 175 189 end where 176 190 !$OMP END WORKSHARE 177 191 178 192 … … 181 195 182 196 if (adv_frac.gt.1.) then ! advection seulement 197 !$OMP WORKSHARE 183 198 advmx(:,:)=Uxbar(:,:) 184 199 advmy(:,:)=Uybar(:,:) 185 200 Dmx(:,:)=0. 186 201 Dmy(:,:)=0. 187 202 !$OMP END WORKSHARE 188 203 else if (abs(adv_frac).lt.1.e-8) then ! diffusion seulement 204 !$OMP WORKSHARE 189 205 advmx(:,:)=0. 190 206 advmy(:,:)=0. 191 207 !$OMP END WORKSHARE 192 208 ! D reste la valeur au dessus) 193 209 … … 199 215 ! diffusion = ce qui peut être exprime en diffusion 200 216 ! + une partie (1-adv_frac) de l'advection 201 217 !$OMP WORKSHARE 202 218 where ((abs(sdx(:,:)).gt.1.e-8).and.(Hmx(:,:).gt.2.)) ! cas general 203 219 advmx(:,:)=(Uxbar(:,:)-Uxdiff(:,:)) ! tout ce qui n'est pas diffusion … … 238 254 dmy(:,:)=dminy(:,:)*H(:,:) 239 255 end where 240 241 242 243 256 elsewhere ! zones trop plates ou trop fines 244 257 Dmy(:,:)=0. 245 258 advmy(:,:)=Uybar(:,:) 246 259 end where 247 260 !$OMP END WORKSHARE 248 261 249 262 else if (adv_frac.lt.0) then ! diffusif dans zones SIA, advectif ailleurs 250 263 !$OMP WORKSHARE 251 264 zonemx(:,:)=flgzmx(:,:) 252 265 zonemy(:,:)=flgzmy(:,:) … … 267 280 advmy(:,:)=0. 268 281 end where 269 282 !$OMP END WORKSHARE 270 283 end if 271 284 272 285 !$OMP WORKSHARE 273 286 where (flot(:,:) ) 274 287 tabtest(:,:)=1. … … 276 289 tabtest(:,:)=0. 277 290 end where 278 291 !$OMP END WORKSHARE 292 !$OMP END PARALLEL 279 293 !------------------------------------------------------------------detect 280 294 !!$ tabtest(:,:)=dmx(:,:) … … 377 391 378 392 379 debug_3D(:,:,45)=dmx(:,:) 380 debug_3D(:,:,46)=dmy(:,:) 381 debug_3D(:,:,47)=advmx(:,:) 382 debug_3D(:,:,48)=advmy(:,:) 383 384 393 !debug_3D(:,:,45)=dmx(:,:) 394 !debug_3D(:,:,46)=dmy(:,:) 395 !debug_3D(:,:,47)=advmx(:,:) 396 !debug_3D(:,:,48)=advmy(:,:) 397 398 !$OMP PARALLEL 399 !$OMP WORKSHARE 385 400 bilmass(:,:)=bm(:,:)-bmelt(:,:) ! surface and bottom mass balance 401 !$OMP END WORKSHARE 402 !$OMP END PARALLEL 386 403 387 404 ! diverses precription de l'epaisseur en fonction de l'objectif … … 389 406 390 407 391 call prescribe_fixed_points ! ceux qui sont fixes pour tout le run (bords de grille, regions) 392 393 394 408 call prescribe_fixed_points ! ceux qui sont fixes pour tout le run (bords de grille, regions) 395 409 396 410 … … 438 452 !!$end if 439 453 440 debug_3D(:,:,87)=S(:,:)-debug_3D(:,:,88)441 442 debug_3D(:,:,86)=Hp(:,:)443 debug_3D(:,:,85)=i_Hp(:,:)454 !debug_3D(:,:,87)=S(:,:)-debug_3D(:,:,88) 455 456 !debug_3D(:,:,86)=Hp(:,:) 457 !debug_3D(:,:,85)=i_Hp(:,:) 444 458 445 459 !!$where (i_hp(:,:).eq.1) … … 465 479 call resol_adv_diff_2D_vect (Dmx,Dmy,advmx,advmy,Hp,i_Hp,bilmass,vieuxH,H) 466 480 467 ! remise à 0 des epaisseurs negatives, on garde la difference dans ablbord 481 ! remise à 0 des epaisseurs negatives, on garde la difference dans ablbord 482 !$OMP PARALLEL 483 !$OMP WORKSHARE 468 484 where (H(:,:).lt.0.) 469 485 ablbord(:,:)=H(:,:)/dt … … 491 507 endwhere 492 508 493 494 509 ! eventuellement retirer apres spinup ou avoir un cas serac 495 510 Hdot(:,:)=(H(:,:)-vieuxH(:,:))/dt 511 !$OMP END WORKSHARE 496 512 497 513 if (igrdline.ne.3) then 514 !$OMP WORKSHARE 498 515 Hdot(:,:)=min(Hdot(:,:),10.) 499 516 Hdot(:,:)=max(Hdot(:,:),-10.) 517 !$OMP END WORKSHARE 500 518 endif 501 519 520 !$OMP WORKSHARE 502 521 where (i_hp(:,:).ne.1) 503 522 H(:,:)=vieuxH(:,:)+Hdot(:,:)*dt … … 513 532 Hdot(:,:)=0. 514 533 end where 515 516 534 !$OMP END WORKSHARE 535 !$OMP END PARALLEL 517 536 518 537 !calul de l'ablation sur les bords (pourrait n'être appelé que pour les sorties courtes) -
branches/iLoveclim/SOURCES/deformation_mod_2lois.f90
r4 r77 179 179 subroutine flow_general 180 180 181 !$ USE OMP_LIB 181 182 implicit none 182 183 184 !$OMP PARALLEL 185 !$OMP WORKSHARE 183 186 teta(:,:,:) = t(:,:,1:nz)-tpmp(:,:,:) 184 185 187 !$OMP END WORKSHARE 188 189 !$OMP DO COLLAPSE(2) 186 190 do k=nz-1,1,-1 187 191 do i=2,nx-1 … … 192 196 end do 193 197 end do 198 !$OMP END DO 199 !$OMP END PARALLEL 194 200 195 201 end subroutine flow_general … … 197 203 subroutine flowlaw (iiglen) 198 204 205 !$ USE OMP_LIB 199 206 200 207 implicit none … … 216 223 ! real,dimension(nz) :: e ! vertical coordinate in ice, scaled to h zeta 217 224 real :: de= 1./(nz-1) 225 ! variables openmp : 226 !$ integer :: rang 227 !$ integer, dimension(:), allocatable :: tab_sync 228 !$ integer :: nb_taches 229 218 230 219 231 e(1)=0. 220 232 e(nz)=1. 233 234 !$OMP PARALLEL PRIVATE(bat,q,aat,ssec,zetat) 235 !$ nb_taches = OMP_GET_NUM_THREADS() 236 !$OMP DO 221 237 do k=1,nz 222 238 if ((k.ne.1).and.(k.ne.nz)) e(k)=(k-1.)/(nz-1.) 223 239 end do 240 !$OMP END DO NOWAIT 224 241 225 242 ! exposant de la loi de deformation utilisee : glen(iiglen) … … 230 247 ! boucle pour btt a k=1 231 248 ti1=273.15*273.15 249 !$OMP DO 232 250 do j=2,ny-1 233 251 do i=2,nx-1 … … 239 257 end do 240 258 end do 259 !$OMP END DO 241 260 242 261 ! boucle pour tous les autres btt 262 !$OMP DO COLLAPSE(2) 243 263 do k=nz-1,1,-1 244 do j=2,ny-1 264 do j=2,ny-1 245 265 do i=2,nx-1 246 266 if (h(i,j).gt.1.) then … … 361 381 end do 362 382 end do 363 383 !$OMP END DO NOWAIT 384 364 385 ! integration de sa et s2a 365 386 !$OMP DO 366 387 do j=1,ny 367 388 do i=1,nx … … 371 392 end do 372 393 end do 373 394 !$OMP END DO 395 !$OMP END PARALLEL 396 397 398 ! Allocation et initialisation du tableau tab_sync 399 ! qui gere la synchronisation entre les differents threads 400 !$ allocate(tab_sync(0:nb_taches-1)) 401 !$ tab_sync(0:nb_taches-1) = 1 402 !$OMP PARALLEL private(i,j,k,rang) shared(tab_sync) 403 !$ rang = OMP_GET_THREAD_NUM() 374 404 do k=nz-1,1,-1 405 ! Synchronisation des threads 406 !$ if (rang /= 0) then 407 !$ do 408 !$OMP FLUSH(tab_sync) 409 !$ if (tab_sync(rang-1)>=tab_sync(rang)+1) exit 410 !$ enddo 411 !$OMP FLUSH(sa) 412 !$OMP FLUSH(s2a) 413 !$ endif 414 !$OMP DO SCHEDULE(STATIC) 375 415 do j=1,ny 376 416 do i=1,nx … … 386 426 end do 387 427 end do 388 end do 389 428 !$OMP END DO NOWAIT 429 ! ! Mis a jour du tableau tab_sync 430 !$ tab_sync(rang) = tab_sync(rang) + 1 431 !$OMP FLUSH(tab_sync,sa,s2a) 432 end do 433 434 !$OMP WORKSHARE 390 435 ! cas particulier des bords 391 436 sa(:,1,:,iiglen)=sa(:,2,:,iiglen) … … 402 447 s2a(nx,:,:,iiglen)=s2a(nx-1,:,:,iiglen) 403 448 btt(nx,:,:,iiglen)=btt(nx-1,:,:,iiglen) 404 449 !$OMP END WORKSHARE 450 !$OMP END PARALLEL 451 405 452 ! calcul des moyennes sur les mailles staggered 406 407 453 do k=1,nz 408 454 tab2d=sa(:,:,k,iiglen) … … 417 463 s2a_my(:,:,k,iglen)=tab_my 418 464 end do 419 465 420 466 ! attribution de debug_3d pour les sorties s2a 421 467 ! loi 1 -> 190 dans description variable -> 90 dans debug_3d 422 debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen)468 !debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen) 423 469 424 470 end subroutine flowlaw -
branches/iLoveclim/SOURCES/diffusiv-polyn-0.6.f90
r4 r77 34 34 35 35 ! =============================================================== 36 36 !$ USE OMP_LIB 37 37 USE module3D_phy 38 38 … … 44 44 REAL :: INV_4DX ! inverse de dx pour eviter les divisions =1/(4*dx) 45 45 REAL :: INV_4DY ! inverse de dy pour eviter les divisions =1/(4*dy) 46 INTEGER :: ii47 integer :: ll48 46 49 47 if (itracebug.eq.1) call tracebug(' Entree dans routine diffusiv') … … 60 58 61 59 ! initialisation de la diffusion 60 !$OMP PARALLEL 61 !$OMP WORKSHARE 62 62 diffmx(:,:)=0. 63 63 diffmy(:,:)=0. 64 64 !$OMP END WORKSHARE 65 !$OMP END PARALLEL 65 66 66 67 ! calcul de SDX, SDY et de la pente au carre en mx et en my : … … 81 82 ! Calcul de la vitesse de glissement, qu'elle soit calculee par diagno ou par sliding 82 83 !------------------------------------------------------------------------------------ 83 ! 84 !$OMP PARALLEL 85 !$OMP WORKSHARE 84 86 where (flgzmx(:,:)) 85 87 ubx(:,:) = uxflgz(:,:) … … 93 95 uby(:,:) = ddby(:,:)* (-sdy(:,:)) 94 96 endwhere 95 96 97 !$OMP END WORKSHARE 98 !$OMP END PARALLEL 97 99 if (itracebug.eq.1) call tracebug(' diffusiv apres calcul glissement') 98 100 … … 101 103 ! Deformation SIA : Calcul de ddy et ddx pour chaque valeur de iglen 102 104 !------------------------------------------------------------------ 103 104 105 do iglen=n1poly,n2poly 105 106 glenexp=max(0.,(glen(iglen)-1.)/2.) 106 107 107 !$OMP PARALLEL 108 !$OMP DO 108 109 do j=1,ny 109 110 do i=1,nx 110 111 111 if (.not.flotmy(i,j)) then ! On calcule quand la deformation même pour les ice streams 112 112 ddy(i,j,iglen)=((slope2my(i,j)** & ! slope2my calcule en debut de routine 113 113 glenexp)*(rog)**glen(iglen)) & 114 114 *hmy(i,j)**(glen(iglen)+1) 115 116 117 115 endif 118 116 end do 119 117 end do 118 !$OMP END DO 119 !$OMP END PARALLEL 120 120 end do 121 122 121 123 122 124 do iglen=n1poly,n2poly 123 125 glenexp=max(0.,(glen(iglen)-1.)/2.) 124 125 126 !$OMP PARALLEL 127 !$OMP DO 126 128 do j=1,ny 127 129 do i=1,nx 128 129 130 if (.not.flotmx(i,j)) then ! bug y->x corrige le 5 avril 2008 ( 130 131 131 ddx(i,j,iglen)=((slope2mx(i,j)** & ! slope2mx calcule en debut de routine 132 132 glenexp)*(rog)**glen(iglen)) & … … 135 135 end do 136 136 end do 137 !$OMP END DO 138 !$OMP END PARALLEL 137 139 end do 138 140 141 139 142 ! vitesse due a la déformation----------------------------------------------- 140 141 143 !$OMP PARALLEL 144 !$OMP DO 142 145 ydef: do j=2,ny 143 146 do i=1,nx … … 166 169 end do 167 170 end do ydef 168 171 !$OMP END DO 172 173 !$OMP DO 169 174 xdef: do j=1,ny 170 175 do i=2,nx … … 194 199 end do 195 200 end do xdef 201 !$OMP END DO 196 202 197 203 if (itracebug.eq.1) call tracebug(' diffusiv avant limit') … … 201 207 202 208 ! la limitation selon x 209 !$OMP WORKSHARE 203 210 where(.not.flgzmx(:,:)) 204 211 uxbar(:,:)=min(uxbar(:,:),ultot) … … 211 218 uybar(:,:)=max(uybar(:,:),-ultot) 212 219 end where 220 !$OMP END WORKSHARE 213 221 214 222 ! cas particulier des sommets ou il ne reste plus de neige. 223 !$OMP DO 215 224 do j=2,ny-1 216 225 do i=2,nx-1 … … 223 232 end do 224 233 end do 225 234 !$OMP END DO 235 !$OMP END PARALLEL 226 236 if (itracebug.eq.1) call tracebug(' fin diffusiv ') 227 237 -
branches/iLoveclim/SOURCES/dragging_hwat-contigu_mod.f90
r4 r77 22 22 23 23 implicit none 24 logical,dimension(nx,ny) :: fleuvemx25 logical,dimension(nx,ny) :: fleuvemy24 !logical,dimension(nx,ny) :: fleuvemx 25 !logical,dimension(nx,ny) :: fleuvemy 26 26 real,dimension(nx,ny) :: hwatmx 27 27 real,dimension(nx,ny) :: hwatmY -
branches/iLoveclim/SOURCES/dragging_hwat_contmaj_mod.f90
r9 r77 27 27 28 28 implicit none 29 logical,dimension(nx,ny) :: fleuvemx30 logical,dimension(nx,ny) :: fleuvemy29 !logical,dimension(nx,ny) :: fleuvemx 30 !logical,dimension(nx,ny) :: fleuvemy 31 31 logical,dimension(nx,ny) :: fleuve 32 32 logical,dimension(nx,ny) :: cote … … 94 94 tob_ile=betamax/2. 95 95 moteurmax=toblim 96 betamax_2d(:,:)=betamax 96 97 97 98 !------------------------------------------------------------------- -
branches/iLoveclim/SOURCES/dragging_hwat_sedim_mod.f90
r45 r77 9 9 10 10 implicit none 11 logical,dimension(nx,ny) :: fleuvemx12 logical,dimension(nx,ny) :: fleuvemy11 !logical,dimension(nx,ny) :: fleuvemx 12 !logical,dimension(nx,ny) :: fleuvemy 13 13 logical,dimension(nx,ny) :: fleuve 14 14 logical,dimension(nx,ny) :: fleuve_sedim -
branches/iLoveclim/SOURCES/dragging_hwatermax_0.2_mod.f90
r4 r77 106 106 (((hwater(i,j)+hwater(i-1,j))*0.5.gt.hwatstream) & 107 107 .and..not.flotmx(i,j)) 108 108 fleuvemx(i,j)=gzmx(i,j) 109 109 110 110 ! calcul du frottement basal (ce bloc etait avant dans neffect) … … 130 130 (((hwater(i,j)+hwater(i,j-1))*0.5.gt.hwatstream) & 131 131 .and..not.flotmy(i,j)) 132 fleuvemy(i,j)=gzmx(i,j) 132 133 133 134 ! calcul du frottement basal (ce bloc etait avant dans neffect) -
branches/iLoveclim/SOURCES/eaubasale-0.5_mod.f90
r4 r77 133 133 subroutine eaubasale !(pwater) version correspondant à la thèse de Vincent 134 134 ! A terme, il faudrait en faire un module 135 136 135 !$ USE OMP_LIB 136 !~ integer :: t1,t2,ir 137 !~ real :: temps, t_cpu_0, t_cpu_1, t_cpu, norme 138 !~ 139 !~ ! Temps CPU de calcul initial. 140 !~ call cpu_time(t_cpu_0) 141 !~ ! Temps elapsed de reference. 142 !~ call system_clock(count=t1, count_rate=ir) 137 143 138 144 … … 141 147 if (itracebug.eq.1) call tracebug(' Entree dans routine eau basale') 142 148 149 !$OMP PARALLEL 150 !$OMP WORKSHARE 143 151 vieuxhwater(:,:) = hwater(:,:) 144 152 kond(:,:) = kond0*SECYEAR … … 148 156 klimit(:,:)=0 149 157 limit_hw(:,:)=-9999. 158 !$OMP END WORKSHARE 159 !$OMP DO 150 160 do j=1,ny 151 161 do i=1,nx … … 167 177 end do 168 178 end do 169 170 171 172 do i=1,nx 173 do j=2,ny-1 179 !$OMP END DO 180 181 !$OMP DO 182 ! do j=2,ny-1 183 do j=1,ny 184 do i=1,nx 174 185 bmelt_w(i,j)=bmelt(i,j)*rofresh/ro 175 186 hwater(i,j)=max(hwater(i,j),0.) 176 187 hw(i,j)=min(hwater(i,j),hmax_wat) 177 178 188 enddo 179 189 enddo 180 190 !$OMP END DO 191 !$OMP END PARALLEL 181 192 182 193 ecoul: if (ecoulement_eau) then 183 194 ! print*,'===dans eaubasale t, dt',time,dt,'kond 1.0e-5' 184 195 ! write(6,*) 'entree ecoulement_eau' 185 186 do J=1,NY 187 do I=1,NX 196 !$OMP PARALLEL 197 !$OMP DO 198 do j=1,ny 199 do i=1,nx 188 200 tetar(i,j)=(xlong(i,j))*PI/180. ! pourrait etre fait une fois pour toute 189 201 PGX(I,J)=101*sin(tetar(i,j))*1.e-2 … … 200 212 enddo 201 213 enddo 214 !$OMP END DO 202 215 203 216 ! sorties debug 17 juillet 2007 204 debug_3D(:,:,5)=pot_w(:,:)205 debug_3D(:,:,6)=pot_f(:,:)206 debug_3D(:,:,7)=pot_w(:,:)+rofreshg*hwater(:,:)207 debug_3D(:,:,8)=hwater(:,:)208 217 ! debug_3D(:,:,5)=pot_w(:,:) 218 ! debug_3D(:,:,6)=pot_f(:,:) 219 ! debug_3D(:,:,7)=pot_w(:,:)+rofreshg*hwater(:,:) 220 ! debug_3D(:,:,8)=hwater(:,:) 221 !$OMP DO 209 222 do j=2,ny 210 223 do i=2,nx 211 224 if (H(i,j).gt.25.) then 212 213 225 ! calcul du gradient de pression 214 ! _______________________________________215 216 226 if (flotmx(i,j)) then 217 227 pgx(i,j)=(pot_f(i-1,j)-pot_f(i,j))/dx … … 225 235 pgy(i,j)=(pot_w(i,j-1)-pot_w(i,j))/dy 226 236 endif 227 228 229 237 endif 230 231 232 238 pgx(i,j)=pgx(i,j)/rofreshg ! pour passer pgx sans unité 233 239 pgy(i,j)=pgy(i,j)/rofreshg 234 240 end do 235 241 end do 236 237 242 !$OMP END DO 243 !$OMP END PARALLEL 238 244 239 245 if (nt.gt.0) then 240 246 if (dt.gt.0.) then !!!!!!!!!!!!!!!!!!!!!!relax_water si dt>0 241 242 243 247 !------------------------------------------------------------------------- 244 248 ! les points de la grounding line ont une conductivité hydraulique élevée 245 249 ! même si la base est froide. modif catritz 18 janvier 2005 246 250 !open(166,file='erreur_eau') 247 248 do J=2,NY-1 249 do I=2,NX-1250 251 !$OMP PARALLEL 252 !$OMP DO 253 do j=2,Ny-1 254 do i=2,Nx-1 251 255 ! cond=0 si glace froide et pas sur la grounding line 252 253 if ((IBASE(I,J).eq.1).and. & 256 if ((IBASE(i,j).eq.1).and. & 254 257 (.not.flot(i,j-1)).and.(.not.flot(i,j+1)).and. & 255 (.not.flot(i-1,j)).and.(.not.flot(i+1,j))) KOND( I,J)=0.! 1.0e-5258 (.not.flot(i-1,j)).and.(.not.flot(i+1,j))) KOND(i,j)=0.! 1.0e-5 256 259 257 260 ! cond infinie quand epaisseur faible et glace flottante … … 267 270 268 271 ! conductivite effective (conductivité * taille du tuyau en m2/an) 269 270 272 keff(i,j)=kond(i,j)*hw(i,j) 271 273 end do 272 274 end do 273 275 !$OMP END DO 274 276 ! condition sur les bords de la grille 275 277 !$OMP WORKSHARE 276 278 kond(1,:)=kondmax 277 279 kond(nx,:)=kondmax 278 280 kond(:,1)=kondmax 279 281 kond(:,ny)=kondmax 280 281 ! fin de la modif 18 janvier 2005---------------------------------------282 283 282 vieuxhwater(:,:) = hwater(:,:) 284 285 283 !$OMP END WORKSHARE 284 !$OMP END PARALLEL 285 !!$OMP SINGLE 286 286 call relaxation_waterdif(nxlocal,nylocal,dt,dx,vieuxhwater,limit_hw,klimit,bmelt_w,infiltr,pgx,pgy,keff,keffmax,hwater) 287 288 289 287 !!$OMP END SINGLE 290 288 else 291 289 ! print*,'dt=',dt,'pas de relax_water' … … 303 301 304 302 ! on le fait avant les butoirs pour justement pouvoir les estimer 305 303 !$OMP PARALLEL 306 304 if (dt.gt.0.) then 307 305 ! print*,'dt=',dt,'pas de relax_water' 306 !$OMP DO 308 307 do j=1,ny 309 308 do i=1,nx … … 311 310 end do 312 311 end do 312 !$OMP END DO 313 313 endif 314 314 315 315 !$OMP DO PRIVATE(Zflot) 316 316 do i=1,nx 317 317 do j=1,ny … … 353 353 ! Hwater(i,j)=hw(i,j) 354 354 ! pwater(i,j)=rog*H(I,J)*(hw(I,J)/hmax_wat)**(3.5) 355 356 357 358 359 355 endif 360 361 356 362 357 ! bloc qui pourrait servir pour mettre l'eau encore plus sous pression … … 365 360 ! pwater(i,j)=pwater(i,j)+(HWATER(i,j)-poro_till*hmax_till)/(compress_w*hmax_till) 366 361 ! endif 367 368 369 370 371 362 end do 372 363 end do 373 364 !$OMP END DO 374 365 375 366 ! ************ valeurs de HWATER pour les coins ******** … … 381 372 382 373 ! pour les sorties de flux d'eau 374 !$OMP DO 383 375 do j=2,ny 384 376 do i=2,nx … … 390 382 phiwx(i,j)=phiwx(i,j)*2*(keff(i,j)*keff(i-1,j))/(keff(i,j)+keff(i-1,j)) 391 383 endif 392 393 384 ! ligne pour sortir les pgx 394 395 385 pgx(i,j)=(pgx(i,j)+(hwater(i-1,j)-hwater(i,j))/dx) 396 386 end do 397 387 end do 398 388 !$OMP END DO 389 !$OMP DO 399 390 do j=2,ny 400 391 do i=2,nx … … 406 397 endif 407 398 pgy(i,j)=(pgy(i,j)+(hwater(i,j-1)-hwater(i,j))/dx) 408 409 399 enddo 410 400 enddo 411 412 401 !$OMP END DO 402 !$OMP END PARALLEL 413 403 414 404 else ! partie originellement dans icetemp à mettre dans un autre module … … 416 406 417 407 if (ISYNCHRO.eq.1) then 408 !$OMP PARALLEL 409 !$OMP DO 418 410 do j=1,ny 419 411 do i=1,nx … … 429 421 end do 430 422 end do 423 !$OMP END DO 424 !$OMP END PARALLEL 431 425 end if 426 432 427 endif ecoul 428 429 !~ ! Temps elapsed final 430 !~ call system_clock(count=t2, count_rate=ir) 431 !~ temps=real(t2 - t1,kind=4)/real(ir,kind=4) 432 !~ ! Temps CPU de calcul final 433 !~ call cpu_time(t_cpu_1) 434 !~ t_cpu = t_cpu_1 - t_cpu_0 435 436 !~ ! Impression du resultat. 437 !~ print '(//,3X,"Valeurs de nx et ny : ",I5,I5/, & 438 !~ & 3X,"Temps elapsed : ",1PE10.3," sec.",/, & 439 !~ & 3X,"Temps CPU : ",1PE10.3," sec.",/, & 440 !~ & 3X,"Norme (PB si /= 0) : ",1PE10.3,//)', & 441 !~ nx,ny,temps,t_cpu,norme 433 442 434 443 return -
branches/iLoveclim/SOURCES/flottab2-0.7.f90
r4 r77 16 16 module flottab_mod 17 17 18 !$ USE OMP_LIB 18 19 USE module3D_phy 19 20 use module_choix … … 112 113 ! cas particulier des runs paleo ou on impose un masque grounded 113 114 115 !$OMP PARALLEL PRIVATE(archim,surnet) 114 116 if (igrdline.eq.2) then 117 !$OMP WORKSHARE 115 118 where ( mk_init(:,:).eq.1) ! pose 116 119 flot(:,:) = .False. … … 120 123 flot(:,:) = .True. 121 124 end where 125 !$OMP END WORKSHARE 122 126 end if 123 127 … … 129 133 130 134 appel_new_flot=.false. 135 !$OMP DO 131 136 do j=1,ny 132 137 do i=1,nx … … 136 141 enddo 137 142 enddo 138 143 !$OMP END DO 144 139 145 ! ICE(:,:)=(H(:,:).gt.1) ! ice=.true. si epaisseur > 1m 140 146 147 !$OMP WORKSHARE 141 148 ICE(:,:)=0 142 149 front(:,:)=0 … … 148 155 cotemy(:,:)=.false. 149 156 boost=.false. 157 !$OMP END WORKSHARE 150 158 151 159 ! fin de l'initialisation … … 155 163 ! ------------------------------------- 156 164 157 165 !$OMP DO 158 166 do j=1,ny 159 167 do i=1,nx … … 223 231 end do 224 232 end do 225 233 !$OMP END DO 226 234 227 235 !!$ do i=1,nx … … 240 248 241 249 !----------------------------------------------------------------------- 242 250 !$OMP DO 243 251 domain_x: do j=1,ny 244 252 do i=2,nx … … 280 288 end do 281 289 end do domain_x 282 283 if (itracebug.eq.1) call tracebug(' routine flottab apres domain_x')290 !$OMP END DO 291 !if (itracebug.eq.1) call tracebug(' routine flottab apres domain_x') 284 292 285 293 ! 3_y B- NOUVELLE DEFINITION DE FLOTMY 286 294 ! -------------------------------- 295 !$OMP DO 287 296 domain_y: do j=2,ny 288 297 do i=1,nx … … 318 327 end do 319 328 end do domain_y 320 329 !$OMP END DO 321 330 322 331 … … 351 360 ! 4- determination des iles 352 361 ! ------------------------- 353 362 !$OMP WORKSHARE 354 363 ilemx(:,:)=.false. 355 364 ilemy(:,:)=.false. 356 357 ! selon x 365 !$OMP END WORKSHARE 366 367 ! selon x 368 !$OMP DO 358 369 ilesx: do j=2,ny-1 359 370 do i=3,nx-2 … … 404 415 end do 405 416 end do ilesx 406 407 ! selon y 417 !$OMP END DO 418 419 ! selon y 420 !$OMP DO 408 421 ilesy: do j=3,ny-2 409 422 do i=2,nx-1 … … 452 465 end do 453 466 end do ilesy 467 !$OMP END DO 468 !$OMP END PARALLEL 454 469 ! fin des iles 455 470 … … 479 494 480 495 ! 6- calcule les vitesses des points qui sont devenus gzm 481 496 !$OMP PARALLEL 497 !$OMP DO 482 498 do j=1,ny 483 499 do i=2,nx-1 … … 492 508 end do 493 509 end do 494 510 !$OMP END DO 511 512 !$OMP DO 495 513 do j=2,ny-1 496 514 do i=1,nx … … 504 522 end do 505 523 end do 506 524 !$OMP END DO 507 525 508 526 … … 511 529 512 530 if (nt.ge.2) then ! pour ne pas faire ce calcul lors du premier passage 531 !$OMP WORKSHARE 513 532 uxbar(:,:)=uxs1(:,:) 514 uybar(:,:)=uys1(:,:) 533 uybar(:,:)=uys1(:,:) 534 !$OMP END WORKSHARE 515 535 endif 516 536 537 !$OMP WORKSHARE 517 538 flgzmx(:,:)=(marine.and.(flotmx(:,:).or.gzmx(:,:).or.ilemx(:,:))) & 518 539 .or.(.not.marine.and.flotmx(:,:)) 519 540 flgzmy(:,:)=(marine.and.(flotmy(:,:).or.gzmy(:,:).or.ilemy(:,:))) & 520 541 .or.(.not.marine.and.flotmy(:,:)) 521 542 !$OMP END WORKSHARE 522 543 523 544 … … 526 547 ! fbm est vrai si le point est flottant mais un des voisins est pose 527 548 !_________________________________________________________________________ 549 !$OMP DO 528 550 do j=2,ny-1 529 551 do i=2,nx-1 … … 536 558 end do 537 559 end do 538 560 !$OMP END DO 539 561 540 562 … … 552 574 !!$end do 553 575 576 !$OMP WORKSHARE 554 577 where (flot(:,:)) 555 578 where (H(:,:).gt.(1.1)) … … 565 588 end where 566 589 end where 590 !$OMP END WORKSHARE 591 !$OMP END PARALLEL 567 592 568 593 call DETERMIN_TACHE … … 581 606 !----------------------------------------------! 582 607 !On determine les differents ice strean/shelf ! 583 call DETERMIN_TACHE !608 ! call DETERMIN_TACHE ! 584 609 !----------------------------------------------! 585 610 … … 594 619 !!$end if 595 620 596 ! / test aurel597 debug_3d(:,:,43)=table_out(:,:)598 599 iceberg(:)=.true.600 do j=1,ny601 do i=1,nx602 if(.not.flot(i,j)) then603 iceberg(table_out(i,j))=.false.604 end if605 end do606 end do607 608 do j=1,ny609 do i=1,nx610 611 debug_3d(i,j,56)=nb_pts_tache(table_out(i,j))612 if (iceberg(table_out(i,j))) then613 debug_3d(i,j,57)=1614 else615 debug_3d(i,j,57)=0616 end if617 end do618 end do619 ! fin test aurel /620 621 622 621 !ice(:,:)=0 Attention, voir si ca marche toujours pour l'Antarctique et heminord ! 623 622 624 623 !On compte comme englacé uniquement les calottes dont une partie est posée 625 626 do i=3,nx-2 627 do j=3,ny-2 624 !$OMP PARALLEL PRIVATE(smax_,smax_coord,smax_i,smax_j,mask_tache_ij) 625 !$OMP DO 626 do j=3,ny-2 627 do i=3,nx-2 628 628 test1: if (.not.iceberg(table_out(i,j))) then ! on est pas sur un iceberg 629 629 if (nb_pts_tache(table_out(i,j)).ge.1) then … … 692 692 end do 693 693 end do 694 694 !$OMP END DO 695 !$OMP END PARALLEL 695 696 696 697 !---------------------------------------------- … … 717 718 !print*, 'front',front(50,30),ice(50,30),flotmx(i,j),uxbar(i,j) 718 719 719 720 721 720 end subroutine flottab 722 721 !-------------------------------------------------------------------- … … 726 725 !> 727 726 subroutine determin_tache 727 728 !$ USE OMP_LIB 728 729 729 730 implicit none … … 746 747 enddo 747 748 ! table_in = .false. 748 749 !$OMP PARALLEL 750 !$OMP WORKSHARE 749 751 table_out(:,:) = 0 750 752 iceberg(:) = .true. 751 753 icetrim (:) = .true. 752 754 nb_pts_tache(:) = 0 753 755 !$OMP END WORKSHARE 756 !$OMP END PARALLEL 754 757 ! open(unit=100,file="tache.data",status='replace') 755 758 756 759 ! 2-reperage des taches 757 760 !---------------------- 758 do i=2,nx-1 759 do j=2,ny-1 761 762 do j=2,ny-1 763 do i=2,nx-1 760 764 761 765 762 766 763 767 IF (ice(i,j).ge.1) THEN ! on est sur la glace-----------------------------! 764 768 765 769 if ((ice(i-1,j).ge.1).or.(ice(i,j-1).ge.1)) then !masque de 2 cases adjacentes 766 770 ! un des voisins est deja en glace … … 773 777 if (mask(indice).gt.0) label=min(label,mask(indice)) 774 778 enddo 779 !cdc label=min(label,minval(mask(:), mask=mask > 0)) 775 780 776 781 !on fixe la valeur de la tache voisine minimun au point etudie (via label) … … 829 834 ! On reorganise compt en ecrivant le numero de la tache fondamentale 830 835 ! i.e. du plus petit numero present sur la tache (Sans utiliser de recursivité) 831 ! On indique aussi le nb de point que contient chaque taches (nb_pts_tache) 836 ! On indique aussi le nb de point que contient chaque taches (nb_pts_tache) 837 832 838 do indice=1,label_max 833 839 vartemp = compt(indice) … … 839 845 enddo 840 846 841 do i=1,nx 842 do j=1,ny 847 !$OMP PARALLEL 848 !$OMP DO REDUCTION(+:nb_pts_tache) 849 do j=1,ny 850 do i=1,nx 843 851 if (table_out(i,j).ne.0) then 844 852 table_out(i,j)=compt(table_out(i,j)) … … 847 855 enddo 848 856 enddo 849 850 857 !$OMP END DO 858 !$OMP END PARALLEL 851 859 852 860 … … 879 887 !> 880 888 subroutine determin_front 881 889 !!$ USE OMP_LIB 882 890 integer :: i_moins1,i_plus1,i_plus2 883 891 integer :: j_moins1,j_plus1,j_plus2 884 892 885 do i=3,nx-2 886 do j=3,ny-2 893 !$OMP PARALLEL 894 !$OMP DO 895 do j=3,ny-2 896 do i=3,nx-2 887 897 888 898 surice:if (ice(i,j).eq.0) then … … 936 946 end do 937 947 end do 938 948 !$OMP END DO 949 !$OMP ENd PARALLEL 939 950 940 951 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf) … … 949 960 950 961 ! print*,'dans remplissage baies',time 962 951 963 baies: do k=1,2 964 !$OMP PARALLEL 965 !$OMP DO PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1,i_plus2,j_plus2) 952 966 do j=1,ny 953 967 do i=1,nx … … 984 998 end do 985 999 end do 1000 !$OMP END DO 1001 !$OMP END PARALLEL 986 1002 end do baies 987 1003 … … 995 1011 !!$end if 996 1012 997 998 do i=2,nx-1 999 do j=2,ny-1 1013 !$OMP PARALLEL 1014 !$OMP DO 1015 do j=2,ny-1 1016 do i=2,nx-1 1000 1017 1001 1018 if (ice(i,j).eq.1) then ! test si ice=1 … … 1009 1026 end do 1010 1027 end do 1028 !$OMP END DO 1011 1029 1012 1030 ! traitement des bords. On considere que l'exterieur n'a pas de glace 1013 1031 ! attention ce n'est vrai que sur la grande grille 1014 1032 1015 1033 !$OMP DO PRIVATE(i) 1016 1034 do j=2,ny-1 1017 1035 i=1 … … 1020 1038 front(i,j)=(ice(i-1,j)+ice(i,j+1)+ice(i,j-1)) 1021 1039 end do 1022 1040 !$OMP END DO 1041 1042 !$OMP DO PRIVATE(j) 1023 1043 do i=2,nx-1 1024 1044 j=1 … … 1027 1047 front(i,j)=(ice(i-1,j)+ice(i+1,j)+ice(i,j-1)) 1028 1048 end do 1049 !$OMP END DO 1029 1050 1030 1051 ! traitement des coins … … 1049 1070 ! si ces deux taches sont posées (ou une des deux), il n'y a pas assez de conditions aux limites 1050 1071 1051 1072 !$OMP DO 1052 1073 do j=1,ny 1053 1074 do i=1,nx-1 … … 1062 1083 end do 1063 1084 end do 1064 1085 !$OMP END DO 1086 1087 !$OMP DO 1065 1088 do j=1,ny-1 1066 1089 do i=1,nx … … 1075 1098 end do 1076 1099 end do 1100 !$OMP END DO 1077 1101 1078 1102 !isolx signifie pas de voisins en x … … 1082 1106 1083 1107 ! calcul de frontfacex et isolx 1108 !$OMP DO 1084 1109 do j=1,ny 1085 1110 do i=2,nx-1 … … 1101 1126 end do 1102 1127 end do 1128 !$OMP END DO 1103 1129 1104 1130 ! calcul de frontfacey et isoly 1131 !$OMP DO 1105 1132 do j=2,ny-1 1106 1133 do i=1,nx … … 1122 1149 end do 1123 1150 end do 1124 1151 !$OMP END DO 1125 1152 1126 1153 … … 1128 1155 ! attention ce n'est vrai que sur la grande grille 1129 1156 1130 1157 !$OMP DO PRIVATE(i) 1131 1158 do j=2,ny-1 1132 1159 i=1 … … 1147 1174 end if 1148 1175 end do 1149 1176 !$OMP END DO 1177 1178 !$OMP DO PRIVATE(j) 1150 1179 do i=2,nx-1 1151 1180 j=1 … … 1166 1195 end if 1167 1196 end do 1168 1169 1197 !$OMP END DO 1198 !$OMP END PARALLEL 1170 1199 1171 1200 return -
branches/iLoveclim/SOURCES/initial-0.3.f90
r35 r77 30 30 use sorties_ncdf_grisli 31 31 use util_recovery 32 character(len=80) :: filinit33 32 34 33 !------------------------------------------------------------------------------------- -
branches/iLoveclim/SOURCES/litho-0.4.f90
r4 r77 37 37 38 38 39 subroutine litho 39 subroutine litho 40 !$ USE OMP_LIB 41 USE module3D_phy 42 USE param_phy_mod 43 USE ISO_DECLAR ! module de declaration des variables specifiques a l'isostasie 40 44 41 USE module3D_phy 42 USE param_phy_mod 43 USE ISO_DECLAR ! module de declaration des variables specifiques a l'isostasie 45 implicit none 44 46 45 implicit none 46 47 INTEGER :: IP,JP,LPX,LPY,II,SOM1,SOM2 48 REAL, dimension(:,:), allocatable :: WLOC 47 INTEGER :: II,SOM1,SOM2 48 REAL, dimension(:,:), allocatable :: WLOC 49 49 50 50 51 !----- allocation de WLOC et de croix -----------51 !----- allocation de WLOC et de croix ----------- 52 52 53 54 55 56 57 58 59 53 if (.not.allocated(WLOC)) THEN 54 allocate(WLOC(-LBLOC:LBLOC,-LBLOC:LBLOC),stat=err) 55 if (err/=0) then 56 print *,"Erreur a l'allocation du tableau WLOC",err 57 stop 4 58 end if 59 end if 60 60 61 !----- fin de l'allocation --------------61 !----- fin de l'allocation -------------- 62 62 63 ! calcul de la deflexion par sommation des voisins appartenant64 ! au bloc de taille 2*LBLOC65 66 63 ! calcul de la deflexion par sommation des voisins appartenant 64 ! au bloc de taille 2*LBLOC 65 som1=0. 66 som2=0. 67 67 68 ! On somme aussi les contributions des points exterieurs au domaine 69 ! lorsque la charge est due a l'ocean. On suppose alors que 70 ! ces points ont la meme charge que les limites 71 72 boucleij : do J=1,NY 73 do I=1,NX 68 ! On somme aussi les contributions des points exterieurs au domaine 69 ! lorsque la charge est due a l'ocean. On suppose alors que 70 ! ces points ont la meme charge que les limites 71 !$OMP PARALLEL 72 !$OMP DO PRIVATE(Wloc) 73 boucleij : do J=1,NY 74 do I=1,NX 74 75 75 76 76 77 77 W1(I,J)=0. 78 ! ii=0 78 79 79 ! Wloc : enfoncement centre sur ij du a chaque charges autour80 80 ! Wloc : enfoncement centre sur ij du a chaque charges autour 81 Wloc(:,:) = We(:,:) * charge(i-lbloc:i+lbloc,j-lbloc:j+lbloc) 81 82 82 83 83 84 W1(i,j) = sum (Wloc(:,:)) ! effet en ij de toutes les charges autour (distance < lbloc) 84 85 85 ! ------------------------ FIN DE L'INTEGRATION SUR LE PAVE LBLOC86 87 86 ! ------------------------ FIN DE L'INTEGRATION SUR LE PAVE LBLOC 87 ! som1=som1+W1(I,J) 88 ! som2=som2-charge(I,J)/ROMG 88 89 89 end do 90 end do boucleij 91 92 ! write(6,*)'enfoncement total avec rigidite de la lithosphere:', 93 ! & som1 94 ! write(6,*)'enfoncement total avec isostasie locale :', 95 ! & som2 90 end do 91 end do boucleij 92 !$OMP END DO 93 !$OMP END PARALLEL 94 95 ! write(6,*)'enfoncement total avec rigidite de la lithosphere:', 96 ! & som1 97 ! write(6,*)'enfoncement total avec isostasie locale :', 98 ! & som2 96 99 97 100 98 99 101 end subroutine litho 102 -
branches/iLoveclim/SOURCES/mix-SIA-L1_mod.f90
r4 r77 53 53 subroutine mix_SIA_L1 54 54 55 !$ USE OMP_LIB 56 ! variables parallelisation openMP 57 !!$ integer :: rang ,nb_taches 55 58 56 59 ! subroutine qui associe SIA et L1 … … 59 62 60 63 ! use module_choix 61 64 if (itracebug.eq.1) call tracebug(' routine mix_SIA_L1') 62 65 63 66 debug_3D(:,:,9)=0. … … 73 76 ! que celles du L1. On garde le L1 comme vitesse basale. 74 77 ! version utilisee pour les runs MIS11 de Cairns 75 78 !$OMP PARALLEL 79 !$OMP DO 76 80 do j=2,ny 77 81 do i=2,nx … … 95 99 end do 96 100 end do 101 !$OMP END DO 102 !$OMP END PARALLEL 97 103 98 104 else if (i_resolmeca.eq.2) then 99 105 100 106 ! addition systematique 101 107 ! !$OMP PARALLEL PRIVATE(rang,nb_taches) 108 ! !$ rang=OMP_GET_THREAD_NUM() 109 ! !$ nb_taches=OMP_GET_NUM_THREADS() 110 ! !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 111 !$OMP PARALLEL 112 !$OMP DO 102 113 do j=2,ny 103 114 do i=2,nx 115 ! test sur tout le tableau : 104 116 if (flgzmx(i,j)) then 105 debug_3D(i,j,11)=uxflgz(i,j)117 ! debug_3D(i,j,11)=uxflgz(i,j) 106 118 uxbar(i,j)=uxflgz(i,j)+uxdef(i,j) ! on ajoute la deform. SIA 107 119 ubx(i,j) = uxflgz(i,j) 108 do k=1,nz 120 ! do k=1,nz 121 ! ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz 122 ! end do 123 124 ! debug_3D(i,j,9)=uxdef(i,j) 125 endif 126 127 if (flgzmy(i,j)) then 128 ! debug_3D(i,j,12)=uyflgz(i,j) 129 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA 130 uby(i,j) = uyflgz(i,j) 131 ! do k=1,nz 132 ! uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz 133 ! end do 134 135 ! debug_3D(i,j,10)=uydef(i,j) 136 endif 137 end do 138 end do 139 !$OMP END DO 140 !$OMP END PARALLEL 141 142 ! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt 143 if (isynchro.eq.1) then 144 ! !$OMP PARALLEL PRIVATE(rang,nb_taches) 145 ! !$ rang=OMP_GET_THREAD_NUM() 146 ! !$ nb_taches=OMP_GET_NUM_THREADS() 147 ! !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 148 !$OMP PARALLEL 149 !$OMP DO 150 do j=2,ny 151 do i=2,nx 152 if (flgzmx(i,j)) then 153 do k=1,nz 109 154 ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz 110 155 end do 111 112 debug_3D(i,j,9)=uxdef(i,j) 113 end if 114 156 endif 115 157 if (flgzmy(i,j)) then 116 debug_3D(i,j,12)=uyflgz(i,j) 117 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA 118 uby(i,j) = uyflgz(i,j) 119 do k=1,nz 158 do k=1,nz 120 159 uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz 121 160 end do 122 123 debug_3D(i,j,10)=uydef(i,j) 124 end if 125 end do 126 end do 127 128 161 endif 162 enddo 163 enddo 164 !$OMP END DO 165 !$OMP END PARALLEL 166 endif 129 167 130 168 else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv) -
branches/iLoveclim/SOURCES/moy_mxmy.f90
r4 r77 18 18 subroutine moy_mxmy(n1,n2,X2D,X_mx,X_my) 19 19 ! fait la moyenne ponderee d'un tableau X2D sur les mailles staggered 20 20 !$ USE OMP_LIB 21 21 implicit none 22 22 integer, intent(in) :: n1,n2 !< dimension des tableaux … … 29 29 30 30 31 !$OMP PARALLEL PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1) 32 !$OMP DO 33 do j=1,n2 34 do i=1,n1 35 i_moins1=max(1,i-1) 36 j_moins1=max(1,j-1) 37 i_plus1=min(n1,i+1) 38 j_plus1=min(n2,j+1) 31 39 32 do j=1,n2 33 do i=1,n1 34 i_moins1=max(1,i-1) 35 j_moins1=max(1,j-1) 36 i_plus1=min(n1,i+1) 37 j_plus1=min(n2,j+1) 38 39 X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) & 40 X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) & 40 41 + 0.125*((X2D(i_moins1,j_plus1)+X2D(i,j_plus1)) & 41 42 + (X2D(i_moins1,j_moins1)+X2D(i,j_moins1))) 42 43 43 44 X_my(i,j)=0.25*(X2D(i,j)+X2D(i,j_moins1)) & 44 45 + 0.125*((X2D(i_plus1,j_moins1)+X2D(i_plus1,j)) & 45 46 + (X2D(i_moins1,j_moins1)+X2D(i_moins1,j))) 46 47 48 end do49 end do 47 end do 48 end do 49 !$OMP END DO 50 !$OMP END PARALLEL 50 51 51 52 return -
branches/iLoveclim/SOURCES/neffect-0.4.f90
r4 r77 24 24 implicit none 25 25 26 !!!! real pwater,N1,N2,XFRAC,SLOPEM,uxmy,uymx 27 28 real XFRAC,SLOPEM,uxmy,uymx 29 ! real,dimension(nx,ny) :: pwater !!! global var 30 real pentem,toslid,topente,neffoto,fonction_N 31 real,dimension(nx,ny) :: table_interm 26 ! real,dimension(nx,ny) :: table_interm 32 27 real :: Nefmin=1.e5 ! Pression effective minimum (~ 10 m de glace) 33 28 -
branches/iLoveclim/SOURCES/next-time.f90
r4 r77 21 21 real (kind=kind(0.d0)) :: time 22 22 real (kind=kind(0.d0)) :: time_loc 23 real (kind=kind(0.d0)) :: test_time24 23 real (kind=kind(0.d0)) :: time2_loc 25 24 real (kind=kind(0.d0)) :: timesup -
branches/iLoveclim/SOURCES/no_spinup_mod.f90
r4 r77 14 14 module no_spinup 15 15 16 use module3d_phy 16 17 17 18 contains … … 22 23 subroutine init_spinup 23 24 24 use module3d_phy25 25 implicit none 26 26 -
branches/iLoveclim/SOURCES/out_cptr_mod.f90
r32 r77 387 387 character(len=20),dimension(4) :: dimnames3d !< pour 3d troisieme dim est nz 388 388 character(len=20),dimension(4) :: dimnames3dT !< pour 3d troisieme dim est nz+nzm 389 integer :: nrecs=1 !< compteur pour les enregistrements temps des variables390 integer :: idef=0 !< pour savoir si la variable a ete definie ou non389 ! integer :: nrecs=1 !< compteur pour les enregistrements temps des variables 390 ! integer :: idef=0 !< pour savoir si la variable a ete definie ou non 391 391 integer :: isortie !< pour le choix de type de fichier en sortie 392 392 -
branches/iLoveclim/SOURCES/out_horiz_mod.f90
r32 r77 76 76 integer :: i2 77 77 integer :: i3 78 integer :: i,j,k !< indices de travail78 integer :: k !< indices de travail 79 79 80 80 integer :: num_dat = 21 … … 197 197 integer :: ifin 198 198 integer :: npr 199 integer :: i ,j,k! indices de travail199 integer :: i ! indices de travail 200 200 201 201 … … 284 284 real :: maxcol 285 285 real :: coef 286 integer :: i,j,k ! indices de travail287 286 288 287 npos=npos+1 -
branches/iLoveclim/SOURCES/out_profile_mod.f90
r4 r77 146 146 integer :: numtime 147 147 !integer :: nmax 148 integer :: n ,l148 integer :: n 149 149 integer, dimension(:), allocatable :: nbr_ligne_prof 150 150 integer :: nbr_ligne_total -
branches/iLoveclim/SOURCES/relaxation_water_diffusion.f90
r45 r77 12 12 13 13 14 15 14 16 CONTAINS 15 17 16 18 17 19 subroutine relaxation_waterdif(NXX,NYY,DT,DX,vieuxHWATER,limit_hw,klimit,BMELT,INFILTR,PGMX,PGMY,KOND,KONDMAX,HWATER) 18 implicit none 20 21 !$ USE OMP_LIB 22 23 implicit none 19 24 20 25 … … 48 53 REAL :: RESTE,DELH,VH 49 54 INTEGER :: ntour 50 INTEGER :: mbord51 55 REAL :: DTSRGDX,dtwdx2 52 56 LOGICAL :: STOPP … … 56 60 57 61 ! write(166,*)' entree relaxation waterdif' 62 !$OMP PARALLEL 63 !$OMP WORKSHARE 58 64 HWATER(:,:)= vieuxHWATER(:,:) 59 65 !$OMP END WORKSHARE 60 66 ! calcul de kmx et kmx a partir de KOND 61 67 ! conductivite hyrdraulique sur les noeuds mineurs 62 68 ! moyenne harmonique 63 69 ! ---------------------------------------- 64 70 !$OMP DO 65 71 do j=2,nyy 66 72 do i=2,nxx … … 74 80 end do 75 81 end do 76 82 !$OMP END DO 83 84 !$OMP DO 77 85 do j=2,nyy 78 86 do i=2,nxx … … 85 93 enddo 86 94 enddo 87 95 !$OMP END DO 88 96 89 97 ! attribution des coefficients arelax .... … … 99 107 dtwdx2=dt/dx/dx 100 108 101 arelax(:,:)=0. 102 brelax(:,:)=0. 103 crelax(:,:)=1. 104 drelax(:,:)=0. 105 erelax(:,:)=0. 106 frelax(:,:)=limit_hw(:,:) 107 108 109 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 110 119 do J=2,NYY-1 111 120 do I=2,NXX-1 112 121 113 122 if (klimit(i,j).eq.0) then 114 115 123 ! calcul du vecteur 116 117 124 FRELAX(I,J)= VIEUXHWATER(I,J)+(BMELT(I,J)-INFILTR)*DT 118 125 frelax(i,j)=frelax(i,j)+(kmx(i,j)*pgmx(i,j)-kmx(i+1,j)*pgmx(i+1,j))*dtsrgdx 119 126 frelax(i,j)=frelax(i,j)+(kmy(i,j)*pgmy(i,j)-kmy(i,j+1)*pgmy(i,j+1))*dtsrgdx 120 121 127 ! calcul des diagonales 122 128 arelax(i,j)=-kmx(i,j)*dtwdx2 ! arelax : diagonale i-1,j … … 130 136 crelax(i,j)=1.+((kmx(i,j)+kmx(i+1,j))+(kmy(i,j)+kmy(i,j+1)))*dtwdx2 131 137 !crelax : diagonale i,j 132 133 138 else if (klimit(i,j).eq.1) then 134 139 hwater(i,j)=limit_hw(i,j) 135 140 ! write(6,*) i,j,hwater(i,j),crelax(i,j),frelax(i,j),arelax(i,j) 136 137 141 endif 138 139 142 end do 140 143 end do 141 142 144 !$OMP END DO 145 !$OMP END PARALLEL 143 146 144 147 ! Boucle de relaxation : … … 151 154 ntour=ntour+1 152 155 ! write(6,*) 'boucle de relaxation numero',ntour 153 156 !$OMP PARALLEL 157 !$OMP DO PRIVATE(reste) 154 158 do j=2,NYY-1 155 159 do i=2,NXX-1 … … 160 164 161 165 DELTAH(I,J) = RESTE/CRELAX(I,J) 162 163 166 end do 164 167 end do 165 166 deltah(:,:)=min(deltah(:,:),10.) 167 deltah(:,:)=max(deltah(:,:),-10.) 168 169 170 168 !$OMP END DO 169 170 !$OMP WORKSHARE 171 deltah(:,:)=min(deltah(:,:),10.) 172 deltah(:,:)=max(deltah(:,:),-10.) 173 !$OMP END WORKSHARE 171 174 ! il faut faire le calcul suivant dans une autre boucle car RESTE est fonction 172 175 ! de hwater sur les points voisins. 176 !$OMP DO 173 177 do j=2,NYY-1 174 178 do i=2,NXX-1 175 179 HWATER(I,J) = HWATER(I,J) - DELTAH(I,J) 176 177 180 end do 178 181 end do 179 182 !$OMP END DO 180 183 181 184 ! critere d'arret: 182 183 184 185 185 Delh=0 186 186 Vh=0 187 187 188 !$OMP DO REDUCTION(+:Delh) 188 189 DO j=2,NYY-1 189 190 DO i=2,NXX-1 190 191 191 192 ! write(166,*) I,J,delh,deltah(i,j) 192 193 Delh=Delh+deltah(i,j)**2 193 194 ! Vh=Vh+h(i,j)**2. 194 195 END DO 195 196 END DO 196 197 !$OMP END DO 198 !$OMP END PARALLEL 197 199 ! write(6,*) delh,maxval(deltah),minval(deltah) 198 200 ! testh=SQRT(Delh/Vh) -
branches/iLoveclim/SOURCES/resol_adv_diff_2D-sept2009.f90
r4 r77 101 101 subroutine resol_adv_diff_2D_vect(Dfx,Dfy,advx,advy,H_presc,i_Hpresc,bil,vieuxH,newH) 102 102 103 !$ USE OMP_LIB 103 104 implicit none 104 105 … … 146 147 147 148 148 integer :: it1,it2,jt1,jt2 ! pour des tests d'asymétrie149 150 151 149 if (itracebug.eq.1) call tracebug(' Entree dans routine resolution_diffusion') 152 150 153 151 !$OMP PARALLEL 152 !$OMP WORKSHARE 154 153 ! calcul de bdx et hdx 155 154 hdx(:,:)=dx1*(vieuxH(:,:)-eoshift(vieuxH(:,:),shift=-1,boundary=0.,dim=1)) … … 167 166 Frelax(:,:)=0. 168 167 DeltaH(:,:)=0. 169 168 !$OMP END WORKSHARE 170 169 171 170 ! schema spatial 172 171 173 172 if (upwind.eq.1.) then !schema amont 174 173 !$OMP WORKSHARE 175 174 where (Advx(:,:).ge.0.) 176 175 c_west(:,:)=1. … … 188 187 c_north(:,:)=1. 189 188 end where 190 189 !$OMP END WORKSHARE 191 190 else if (upwind.lt.1.) then ! schema centre 191 !$OMP WORKSHARE 192 192 c_west(:,:)=0.5 193 193 c_east(:,:)=0.5 194 194 c_south(:,:)=0.5 195 195 c_north(:,:)=0.5 196 !$OMP END WORKSHARE 196 197 end if 197 198 199 198 200 ! attribution des elements des diagonales 201 !$OMP DO PRIVATE(frdx,frdy,fraxw,fraxe,frays,frayn) 199 202 do j=2,ny-1 200 203 do i=2,nx-1 … … 257 260 end do 258 261 end do 259 260 262 !$OMP END DO 263 264 !$OMP WORKSHARE 261 265 where (i_hpresc(:,:) .eq.1) ! thickness prescribed 262 266 frelax(:,:) = H_presc(:,:) … … 267 271 erelax(:,:) = 0. 268 272 end where 273 !$OMP END WORKSHARE 274 !$OMP END PARALLEL 269 275 270 276 stopp = .false. 271 277 ntour=0 272 278 273 274 275 279 relax_loop: do while(.not.stopp) 276 280 ntour=ntour+1 277 278 281 !$OMP PARALLEL 282 !$OMP DO PRIVATE(reste) 279 283 do j=2,ny-1 280 284 do i=2,nx-1 … … 284 288 + crelax(i,j)*newH(i,j))- frelax(i,j) 285 289 286 if (ntour.eq.1) debug_3D(i,j,49)=(((arelax(i,j)*newH(i-1,j) +drelax(i,j)*newH(i,j-1)) &287 + (brelax(i,j)*newH(i+1,j) + erelax(i,j)*newH(i,j+1))) &288 + crelax(i,j)*newH(i,j))290 !if (ntour.eq.1) debug_3D(i,j,49)=(((arelax(i,j)*newH(i-1,j) +drelax(i,j)*newH(i,j-1)) & 291 ! + (brelax(i,j)*newH(i+1,j) + erelax(i,j)*newH(i,j+1))) & 292 ! + crelax(i,j)*newH(i,j)) 289 293 290 294 … … 293 297 end do 294 298 end do 295 296 debug_3D(:,:,50)=arelax(:,:) 297 debug_3D(:,:,51)=brelax(:,:) 298 debug_3D(:,:,52)=crelax(:,:) 299 debug_3D(:,:,53)=drelax(:,:) 300 debug_3D(:,:,54)=erelax(:,:) 301 debug_3D(:,:,55)=frelax(:,:) 302 303 304 299 !$OMP END DO 300 301 !debug_3D(:,:,50)=arelax(:,:) 302 !debug_3D(:,:,51)=brelax(:,:) 303 !debug_3D(:,:,52)=crelax(:,:) 304 !debug_3D(:,:,53)=drelax(:,:) 305 !debug_3D(:,:,54)=erelax(:,:) 306 !debug_3D(:,:,55)=frelax(:,:) 307 308 309 !$OMP WORKSHARE 305 310 newH(:,:)=newH(:,:)-deltaH(:,:) 306 307 311 !$OMP END WORKSHARE 312 !$OMP END PARALLEL 308 313 309 314 … … 313 318 delh=0 314 319 315 320 !$OMP PARALLEL 321 !$OMP DO REDUCTION(+:delh) 316 322 do j=2,ny-1 317 323 do i=2,nx-1 … … 319 325 end do 320 326 end do 327 !$OMP END DO 328 !$OMP END PARALLEL 321 329 322 330 if (delh.gt.0.) then … … 333 341 334 342 ! thickness at the upwind node 335 do j = 1, ny 336 do i = 2, nx 337 debug_3D(i,j,92) = c_west(i,j) * newH(i-1,j) + c_east(i,j) * newH(i,j) 338 end do 339 end do 340 do j = 2, ny 341 do i = 1, nx 342 debug_3D(i,j,93) = c_south(i,j) * newH(i,j-1) + c_north(i,j) * newH(i,j) 343 end do 344 end do 345 346 if (itracebug.eq.1) call tracebug(' fin routine resolution_diffusion') 343 !do j = 1, ny 344 ! do i = 2, nx 345 ! debug_3D(i,j,92) = c_west(i,j) * newH(i-1,j) + c_east(i,j) * newH(i,j) 346 ! end do 347 !end do 348 !do j = 2, ny 349 ! do i = 1, nx 350 ! debug_3D(i,j,93) = c_south(i,j) * newH(i,j-1) + c_north(i,j) * newH(i,j) 351 ! end do 352 !end do 353 354 if (itracebug.eq.1) call tracebug(' fin routine resolution_diffusion') 355 356 347 357 return 348 358 -
branches/iLoveclim/SOURCES/snaptime.f90
r4 r77 24 24 double precision :: tunit 25 25 integer :: ipuissance 26 integer :: itime ,m26 integer :: itime 27 27 character(len=1) :: signe,unit,mm 28 28 character(len=1),dimension (4) :: unittab -
branches/iLoveclim/SOURCES/spinup_mod.f90
r31 r77 516 516 517 517 implicit none 518 real,dimension(nx,ny) :: corr_ghf !< correction du gflux geothermique519 518 real,dimension(nx,ny) :: coefdef_maj !< coefficient deformation 520 519 real :: increment_ghf -
branches/iLoveclim/SOURCES/steps_time_loop.f90
r52 r77 340 340 if (itracebug.eq.1) call tracebug(' Dans spinup_3_bed') 341 341 342 if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then 343 call bedrock() ! bedrock adjustment 342 ! if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then 343 if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1.and.(mod(abs(TIME),50.).lt.dtmin)) then 344 call bedrock ! bedrock adjustment 344 345 endif 345 346 -
branches/iLoveclim/SOURCES/tab-litho-0.3.f90
r10 r77 47 47 open(num_kelvin,file=trim(dirnameinp)//'../kelvin.res') 48 48 read(num_kelvin,*) 49 do K= 1,NK49 do K=0,NK 50 50 read(num_kelvin,*) XL,kei(K) 51 51 end do -
branches/iLoveclim/SOURCES/taubed-0.3.f90
r4 r77 43 43 subroutine taubed() 44 44 45 !$USE OMP_LIB 45 46 USE module3D_phy 46 47 USE param_phy_mod … … 52 53 ! NLITH est defini dans isostasie et permet le choix du modele d'isostasie 53 54 55 54 56 if (NLITH.eq.1) then 55 57 ! avec rigidite de la lithosphere 58 !$OMP PARALLEL 59 !$OMP DO 56 60 do J=1,NY 57 61 do I=1,NX … … 65 69 end do 66 70 end do 67 71 !$OMP END DO 68 72 69 73 ! il faut remplir CHARGE dans les parties a l'exterieur de la grille : 70 74 ! a l'exterieur de la grille CHARGE est egale a la valeur sur le bord 71 75 !$OMP DO 72 76 do J=1,NY 73 77 CHARGE(1-LBLOC:0,J)=CHARGE(1,J) ! bord W 74 78 CHARGE(NX+1:NX+LBLOC,J)=CHARGE(NX,J) ! bord E 75 79 end do 80 !$OMP END DO 81 !$OMP DO 76 82 do I=1,NX 77 83 CHARGE(I,1-LBLOC:0)=CHARGE(I,1) ! bord S 78 84 CHARGE(I,NY+1:NY+LBLOC)=CHARGE(I,NY) ! bord N 79 85 end do 86 !$OMP END DO 80 87 81 88 ! valeur dans les quatres coins exterieurs au domaine 89 !$OMP WORKSHARE 82 90 CHARGE(1-LBLOC:0,1-LBLOC:0)=CHARGE(1,1) ! coin SW 83 91 CHARGE(1-LBLOC:0,NY+1:NY+LBLOC)=CHARGE(1,NY) ! coin NW 84 92 CHARGE(NX+1:NX+LBLOC,1-LBLOC:0)=CHARGE(NX,1) ! coin SE 85 93 CHARGE(NX+1:NX+LBLOC,NY+1:NY+LBLOC)=CHARGE(NX,NY) ! coin NE 86 94 !$OMP END WORKSHARE 95 !$OMP END PARALLEL 87 96 call litho 88 97 89 98 else 90 99 ! enfoncement local 100 !$OMP PARALLEL 101 !$OMP DO 91 102 do J=1,NY 92 103 do I=1,NX … … 100 111 end do 101 112 end do 113 !$OMP END DO 114 !$OMP END PARALLEL 102 115 endif 103 116 104 117 ! decroissance exponentielle de l'enfoncement 118 !$OMP PARALLEL 119 !$OMP DO 105 120 do J=1,NY 106 121 do I=1,NX … … 109 124 end do 110 125 end do 126 !$OMP END DO 127 !$OMP END PARALLEL 111 128 112 129 end subroutine taubed -
branches/iLoveclim/SOURCES/tracer_mod.f90
r11 r77 6 6 !-------------------------------------------------------------- 7 7 ! Position des forages dans la grille grisli. 8 ! Groenland grille GreeneemXX 8 9 ! 9 10 ! Ordre GMT : … … 29 30 use tracer_vars ! module de declaration de variables pour les traceurs 30 31 !cdc use climat_perturb_mois_mod ! on en a besoin, notamment pour NFT 31 32 ! afq, new version of tracer, does not require climat_perturb 33 32 34 implicit none 33 35 … … 51 53 integer :: time_tra ! temps traceur 52 54 53 integer :: nft ! declaration locale de NFT : a corriger plus tard pour recuperer la valeur du module climat54 real :: rappact ! pour le calcul du rapport 'accumulation : a corriger plus tard pour recuperer la valeur du module climat55 real,dimension(:),allocatable :: tpert ! temperature for climate forcing : a corriger plus tard pour recuperer la valeur du module climat56 real,dimension(:),allocatable :: TDATE ! time for climate forcing : a corriger plus tard pour recuperer la valeur du module climat57 58 55 59 56 !=============================================================== … … 69 66 real :: lambdab ! fusion basale 'artificielle' pour age des couches 70 67 real :: agemax ! age maximum de la glace (pour init_tracer) 71 68 69 integer :: pert_type ! 0 we give tpert/coeft/rappact,1 we give acc_pert only / afq 70 character(len=200) :: filforc ! nom du fichier forcage 71 character(len=200) :: filin ! variable intermediaire 72 character(len=8) :: control ! label to check clim. forc. file (filin) is usable 73 integer :: err ! pour l'allocation des tableaux 74 real :: bidon ! to skip sealevel change in fileforc 75 72 76 integer :: kk ! indice vertical pour definition de E, mais on veut conserver la valeur de k 73 77 ! real,dimension(nz) :: E ! vertical coordinate in ice, scaled to H zeta 78 79 ! on lit les parametres par namelist dorenavant 80 namelist/tracer/file_tr_dat,file_tr_out,file_tr_dep,lambdab,agemax,coefT_tra,rappact_tra,filforc,pert_type 74 81 75 82 … … 93 100 deltracer = dtt ! sorte de pas de temps du tracer - multiple de dtt ! 94 101 95 96 ! on lit les parametres par namelist dorenavant97 namelist/tracer/file_tr_dat,file_tr_out,file_tr_dep,lambdab,agemax !aurel : a ne pas oublier paramlist98 102 99 103 rewind(num_param) ! pour revenir au debut du fichier param_list.dat … … 111 115 write(num_rep_42,'(A,A)') 'tracer .out file : ', file_tr_out 112 116 write(num_rep_42,'(A,A)') 'tracer dep. file : ', file_tr_dep 117 write(num_rep_42,'(A,A)') 'lambdab : ', lambdab 118 write(num_rep_42,'(A,A)') 'agemax : ', agemax 119 write(num_rep_42,'(A,A)') 'coefT_tra : ', coefT_tra 120 write(num_rep_42,'(A,A)') 'rappact_tra : ', rappact_tra 121 write(num_rep_42,'(A,A)') 'fileforc : ', filforc 122 write(num_rep_42,'(A,A)') 'pert_type : ', pert_type 113 123 write(num_rep_42,*)'/' 114 124 write(num_rep_42,428) 'declaration des repertoires *traceurs*' … … 202 212 203 213 214 ! afq marion dufresne: 215 ! to build accucumul, we read all what is in climat_perturb here now 216 ! meaning: nft, tpert, tdate 217 ! OR if pert_type = 1 we read nft, acc_pert, tdate 218 ! acc_pert should be the ratio acc_palaeo / acc_present 219 220 filin=trim(dirforcage)//trim(filforc) 221 222 open(num_forc,file=filin,status='old') 223 224 read(num_forc,*) control,nft_tra 225 226 ! Determination of file size (line nb), allocation of perturbation array 227 if (control.ne.'nb_lines') then 228 write(6,*) filin,'indiquer le nb de ligne en debut de fichier:' 229 write(6,*) 'le nb de lignes et le label de control nb_lines' 230 stop 231 endif 232 if (.not.allocated(tdate_tra)) then 233 allocate(tdate_tra(nft_tra),stat=err) 234 if (err/=0) then 235 print *,"erreur a l'allocation du tableau Tdate",err 236 stop 4 237 end if 238 end if 239 if (.not.allocated(tpert_tra)) then 240 allocate(tpert_tra(nft_tra),stat=err) 241 if (err/=0) then 242 print *,"erreur a l'allocation du tableau Tpert",err 243 stop 4 244 end if 245 end if 246 247 do i=1,nft_tra 248 read(num_forc,*) tdate_tra(i),bidon,tpert_tra(i) 249 end do 250 close(num_forc) 251 252 204 253 2009 format(21(f12.1)) 205 254 … … 209 258 ! chaque indice d'accucumul vaut 100 ans. 210 259 ! 0 pour le present, 10 pour 1000 ans 211 allocate(accucumul(0:nft -1)); accucumul = 0.0260 allocate(accucumul(0:nft_tra-1)); accucumul = 0.0 212 261 ! watch out its size !!! 213 262 ! note: tpert(1) = tpert at -422700yr … … 217 266 ! a la rigueur je pourrais modifier le fichier d'interpolation pour 218 267 ! l'adapter a tdate 219 accucumul(nft-1) = 0. 220 221 ! todo0710 : marge d'amelioration en tenant compte des accum de depot ? 222 do k=2,nft 223 accucumul(nft-k) = accucumul(nft-k+1) + (exp(rappact * tpert(k) )) 224 end do 225 226 time_max_accu = tdate(1) 227 !print*, tdate(1), nft , nftnl, rappact 228 !print*, tdate(1), nft , rappact!, nftnl, rappact 268 accucumul(nft_tra-1) = 0. 269 270 ! todo0710 : marge d'amelioration en tenant compte des accum de depot ? 271 272 if (type_accum.eq.0) then !Tpert is given, needs to be converted in accumulation ratio 273 tpert_tra(:)=tpert_tra(:)*coefT_tra 274 do k=2,nft_tra 275 accucumul(nft_tra-k) = accucumul(nft_tra-k+1) + (exp(rappact_tra * tpert_tra(k) )) 276 end do 277 else if (type_accum.eq.1) then ! accum ration is given, nothing to do 278 do k=2,nft_tra 279 accucumul(nft_tra-k) = accucumul(nft_tra-k+1) + tpert_tra(k) 280 end do 281 else 282 write (*,*) "Problem in tracer, do you provide tpert or accpert???" 283 STOP 284 end if 285 time_max_accu = tdate_tra(1) 229 286 uxsave(:,:,:) = 0.0 230 287 uysave(:,:,:) = 0.0 … … 233 290 ydep(:,:,:)=ydepk(:,:,:) 234 291 tdep(:,:,:)=tdepk(:,:,:) 235 freezeon(:,:) = 0. ! variable added on 19/03/03 236 237 ! print*, 'tpert ',tpert(:) 238 ! print*, 'accucumul ', accucumul(:) 292 freezeon(:,:) = 0. ! variable added on 19/03/03 293 239 294 print*, 'tbegin, tend : ',tbegin, tend 240 295 … … 266 321 do i=1,nx 267 322 ! added on 16/12/03: somehow worked before too 268 if (h(i,j)>1.5) & 269 323 if (h(i,j)>1.5) & 324 uzrsave(i,j,:) = uzrsave(i,j,:) + uzr(i,j,:) *real(dtt) / h(i,j) 270 325 end do 271 326 end do … … 288 343 do j=2,ny-1 289 344 i_jj = j-1 290 345 xdep(:,1,i_jj) = xgrid(2) 291 346 xdep(:,nx-2,i_jj) = xgrid(nx-1) 292 347 ydep(:,1,i_jj) = ygrid(j) 293 348 ydep(:,nx-2,i_jj) = ygrid(j) 294 349 ! tdep(:,1,i_jj) = time_ … … 300 355 do i=2,nx-1 301 356 i_ij = i-1 302 357 xdep(:,i_ij,1) = xgrid(i) 303 358 xdep(:,i_ij,ny-2) = xgrid(i) 304 305 359 ydep(:,i_ij,1) = ygrid(2) 360 ydep(:,i_ij,ny-2) = ygrid(ny-1) 306 361 ! tdep(:,i_ij,1) = time_ 307 362 ! tdep(:,i_ij,ny-2) = time_ 308 309 363 tdep(:,i_ij,1) = time 364 tdep(:,i_ij,ny-2) = time 310 365 end do 311 366 … … 318 373 319 374 ! nl 11/03/04 320 375 if (h(i,j)<=1.5) then 321 376 xdep(:,i_ij,i_jj) = xgrid(i) 322 377 ydep(:,i_ij,i_jj) = ygrid(j) 323 378 tdep(:,i_ij,i_jj) = time 324 325 379 cycle 380 end if 326 381 freezeon(i_ij,i_jj) = max(0.0, freezeon(i_ij,i_jj)-bmelt(i,j) ) 327 382 328 383 ip = i+1 329 384 jp = j+1 … … 333 388 v_zij = uzrsave(i,j,k) 334 389 335 x_tra = xgrid(i) - v_xij 336 y_tra = ygrid(j) - v_yij 337 e_tra = e(k) - v_zij 390 x_tra = xgrid(i) - v_xij !* real(deltracer) 391 y_tra = ygrid(j) - v_yij !* real(deltracer) 392 e_tra = e(k) - v_zij !* real(deltracer) 338 393 339 394 if ((k==nz).and.(bmelt(i,j)<-1.e-4)) then ! bottom freezeon 340 395 xdep(k,i_ij,i_jj) = xgrid(i) 341 396 ydep(k,i_ij,i_jj) = ygrid(j) 342 397 if (h(i,j)>100.) then 343 398 tdep(k,i_ij,i_jj) = tdepk(k,i_ij,i_jj) - & 344 345 346 347 348 399 min( abs( (tdepk(k-1,i_ij,i_jj)-tdepk(k,i_ij,i_jj)) * & 400 bmelt(i,j) / ( ( e(k)-e(k-1) )*h(i,j) ) ), 2.) * deltracer 401 ! this added 26/03/04 so that not more 2.*deltracer new years of refreezing 402 else 403 tdep(k,i_ij,i_jj) = tdepk(k,i_ij,i_jj) 349 404 350 405 end if 351 406 !fix: need to track where freeze-on happens 352 407 ! *1.001 proven to be dumb … … 375 430 !print*,'i,j,k avt interp',i,j,k 376 431 377 call interpolate(i_ij, i_jj, k, im-1, jm-1, km, fx,fy,fz, e_tra, nft )432 call interpolate(i_ij, i_jj, k, im-1, jm-1, km, fx,fy,fz, e_tra, nft_tra) 378 433 379 434 if((tdep(k,i_ij,i_jj)<=time - 1500000.) .or. (tdep(k,i_ij,i_jj)> time )) then … … 469 524 470 525 471 472 473 474 475 476 526 !======================================================================== 477 527 !======================================================================== -
branches/iLoveclim/SOURCES/tracer_vars_mod.f90
r4 r77 25 25 integer :: nspectimes 26 26 real :: time_max_accu 27 28 ! afq marion dufresne: tracer with no climat perturb 29 ! i.e. we read the Forcage Tpert to compute past accumulation via 30 ! rappact 31 ! OR we read directly past accum (choice in namelist) 32 ! if past accum is given it will still be read with the name Tpert 33 ! the past accum given should be the ratio acc_palaeo / acc_present 34 integer :: nft_tra ! number of snapshot Tpert 35 integer :: type_accum ! Tpert is given (=0) or accpert (1) 36 real :: rappact_tra ! accumulation ratio to convert Tpert 37 real :: coeft_tra ! coeft to convert Tpert 38 real,dimension(:),allocatable :: tpert_tra ! temperature perturbation 39 real,dimension(:),allocatable :: tdate_tra ! time for Tpert 40 27 41 28 42 integer, dimension(maxspectimes) :: trout -
branches/iLoveclim/SOURCES/velocities-polyn-0.3.f90
r4 r77 23 23 ! Attention la vitesse verticale est "super reduite" 24 24 ! ========================================================================== 25 25 !$ USE OMP_LIB 26 26 use module3d_phy 27 27 !use deform_declar … … 32 32 if (itracebug.eq.1) call tracebug(' Entree dans routine SIA_velocity') 33 33 34 34 !$OMP PARALLEL 35 !$OMP DO COLLAPSE(2) 35 36 do k=1,nz 36 37 do j=2,ny-1 … … 101 102 end do 102 103 end do 103 104 !$OMP END DO 104 105 105 106 ! *************************** Z VELOCITIES ****************** 106 107 107 108 !$OMP DO 108 109 do j=2,ny-1 109 110 do i=2,nx-1 … … 144 145 end do 145 146 end do 147 !$OMP END DO 146 148 149 !$OMP DO 147 150 do j=2,ny-1 148 151 do i=2,nx-1 … … 151 154 end do 152 155 end do 153 156 !$OMP END DO 157 !$OMP END PARALLEL 154 158 155 159 end subroutine SIA_velocities -
branches/iLoveclim/SOURCES/write_datfile.f90
r4 r77 22 22 23 23 integer :: i,j ! working integers 24 integer :: lx,ly ! nxx, nyy read in the file25 26 24 27 25 open(22,file=trim(filename)) … … 55 53 56 54 integer :: i,j ! working integers 57 integer :: lx,ly ! nxx, nyy read in the file58 59 55 60 56 open(22,file=trim(filename))
Note: See TracChangeset
for help on using the changeset viewer.